unbreak igc on strict alignment archs.
authordlg <dlg@openbsd.org>
Sun, 11 Aug 2024 01:02:10 +0000 (01:02 +0000)
committerdlg <dlg@openbsd.org>
Sun, 11 Aug 2024 01:02:10 +0000 (01:02 +0000)
commit4cceae0f74744692e43b7051f3b9d8c8520339bc
tree3378f394ab19996fad0317debfab702f6198ef7b
parent49113fa816fcbde61448bed29c93f3c3cbd2a330
unbreak igc on strict alignment archs.

igc (like other intel nics) only supports a limited range of rx
buffer sizes, one of which is 2k like our standard mbuf clusters.
however they put the ethernet packet at the start of the provided
rx buffer, which means the ip header is misaligned on strict alignment
archs if we use the standard 2k mbuf clusters. to avoid wasting too
much memory using the next biggest cluster (4k) we have mcl2k2
clusters that pretty much exists for intel nics to use.

igc (and probably some other drivers ive touched) was too clever
about using mcl2k2 though, which caused panics when trying to use
jumbo packets. jan@ fixed this by moving back to 2k clusters, but
that broke sparc64 (and probably powerpc64).

this dumbs the mcl2k2 handling down a bit so jumbos still work, but
adds ETHER_ALIGN back so strict alignment archs also work again.

ok bluhm@
sys/dev/pci/if_igc.c