From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F2F85C4167B for ; Wed, 6 Dec 2023 01:54:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID:References: Mime-Version:In-Reply-To:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=h3nwkJfIZQgSUeWZfgG4iMz9+ZM1sn1wv/XIx2UlY1Q=; b=u6YFz/ZNZAxMJq QKPCZah4U/j5+oNC6FeY6SxhL3YquriOpMti8p0pAvHfCCvyhq7pDi/jowKMIej0HcQkG76bkFPUg QuBOR8sGe2qkQomC4+aQmyrmrlvVtGC1AfPi9PJ3Aq7HBnqsAuuEMW58Xext0nmDOtocjrfGwv1C9 0pG2iLaNIF7zOtyhgTSplDCbuFXB0B8/GqYGfF8n73eiVWojX/ecs4Z8YNV0ko0f1gRmqD3UG6MEP h+JyFOZhBuXnlZFYtCzayBZl83Gci4FVT/jn3cJ3XNc52y+TJw9gmQ2ewVYhJp2C2MFh0AdfH21CW MbbNK6zYW46UW7QB6VzQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rAh6k-008qg0-2t; Wed, 06 Dec 2023 01:53:50 +0000 Received: from mail-qv1-xf49.google.com ([2607:f8b0:4864:20::f49]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rAh6e-008qcv-2O for linux-arm-kernel@lists.infradead.org; Wed, 06 Dec 2023 01:53:49 +0000 Received: by mail-qv1-xf49.google.com with SMTP id 6a1803df08f44-67a9e59e1b5so59608066d6.1 for ; Tue, 05 Dec 2023 17:53:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1701827620; x=1702432420; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=WF0zb0TZTsACwR1koj3GHJ0g9xK3Yw40DA0v34OkQWI=; b=ksEQAoloXD0jBCW8rInpF6PMXLqKJbPsyI6oZ159KiFfUg3hvVdNkKJasAj7OC0vKZ NrAmmHtK9HnusOsLTvemtbD5V25NxR4oZX7e0dO2UeToCa7Ayr4cfbIVXgshdpcydahN zHpln8rZurh7/D0gvTw1LaZamXjdRsLO1TqlJc+Gk9fXHzFYVIfTnLQNaKRWUpkvSrHr e7I7QpxR+ZZWJQDLySf1EXdp4Z1AeKpQrcyYr1dX20RC97n4pAu0eJuKea3tIhudgfeb UmZmEPVxQOWjWsHKsX6rXm7xp7N4C6fswuKW23UCJOPhxRB4zuwb3NfhJnbp3nlpI2vQ DJ8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701827620; x=1702432420; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WF0zb0TZTsACwR1koj3GHJ0g9xK3Yw40DA0v34OkQWI=; b=t83GuqlLciuI3o52BTqaN2VARrtza/1jWlkoUMEzfIinGajZWRzYDNK5keQ/Do/++5 aA2TUHkxvwBcfvRqSS3noMdUc5njtxDcCQ1p2m8m27DfqAICVVGxbj0X3i5AqS09C5I1 1OF9hDgLeskrsu3JizrEFiD5ypAu7x7sYEvETOAo0L1nuU+gA8LQ2REb0Skj+WiOhVKx CpeAmmM3Aj2xUBWTnn7f66mCxsoBwFffwmm/snT+3X3ls1b8FxP2LEAK82teUkCyzFsA XsSZn7awu14tbfky38foNlAiR92VMaOTA1sTLfZ0ZlwXTf3tmCY+hZM3IDs1C0a/fpgE YMqQ== X-Gm-Message-State: AOJu0Yx3hPXo28jdwSoU9Uh6OEYbqnRK7v8qIvbT1WKyG53asLTpGpuy wcTCCtctNQi6B2OR7ZKg9IrP91sJVfQp X-Google-Smtp-Source: AGHT+IFQS/QRtXt0EUqefufu0Zn/eM7b8YHeCDl8xRh8AdtVoKcskpac+q85tiAK6Cmtjz0G29BBdaPgmikA X-Received: from morats.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:d9e]) (user=moritzf job=sendgmr) by 2002:a0c:e912:0:b0:67a:b419:5443 with SMTP id a18-20020a0ce912000000b0067ab4195443mr1250qvo.5.1701827619921; Tue, 05 Dec 2023 17:53:39 -0800 (PST) Date: Wed, 6 Dec 2023 01:53:37 +0000 In-Reply-To: <0-v3-d794f8d934da+411a-smmuv3_newapi_p1_jgg@nvidia.com> Mime-Version: 1.0 References: <0-v3-d794f8d934da+411a-smmuv3_newapi_p1_jgg@nvidia.com> Message-ID: <20231206015337.edefoajnku374qpm@google.com> Subject: Re: [PATCH v3 00/19] Update SMMUv3 to the modern iommu API (part 1/3) From: Moritz Fischer To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Eric Auger , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameer Kolothum X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231205_175344_798250_8EC5DFF9 X-CRM114-Status: GOOD ( 33.37 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed"; DelSp="yes" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Jason, just got back to actually having access to my machine... On Tue, Dec 05, 2023 at 03:14:32PM -0400, Jason Gunthorpe wrote: > The SMMUv3 driver was originally written in 2015 when the iommu driver > facing API looked quite different. The API has evolved, especially lately, > and the driver has fallen behind. > This work aims to bring make the SMMUv3 driver the best IOMMU driver with > the most comprehensive implementation of the API. After all parts it > addresses: > - Global static BLOCKED and IDENTITY domains with 'never fail' attach > semantics. BLOCKED is desired for efficient VFIO. > - Support map before attach for PAGING iommu_domains. > - attach_dev failure does not change the HW configuration. > - Fully hitless transitions between IDENTITY -> DMA -> IDENTITY. > The API has IOMMU_RESV_DIRECT which is expected to be > continuously translating. > - Safe transitions between PAGING -> BLOCKED, do not ever temporarily > do IDENTITY. This is required for iommufd security. > - Full PASID API support including: > - S1/SVA domains attached to PASIDs > - IDENTITY/BLOCKED/S1 attached to RID > - Change of the RID domain while PASIDs are attached > - Streamlined SVA support using the core infrastructure > - Hitless, whenever possible, change between two domains > - iommufd IOMMU_GET_HW_INFO, IOMMU_HWPT_ALLOC_NEST_PARENT, and > IOMMU_DOMAIN_NESTED support > Over all these things are going to become more accessible to iommufd, and > exposed to VMs, so it is important for the driver to have a robust > implementation of the API. > The work is split into three parts, with this part largely focusing on the > STE and building up to the BLOCKED & IDENTITY global static domains. > The second part largely focuses on the CD and builds up to having a common > PASID infrastructure that SVA and S1 domains equally use. > The third part has some random cleanups and the iommufd related parts. > Overall this takes the approach of turning the STE/CD programming upside > down where the CD/STE value is computed right at a driver callback > function and then pushed down into programming logic. The programming > logic hides the details of the required CD/STE tear-less update. This > makes the CD/STE functions independent of the arm_smmu_domain which makes > it fairly straightforward to untangle all the different call chains, and > add news ones. > Further, this frees the arm_smmu_domain related logic from keeping track > of what state the STE/CD is currently in so it can carefully sequence the > correct update. There are many new update pairs that are subtly introduced > as the work progresses. > The locking to support BTM via arm_smmu_asid_lock is a bit subtle right > now and patches throughout this work adjust and tighten this so that it is > clearer and doesn't get broken. > Once the lower STE layers no longer need to touch arm_smmu_domain we can > isolate struct arm_smmu_domain to be only used for PAGING domains, audit > all the to_smmu_domain() calls to be only in PAGING domain ops, and > introduce the normal global static BLOCKED/IDENTITY domains using the new > STE infrastructure. Part 2 will ultimately migrate SVA over to use > arm_smmu_domain as well. > All parts are on github: > https://github.com/jgunthorpe/linux/commits/smmuv3_newapi > v3: > - Use some local variables in arm_smmu_get_step_for_sid() for clarity > - White space and spelling changes > - Commit message updates > - Keep master->domain_head initialized to avoid a list_del corruption > v2: > https://lore.kernel.org/r/0-v2-de8b10590bf5+400-smmuv3_newapi_p1_jgg@nvidia.com > - Rebased on v6.7-rc1 > - Improve the comment for arm_smmu_write_entry_step() > - Fix the botched memcmp > - Document the spec justification for the SHCFG exclusion in used > - Include STRTAB_STE_1_SHCFG for STRTAB_STE_0_CFG_S2_TRANS in used > - WARN_ON for unknown STEs in used > - Fix error unwind in arm_smmu_attach_dev() > - Whitespace, spelling, and checkpatch related items > v1: > https://lore.kernel.org/r/0-v1-e289ca9121be+2be-smmuv3_newapi_p1_jgg@nvidia.com > Jason Gunthorpe (19): > iommu/arm-smmu-v3: Add a type for the STE > iommu/arm-smmu-v3: Master cannot be NULL in > arm_smmu_write_strtab_ent() > iommu/arm-smmu-v3: Remove ARM_SMMU_DOMAIN_NESTED > iommu/arm-smmu-v3: Make STE programming independent of the callers > iommu/arm-smmu-v3: Consolidate the STE generation for abort/bypass > iommu/arm-smmu-v3: Move arm_smmu_rmr_install_bypass_ste() > iommu/arm-smmu-v3: Move the STE generation for S1 and S2 domains into > functions > iommu/arm-smmu-v3: Build the whole STE in > arm_smmu_make_s2_domain_ste() > iommu/arm-smmu-v3: Hold arm_smmu_asid_lock during all of attach_dev > iommu/arm-smmu-v3: Compute the STE only once for each master > iommu/arm-smmu-v3: Do not change the STE twice during > arm_smmu_attach_dev() > iommu/arm-smmu-v3: Put writing the context descriptor in the right > order > iommu/arm-smmu-v3: Pass smmu_domain to arm_enable/disable_ats() > iommu/arm-smmu-v3: Remove arm_smmu_master->domain > iommu/arm-smmu-v3: Add a global static IDENTITY domain > iommu/arm-smmu-v3: Add a global static BLOCKED domain > iommu/arm-smmu-v3: Use the identity/blocked domain during release > iommu/arm-smmu-v3: Pass arm_smmu_domain and arm_smmu_device to > finalize > iommu/arm-smmu-v3: Convert to domain_alloc_paging() > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 729 +++++++++++++------- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 12 +- > 2 files changed, 477 insertions(+), 264 deletions(-) > base-commit: ca7fcaff577c92d85f0e05cc7be79759155fe328 > -- > 2.43.0 For whole series: Tested-by: Moritz Fischer Cheers, Moritz _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel