Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp2770088img; Sun, 24 Mar 2019 18:38:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqwnSze9l/EMxHDVetrqAF9BcTBwRfCOAVUMPJGiGSlcZrC1jTZiSbSxWP9oSQMKE5Vjmwm4 X-Received: by 2002:a62:1881:: with SMTP id 123mr21361411pfy.25.1553477897967; Sun, 24 Mar 2019 18:38:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553477897; cv=none; d=google.com; s=arc-20160816; b=z6wtOIfjwWiXdUgBut9i5Jnvz3HHDT3v4xkd0UKg4+vRO5lsKqEIKxqPFR0HywrXtV I9GxPyBey+FPLaiFT/0cbPyoUpoyoA6uLbzLbSMYf/uqzRxAkpnmG2YW0cco/gJIP1wu nEphBEED6Y3NyFWpu4/6ZJBoZw0BtE08wHvtnn6surkha8pDxbZsd4QQgGPgCc4z9vDt VIUSxWU4eFsh6DH6E/AmUyhOyMFWtcaizh1DKyXwr9a7ANf0ZWOMmLl99bpEAXvdYQt3 IccHUKyx5Og/lOUkJSbjdX2JXulHpQEVZPG7SI3lKf76q4Znr/j03eItyMC2wgtnVNby mnuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=dnA+JmIloF1IzZnh4V88QEzodja5WP8BR28Mqc9ZKj4=; b=pLKcl2o54ofw43+UK5J3OXDATBkTdCkGnYfo6VkkMEG00DhM6SJ3Hsn4ISuNrkApy0 YGIyrgyUv672C4+Cok1XSdYoFdT4sMEyehF4Hq9xMipjo/5UllYz6oW/ZKs7zYD2UzPA +pXtlvfxXNtCcqJ8HM3HnStGuc0i0aaUTn5RCBaTXL/XCic1GNmd435WGm7BJCLvawgB G1OO3WyTTg5EWhYo2dnh0Xhmg94SxHyna1jmeQA7uLcxkfQ9u5lPF8IwgmwaR/ZP6gma 0me96iBR9V18iOouA29holzCpNI5z8gaVT2R80XvfsFm8anyMTV/mg+ZyVB0LHfODg7k La+Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a22si6747358pfc.217.2019.03.24.18.38.03; Sun, 24 Mar 2019 18:38:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729308AbfCYBhN (ORCPT + 99 others); Sun, 24 Mar 2019 21:37:13 -0400 Received: from mga04.intel.com ([192.55.52.120]:35778 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729189AbfCYBhJ (ORCPT ); Sun, 24 Mar 2019 21:37:09 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Mar 2019 18:37:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,256,1549958400"; d="scan'208";a="128326891" Received: from allen-box.sh.intel.com ([10.239.159.136]) by orsmga008.jf.intel.com with ESMTP; 24 Mar 2019 18:37:04 -0700 From: Lu Baolu To: Joerg Roedel , David Woodhouse , Alex Williamson , Kirti Wankhede Cc: ashok.raj@intel.com, sanjay.k.kumar@intel.com, jacob.jun.pan@intel.com, kevin.tian@intel.com, Jean-Philippe Brucker , yi.l.liu@intel.com, yi.y.sun@intel.com, peterx@redhat.com, tiwei.bie@intel.com, xin.zeng@intel.com, iommu@lists.linux-foundation.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Lu Baolu , Jacob Pan Subject: [PATCH v8 4/9] iommu/vt-d: Move common code out of iommu_attch_device() Date: Mon, 25 Mar 2019 09:30:31 +0800 Message-Id: <20190325013036.18400-5-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190325013036.18400-1-baolu.lu@linux.intel.com> References: <20190325013036.18400-1-baolu.lu@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This part of code could be used by both normal and aux domain specific attach entries. Hence move them into a common function to avoid duplication. Cc: Ashok Raj Cc: Jacob Pan Cc: Kevin Tian Signed-off-by: Lu Baolu --- drivers/iommu/intel-iommu.c | 60 ++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index ba5f2e5b3a03..a0f9c748ca9f 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -5066,35 +5066,14 @@ static void intel_iommu_domain_free(struct iommu_domain *domain) domain_exit(to_dmar_domain(domain)); } -static int intel_iommu_attach_device(struct iommu_domain *domain, - struct device *dev) +static int prepare_domain_attach_device(struct iommu_domain *domain, + struct device *dev) { struct dmar_domain *dmar_domain = to_dmar_domain(domain); struct intel_iommu *iommu; int addr_width; u8 bus, devfn; - if (device_is_rmrr_locked(dev)) { - dev_warn(dev, "Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Contact your platform vendor.\n"); - return -EPERM; - } - - /* normally dev is not mapped */ - if (unlikely(domain_context_mapped(dev))) { - struct dmar_domain *old_domain; - - old_domain = find_domain(dev); - if (old_domain) { - rcu_read_lock(); - dmar_remove_one_dev_info(dev); - rcu_read_unlock(); - - if (!domain_type_is_vm_or_si(old_domain) && - list_empty(&old_domain->devices)) - domain_exit(old_domain); - } - } - iommu = device_to_iommu(dev, &bus, &devfn); if (!iommu) return -ENODEV; @@ -5127,7 +5106,40 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, dmar_domain->agaw--; } - return domain_add_dev_info(dmar_domain, dev); + return 0; +} + +static int intel_iommu_attach_device(struct iommu_domain *domain, + struct device *dev) +{ + int ret; + + if (device_is_rmrr_locked(dev)) { + dev_warn(dev, "Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Contact your platform vendor.\n"); + return -EPERM; + } + + /* normally dev is not mapped */ + if (unlikely(domain_context_mapped(dev))) { + struct dmar_domain *old_domain; + + old_domain = find_domain(dev); + if (old_domain) { + rcu_read_lock(); + dmar_remove_one_dev_info(dev); + rcu_read_unlock(); + + if (!domain_type_is_vm_or_si(old_domain) && + list_empty(&old_domain->devices)) + domain_exit(old_domain); + } + } + + ret = prepare_domain_attach_device(domain, dev); + if (ret) + return ret; + + return domain_add_dev_info(to_dmar_domain(domain), dev); } static void intel_iommu_detach_device(struct iommu_domain *domain, -- 2.17.1