Message ID | 20100430214517.3992.92545.stgit@ppwaskie-hc2.jf.intel.com |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
On Fri, 30 Apr 2010, Peter P Waskiewicz Jr wrote: > + for (i = 0; i < num_q_vectors; i++) { > + struct ixgbe_q_vector *q_vector = adapter->q_vector[i]; > + /* release the CPU mask memory */ > + free_cpumask_var(q_vector->affinity_mask); > + /* clear the affinity_mask in the IRQ descriptor */ > + irq_set_affinity_hint(adapter->msix_entries[i].vector, NULL); Freeing the mask _AFTER_ clearing the hint might be a worthwhile exercise :) Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, 30 Apr 2010, Thomas Gleixner wrote: > On Fri, 30 Apr 2010, Peter P Waskiewicz Jr wrote: >> + for (i = 0; i < num_q_vectors; i++) { >> + struct ixgbe_q_vector *q_vector = adapter->q_vector[i]; >> + /* release the CPU mask memory */ >> + free_cpumask_var(q_vector->affinity_mask); >> + /* clear the affinity_mask in the IRQ descriptor */ >> + irq_set_affinity_hint(adapter->msix_entries[i].vector, NULL); > > Freeing the mask _AFTER_ clearing the hint might be a worthwhile > exercise :) Crap. I had it reversed before, then when I dropped the unregister call it got swapped. I'll fix it on the official submission for this one. This patch is just an example patch, not to be merged just now. Once the IRQ side is merged, and DaveM has that pulled into a tree, I'll send an official ixgbe patch using the API. But I'll be sure to have this fixed before sending. :-) -PJ -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/ixgbe/ixgbe.h index 79c35ae..c220b9f 100644 --- a/drivers/net/ixgbe/ixgbe.h +++ b/drivers/net/ixgbe/ixgbe.h @@ -32,6 +32,7 @@ #include <linux/pci.h> #include <linux/netdevice.h> #include <linux/aer.h> +#include <linux/cpumask.h> #include "ixgbe_type.h" #include "ixgbe_common.h" @@ -236,6 +237,7 @@ struct ixgbe_q_vector { u8 tx_itr; u8 rx_itr; u32 eitr; + cpumask_var_t affinity_mask; }; /* Helper macros to switch between ints/sec and what the register uses. diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 1b1419c..c13b932 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c @@ -1083,6 +1083,16 @@ static void ixgbe_configure_msix(struct ixgbe_adapter *adapter) q_vector->eitr = adapter->rx_eitr_param; ixgbe_write_eitr(q_vector); + + /* + * Allocate the affinity_hint cpumask, assign the mask for + * this vector, and set our affinity_hint for this irq. + */ + if (!alloc_cpumask_var(&q_vector->affinity_mask, GFP_KERNEL)) + return; + cpumask_set_cpu(v_idx, q_vector->affinity_mask); + irq_set_affinity_hint(adapter->msix_entries[v_idx].vector, + q_vector->affinity_mask); } if (adapter->hw.mac.type == ixgbe_mac_82598EB) @@ -3218,7 +3228,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter) struct ixgbe_hw *hw = &adapter->hw; u32 rxctrl; u32 txdctl; - int i, j; + int i, j, num_q_vectors = adapter->num_msix_vectors - NON_Q_VECTORS; /* signal that we are down to the interrupt handler */ set_bit(__IXGBE_DOWN, &adapter->state); @@ -3251,6 +3261,14 @@ void ixgbe_down(struct ixgbe_adapter *adapter) ixgbe_napi_disable_all(adapter); + for (i = 0; i < num_q_vectors; i++) { + struct ixgbe_q_vector *q_vector = adapter->q_vector[i]; + /* release the CPU mask memory */ + free_cpumask_var(q_vector->affinity_mask); + /* clear the affinity_mask in the IRQ descriptor */ + irq_set_affinity_hint(adapter->msix_entries[i].vector, NULL); + } + clear_bit(__IXGBE_SFP_MODULE_NOT_FOUND, &adapter->state); del_timer_sync(&adapter->sfp_timer); del_timer_sync(&adapter->watchdog_timer);
This patch uses the new IRQ affinity_hint callback mechanism. It serves purely as an example of how a low-level driver can utilize this new interface. An official ixgbe patch will be pushed through netdev once the IRQ patches have been accepted and merged. Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> --- drivers/net/ixgbe/ixgbe.h | 2 ++ drivers/net/ixgbe/ixgbe_main.c | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html