From: Joerg Roedel <joerg.roedel@amd.com>
To: <iommu@lists.linux-foundation.org>, <linux-kernel@vger.kernel.org>
Cc: Joerg Roedel <joerg.roedel@amd.com>
Subject: [PATCH 13/16] iommu/amd: Make sure irq remapping still works on dma init failure
Date: Fri, 28 Sep 2012 14:24:03 +0200 [thread overview]
Message-ID: <1348835046-3262-14-git-send-email-joerg.roedel@amd.com> (raw)
In-Reply-To: <1348835046-3262-1-git-send-email-joerg.roedel@amd.com>
Do not deinitialize the AMD IOMMU driver completly when
interrupt remapping is already in use but the initialization
of the DMA layer fails for some reason. Make sure the IOMMU
can still be used to remap interrupts.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
drivers/iommu/amd_iommu_init.c | 40 +++++++++++++++++++++++++++++++---------
1 file changed, 31 insertions(+), 9 deletions(-)
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index 42db810..0608ef4 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -1396,6 +1396,16 @@ static void init_device_table_dma(void)
}
}
+static void __init uninit_device_table_dma(void)
+{
+ u32 devid;
+
+ for (devid = 0; devid <= amd_iommu_last_bdf; ++devid) {
+ amd_iommu_dev_table[devid].data[0] = 0ULL;
+ amd_iommu_dev_table[devid].data[1] = 0ULL;
+ }
+}
+
static void init_device_table(void)
{
u32 devid;
@@ -1564,11 +1574,6 @@ static void __init free_on_init_error(void)
}
- amd_iommu_uninit_devices();
-
- free_pages((unsigned long)amd_iommu_pd_alloc_bitmap,
- get_order(MAX_DOMAIN_ID/8));
-
free_pages((unsigned long)amd_iommu_rlookup_table,
get_order(rlookup_table_size));
@@ -1580,8 +1585,6 @@ static void __init free_on_init_error(void)
free_iommu_all();
- free_unity_maps();
-
#ifdef CONFIG_GART_IOMMU
/*
* We failed to initialize the AMD IOMMU - try fallback to GART
@@ -1609,6 +1612,16 @@ static bool __init check_ioapic_information(void)
return true;
}
+static void __init free_dma_resources(void)
+{
+ amd_iommu_uninit_devices();
+
+ free_pages((unsigned long)amd_iommu_pd_alloc_bitmap,
+ get_order(MAX_DOMAIN_ID/8));
+
+ free_unity_maps();
+}
+
/*
* This is the hardware init function for AMD IOMMU in the system.
* This function is called either from amd_iommu_init or from the interrupt
@@ -1949,8 +1962,17 @@ static int __init amd_iommu_init(void)
ret = iommu_go_to_state(IOMMU_INITIALIZED);
if (ret) {
- disable_iommus();
- free_on_init_error();
+ free_dma_resources();
+ if (!irq_remapping_enabled) {
+ disable_iommus();
+ free_on_init_error();
+ } else {
+ struct amd_iommu *iommu;
+
+ uninit_device_table_dma();
+ for_each_iommu(iommu)
+ iommu_flush_all_caches(iommu);
+ }
}
return ret;
--
1.7.9.5
next prev parent reply other threads:[~2012-09-28 12:26 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-28 12:23 [PATCH 0/16] Interrupt remapping support for AMD IOMMU Joerg Roedel
2012-09-28 12:23 ` [PATCH 01/16] iommu/amd: Keep track of HPET and IOAPIC device ids Joerg Roedel
2012-09-28 14:08 ` Konrad Rzeszutek Wilk
2012-09-28 14:35 ` Joerg Roedel
2012-09-28 12:23 ` [PATCH 02/16] iommu/amd: Add slab-cache for irq remapping tables Joerg Roedel
2012-09-28 12:23 ` [PATCH 03/16] iommu/amd: Allocate data structures to keep track of " Joerg Roedel
2012-09-28 22:57 ` Shuah Khan
2012-09-28 12:23 ` [PATCH 04/16] iommu/amd: Check if IOAPIC information is correct Joerg Roedel
2012-09-28 14:16 ` Konrad Rzeszutek Wilk
2012-09-28 14:37 ` Joerg Roedel
2012-09-28 12:23 ` [PATCH 05/16] iommu/amd: Split device table initialization into irq and dma part Joerg Roedel
2012-09-28 14:17 ` Konrad Rzeszutek Wilk
2012-09-28 14:25 ` Joerg Roedel
2012-09-28 15:00 ` Konrad Rzeszutek Wilk
2012-09-28 14:59 ` Joerg Roedel
2012-09-28 12:23 ` [PATCH 06/16] iommu/amd: Make sure IOMMU is not considered to translate itself Joerg Roedel
2012-09-28 12:23 ` [PATCH 07/16] iommu/amd: Add IRTE invalidation routine Joerg Roedel
2012-09-28 14:20 ` Konrad Rzeszutek Wilk
2012-09-28 15:36 ` Joerg Roedel
2012-09-28 12:23 ` [PATCH 08/16] iommu/amd: Add routines to manage irq remapping tables Joerg Roedel
2012-09-28 14:40 ` Konrad Rzeszutek Wilk
2012-09-28 15:01 ` Joerg Roedel
2012-09-28 12:23 ` [PATCH 09/16] iommu/amd: Add IOAPIC remapping routines Joerg Roedel
2012-09-28 14:45 ` Konrad Rzeszutek Wilk
[not found] ` <6d716497-bcf6-4d71-88a3-6ec772a4d396@sausexedgep01.amd.com>
2012-10-01 8:40 ` Joerg Roedel
2012-10-01 13:47 ` Konrad Rzeszutek Wilk
2012-10-01 16:33 ` Joerg Roedel
2012-10-01 16:34 ` Konrad Rzeszutek Wilk
2012-09-28 12:24 ` [PATCH 10/16] iommu/amd: Implement MSI routines for interrupt remapping Joerg Roedel
2012-09-28 14:49 ` Konrad Rzeszutek Wilk
2012-09-28 15:04 ` Joerg Roedel
2012-09-28 12:24 ` [PATCH 11/16] iommu/amd: Add call-back routine for HPET MSI Joerg Roedel
2012-09-28 12:24 ` [PATCH 12/16] iommu/amd: Add initialization routines for AMD interrupt remapping Joerg Roedel
2012-09-28 23:18 ` Shuah Khan
2012-10-01 8:05 ` Joerg Roedel
2012-10-01 16:02 ` Shuah Khan
2012-09-28 12:24 ` Joerg Roedel [this message]
2012-09-28 12:24 ` [PATCH 14/16] iommu/irq: Use amd_iommu_irq_ops if supported Joerg Roedel
2012-09-28 23:39 ` Shuah Khan
2012-10-01 8:08 ` Joerg Roedel
2012-10-01 16:04 ` Shuah Khan
2012-09-28 12:24 ` [PATCH 15/16] iommu/amd: Print message to system log when irq remapping is enabled Joerg Roedel
2012-09-28 12:24 ` [PATCH 16/16] iommu/amd: Report irq remapping through IOMMU-API Joerg Roedel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1348835046-3262-14-git-send-email-joerg.roedel@amd.com \
--to=joerg.roedel@amd.com \
--cc=iommu@lists.linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®