Message ID | cover.1696253096.git.robin.murphy@arm.com |
---|---|
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2a8e:b0:403:3b70:6f57 with SMTP id in14csp1445652vqb; Mon, 2 Oct 2023 07:00:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF4qyVDG99MCV6x6oUzIZVHM9IEdHIIksmfukQLlKESS+DE+JlE3xOUpJCNjKUto6pN6o0J X-Received: by 2002:a05:6a20:8416:b0:f0:50c4:4c43 with SMTP id c22-20020a056a20841600b000f050c44c43mr18851340pzd.5.1696255241845; Mon, 02 Oct 2023 07:00:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696255241; cv=none; d=google.com; s=arc-20160816; b=i7KVK8CkTO5Tqa0T0T8i16uQlsPQR+LN/cp45zF2YJOeE7H4bAcMhulePt1yBRqQzL oxCP/3FA+o+ypK3xRL7yDfF8ZSrKlaLXZytDjDj9KR5HJJ/S/S3ku49KDSbHGEEcAwu5 LlpWObeX4Q3vcDrZrLsTbuGRmlvkhLkGsj6dCYw+VoNcot0yK1LXBEaCI/vYKPeo3vL2 E88O6DE/tH5XPecbVDqxS8qY3EwjVYQyOBzLOwqd7sbpZo3FxnixGaKhnl09EQJkk7Qw fjaOkRpiucY4VVqSWlf0StmlNyqZ15WXldAEES01clHBD7o2Y+qnbGo8UdNe8jOJd9SV tGIQ== 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 :message-id:date:subject:cc:to:from; bh=EIlisW2DPrABQ/QKwgSxzznYWNx9fNRn0RrYfrrCAD8=; fh=3nQM0QufZPSZ94JO+WDmHkrFziuG1/NJr0OD1jy0Wvc=; b=t91YCqfEzLXxt2XyQha8cr0bJQczztn+tqLlLGcjmhPOeMV9LLkMJPdEKS3rxcF6Gn iQKQ9AQtB/rbcG+pitBf68hlk4Kb9nD8sB2cXH0iBkENUSWDUIJ37mmyPGHUqwEdapWa nCUkygkOs6usHWl6w5wfRGjHeeooQJF2p7lFahe0hg2mF41aSkiJG3wxjTtGGxutzXfX P0g4HL/Cm+P6JJGurIqVmmp2Yuwq2SYcLjzqgZSTgI82BV4QZTIghWGxP7Ti3tJuZVKj cxB0w9K9ZXatYmeMP2ck03c/Wbf/SM2Qwl9u6rFMhcyh1ydwQH66RCQCOyDYC++3m8Ff IJIQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id w64-20020a638243000000b0056949c3eda8si10375191pgd.119.2023.10.02.07.00.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Oct 2023 07:00:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id F16848076654; Mon, 2 Oct 2023 06:50:56 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237510AbjJBNtY (ORCPT <rfc822;pusanteemu@gmail.com> + 18 others); Mon, 2 Oct 2023 09:49:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45092 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237506AbjJBNtX (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Mon, 2 Oct 2023 09:49:23 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 24DFE9E for <linux-kernel@vger.kernel.org>; Mon, 2 Oct 2023 06:49:20 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 58A5CC15; Mon, 2 Oct 2023 06:49:58 -0700 (PDT) Received: from e121345-lin.cambridge.arm.com (e121345-lin.cambridge.arm.com [10.1.196.40]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 0D6EF3F762; Mon, 2 Oct 2023 06:49:18 -0700 (PDT) From: Robin Murphy <robin.murphy@arm.com> To: joro@8bytes.org, will@kernel.org Cc: iommu@lists.linux.dev, jgg@nvidia.com, baolu.lu@linux.intel.com, linux-kernel@vger.kernel.org Subject: [PATCH v4 0/7] iommu: Retire bus ops Date: Mon, 2 Oct 2023 14:49:08 +0100 Message-Id: <cover.1696253096.git.robin.murphy@arm.com> X-Mailer: git-send-email 2.39.2.101.g768bb238c484.dirty MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Mon, 02 Oct 2023 06:50:57 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778652376121386391 X-GMAIL-MSGID: 1778652536875659276 |
Series |
iommu: Retire bus ops
|
|
Message
Robin Murphy
Oct. 2, 2023, 1:49 p.m. UTC
v3: https://lore.kernel.org/linux-iommu/cover.1694693889.git.robin.murphy@arm.com/ Hi all, This one really is hopefully ready to go now - rebased on iommu/core, and lightly tested by booting a machine with SMMUv3 and running the IOMMUFD selftest for good measure (with the usual handful of mmap() failures I always seem to get, but nothing relevant exploded). Thanks, Robin. Robin Murphy (7): iommu: Factor out some helpers iommu: Decouple iommu_present() from bus ops iommu: Validate that devices match domains iommu: Switch __iommu_domain_alloc() to device ops iommu/arm-smmu: Don't register fwnode for legacy binding iommu: Retire bus ops iommu: Clean up open-coded ownership checks drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 3 - drivers/iommu/arm/arm-smmu/arm-smmu.c | 12 +- drivers/iommu/arm/arm-smmu/qcom_iommu.c | 16 +- drivers/iommu/iommu.c | 162 +++++++++++++------- drivers/iommu/mtk_iommu.c | 7 +- drivers/iommu/mtk_iommu_v1.c | 3 - drivers/iommu/sprd-iommu.c | 8 +- drivers/iommu/virtio-iommu.c | 3 - include/acpi/acpi_bus.h | 2 + include/linux/device.h | 1 - include/linux/device/bus.h | 5 - include/linux/dma-map-ops.h | 1 + include/linux/iommu.h | 1 + 13 files changed, 115 insertions(+), 109 deletions(-)
Comments
On 02/10/2023 3:17 pm, Jason Gunthorpe wrote: > On Mon, Oct 02, 2023 at 02:49:10PM +0100, Robin Murphy wrote: >> Much as I'd like to remove iommu_present(), the final remaining users >> are proving stubbornly difficult to clean up, so kick that can down the >> road and just rework it to preserve the current behaviour without >> depending on bus ops. Since commit 57365a04c921 ("iommu: Move bus setup >> to IOMMU device registration"), any registered IOMMU instance is already >> considered "present" for every entry in iommu_buses, so it's simply a >> case of validating the bus and checking we have at least once IOMMU. >> >> Signed-off-by: Robin Murphy <robin.murphy@arm.com> >> >> --- >> >> v3: Tweak to use the ops-based check rather than group-based, to >> properly match the existing behaviour >> v4: Just look for IOMMU instances instead of managed devices >> --- >> drivers/iommu/iommu.c | 21 ++++++++++++++++++++- >> 1 file changed, 20 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c >> index f7793d1b5c3e..ef7feb0acc34 100644 >> --- a/drivers/iommu/iommu.c >> +++ b/drivers/iommu/iommu.c >> @@ -1988,9 +1988,28 @@ int bus_iommu_probe(const struct bus_type *bus) >> return 0; >> } >> >> +/** >> + * iommu_present() - make platform-specific assumptions about an IOMMU >> + * @bus: bus to check >> + * >> + * Do not use this function. You want device_iommu_mapped() instead. >> + * >> + * Return: true if some IOMMU is present and aware of devices on the given bus; >> + * in general it may not be the only IOMMU, and it may not have anything to do >> + * with whatever device you are ultimately interested in. >> + */ >> bool iommu_present(const struct bus_type *bus) >> { >> - return bus->iommu_ops != NULL; >> + bool ret = false; >> + >> + for (int i = 0; i < ARRAY_SIZE(iommu_buses); i++) { >> + if (iommu_buses[i] == bus) { >> + spin_lock(&iommu_device_lock); >> + ret = !list_empty(&iommu_device_list); >> + spin_unlock(&iommu_device_lock); >> + } > > Add here: > > return ret; > >> + } >> + return ret; > > And this becomes > > return false > > ? My aim here was for the smallest, simplest code, given that what we still really want is no code, and this is basically only being retained to serve that one tricky Tegra callsite. I guess I could have also added "&& !ret" to the loop condition, but either way since this should never be on a hot path I figured it's not worth the bother just to save a handful of extra comparisons. > Regardless > > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Thanks! Robin.