Allow command line opt-out posted MSI under CONFIG_X86_POSTED_MSI=y. And add a helper function for testing if posted MSI is supported on the CPU side. Signed-off-by: Jacob Pan <jacob.jun.pan@xxxxxxxxxxxxxxx> --- arch/x86/include/asm/irq_remapping.h | 11 +++++++++++ drivers/iommu/irq_remapping.c | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/arch/x86/include/asm/irq_remapping.h b/arch/x86/include/asm/irq_remapping.h index 7a2ed154a5e1..706f58900962 100644 --- a/arch/x86/include/asm/irq_remapping.h +++ b/arch/x86/include/asm/irq_remapping.h @@ -50,6 +50,17 @@ static inline struct irq_domain *arch_get_ir_parent_domain(void) return x86_vector_domain; } +#ifdef CONFIG_X86_POSTED_MSI +extern unsigned int posted_msi_off; + +static inline bool posted_msi_supported(void) +{ + return !posted_msi_off && irq_remapping_cap(IRQ_POSTING_CAP); +} +#else +static inline bool posted_msi_supported(void) { return false; }; +#endif + #else /* CONFIG_IRQ_REMAP */ static inline bool irq_remapping_cap(enum irq_remap_cap cap) { return 0; } diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c index 83314b9d8f38..00de6963bb07 100644 --- a/drivers/iommu/irq_remapping.c +++ b/drivers/iommu/irq_remapping.c @@ -24,6 +24,23 @@ int no_x2apic_optout; int disable_irq_post = 0; +#ifdef CONFIG_X86_POSTED_MSI + +unsigned int posted_msi_off; + +static int __init cmdl_posted_msi_off(char *str) +{ + int value = 0; + + get_option(&str, &value); + posted_msi_off = value; + + return 1; +} + +__setup("posted_msi_off=", cmdl_posted_msi_off); +#endif + static int disable_irq_remap; static struct irq_remap_ops *remap_ops; -- 2.25.1