From 41d8a01f28ba938db00d8d12a7b4a8149ad7f230 Mon Sep 17 00:00:00 2001 From: Joerg Roedel Date: Thu, 15 Mar 2012 16:29:47 +0100 Subject: [PATCH] --- yaml --- r: 294821 b: refs/heads/master c: 9ddd592a191b32f2ee6c4b6ed2bd52665c3a49f5 h: refs/heads/master i: 294819: 3dd9cc4ce131a60e4d8bc4c3961c0c25c54eaacc v: v3 --- [refs] | 2 +- trunk/drivers/iommu/amd_iommu_init.c | 30 ++++++++++++++++++---------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index cf1e3253c761..74d0ee75071f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cebd5fa4d3046d5b43ce1836a0120612822a7fb0 +refs/heads/master: 9ddd592a191b32f2ee6c4b6ed2bd52665c3a49f5 diff --git a/trunk/drivers/iommu/amd_iommu_init.c b/trunk/drivers/iommu/amd_iommu_init.c index 526652a7385d..182b80ba79c5 100644 --- a/trunk/drivers/iommu/amd_iommu_init.c +++ b/trunk/drivers/iommu/amd_iommu_init.c @@ -1123,8 +1123,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, @@ -1134,27 +1135,36 @@ 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); - - if (iommu->ppr_log != NULL) - iommu_feature_enable(iommu, CONTROL_PPFINT_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); + + if (iommu->ppr_log != NULL) + iommu_feature_enable(iommu, CONTROL_PPFINT_EN); + + return 0; } /****************************************************************************