kaiser: fix regs to do_nmi() ifndef CONFIG_KAISER
pjt has observed that nmi's second (nmi_from_kernel) call to do_nmi() adjusted the %rdi regs arg, rightly when CONFIG_KAISER, but wrongly when not CONFIG_KAISER. Although the minimal change is to add an #ifdef CONFIG_KAISER around the addq line, that looks cluttered, and I prefer how the first call to do_nmi() handled it: prepare args in %rdi and %rsi before getting into the CONFIG_KAISER block, since it does not touch them at all. And while we're here, place the "#ifdef CONFIG_KAISER" that follows each, to enclose the "Unconditionally restore CR3" comment: matching how the "Unconditionally use kernel CR3" comment above is enclosed. Signed-off-by: Hugh Dickins <hughd@google.com> Acked-by: Jiri Kosina <jkosina@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d94df20135
commit
487f0b73d8
@ -1297,12 +1297,13 @@ ENTRY(nmi)
|
||||
movq %rax, %cr3
|
||||
#endif
|
||||
call do_nmi
|
||||
|
||||
#ifdef CONFIG_KAISER
|
||||
/*
|
||||
* Unconditionally restore CR3. I know we return to
|
||||
* kernel code that needs user CR3, but do we ever return
|
||||
* to "user mode" where we need the kernel CR3?
|
||||
*/
|
||||
#ifdef CONFIG_KAISER
|
||||
popq %rax
|
||||
mov %rax, %cr3
|
||||
#endif
|
||||
@ -1526,6 +1527,8 @@ end_repeat_nmi:
|
||||
SWAPGS
|
||||
xorl %ebx, %ebx
|
||||
1:
|
||||
movq %rsp, %rdi
|
||||
movq $-1, %rsi
|
||||
#ifdef CONFIG_KAISER
|
||||
/* Unconditionally use kernel CR3 for do_nmi() */
|
||||
/* %rax is saved above, so OK to clobber here */
|
||||
@ -1538,16 +1541,14 @@ end_repeat_nmi:
|
||||
#endif
|
||||
|
||||
/* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */
|
||||
movq %rsp, %rdi
|
||||
addq $8, %rdi /* point %rdi at ptregs, fixed up for CR3 */
|
||||
movq $-1, %rsi
|
||||
call do_nmi
|
||||
|
||||
#ifdef CONFIG_KAISER
|
||||
/*
|
||||
* Unconditionally restore CR3. We might be returning to
|
||||
* kernel code that needs user CR3, like just just before
|
||||
* a sysret.
|
||||
*/
|
||||
#ifdef CONFIG_KAISER
|
||||
popq %rax
|
||||
mov %rax, %cr3
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user