xen/x86: Implement enable_nmis() in C

I don't recall why I chose to implement this in assembly to begin with, but
it can happily live in a static inline instead, and only has two callers.

Doing so reduces the quantity of code in .text.entry.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2018-03-15 17:40:41 +00:00
1 parent 6227a40f67
commit 7e9b3599f5
2 files changed
+17 -17

No files matched your search

-16
View File
@@ -854,22 +854,6 @@ ENTRY(machine_check)
movl $TRAP_machine_check,4(%rsp)
jmp handle_ist_exception
/* Enable NMIs. No special register assumptions. Only %rax is not preserved. */
ENTRY(enable_nmis)
movq %rsp, %rax /* Grab RSP before pushing */
/* Set up stack frame */
pushq $0 /* SS */
pushq %rax /* RSP */
pushfq /* RFLAGS */
pushq $__HYPERVISOR_CS /* CS */
leaq 1f(%rip),%rax
pushq %rax /* RIP */
iretq /* Disable the hardware NMI latch */
1:
retq
/* No op trap handler. Required for kexec crash path. */
GLOBAL(trap_nop)
iretq
+17 -1
View File
@@ -498,7 +498,23 @@ DECLARE_TRAP_HANDLER(entry_int82);
#undef DECLARE_TRAP_HANDLER
void trap_nop(void);
void enable_nmis(void);
static inline void enable_nmis(void)
{
unsigned long tmp;
asm volatile ( "mov %%rsp, %[tmp] \n\t"
"push %[ss] \n\t"
"push %[tmp] \n\t"
"pushf \n\t"
"push %[cs] \n\t"
"lea 1f(%%rip), %[tmp] \n\t"
"push %[tmp] \n\t"
"iretq; 1: \n\t"
: [tmp] "=&r" (tmp)
: [ss] "i" (__HYPERVISOR_DS),
[cs] "i" (__HYPERVISOR_CS) );
}
void sysenter_entry(void);
void sysenter_eflags_saved(void);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.