Hi Greg, Hi Joe, dlg@ hinted to me that the ring might overwrite it's own starting position with the current code.
Does this help? mbuhl Index: dev/pci/if_igc.c =================================================================== RCS file: /cvs/src/sys/dev/pci/if_igc.c,v retrieving revision 1.9 diff -u -p -r1.9 if_igc.c --- dev/pci/if_igc.c 2 Jun 2022 07:41:17 -0000 1.9 +++ dev/pci/if_igc.c 8 Nov 2022 10:35:39 -0000 @@ -978,7 +978,7 @@ igc_start(struct ifqueue *ifq) mask = sc->num_tx_desc - 1; for (;;) { - if (free <= IGC_MAX_SCATTER) { + if (free <= IGC_MAX_SCATTER + 1) { ifq_set_oactive(ifq); break; } @@ -1005,6 +1005,7 @@ igc_start(struct ifqueue *ifq) /* Consume the first descriptor */ prod++; prod &= mask; + free--; } for (i = 0; i < map->dm_nsegs; i++) {