From patchwork Fri Jun 5 14:10:57 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joerg Roedel X-Patchwork-Id: 6554371 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id F13FD9F326 for ; Fri, 5 Jun 2015 14:12:56 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 128862040F for ; Fri, 5 Jun 2015 14:12:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0B1EC2008F for ; Fri, 5 Jun 2015 14:12:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1423043AbbFEOMq (ORCPT ); Fri, 5 Jun 2015 10:12:46 -0400 Received: from 8bytes.org ([81.169.241.247]:59213 "EHLO theia.8bytes.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1423040AbbFEOLS (ORCPT ); Fri, 5 Jun 2015 10:11:18 -0400 Received: by theia.8bytes.org (Postfix, from userid 1000) id 228A16E8; Fri, 5 Jun 2015 16:11:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=8bytes.org; s=mail-1; t=1433513472; bh=cZ/EBtKuv5aKYyV0Vv6+T/ZNkFJwBxOcPH1cmfP92PI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mkI2j0A5V18zA/pjQpCYKmZrhXXvGoBLmM3BbWO0MKiGtXxnQOpDj+C2aIZOTWMKP wflrgLSOOVz9V8M6lw/ittsi90VbiZw/bdg3xqvMWHxXWKGKEHI8pPgQgBluHtaUkp GBnwPlWFKvkq0tt31broYE35FImJGUARcCMJOxKyGzod5vwOHjSzezConqFW8mcK+v JWWACcBBzmwAX5M0FWLkiIk7UqOF9Y2BVAgponWlyQCOTt2BOP1ei4rSHb66WxIlQr Vc+BWdq2B+IGSZncQHFO7MkUhbEDmhJwsrmGvJd+FGGTE/eHFBtBRfAkjAnnPv+MiZ aYoXv7mQpLCsw== From: Joerg Roedel 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 11/17] iommu/vt-d: Move QI initialization to intel_setup_irq_remapping Date: Fri, 5 Jun 2015 16:10:57 +0200 Message-Id: <1433513463-19128-12-git-send-email-joro@8bytes.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1433513463-19128-1-git-send-email-joro@8bytes.org> References: <1433513463-19128-1-git-send-email-joro@8bytes.org> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID,T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Joerg Roedel This function needs a working QI later when kdump recovery is moved to this function. Tested-by: Baoquan He Signed-off-by: Joerg Roedel --- drivers/iommu/intel_irq_remapping.c | 63 ++++++++++--------------------------- 1 file changed, 16 insertions(+), 47 deletions(-) diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c index d22518d..70e4955 100644 --- a/drivers/iommu/intel_irq_remapping.c +++ b/drivers/iommu/intel_irq_remapping.c @@ -519,6 +519,19 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu) ir_table->base = page_address(pages); ir_table->bitmap = bitmap; iommu->ir_table = ir_table; + + if (!iommu->qi) { + /* + * Clear previous faults. + */ + dmar_fault(-1, iommu); + dmar_disable_qi(iommu); + if (dmar_enable_qi(iommu)) { + pr_err("Failed to enable queued invalidation\n"); + goto out_free_pages; + } + } + return 0; out_free_pages: @@ -655,18 +668,6 @@ static int __init intel_enable_irq_remapping(void) } for_each_iommu(iommu, drhd) { - /* - * If the queued invalidation is already initialized, - * shouldn't disable it. - */ - if (iommu->qi) - continue; - - /* - * Clear previous faults. - */ - dmar_fault(-1, iommu); - iommu_check_pre_ir_status(iommu); if (!is_kdump_kernel() && iommu->pre_enabled_ir) { @@ -675,8 +676,6 @@ static int __init intel_enable_irq_remapping(void) pr_warn("IRQ remapping was enabled on %s but we are not in kdump mode\n", iommu->name); } - - dmar_disable_qi(iommu); } /* @@ -693,20 +692,6 @@ static int __init intel_enable_irq_remapping(void) pr_info("Queued invalidation will be enabled to support x2apic and Intr-remapping.\n"); /* - * Enable queued invalidation for all the DRHD's. - */ - for_each_iommu(iommu, drhd) { - int ret = dmar_enable_qi(iommu); - - if (ret) { - printk(KERN_ERR "DRHD %Lx: failed to enable queued, " - " invalidation, ecap %Lx, ret %d\n", - drhd->reg_base_addr, iommu->ecap, ret); - goto error; - } - } - - /* * Setup Interrupt-remapping for all the DRHD's now. */ for_each_iommu(iommu, drhd) { @@ -1270,28 +1255,12 @@ static int dmar_ir_add(struct dmar_drhd_unit *dmaru, struct intel_iommu *iommu) /* Setup Interrupt-remapping now. */ ret = intel_setup_irq_remapping(iommu); if (ret) { - pr_err("DRHD %Lx: failed to allocate resource\n", + pr_err("DRHD %Lx: failed to setup IRQ remapping\n", iommu->reg_phys); - ir_remove_ioapic_hpet_scope(iommu); - return ret; - } - - if (!iommu->qi) { - /* Clear previous faults. */ - dmar_fault(-1, iommu); - iommu_disable_irq_remapping(iommu); - dmar_disable_qi(iommu); - } - - /* Enable queued invalidation */ - ret = dmar_enable_qi(iommu); - if (!ret) { - iommu_set_irq_remapping(iommu, eim); - } else { - pr_err("DRHD %Lx: failed to enable queued invalidation, ecap %Lx, ret %d\n", - iommu->reg_phys, iommu->ecap, ret); intel_teardown_irq_remapping(iommu); ir_remove_ioapic_hpet_scope(iommu); + } else { + iommu_set_irq_remapping(iommu, eim); } return ret;