调用stmmac_rx_refill重新填充descriptor。 在触发DMA中断前,DMA已经将网卡收到的数据包搬到descriptor指定的buffer,而这个buffer又采用了zero-copy机制,所以直接将该buffer的地址copy给一个skb,再将此skb送到协议层处理,最后再调用 stmmac_rx_refill重新填充descriptor并设置buffer。之前descriptor指定的buffer地址已经被赋值...
5)skb = priv->rx_skbuff[entry]; priv->rx_skbuff[entry] = NULL; 注意:skb将有上层网络处理完后进行释放。 6)skb_put(skb, frame_len); dma_unmap_single(priv->device,priv->rx_skbuff_dma[entry],priv->dma_buf_sz, DMA_FROM_DEVICE); 设置skb数据长度和解除流式DMA映射 7)获取skb的协议类型 ...
rxq_stats->rx_bytes += len; u64_stats_update_end_irqrestore(&rxq_stats->syncp, flags); }static bool stmmac_rx_refill_zc(struct stmmac_priv *priv, u32 queue, u32 budget) @@ -5042,6 +5049,7 @@ static struct stmmac_xdp_buff *xsk_buff_to_stmmac_ctx(struct xdp_buff *xdp)static...