Download raw body.
clear ice(4) OACTIVE flag on reset
On Thu, Apr 03, 2025 at 05:56:47PM +0200, Alexander Bluhm wrote: > On Thu, Apr 03, 2025 at 05:45:53PM +0200, Alexander Bluhm wrote: > > > I noticed that ixl(4), which is what I based this code on, does not > > > seem to be calling ifq_clr_oactive() either. > > > Am I missing something or does ixl(4) suffer from the same bug? > > > > I never ran into hanging oactive on ixl(4). But looking into the > > code I would say this also not correct. > > I am just testing jan's soft LRO diff with ixl(4). This triggers > permanent oactive on a transmit queuue. > > ixl1:0:txq:5 > packets: 219601 packets > bytes: 4528477506 bytes > qdrops: 7221542 packets > errors: 1 packets > qlen: 1024 packets > maxqlen: 1024 packets > oactive: true > oactives: 84144 > > Here also ifconfig ixl1 down/up does not reset oactive. > > bluhm > Here is the ixl fix. Clearing this flag when the interface goes down should be sufficient. I will simplify my ice(4) difff accordingly. diff /usr/src path + /usr/src commit - e674ff4efec7cbf97d8e840abe7d4932a91406a2 blob - 12c84ba2c7939499681f847274306f21a8a4f8c0 file + sys/dev/pci/if_ixl.c --- sys/dev/pci/if_ixl.c +++ sys/dev/pci/if_ixl.c @@ -2728,6 +2728,8 @@ ixl_txr_clean(struct ixl_softc *sc, struct ixl_tx_ring m_freem(txm->txm_m); txm->txm_m = NULL; } + + ifq_clr_oactive(txr->txr_ifq); } static int
clear ice(4) OACTIVE flag on reset