On Sun, 26 Jan 2025 13:35:45 +0200, Ido Schimmel wrote: > On Sun, Jan 26, 2025 at 06:37:14PM +0800, Furong Xu wrote: > > The "SPH feature" splits header into buf->page (non-zero offset) and > > splits payload into buf->sec_page (zero offset). > > > > For buf->page, pp_params.max_len should be the size of L3/L4 header, > > and with a offset of NET_SKB_PAD. > > > > For buf->sec_page, pp_params.max_len should be dma_conf->dma_buf_sz, > > and with a offset of 0. > > > > This is always true: > > sizeof(L3/L4 header) + NET_SKB_PAD < dma_conf->dma_buf_sz + 0 > > Thanks, understood, but are there situations where the device is > unable to split a packet? For example, a large L2 packet. I am trying > to understand if there are situations where the device will write > more than "dma_conf->dma_buf_sz - NET_SKB_PAD" to the head buffer. Nice catch! When receiving a large L2/non-IP packet, more than "dma_conf->dma_buf_sz - NET_SKB_PAD" will be written. So we should: pp_params.max_len = dma_conf->dma_buf_sz + stmmac_rx_offset(priv); Thanks a lot, Ido Have a nice weekend :)