Skip to content

Commit 93ee30f

Browse files
magnus-karlssonborkmann
authored andcommitted
xsk: i40e: get rid of useless struct xdp_umem_props
This commit gets rid of the structure xdp_umem_props. It was there to be able to break a dependency at one point, but this is no longer needed. The values in the struct are instead stored directly in the xdp_umem structure. This simplifies the xsk code as well as af_xdp zero-copy drivers and as a bonus gets rid of one internal header file. The i40e driver is also adapted to the new interface in this commit. Signed-off-by: Magnus Karlsson <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]>
1 parent cf484f9 commit 93ee30f

File tree

7 files changed

+22
-36
lines changed

7 files changed

+22
-36
lines changed

drivers/net/ethernet/intel/i40e/i40e_xsk.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ static void i40e_reuse_rx_buffer_zc(struct i40e_ring *rx_ring,
442442
struct i40e_rx_buffer *old_bi)
443443
{
444444
struct i40e_rx_buffer *new_bi = &rx_ring->rx_bi[rx_ring->next_to_alloc];
445-
unsigned long mask = (unsigned long)rx_ring->xsk_umem->props.chunk_mask;
445+
unsigned long mask = (unsigned long)rx_ring->xsk_umem->chunk_mask;
446446
u64 hr = rx_ring->xsk_umem->headroom + XDP_PACKET_HEADROOM;
447447
u16 nta = rx_ring->next_to_alloc;
448448

@@ -477,7 +477,7 @@ void i40e_zca_free(struct zero_copy_allocator *alloc, unsigned long handle)
477477

478478
rx_ring = container_of(alloc, struct i40e_ring, zca);
479479
hr = rx_ring->xsk_umem->headroom + XDP_PACKET_HEADROOM;
480-
mask = rx_ring->xsk_umem->props.chunk_mask;
480+
mask = rx_ring->xsk_umem->chunk_mask;
481481

482482
nta = rx_ring->next_to_alloc;
483483
bi = &rx_ring->rx_bi[nta];

include/net/xdp_sock.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@
1616
struct net_device;
1717
struct xsk_queue;
1818

19-
struct xdp_umem_props {
20-
u64 chunk_mask;
21-
u64 size;
22-
};
23-
2419
struct xdp_umem_page {
2520
void *addr;
2621
dma_addr_t dma;
@@ -30,7 +25,8 @@ struct xdp_umem {
3025
struct xsk_queue *fq;
3126
struct xsk_queue *cq;
3227
struct xdp_umem_page *pages;
33-
struct xdp_umem_props props;
28+
u64 chunk_mask;
29+
u64 size;
3430
u32 headroom;
3531
u32 chunk_size_nohr;
3632
struct user_struct *user;

net/xdp/xdp_umem.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,8 @@ static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr)
312312

313313
umem->pid = get_task_pid(current, PIDTYPE_PID);
314314
umem->address = (unsigned long)addr;
315-
umem->props.chunk_mask = ~((u64)chunk_size - 1);
316-
umem->props.size = size;
315+
umem->chunk_mask = ~((u64)chunk_size - 1);
316+
umem->size = size;
317317
umem->headroom = headroom;
318318
umem->chunk_size_nohr = chunk_size - headroom;
319319
umem->npgs = size / PAGE_SIZE;

net/xdp/xdp_umem_props.h

Lines changed: 0 additions & 14 deletions
This file was deleted.

net/xdp/xsk.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -470,8 +470,10 @@ static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
470470
goto out_unlock;
471471
} else {
472472
/* This xsk has its own umem. */
473-
xskq_set_umem(xs->umem->fq, &xs->umem->props);
474-
xskq_set_umem(xs->umem->cq, &xs->umem->props);
473+
xskq_set_umem(xs->umem->fq, xs->umem->size,
474+
xs->umem->chunk_mask);
475+
xskq_set_umem(xs->umem->cq, xs->umem->size,
476+
xs->umem->chunk_mask);
475477

476478
err = xdp_umem_assign_dev(xs->umem, dev, qid, flags);
477479
if (err)
@@ -481,8 +483,8 @@ static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
481483
xs->dev = dev;
482484
xs->zc = xs->umem->zc;
483485
xs->queue_id = qid;
484-
xskq_set_umem(xs->rx, &xs->umem->props);
485-
xskq_set_umem(xs->tx, &xs->umem->props);
486+
xskq_set_umem(xs->rx, xs->umem->size, xs->umem->chunk_mask);
487+
xskq_set_umem(xs->tx, xs->umem->size, xs->umem->chunk_mask);
486488
xdp_add_sk_umem(xs->umem, xs);
487489

488490
out_unlock:

net/xdp/xsk_queue.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77

88
#include "xsk_queue.h"
99

10-
void xskq_set_umem(struct xsk_queue *q, struct xdp_umem_props *umem_props)
10+
void xskq_set_umem(struct xsk_queue *q, u64 size, u64 chunk_mask)
1111
{
1212
if (!q)
1313
return;
1414

15-
q->umem_props = *umem_props;
15+
q->size = size;
16+
q->chunk_mask = chunk_mask;
1617
}
1718

1819
static u32 xskq_umem_get_ring_size(struct xsk_queue *q)

net/xdp/xsk_queue.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ struct xdp_umem_ring {
3131
};
3232

3333
struct xsk_queue {
34-
struct xdp_umem_props umem_props;
34+
u64 chunk_mask;
35+
u64 size;
3536
u32 ring_mask;
3637
u32 nentries;
3738
u32 prod_head;
@@ -78,7 +79,7 @@ static inline u32 xskq_nb_free(struct xsk_queue *q, u32 producer, u32 dcnt)
7879

7980
static inline bool xskq_is_valid_addr(struct xsk_queue *q, u64 addr)
8081
{
81-
if (addr >= q->umem_props.size) {
82+
if (addr >= q->size) {
8283
q->invalid_descs++;
8384
return false;
8485
}
@@ -92,7 +93,7 @@ static inline u64 *xskq_validate_addr(struct xsk_queue *q, u64 *addr)
9293
struct xdp_umem_ring *ring = (struct xdp_umem_ring *)q->ring;
9394
unsigned int idx = q->cons_tail & q->ring_mask;
9495

95-
*addr = READ_ONCE(ring->desc[idx]) & q->umem_props.chunk_mask;
96+
*addr = READ_ONCE(ring->desc[idx]) & q->chunk_mask;
9697
if (xskq_is_valid_addr(q, *addr))
9798
return addr;
9899

@@ -173,8 +174,8 @@ static inline bool xskq_is_valid_desc(struct xsk_queue *q, struct xdp_desc *d)
173174
if (!xskq_is_valid_addr(q, d->addr))
174175
return false;
175176

176-
if (((d->addr + d->len) & q->umem_props.chunk_mask) !=
177-
(d->addr & q->umem_props.chunk_mask)) {
177+
if (((d->addr + d->len) & q->chunk_mask) !=
178+
(d->addr & q->chunk_mask)) {
178179
q->invalid_descs++;
179180
return false;
180181
}
@@ -253,7 +254,7 @@ static inline bool xskq_empty_desc(struct xsk_queue *q)
253254
return xskq_nb_free(q, q->prod_tail, q->nentries) == q->nentries;
254255
}
255256

256-
void xskq_set_umem(struct xsk_queue *q, struct xdp_umem_props *umem_props);
257+
void xskq_set_umem(struct xsk_queue *q, u64 size, u64 chunk_mask);
257258
struct xsk_queue *xskq_create(u32 nentries, bool umem_queue);
258259
void xskq_destroy(struct xsk_queue *q_ops);
259260

0 commit comments

Comments
 (0)