From: Joerg Roedel <joro@8bytes.org>
To: iommu@lists.linux-foundation.org
Cc: zhen-hual@hp.com, bhe@redhat.com, dwmw2@infradead.org,
vgoyal@redhat.com, dyoung@redhat.com, alex.williamson@redhat.com,
ddutile@redhat.com, ishii.hironobu@jp.fujitsu.com,
indou.takao@jp.fujitsu.com, bhelgaas@google.com,
doug.hatch@hp.com, jerry.hoemann@hp.com, tom.vaden@hp.com,
li.zhang6@hp.com, lisa.mitchell@hp.com,
billsumnerlinux@gmail.com, rwright@hp.com,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
kexec@lists.infradead.org, joro@8bytes.org, jroedel@suse.de
Subject: [PATCH 12/17] iommu/vt-d: Move EIM detection to intel_prepare_irq_remapping
Date: Fri, 5 Jun 2015 16:10:58 +0200 [thread overview]
Message-ID: <1433513463-19128-13-git-send-email-joro@8bytes.org> (raw)
In-Reply-To: <1433513463-19128-1-git-send-email-joro@8bytes.org>
From: Joerg Roedel <jroedel@suse.de>
This needs to be set up before the ir-table can be
programmed to the iommu hardware register. This programming
will be moved to intel_setup_irq_remapping, so EIM needs to
be set up earlier too.
Tested-by: Baoquan He <bhe@redhat.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
---
drivers/iommu/intel_irq_remapping.c | 44 +++++++++++++++++--------------------
1 file changed, 20 insertions(+), 24 deletions(-)
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index 70e4955..35d73f6 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -637,10 +637,26 @@ static int __init intel_prepare_irq_remapping(void)
goto error;
}
+ if (x2apic_supported()) {
+ eim_mode = !dmar_x2apic_optout();
+ if (!eim_mode)
+ pr_info("BIOS set x2apic opt out bit. Use "
+ "'intremap=no_x2apic_optout' to enable x2apic\n");
+ }
+
/* First make sure all IOMMUs support IRQ remapping */
- for_each_iommu(iommu, drhd)
+ for_each_iommu(iommu, drhd) {
if (!ecap_ir_support(iommu->ecap))
goto error;
+ if (eim_mode && !ecap_eim_support(iommu->ecap)) {
+ printk(KERN_INFO "DRHD %Lx: EIM not supported by DRHD, "
+ " ecap %Lx\n", drhd->reg_base_addr, iommu->ecap);
+ eim_mode = 0;
+ }
+ }
+
+ if (eim_mode)
+ pr_info("Queued invalidation will be enabled to support x2apic and Intr-remapping.\n");
/* Do the allocations early */
for_each_iommu(iommu, drhd)
@@ -659,13 +675,6 @@ static int __init intel_enable_irq_remapping(void)
struct dmar_drhd_unit *drhd;
struct intel_iommu *iommu;
bool setup = false;
- int eim = 0;
-
- if (x2apic_supported()) {
- eim = !dmar_x2apic_optout();
- if (!eim)
- pr_info("x2apic is disabled because BIOS sets x2apic opt out bit. You can use 'intremap=no_x2apic_optout' to override the BIOS setting.\n");
- }
for_each_iommu(iommu, drhd) {
iommu_check_pre_ir_status(iommu);
@@ -679,19 +688,6 @@ static int __init intel_enable_irq_remapping(void)
}
/*
- * check for the Interrupt-remapping support
- */
- for_each_iommu(iommu, drhd)
- if (eim && !ecap_eim_support(iommu->ecap)) {
- printk(KERN_INFO "DRHD %Lx: EIM not supported by DRHD, "
- " ecap %Lx\n", drhd->reg_base_addr, iommu->ecap);
- eim = 0;
- }
- eim_mode = eim;
- if (eim)
- pr_info("Queued invalidation will be enabled to support x2apic and Intr-remapping.\n");
-
- /*
* Setup Interrupt-remapping for all the DRHD's now.
*/
for_each_iommu(iommu, drhd) {
@@ -705,7 +701,7 @@ static int __init intel_enable_irq_remapping(void)
INTR_REMAP_TABLE_ENTRIES*sizeof(struct irte));
__iommu_load_old_irte(iommu);
} else
- iommu_set_irq_remapping(iommu, eim);
+ iommu_set_irq_remapping(iommu, eim_mode);
setup = true;
}
@@ -722,9 +718,9 @@ static int __init intel_enable_irq_remapping(void)
*/
x86_io_apic_ops.print_entries = intel_ir_io_apic_print_entries;
- pr_info("Enabled IRQ remapping in %s mode\n", eim ? "x2apic" : "xapic");
+ pr_info("Enabled IRQ remapping in %s mode\n", eim_mode ? "x2apic" : "xapic");
- return eim ? IRQ_REMAP_X2APIC_MODE : IRQ_REMAP_XAPIC_MODE;
+ return eim_mode ? IRQ_REMAP_X2APIC_MODE : IRQ_REMAP_XAPIC_MODE;
error:
intel_cleanup_irq_remapping();
--
1.9.1
next prev parent reply other threads:[~2015-06-05 14:11 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-05 14:10 [PATCH 00/17] Fixes and Cleanups for the Intel VT-d driver Joerg Roedel
2015-06-05 14:10 ` [PATCH 01/17] iommu/vt-d: Fix compile error when CONFIG_INTEL_IOMMU=n Joerg Roedel
2015-06-05 14:10 ` [PATCH 02/17] iommu/vt-d: Remove __iommu_save_to_oldmem() function Joerg Roedel
2015-06-05 14:10 ` [PATCH 03/17] iommu/vt-d: Make two functions static Joerg Roedel
2015-06-05 14:10 ` [PATCH 04/17] iommu/vt-d: Load old data structures only in kdump kernel Joerg Roedel
2015-06-05 14:10 ` [PATCH 05/17] iommu/vt-d: Mark root-entry present in set_root_entry Joerg Roedel
2015-06-05 14:10 ` [PATCH 06/17] iommu/vt-d: Rework loading of old root-entry table Joerg Roedel
2015-06-05 14:10 ` [PATCH 07/17] iommu/vt-d: Copy context-tables outside of spin_lock Joerg Roedel
2015-06-05 14:10 ` [PATCH 08/17] iommu/vt-d: Don't reuse domain-ids from old kernel Joerg Roedel
2015-06-05 14:10 ` [PATCH 09/17] iommu/vt-d: Clean up log messages in intel-iommu.c Joerg Roedel
2015-06-05 14:10 ` [PATCH 10/17] iommu/vt-d: Allocate irq remapping table bitmap with GFP_KERNEL Joerg Roedel
2015-06-05 14:10 ` [PATCH 11/17] iommu/vt-d: Move QI initialization to intel_setup_irq_remapping Joerg Roedel
2015-06-05 14:10 ` Joerg Roedel [this message]
2015-06-05 14:10 ` [PATCH 13/17] iommu/vt-d: Split up iommu_set_irq_remapping Joerg Roedel
2015-06-05 14:11 ` [PATCH 14/17] iommu/vt-d: Move kdump pointer intialization to __iommu_load_old_irte Joerg Roedel
2015-06-05 14:11 ` [PATCH 15/17] iommu/vt-d: Mark irt entries from old kernel as allocated Joerg Roedel
2015-06-05 14:11 ` [PATCH 16/17] iommu/vt-d: Copy old irte in intel_setup_irq_remapping Joerg Roedel
2015-06-05 14:11 ` [PATCH 17/17] iommu/vt-d: Remove update code for old ir-table Joerg Roedel
2015-06-08 8:06 ` [PATCH 00/17] Fixes and Cleanups for the Intel VT-d driver Li, ZhenHua
2015-06-08 8:23 ` Joerg Roedel
2015-06-08 8:26 ` Li, ZhenHua
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=1433513463-19128-13-git-send-email-joro@8bytes.org \
--to=joro@8bytes.org \
--cc=alex.williamson@redhat.com \
--cc=bhe@redhat.com \
--cc=bhelgaas@google.com \
--cc=billsumnerlinux@gmail.com \
--cc=ddutile@redhat.com \
--cc=doug.hatch@hp.com \
--cc=dwmw2@infradead.org \
--cc=dyoung@redhat.com \
--cc=indou.takao@jp.fujitsu.com \
--cc=iommu@lists.linux-foundation.org \
--cc=ishii.hironobu@jp.fujitsu.com \
--cc=jerry.hoemann@hp.com \
--cc=jroedel@suse.de \
--cc=kexec@lists.infradead.org \
--cc=li.zhang6@hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lisa.mitchell@hp.com \
--cc=rwright@hp.com \
--cc=tom.vaden@hp.com \
--cc=vgoyal@redhat.com \
--cc=zhen-hual@hp.com \
/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).