summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/vsmp_64.c
diff options
context:
space:
mode:
authorRavikiran G Thirumalai <kiran@scalex86.org>2008-09-23 07:58:47 +0200
committerIngo Molnar <mingo@elte.hu>2008-09-23 10:31:26 +0200
commit05e12e1c4c09cd35ac9f4e6af1e42b0036375d72 (patch)
treeb952128eccb3611e7ed2e64fec53f52c6e33c03c /arch/x86/kernel/vsmp_64.c
parentx86, oprofile: BUG scheduling while atomic (diff)
downloadlinux-05e12e1c4c09cd35ac9f4e6af1e42b0036375d72.tar.xz
linux-05e12e1c4c09cd35ac9f4e6af1e42b0036375d72.zip
x86: fix 27-rc crash on vsmp due to paravirt during module load
27-rc fails to boot up if configured to use modules. Turns out vsmp_patch was marked __init, and vsmp_patch being the pvops 'patch' routine for vsmp, a call to vsmp_patch just turns out to execute a code page with series of 0xcc (POISON_FREE_INITMEM -- int3). vsmp_patch has been marked with __init ever since pvops, however, apply_paravirt can be called during module load causing calls to freed memory location. Since apply_paravirt can only be called during init/module load, make vsmp_patch with "__init_or_module" Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/vsmp_64.c')
-rw-r--r--arch/x86/kernel/vsmp_64.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
index 0c029e8959c7..7766d36983fc 100644
--- a/arch/x86/kernel/vsmp_64.c
+++ b/arch/x86/kernel/vsmp_64.c
@@ -61,7 +61,7 @@ static void vsmp_irq_enable(void)
native_restore_fl((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC));
}
-static unsigned __init vsmp_patch(u8 type, u16 clobbers, void *ibuf,
+static unsigned __init_or_module vsmp_patch(u8 type, u16 clobbers, void *ibuf,
unsigned long addr, unsigned len)
{
switch (type) {