[PATCH rc v1 1/4] iommu/arm-smmu-v3: Add ignored bits to fix STE update sequence
Jason Gunthorpe
jgg at nvidia.com
Sun Dec 7 08:09:10 PST 2025
On Sat, Dec 06, 2025 at 08:37:30PM -0800, Nicolin Chen wrote:
> > Then ignored should be adjusted by the used: Only if both used are 1
> > should the bit become ignored. Otherwise we can rely on which ever
> > used is 0 to generate the hitless update.
>
> Hmm, not sure why it has to be both used.
Thats the only case that causes an issue, if only one is used then
there is no need to perform a breaking update.
If cur_used is 0 then the bit will be set in the first update, if
target_used is 0 then the bit will be set during the last update.
> > /* Bits can change because they are not currently being used */
> > + cur_used[i] &= ~ignored[i];
> > unused_update[i] = (entry[i] & cur_used[i]) |
> > (target[i] & ~cur_used[i]);
>
> If one of ignored bits is set in entry[i] but unset in target[i],
> the unused_update will first mask it away, resulting in an extra
> unnecessary update (though it's still hitless).
Yes, this is how it has always worked. The point is to leave the
existing the same not try to optimize it using ignored.
> One more change that we need is at the last equation:
> - if ((unused_update[i] & target_used[i]) != target[i])
> + if ((unused_update[i] & target_used[i] & ~ignored[i]) !=
> + (target[i] & ~ignored[i]))
>
> Either side might have the ignored bits, so we have to suppress
> ignored on both sides, which is required in the similar routine
> in arm_smmu_entry_differs_in_used_bits() of the kunit code.
The only way ignored is set is if both sides have it set and then we
update the bit in the firsy cycle meaning unused_update must have the
final value. There is no need to mask target since it will match. Not
changing this line is a big part of what makes this appealing because
it keeps the logic straightforward, in case ignored is used we shift
the update always to the first cycle then everything else is the same.
Jason
More information about the linux-arm-kernel
mailing list