iommu.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: Joerg Roedel <joerg.roedel-5C7GfCeVMHo@public.gmane.org>
To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCH 02/16] iommu/amd: Add slab-cache for irq remapping tables
Date: Fri, 28 Sep 2012 14:23:52 +0200	[thread overview]
Message-ID: <1348835046-3262-3-git-send-email-joerg.roedel@amd.com> (raw)
In-Reply-To: <1348835046-3262-1-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>

The irq remapping tables for the AMD IOMMU need to be
aligned on a 128 byte boundary. Create a seperate slab-cache
to guarantee this alignment.

Signed-off-by: Joerg Roedel <joerg.roedel-5C7GfCeVMHo@public.gmane.org>
---
 drivers/iommu/amd_iommu.c       |    2 ++
 drivers/iommu/amd_iommu_init.c  |   23 +++++++++++++++++++++++
 drivers/iommu/amd_iommu_types.h |    9 +++++++++
 drivers/iommu/irq_remapping.h   |    5 +++++
 4 files changed, 39 insertions(+)

diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index 6f51483..b6a8079 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -95,6 +95,8 @@ struct iommu_cmd {
 	u32 data[4];
 };
 
+struct kmem_cache *amd_iommu_irq_cache;
+
 static void update_domain(struct protection_domain *domain);
 static int __init alloc_passthrough_domain(void);
 
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index a9f3948..a046a0e 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -36,6 +36,7 @@
 
 #include "amd_iommu_proto.h"
 #include "amd_iommu_types.h"
+#include "irq_remapping.h"
 
 /*
  * definitions for the ACPI scanning code
@@ -124,6 +125,7 @@ struct ivmd_header {
 } __attribute__((packed));
 
 bool amd_iommu_dump;
+bool amd_iommu_irq_remap __read_mostly;
 
 static bool amd_iommu_detected;
 static bool __initdata amd_iommu_disabled;
@@ -1527,6 +1529,11 @@ static struct syscore_ops amd_iommu_syscore_ops = {
 
 static void __init free_on_init_error(void)
 {
+	if (amd_iommu_irq_cache) {
+		kmem_cache_destroy(amd_iommu_irq_cache);
+		amd_iommu_irq_cache = NULL;
+	}
+
 	amd_iommu_uninit_devices();
 
 	free_pages((unsigned long)amd_iommu_pd_alloc_bitmap,
@@ -1666,6 +1673,19 @@ static int __init early_amd_iommu_init(void)
 	if (ret)
 		goto out;
 
+	if (amd_iommu_irq_remap) {
+		/*
+		 * Interrupt remapping enabled, create kmem_cache for the
+		 * remapping tables.
+		 */
+		amd_iommu_irq_cache = kmem_cache_create("irq_remap_cache",
+				MAX_IRQS_PER_TABLE * sizeof(u32),
+				IRQ_TABLE_ALIGNMENT,
+				0, NULL);
+		if (!amd_iommu_irq_cache)
+			goto out;
+	}
+
 	ret = init_memory_definitions(ivrs_base);
 	if (ret)
 		goto out;
@@ -1713,6 +1733,9 @@ static bool detect_ivrs(void)
 	/* Make sure ACS will be enabled during PCI probe */
 	pci_request_acs();
 
+	if (!disable_irq_remap)
+		amd_iommu_irq_remap = true;
+
 	return true;
 }
 
diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h
index 4495b78..953cea8 100644
--- a/drivers/iommu/amd_iommu_types.h
+++ b/drivers/iommu/amd_iommu_types.h
@@ -334,6 +334,15 @@ extern bool amd_iommu_np_cache;
 /* Only true if all IOMMUs support device IOTLBs */
 extern bool amd_iommu_iotlb_sup;
 
+#define MAX_IRQS_PER_TABLE	256
+#define IRQ_TABLE_ALIGNMENT	128
+
+/* Interrupt remapping feature used? */
+extern bool amd_iommu_irq_remap;
+
+/* kmem_cache to get tables with 128 byte alignement */
+extern struct kmem_cache *amd_iommu_irq_cache;
+
 /*
  * Make iterating over all IOMMUs easier
  */
diff --git a/drivers/iommu/irq_remapping.h b/drivers/iommu/irq_remapping.h
index b12974c..624d360 100644
--- a/drivers/iommu/irq_remapping.h
+++ b/drivers/iommu/irq_remapping.h
@@ -83,6 +83,11 @@ struct irq_remap_ops {
 
 extern struct irq_remap_ops intel_irq_remap_ops;
 
+#else  /* CONFIG_IRQ_REMAP */
+
+#define irq_remapping_enabled 0
+#define disable_irq_remap     1
+
 #endif /* CONFIG_IRQ_REMAP */
 
 #endif /* __IRQ_REMAPPING_H */
-- 
1.7.9.5

  parent reply	other threads:[~2012-09-28 12:23 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
     [not found] ` <1348835046-3262-1-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
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
     [not found]       ` <20120928140833.GB7483-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2012-09-28 14:35         ` Joerg Roedel
2012-09-28 12:23   ` Joerg Roedel [this message]
2012-09-28 12:23   ` [PATCH 03/16] iommu/amd: Allocate data structures to keep track of irq remapping tables 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
     [not found]     ` <1348835046-3262-5-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
2012-09-28 14:16       ` Konrad Rzeszutek Wilk
     [not found]         ` <20120928141644.GC7483-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
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
     [not found]     ` <1348835046-3262-6-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
2012-09-28 14:17       ` Konrad Rzeszutek Wilk
     [not found]         ` <20120928141752.GD7483-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2012-09-28 14:25           ` Joerg Roedel
     [not found]             ` <20120928142555.GC4009-5C7GfCeVMHo@public.gmane.org>
2012-09-28 15:00               ` Konrad Rzeszutek Wilk
     [not found]                 ` <20120928150009.GI7483-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
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
     [not found]     ` <1348835046-3262-8-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
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
     [not found]     ` <1348835046-3262-9-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
2012-09-28 14:40       ` Konrad Rzeszutek Wilk
     [not found]         ` <20120928144011.GF7483-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2012-09-28 15:01           ` Joerg Roedel
2012-09-28 12:23   ` [PATCH 09/16] iommu/amd: Add IOAPIC remapping routines Joerg Roedel
     [not found]     ` <1348835046-3262-10-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
2012-09-28 14:45       ` Konrad Rzeszutek Wilk
     [not found]     ` <6d716497-bcf6-4d71-88a3-6ec772a4d396@sausexedgep01.amd.com>
     [not found]       ` <6d716497-bcf6-4d71-88a3-6ec772a4d396-drQb3oNRF8yAbyOsnIB/ifZ4XP/Yx64J@public.gmane.org>
2012-10-01  8:40         ` Joerg Roedel
     [not found]           ` <20121001084051.GO4009-5C7GfCeVMHo@public.gmane.org>
2012-10-01 13:47             ` Konrad Rzeszutek Wilk
     [not found]               ` <20121001134753.GF4099-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
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
     [not found]     ` <1348835046-3262-11-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org>
2012-09-28 14:49       ` Konrad Rzeszutek Wilk
     [not found]         ` <20120928144933.GH7483-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
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
     [not found]       ` <CAKocOONojx7tvu6x+HV97Rae-KXA3hW65Ujmt2t7LCVs9oRpyw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-01  8:05         ` Joerg Roedel
2012-10-01 16:02           ` Shuah Khan
2012-09-28 12:24   ` [PATCH 13/16] iommu/amd: Make sure irq remapping still works on dma init failure Joerg Roedel
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
     [not found]       ` <CAKocOONaiMJs7pWeWxO=_bN5_KU=jZh=kvL7U_v-w9LmSrQ+Fw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
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-3-git-send-email-joerg.roedel@amd.com \
    --to=joerg.roedel-5c7gfcevmho@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.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;
as well as URLs for NNTP newsgroup(s).