lguest: handle traps on the "interrupt suppressed" iret instruction.
authorRusty Russell <rusty@rustcorp.com.au>
Wed, 1 Apr 2015 03:02:20 +0000 (13:32 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 1 Apr 2015 04:07:15 +0000 (14:37 +1030)
commit3eebd233fcb392286d385e764eb91e90d6218cdf
treee3e1eb107605792e28ddb26db668bab580b9c625
parent012665391dfe12bf8a88d1000e627be012c39dbf
lguest: handle traps on the "interrupt suppressed" iret instruction.

Lguest's "iret" is non-atomic, as it needs to restore the interrupt
state before the real iret (the guest can't actually suppress
interrupts).  For this reason, the host discards an interrupt if it
occurs in this (1-instruction) window.

We can do better, by emulating the iret execution, then immediately
setting up the interrupt handler.  In fact, we don't need to do much,
as emulating the iret and setting up th stack for the interrupt handler
basically cancel each other out.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/lguest/interrupts_and_traps.c