From patchwork Tue Nov 22 00:29:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baolu Lu X-Patchwork-Id: 24065 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1920176wrr; Mon, 21 Nov 2022 16:41:17 -0800 (PST) X-Google-Smtp-Source: AA0mqf6mjC+52zEItZYUWl0UtUpwt1lqrFujUHijMD3SufV29J8IyRJoNBSjjePoybmFEb+nAy+F X-Received: by 2002:aa7:c758:0:b0:469:b3fc:8d7c with SMTP id c24-20020aa7c758000000b00469b3fc8d7cmr4732097eds.393.1669077677817; Mon, 21 Nov 2022 16:41:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669077677; cv=none; d=google.com; s=arc-20160816; b=IeEOVxavpoR5QFGujL/qJz7UcdqFKHsNdewm7suuW6tZybKERvc6dOg5XM2Pr7XVwy 4x+vfSH62jsqf9G5LLJF2o2NXWYAsIfYwYp9K/AXTkbiSwKCf5Ki9wBLEi06JskIRXR5 NrxyOZCMi2I2DMmZpgm5g6a0rMaEvwnKWa6wL5Cirdgbm32M2+C/lRq5DxiMqN5LFftZ /q/drRXvcjZjs+wTrUtUty2KbxyjIbGuN1BssbiMPV9DxD+55tObZs1sJvLiTIVc3MDK jKwRy1ZgwvEHSEue4WNyQDhmJKIsF7d3deaPAIWm4CZyypwsC00OUwub2zZtpIxWgNTt qr3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HjP7LJer5ihJHkfrVQzvFw1N9N8f/dpR4i9wEMwWjgI=; b=k774xGsRiZVxSSifW8gb0eCFLN1YQO2m35LBu107av4QZKd/OfVFYiR/jVopXFWwto At86BTWT9MGZXWh6GQsmbuowYZR4sjytQ/4Co9tEFG+nrHI/xPLzeiVNBP7FFuT03vNE WOIY14lljuGaj2KvaJpA8L+O63xt8/XnmM3J7JYy9KFNp95SGtlC37Ob8w/e5Q5cs1E9 +NVvGprEubiG3HqSipJLWMNebubeLehsGEKiI0KX5YSsnPtlstIvcpo+lXN3BZpIkjTa sMYfrxtrJMQq5t5XLoE4BTPzJUj3N1zWqCZLR1iQlC1K9I/iwu3VT6cGZOD/6OIxEAfr MI4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=hvn3AI0I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hd16-20020a170907969000b007b5dd3e6995si3882331ejc.917.2022.11.21.16.40.54; Mon, 21 Nov 2022 16:41:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=hvn3AI0I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231895AbiKVAg7 (ORCPT + 99 others); Mon, 21 Nov 2022 19:36:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53456 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231749AbiKVAg4 (ORCPT ); Mon, 21 Nov 2022 19:36:56 -0500 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8CFBFC6BDC for ; Mon, 21 Nov 2022 16:36:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669077415; x=1700613415; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Y5vGwIPPwSenb40glub36iuftmDSZwrpt1MHtGFliyk=; b=hvn3AI0IIBrqZDbB93amfkxjq29cYMgANVkVu4Sy7qMMFNqqwj51CkNM Wfk+GZV5SWc/Ue+xhA9SKUt3A3KUT5D2nExfUTfkVnIJof2bViInxXTrT ea7V7lLMssmHUp5hNYwjrr6ZB2HHBddFKQOfGythntbyG0UtX0lPL5iet aUIN4ATQBtt/TICw3Zc4AzJiPmfuXU+Hru9eK76a672i7sBOWKv0/OiUB 6xowp9WAJ6pksY7II8YDHMzA+Q1Q6PjGXuMWdo6r/jCB0IauMfG+uQ6DB 2omxNLuzB+JSa8J95R1UjpjlxIoDiKLzy6V6hiEbpHH83rLZwV/E5q7Gu Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="315516471" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="315516471" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 16:36:55 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="619018415" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="619018415" Received: from allen-box.sh.intel.com ([10.239.159.48]) by orsmga006.jf.intel.com with ESMTP; 21 Nov 2022 16:36:54 -0800 From: Lu Baolu To: Joerg Roedel Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 1/7] iommu/vt-d: Allocate pasid table in device probe path Date: Tue, 22 Nov 2022 08:29:43 +0800 Message-Id: <20221122002949.148140-2-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221122002949.148140-1-baolu.lu@linux.intel.com> References: <20221122002949.148140-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750154795239924153?= X-GMAIL-MSGID: =?utf-8?q?1750154795239924153?= Whether or not a domain is attached to the device, the pasid table should always be valid as long as it has been probed. This moves the pasid table allocation from the domain attaching device path to device probe path and frees it in the device release path. Signed-off-by: Lu Baolu Reviewed-by: Kevin Tian Link: https://lore.kernel.org/r/20221118132451.114406-2-baolu.lu@linux.intel.com --- drivers/iommu/intel/iommu.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index a122f5b84ad4..dea0190acc86 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -2475,13 +2475,6 @@ static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev) /* PASID table is mandatory for a PCI device in scalable mode. */ if (sm_supported(iommu) && !dev_is_real_dma_subdevice(dev)) { - ret = intel_pasid_alloc_table(dev); - if (ret) { - dev_err(dev, "PASID table allocation failed\n"); - dmar_remove_one_dev_info(dev); - return ret; - } - /* Setup the PASID entry for requests without PASID: */ if (hw_pass_through && domain_type_is_si(domain)) ret = intel_pasid_setup_pass_through(iommu, domain, @@ -4106,7 +4099,6 @@ static void dmar_remove_one_dev_info(struct device *dev) iommu_disable_dev_iotlb(info); domain_context_clear(info); - intel_pasid_free_table(info->dev); } spin_lock_irqsave(&domain->lock, flags); @@ -4464,6 +4456,7 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev) struct device_domain_info *info; struct intel_iommu *iommu; u8 bus, devfn; + int ret; iommu = device_to_iommu(dev, &bus, &devfn); if (!iommu || !iommu->iommu.ops) @@ -4507,6 +4500,16 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev) dev_iommu_priv_set(dev, info); + if (sm_supported(iommu) && !dev_is_real_dma_subdevice(dev)) { + ret = intel_pasid_alloc_table(dev); + if (ret) { + dev_err(dev, "PASID table allocation failed\n"); + dev_iommu_priv_set(dev, NULL); + kfree(info); + return ERR_PTR(ret); + } + } + return &iommu->iommu; } @@ -4515,6 +4518,7 @@ static void intel_iommu_release_device(struct device *dev) struct device_domain_info *info = dev_iommu_priv_get(dev); dmar_remove_one_dev_info(dev); + intel_pasid_free_table(dev); dev_iommu_priv_set(dev, NULL); kfree(info); set_dma_ops(dev, NULL); From patchwork Tue Nov 22 00:29:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baolu Lu X-Patchwork-Id: 24066 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1920197wrr; Mon, 21 Nov 2022 16:41:20 -0800 (PST) X-Google-Smtp-Source: AA0mqf7HwfvKwToQkXoD0gm22/ZC1v7M62X7ShUp4moL/y3lj9r2jNvSQvVzQj7FifFRPJka9NVU X-Received: by 2002:a17:906:560c:b0:7ae:5884:81b1 with SMTP id f12-20020a170906560c00b007ae588481b1mr2885214ejq.155.1669077680076; Mon, 21 Nov 2022 16:41:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669077680; cv=none; d=google.com; s=arc-20160816; b=sz3N9TevAz+engF9KdQSdy0ezTHLWnp6NniCPh++ofCj8c2R1s/LgsUfG1ZtSBighP gp5OrCYKjm9LsxI58II8/EeAMv4A3VXwU5AZfncsVlOOKeoCdbNmaPSIIk5Xg90AK5ms jnUQdz1+Xq6MIuOg302NnCtdBqGv01K6kd+5dNtZB9Qa0aM2OZmOgLTEnAnBgm5C25pC Urd3XyoTVZE9Lo1XAzelyrzbmXEZ8WolzSsIKy8C/GCxoSvhOtrQV4MCB6uoCRzo6gsr BPIkrjs7fC3JUXsUjfY3ImiEs0NFBAiT6OQ+aNNaSVKktpYnj8/5gXjogLwCMw+1SjUU CjiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xvjuCZllxvg0nYsjGFc5a7Qw/0O6Hs77PiucHRpVcgU=; b=G2H4CuA/TIjbj9zuo8x+4dKOTspN0+zEeOqVcOe7F8PB7jeNPUP0x3EVpAC0K/xXX4 9UQPtioZFlf6h5l1v5j69IxZwRytkZVJMNpudsCTck6MX2J1zAS8qUtuqKkPCFEJfDD3 6s7BOFidS6/+NlL+HGBlPaF/inc4vDMk/wKuk1QJRP6zaiK1IPdfwIicuTWoczH1q9Fk tvBBcjn7ibmzRlQG7O878jiwBsu2SSgcry2H+W8H+f0l57taCION3VFXIRET2P5N/SJH oLdyZ1MlNn5zJ1OV5bD+YwFjNT5Yxey4uIg6cf8c8cqTe0UU5QLrwsItwptm0PmC5Mwp qgVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=QXg0cvrk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ga22-20020a1709070c1600b0073d7111c8e7si11340185ejc.710.2022.11.21.16.40.56; Mon, 21 Nov 2022 16:41:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=QXg0cvrk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231749AbiKVAhH (ORCPT + 99 others); Mon, 21 Nov 2022 19:37:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53462 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231788AbiKVAg5 (ORCPT ); Mon, 21 Nov 2022 19:36:57 -0500 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C6765C6972 for ; Mon, 21 Nov 2022 16:36:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669077416; x=1700613416; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dGFRCSd1fhvN2Zriryw2U6ONKPu+goRSJXbnvvR3SvQ=; b=QXg0cvrk84Wndwf0EBycEA987uJfwAvbGcH/FbrLzDUptpPe2mJbwoNr mfATEiSAfeA8T+Y/ClE8Rbr0SkZI7z/tH10EzEaCisC5qA8gjNh8J+Ae3 NIJ8s1jfYrY1mcysv45Ff23sRVMIGBSBdltQMhyUPrOh794mds67SmNMK DeF70q64pn2r7ZU4z1zXaLzYJkdZ2snGB5G4Wl+N8VVIHo6HP4UGfyXDP ci8QkArxVUjtZkg2eDlIo0O4n4TwdYi03zEfR3NDs8reofKv/Ts8kmNg7 PIZTNd6zMOZzaW5aka4kgyle+MYXNg8IBQokGts6t55awt/9DOwB5euXI w==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="315516472" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="315516472" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 16:36:56 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="619018421" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="619018421" Received: from allen-box.sh.intel.com ([10.239.159.48]) by orsmga006.jf.intel.com with ESMTP; 21 Nov 2022 16:36:55 -0800 From: Lu Baolu To: Joerg Roedel Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 2/7] iommu/vt-d: Add device_block_translation() helper Date: Tue, 22 Nov 2022 08:29:44 +0800 Message-Id: <20221122002949.148140-3-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221122002949.148140-1-baolu.lu@linux.intel.com> References: <20221122002949.148140-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750154797333076238?= X-GMAIL-MSGID: =?utf-8?q?1750154797333076238?= If domain attaching to device fails, the IOMMU driver should bring the device to blocking DMA state. The upper layer is expected to recover it by attaching a new domain. Use device_block_translation() in the error path of dev_attach to make the behavior specific. The difference between device_block_translation() and the previous dmar_remove_one_dev_info() is that, in the scalable mode, it is the RID2PASID entry instead of context entry being cleared. As a result, enabling PCI capabilities is moved up. Signed-off-by: Lu Baolu Reviewed-by: Kevin Tian Link: https://lore.kernel.org/r/20221118132451.114406-3-baolu.lu@linux.intel.com --- drivers/iommu/intel/iommu.c | 44 ++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index dea0190acc86..1c1a52d1a818 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -277,7 +277,7 @@ static LIST_HEAD(dmar_satc_units); #define for_each_rmrr_units(rmrr) \ list_for_each_entry(rmrr, &dmar_rmrr_units, list) -static void dmar_remove_one_dev_info(struct device *dev); +static void device_block_translation(struct device *dev); int dmar_disabled = !IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_ON); int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON); @@ -1400,7 +1400,7 @@ static void iommu_enable_pci_caps(struct device_domain_info *info) { struct pci_dev *pdev; - if (!info || !dev_is_pci(info->dev)) + if (!dev_is_pci(info->dev)) return; pdev = to_pci_dev(info->dev); @@ -2045,7 +2045,6 @@ static int domain_context_mapping_one(struct dmar_domain *domain, } else { iommu_flush_write_buffer(iommu); } - iommu_enable_pci_caps(info); ret = 0; @@ -2487,7 +2486,7 @@ static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev) dev, PASID_RID2PASID); if (ret) { dev_err(dev, "Setup RID2PASID failed\n"); - dmar_remove_one_dev_info(dev); + device_block_translation(dev); return ret; } } @@ -2495,10 +2494,12 @@ static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev) ret = domain_context_mapping(domain, dev); if (ret) { dev_err(dev, "Domain context map failed\n"); - dmar_remove_one_dev_info(dev); + device_block_translation(dev); return ret; } + iommu_enable_pci_caps(info); + return 0; } @@ -4109,6 +4110,37 @@ static void dmar_remove_one_dev_info(struct device *dev) info->domain = NULL; } +/* + * Clear the page table pointer in context or pasid table entries so that + * all DMA requests without PASID from the device are blocked. If the page + * table has been set, clean up the data structures. + */ +static void device_block_translation(struct device *dev) +{ + struct device_domain_info *info = dev_iommu_priv_get(dev); + struct intel_iommu *iommu = info->iommu; + unsigned long flags; + + iommu_disable_dev_iotlb(info); + if (!dev_is_real_dma_subdevice(dev)) { + if (sm_supported(iommu)) + intel_pasid_tear_down_entry(iommu, dev, + PASID_RID2PASID, false); + else + domain_context_clear(info); + } + + if (!info->domain) + return; + + spin_lock_irqsave(&info->domain->lock, flags); + list_del(&info->link); + spin_unlock_irqrestore(&info->domain->lock, flags); + + domain_detach_iommu(info->domain, iommu); + info->domain = NULL; +} + static int md_domain_init(struct dmar_domain *domain, int guest_width) { int adjust_width; @@ -4230,7 +4262,7 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, struct device_domain_info *info = dev_iommu_priv_get(dev); if (info->domain) - dmar_remove_one_dev_info(dev); + device_block_translation(dev); } ret = prepare_domain_attach_device(domain, dev); From patchwork Tue Nov 22 00:29:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baolu Lu X-Patchwork-Id: 24069 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1920933wrr; Mon, 21 Nov 2022 16:43:26 -0800 (PST) X-Google-Smtp-Source: AA0mqf5KgP4OzUd+YU6x7r13BK6OXO3jSxKeTzvWXFpm9Y0tq8BlBVqW2IraMICEOtXhgiKJNPGg X-Received: by 2002:a17:906:a397:b0:7ae:5381:bd02 with SMTP id k23-20020a170906a39700b007ae5381bd02mr17063591ejz.286.1669077805888; Mon, 21 Nov 2022 16:43:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669077805; cv=none; d=google.com; s=arc-20160816; b=eibXfJ3PHKfPu3mvygO+RD6gZ3kigfSH1k8q1qQ5OCf8CoSLGFm0i8J4Mq/6XhmKy9 iMkO5B/QsiOC31qLV3s/fO5SQhEuh2IiaqRJbX4WnaWkHZNBLFdkDG1N+s9kmHQ+pNSO g/PAQjhrGq5xRdjC9voV8PXIs6uha3UD/osgGXcuLcoU5AhxAvEfQcDnWiuBDSyOUSnk N+NBb+QjK9y7tV50LQl3SqrYuqmK0wiTTJBfQk0lxyXn3T8cociS3ptPz8kqIUw3akLc tndZyNTR95vzQWTP4FCh+9sJ/aIJj7MeJVzAFpBuIT/xHiM/Sgd1JJ+xwLnHXq7Wkl80 8YVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JLy5TTy3ewpJ04507RhHAvYkbB2ZtLkKGP2ZO1QmI0M=; b=fIoEhOVMrVwie4eaLPg8NWBJmAWRMO2I1nMHNL6pvC5BSpgxmVJN8ZYPh/UCUwUUOR smymXRvTkJWBWM/Efsgpa1b/lZMiNrQqHiFoYchzteEtMAtWiWqZDfLUI33xNSsB/aNR H/GJw9CTC2MeCFtqaBWlB0anDBuCLl9BcDqHE8o811PF4daKmtKXkcADgf6pJIIhpQEn lSPPE1mLYiz6+txPc0P3xdHRfM/LaAoHLE6h/S92MtJeeIe7kprrOCsoTXgRwDbOpw5c Egrb1JqJh6YCxYouDciAW6H12vIDttfLdYdi22APZtQDArn4hq1RRRHuZJbaodJmiiZy z4AA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=kLFlg2Ox; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c3-20020a170906924300b0073d5a794b43si8496226ejx.985.2022.11.21.16.43.01; Mon, 21 Nov 2022 16:43:25 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=kLFlg2Ox; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232125AbiKVAhM (ORCPT + 99 others); Mon, 21 Nov 2022 19:37:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53512 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231909AbiKVAhA (ORCPT ); Mon, 21 Nov 2022 19:37:00 -0500 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9BF74C6D1F for ; Mon, 21 Nov 2022 16:36:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669077418; x=1700613418; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=C94Q/PBU5J4ldiFwhHR9RjLUsVzPfxoLbpVEQBZtdJI=; b=kLFlg2OxaQKcj+/OHadU0qGzk6ZyUfiaEquFBhY/sJ95r6gDJSBX9DrV lCvOcKa+mePRcLQAd6vPuCosGdX7mvyYTGvAcJOzM4TmDX+enlGwa5axs fsiRw3Hx2Bd4ZStkR+CwQSmrhXlZI8aRlmBshByS1x9EmYbknmlabREWc 4fV4Wgjg+It6aZY65ML029ORR7VdxZHibdEULDqwMEDP8tM1INychpzxj BR+2N0VtZAsniMrm5jxfseW9QqbZ+/FllmnGGIMhtk5S2gYWndWngkAvL rBhRIH6u/QkjUNuTTM4wsELuczQgipVH++EyQegWbDbzQDl8XdNlJCDvR w==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="315516477" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="315516477" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 16:36:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="619018424" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="619018424" Received: from allen-box.sh.intel.com ([10.239.159.48]) by orsmga006.jf.intel.com with ESMTP; 21 Nov 2022 16:36:56 -0800 From: Lu Baolu To: Joerg Roedel Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 3/7] iommu/vt-d: Add blocking domain support Date: Tue, 22 Nov 2022 08:29:45 +0800 Message-Id: <20221122002949.148140-4-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221122002949.148140-1-baolu.lu@linux.intel.com> References: <20221122002949.148140-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750154929170711698?= X-GMAIL-MSGID: =?utf-8?q?1750154929170711698?= The Intel IOMMU hardwares support blocking DMA transactions by clearing the translation table entries. This implements a real blocking domain to avoid using an empty UNMANAGED domain. The detach_dev callback of the domain ops is not used in any path. Remove it to avoid dead code as well. Signed-off-by: Lu Baolu Reviewed-by: Kevin Tian Link: https://lore.kernel.org/r/20221118132451.114406-4-baolu.lu@linux.intel.com --- drivers/iommu/intel/iommu.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 1c1a52d1a818..603332740bc3 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -278,6 +278,7 @@ static LIST_HEAD(dmar_satc_units); list_for_each_entry(rmrr, &dmar_rmrr_units, list) static void device_block_translation(struct device *dev); +static void intel_iommu_domain_free(struct iommu_domain *domain); int dmar_disabled = !IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_ON); int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON); @@ -4162,12 +4163,28 @@ static int md_domain_init(struct dmar_domain *domain, int guest_width) return 0; } +static int blocking_domain_attach_dev(struct iommu_domain *domain, + struct device *dev) +{ + device_block_translation(dev); + return 0; +} + +static struct iommu_domain blocking_domain = { + .ops = &(const struct iommu_domain_ops) { + .attach_dev = blocking_domain_attach_dev, + .free = intel_iommu_domain_free + } +}; + static struct iommu_domain *intel_iommu_domain_alloc(unsigned type) { struct dmar_domain *dmar_domain; struct iommu_domain *domain; switch (type) { + case IOMMU_DOMAIN_BLOCKED: + return &blocking_domain; case IOMMU_DOMAIN_DMA: case IOMMU_DOMAIN_DMA_FQ: case IOMMU_DOMAIN_UNMANAGED: @@ -4202,7 +4219,7 @@ static struct iommu_domain *intel_iommu_domain_alloc(unsigned type) static void intel_iommu_domain_free(struct iommu_domain *domain) { - if (domain != &si_domain->domain) + if (domain != &si_domain->domain && domain != &blocking_domain) domain_exit(to_dmar_domain(domain)); } @@ -4272,12 +4289,6 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, return domain_add_dev_info(to_dmar_domain(domain), dev); } -static void intel_iommu_detach_device(struct iommu_domain *domain, - struct device *dev) -{ - dmar_remove_one_dev_info(dev); -} - static int intel_iommu_map(struct iommu_domain *domain, unsigned long iova, phys_addr_t hpa, size_t size, int iommu_prot, gfp_t gfp) @@ -4785,7 +4796,6 @@ const struct iommu_ops intel_iommu_ops = { #endif .default_domain_ops = &(const struct iommu_domain_ops) { .attach_dev = intel_iommu_attach_device, - .detach_dev = intel_iommu_detach_device, .map_pages = intel_iommu_map_pages, .unmap_pages = intel_iommu_unmap_pages, .iotlb_sync_map = intel_iommu_iotlb_sync_map, From patchwork Tue Nov 22 00:29:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baolu Lu X-Patchwork-Id: 24070 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1921129wrr; Mon, 21 Nov 2022 16:43:53 -0800 (PST) X-Google-Smtp-Source: AA0mqf6cfEYm1smkOjxpMWjUT+n6XzKPOA+VTGgUuEb/j8ft5eBL7ev+RK0qmnTkJ/L7YJ28GP8s X-Received: by 2002:a17:906:fcc2:b0:78d:8b75:b161 with SMTP id qx2-20020a170906fcc200b0078d8b75b161mr18163451ejb.385.1669077833254; Mon, 21 Nov 2022 16:43:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669077833; cv=none; d=google.com; s=arc-20160816; b=sh7nX6QAtUACE0zhGAaNR02g7Kn4mUfnfLAo4SeKrNuNJdrqQcS7q/XrXCrCGTnUrf 8vqjJjscHRbDDESa2QJ8tYeQHALp0sOK3VGxthjVittWVHkwWQMPknyNcG4fpVDOwPjp RHHY6Gk4VCK7CedO4f6hZ2GG1at+rvlkVnWKOFWL85DoIVM0Z3a0+HLpL1wuHUyTxyg7 UOSfrHELTxs6JD7WBXk7uqVdcSWOOby91yDVGd0xnR3lTUS48p0yS+7/U5vwiZXYcETx h2xpkXtzcfrQ1ZojocF9DF/IJVu2YhyI18A09xTpy+/yeUWhE7upOq8EHwnkNOcW7R0L ENIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1q749IHwjBacvme1UMwtH8eNR/mrpuXUr/a88qO0kuE=; b=K1lpC6LfObHoeHl8t+Dyr9VzLrobX45JRMTojiNnkZj/p+omJHwSsVehIV2IznTGye ET/MI3nGO0QaowUnIuChkS9wkztRMtpjIY+upfYzwUaOcX5aZ9YF6NCtJ/JNhb4RJZds 8ERRZGHIybfgiBQle/XvaVzkQq28eKexMBdKMWwCWhF6h2jgcE6iPfZQjjq2vl/E1Mfr +dbESSWff9vG8oLuGz4A7U6z9XBv5tua0yGTqleDT8aHS2lCeJrjrFQ+v5eNHBIWCnEP K2rjWm69IRf0h5NfTpBQTB+YO0iiX0d6HUNw79jTRY/yQHQUGA08PSESw9biuUniC0bg VlJQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=VWN2xx1z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ht10-20020a170907608a00b007813594dc31si10852935ejc.523.2022.11.21.16.43.26; Mon, 21 Nov 2022 16:43:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=VWN2xx1z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231951AbiKVAhV (ORCPT + 99 others); Mon, 21 Nov 2022 19:37:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231858AbiKVAhB (ORCPT ); Mon, 21 Nov 2022 19:37:01 -0500 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F07ECC7225 for ; Mon, 21 Nov 2022 16:36:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669077419; x=1700613419; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=m9iAPzEu2PlT22fqsgpaH64fRtTDWJ2ZYYPwO3Bv5IQ=; b=VWN2xx1zo7b0N/sJRnmbNfSzl1ffaABRd2XsNhrG3RT5VLmpdlWqmrEK bcXsvCu01i8fJlLgR1OIZuN3HxmwGEqdB7IcJnVFoRbi/hLnL1fbEi4y0 EaPvXy83pmV5c9VOpbrNQxfISq5f5KUHtHvyGxEHWR4mO47FpOP6uqwh6 K1kF0ryK8FFRUwQ1aFTzcr2IIIzkgDzY/6grpmfOOn6Lu7vCQsCixus1K CHBf7NlfoJTdEqw3MTyCAKARr8uPGdvovVIQ0GLugiKacGc6/N1XiTNPo WdJGqfEHuIvO+pg21ZFpffniVux5oUfh9oJpFlWdAS8Q4myYe0CS4HJM1 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="315516480" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="315516480" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 16:36:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="619018425" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="619018425" Received: from allen-box.sh.intel.com ([10.239.159.48]) by orsmga006.jf.intel.com with ESMTP; 21 Nov 2022 16:36:58 -0800 From: Lu Baolu To: Joerg Roedel Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 4/7] iommu/vt-d: Rename iommu_disable_dev_iotlb() Date: Tue, 22 Nov 2022 08:29:46 +0800 Message-Id: <20221122002949.148140-5-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221122002949.148140-1-baolu.lu@linux.intel.com> References: <20221122002949.148140-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750154958177963460?= X-GMAIL-MSGID: =?utf-8?q?1750154958177963460?= Rename iommu_disable_dev_iotlb() to iommu_disable_pci_caps() to pair with iommu_enable_pci_caps(). Signed-off-by: Lu Baolu Reviewed-by: Kevin Tian Link: https://lore.kernel.org/r/20221118132451.114406-5-baolu.lu@linux.intel.com --- drivers/iommu/intel/iommu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 603332740bc3..e814ddb84bbf 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -1441,7 +1441,7 @@ static void iommu_enable_pci_caps(struct device_domain_info *info) } } -static void iommu_disable_dev_iotlb(struct device_domain_info *info) +static void iommu_disable_pci_caps(struct device_domain_info *info) { struct pci_dev *pdev; @@ -4099,7 +4099,7 @@ static void dmar_remove_one_dev_info(struct device *dev) intel_pasid_tear_down_entry(iommu, info->dev, PASID_RID2PASID, false); - iommu_disable_dev_iotlb(info); + iommu_disable_pci_caps(info); domain_context_clear(info); } @@ -4122,7 +4122,7 @@ static void device_block_translation(struct device *dev) struct intel_iommu *iommu = info->iommu; unsigned long flags; - iommu_disable_dev_iotlb(info); + iommu_disable_pci_caps(info); if (!dev_is_real_dma_subdevice(dev)) { if (sm_supported(iommu)) intel_pasid_tear_down_entry(iommu, dev, From patchwork Tue Nov 22 00:29:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baolu Lu X-Patchwork-Id: 24068 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1920922wrr; Mon, 21 Nov 2022 16:43:24 -0800 (PST) X-Google-Smtp-Source: AA0mqf4haR9HQimWaNf71KM1kSO8SIunoBc4cLA6BkgAiLmo9MOZegkfSPLlZ46XBjwjGW2M0lkN X-Received: by 2002:a17:90a:8a86:b0:212:ec84:91d9 with SMTP id x6-20020a17090a8a8600b00212ec8491d9mr29634520pjn.139.1669077803735; Mon, 21 Nov 2022 16:43:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669077803; cv=none; d=google.com; s=arc-20160816; b=qDC9O3ZzmVyotRw5ka3FOq2qR5NRXHLj28A0igdjlIwN6hXYeX51ryBR4cu9gyxoJ3 4AyhQuyq6Y16C7cKJS5heKj+fhP05vmj2eZEvGgrNA7l5N7BA9jYLAt54ijMRAthFna9 R0BuP3j8dFsu0QZQwrltQkH3aOXUG4Azw/iamduNCvXjjnJwXBnz8uYQUJF6i4V9l4/T qbDiwyq89F27GRXPXooFJAylN3kU1/JlL5IW1ZSY8tBDZqShz96cdfpeeHNeSjOeFGUw 4mKMi9Dyd63WnY68EjT9K3wlNic+gePBpzt3Zjo4z7324GK/Ca1ULeGFKtTcBaFHGLCf DojA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ieWdoJ6IdwL7CDx0AKtVlwYjIjj806yCBp1ZBo+soD0=; b=Afw9X4bKoHwIgSHQJR+kGOTFU4CstnvkgydU2gkjeBILoZECHjL/BbP8tzFyZu/GeI TZG9ob+Hk7iOjsPqZlVvYzIAYItU+/FWBcsohBNKDLz7AT46znqWim0yVyH213FwASB4 hCRkf6QBVBuFeQJkuAyna4L4eYpUgR3sCudgF/hrktbk8Kfr4+QClEGUkxAqzrayEoz/ nefyqQlfxjYa5nYruouKpAu844iUWoGH8LvRGuIk3W/tmMyZTa1d/g4qcxdVzyjNl54c WlWcI7aRHw9DTgsZHd2+sT8XFgEWwTx1IC+90VBVPGX8XKOg4nAap79OMUo+r9l7mGKQ 6beA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="lJS/QwKg"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id me18-20020a17090b17d200b00213cb58e47bsi8845177pjb.8.2022.11.21.16.43.10; Mon, 21 Nov 2022 16:43:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="lJS/QwKg"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232017AbiKVAhR (ORCPT + 99 others); Mon, 21 Nov 2022 19:37:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53534 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231915AbiKVAhB (ORCPT ); Mon, 21 Nov 2022 19:37:01 -0500 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E97FDC6972 for ; Mon, 21 Nov 2022 16:37:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669077420; x=1700613420; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VZ2LtOW1xcwYPaSiUZLXM5yrsWzASb/u5zLe/eeYO0k=; b=lJS/QwKgDi/WvE+04MzQDmZ7HOhtorxAFqFgpaMVwIBKRemreMkU1fKO MTfb6sgrOm1U1kPH4iRZJOS6jNUZpPOt5ocloKDd3nwazfoJUiPt+YYG5 dekIY0rcnl/hDJa0XVg1IRwyFBcxIgZgSmZXLRPZpkJoymnZllIuit3XR V44u3BNIufM8CcNQQbINbSK7QpxHCLFil32R7E4v7dEtAjSktXuxELJSw h9LEyO77myzJeViP6+1buVH/fxRoOLWFGDAF8QhOsTAaph+gCoZrhgIK+ HxcaGMmc+53PiBAMmKD8Y9WRj2EE92q9+3fBMm5/eZGNdNcBCtrToBvrY A==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="315516484" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="315516484" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 16:37:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="619018429" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="619018429" Received: from allen-box.sh.intel.com ([10.239.159.48]) by orsmga006.jf.intel.com with ESMTP; 21 Nov 2022 16:36:59 -0800 From: Lu Baolu To: Joerg Roedel Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 5/7] iommu/vt-d: Rename domain_add_dev_info() Date: Tue, 22 Nov 2022 08:29:47 +0800 Message-Id: <20221122002949.148140-6-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221122002949.148140-1-baolu.lu@linux.intel.com> References: <20221122002949.148140-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750154926923858815?= X-GMAIL-MSGID: =?utf-8?q?1750154926923858815?= dmar_domain_attach_device() is more meaningful according to what this helper does. Signed-off-by: Lu Baolu Reviewed-by: Kevin Tian Link: https://lore.kernel.org/r/20221118132451.114406-6-baolu.lu@linux.intel.com --- drivers/iommu/intel/iommu.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index e814ddb84bbf..4484da88f917 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -2453,7 +2453,8 @@ static int __init si_domain_init(int hw) return 0; } -static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev) +static int dmar_domain_attach_device(struct dmar_domain *domain, + struct device *dev) { struct device_domain_info *info = dev_iommu_priv_get(dev); struct intel_iommu *iommu; @@ -4286,7 +4287,7 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, if (ret) return ret; - return domain_add_dev_info(to_dmar_domain(domain), dev); + return dmar_domain_attach_device(to_dmar_domain(domain), dev); } static int intel_iommu_map(struct iommu_domain *domain, From patchwork Tue Nov 22 00:29:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baolu Lu X-Patchwork-Id: 24072 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1921308wrr; Mon, 21 Nov 2022 16:44:26 -0800 (PST) X-Google-Smtp-Source: AA0mqf7jhgELL0dM+3ViSxD4FRVfHd2sK2VMpqiB/O07GyjNzsdD19HUfqF717f4rSmoqPABAr+l X-Received: by 2002:a17:907:9116:b0:78a:16ad:8250 with SMTP id p22-20020a170907911600b0078a16ad8250mr6075080ejq.747.1669077866190; Mon, 21 Nov 2022 16:44:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669077866; cv=none; d=google.com; s=arc-20160816; b=FEptfaBuWWx0Tv+Lu8gVJyk4VcEHicX9r7ad96z7GgJatHIVs1Ic0/rLoorMWfrsEB b58dYHSNzdcHbUQWRBOA52psKmSPexF02bkBS+LR27Qn75Gg+JO8jsKnzwF3rS2z9LLi Ac5aoDo8RO8z+7/yFqqI6KDdpEMZhuYjEZbwNLWuZy1Sb4UrpVcJe7v8YDNOxX4n8fUM 10QFgRoHbM+nAEOJytTwrTddt0I46TakZ+hOcfPjmkqjSjvzUYicfzFS3q8qcCmDeW2x V8rhJNhNQqz0nm4+qFeE676b//t9zVp7SpPfrx+bzrz0OZEdYFhfK2VY4mnHRaTD409Y vxtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=a1DhszFRHPQ2vwlJUsvceAv9Mm7fKi8Fz/g0ykrTih4=; b=JYE5Jrj6vYUABpS/3DbQuVT5TNECWFXQPldZkvYJ/r+bGFCRDf7ozU8fJAw96/cWu+ Jqjhl9XEfjXt4kXEViVU6QfzCeP6EqV6xN2lo04CWNV8ePPgGxl9UI34Zd0S0kJ8ICjP glBFuZ9iUoo5dqHaBsz/sWCQ/GlN6eoTh2lqwaZl+Z/gRB9yjueJdVNU1zHhED861oeX FiX5lJYdkUUNNELMsUBeOewEskrCfMpkGJdon0rrHECjt0Y58qfZo1jkLo4EN7mN1G4S c3YlrBtxyCvdMesJSSyJE9h/xvyqJFo1bYJFQmHv92zlZwgyhbNjwZt5XK6jxVdPBTDl UySw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dwnwGxOF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hr6-20020a1709073f8600b007b43ef7c08fsi7831805ejc.501.2022.11.21.16.43.50; Mon, 21 Nov 2022 16:44:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dwnwGxOF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232152AbiKVAha (ORCPT + 99 others); Mon, 21 Nov 2022 19:37:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231835AbiKVAhE (ORCPT ); Mon, 21 Nov 2022 19:37:04 -0500 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F27FEC6D15 for ; Mon, 21 Nov 2022 16:37:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669077422; x=1700613422; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/Jv3x8HF8iyBg2+XPw8GVEDuKMcTJ8Vysh0iMn4ChJY=; b=dwnwGxOFmxx3aKYg/cEXly0Vto3tnJglsizbdg1S9i2tP7jsGEk1N6ak aR8a3gCBZt7i15/y0v/v/VAuKO+mjQhSQdmZz6xMqIWSaFL2WVno24C8F 02epWQXK0DYhlJsst5W2CZG/CnCckQFcp06qsg+zv1dx2aEHE5utBo164 89LUaeGdIqAl1lVIkEF/sdFzkCKkPwHUcLveGsr/erxbiuMW+5SQAkd8Z xoIKUJWYwJ7OL/1IUOXxgpdJKee0Bi8Akd9IP3quPmZpJyVOCPQcsvjep l0pRycsBsS57SuvFhJgsqS8Qh5LG3dwbnu/4BSRXa+irApw1y6eYkfblQ g==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="311325680" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="311325680" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 16:37:02 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="619018435" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="619018435" Received: from allen-box.sh.intel.com ([10.239.159.48]) by orsmga006.jf.intel.com with ESMTP; 21 Nov 2022 16:37:01 -0800 From: Lu Baolu To: Joerg Roedel Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 6/7] iommu/vt-d: Remove unnecessary domain_context_mapped() Date: Tue, 22 Nov 2022 08:29:48 +0800 Message-Id: <20221122002949.148140-7-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221122002949.148140-1-baolu.lu@linux.intel.com> References: <20221122002949.148140-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750154992594420770?= X-GMAIL-MSGID: =?utf-8?q?1750154992594420770?= The device_domain_info::domain accurately records the domain attached to the device. It is unnecessary to check whether the context is present in the attach_dev path. Remove it to make the code neat. Signed-off-by: Lu Baolu Reviewed-by: Kevin Tian Link: https://lore.kernel.org/r/20221118132451.114406-7-baolu.lu@linux.intel.com --- drivers/iommu/intel/iommu.c | 47 +++---------------------------------- 1 file changed, 3 insertions(+), 44 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 4484da88f917..3a05cfbc252a 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -780,19 +780,6 @@ static void domain_flush_cache(struct dmar_domain *domain, clflush_cache_range(addr, size); } -static int device_context_mapped(struct intel_iommu *iommu, u8 bus, u8 devfn) -{ - struct context_entry *context; - int ret = 0; - - spin_lock(&iommu->lock); - context = iommu_context_addr(iommu, bus, devfn, 0); - if (context) - ret = context_present(context); - spin_unlock(&iommu->lock); - return ret; -} - static void free_context_table(struct intel_iommu *iommu) { struct context_entry *context; @@ -2097,30 +2084,6 @@ domain_context_mapping(struct dmar_domain *domain, struct device *dev) &domain_context_mapping_cb, &data); } -static int domain_context_mapped_cb(struct pci_dev *pdev, - u16 alias, void *opaque) -{ - struct intel_iommu *iommu = opaque; - - return !device_context_mapped(iommu, PCI_BUS_NUM(alias), alias & 0xff); -} - -static int domain_context_mapped(struct device *dev) -{ - struct intel_iommu *iommu; - u8 bus, devfn; - - iommu = device_to_iommu(dev, &bus, &devfn); - if (!iommu) - return -ENODEV; - - if (!dev_is_pci(dev)) - return device_context_mapped(iommu, bus, devfn); - - return !pci_for_each_dma_alias(to_pci_dev(dev), - domain_context_mapped_cb, iommu); -} - /* Returns a number of VTD pages, but aligned to MM page size */ static inline unsigned long aligned_nrpages(unsigned long host_addr, size_t size) @@ -4267,6 +4230,7 @@ static int prepare_domain_attach_device(struct iommu_domain *domain, static int intel_iommu_attach_device(struct iommu_domain *domain, struct device *dev) { + struct device_domain_info *info = dev_iommu_priv_get(dev); int ret; if (domain->type == IOMMU_DOMAIN_UNMANAGED && @@ -4275,13 +4239,8 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, return -EPERM; } - /* normally dev is not mapped */ - if (unlikely(domain_context_mapped(dev))) { - struct device_domain_info *info = dev_iommu_priv_get(dev); - - if (info->domain) - device_block_translation(dev); - } + if (info->domain) + device_block_translation(dev); ret = prepare_domain_attach_device(domain, dev); if (ret) From patchwork Tue Nov 22 00:29:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baolu Lu X-Patchwork-Id: 24071 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1921237wrr; Mon, 21 Nov 2022 16:44:10 -0800 (PST) X-Google-Smtp-Source: AA0mqf42U0tafGgCisbMgUbawJhq3m6srtyQOKnoqmML5YeKKm1Q6gvoGFznGUWefviI9SjIcWO6 X-Received: by 2002:aa7:dd45:0:b0:45a:3c66:b0e4 with SMTP id o5-20020aa7dd45000000b0045a3c66b0e4mr19306760edw.33.1669077850175; Mon, 21 Nov 2022 16:44:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669077850; cv=none; d=google.com; s=arc-20160816; b=Efx1OlZ2kbAtaCZ9kEZbHqCsuxLX4FUc0eyJ4z6XgOvD4ZoEHa352LuIdYr6Kp5jhA ecTmlaQEHGRgyfYAmdFqllm1Pqo3slfO4VJGouZyHyOwNSV43z1ZaywscHz+7fb2OKUE 3Li2/ghXB4J3juxaYNUHvQlEso50VXu/+Dt850xJvUlWzfk6qzm8lo0Cet9GURws2EiO JCEX7T6GeU+zcWagZZfnjZTPflaWrDUs5p3xhOV6gl/EryD6u7ORRJ93IdiygfqR6d8H VNkvf4PhQSx2ckCsMPcXEMqRCxvr7qIQ5K21IaYf6KcGjpD+jeafK91nmBhCFZMjSvbW oYeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vwCm7CtAvWBdbBDv0SFopbgeK/4nknGaOuBhgotNQxY=; b=o/OOuuvNcEmIwYwUsO6yDYOnwsx8fYazMfaJw1vs1K/jxK8T/2qh/1luk7zW8T2jJ0 weEDP8SoUbNCgQn1SgkRZrsg9mRCzLjUQf9iqijbK04OWeHkUQLmgdQLsOyaNXdKNYWf aUJgoDCU5jGEqRUPlYfwA4VVbtOPJMiWFhpGmZ8/GX/ZgCvp/hT2rbzTUuKyswoPnVV+ 8C69Iq5KCIJebdMM1A9cDbdRwgcZr57oTLYhre64zAOWjUeZ6yiudEY4bOae9SdtV9wd Ha6j1UT+uD1PH+kmdFCzePJwH5keVt4yAH+zzweIVQ1yiH/J4dS/ymmAOBM4+FjP6K06 C2ag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=XfU2rGYL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id qa17-20020a170907869100b0078239e3f846si427005ejc.1.2022.11.21.16.43.43; Mon, 21 Nov 2022 16:44:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=XfU2rGYL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231964AbiKVAhY (ORCPT + 99 others); Mon, 21 Nov 2022 19:37:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231906AbiKVAhE (ORCPT ); Mon, 21 Nov 2022 19:37:04 -0500 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B273AC758E for ; Mon, 21 Nov 2022 16:37:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669077423; x=1700613423; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=43F3BI4HZ1o7zLhMgPgev7UwWC1JI2ewMMrjPJKUpH4=; b=XfU2rGYLqqp+rd7MBpWxOlxXqHtxoRGUWCG2SWX/YRtN+zbyDSdZdnbH 5IdB92YZIZEW7fi2ybPY2ht+lgL1RIyNxRFYZ89PpVFq091MK3qc1S4Uq Q8IkGFTh/12UwKRFG0L7kwnDruTA40AD6bbH9+XH4FVmT9iXJahCWkHFX 51PLo8ZQWLwaFGbVekxSAH21dTuZ5O2O/6oU9riIgYvrziaSaeeCo7DnB T5eXRIV0Cr2dV1Q5N0RztcNCoY8dSQgW7fv0zZYoVEhmyzw7sQH2UvrdY hISAnumpgbdUS5+JULhQ+xSsJtxQwCFYj/s/iwL1MoUXxhEqmASRV6Qjl Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="311325683" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="311325683" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 16:37:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="619018448" X-IronPort-AV: E=Sophos;i="5.96,182,1665471600"; d="scan'208";a="619018448" Received: from allen-box.sh.intel.com ([10.239.159.48]) by orsmga006.jf.intel.com with ESMTP; 21 Nov 2022 16:37:02 -0800 From: Lu Baolu To: Joerg Roedel Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 7/7] iommu/vt-d: Use real field for indication of first level Date: Tue, 22 Nov 2022 08:29:49 +0800 Message-Id: <20221122002949.148140-8-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221122002949.148140-1-baolu.lu@linux.intel.com> References: <20221122002949.148140-1-baolu.lu@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750154975919258975?= X-GMAIL-MSGID: =?utf-8?q?1750154975919258975?= The dmar_domain uses bit field members to indicate the behaviors. Add a bit field for using first level and remove the flags member to avoid duplication. Signed-off-by: Lu Baolu Reviewed-by: Kevin Tian Link: https://lore.kernel.org/r/20221118132451.114406-8-baolu.lu@linux.intel.com --- drivers/iommu/intel/iommu.h | 15 +++++---------- drivers/iommu/intel/iommu.c | 25 ++++++++++--------------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h index 251a609fdce3..7b7234689cb4 100644 --- a/drivers/iommu/intel/iommu.h +++ b/drivers/iommu/intel/iommu.h @@ -515,14 +515,6 @@ struct context_entry { u64 hi; }; -/* - * When VT-d works in the scalable mode, it allows DMA translation to - * happen through either first level or second level page table. This - * bit marks that the DMA translation for the domain goes through the - * first level page table, otherwise, it goes through the second level. - */ -#define DOMAIN_FLAG_USE_FIRST_LEVEL BIT(1) - struct iommu_domain_info { struct intel_iommu *iommu; unsigned int refcnt; /* Refcount of devices per iommu */ @@ -539,6 +531,11 @@ struct dmar_domain { u8 iommu_coherency: 1; /* indicate coherency of iommu access */ u8 force_snooping : 1; /* Create IOPTEs with snoop control */ u8 set_pte_snp:1; + u8 use_first_level:1; /* DMA translation for the domain goes + * through the first level page table, + * otherwise, goes through the second + * level. + */ spinlock_t lock; /* Protect device tracking lists */ struct list_head devices; /* all devices' list */ @@ -548,8 +545,6 @@ struct dmar_domain { /* adjusted guest address width, 0 is level 2 30-bit */ int agaw; - - int flags; /* flags to find out type of domain */ int iommu_superpage;/* Level of superpages supported: 0 == 4KiB (no superpages), 1 == 2MiB, 2 == 1GiB, 3 == 512GiB, 4 == 1TiB */ diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 3a05cfbc252a..cd71194fe7a6 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -383,11 +383,6 @@ static inline int domain_type_is_si(struct dmar_domain *domain) return domain->domain.type == IOMMU_DOMAIN_IDENTITY; } -static inline bool domain_use_first_level(struct dmar_domain *domain) -{ - return domain->flags & DOMAIN_FLAG_USE_FIRST_LEVEL; -} - static inline int domain_pfn_supported(struct dmar_domain *domain, unsigned long pfn) { @@ -501,7 +496,7 @@ static int domain_update_iommu_superpage(struct dmar_domain *domain, rcu_read_lock(); for_each_active_iommu(iommu, drhd) { if (iommu != skip) { - if (domain && domain_use_first_level(domain)) { + if (domain && domain->use_first_level) { if (!cap_fl1gp_support(iommu->cap)) mask = 0x1; } else { @@ -579,7 +574,7 @@ static void domain_update_iommu_cap(struct dmar_domain *domain) * paging and 57-bits with 5-level paging). Hence, skip bit * [N-1]. */ - if (domain_use_first_level(domain)) + if (domain->use_first_level) domain->domain.geometry.aperture_end = __DOMAIN_MAX_ADDR(domain->gaw - 1); else domain->domain.geometry.aperture_end = __DOMAIN_MAX_ADDR(domain->gaw); @@ -947,7 +942,7 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain, domain_flush_cache(domain, tmp_page, VTD_PAGE_SIZE); pteval = ((uint64_t)virt_to_dma_pfn(tmp_page) << VTD_PAGE_SHIFT) | DMA_PTE_READ | DMA_PTE_WRITE; - if (domain_use_first_level(domain)) + if (domain->use_first_level) pteval |= DMA_FL_PTE_XD | DMA_FL_PTE_US | DMA_FL_PTE_ACCESS; if (cmpxchg64(&pte->val, 0ULL, pteval)) @@ -1498,7 +1493,7 @@ static void iommu_flush_iotlb_psi(struct intel_iommu *iommu, if (ih) ih = 1 << 6; - if (domain_use_first_level(domain)) { + if (domain->use_first_level) { qi_flush_piotlb(iommu, did, PASID_RID2PASID, addr, pages, ih); } else { unsigned long bitmask = aligned_pages - 1; @@ -1552,7 +1547,7 @@ static inline void __mapping_notify_one(struct intel_iommu *iommu, * It's a non-present to present mapping. Only flush if caching mode * and second level. */ - if (cap_caching_mode(iommu->cap) && !domain_use_first_level(domain)) + if (cap_caching_mode(iommu->cap) && !domain->use_first_level) iommu_flush_iotlb_psi(iommu, domain, pfn, pages, 0, 1); else iommu_flush_write_buffer(iommu); @@ -1568,7 +1563,7 @@ static void intel_flush_iotlb_all(struct iommu_domain *domain) struct intel_iommu *iommu = info->iommu; u16 did = domain_id_iommu(dmar_domain, iommu); - if (domain_use_first_level(dmar_domain)) + if (dmar_domain->use_first_level) qi_flush_piotlb(iommu, did, PASID_RID2PASID, 0, -1, 0); else iommu->flush.flush_iotlb(iommu, did, 0, 0, @@ -1741,7 +1736,7 @@ static struct dmar_domain *alloc_domain(unsigned int type) domain->nid = NUMA_NO_NODE; if (first_level_by_default(type)) - domain->flags |= DOMAIN_FLAG_USE_FIRST_LEVEL; + domain->use_first_level = true; domain->has_iotlb_device = false; INIT_LIST_HEAD(&domain->devices); spin_lock_init(&domain->lock); @@ -2173,7 +2168,7 @@ __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn, attr = prot & (DMA_PTE_READ | DMA_PTE_WRITE | DMA_PTE_SNP); attr |= DMA_FL_PTE_PRESENT; - if (domain_use_first_level(domain)) { + if (domain->use_first_level) { attr |= DMA_FL_PTE_XD | DMA_FL_PTE_US | DMA_FL_PTE_ACCESS; if (prot & DMA_PTE_WRITE) attr |= DMA_FL_PTE_DIRTY; @@ -2443,7 +2438,7 @@ static int dmar_domain_attach_device(struct dmar_domain *domain, if (hw_pass_through && domain_type_is_si(domain)) ret = intel_pasid_setup_pass_through(iommu, domain, dev, PASID_RID2PASID); - else if (domain_use_first_level(domain)) + else if (domain->use_first_level) ret = domain_setup_first_level(iommu, domain, dev, PASID_RID2PASID); else @@ -4410,7 +4405,7 @@ static void domain_set_force_snooping(struct dmar_domain *domain) * Second level page table supports per-PTE snoop control. The * iommu_map() interface will handle this by setting SNP bit. */ - if (!domain_use_first_level(domain)) { + if (!domain->use_first_level) { domain->set_pte_snp = true; return; }