diff options
| -rw-r--r-- | arch/x86/include/asm/amd_iommu_proto.h | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/amd_iommu.c | 7 | ||||
| -rw-r--r-- | arch/x86/kernel/amd_iommu_init.c | 9 | 
3 files changed, 12 insertions, 5 deletions
diff --git a/arch/x86/include/asm/amd_iommu_proto.h b/arch/x86/include/asm/amd_iommu_proto.h index a4ae6c3875e..55d95eb789b 100644 --- a/arch/x86/include/asm/amd_iommu_proto.h +++ b/arch/x86/include/asm/amd_iommu_proto.h @@ -23,6 +23,7 @@  extern int amd_iommu_init_dma_ops(void);  extern int amd_iommu_init_passthrough(void); +extern irqreturn_t amd_iommu_int_thread(int irq, void *data);  extern irqreturn_t amd_iommu_int_handler(int irq, void *data);  extern void amd_iommu_apply_erratum_63(u16 devid);  extern void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu); diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index dc5dddafe5c..873e7e1ead7 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c @@ -366,7 +366,7 @@ static void iommu_poll_events(struct amd_iommu *iommu)  	spin_unlock_irqrestore(&iommu->lock, flags);  } -irqreturn_t amd_iommu_int_handler(int irq, void *data) +irqreturn_t amd_iommu_int_thread(int irq, void *data)  {  	struct amd_iommu *iommu; @@ -376,6 +376,11 @@ irqreturn_t amd_iommu_int_handler(int irq, void *data)  	return IRQ_HANDLED;  } +irqreturn_t amd_iommu_int_handler(int irq, void *data) +{ +	return IRQ_WAKE_THREAD; +} +  /****************************************************************************   *   * IOMMU command queuing functions diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c index 28b07813368..9179c21120a 100644 --- a/arch/x86/kernel/amd_iommu_init.c +++ b/arch/x86/kernel/amd_iommu_init.c @@ -1034,10 +1034,11 @@ static int iommu_setup_msi(struct amd_iommu *iommu)  	if (pci_enable_msi(iommu->dev))  		return 1; -	r = request_irq(iommu->dev->irq, amd_iommu_int_handler, -			IRQF_SAMPLE_RANDOM, -			"AMD-Vi", -			NULL); +	r = request_threaded_irq(iommu->dev->irq, +				 amd_iommu_int_handler, +				 amd_iommu_int_thread, +				 0, "AMD-Vi", +				 iommu->dev);  	if (r) {  		pci_disable_msi(iommu->dev);  |