On 23/04/2022 18:01, Xuan Zhuo wrote:
On Sat, 23 Apr 2022 17:58:05 +0300, Nikolay Aleksandrov razor@blackwall.org wrote:
On 23/04/2022 17:36, Xuan Zhuo wrote:
On Sat, 23 Apr 2022 17:30:11 +0300, Nikolay Aleksandrov razor@blackwall.org wrote:
On 23/04/2022 17:16, Nikolay Aleksandrov wrote:
On 23/04/2022 16:31, Xuan Zhuo wrote:
On Sat, 23 Apr 2022 14:26:12 +0300, Nikolay Aleksandrov razor@blackwall.org wrote:
[snip] metasize,
VIRTIO_XDP_HEADROOM);
VIRTIO_XDP_HEADROOM - metazie); return head_skb; } break;
That patch doesn't fix it, as I said with xdp you can move both data and data_meta. So just doing that would take care of the meta, but won't take care of moving data.
Also it doesn't take care of the case where page_to_skb() is called with the original page i.e. when we already have headroom, so we hit the next/standard page_to_skb() call (xdp_page == page).
Yes, you are right.
The above change guarantees that buf and p will be in the same page
How can this be guaranteed?
- For example, we applied for a 32k buffer first, and took away 1500 + hdr_len from the allocation.
- set xdp
- alloc for new buffer
p = page_address(page) + offset; buf = p & PAGE_MASK; // whatever page p lands in is where buf is set
=> p and buf are always in the same page, no?
I don't think it is, it's entirely possible to split on two pages.
Ahhh, I completely misinterpreted page_address(). You're right.