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 Re-enabling interrupt is required only whe...



details:   https://anonhg.NetBSD.org/src/rev/edd12d0b291d
branches:  trunk
changeset: 974941:edd12d0b291d
user:      msaitoh <msaitoh%NetBSD.org@localhost>
date:      Mon Aug 17 07:59:06 2020 +0000

description:
Re-enabling interrupt is required only when a work is scheduled form the
interrput context.

diffstat:

 sys/dev/pci/ixgbe/ixgbe.c |  19 ++++++++++++-------
 sys/dev/pci/ixgbe/ixgbe.h |   3 ++-
 2 files changed, 14 insertions(+), 8 deletions(-)

diffs (66 lines):

diff -r aaa890c9e154 -r edd12d0b291d sys/dev/pci/ixgbe/ixgbe.c
--- a/sys/dev/pci/ixgbe/ixgbe.c Mon Aug 17 07:50:41 2020 +0000
+++ b/sys/dev/pci/ixgbe/ixgbe.c Mon Aug 17 07:59:06 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.237 2020/08/17 07:26:55 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.238 2020/08/17 07:59:06 msaitoh Exp $ */
 
 /******************************************************************************
 
@@ -3173,9 +3173,10 @@
        }
 
        if (task_requests != 0) {
+               /* Re-enabling other interrupts is done in the admin task */
+               task_requests |= IXGBE_REQUEST_TASK_NEED_ACKINTR;
                atomic_or_32(&adapter->task_requests, task_requests);
                ixgbe_schedule_admin_tasklet(adapter);
-               /* Re-enabling other interrupts is done in the admin task */
        } else {
                /* Re-enable other interrupts */
                IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EIMS_OTHER);
@@ -4802,11 +4803,13 @@
 #endif
        }
        atomic_store_relaxed(&adapter->admin_pending, 0);
-       if ((adapter->feat_en & IXGBE_FEATURE_MSIX) != 0) {
-               /* Re-enable other interrupts */
-               IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EIMS_OTHER);
-       } else
-               ixgbe_enable_intr(adapter);
+       if ((req & IXGBE_REQUEST_TASK_NEED_ACKINTR) != 0) {
+               if ((adapter->feat_en & IXGBE_FEATURE_MSIX) != 0) {
+                       /* Re-enable other interrupts */
+                       IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EIMS_OTHER);
+               } else
+                       ixgbe_enable_intr(adapter);
+       }
 
        IXGBE_CORE_UNLOCK(adapter);
        IFNET_UNLOCK(ifp);
@@ -5210,6 +5213,8 @@
                reenable_intr = false;
        }
        if (task_requests != 0) {
+               /* Re-enabling other interrupts is done in the admin task */
+               task_requests |= IXGBE_REQUEST_TASK_NEED_ACKINTR;
                atomic_or_32(&adapter->task_requests, task_requests);
                ixgbe_schedule_admin_tasklet(adapter);
                reenable_intr = false;
diff -r aaa890c9e154 -r edd12d0b291d sys/dev/pci/ixgbe/ixgbe.h
--- a/sys/dev/pci/ixgbe/ixgbe.h Mon Aug 17 07:50:41 2020 +0000
+++ b/sys/dev/pci/ixgbe/ixgbe.h Mon Aug 17 07:59:06 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.h,v 1.68 2020/08/17 07:26:55 msaitoh Exp $ */
+/* $NetBSD: ixgbe.h,v 1.69 2020/08/17 07:59:06 msaitoh Exp $ */
 
 /******************************************************************************
   SPDX-License-Identifier: BSD-3-Clause
@@ -768,6 +768,7 @@
 #define IXGBE_REQUEST_TASK_FDIR                0x08
 #define IXGBE_REQUEST_TASK_PHY         0x10
 #define IXGBE_REQUEST_TASK_LSC         0x20
+#define IXGBE_REQUEST_TASK_NEED_ACKINTR        0x80
 
 /* For NetBSD */
 const struct sysctlnode *ixgbe_sysctl_instance(struct adapter *);



Home | Main Index | Thread Index | Old Index