tsnep: Move skb receive action to separate function
The function tsnep_rx_poll() is already pretty long and the skb receive action can be reused for XSK zero-copy support. Move page based skb receive to separate function. Signed-off-by: Gerhard Engleder <gerhard@engleder-embedded.com> Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
2ea0a282ba
commit
c2d64697f4
@ -1076,6 +1076,28 @@ static struct sk_buff *tsnep_build_skb(struct tsnep_rx *rx, struct page *page,
|
||||
return skb;
|
||||
}
|
||||
|
||||
static void tsnep_rx_page(struct tsnep_rx *rx, struct napi_struct *napi,
|
||||
struct page *page, int length)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
skb = tsnep_build_skb(rx, page, length);
|
||||
if (skb) {
|
||||
page_pool_release_page(rx->page_pool, page);
|
||||
|
||||
rx->packets++;
|
||||
rx->bytes += length;
|
||||
if (skb->pkt_type == PACKET_MULTICAST)
|
||||
rx->multicast++;
|
||||
|
||||
napi_gro_receive(napi, skb);
|
||||
} else {
|
||||
page_pool_recycle_direct(rx->page_pool, page);
|
||||
|
||||
rx->dropped++;
|
||||
}
|
||||
}
|
||||
|
||||
static int tsnep_rx_poll(struct tsnep_rx *rx, struct napi_struct *napi,
|
||||
int budget)
|
||||
{
|
||||
@ -1085,7 +1107,6 @@ static int tsnep_rx_poll(struct tsnep_rx *rx, struct napi_struct *napi,
|
||||
struct netdev_queue *tx_nq;
|
||||
struct bpf_prog *prog;
|
||||
struct xdp_buff xdp;
|
||||
struct sk_buff *skb;
|
||||
struct tsnep_tx *tx;
|
||||
int desc_available;
|
||||
int xdp_status = 0;
|
||||
@ -1170,21 +1191,7 @@ static int tsnep_rx_poll(struct tsnep_rx *rx, struct napi_struct *napi,
|
||||
}
|
||||
}
|
||||
|
||||
skb = tsnep_build_skb(rx, entry->page, length);
|
||||
if (skb) {
|
||||
page_pool_release_page(rx->page_pool, entry->page);
|
||||
|
||||
rx->packets++;
|
||||
rx->bytes += length;
|
||||
if (skb->pkt_type == PACKET_MULTICAST)
|
||||
rx->multicast++;
|
||||
|
||||
napi_gro_receive(napi, skb);
|
||||
} else {
|
||||
page_pool_recycle_direct(rx->page_pool, entry->page);
|
||||
|
||||
rx->dropped++;
|
||||
}
|
||||
tsnep_rx_page(rx, napi, entry->page, length);
|
||||
entry->page = NULL;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user