aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe.h3
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c4
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c13
4 files changed, 14 insertions, 8 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index 24cd510e8e86..ae3da83560ac 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -278,7 +278,8 @@ enum ixgbe_ring_f_enum {
278#define MAX_TX_QUEUES IXGBE_MAX_FDIR_INDICES 278#define MAX_TX_QUEUES IXGBE_MAX_FDIR_INDICES
279#endif /* IXGBE_FCOE */ 279#endif /* IXGBE_FCOE */
280struct ixgbe_ring_feature { 280struct ixgbe_ring_feature {
281 int indices; 281 u16 limit; /* upper limit on feature indices */
282 u16 indices; /* current value of indices */
282 int mask; 283 int mask;
283} ____cacheline_internodealigned_in_smp; 284} ____cacheline_internodealigned_in_smp;
284 285
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
index 0ee4dbf4a752..b4da760bd5f0 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
@@ -770,7 +770,7 @@ int ixgbe_fcoe_enable(struct net_device *netdev)
770 ixgbe_clear_interrupt_scheme(adapter); 770 ixgbe_clear_interrupt_scheme(adapter);
771 771
772 adapter->flags |= IXGBE_FLAG_FCOE_ENABLED; 772 adapter->flags |= IXGBE_FLAG_FCOE_ENABLED;
773 adapter->ring_feature[RING_F_FCOE].indices = IXGBE_FCRETA_SIZE; 773 adapter->ring_feature[RING_F_FCOE].limit = IXGBE_FCRETA_SIZE;
774 netdev->features |= NETIF_F_FCOE_CRC; 774 netdev->features |= NETIF_F_FCOE_CRC;
775 netdev->features |= NETIF_F_FSO; 775 netdev->features |= NETIF_F_FSO;
776 netdev->features |= NETIF_F_FCOE_MTU; 776 netdev->features |= NETIF_F_FCOE_MTU;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
index 39a80d2bec9c..b64588a81b8b 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
@@ -302,7 +302,7 @@ static inline bool ixgbe_set_fdir_queues(struct ixgbe_adapter *adapter)
302 bool ret = false; 302 bool ret = false;
303 struct ixgbe_ring_feature *f_fdir = &adapter->ring_feature[RING_F_FDIR]; 303 struct ixgbe_ring_feature *f_fdir = &adapter->ring_feature[RING_F_FDIR];
304 304
305 f_fdir->indices = min_t(int, num_online_cpus(), f_fdir->indices); 305 f_fdir->indices = min_t(int, num_online_cpus(), f_fdir->limit);
306 f_fdir->mask = 0; 306 f_fdir->mask = 0;
307 307
308 /* 308 /*
@@ -339,7 +339,7 @@ static inline bool ixgbe_set_fcoe_queues(struct ixgbe_adapter *adapter)
339 if (!(adapter->flags & IXGBE_FLAG_FCOE_ENABLED)) 339 if (!(adapter->flags & IXGBE_FLAG_FCOE_ENABLED))
340 return false; 340 return false;
341 341
342 f->indices = min_t(int, num_online_cpus(), f->indices); 342 f->indices = min_t(int, num_online_cpus(), f->limit);
343 343
344 adapter->num_rx_queues = 1; 344 adapter->num_rx_queues = 1;
345 adapter->num_tx_queues = 1; 345 adapter->num_tx_queues = 1;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 903d1653516e..8e83f15d2550 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -4386,7 +4386,7 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
4386 4386
4387 /* Set capability flags */ 4387 /* Set capability flags */
4388 rss = min_t(int, IXGBE_MAX_RSS_INDICES, num_online_cpus()); 4388 rss = min_t(int, IXGBE_MAX_RSS_INDICES, num_online_cpus());
4389 adapter->ring_feature[RING_F_RSS].indices = rss; 4389 adapter->ring_feature[RING_F_RSS].limit = rss;
4390 adapter->flags |= IXGBE_FLAG_RSS_ENABLED; 4390 adapter->flags |= IXGBE_FLAG_RSS_ENABLED;
4391 switch (hw->mac.type) { 4391 switch (hw->mac.type) {
4392 case ixgbe_mac_82598EB: 4392 case ixgbe_mac_82598EB:
@@ -4405,13 +4405,12 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
4405 /* Flow Director hash filters enabled */ 4405 /* Flow Director hash filters enabled */
4406 adapter->flags |= IXGBE_FLAG_FDIR_HASH_CAPABLE; 4406 adapter->flags |= IXGBE_FLAG_FDIR_HASH_CAPABLE;
4407 adapter->atr_sample_rate = 20; 4407 adapter->atr_sample_rate = 20;
4408 adapter->ring_feature[RING_F_FDIR].indices = 4408 adapter->ring_feature[RING_F_FDIR].limit =
4409 IXGBE_MAX_FDIR_INDICES; 4409 IXGBE_MAX_FDIR_INDICES;
4410 adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_64K; 4410 adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_64K;
4411#ifdef IXGBE_FCOE 4411#ifdef IXGBE_FCOE
4412 adapter->flags |= IXGBE_FLAG_FCOE_CAPABLE; 4412 adapter->flags |= IXGBE_FLAG_FCOE_CAPABLE;
4413 adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED; 4413 adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED;
4414 adapter->ring_feature[RING_F_FCOE].indices = 0;
4415#ifdef CONFIG_IXGBE_DCB 4414#ifdef CONFIG_IXGBE_DCB
4416 /* Default traffic class to use for FCoE */ 4415 /* Default traffic class to use for FCoE */
4417 adapter->fcoe.up = IXGBE_FCOE_DEFTC; 4416 adapter->fcoe.up = IXGBE_FCOE_DEFTC;
@@ -6206,8 +6205,14 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
6206 if (((protocol == htons(ETH_P_FCOE)) || 6205 if (((protocol == htons(ETH_P_FCOE)) ||
6207 (protocol == htons(ETH_P_FIP))) && 6206 (protocol == htons(ETH_P_FIP))) &&
6208 (adapter->flags & IXGBE_FLAG_FCOE_ENABLED)) { 6207 (adapter->flags & IXGBE_FLAG_FCOE_ENABLED)) {
6209 txq &= (adapter->ring_feature[RING_F_FCOE].indices - 1); 6208 struct ixgbe_ring_feature *f;
6209
6210 f = &adapter->ring_feature[RING_F_FCOE];
6211
6212 while (txq >= f->indices)
6213 txq -= f->indices;
6210 txq += adapter->ring_feature[RING_F_FCOE].mask; 6214 txq += adapter->ring_feature[RING_F_FCOE].mask;
6215
6211 return txq; 6216 return txq;
6212 } 6217 }
6213#endif 6218#endif