net: ena: separate skb allocation to dedicated function
Signed-off-by: Netanel Belgazal <netanel@amazon.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e745dafab0
commit
4265114d53
@ -825,6 +825,28 @@ static int ena_clean_tx_irq(struct ena_ring *tx_ring, u32 budget)
|
||||
return tx_pkts;
|
||||
}
|
||||
|
||||
static struct sk_buff *ena_alloc_skb(struct ena_ring *rx_ring, bool frags)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
if (frags)
|
||||
skb = napi_get_frags(rx_ring->napi);
|
||||
else
|
||||
skb = netdev_alloc_skb_ip_align(rx_ring->netdev,
|
||||
rx_ring->rx_copybreak);
|
||||
|
||||
if (unlikely(!skb)) {
|
||||
u64_stats_update_begin(&rx_ring->syncp);
|
||||
rx_ring->rx_stats.skb_alloc_fail++;
|
||||
u64_stats_update_end(&rx_ring->syncp);
|
||||
netif_dbg(rx_ring->adapter, rx_err, rx_ring->netdev,
|
||||
"Failed to allocate skb. frags: %d\n", frags);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return skb;
|
||||
}
|
||||
|
||||
static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
|
||||
struct ena_com_rx_buf_info *ena_bufs,
|
||||
u32 descs,
|
||||
@ -854,16 +876,9 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
|
||||
prefetch(va + NET_IP_ALIGN);
|
||||
|
||||
if (len <= rx_ring->rx_copybreak) {
|
||||
skb = netdev_alloc_skb_ip_align(rx_ring->netdev,
|
||||
rx_ring->rx_copybreak);
|
||||
if (unlikely(!skb)) {
|
||||
u64_stats_update_begin(&rx_ring->syncp);
|
||||
rx_ring->rx_stats.skb_alloc_fail++;
|
||||
u64_stats_update_end(&rx_ring->syncp);
|
||||
netif_err(rx_ring->adapter, rx_err, rx_ring->netdev,
|
||||
"Failed to allocate skb\n");
|
||||
skb = ena_alloc_skb(rx_ring, false);
|
||||
if (unlikely(!skb))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
netif_dbg(rx_ring->adapter, rx_status, rx_ring->netdev,
|
||||
"rx allocated small packet. len %d. data_len %d\n",
|
||||
@ -882,20 +897,15 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
|
||||
|
||||
skb_put(skb, len);
|
||||
skb->protocol = eth_type_trans(skb, rx_ring->netdev);
|
||||
rx_ring->free_rx_ids[*next_to_clean] = req_id;
|
||||
*next_to_clean = ENA_RX_RING_IDX_ADD(*next_to_clean, descs,
|
||||
rx_ring->ring_size);
|
||||
return skb;
|
||||
}
|
||||
|
||||
skb = napi_get_frags(rx_ring->napi);
|
||||
if (unlikely(!skb)) {
|
||||
netif_dbg(rx_ring->adapter, rx_status, rx_ring->netdev,
|
||||
"Failed allocating skb\n");
|
||||
u64_stats_update_begin(&rx_ring->syncp);
|
||||
rx_ring->rx_stats.skb_alloc_fail++;
|
||||
u64_stats_update_end(&rx_ring->syncp);
|
||||
skb = ena_alloc_skb(rx_ring, true);
|
||||
if (unlikely(!skb))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
do {
|
||||
dma_unmap_page(rx_ring->dev,
|
||||
|
Loading…
Reference in New Issue
Block a user