On Fri, Oct 22, 2021 at 12:01:41PM +0200, Hrvoje Popovski wrote: > On 22.10.2021. 11:25, Jan Klemkow wrote: > > this diff add hardware checksum offloading for the receive path of > > ixl(4) interfaces. > > > > Tested on: > > ixl1 at pci3 dev 0 function 1 "Intel X710 SFP+" rev 0x02: port 1, FW > > 6.0.48442 API 1.7, msix, 8 queues, address 40:a6:b7:02:38:3d > > > > OK? > > I've applied this diff and i can't see anything regarding offload with > ifconfig ixl hwfeatures?
Hi Hrvoje, Thats because, you only see this flags, if the checksum offloading is enabled for "sending". I'm still working/debugging on the sending side. Thus, I just send a diff with the receiving part for now. You can see if its working for your card with the netstat(8) statistics. # netstat -s | grep software-checksummed These counters should not raise much on the receive side if you put some traffic over the interface. Thanks for testing, Jan > smc24# ifconfig ixl0 hwfeatures > ixl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > hwfeatures=10<VLAN_MTU> hardmtu 9712 > lladdr 3c:fd:fe:04:0d:64 > index 7 priority 0 llprio 3 > media: Ethernet autoselect (10GSFP+Cu full-duplex) > status: active > inet 192.168.15.1 netmask 0xffffff00 broadcast 192.168.15.255 > > smc24# dmesg | grep ixl > ixl0 at pci21 dev 0 function 0 "Intel X710 SFP+" rev 0x01: port 0, FW > 8.2.64244 API 1.13, msix, 8 queues, address 3c:fd:fe:04:0d:64 > ixl1 at pci21 dev 0 function 1 "Intel X710 SFP+" rev 0x01: port 1, FW > 8.2.64244 API 1.13, msix, 8 queues, address 3c:fd:fe:04:0d:66 > > > Index: dev/pci/if_ixl.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/pci/if_ixl.c,v > > retrieving revision 1.75 > > diff -u -p -r1.75 if_ixl.c > > --- dev/pci/if_ixl.c 23 Jul 2021 00:29:14 -0000 1.75 > > +++ dev/pci/if_ixl.c 22 Oct 2021 09:20:59 -0000 > > @@ -1388,6 +1388,7 @@ static int ixl_rxeof(struct ixl_softc *, > > static void ixl_rxfill(struct ixl_softc *, struct ixl_rx_ring *); > > static void ixl_rxrefill(void *); > > static int ixl_rxrinfo(struct ixl_softc *, struct if_rxrinfo *); > > +static void ixl_rx_checksum(struct mbuf *, uint64_t); > > > > #if NKSTAT > 0 > > static void ixl_kstat_attach(struct ixl_softc *); > > @@ -3190,6 +3191,7 @@ ixl_rxeof(struct ixl_softc *sc, struct i > > m->m_pkthdr.csum_flags |= M_FLOWID; > > } > > > > + ixl_rx_checksum(m, word); > > ml_enqueue(&ml, m); > > } else { > > ifp->if_ierrors++; /* XXX */ > > @@ -3320,6 +3322,23 @@ ixl_rxrinfo(struct ixl_softc *sc, struct > > free(ifr, M_TEMP, ixl_nqueues(sc) * sizeof(*ifr)); > > > > return (rv); > > +} > > + > > +static void > > +ixl_rx_checksum(struct mbuf *m, uint64_t word) > > +{ > > + if (!ISSET(word, IXL_RX_DESC_L3L4P)) > > + return; > > + > > + if (ISSET(word, IXL_RX_DESC_IPE)) > > + return; > > + > > + m->m_pkthdr.csum_flags |= M_IPV4_CSUM_IN_OK; > > + > > + if (ISSET(word, IXL_RX_DESC_L4E)) > > + return; > > + > > + m->m_pkthdr.csum_flags |= M_TCP_CSUM_IN_OK | M_UDP_CSUM_IN_OK; > > } > > > > static int