[kvm-unit-tests RFC PATCH 11/17] x86 TDX: Add a formal IPI handler

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Current IPI handler may currupts cpu context, it's not an big
issue as AP only enable interrupt in idle loop.

But in TD-guest, hlt instruction is simulated though tdvmcall
in #VE handler. IPI will currupt #VE context.

Save and restore cpu context in IPI handler to avoid crash.

Signed-off-by: Zhenzhong Duan <zhenzhong.duan@xxxxxxxxx>
Reviewed-by: Yu Zhang <yu.c.zhang@xxxxxxxxx>
---
 lib/x86/smp.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/lib/x86/smp.c b/lib/x86/smp.c
index 2ac0ef74f264..8a37143c6d78 100644
--- a/lib/x86/smp.c
+++ b/lib/x86/smp.c
@@ -39,12 +39,20 @@ static __attribute__((used)) void ipi(void)
 
 asm (
      "ipi_entry: \n"
-     "   call ipi \n"
-#ifndef __x86_64__
-     "   iret"
-#else
-     "   iretq"
+#ifdef __x86_64__
+     "push %r15; push %r14; push %r13; push %r12 \n\t"
+     "push %r11; push %r10; push %r9; push %r8 \n\t"
 #endif
+     "push %"R "di; push %"R "si; push %"R "bp; \n\t"
+     "push %"R "bx; push %"R "dx; push %"R "cx; push %"R "ax \n\t"
+     "call ipi \n\t"
+     "pop %"R "ax; pop %"R "cx; pop %"R "dx; pop %"R "bx \n\t"
+     "pop %"R "bp; pop %"R "si; pop %"R "di \n\t"
+#ifdef __x86_64__
+     "pop %r8; pop %r9; pop %r10; pop %r11 \n\t"
+     "pop %r12; pop %r13; pop %r14; pop %r15 \n\t"
+#endif
+     "iret"W" \n\t"
      );
 
 int cpu_count(void)
-- 
2.25.1




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux