Module Name: src Committed By: knakahara Date: Thu Dec 8 08:14:28 UTC 2022
Modified Files: src/sys/dev/pci: if_wm.c Log Message: Workaround for some hypervisor environments. The environments cannot stop e1000 interrupt immediately. To generate a diff of this commit: cvs rdiff -u -r1.766 -r1.767 src/sys/dev/pci/if_wm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_wm.c diff -u src/sys/dev/pci/if_wm.c:1.766 src/sys/dev/pci/if_wm.c:1.767 --- src/sys/dev/pci/if_wm.c:1.766 Wed Oct 26 06:36:39 2022 +++ src/sys/dev/pci/if_wm.c Thu Dec 8 08:14:28 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wm.c,v 1.766 2022/10/26 06:36:39 msaitoh Exp $ */ +/* $NetBSD: if_wm.c,v 1.767 2022/12/08 08:14:28 knakahara Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc. @@ -82,7 +82,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.766 2022/10/26 06:36:39 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.767 2022/12/08 08:14:28 knakahara Exp $"); #ifdef _KERNEL_OPT #include "opt_if_wm.h" @@ -478,6 +478,7 @@ struct wm_queue { char sysctlname[32]; /* Name for sysctl */ bool wmq_txrx_use_workqueue; + bool wmq_wq_enqueued; struct work wmq_cookie; void *wmq_si; }; @@ -10308,9 +10309,13 @@ static inline void wm_sched_handle_queue(struct wm_softc *sc, struct wm_queue *wmq) { - if (wmq->wmq_txrx_use_workqueue) - workqueue_enqueue(sc->sc_queue_wq, &wmq->wmq_cookie, curcpu()); - else + if (wmq->wmq_txrx_use_workqueue) { + if (!wmq->wmq_wq_enqueued) { + wmq->wmq_wq_enqueued = true; + workqueue_enqueue(sc->sc_queue_wq, &wmq->wmq_cookie, + curcpu()); + } + } else softint_schedule(wmq->wmq_si); } @@ -10593,8 +10598,10 @@ wm_handle_queue_work(struct work *wk, vo struct wm_queue *wmq = container_of(wk, struct wm_queue, wmq_cookie); /* - * "enqueued flag" is not required here. + * Some qemu environment workaround. They don't stop interrupt + * immediately. */ + wmq->wmq_wq_enqueued = false; wm_handle_queue(wmq); }