linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@nvidia.com>
To: Nicolin Chen <nicolinc@nvidia.com>
Cc: kevin.tian@intel.com, will@kernel.org, joro@8bytes.org,
	suravee.suthikulpanit@amd.com, robin.murphy@arm.com,
	dwmw2@infradead.org, baolu.lu@linux.intel.com, shuah@kernel.org,
	linux-kernel@vger.kernel.org, iommu@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org,
	linux-kselftest@vger.kernel.org
Subject: Re: [PATCH v1 15/16] iommu/arm-smmu-v3: Add viommu cache invalidation support
Date: Thu, 15 Aug 2024 20:36:35 -0300	[thread overview]
Message-ID: <20240815233635.GV2032816@nvidia.com> (raw)
In-Reply-To: <729dfd0808f85d88fd3ef8bcea0168cc1d2c0d59.1723061378.git.nicolinc@nvidia.com>

On Wed, Aug 07, 2024 at 01:10:56PM -0700, Nicolin Chen wrote:
> Add an arm_smmu_viommu_cache_invalidate() function for user space to issue
> cache invalidation commands via viommu.
> 
> The viommu invalidation takes the same native format of a 128-bit command,
> as the hwpt invalidation. Thus, reuse the same driver data structure, but
> make it wider to accept CMDQ_OP_ATC_INV and CMDQ_OP_CFGI_CD{_ALL}.
> 
> Scan the commands against the supported ist and fix the VMIDs and SIDs.
> 
> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
> ---
>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 54 +++++++++++++++++++--
>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h |  1 +
>  include/uapi/linux/iommufd.h                | 20 ++++++++
>  3 files changed, 70 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> index ec76377d505c..be4f849f1a48 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> @@ -3219,15 +3219,32 @@ static void arm_smmu_domain_nested_free(struct iommu_domain *domain)
>  	kfree(container_of(domain, struct arm_smmu_nested_domain, domain));
>  }
>  
> +static int arm_smmu_convert_viommu_vdev_id(struct iommufd_viommu *viommu,
> +					   u32 vdev_id, u32 *sid)
> +{
> +	struct arm_smmu_master *master;
> +	struct device *dev;
> +
> +	dev = iommufd_viommu_find_device(viommu, vdev_id);
> +	if (!dev)
> +		return -EIO;
> +	master = dev_iommu_priv_get(dev);
> +
> +	if (sid)
> +		*sid = master->streams[0].id;

See this is the thing that needs to be locked right

xa_lock()
dev = xa_load()
master = dev_iommu_priv_get(dev);
*sid =  master->streams[0].id;
xa_unlock()

Then no risk of dev going away under us.

> @@ -3249,6 +3266,19 @@ arm_smmu_convert_user_cmd(struct arm_smmu_domain *s2_parent,
>  		cmd->cmd[0] &= ~CMDQ_TLBI_0_VMID;
>  		cmd->cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_VMID, vmid);
>  		break;
> +	case CMDQ_OP_ATC_INV:
> +	case CMDQ_OP_CFGI_CD:
> +	case CMDQ_OP_CFGI_CD_ALL:

Oh, I didn't catch on that CD was needing this too.. :\

That makes the other op much more useless than I expected. I really
wanted to break these two series apart.

Maybe we need to drop the hwpt invalidation from the other series and
aim to merge this all together through the iommufd tree.

Jason


  reply	other threads:[~2024-08-15 23:37 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-07 20:10 [PATCH v1 00/16] iommufd: Add VIOMMU infrastructure (Part-1) Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 01/16] iommufd/viommu: Add IOMMUFD_OBJ_VIOMMU and IOMMU_VIOMMU_ALLOC ioctl Nicolin Chen
2024-08-14 16:50   ` Nicolin Chen
2024-08-15 18:11   ` Jason Gunthorpe
2024-08-15 18:20     ` Nicolin Chen
2024-08-15 23:37       ` Jason Gunthorpe
2024-08-15 18:31   ` Jason Gunthorpe
2024-08-07 20:10 ` [PATCH v1 02/16] iommu: Pass in a viommu pointer to domain_alloc_user op Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 03/16] iommufd: Allow pt_id to carry viommu_id for IOMMU_HWPT_ALLOC Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 04/16] iommufd/selftest: Add IOMMU_VIOMMU_ALLOC test coverage Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 05/16] iommufd/viommu: Add IOMMU_VIOMMU_SET/UNSET_VDEV_ID ioctl Nicolin Chen
2024-08-14 17:09   ` Nicolin Chen
2024-08-14 22:02     ` Jason Gunthorpe
2024-08-15 19:08   ` Jason Gunthorpe
2024-08-15 19:46     ` Nicolin Chen
2024-08-15 19:53       ` Nicolin Chen
2024-08-15 23:42         ` Jason Gunthorpe
2024-08-15 23:41       ` Jason Gunthorpe
2024-08-16  0:21         ` Nicolin Chen
2024-08-19 17:33           ` Jason Gunthorpe
2024-08-19 18:10             ` Nicolin Chen
2024-08-19 18:26               ` Jason Gunthorpe
2024-08-07 20:10 ` [PATCH v1 06/16] iommufd/selftest: Add IOMMU_VIOMMU_SET/UNSET_VDEV_ID test coverage Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 07/16] iommufd/viommu: Add cache_invalidate for IOMMU_VIOMMU_TYPE_DEFAULT Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 08/16] iommufd/viommu: Add IOMMU_VIOMMU_INVALIDATE ioctl Nicolin Chen
2024-08-15 23:24   ` Jason Gunthorpe
2024-08-15 23:51     ` Nicolin Chen
2024-08-19 17:30       ` Jason Gunthorpe
2024-08-19 17:49         ` Nicolin Chen
2024-08-19 18:20           ` Jason Gunthorpe
2024-08-19 18:22             ` Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 09/16] iommufd/viommu: Make iommufd_viommu_find_device a public API Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 10/16] iommufd/selftest: Add mock_viommu_invalidate_user op Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 11/16] iommufd/selftest: Add IOMMU_TEST_OP_DEV_CHECK_CACHE test command Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 12/16] iommufd/selftest: Add coverage for IOMMU_VIOMMU_INVALIDATE ioctl Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 13/16] iommufd/viommu: Add iommufd_viommu_to_parent_domain helper Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 14/16] iommu/arm-smmu-v3: Extract an __arm_smmu_cache_invalidate_user helper Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 15/16] iommu/arm-smmu-v3: Add viommu cache invalidation support Nicolin Chen
2024-08-15 23:36   ` Jason Gunthorpe [this message]
2024-08-16  0:50     ` Nicolin Chen
2024-08-19 17:36       ` Jason Gunthorpe
2024-08-19 18:19         ` Nicolin Chen
2024-08-19 18:28           ` Jason Gunthorpe
2024-08-19 18:38             ` Nicolin Chen
2024-08-19 18:47               ` Jason Gunthorpe
2024-08-19 18:54                 ` Nicolin Chen
2024-08-07 20:10 ` [PATCH v1 16/16] iommu/arm-smmu-v3: Allow ATS for IOMMU_DOMAIN_NESTED Nicolin Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240815233635.GV2032816@nvidia.com \
    --to=jgg@nvidia.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=dwmw2@infradead.org \
    --cc=iommu@lists.linux.dev \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=nicolinc@nvidia.com \
    --cc=robin.murphy@arm.com \
    --cc=shuah@kernel.org \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).