[PATCH v2 0/2] iommu: Allow passing custom allocators to pgtable drivers

Robin Murphy robin.murphy at arm.com
Thu Nov 23 08:49:21 PST 2023


On 23/11/2023 1:48 pm, Jason Gunthorpe wrote:
> On Thu, Nov 23, 2023 at 09:51:41AM +0100, Boris Brezillon wrote:
>> Beside, I think your objection that custom allocators are in the way of
>> this caching generalization is a bit of an over statement, especially if
>> custom allocators provide the same guarantees you get from existing
>> allocations (page-backed, no fields used in the page, etc). Worst case
>> scenario, you disable the generic cache for all users that pass a custom
>> allocator, and add a pr_warn() (or WARN_ON() if you want to be pushy)
>> to make sure driver owners take that into consideration quickly.
> 
> I want to have common algorithms to manage the radix system, like mm
> does, and then have some fairly hairy stuff done in the new common
> code to address all the needs we now understand people have. This is
> not just "caching".
> 
> One of the important things on this list is RCU freeing of the table
> memory.
> 
> RCU freeing requires precious space in the struct page.
> 
> External ops mean we must have the io page table instance available
> inside the RCU callback so it knows what op to call to free.
> 
> This means the struct page needs to store both a rcu_head and another
> pointer.
> 
> Currently the similar page table algorithms in the mm side consume all
> the free struct page space. I don't expect the future io page table
> version of the same stuff to be much different.
> 
> So it is not just that the allocator side can't use the struct page
> memory. It is that an external allocator inherently demands *more*
> space in the struct page, space we may not have to give.
> 
> Worse, the entire idea of RCU free seems to be incompatible with what
> you are trying to achieve since pages could be unavailable for use
> while they are waiting in RCU.
> 
> I'm looking at this and thinking we loose the option to do RCU in the
> generic code to accommodate external ops. "make RCU optional" is
> basically saying to duplicate alot of stuff because RCU becomes pretty
> fundamental to features and algorithm design.
> 
> Do you understand my alarm to this direction better now?  I'm sorry if
> I haven't explained this clearly enough. (I'm coming at this from the
> MM perspective where the sorts of algorithms and problems here are
> already well known)
> 
>> unresponsive and reluctant to change how they use the APIs. So, if I
>> follow your way of thinking, you'll just be stuck in the same place,
>> waiting for DRM drivers to accept the transversal changes you intend to
>> push.
> 
> I wasn't imagining a forced API change. I think the current API can
> work fine along with an optional pre-allocation scheme.
> 
>> What I strongly oppose to though, is having someone say 'I have the
>> perfect solution for you', and then tell me, 'but you have to wait
>> another six months, maybe more, to see what it looks like'.
> 
> I never said you should be blocked. I agreed with duplicating if
> necessary to be unblocked.
> 
> I also outlined and encouraged you to solve the general problem, but I
> fully understand you don't want to take it on. That's fine too.
> 
> You are both mis-characterizing my position as trying to block the DRM
> driver :(
> 
> I'm trying to accomodate the work I see we need to do soon on the
> enterprise iommu side that touches this same code.
> 
> Look, if we go down this road then we may end up duplicating the page
> table code so the iommu drivers can use the improved versions until
> the DRM driver can be changed. Maybe doing duplication later is better
> than sooner.

Oh, so essentially your plan is to replace io-pgtable-arm with something 
else entirely. That's fair enough; happy to review that when I see it, 
but as I pointed out, realistically this change hardly makes that any 
worse than what's *already* present in io-pgtable-arm that you're going 
to have to deal with anyway.

I would instinctively assume that an "enterprise" optimised version 
would want to be a clean-slate fork itself since I can't imagine it 
wants to be burdened with having to handle non-coherent pagetables, 
Armv7 LPAE format, or any of the quirks for embedded and mobile IOMMUs. 
I have no issue with moving SMMUv3 to a shiny new pagetable 
implementation in future, but that is quite clearly not at all 
incompatible with leaving the existing implementation in place for all 
the *other* decidedly non-enterprise io-pgtable-arm users, both IOMMU 
and GPU, not to mention GPU-via-IOMMU in the case of Adreno.

Thanks,
Robin.



More information about the linux-arm-kernel mailing list