#define KVM_IRQCHIP_NUM_PINS  KVM_IOAPIC_NUM_PINS
 
 /* x86-specific vcpu->requests bit members */
-#define KVM_REQ_MIGRATE_TIMER      8
-#define KVM_REQ_REPORT_TPR_ACCESS  9
-#define KVM_REQ_TRIPLE_FAULT      10
-#define KVM_REQ_MMU_SYNC          11
-#define KVM_REQ_CLOCK_UPDATE      12
-#define KVM_REQ_EVENT             14
-#define KVM_REQ_APF_HALT          15
-#define KVM_REQ_STEAL_UPDATE      16
-#define KVM_REQ_NMI               17
-#define KVM_REQ_PMU               18
-#define KVM_REQ_PMI               19
-#define KVM_REQ_SMI               20
-#define KVM_REQ_MASTERCLOCK_UPDATE 21
-#define KVM_REQ_MCLOCK_INPROGRESS (22 | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
-#define KVM_REQ_SCAN_IOAPIC       (23 | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
-#define KVM_REQ_GLOBAL_CLOCK_UPDATE 24
-#define KVM_REQ_APIC_PAGE_RELOAD  (25 | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
-#define KVM_REQ_HV_CRASH          26
-#define KVM_REQ_IOAPIC_EOI_EXIT   27
-#define KVM_REQ_HV_RESET          28
-#define KVM_REQ_HV_EXIT           29
-#define KVM_REQ_HV_STIMER         30
+#define KVM_REQ_MIGRATE_TIMER          KVM_ARCH_REQ(0)
+#define KVM_REQ_REPORT_TPR_ACCESS      KVM_ARCH_REQ(1)
+#define KVM_REQ_TRIPLE_FAULT           KVM_ARCH_REQ(2)
+#define KVM_REQ_MMU_SYNC               KVM_ARCH_REQ(3)
+#define KVM_REQ_CLOCK_UPDATE           KVM_ARCH_REQ(4)
+#define KVM_REQ_EVENT                  KVM_ARCH_REQ(6)
+#define KVM_REQ_APF_HALT               KVM_ARCH_REQ(7)
+#define KVM_REQ_STEAL_UPDATE           KVM_ARCH_REQ(8)
+#define KVM_REQ_NMI                    KVM_ARCH_REQ(9)
+#define KVM_REQ_PMU                    KVM_ARCH_REQ(10)
+#define KVM_REQ_PMI                    KVM_ARCH_REQ(11)
+#define KVM_REQ_SMI                    KVM_ARCH_REQ(12)
+#define KVM_REQ_MASTERCLOCK_UPDATE     KVM_ARCH_REQ(13)
+#define KVM_REQ_MCLOCK_INPROGRESS \
+       KVM_ARCH_REQ_FLAGS(14, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
+#define KVM_REQ_SCAN_IOAPIC \
+       KVM_ARCH_REQ_FLAGS(15, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
+#define KVM_REQ_GLOBAL_CLOCK_UPDATE    KVM_ARCH_REQ(16)
+#define KVM_REQ_APIC_PAGE_RELOAD \
+       KVM_ARCH_REQ_FLAGS(17, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
+#define KVM_REQ_HV_CRASH               KVM_ARCH_REQ(18)
+#define KVM_REQ_IOAPIC_EOI_EXIT                KVM_ARCH_REQ(19)
+#define KVM_REQ_HV_RESET               KVM_ARCH_REQ(20)
+#define KVM_REQ_HV_EXIT                        KVM_ARCH_REQ(21)
+#define KVM_REQ_HV_STIMER              KVM_ARCH_REQ(22)
 
 #define CR0_RESERVED_BITS                                               \
        (~(unsigned long)(X86_CR0_PE | X86_CR0_MP | X86_CR0_EM | X86_CR0_TS \
 
 #define KVM_REQ_MMU_RELOAD        (1 | KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
 #define KVM_REQ_PENDING_TIMER     2
 #define KVM_REQ_UNHALT            3
+#define KVM_REQUEST_ARCH_BASE     8
+
+#define KVM_ARCH_REQ_FLAGS(nr, flags) ({ \
+       BUILD_BUG_ON((unsigned)(nr) >= 32 - KVM_REQUEST_ARCH_BASE); \
+       (unsigned)(((nr) + KVM_REQUEST_ARCH_BASE) | (flags)); \
+})
+#define KVM_ARCH_REQ(nr)           KVM_ARCH_REQ_FLAGS(nr, 0)
 
 #define KVM_USERSPACE_IRQ_SOURCE_ID            0
 #define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID       1