> It looks like you are running 7.4 release with a self compiled
> kernel.
True, is it GENERIC kernel compiled with usb APC UPS support, the rest is
untouched.
[root@@krz74~:]grep APC /usr/src/sys/dev/usb/usb_quirks.c
{ USB_VENDOR_APC, USB_PRODUCT_APC_UPS, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_APC, USB_PRODUCT_APC_UPS5G, ANY, { UQ_BAD_HID }},
I'll try -curerent.
Thank you!
On Wed, 17 Jan 2024 22:45:41 +0100
Alexander Bluhm <[email protected]> wrote:
> On Wed, Jan 17, 2024 at 11:46:36AM +0100, Radek wrote:
> > ddb{0}> show panic
> > *cpu0: kernel diagnostic assertion "pkt->pkt_m != NULL" failed: file
> > "/usr/src/
> > sys/dev/pci/if_em.c", line 2580
>
> > OpenBSD 7.4 (GENERIC.MP) #0: Fri Jan 12 09:31:37 CET 2024
> > [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
>
> It looks like you are running 7.4 release with a self compiled
> kernel. This diff from -current should fix your problem.
>
> Protect em(4) refill timeout with splnet.
>
> From time to time "pkt->pkt_m == NULL" or "m != NULL" assertions
> were hit in the em driver. Stack trace shows that em refill timeout
> was interrupted by em interrupt. Doing em_rxfill() and em_rxeof()
> simultaneously cannot be correct. Protect softclock in em_rxrefill()
> with splnet().
>
> OK mglocker@
>
> Index: dev/pci/if_em.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/dev/pci/if_em.c,v
> diff -u -p -r1.368 if_em.c
> --- dev/pci/if_em.c 3 Dec 2023 00:19:25 -0000 1.368
> +++ dev/pci/if_em.c 29 Dec 2023 14:44:34 -0000
> @@ -285,6 +285,7 @@ int em_allocate_transmit_structures(str
> int em_allocate_desc_rings(struct em_softc *);
> int em_rxfill(struct em_queue *);
> void em_rxrefill(void *);
> +void em_rxrefill_locked(struct em_queue *);
> int em_rxeof(struct em_queue *);
> void em_receive_checksum(struct em_softc *, struct em_rx_desc *,
> struct mbuf *);
> @@ -1022,7 +1023,7 @@ em_intr(void *arg)
> if (ifp->if_flags & IFF_RUNNING) {
> em_txeof(que);
> if (em_rxeof(que))
> - em_rxrefill(que);
> + em_rxrefill_locked(que);
> }
>
> /* Link status change */
> @@ -2958,6 +2959,16 @@ void
> em_rxrefill(void *arg)
> {
> struct em_queue *que = arg;
> + int s;
> +
> + s = splnet();
> + em_rxrefill_locked(que);
> + splx(s);
> +}
> +
> +void
> +em_rxrefill_locked(struct em_queue *que)
> +{
> struct em_softc *sc = que->sc;
>
> if (em_rxfill(que))
> @@ -3954,7 +3965,7 @@ em_queue_intr_msix(void *vque)
> if (ifp->if_flags & IFF_RUNNING) {
> em_txeof(que);
> if (em_rxeof(que))
> - em_rxrefill(que);
> + em_rxrefill_locked(que);
> }
>
> em_enable_queue_intr_msix(que);
>
Radek