Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: clear ice(4) OACTIVE flag on reset
To:
Alexander Bluhm <bluhm@openbsd.org>
Cc:
tech@openbsd.org
Date:
Thu, 3 Apr 2025 18:11:11 +0200

Download raw body.

Thread
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