-
- Downloads
x86: fix math_emu register frame access
do_device_not_available() is the handler for #NM and it declares that it takes a unsigned long and calls math_emu(), which takes a long argument and surprisingly expects the stack frame starting at the zero argument would match struct math_emu_info, which isn't true regardless of configuration in the current code. This patch makes do_device_not_available() take struct pt_regs like other exception handlers and initialize struct math_emu_info with pointer to it and pass pointer to the math_emu_info to math_emulate() like normal C functions do. This way, unless gcc makes a copy of struct pt_regs in do_device_not_available(), the register frame is correctly accessed regardless of kernel configuration or compiler used. This doesn't fix all math_emu problems but it at least gets it somewhat working. Signed-off-by:Tejun Heo <tj@kernel.org> Signed-off-by:
Ingo Molnar <mingo@elte.hu>
Showing
- arch/x86/include/asm/math_emu.h 2 additions, 2 deletionsarch/x86/include/asm/math_emu.h
- arch/x86/include/asm/traps.h 2 additions, 2 deletionsarch/x86/include/asm/traps.h
- arch/x86/kernel/traps.c 9 additions, 6 deletionsarch/x86/kernel/traps.c
- arch/x86/math-emu/fpu_entry.c 2 additions, 2 deletionsarch/x86/math-emu/fpu_entry.c
- arch/x86/math-emu/fpu_proto.h 1 addition, 1 deletionarch/x86/math-emu/fpu_proto.h
- arch/x86/math-emu/fpu_system.h 6 additions, 10 deletionsarch/x86/math-emu/fpu_system.h
- arch/x86/math-emu/get_address.c 33 additions, 33 deletionsarch/x86/math-emu/get_address.c
Loading
Please register or sign in to comment