diff options
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 13 |
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 */ |
280 | struct ixgbe_ring_feature { | 280 | struct 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 |