Page MenuHomeFreeBSD

cxgb(4): Remove assumption of physically contiguous mbufs.

Authored by mav on Jan 30 2021, 3:53 PM.



Investigation of iSCSI data corruption reports brought me to discovery that cxgb(4) expects mbufs to be physically contiguous, that is not true after I've started using m_extaddref() in software iSCSI for large zero-copy transmissions. In case of fragmented memory the driver transmitted garbage from pages following the first one due to simple use of pmap_kextract() for the first pointer instead of proper bus_dmamap_load_mbuf_sg(). Seems like it was done as some optimization many years ago, and at very least it is wrong in a world of IOMMUs.

This patch just removes that optimization, plus limits packet coalescing for mbufs crossing page boundary, also depending on assumption of one segment per packet.

Test Plan

With this patch no longer see corruptions on simple iSCSI reads with cxgb(4) NIC used at the target, where previously I saw them a lot.

Diff Detail

R10 FreeBSD src repository
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

mav requested review of this revision.Jan 30 2021, 3:53 PM
mav created this revision.
This revision is now accepted and ready to land.Jan 30 2021, 7:31 PM