diff options
author | Clark Williams <williams@redhat.com> | 2012-04-14 09:13:39 -0500 |
---|---|---|
committer | Clark Williams <williams@redhat.com> | 2012-04-14 09:13:39 -0500 |
commit | 4905660cd237e4c4ede46920851caa12739f006f (patch) | |
tree | ef37e7c9f52c9ae9c2b206658556f37d67fe43eb /drivers/iommu/amd_iommu_init.c | |
parent | 1b5e39fc18a1b8ff7ea425ce5f49307cb28a880f (diff) | |
parent | 0147c2ae9d602b5791dae30322ece475271acd10 (diff) |
Merge commit 'v3.2.15' into rt-3.2.15-rt24v3.2.15-rt24
Diffstat (limited to 'drivers/iommu/amd_iommu_init.c')
-rw-r--r-- | drivers/iommu/amd_iommu_init.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index 5c741795a0c3..20d585202a4f 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -1033,8 +1033,9 @@ static int iommu_setup_msi(struct amd_iommu *iommu) { int r; - if (pci_enable_msi(iommu->dev)) - return 1; + r = pci_enable_msi(iommu->dev); + if (r) + return r; r = request_threaded_irq(iommu->dev->irq, amd_iommu_int_handler, @@ -1044,24 +1045,33 @@ static int iommu_setup_msi(struct amd_iommu *iommu) if (r) { pci_disable_msi(iommu->dev); - return 1; + return r; } iommu->int_enabled = true; - iommu_feature_enable(iommu, CONTROL_EVT_INT_EN); return 0; } static int iommu_init_msi(struct amd_iommu *iommu) { + int ret; + if (iommu->int_enabled) - return 0; + goto enable_faults; if (pci_find_capability(iommu->dev, PCI_CAP_ID_MSI)) - return iommu_setup_msi(iommu); + ret = iommu_setup_msi(iommu); + else + ret = -ENODEV; - return 1; + if (ret) + return ret; + +enable_faults: + iommu_feature_enable(iommu, CONTROL_EVT_INT_EN); + + return 0; } /**************************************************************************** |