[PATCH] x86: Drop {nmi,mce}_pending defines

Andrew Cooper posted 1 patch 2 days, 13 hours ago
xen/arch/x86/cpu/mcheck/vmce.c    | 2 +-
xen/arch/x86/cpu/vpmu.c           | 2 +-
xen/arch/x86/domain.c             | 2 +-
xen/arch/x86/domctl.c             | 2 +-
xen/arch/x86/hvm/irq.c            | 8 ++++----
xen/arch/x86/hvm/vioapic.c        | 2 +-
xen/arch/x86/hvm/vlapic.c         | 2 +-
xen/arch/x86/include/asm/domain.h | 3 ---
xen/arch/x86/nmi.c                | 2 +-
xen/arch/x86/pv/callback.c        | 2 +-
xen/arch/x86/pv/traps.c           | 2 +-
xen/arch/x86/x86_64/asm-offsets.c | 4 ++--
12 files changed, 15 insertions(+), 18 deletions(-)
[PATCH] x86: Drop {nmi,mce}_pending defines
Posted by Andrew Cooper 2 days, 13 hours ago
These obscure the data layout in v->arch, and prevent using the names for
other variables.

Expand the defines in place.  No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <jbeulich@suse.com>
CC: Roger Pau Monné <roger@xenproject.org>
CC: Teddy Astie <teddy.astie@vates.tech>

The {nmi,mce}_state defines are rude too, but that involves more unpicking
than I have time for right now.
---
 xen/arch/x86/cpu/mcheck/vmce.c    | 2 +-
 xen/arch/x86/cpu/vpmu.c           | 2 +-
 xen/arch/x86/domain.c             | 2 +-
 xen/arch/x86/domctl.c             | 2 +-
 xen/arch/x86/hvm/irq.c            | 8 ++++----
 xen/arch/x86/hvm/vioapic.c        | 2 +-
 xen/arch/x86/hvm/vlapic.c         | 2 +-
 xen/arch/x86/include/asm/domain.h | 3 ---
 xen/arch/x86/nmi.c                | 2 +-
 xen/arch/x86/pv/callback.c        | 2 +-
 xen/arch/x86/pv/traps.c           | 2 +-
 xen/arch/x86/x86_64/asm-offsets.c | 4 ++--
 12 files changed, 15 insertions(+), 18 deletions(-)

diff --git a/xen/arch/x86/cpu/mcheck/vmce.c b/xen/arch/x86/cpu/mcheck/vmce.c
index 1a7e92506ac8..2b7ec6737d20 100644
--- a/xen/arch/x86/cpu/mcheck/vmce.c
+++ b/xen/arch/x86/cpu/mcheck/vmce.c
@@ -410,7 +410,7 @@ int inject_vmce(struct domain *d, int vcpu)
 
         if ( (is_hvm_domain(d) ||
               pv_trap_callback_registered(v, X86_EXC_MC)) &&
-             !test_and_set_bool(v->arch.mce_pending) )
+             !test_and_set_bool(v->arch.mce_state.pending) )
         {
             mce_printk(MCE_VERBOSE, "MCE: inject vMCE to %pv\n", v);
             vcpu_kick(v);
diff --git a/xen/arch/x86/cpu/vpmu.c b/xen/arch/x86/cpu/vpmu.c
index e0f7edded3d7..5cc854d71ce3 100644
--- a/xen/arch/x86/cpu/vpmu.c
+++ b/xen/arch/x86/cpu/vpmu.c
@@ -316,7 +316,7 @@ void vpmu_do_interrupt(void)
         vlapic_set_irq(vlapic, vlapic_lvtpc & APIC_VECTOR_MASK, 0);
         break;
     case APIC_DM_NMI:
-        sampling->arch.nmi_pending = true;
+        sampling->arch.nmi_state.pending = true;
         break;
     }
 #endif
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 368e4deff375..f8e31cdc5791 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -1684,7 +1684,7 @@ long do_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( !guest_handle_is_null(arg) )
             return -EINVAL;
 
-        if ( !test_and_set_bool(v->arch.nmi_pending) )
+        if ( !test_and_set_bool(v->arch.nmi_state.pending) )
             vcpu_kick(v);
         break;
 
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 1e0051070211..12c14bb3f514 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -584,7 +584,7 @@ long arch_do_domctl(
         {
         case XEN_DOMCTL_SENDTRIGGER_NMI:
             ret = 0;
-            if ( !test_and_set_bool(v->arch.nmi_pending) )
+            if ( !test_and_set_bool(v->arch.nmi_state.pending) )
                 vcpu_kick(v);
             break;
 
diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c
index 5f643611130f..18f05b6247fd 100644
--- a/xen/arch/x86/hvm/irq.c
+++ b/xen/arch/x86/hvm/irq.c
@@ -522,10 +522,10 @@ struct hvm_intack hvm_vcpu_has_pending_irq(struct vcpu *v)
      */
     hvm_sync_pir_to_irr(v);
 
-    if ( unlikely(v->arch.nmi_pending) )
+    if ( unlikely(v->arch.nmi_state.pending) )
         return hvm_intack_nmi;
 
-    if ( unlikely(v->arch.mce_pending) )
+    if ( unlikely(v->arch.mce_state.pending) )
         return hvm_intack_mce;
 
     if ( (plat->irq->callback_via_type == HVMIRQ_callback_vector)
@@ -550,11 +550,11 @@ struct hvm_intack hvm_vcpu_ack_pending_irq(
     switch ( intack.source )
     {
     case hvm_intsrc_nmi:
-        if ( !test_and_clear_bool(v->arch.nmi_pending) )
+        if ( !test_and_clear_bool(v->arch.nmi_state.pending) )
             intack = hvm_intack_none;
         break;
     case hvm_intsrc_mce:
-        if ( !test_and_clear_bool(v->arch.mce_pending) )
+        if ( !test_and_clear_bool(v->arch.mce_state.pending) )
             intack = hvm_intack_none;
         break;
     case hvm_intsrc_pic:
diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c
index b633f1523250..995fae7b3c0f 100644
--- a/xen/arch/x86/hvm/vioapic.c
+++ b/xen/arch/x86/hvm/vioapic.c
@@ -475,7 +475,7 @@ static void vioapic_deliver(struct hvm_vioapic *vioapic, unsigned int pin)
         for_each_vcpu ( d, v )
             if ( vlapic_match_dest(vcpu_vlapic(v), NULL,
                                    0, dest, dest_mode) &&
-                 !test_and_set_bool(v->arch.nmi_pending) )
+                 !test_and_set_bool(v->arch.nmi_state.pending) )
                 vcpu_kick(v);
         break;
     }
diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c
index 0d7231c45b68..6698779e227c 100644
--- a/xen/arch/x86/hvm/vlapic.c
+++ b/xen/arch/x86/hvm/vlapic.c
@@ -356,7 +356,7 @@ static void vlapic_accept_irq(struct vcpu *v, uint32_t icr_low)
         break;
 
     case APIC_DM_NMI:
-        if ( !test_and_set_bool(v->arch.nmi_pending) )
+        if ( !test_and_set_bool(v->arch.nmi_state.pending) )
         {
             bool wake = false;
 
diff --git a/xen/arch/x86/include/asm/domain.h b/xen/arch/x86/include/asm/domain.h
index 2d0a91541034..634d0710bfc2 100644
--- a/xen/arch/x86/include/asm/domain.h
+++ b/xen/arch/x86/include/asm/domain.h
@@ -47,9 +47,6 @@ unsigned int arch_domain_struct_memflags(void);
 #define nmi_state              async_exception_state(VCPU_TRAP_NMI)
 #define mce_state              async_exception_state(VCPU_TRAP_MCE)
 
-#define nmi_pending            nmi_state.pending
-#define mce_pending            mce_state.pending
-
 struct trap_bounce {
     uint32_t      error_code;
     uint8_t       flags; /* TBF_ */
diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index b3d18270b13a..3a94471037bd 100644
--- a/xen/arch/x86/nmi.c
+++ b/xen/arch/x86/nmi.c
@@ -522,7 +522,7 @@ static void cf_check do_nmi_stats(unsigned char key)
     if ( !hardware_domain || !(v = domain_vcpu(hardware_domain, 0)) )
         return;
 
-    pend = v->arch.nmi_pending;
+    pend = v->arch.nmi_state.pending;
     mask = v->arch.async_exception_mask & (1 << VCPU_TRAP_NMI);
     if ( pend || mask )
         printk("%pv: NMI%s%s\n",
diff --git a/xen/arch/x86/pv/callback.c b/xen/arch/x86/pv/callback.c
index 38b819b56626..29370a68ce15 100644
--- a/xen/arch/x86/pv/callback.c
+++ b/xen/arch/x86/pv/callback.c
@@ -35,7 +35,7 @@ static int register_guest_nmi_callback(unsigned long address)
      * now.
      */
     if ( curr->vcpu_id == 0 && arch_get_nmi_reason(d) != 0 )
-        curr->arch.nmi_pending = true;
+        curr->arch.nmi_state.pending = true;
 
     return 0;
 }
diff --git a/xen/arch/x86/pv/traps.c b/xen/arch/x86/pv/traps.c
index 21a1f4b7174a..b817b5b29604 100644
--- a/xen/arch/x86/pv/traps.c
+++ b/xen/arch/x86/pv/traps.c
@@ -199,7 +199,7 @@ int pv_raise_nmi(struct vcpu *v)
 
     if ( cmpxchgptr(v_ptr, NULL, v) )
         return -EBUSY;
-    if ( !test_and_set_bool(v->arch.nmi_pending) )
+    if ( !test_and_set_bool(v->arch.nmi_state.pending) )
     {
         /* Not safe to wake up a vcpu here */
         raise_softirq(NMI_SOFTIRQ);
diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-offsets.c
index 3bc0f06c2ead..ce5e7aae16cd 100644
--- a/xen/arch/x86/x86_64/asm-offsets.c
+++ b/xen/arch/x86/x86_64/asm-offsets.c
@@ -110,9 +110,9 @@ void __dummy__(void)
     OFFSET(VCPU_guest_context_flags, struct vcpu, arch.pv.vgc_flags);
     OFFSET(VCPU_cr3, struct vcpu, arch.cr3);
     OFFSET(VCPU_arch_msrs, struct vcpu, arch.msrs);
-    OFFSET(VCPU_nmi_pending, struct vcpu, arch.nmi_pending);
-    OFFSET(VCPU_mce_pending, struct vcpu, arch.mce_pending);
+    OFFSET(VCPU_nmi_pending, struct vcpu, arch.nmi_state.pending);
     OFFSET(VCPU_nmi_old_mask, struct vcpu, arch.nmi_state.old_mask);
+    OFFSET(VCPU_mce_pending, struct vcpu, arch.mce_state.pending);
     OFFSET(VCPU_mce_old_mask, struct vcpu, arch.mce_state.old_mask);
     OFFSET(VCPU_async_exception_mask, struct vcpu, arch.async_exception_mask);
     DEFINE(VCPU_TRAP_NMI, VCPU_TRAP_NMI);
-- 
2.39.5


Re: [PATCH] x86: Drop {nmi,mce}_pending defines
Posted by Jan Beulich 1 day, 22 hours ago
On 02.11.2026 18:40, Andrew Cooper wrote:
> These obscure the data layout in v->arch, and prevent using the names for
> other variables.
> 
> Expand the defines in place.  No functional change.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>