x86-32: Handle exception table entries during early boot
authorH. Peter Anvin <hpa@zytor.com>
Thu, 19 Apr 2012 00:16:50 +0000 (17:16 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Thu, 19 Apr 2012 23:45:02 +0000 (16:45 -0700)
commit4c5023a3fa2ec12b7ed313b276b157917575745b
treebcb10d699ab61f67f332ee5356a494dc47701e51
parent9900aa2f95844eb81428c1d3d202c01b7f3ac77a
x86-32: Handle exception table entries during early boot

If we get an exception during early boot, walk the exception table to
see if we should intercept it.  The main use case for this is to allow
rdmsr_safe()/wrmsr_safe() during CPU initialization.

Since the exception table is currently sorted at runtime, and fairly
late in startup, this code walks the exception table linearly.  We
obviously don't need to worry about modules, however: none have been
loaded at this point.

This patch changes the early IDT setup to look a lot more like x86-64:
we now install handlers for all 32 exception vectors.  The output of
the early exception handler has changed somewhat as it directly
reflects the stack frame of the exception handler, and the stack frame
has been somewhat restructured.

Finally, centralize the code that can and should be run only once.

[ v2: Use early_fixup_exception() instead of linear search ]

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Link: http://lkml.kernel.org/r/1334794610-5546-6-git-send-email-hpa@zytor.com
arch/x86/kernel/head_32.S