Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153380365
D19711.id57246.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
20 KB
Referenced Files
None
Subscribers
None
D19711.id57246.diff
View Options
Index: stable/11/sys/dev/ixgbe/if_fdir.c
===================================================================
--- stable/11/sys/dev/ixgbe/if_fdir.c
+++ stable/11/sys/dev/ixgbe/if_fdir.c
@@ -50,7 +50,7 @@
} /* ixgbe_init_fdir */
void
-ixgbe_reinit_fdir(void *context, int pending)
+ixgbe_reinit_fdir(void *context)
{
struct adapter *adapter = context;
struct ifnet *ifp = adapter->ifp;
@@ -146,9 +146,9 @@
/* TASK_INIT needs this function defined regardless if it's enabled */
void
-ixgbe_reinit_fdir(void *context, int pending)
+ixgbe_reinit_fdir(void *context)
{
- UNREFERENCED_2PARAMETER(context, pending);
+ UNREFERENCED_1PARAMETER(context);
} /* ixgbe_reinit_fdir */
void
Index: stable/11/sys/dev/ixgbe/if_ix.c
===================================================================
--- stable/11/sys/dev/ixgbe/if_ix.c
+++ stable/11/sys/dev/ixgbe/if_ix.c
@@ -156,8 +156,8 @@
static void ixgbe_disable_rx_drop(struct adapter *);
static void ixgbe_initialize_rss_mapping(struct adapter *);
-static void ixgbe_enable_intr(struct adapter *);
-static void ixgbe_disable_intr(struct adapter *);
+static void ixgbe_enable_intr(struct adapter *, bool);
+static void ixgbe_disable_intr(struct adapter *, bool);
static void ixgbe_update_stats_counters(struct adapter *);
static void ixgbe_set_promisc(struct adapter *);
static void ixgbe_set_multi(struct adapter *);
@@ -209,10 +209,11 @@
/* Deferred interrupt tasklets */
static void ixgbe_handle_que(void *, int);
-static void ixgbe_handle_link(void *, int);
-static void ixgbe_handle_msf(void *, int);
-static void ixgbe_handle_mod(void *, int);
-static void ixgbe_handle_phy(void *, int);
+static void ixgbe_handle_link(void *);
+static void ixgbe_handle_msf(void *);
+static void ixgbe_handle_mod(void *);
+static void ixgbe_handle_phy(void *);
+static void ixgbe_handle_admin_task(void *, int);
/************************************************************************
@@ -929,6 +930,15 @@
if (adapter->feat_en & IXGBE_FEATURE_NETMAP)
ixgbe_netmap_attach(adapter);
+ /* Initialize Admin Task */
+ TASK_INIT(&adapter->admin_task, 0, ixgbe_handle_admin_task, adapter);
+
+ /* Initialize task queue */
+ adapter->tq = taskqueue_create_fast("ixgbe_admin", M_NOWAIT,
+ taskqueue_thread_enqueue, &adapter->tq);
+ taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s admintaskq",
+ device_get_nameunit(adapter->dev));
+
INIT_DEBUGOUT("ixgbe_attach: end");
return (0);
@@ -1250,9 +1260,12 @@
if (hw->phy.multispeed_fiber) {
hw->mac.ops.setup_sfp(hw);
ixgbe_enable_tx_laser(hw);
- taskqueue_enqueue(adapter->tq, &adapter->msf_task);
- } else
- taskqueue_enqueue(adapter->tq, &adapter->mod_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_MSF;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
+ } else {
+ adapter->task_requests |= IXGBE_REQUEST_TASK_MOD;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
+ }
} else {
if (hw->mac.ops.check_link)
err = ixgbe_check_link(hw, &adapter->link_speed,
@@ -2351,7 +2364,8 @@
/* Link status change */
if (eicr & IXGBE_EICR_LSC) {
IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_EIMC_LSC);
- taskqueue_enqueue(adapter->tq, &adapter->link_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_LINK;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
}
if (adapter->hw.mac.type != ixgbe_mac_82598EB) {
@@ -2362,7 +2376,8 @@
return;
/* Disable the interrupt */
IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_EIMC_FLOW_DIR);
- taskqueue_enqueue(adapter->tq, &adapter->fdir_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_FDIR;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
}
if (eicr & IXGBE_EICR_ECC) {
@@ -2402,8 +2417,10 @@
/* Check for VF message */
if ((adapter->feat_en & IXGBE_FEATURE_SRIOV) &&
- (eicr & IXGBE_EICR_MAILBOX))
- taskqueue_enqueue(adapter->tq, &adapter->mbx_task);
+ (eicr & IXGBE_EICR_MAILBOX)) {
+ adapter->task_requests |= IXGBE_REQUEST_TASK_MBX;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
+ }
}
if (ixgbe_is_sfp(hw)) {
@@ -2415,14 +2432,16 @@
if (eicr & eicr_mask) {
IXGBE_WRITE_REG(hw, IXGBE_EICR, eicr_mask);
- taskqueue_enqueue(adapter->tq, &adapter->mod_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_MOD;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
}
if ((hw->mac.type == ixgbe_mac_82599EB) &&
(eicr & IXGBE_EICR_GPI_SDP1_BY_MAC(hw))) {
IXGBE_WRITE_REG(hw, IXGBE_EICR,
IXGBE_EICR_GPI_SDP1_BY_MAC(hw));
- taskqueue_enqueue(adapter->tq, &adapter->msf_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_MSF;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
}
}
@@ -2436,11 +2455,9 @@
if ((hw->phy.type == ixgbe_phy_x550em_ext_t) &&
(eicr & IXGBE_EICR_GPI_SDP0_X540)) {
IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_GPI_SDP0_X540);
- taskqueue_enqueue(adapter->tq, &adapter->phy_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_PHY;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
}
-
- /* Re-enable other interrupts */
- IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EIMS_OTHER);
} /* ixgbe_msix_link */
/************************************************************************
@@ -2627,19 +2644,6 @@
}
}
- /* Drain the Link queue */
- if (adapter->tq) {
- taskqueue_drain(adapter->tq, &adapter->link_task);
- taskqueue_drain(adapter->tq, &adapter->mod_task);
- taskqueue_drain(adapter->tq, &adapter->msf_task);
- if (adapter->feat_cap & IXGBE_FEATURE_SRIOV)
- taskqueue_drain(adapter->tq, &adapter->mbx_task);
- taskqueue_drain(adapter->tq, &adapter->phy_task);
- if (adapter->feat_en & IXGBE_FEATURE_FDIR)
- taskqueue_drain(adapter->tq, &adapter->fdir_task);
- taskqueue_free(adapter->tq);
- }
-
/* let hardware know driver is unloading */
ctrl_ext = IXGBE_READ_REG(&adapter->hw, IXGBE_CTRL_EXT);
ctrl_ext &= ~IXGBE_CTRL_EXT_DRV_LOAD;
@@ -2656,6 +2660,12 @@
if (adapter->feat_en & IXGBE_FEATURE_NETMAP)
netmap_detach(adapter->ifp);
+ /* Drain the Admin Task queue */
+ if (adapter->tq) {
+ taskqueue_drain(adapter->tq, &adapter->admin_task);
+ taskqueue_free(adapter->tq);
+ }
+
ixgbe_free_pci_resources(adapter);
bus_generic_detach(dev);
if_free(adapter->ifp);
@@ -2913,6 +2923,10 @@
/* Configure RX settings */
ixgbe_initialize_receive_units(adapter);
+ /* Initialize variable holding task enqueue requests
+ * generated by interrupt handlers */
+ adapter->task_requests = 0;
+
/* Enable SDP & MSI-X interrupts based on adapter */
ixgbe_config_gpie(adapter);
@@ -3055,7 +3069,7 @@
ixgbe_config_dmac(adapter);
/* And now turn on interrupts */
- ixgbe_enable_intr(adapter);
+ ixgbe_enable_intr(adapter, false);
/* Enable the use of the MBX by the VF's */
if (adapter->feat_en & IXGBE_FEATURE_SRIOV) {
@@ -3463,7 +3477,7 @@
* ixgbe_handle_mod - Tasklet for SFP module interrupts
************************************************************************/
static void
-ixgbe_handle_mod(void *context, int pending)
+ixgbe_handle_mod(void *context)
{
struct adapter *adapter = context;
struct ixgbe_hw *hw = &adapter->hw;
@@ -3493,16 +3507,21 @@
if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) {
device_printf(dev,
"Unsupported SFP+ module type was detected.\n");
- return;
+ goto handle_mod_out;
}
err = hw->mac.ops.setup_sfp(hw);
if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) {
device_printf(dev,
"Setup failure - unsupported SFP+ module type.\n");
- return;
+ goto handle_mod_out;
}
- taskqueue_enqueue(adapter->tq, &adapter->msf_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_MSF;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
+ return;
+
+handle_mod_out:
+ adapter->task_requests &= ~(IXGBE_REQUEST_TASK_MSF);
} /* ixgbe_handle_mod */
@@ -3510,7 +3529,7 @@
* ixgbe_handle_msf - Tasklet for MSF (multispeed fiber) interrupts
************************************************************************/
static void
-ixgbe_handle_msf(void *context, int pending)
+ixgbe_handle_msf(void *context)
{
struct adapter *adapter = context;
struct ixgbe_hw *hw = &adapter->hw;
@@ -3536,7 +3555,7 @@
* ixgbe_handle_phy - Tasklet for external PHY interrupts
************************************************************************/
static void
-ixgbe_handle_phy(void *context, int pending)
+ixgbe_handle_phy(void *context)
{
struct adapter *adapter = context;
struct ixgbe_hw *hw = &adapter->hw;
@@ -3551,6 +3570,36 @@
} /* ixgbe_handle_phy */
/************************************************************************
+ * ixgbe_handle_admin_task - Handler for interrupt tasklets meant to be
+ * called in separate task.
+ ************************************************************************/
+static void
+ixgbe_handle_admin_task(void *context, int pending)
+{
+ struct adapter *adapter = context;
+
+ IXGBE_CORE_LOCK(adapter);
+ ixgbe_disable_intr(adapter, true);
+
+ if (adapter->task_requests & IXGBE_REQUEST_TASK_MOD)
+ ixgbe_handle_mod(adapter);
+ if (adapter->task_requests & IXGBE_REQUEST_TASK_MSF)
+ ixgbe_handle_msf(adapter);
+ if (adapter->task_requests & IXGBE_REQUEST_TASK_MBX)
+ ixgbe_handle_mbx(adapter);
+ if (adapter->task_requests & IXGBE_REQUEST_TASK_FDIR)
+ ixgbe_reinit_fdir(adapter);
+ if (adapter->task_requests & IXGBE_REQUEST_TASK_PHY)
+ ixgbe_handle_phy(adapter);
+ if (adapter->task_requests & IXGBE_REQUEST_TASK_LINK)
+ ixgbe_handle_link(adapter);
+ adapter->task_requests = 0;
+
+ ixgbe_enable_intr(adapter, true);
+ IXGBE_CORE_UNLOCK(adapter);
+} /* ixgbe_handle_admin_task */
+
+/************************************************************************
* ixgbe_stop - Stop the hardware
*
* Disables all traffic on the adapter by issuing a
@@ -3568,7 +3617,7 @@
mtx_assert(&adapter->core_mtx, MA_OWNED);
INIT_DEBUGOUT("ixgbe_stop: begin\n");
- ixgbe_disable_intr(adapter);
+ ixgbe_disable_intr(adapter, false);
callout_stop(&adapter->timer);
/* Let the stack know...*/
@@ -3662,9 +3711,13 @@
/************************************************************************
* ixgbe_enable_intr
+ * If skip_traffic parameter is set, queues' irqs are not enabled.
+ * This is useful while reenabling interrupts after disabling them
+ * with ixgbe_disable_intr() 'keep_traffic' parameter set to true
+ * as queues' interrupts are already enabled.
************************************************************************/
static void
-ixgbe_enable_intr(struct adapter *adapter)
+ixgbe_enable_intr(struct adapter *adapter, bool skip_traffic)
{
struct ixgbe_hw *hw = &adapter->hw;
struct ix_queue *que = adapter->queues;
@@ -3732,13 +3785,15 @@
IXGBE_WRITE_REG(hw, IXGBE_EIAC, mask);
}
- /*
- * Now enable all queues, this is done separately to
- * allow for handling the extended (beyond 32) MSI-X
- * vectors that can be used by 82599
- */
- for (int i = 0; i < adapter->num_queues; i++, que++)
- ixgbe_enable_queue(adapter, que->msix);
+ if (!skip_traffic) {
+ /*
+ * Now enable all queues, this is done separately to
+ * allow for handling the extended (beyond 32) MSI-X
+ * vectors that can be used by 82599
+ */
+ for (int i = 0; i < adapter->num_queues; i++, que++)
+ ixgbe_enable_queue(adapter, que->msix);
+ }
IXGBE_WRITE_FLUSH(hw);
@@ -3747,21 +3802,39 @@
/************************************************************************
* ixgbe_disable_intr
+ * If keep_traffic parameter is set, queue interrupts are not disabled.
+ * This is needed by ixgbe_handle_admin_task() to handle link specific
+ * interrupt procedures without stopping the traffic.
************************************************************************/
static void
-ixgbe_disable_intr(struct adapter *adapter)
+ixgbe_disable_intr(struct adapter *adapter, bool keep_traffic)
{
- if (adapter->msix_mem)
- IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIAC, 0);
- if (adapter->hw.mac.type == ixgbe_mac_82598EB) {
- IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC, ~0);
+ struct ixgbe_hw *hw = &adapter->hw;
+ u32 eiac_mask, eimc_mask, eimc_ext_mask;
+
+ if (keep_traffic) {
+ /* Autoclear only queue irqs */
+ eiac_mask = IXGBE_EICR_RTX_QUEUE;
+
+ /* Disable everything but queue irqs */
+ eimc_mask = ~0;
+ eimc_mask &= ~IXGBE_EIMC_RTX_QUEUE;
+ eimc_ext_mask = 0;
} else {
- IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC, 0xFFFF0000);
- IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC_EX(0), ~0);
- IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC_EX(1), ~0);
+ eiac_mask = 0;
+ eimc_mask = (hw->mac.type == ixgbe_mac_82598EB) ? ~0 : 0xFFFF0000;
+ eimc_ext_mask = ~0;
}
- IXGBE_WRITE_FLUSH(&adapter->hw);
+ if (adapter->msix_mem)
+ IXGBE_WRITE_REG(hw, IXGBE_EIAC, eiac_mask);
+
+ IXGBE_WRITE_REG(hw, IXGBE_EIMC, eimc_mask);
+ IXGBE_WRITE_REG(hw, IXGBE_EIMC_EX(0), eimc_ext_mask);
+ IXGBE_WRITE_REG(hw, IXGBE_EIMC_EX(1), eimc_ext_mask);
+
+ IXGBE_WRITE_FLUSH(hw);
+
return;
} /* ixgbe_disable_intr */
@@ -3786,7 +3859,7 @@
++que->irqs;
if (eicr == 0) {
- ixgbe_enable_intr(adapter);
+ ixgbe_enable_intr(adapter, false);
return;
}
@@ -3807,8 +3880,10 @@
}
/* Link status change */
- if (eicr & IXGBE_EICR_LSC)
- taskqueue_enqueue(adapter->tq, &adapter->link_task);
+ if (eicr & IXGBE_EICR_LSC){
+ adapter->task_requests |= IXGBE_REQUEST_TASK_LINK;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
+ }
if (ixgbe_is_sfp(hw)) {
/* Pluggable optics-related interrupt */
@@ -3819,26 +3894,30 @@
if (eicr & eicr_mask) {
IXGBE_WRITE_REG(hw, IXGBE_EICR, eicr_mask);
- taskqueue_enqueue(adapter->tq, &adapter->mod_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_MOD;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
}
if ((hw->mac.type == ixgbe_mac_82599EB) &&
(eicr & IXGBE_EICR_GPI_SDP1_BY_MAC(hw))) {
IXGBE_WRITE_REG(hw, IXGBE_EICR,
IXGBE_EICR_GPI_SDP1_BY_MAC(hw));
- taskqueue_enqueue(adapter->tq, &adapter->msf_task);
+ adapter->task_requests |= IXGBE_REQUEST_TASK_MSF;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
}
}
/* External PHY interrupt */
if ((hw->phy.type == ixgbe_phy_x550em_ext_t) &&
- (eicr & IXGBE_EICR_GPI_SDP0_X540))
- taskqueue_enqueue(adapter->tq, &adapter->phy_task);
+ (eicr & IXGBE_EICR_GPI_SDP0_X540)) {
+ adapter->task_requests |= IXGBE_REQUEST_TASK_PHY;
+ taskqueue_enqueue(adapter->tq, &adapter->admin_task);
+ }
if (more)
taskqueue_enqueue(que->tq, &que->que_task);
else
- ixgbe_enable_intr(adapter);
+ ixgbe_enable_intr(adapter, false);
return;
} /* ixgbe_legacy_irq */
@@ -4768,9 +4847,9 @@
IOCTL_DEBUGOUT("ioctl: SIOC(ADD|DEL)MULTI");
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
IXGBE_CORE_LOCK(adapter);
- ixgbe_disable_intr(adapter);
+ ixgbe_disable_intr(adapter, false);
ixgbe_set_multi(adapter);
- ixgbe_enable_intr(adapter);
+ ixgbe_enable_intr(adapter, false);
IXGBE_CORE_UNLOCK(adapter);
}
break;
@@ -4893,7 +4972,7 @@
if (que->res != NULL)
ixgbe_enable_queue(adapter, que->msix);
else
- ixgbe_enable_intr(adapter);
+ ixgbe_enable_intr(adapter, false);
return;
} /* ixgbe_handle_que */
@@ -4932,27 +5011,13 @@
taskqueue_start_threads(&que->tq, 1, PI_NET, "%s ixq",
device_get_nameunit(adapter->dev));
- /* Tasklets for Link, SFP and Multispeed Fiber */
- TASK_INIT(&adapter->link_task, 0, ixgbe_handle_link, adapter);
- TASK_INIT(&adapter->mod_task, 0, ixgbe_handle_mod, adapter);
- TASK_INIT(&adapter->msf_task, 0, ixgbe_handle_msf, adapter);
- TASK_INIT(&adapter->phy_task, 0, ixgbe_handle_phy, adapter);
- if (adapter->feat_en & IXGBE_FEATURE_FDIR)
- TASK_INIT(&adapter->fdir_task, 0, ixgbe_reinit_fdir, adapter);
- adapter->tq = taskqueue_create_fast("ixgbe_link", M_NOWAIT,
- taskqueue_thread_enqueue, &adapter->tq);
- taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s linkq",
- device_get_nameunit(adapter->dev));
-
if ((error = bus_setup_intr(dev, adapter->res,
INTR_TYPE_NET | INTR_MPSAFE, NULL, ixgbe_legacy_irq, que,
&adapter->tag)) != 0) {
device_printf(dev,
"Failed to register fast interrupt handler: %d\n", error);
taskqueue_free(que->tq);
- taskqueue_free(adapter->tq);
que->tq = NULL;
- adapter->tq = NULL;
return (error);
}
@@ -5093,20 +5158,6 @@
bus_describe_intr(dev, adapter->res, adapter->tag, "link");
#endif
adapter->vector = vector;
- /* Tasklets for Link, SFP and Multispeed Fiber */
- TASK_INIT(&adapter->link_task, 0, ixgbe_handle_link, adapter);
- TASK_INIT(&adapter->mod_task, 0, ixgbe_handle_mod, adapter);
- TASK_INIT(&adapter->msf_task, 0, ixgbe_handle_msf, adapter);
- if (adapter->feat_cap & IXGBE_FEATURE_SRIOV)
- TASK_INIT(&adapter->mbx_task, 0, ixgbe_handle_mbx, adapter);
- TASK_INIT(&adapter->phy_task, 0, ixgbe_handle_phy, adapter);
- if (adapter->feat_en & IXGBE_FEATURE_FDIR)
- TASK_INIT(&adapter->fdir_task, 0, ixgbe_reinit_fdir, adapter);
- adapter->tq = taskqueue_create_fast("ixgbe_link", M_NOWAIT,
- taskqueue_thread_enqueue, &adapter->tq);
- taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s linkq",
- device_get_nameunit(adapter->dev));
-
return (0);
} /* ixgbe_allocate_msix */
@@ -5232,13 +5283,12 @@
* Done outside of interrupt context since the driver might sleep
************************************************************************/
static void
-ixgbe_handle_link(void *context, int pending)
+ixgbe_handle_link(void *context)
{
struct adapter *adapter = context;
struct ixgbe_hw *hw = &adapter->hw;
ixgbe_check_link(hw, &adapter->link_speed, &adapter->link_up, 0);
- ixgbe_update_link_status(adapter);
/* Re-enable link interrupts */
IXGBE_WRITE_REG(hw, IXGBE_EIMS, IXGBE_EIMS_LSC);
Index: stable/11/sys/dev/ixgbe/if_sriov.c
===================================================================
--- stable/11/sys/dev/ixgbe/if_sriov.c
+++ stable/11/sys/dev/ixgbe/if_sriov.c
@@ -620,7 +620,7 @@
/* Tasklet for handling VF -> PF mailbox messages */
void
-ixgbe_handle_mbx(void *context, int pending)
+ixgbe_handle_mbx(void *context)
{
struct adapter *adapter;
struct ixgbe_hw *hw;
@@ -898,9 +898,9 @@
#else
void
-ixgbe_handle_mbx(void *context, int pending)
+ixgbe_handle_mbx(void *context)
{
- UNREFERENCED_2PARAMETER(context, pending);
+ UNREFERENCED_1PARAMETER(context);
} /* ixgbe_handle_mbx */
inline int
Index: stable/11/sys/dev/ixgbe/ixgbe.h
===================================================================
--- stable/11/sys/dev/ixgbe/ixgbe.h
+++ stable/11/sys/dev/ixgbe/ixgbe.h
@@ -464,17 +464,15 @@
/* Support for pluggable optics */
bool sfp_probe;
- struct task link_task; /* Link tasklet */
- struct task mod_task; /* SFP tasklet */
- struct task msf_task; /* Multispeed Fiber */
- struct task mbx_task; /* VF -> PF mailbox interrupt */
+ struct task link_task; /* Link tasklet */
/* Flow Director */
int fdir_reinit;
- struct task fdir_task;
- struct task phy_task; /* PHY intr tasklet */
- struct taskqueue *tq;
+ /* Admin task */
+ struct taskqueue *tq;
+ struct task admin_task;
+ u32 task_requests;
/*
* Queues:
Index: stable/11/sys/dev/ixgbe/ixgbe_fdir.h
===================================================================
--- stable/11/sys/dev/ixgbe/ixgbe_fdir.h
+++ stable/11/sys/dev/ixgbe/ixgbe_fdir.h
@@ -52,7 +52,7 @@
#endif
-void ixgbe_reinit_fdir(void *, int);
+void ixgbe_reinit_fdir(void *);
void ixgbe_atr(struct tx_ring *, struct mbuf *);
#endif /* _IXGBE_FDIR_H_ */
Index: stable/11/sys/dev/ixgbe/ixgbe_sriov.h
===================================================================
--- stable/11/sys/dev/ixgbe/ixgbe_sriov.h
+++ stable/11/sys/dev/ixgbe/ixgbe_sriov.h
@@ -96,7 +96,7 @@
#endif /* PCI_IOV */
-void ixgbe_handle_mbx(void *, int);
+void ixgbe_handle_mbx(void *);
int ixgbe_vf_que_index(int, int, int);
#endif
Index: stable/11/sys/dev/ixgbe/ixgbe_type.h
===================================================================
--- stable/11/sys/dev/ixgbe/ixgbe_type.h
+++ stable/11/sys/dev/ixgbe/ixgbe_type.h
@@ -4392,4 +4392,11 @@
#define IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD \
(0x1F << IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT)
+#define IXGBE_REQUEST_TASK_MOD 0x01
+#define IXGBE_REQUEST_TASK_MSF 0x02
+#define IXGBE_REQUEST_TASK_MBX 0x04
+#define IXGBE_REQUEST_TASK_FDIR 0x08
+#define IXGBE_REQUEST_TASK_PHY 0x10
+#define IXGBE_REQUEST_TASK_LINK 0x20
+
#endif /* _IXGBE_TYPE_H_ */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Apr 21, 7:55 PM (5 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31864538
Default Alt Text
D19711.id57246.diff (20 KB)
Attached To
Mode
D19711: ix(4): Move {mod,msf,mbx,fdir,phy,link}_task to lock protected handler
Attached
Detach File
Event Timeline
Log In to Comment