On Thu, Mar 17, 2022 at 01:01:11AM +0100, Hrvoje Popovski wrote:
> On 16.3.2022. 20:00, Hrvoje Popovski wrote:
> > Hi all,
> >
> > While opensbd box is under pressure and in that moment i run ifconfig
> > bnxt0 down i get panic... it's not every time and it's that easy to
> > trigger panic
> >
> > I'm sending traffic over ix interfaces and bnxt is for ssh and nothing
> > else.
> >
> > I've compiled kernel with "option BNXT_DEBUG" and put debug in
> > hostname.bnxt0 but i didn't saw any log regarding bnxt interfaces.
> >
> > I will try to trigger panic few more times and will post them here..
>
> this is same panic but with snapshot kernel without debug options
>
> uvm_fault(0xfffffd904e3a9440, 0x0, 0, 1) -> e
> kernel: page fault trap, code=0
> Stopped at bnxt_intr+0x195: movq 0(%r14,%r12,1),%rbx
> TID PID UID PRFLAGS PFLAGS CPU COMMAND
> *465591 26407 0 0x3 0 0K ifconfig
> bnxt_intr(ffff8000002bc7c0) at bnxt_intr+0x195
> intr_handler(ffff800027d3d7b0,ffff800000269880) at intr_handler+0x6e
> Xintr_ioapic_edge28_untramp() at Xintr_ioapic_edge28_untramp+0x18f
> Xspllower() at Xspllower+0x19
> softintr_dispatch(0) at softintr_dispatch+0xdc
> Xsoftclock() at Xsoftclock+0x1f
> bnxt_ioctl(ffff8000002bc048,80206910,ffff800027d3dae0) at bnxt_ioctl+0x165
> ifioctl(fffffd8e5a4f13a8,80206910,ffff800027d3dae0,ffff800027d8da50) at
> ifioctl+0x92b
> soo_ioctl(fffffd904cc0b2e8,80206910,ffff800027d3dae0,ffff800027d8da50)
> at soo_ioctl+0x161
> sys_ioctl(ffff800027d8da50,ffff800027d3dbf0,ffff800027d3dc40) at
> sys_ioctl+0x2c4
> syscall(ffff800027d3dcb0) at syscall+0x374
> Xsyscall() at Xsyscall+0x128
> end of kernel
> end trace frame: 0x7f7fffffaf30, count: 3
> https://www.openbsd.org/ddb.html describes the minimum info required in
> bug reports. Insufficient info makes it difficult to find and fix bugs.
I don't have the device and don't know the code. But other drivers
don't process rx and tx interrupts when the interface is not running.
Maybe this helps. dlg@ and jmatthew@ should know better than me.
bluhm
Index: dev/pci/if_bnxt.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/dev/pci/if_bnxt.c,v
retrieving revision 1.36
diff -u -p -r1.36 if_bnxt.c
--- dev/pci/if_bnxt.c 14 Mar 2022 23:41:42 -0000 1.36
+++ dev/pci/if_bnxt.c 17 Mar 2022 20:26:49 -0000
@@ -1543,6 +1543,7 @@ bnxt_intr(void *xq)
{
struct bnxt_queue *q = (struct bnxt_queue *)xq;
struct bnxt_softc *sc = q->q_sc;
+ struct ifnet *ifp = &sc->sc_ac.ac_if;
struct bnxt_cp_ring *cpr = &q->q_cp;
struct bnxt_rx_queue *rx = &q->q_rx;
struct bnxt_tx_queue *tx = &q->q_tx;
@@ -1565,10 +1566,13 @@ bnxt_intr(void *xq)
bnxt_handle_async_event(sc, cmpl);
break;
case CMPL_BASE_TYPE_RX_L2:
- rollback = bnxt_rx(sc, rx, cpr, &ml, &rxfree, &agfree,
cmpl);
+ if (ISSET(ifp->if_flags, IFF_RUNNING))
+ rollback = bnxt_rx(sc, rx, cpr, &ml, &rxfree,
+ &agfree, cmpl);
break;
case CMPL_BASE_TYPE_TX_L2:
- bnxt_txeof(sc, tx, &txfree, cmpl);
+ if (ISSET(ifp->if_flags, IFF_RUNNING))
+ bnxt_txeof(sc, tx, &txfree, cmpl);
break;
default:
printf("%s: unexpected completion type %u\n",