On Wed, Feb 26, 2025 at 08:42:23PM +0800, Baolu Lu wrote: > On 2025/2/26 3:39, Jason Gunthorpe wrote: > > This brings the iommu page table allocator into the modern world of having > > its own private page descriptor and not re-using fields from struct page > > for its own purpose. It follows the basic pattern of struct ptdesc which > > did this transformation for the CPU page table allocator. > > > > Currently iommu-pages is pretty basic so this isn't a huge benefit, > > however I see a coming need for features that CPU allocator has, like sub > > PAGE_SIZE allocations, and RCU freeing. This provides the base > > infrastructure to implement those cleanly. > > I understand that this is intended as the start point of having private > descriptors for folios allocated to iommu drivers. But I don't believe > this is currently the case after this patch, as the underlying memory > remains a struct folio. This patch merely uses an iommu-pages specific > structure pointer to reference it. Right now the mm provides 64 bytes of per-page memory that is a struct page. You can call that 64 bytes a struct folio sometimes, and we have now been also calling those bytes a struct XXdesc like this patch does. This is all a slow incremental evolution toward giving each user of the per-page memory its own unique type and understanding of what it needs while removing use of of the highly overloaded struct page. Eventually Matthew wants to drop the 64 bytes down to 8 bytes and allocate the per-page memory directly. This would allow each user to use more/less memory depending on their need. https://kernelnewbies.org/MatthewWilcox/Memdescs When that happens the folio = __folio_alloc_node(gfp | __GFP_ZERO, order, nid); Will turn into something maybe more like: ioptdesc = memdesc_alloc_node(gfp, order, nid, sizeof(struct ioptdesc)); And then the folio word would disappear from this code. Right now things are going down Matthew's list: https://kernelnewbies.org/MatthewWilcox/Memdescs/Path This series is part of "Remove page->lru uses" Jason