aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lguest/lguest_asm.S
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/lguest/lguest_asm.S')
-rw-r--r--drivers/lguest/lguest_asm.S14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/lguest/lguest_asm.S b/drivers/lguest/lguest_asm.S
index 3126ae923cc0..f182c6a36209 100644
--- a/drivers/lguest/lguest_asm.S
+++ b/drivers/lguest/lguest_asm.S
@@ -39,6 +39,20 @@ LGUEST_PATCH(pushf, movl lguest_data+LGUEST_DATA_irq_enabled, %eax)
39.global lguest_noirq_start 39.global lguest_noirq_start
40.global lguest_noirq_end 40.global lguest_noirq_end
41 41
42/*M:004 When the Host reflects a trap or injects an interrupt into the Guest,
43 * it sets the eflags interrupt bit on the stack based on
44 * lguest_data.irq_enabled, so the Guest iret logic does the right thing when
45 * restoring it. However, when the Host sets the Guest up for direct traps,
46 * such as system calls, the processor is the one to push eflags onto the
47 * stack, and the interrupt bit will be 1 (in reality, interrupts are always
48 * enabled in the Guest).
49 *
50 * This turns out to be harmless: the only trap which should happen under Linux
51 * with interrupts disabled is Page Fault (due to our lazy mapping of vmalloc
52 * regions), which has to be reflected through the Host anyway. If another
53 * trap *does* go off when interrupts are disabled, the Guest will panic, and
54 * we'll never get to this iret! :*/
55
42/*G:045 There is one final paravirt_op that the Guest implements, and glancing 56/*G:045 There is one final paravirt_op that the Guest implements, and glancing
43 * at it you can see why I left it to last. It's *cool*! It's in *assembler*! 57 * at it you can see why I left it to last. It's *cool*! It's in *assembler*!
44 * 58 *