[PATCH v2 3/8] iommu/arm-smmu-v3: Optimize range invalidation for latency
Nicolin Chen
nicolinc at nvidia.com
Tue Jul 7 14:07:42 PDT 2026
On Tue, Jul 07, 2026 at 04:13:29PM -0300, Jason Gunthorpe wrote:
> On Tue, Jul 07, 2026 at 12:27:00AM -0700, Nicolin Chen wrote:
> > On Mon, Jul 06, 2026 at 01:26:40PM -0300, Jason Gunthorpe wrote:
> > > + /*
> > > + * There are at most 5 possible values for NUM based on SCALE. The
> >
> > Mind elaborating the "at most 5 possible values for NUM"?
>
> Oh, I guess it is at most 6 since it is +1
Yea, that's what I thought.
log2(NUM + 1) could be 5, 4, 3, 2, 1, or 0. So, totally 6.
> How about:
>
> /*
> * The spec defines the invalidated range as:
> * Range = ((NUM+1) * 2^SCALE) * Translation_Granule_Size
> * NUM is 5 bits, so (NUM+1) covers 1..32 granules and SCALE scales
> * that by a power of two. We must pick NUM and SCALE so the range
> * covers num_tg granules, i.e. (NUM+1) * 2^SCALE >= num_tg with
> * NUM+1 <= 32. That constrains SCALE to:
> * ceil(num_tg / 2^SCALE) <= 32
> * SCALE >= ceil(log2(num_tg / 32))
> * Choosing the smallest such SCALE gives the finest granularity and
> * thus the tightest (least over-covering) range, and equivalently the
> * largest NUM.
> *
> * Unlike other IOMMUs the spec has no alignment requirement on the
> * address beyond alignment to tg (so long as TTL=0).
> */
This reads good to me.
With that,
Reviewed-by: Nicolin Chen <nicolinc at nvidia.com>
More information about the linux-arm-kernel
mailing list