Module Name: src Committed By: msaitoh Date: Wed Jul 6 06:33:49 UTC 2022
Modified Files: src/sys/dev/pci: if_wm.c Log Message: Call txeof first, then rxeof for the consistency. There are three functions where the txeof and rxeof are called. The MSI-X interrupt function and the workqueue function call rxeof first, then rxeof. For legacy interrupt. rxeof is called first. Modify it to match with other two. To generate a diff of this commit: cvs rdiff -u -r1.737 -r1.738 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.737 src/sys/dev/pci/if_wm.c:1.738 --- src/sys/dev/pci/if_wm.c:1.737 Wed Jul 6 05:49:46 2022 +++ src/sys/dev/pci/if_wm.c Wed Jul 6 06:33:49 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wm.c,v 1.737 2022/07/06 05:49:46 msaitoh Exp $ */ +/* $NetBSD: if_wm.c,v 1.738 2022/07/06 06:33:49 msaitoh 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.737 2022/07/06 05:49:46 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.738 2022/07/06 06:33:49 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_net_mpsafe.h" @@ -9946,6 +9946,29 @@ wm_intr_legacy(void *arg) if (rndval == 0) rndval = icr; + mutex_enter(txq->txq_lock); + + if (txq->txq_stopping) { + mutex_exit(txq->txq_lock); + return 1; + } + +#if defined(WM_DEBUG) || defined(WM_EVENT_COUNTERS) + if (icr & ICR_TXDW) { + DPRINTF(sc, WM_DEBUG_TX, + ("%s: TX: got TXDW interrupt\n", + device_xname(sc->sc_dev))); + WM_Q_EVCNT_INCR(txq, txdw); + } +#endif + if (txlimit > 0) { + more |= wm_txeof(txq, txlimit); + if (!IF_IS_EMPTY(&ifp->if_snd)) + more = true; + } else + more = true; + mutex_exit(txq->txq_lock); + mutex_enter(rxq->rxq_lock); if (rxq->rxq_stopping) { @@ -9974,28 +9997,6 @@ wm_intr_legacy(void *arg) mutex_exit(rxq->rxq_lock); - mutex_enter(txq->txq_lock); - - if (txq->txq_stopping) { - mutex_exit(txq->txq_lock); - return 1; - } - -#if defined(WM_DEBUG) || defined(WM_EVENT_COUNTERS) - if (icr & ICR_TXDW) { - DPRINTF(sc, WM_DEBUG_TX, - ("%s: TX: got TXDW interrupt\n", - device_xname(sc->sc_dev))); - WM_Q_EVCNT_INCR(txq, txdw); - } -#endif - if (txlimit > 0) { - more |= wm_txeof(txq, txlimit); - if (!IF_IS_EMPTY(&ifp->if_snd)) - more = true; - } else - more = true; - mutex_exit(txq->txq_lock); WM_CORE_LOCK(sc); if (sc->sc_core_stopping) {