From: Jason Gunthorpe <jgg@nvidia.com>
To: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
Cc: iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
robin.murphy@arm.com, will@kernel.org, joro@8bytes.org,
kevin.tian@intel.com, nicolinc@nvidia.com, mshavit@google.com,
eric.auger@redhat.com, joao.m.martins@oracle.com,
jiangkunkun@huawei.com, zhukeqian1@huawei.com,
linuxarm@huawei.com
Subject: Re: [PATCH 5/5] iommu/arm-smmu-v3: Enforce dirty tracking in domain attach/alloc
Date: Wed, 29 Nov 2023 15:48:50 -0400 [thread overview]
Message-ID: <20231129194850.GD436702@nvidia.com> (raw)
In-Reply-To: <20231128094940.1344-6-shameerali.kolothum.thodi@huawei.com>
On Tue, Nov 28, 2023 at 09:49:40AM +0000, Shameer Kolothum wrote:
> @@ -2701,6 +2703,9 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
> master = dev_iommu_priv_get(dev);
> smmu = master->smmu;
>
> + if (domain->dirty_ops && !arm_smmu_dbm_capable(smmu))
> + return -EINVAL;
> +
This is not necessary, a domain can be attached to a single smmu and
finalize was run on that smmu already. So dirty ops should only be set
if this is a S1 domain finalized ona smmu that was dbm capable.
Otherwise none of this makes any sense.
> @@ -3104,6 +3115,9 @@ arm_smmu_domain_alloc_user(struct device *dev, u32 flags,
>
> smmu_domain->domain.type = IOMMU_DOMAIN_UNMANAGED;
> smmu_domain->domain.ops = arm_smmu_ops.default_domain_ops;
> + if (enforce_dirty)
> + smmu_domain->domain.dirty_ops = &arm_smmu_dirty_ops;
Ah, this seems in the wrong place, perhaps that is the confusion
everywhere?
If the finalize actually enables dirty tracking in the pgtbl_ops then
it should set the diryty_ops, they should not be set in alloc_user.
Specifically, a S2 domain should never have dirty_ops set.
IOW if domain.dirty_ops != NULL then pgtbl_ops != NULL && pgtbl_ops->read_and_clear_dirty
Thus no need to have all the other prints/etc then.
So I'd move this into finalize.
> @@ -4152,11 +4166,13 @@ static void arm_smmu_get_httu(struct arm_smmu_device *smmu, u32 reg)
>
> if (smmu->dev->of_node)
> smmu->features |= features;
> - else if (features != fw_features)
> + else if (features != fw_features) {
> /* ACPI IORT sets the HTTU bits */
> dev_warn(smmu->dev,
> - "IDR0.HTTU overridden by FW configuration (0x%x)\n",
> + "IDR0.HTTU not overridden by FW configuration (0x%x)\n",
> fw_features);
> + smmu->features |= features;
> + }
> }
Is this hunk misplaced?
Jason
WARNING: multiple messages have this Message-ID (diff)
From: Jason Gunthorpe <jgg@nvidia.com>
To: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
Cc: iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
robin.murphy@arm.com, will@kernel.org, joro@8bytes.org,
kevin.tian@intel.com, nicolinc@nvidia.com, mshavit@google.com,
eric.auger@redhat.com, joao.m.martins@oracle.com,
jiangkunkun@huawei.com, zhukeqian1@huawei.com,
linuxarm@huawei.com
Subject: Re: [PATCH 5/5] iommu/arm-smmu-v3: Enforce dirty tracking in domain attach/alloc
Date: Wed, 29 Nov 2023 15:48:50 -0400 [thread overview]
Message-ID: <20231129194850.GD436702@nvidia.com> (raw)
In-Reply-To: <20231128094940.1344-6-shameerali.kolothum.thodi@huawei.com>
On Tue, Nov 28, 2023 at 09:49:40AM +0000, Shameer Kolothum wrote:
> @@ -2701,6 +2703,9 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
> master = dev_iommu_priv_get(dev);
> smmu = master->smmu;
>
> + if (domain->dirty_ops && !arm_smmu_dbm_capable(smmu))
> + return -EINVAL;
> +
This is not necessary, a domain can be attached to a single smmu and
finalize was run on that smmu already. So dirty ops should only be set
if this is a S1 domain finalized ona smmu that was dbm capable.
Otherwise none of this makes any sense.
> @@ -3104,6 +3115,9 @@ arm_smmu_domain_alloc_user(struct device *dev, u32 flags,
>
> smmu_domain->domain.type = IOMMU_DOMAIN_UNMANAGED;
> smmu_domain->domain.ops = arm_smmu_ops.default_domain_ops;
> + if (enforce_dirty)
> + smmu_domain->domain.dirty_ops = &arm_smmu_dirty_ops;
Ah, this seems in the wrong place, perhaps that is the confusion
everywhere?
If the finalize actually enables dirty tracking in the pgtbl_ops then
it should set the diryty_ops, they should not be set in alloc_user.
Specifically, a S2 domain should never have dirty_ops set.
IOW if domain.dirty_ops != NULL then pgtbl_ops != NULL && pgtbl_ops->read_and_clear_dirty
Thus no need to have all the other prints/etc then.
So I'd move this into finalize.
> @@ -4152,11 +4166,13 @@ static void arm_smmu_get_httu(struct arm_smmu_device *smmu, u32 reg)
>
> if (smmu->dev->of_node)
> smmu->features |= features;
> - else if (features != fw_features)
> + else if (features != fw_features) {
> /* ACPI IORT sets the HTTU bits */
> dev_warn(smmu->dev,
> - "IDR0.HTTU overridden by FW configuration (0x%x)\n",
> + "IDR0.HTTU not overridden by FW configuration (0x%x)\n",
> fw_features);
> + smmu->features |= features;
> + }
> }
Is this hunk misplaced?
Jason
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-11-29 19:48 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-28 9:49 [PATCH 0/5] iommu/smmuv3: Add IOMMUFD dirty tracking support for SMMUv3 Shameer Kolothum
2023-11-28 9:49 ` Shameer Kolothum
2023-11-28 9:49 ` [PATCH 1/5] iommu/arm-smmu-v3: Add feature detection for HTTU Shameer Kolothum
2023-11-28 9:49 ` Shameer Kolothum
2023-11-29 19:49 ` Jason Gunthorpe
2023-11-29 19:49 ` Jason Gunthorpe
2023-11-28 9:49 ` [PATCH 2/5] iommu/arm-smmu-v3: Enable HTTU for stage1 with io-pgtable mapping Shameer Kolothum
2023-11-28 9:49 ` Shameer Kolothum
2023-11-29 19:30 ` Jason Gunthorpe
2023-11-29 19:30 ` Jason Gunthorpe
2023-11-30 9:17 ` Shameerali Kolothum Thodi
2023-11-30 9:17 ` Shameerali Kolothum Thodi
2023-11-28 9:49 ` [PATCH 3/5] iommu/arm-smmu-v3: Add read_and_clear_dirty() support Shameer Kolothum
2023-11-28 9:49 ` Shameer Kolothum
2023-11-29 19:35 ` Jason Gunthorpe
2023-11-29 19:35 ` Jason Gunthorpe
2023-11-30 9:05 ` Shameerali Kolothum Thodi
2023-11-30 9:05 ` Shameerali Kolothum Thodi
2023-11-28 9:49 ` [PATCH 4/5] iommu/arm-smmu-v3: Add set_dirty_tracking() support Shameer Kolothum
2023-11-28 9:49 ` Shameer Kolothum
2023-11-29 19:42 ` Jason Gunthorpe
2023-11-29 19:42 ` Jason Gunthorpe
2023-11-30 8:56 ` Shameerali Kolothum Thodi
2023-11-30 8:56 ` Shameerali Kolothum Thodi
2023-11-30 12:54 ` Jason Gunthorpe
2023-11-30 12:54 ` Jason Gunthorpe
2023-11-30 14:04 ` Shameerali Kolothum Thodi
2023-11-30 14:04 ` Shameerali Kolothum Thodi
2023-12-14 16:23 ` Joao Martins
2023-12-14 16:23 ` Joao Martins
2023-11-28 9:49 ` [PATCH 5/5] iommu/arm-smmu-v3: Enforce dirty tracking in domain attach/alloc Shameer Kolothum
2023-11-28 9:49 ` Shameer Kolothum
2023-11-29 19:48 ` Jason Gunthorpe [this message]
2023-11-29 19:48 ` Jason Gunthorpe
2023-11-30 9:01 ` Shameerali Kolothum Thodi
2023-11-30 9:01 ` Shameerali Kolothum Thodi
2023-12-14 16:29 ` Joao Martins
2023-12-14 16:29 ` Joao Martins
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=20231129194850.GD436702@nvidia.com \
--to=jgg@nvidia.com \
--cc=eric.auger@redhat.com \
--cc=iommu@lists.linux.dev \
--cc=jiangkunkun@huawei.com \
--cc=joao.m.martins@oracle.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linuxarm@huawei.com \
--cc=mshavit@google.com \
--cc=nicolinc@nvidia.com \
--cc=robin.murphy@arm.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=will@kernel.org \
--cc=zhukeqian1@huawei.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.