On 2023/11/15 21:38, Jason Gunthorpe wrote: > On Wed, Nov 15, 2023 at 05:21:02PM +0800, Yunsheng Lin wrote: > >>>>> I would expect net stack, page pool, driver still see the 'struct page', >>>>> only memory provider see the specific struct for itself, for the above, >>>>> devmem memory provider sees the 'struct page_pool_iov'. >>>>> >>>>> The reason I still expect driver to see the 'struct page' is that driver >>>>> will still need to support normal memory besides devmem. >>> >>> I wouldn't say this approach is unreasonable, but it does have to be >>> done carefully to isolate the mm. Keeping the struct page in the API >>> is going to make this very hard. >> >> I would expect that most of the isolation is done in page pool, as far as >> I can see: > > It is the sort of thing that is important enough it should have > compiler help via types to prove that it is being done > properly. Otherwise it will be full of mistakes over time. Yes, agreed. I have done something similar as willy has done for some of folio conversion as below: +#define PAGE_POOL_MATCH(pg, iov) \ + static_assert(offsetof(struct page, pg) == \ + offsetof(struct page_pool_iov, iov)) +PAGE_POOL_MATCH(flags, res0); +PAGE_POOL_MATCH(pp_magic, pp_magic); +PAGE_POOL_MATCH(pp, pp); ... Not sure if we need to add new API for driver to use when the driver need the devmem support yet. > > Jason > . >