Skip to content

Commit

Permalink
page_pool: make sure struct device is stable
Browse files Browse the repository at this point in the history
For DMA mapping use-case the page_pool keeps a pointer
to the struct device, which is used in DMA map/unmap calls.

For our in-flight handling, we also need to make sure that
the struct device have not disappeared.  This is assured
via using get_device/put_device API.

Signed-off-by: Jesper Dangaard Brouer <[email protected]>
Reported-by: Ivan Khoronzhuk <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
netoptimizer authored and davem330 committed Jun 19, 2019
1 parent 32c28f7 commit f71fec4
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions net/core/page_pool.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/device.h>

#include <net/page_pool.h>
#include <linux/dma-direction.h>
Expand Down Expand Up @@ -48,6 +49,9 @@ static int page_pool_init(struct page_pool *pool,

atomic_set(&pool->pages_state_release_cnt, 0);

if (pool->p.flags & PP_FLAG_DMA_MAP)
get_device(pool->p.dev);

return 0;
}

Expand Down Expand Up @@ -360,6 +364,10 @@ void __page_pool_free(struct page_pool *pool)
__warn_in_flight(pool);

ptr_ring_cleanup(&pool->ring, NULL);

if (pool->p.flags & PP_FLAG_DMA_MAP)
put_device(pool->p.dev);

kfree(pool);
}
EXPORT_SYMBOL(__page_pool_free);
Expand Down

0 comments on commit f71fec4

Please sign in to comment.