Module Name: src
Committed By: msaitoh
Date: Mon Sep 7 05:50:58 UTC 2020
Modified Files:
src/sys/dev/pci/ixgbe: if_fdir.c if_sriov.c ixgbe.c ixv.c
Log Message:
- Remove extra callout_stop() in ixgbe_detach(). Found by knakahara@.
- Rename ix{gbe,v}_free_workqueue() to ix{gbe,v}_free_deferred_handlers().
- Add KASSERT() to functions who are called from ixgbe_handle_admin().
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/pci/ixgbe/if_fdir.c
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/pci/ixgbe/if_sriov.c
cvs rdiff -u -r1.256 -r1.257 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.153 -r1.154 src/sys/dev/pci/ixgbe/ixv.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/ixgbe/if_fdir.c
diff -u src/sys/dev/pci/ixgbe/if_fdir.c:1.2 src/sys/dev/pci/ixgbe/if_fdir.c:1.3
--- src/sys/dev/pci/ixgbe/if_fdir.c:1.2 Wed Apr 4 08:13:07 2018
+++ src/sys/dev/pci/ixgbe/if_fdir.c Mon Sep 7 05:50:58 2020
@@ -55,6 +55,8 @@ ixgbe_reinit_fdir(void *context)
struct adapter *adapter = context;
struct ifnet *ifp = adapter->ifp;
+ KASSERT(mutex_owned(&adapter->core_mtx));
+
if (!(adapter->feat_en & IXGBE_FEATURE_FDIR))
return;
if (adapter->fdir_reinit != 1) /* Shouldn't happen */
Index: src/sys/dev/pci/ixgbe/if_sriov.c
diff -u src/sys/dev/pci/ixgbe/if_sriov.c:1.7 src/sys/dev/pci/ixgbe/if_sriov.c:1.8
--- src/sys/dev/pci/ixgbe/if_sriov.c:1.7 Thu Jun 25 07:53:01 2020
+++ src/sys/dev/pci/ixgbe/if_sriov.c Mon Sep 7 05:50:58 2020
@@ -643,6 +643,8 @@ ixgbe_handle_mbx(void *context, int pend
struct ixgbe_vf *vf;
int i;
+ KASSERT(mutex_owned(&adapter->core_mtx));
+
hw = &adapter->hw;
for (i = 0; i < adapter->num_vfs; i++) {
Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.256 src/sys/dev/pci/ixgbe/ixgbe.c:1.257
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.256 Mon Sep 7 04:15:12 2020
+++ src/sys/dev/pci/ixgbe/ixgbe.c Mon Sep 7 05:50:58 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.256 2020/09/07 04:15:12 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.257 2020/09/07 05:50:58 msaitoh Exp $ */
/******************************************************************************
@@ -181,7 +181,7 @@ static void ixgbe_media_status(struct if
static int ixgbe_media_change(struct ifnet *);
static int ixgbe_allocate_pci_resources(struct adapter *,
const struct pci_attach_args *);
-static void ixgbe_free_workqueue(struct adapter *);
+static void ixgbe_free_deferred_handlers(struct adapter *);
static void ixgbe_get_slot_info(struct adapter *);
static int ixgbe_allocate_msix(struct adapter *,
const struct pci_attach_args *);
@@ -1279,7 +1279,7 @@ err_out:
ctrl_ext = IXGBE_READ_REG(&adapter->hw, IXGBE_CTRL_EXT);
ctrl_ext &= ~IXGBE_CTRL_EXT_DRV_LOAD;
IXGBE_WRITE_REG(&adapter->hw, IXGBE_CTRL_EXT, ctrl_ext);
- ixgbe_free_workqueue(adapter);
+ ixgbe_free_deferred_handlers(adapter);
ixgbe_free_pci_resources(adapter);
if (adapter->mta != NULL)
free(adapter->mta, M_DEVBUF);
@@ -3518,7 +3518,7 @@ map_err:
} /* ixgbe_allocate_pci_resources */
static void
-ixgbe_free_workqueue(struct adapter *adapter)
+ixgbe_free_deferred_handlers(struct adapter *adapter)
{
struct ix_queue *que = adapter->queues;
struct tx_ring *txr = adapter->tx_rings;
@@ -3558,7 +3558,7 @@ ixgbe_free_workqueue(struct adapter *ada
workqueue_destroy(adapter->recovery_mode_timer_wq);
adapter->recovery_mode_timer_wq = NULL;
}
-} /* ixgbe_free_workqueue */
+} /* ixgbe_free_deferred_handlers */
/************************************************************************
* ixgbe_detach - Device removal routine
@@ -3610,10 +3610,8 @@ ixgbe_detach(device_t dev, int flags)
ixgbe_setup_low_power_mode(adapter);
callout_halt(&adapter->timer, NULL);
- if (adapter->feat_en & IXGBE_FEATURE_RECOVERY_MODE) {
- callout_stop(&adapter->recovery_mode_timer);
+ if (adapter->feat_en & IXGBE_FEATURE_RECOVERY_MODE)
callout_halt(&adapter->recovery_mode_timer, NULL);
- }
workqueue_wait(adapter->admin_wq, &adapter->admin_wc);
atomic_store_relaxed(&adapter->admin_pending, 0);
@@ -3624,7 +3622,7 @@ ixgbe_detach(device_t dev, int flags)
ether_ifdetach(adapter->ifp);
- ixgbe_free_workqueue(adapter);
+ ixgbe_free_deferred_handlers(adapter);
/* let hardware know driver is unloading */
ctrl_ext = IXGBE_READ_REG(&adapter->hw, IXGBE_CTRL_EXT);
@@ -4673,6 +4671,8 @@ ixgbe_handle_mod(void *context)
u32 err;
bool last_unsupported_sfp_recovery;
+ KASSERT(mutex_owned(&adapter->core_mtx));
+
last_sfp_type = hw->phy.sfp_type;
last_unsupported_sfp_recovery = hw->need_unsupported_sfp_recovery;
++adapter->mod_workev.ev_count;
@@ -4754,6 +4754,8 @@ ixgbe_handle_msf(void *context)
u32 autoneg;
bool negotiate;
+ KASSERT(mutex_owned(&adapter->core_mtx));
+
++adapter->msf_workev.ev_count;
autoneg = hw->phy.autoneg_advertised;
@@ -4773,6 +4775,8 @@ ixgbe_handle_phy(void *context)
struct ixgbe_hw *hw = &adapter->hw;
int error;
+ KASSERT(mutex_owned(&adapter->core_mtx));
+
++adapter->phy_workev.ev_count;
error = hw->phy.ops.handle_lasi(hw);
if (error == IXGBE_ERR_OVERTEMP)
@@ -6884,7 +6888,7 @@ ixgbe_allocate_msix(struct adapter *adap
err_out:
kcpuset_destroy(affinity);
- ixgbe_free_workqueue(adapter);
+ ixgbe_free_deferred_handlers(adapter);
ixgbe_free_pciintr_resources(adapter);
return (error);
} /* ixgbe_allocate_msix */
@@ -7008,6 +7012,8 @@ ixgbe_handle_link(void *context)
struct adapter *adapter = context;
struct ixgbe_hw *hw = &adapter->hw;
+ KASSERT(mutex_owned(&adapter->core_mtx));
+
++adapter->link_workev.ev_count;
ixgbe_check_link(hw, &adapter->link_speed, &adapter->link_up, 0);
ixgbe_update_link_status(adapter);
Index: src/sys/dev/pci/ixgbe/ixv.c
diff -u src/sys/dev/pci/ixgbe/ixv.c:1.153 src/sys/dev/pci/ixgbe/ixv.c:1.154
--- src/sys/dev/pci/ixgbe/ixv.c:1.153 Mon Aug 31 14:12:50 2020
+++ src/sys/dev/pci/ixgbe/ixv.c Mon Sep 7 05:50:58 2020
@@ -1,4 +1,4 @@
-/*$NetBSD: ixv.c,v 1.153 2020/08/31 14:12:50 msaitoh Exp $*/
+/*$NetBSD: ixv.c,v 1.154 2020/09/07 05:50:58 msaitoh Exp $*/
/******************************************************************************
@@ -96,7 +96,7 @@ static void ixv_media_status(struct ifne
static int ixv_media_change(struct ifnet *);
static int ixv_allocate_pci_resources(struct adapter *,
const struct pci_attach_args *);
-static void ixv_free_workqueue(struct adapter *);
+static void ixv_free_deferred_handlers(struct adapter *);
static int ixv_allocate_msix(struct adapter *,
const struct pci_attach_args *);
static int ixv_configure_interrupts(struct adapter *);
@@ -608,7 +608,7 @@ ixv_detach(device_t dev, int flags)
ether_ifdetach(adapter->ifp);
callout_halt(&adapter->timer, NULL);
- ixv_free_workqueue(adapter);
+ ixv_free_deferred_handlers(adapter);
if (adapter->feat_en & IXGBE_FEATURE_NETMAP)
netmap_detach(adapter->ifp);
@@ -1530,7 +1530,7 @@ map_err:
} /* ixv_allocate_pci_resources */
static void
-ixv_free_workqueue(struct adapter *adapter)
+ixv_free_deferred_handlers(struct adapter *adapter)
{
struct ix_queue *que = adapter->queues;
struct tx_ring *txr = adapter->tx_rings;
@@ -1560,7 +1560,7 @@ ixv_free_workqueue(struct adapter *adapt
workqueue_destroy(adapter->timer_wq);
adapter->timer_wq = NULL;
}
-} /* ixv_free_workqueue */
+} /* ixv_free_deferred_handlers */
/************************************************************************
* ixv_free_pci_resources
@@ -3413,7 +3413,7 @@ ixv_allocate_msix(struct adapter *adapte
return (0);
err_out:
kcpuset_destroy(affinity);
- ixv_free_workqueue(adapter);
+ ixv_free_deferred_handlers(adapter);
ixv_free_pci_resources(adapter);
return (error);
} /* ixv_allocate_msix */