[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0a60797a-fbb9-4a83-adc6-ad62baf5915b@arm.com>
Date: Mon, 26 Jan 2026 18:49:07 +0000
From: Robin Murphy <robin.murphy@....com>
To: Jason Gunthorpe <jgg@...dia.com>, Will Deacon <will@...nel.org>
Cc: Nicolin Chen <nicolinc@...dia.com>, bhelgaas@...gle.com, joro@...tes.org,
praan@...gle.com, baolu.lu@...ux.intel.com, kevin.tian@...el.com,
miko.lenczewski@....com, linux-arm-kernel@...ts.infradead.org,
iommu@...ts.linux.dev, linux-kernel@...r.kernel.org,
linux-pci@...r.kernel.org
Subject: Re: [PATCH RFCv1 3/3] iommu/arm-smmu-v3: Allow ATS to be always on
On 2026-01-26 5:20 pm, Jason Gunthorpe wrote:
> On Mon, Jan 26, 2026 at 12:39:50PM +0000, Will Deacon wrote:
>>> + ret = arm_smmu_alloc_cd_tables(master);
>>> + if (ret)
>>> + return ret;
>>
>> Were do you allocate the second level entry for ssid 0 if we're using
>> 2-level cd tables?
>
> I don't think we need to. The entire design here has a non-valid CD entry
> for SSID 0.
>
> The spec is really weird here, on one hand it explicitly says that with
> S1DSS the CD entry is ignored.
>
> On the other hand, you are also required to have a CD table pointer of
> at least size one for some reason.
Because it is not possible to enable 0 SubStreams, since that wouldn't
make any sense, hence S1CDMax also acts as the "enable SubStreams"
control (assuming SSIDSIZE > 0 and it does anything at all - note that
strictly we cannot assume this bypass trick is *always* possible, since
an SMMU is permitted to support ATS without supporting SubStreams).
> So, I think a CD table pointer to a fully invalid L1 table of at least
> size 1 should be OK?
>
> Or stated another way, why would ie be OK to have a 1 level table with
> an non-valid CD table entry for SSID0 but not OK to have a 2 level
> table that returns non-valid at the first walk?
S1ContextPtr itself is reachable since S1 is enabled, so it cannot point
to nonsense. But the S1DSS==Bypass behaviour does state:
"Note: Such a transaction does not fetch a CD, and therefore does not
report F_CD_FETCH, C_BAD_CD or a stage 2 Translation-related fault with
CLASS == CD."
So if we're not intending to actually allow traffic on the SubStream(s),
then it should be fine to use either a 1-level table of invalid CDs, or
a 2-level format with an empty L1CD table to gracefully terminate any
config prefetches.
Thanks,
Robin.
Powered by blists - more mailing lists