Commit 1e082232 authored by Gerhard Engleder's avatar Gerhard Engleder Committed by David S. Miller

tsnep: Add helper for RX XDP_RING_NEED_WAKEUP flag

Similar chunk of code is used in tsnep_rx_poll_zc() and
tsnep_rx_reopen_xsk() to maintain the RX XDP_RING_NEED_WAKEUP flag.
Consolidate the code to common helper function.
Suggested-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarGerhard Engleder <gerhard@engleder-embedded.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 89304f91
...@@ -1260,6 +1260,14 @@ static int tsnep_rx_refill_zc(struct tsnep_rx *rx, int count, bool reuse) ...@@ -1260,6 +1260,14 @@ static int tsnep_rx_refill_zc(struct tsnep_rx *rx, int count, bool reuse)
return desc_refilled; return desc_refilled;
} }
static void tsnep_xsk_rx_need_wakeup(struct tsnep_rx *rx, int desc_available)
{
if (desc_available)
xsk_set_rx_need_wakeup(rx->xsk_pool);
else
xsk_clear_rx_need_wakeup(rx->xsk_pool);
}
static bool tsnep_xdp_run_prog(struct tsnep_rx *rx, struct bpf_prog *prog, static bool tsnep_xdp_run_prog(struct tsnep_rx *rx, struct bpf_prog *prog,
struct xdp_buff *xdp, int *status, struct xdp_buff *xdp, int *status,
struct netdev_queue *tx_nq, struct tsnep_tx *tx) struct netdev_queue *tx_nq, struct tsnep_tx *tx)
...@@ -1621,10 +1629,7 @@ static int tsnep_rx_poll_zc(struct tsnep_rx *rx, struct napi_struct *napi, ...@@ -1621,10 +1629,7 @@ static int tsnep_rx_poll_zc(struct tsnep_rx *rx, struct napi_struct *napi,
desc_available -= tsnep_rx_refill_zc(rx, desc_available, false); desc_available -= tsnep_rx_refill_zc(rx, desc_available, false);
if (xsk_uses_need_wakeup(rx->xsk_pool)) { if (xsk_uses_need_wakeup(rx->xsk_pool)) {
if (desc_available) tsnep_xsk_rx_need_wakeup(rx, desc_available);
xsk_set_rx_need_wakeup(rx->xsk_pool);
else
xsk_clear_rx_need_wakeup(rx->xsk_pool);
return done; return done;
} }
...@@ -1769,14 +1774,8 @@ static void tsnep_rx_reopen_xsk(struct tsnep_rx *rx) ...@@ -1769,14 +1774,8 @@ static void tsnep_rx_reopen_xsk(struct tsnep_rx *rx)
* first polling would be too late as need wakeup signalisation would * first polling would be too late as need wakeup signalisation would
* be delayed for an indefinite time * be delayed for an indefinite time
*/ */
if (xsk_uses_need_wakeup(rx->xsk_pool)) { if (xsk_uses_need_wakeup(rx->xsk_pool))
int desc_available = tsnep_rx_desc_available(rx); tsnep_xsk_rx_need_wakeup(rx, tsnep_rx_desc_available(rx));
if (desc_available)
xsk_set_rx_need_wakeup(rx->xsk_pool);
else
xsk_clear_rx_need_wakeup(rx->xsk_pool);
}
} }
static bool tsnep_pending(struct tsnep_queue *queue) static bool tsnep_pending(struct tsnep_queue *queue)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment