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

[Xen-devel] [PATCH 5/5] DO-NOT-APPLY - Demonstrates an NMI hitting an in-progress patch



---
 xen/arch/x86/alternative.c  | 15 +++++++++++++++
 xen/arch/x86/x86_64/entry.S |  4 ++++
 2 files changed, 19 insertions(+)

diff --git a/xen/arch/x86/alternative.c b/xen/arch/x86/alternative.c
index 40bfaad..10e423c 100644
--- a/xen/arch/x86/alternative.c
+++ b/xen/arch/x86/alternative.c
@@ -138,6 +138,9 @@ static init_or_livepatch_data struct live_poke_info {
     unsigned int cpu;
 } live_poke_info;
 
+extern void nmi_patch_point(void);
+#include <asm/apic.h>
+
 /*
  * text_poke_live - Update the live .text area, in an interrupt-safe way.
  *
@@ -197,6 +200,18 @@ bool init_or_livepatch text_poke_live(const struct 
cpu_user_regs *regs)
     smp_wmb();
     /* Second, copy the remaining instructions into place. */
     memcpy(i->addr + 1, i->opcode + 1, i->len - 1);
+
+    if ( _p(i->addr) == _p(nmi_patch_point) )
+    {
+        if ( !regs )
+        {
+            printk("Found NMI patch point\n");
+            apic_icr_write(APIC_DEST_SELF | APIC_DM_NMI, 0);
+        }
+        else
+            printk("Hit debugtrap in NMI\n");
+    }
+
     smp_wmb();
     /* Third, replace the breakpoint with the real instruction byte. */
     i->addr[0] = i->opcode[0];
diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S
index 56f52c7..1337562 100644
--- a/xen/arch/x86/x86_64/entry.S
+++ b/xen/arch/x86/x86_64/entry.S
@@ -790,6 +790,10 @@ ENTRY(early_page_fault)
 ENTRY(nmi)
         pushq $0
         movl  $TRAP_nmi,4(%rsp)
+
+GLOBAL(nmi_patch_point)
+        ALTERNATIVE __stringify(ASM_NOP3), "lfence", X86_FEATURE_ALWAYS
+
 handle_ist_exception:
         SAVE_ALL CLAC
 
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.