Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci/ixgbe Check EICR's queue bit instead of IFF_RUNN...
details: https://anonhg.NetBSD.org/src/rev/6a98440d985e
branches: trunk
changeset: 1017391:6a98440d985e
user: msaitoh <msaitoh%NetBSD.org@localhost>
date: Sat Dec 26 06:02:42 2020 +0000
description:
Check EICR's queue bit instead of IFF_RUNNING. This change fixes a bug that
it might incorrectly enable interrupt when IFF_RUNNING is not set. It also
changes that the TX/RX is not processed if a queue interrupt isn't occurred.
diffstat:
sys/dev/pci/ixgbe/ixgbe.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diffs (36 lines):
diff -r 0b46e7af4bb1 -r 6a98440d985e sys/dev/pci/ixgbe/ixgbe.c
--- a/sys/dev/pci/ixgbe/ixgbe.c Sat Dec 26 06:01:22 2020 +0000
+++ b/sys/dev/pci/ixgbe/ixgbe.c Sat Dec 26 06:02:42 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.271 2020/12/26 06:01:22 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.272 2020/12/26 06:02:42 msaitoh Exp $ */
/******************************************************************************
@@ -5154,7 +5154,6 @@
struct ix_queue *que = arg;
struct adapter *adapter = que->adapter;
struct ixgbe_hw *hw = &adapter->hw;
- struct ifnet *ifp = adapter->ifp;
struct tx_ring *txr = adapter->tx_rings;
bool reenable_intr = true;
u32 eicr, eicr_mask;
@@ -5172,14 +5171,16 @@
eicr = IXGBE_READ_REG(hw, IXGBE_EICR);
adapter->stats.pf.legint.ev_count++;
- ++que->irqs.ev_count;
if (eicr == 0) {
adapter->stats.pf.intzero.ev_count++;
IXGBE_WRITE_REG(hw, IXGBE_EIMS, eims_orig);
return 0;
}
- if ((ifp->if_flags & IFF_RUNNING) != 0) {
+ /* Queue (0) intr */
+ if ((eicr & IXGBE_EIMC_RTX_QUEUE) != 0) {
+ ++que->irqs.ev_count;
+
/*
* The same as ixgbe_msix_que() about
* "que->txrx_use_workqueue".
Home |
Main Index |
Thread Index |
Old Index