mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
xsk: Use pool->dma_pages to check for DMA
Compare pool->dma_pages instead of pool->dma_pages_cnt to check for an active DMA mapping. pool->dma_pages needs to be read anyway to access the map so this compiles to more efficient code. Signed-off-by: Kal Conley <kal.conley@dectris.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> Acked-by: Magnus Karlsson <magnus.karlsson@intel.com> Link: https://lore.kernel.org/bpf/20230423180157.93559-1-kal.conley@dectris.com
This commit is contained in:
parent
a464411920
commit
6ec7be9a2d
2 changed files with 5 additions and 4 deletions
|
@ -180,7 +180,7 @@ static inline bool xp_desc_crosses_non_contig_pg(struct xsk_buff_pool *pool,
|
||||||
if (likely(!cross_pg))
|
if (likely(!cross_pg))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return pool->dma_pages_cnt &&
|
return pool->dma_pages &&
|
||||||
!(pool->dma_pages[addr >> PAGE_SHIFT] & XSK_NEXT_PG_CONTIG_MASK);
|
!(pool->dma_pages[addr >> PAGE_SHIFT] & XSK_NEXT_PG_CONTIG_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -350,7 +350,7 @@ void xp_dma_unmap(struct xsk_buff_pool *pool, unsigned long attrs)
|
||||||
{
|
{
|
||||||
struct xsk_dma_map *dma_map;
|
struct xsk_dma_map *dma_map;
|
||||||
|
|
||||||
if (pool->dma_pages_cnt == 0)
|
if (!pool->dma_pages)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dma_map = xp_find_dma_map(pool);
|
dma_map = xp_find_dma_map(pool);
|
||||||
|
@ -364,6 +364,7 @@ void xp_dma_unmap(struct xsk_buff_pool *pool, unsigned long attrs)
|
||||||
|
|
||||||
__xp_dma_unmap(dma_map, attrs);
|
__xp_dma_unmap(dma_map, attrs);
|
||||||
kvfree(pool->dma_pages);
|
kvfree(pool->dma_pages);
|
||||||
|
pool->dma_pages = NULL;
|
||||||
pool->dma_pages_cnt = 0;
|
pool->dma_pages_cnt = 0;
|
||||||
pool->dev = NULL;
|
pool->dev = NULL;
|
||||||
}
|
}
|
||||||
|
@ -503,7 +504,7 @@ static struct xdp_buff_xsk *__xp_alloc(struct xsk_buff_pool *pool)
|
||||||
if (pool->unaligned) {
|
if (pool->unaligned) {
|
||||||
xskb = pool->free_heads[--pool->free_heads_cnt];
|
xskb = pool->free_heads[--pool->free_heads_cnt];
|
||||||
xp_init_xskb_addr(xskb, pool, addr);
|
xp_init_xskb_addr(xskb, pool, addr);
|
||||||
if (pool->dma_pages_cnt)
|
if (pool->dma_pages)
|
||||||
xp_init_xskb_dma(xskb, pool, pool->dma_pages, addr);
|
xp_init_xskb_dma(xskb, pool, pool->dma_pages, addr);
|
||||||
} else {
|
} else {
|
||||||
xskb = &pool->heads[xp_aligned_extract_idx(pool, addr)];
|
xskb = &pool->heads[xp_aligned_extract_idx(pool, addr)];
|
||||||
|
@ -569,7 +570,7 @@ static u32 xp_alloc_new_from_fq(struct xsk_buff_pool *pool, struct xdp_buff **xd
|
||||||
if (pool->unaligned) {
|
if (pool->unaligned) {
|
||||||
xskb = pool->free_heads[--pool->free_heads_cnt];
|
xskb = pool->free_heads[--pool->free_heads_cnt];
|
||||||
xp_init_xskb_addr(xskb, pool, addr);
|
xp_init_xskb_addr(xskb, pool, addr);
|
||||||
if (pool->dma_pages_cnt)
|
if (pool->dma_pages)
|
||||||
xp_init_xskb_dma(xskb, pool, pool->dma_pages, addr);
|
xp_init_xskb_dma(xskb, pool, pool->dma_pages, addr);
|
||||||
} else {
|
} else {
|
||||||
xskb = &pool->heads[xp_aligned_extract_idx(pool, addr)];
|
xskb = &pool->heads[xp_aligned_extract_idx(pool, addr)];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue