Re: [PATCH net-next v5 2/2] page_pool: Track DMA-mapped pages and unmap them when destroying the pool

Pavel Begunkov
2025-04-01T09:50:29Z

On 4/1/25 09:56, Paolo Abeni wrote:
> On 3/31/25 6:35 PM, Alexander Lobakin wrote:
>> From: Toke Høiland-Jørgensen <toke@redhat.com>
>> Date: Fri, 28 Mar 2025 13:19:09 +0100
>>
>>> When enabling DMA mapping in page_pool, pages are kept DMA mapped until
>>> they are released from the pool, to avoid the overhead of re-mapping the
>>> pages every time they are used. This causes resource leaks and/or
>>> crashes when there are pages still outstanding while the device is torn
>>> down, because page_pool will attempt an unmap through a non-existent DMA
>>> device on the subsequent page return.
>>
>> [...]
>>
>>> @@ -173,10 +212,10 @@ struct page_pool {
>>> int cpuid;
>>> u32 pages_state_hold_cnt;
>>>
>>> - bool has_init_callback:1; /* slow::init_callback is set */
>>> + bool dma_sync; /* Perform DMA sync for device */
>>
>> Have you seen my comment under v3 (sorry but I missed that there was v4
>> already)? Can't we just test the bit atomically?
>
> My understanding is that to make such operation really atomic, we will
> need to access all the other bits within the same bitfield with atomic
> bit ops, leading to a significant code churn (and possibly some overhead).
>
> I think that using a full bool field is a better option.

I agree, it's better not to overcomplicate a fix, and we can always
return to it later.

--
Pavel Begunkov