iommu, x86: Provide irq_remapping_cap() interface
authorFeng Wu <feng.wu@intel.com>
Tue, 9 Jun 2015 05:20:36 +0000 (13:20 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 12 Jun 2015 09:33:52 +0000 (11:33 +0200)
Add a new interface irq_remapping_cap() to detect whether irq
remapping supports new features, such as VT-d Posted-Interrupts.

Export the function, so that KVM code can check this and use this
mechanism properly.

Signed-off-by: Feng Wu <feng.wu@intel.com>
Reviewed-by: Jiang Liu <jiang.liu@linux.intel.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Joerg Roedel <joro@8bytes.org>
Cc: iommu@lists.linux-foundation.org
Cc: dwmw2@infradead.org
Link: http://lkml.kernel.org/r/1433827237-3382-10-git-send-email-feng.wu@intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/include/asm/irq_remapping.h
drivers/iommu/irq_remapping.c

index e479fbda55cf5c26882e46eab7acc5cd2a4bbd4c..046c7fb1ca4332ef19044f5a482c1d0a3e3fc632 100644 (file)
@@ -35,6 +35,7 @@ enum irq_remap_cap {
 
 #ifdef CONFIG_IRQ_REMAP
 
+extern bool irq_remapping_cap(enum irq_remap_cap cap);
 extern void set_irq_remapping_broken(void);
 extern int irq_remapping_prepare(void);
 extern int irq_remapping_enable(void);
@@ -64,6 +65,7 @@ struct vcpu_data {
 
 #else  /* CONFIG_IRQ_REMAP */
 
+static inline bool irq_remapping_cap(enum irq_remap_cap cap) { return 0; }
 static inline void set_irq_remapping_broken(void) { }
 static inline int irq_remapping_prepare(void) { return -ENODEV; }
 static inline int irq_remapping_enable(void) { return -ENODEV; }
index ed605a924ca20ff9276b9952666792bf212b5564..2d9993062ded6b2d543c89a9c09c3e6a85dfb17f 100644 (file)
@@ -81,6 +81,15 @@ void set_irq_remapping_broken(void)
        irq_remap_broken = 1;
 }
 
+bool irq_remapping_cap(enum irq_remap_cap cap)
+{
+       if (!remap_ops || disable_irq_post)
+               return 0;
+
+       return (remap_ops->capability & (1 << cap));
+}
+EXPORT_SYMBOL_GPL(irq_remapping_cap);
+
 int __init irq_remapping_prepare(void)
 {
        if (disable_irq_remap)