mbuf data crossing a page boundary
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 24 Dec 2021 11:18:47 UTC
Hello, A user (on Cc) recently reported an issue on xen-devel when using FreeBSD as a Xen guest on a Linux host. Upon further examination the issue is caused by FreeBSD Xen virtual network adapter receiving an mbuf that contains a data buffer that crosses a page boundary. This is not an mbuf chain, a single mbuf that has 'mtod(m, vm_offset_t) & PAGE_MASK) + m->m_len > PAGE_SIZE'. The Xen virtual network interface doesn't support jumbo frames or anything like that, here is the ifconfig output of the adapter: xn0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=503<RXCSUM,TXCSUM,TSO4,LRO> ether 00:18:3c:51:6e:4c inet 192.168.1.9 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet manual status: active nd6 options=1<PERFORMNUD> This issue seems to be only reproducible when using the iSCSI target mode on FreeBSD. Is it expected for network interfaces to handle mbufs that have data crossing a page boundary even when not supporting jumbo frames? If so, what's the best way to handle those? I would think using bus_dma, but it seems overkill to use it just to split an mbuf that crosses a page boundary. I could also add code in the Xen virtual adapter to split those mbufs, but it's a bit clumsy IMO. For reference, the xen-devel thread where this is also discussed: https://lists.xenproject.org/archives/html/xen-devel/2021-12/msg01581.html Thanks, Roger.