Skip to content

Commit

Permalink
xsk: Eliminate the RX batch size
Browse files Browse the repository at this point in the history
In the xsk consumer ring code there is a variable called RX_BATCH_SIZE
that dictates the minimum number of entries that we try to grab from
the fill and Tx rings. In fact, the code always try to grab the
maximum amount of entries from these rings. The only thing this
variable does is to throw an error if there is less than 16 (as it is
defined) entries on the ring. There is no reason to do this and it
will just lead to weird behavior from user space's point of view. So
eliminate this variable.

With this change, we will be able to simplify the xskq_nb_free and
xskq_nb_avail code in the next commit.

Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/1576759171-28550-6-git-send-email-magnus.karlsson@intel.com
  • Loading branch information
Magnus Karlsson authored and Alexei Starovoitov committed Dec 21, 2019
1 parent 59e35e5 commit 4b638f1
Showing 1 changed file with 2 additions and 4 deletions.
6 changes: 2 additions & 4 deletions net/xdp/xsk_queue.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
#include <linux/if_xdp.h>
#include <net/xdp_sock.h>

#define RX_BATCH_SIZE 16

struct xdp_ring {
u32 producer ____cacheline_aligned_in_smp;
u32 consumer ____cacheline_aligned_in_smp;
Expand Down Expand Up @@ -202,7 +200,7 @@ static inline u64 *xskq_peek_addr(struct xsk_queue *q, u64 *addr,
if (q->cons_tail == q->cons_head) {
smp_mb(); /* D, matches A */
WRITE_ONCE(q->ring->consumer, q->cons_tail);
q->cons_head = q->cons_tail + xskq_nb_avail(q, RX_BATCH_SIZE);
q->cons_head = q->cons_tail + xskq_nb_avail(q, 1);

/* Order consumer and data */
smp_rmb();
Expand Down Expand Up @@ -320,7 +318,7 @@ static inline struct xdp_desc *xskq_peek_desc(struct xsk_queue *q,
if (q->cons_tail == q->cons_head) {
smp_mb(); /* D, matches A */
WRITE_ONCE(q->ring->consumer, q->cons_tail);
q->cons_head = q->cons_tail + xskq_nb_avail(q, RX_BATCH_SIZE);
q->cons_head = q->cons_tail + xskq_nb_avail(q, 1);

/* Order consumer and data */
smp_rmb(); /* C, matches B */
Expand Down

0 comments on commit 4b638f1

Please sign in to comment.