aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2010-11-16 22:26:51 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2010-11-16 22:26:51 -0500
commitfc77dc3cc15144bbaf18203e9ef7a3e1beedfc3f (patch)
treea37368f47699db69cae50da83d8fdcdd05c15b8b /drivers
parent5b7da51547cc3ab5461e45a8ee0ca73051416fda (diff)
ixgbe: add a netdev pointer to the ring structure
This change places a netdev pointer directly into the ring structure. This way we can avoid having to determine which netdev we are supposed to be using and can just access the one on the ring directly. As a result of this change further collapse of the code is possible by dropping the adapter from ixgbe_alloc_rx_buffers, and the netdev pointer from ixgbe_xmit_frame_ring_adv and ixgbe_maybe_stop_tx. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ixgbe/ixgbe.h6
-rw-r--r--drivers/net/ixgbe/ixgbe_ethtool.c11
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c55
3 files changed, 36 insertions, 36 deletions
diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/ixgbe/ixgbe.h
index 3c63ee6be2ee..dc4b97e5777f 100644
--- a/drivers/net/ixgbe/ixgbe.h
+++ b/drivers/net/ixgbe/ixgbe.h
@@ -162,6 +162,7 @@ struct ixgbe_rx_queue_stats {
162struct ixgbe_ring { 162struct ixgbe_ring {
163 void *desc; /* descriptor ring memory */ 163 void *desc; /* descriptor ring memory */
164 struct device *dev; /* device for DMA mapping */ 164 struct device *dev; /* device for DMA mapping */
165 struct net_device *netdev; /* netdev ring belongs to */
165 union { 166 union {
166 struct ixgbe_tx_buffer *tx_buffer_info; 167 struct ixgbe_tx_buffer *tx_buffer_info;
167 struct ixgbe_rx_buffer *rx_buffer_info; 168 struct ixgbe_rx_buffer *rx_buffer_info;
@@ -477,14 +478,11 @@ extern void ixgbe_update_stats(struct ixgbe_adapter *adapter);
477extern int ixgbe_init_interrupt_scheme(struct ixgbe_adapter *adapter); 478extern int ixgbe_init_interrupt_scheme(struct ixgbe_adapter *adapter);
478extern void ixgbe_clear_interrupt_scheme(struct ixgbe_adapter *adapter); 479extern void ixgbe_clear_interrupt_scheme(struct ixgbe_adapter *adapter);
479extern netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *, 480extern netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *,
480 struct net_device *,
481 struct ixgbe_adapter *, 481 struct ixgbe_adapter *,
482 struct ixgbe_ring *); 482 struct ixgbe_ring *);
483extern void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *, 483extern void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *,
484 struct ixgbe_tx_buffer *); 484 struct ixgbe_tx_buffer *);
485extern void ixgbe_alloc_rx_buffers(struct ixgbe_adapter *adapter, 485extern void ixgbe_alloc_rx_buffers(struct ixgbe_ring *, u16);
486 struct ixgbe_ring *rx_ring,
487 u16 cleaned_count);
488extern void ixgbe_write_eitr(struct ixgbe_q_vector *); 486extern void ixgbe_write_eitr(struct ixgbe_q_vector *);
489extern int ethtool_ioctl(struct ifreq *ifr); 487extern int ethtool_ioctl(struct ifreq *ifr);
490extern s32 ixgbe_reinit_fdir_tables_82599(struct ixgbe_hw *hw); 488extern s32 ixgbe_reinit_fdir_tables_82599(struct ixgbe_hw *hw);
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c
index cc7804962b2e..c19594a4e8f8 100644
--- a/drivers/net/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ixgbe/ixgbe_ethtool.c
@@ -1473,6 +1473,7 @@ static int ixgbe_setup_desc_rings(struct ixgbe_adapter *adapter)
1473 tx_ring->count = IXGBE_DEFAULT_TXD; 1473 tx_ring->count = IXGBE_DEFAULT_TXD;
1474 tx_ring->queue_index = 0; 1474 tx_ring->queue_index = 0;
1475 tx_ring->dev = &adapter->pdev->dev; 1475 tx_ring->dev = &adapter->pdev->dev;
1476 tx_ring->netdev = adapter->netdev;
1476 tx_ring->reg_idx = adapter->tx_ring[0]->reg_idx; 1477 tx_ring->reg_idx = adapter->tx_ring[0]->reg_idx;
1477 tx_ring->numa_node = adapter->node; 1478 tx_ring->numa_node = adapter->node;
1478 1479
@@ -1492,6 +1493,7 @@ static int ixgbe_setup_desc_rings(struct ixgbe_adapter *adapter)
1492 rx_ring->count = IXGBE_DEFAULT_RXD; 1493 rx_ring->count = IXGBE_DEFAULT_RXD;
1493 rx_ring->queue_index = 0; 1494 rx_ring->queue_index = 0;
1494 rx_ring->dev = &adapter->pdev->dev; 1495 rx_ring->dev = &adapter->pdev->dev;
1496 rx_ring->netdev = adapter->netdev;
1495 rx_ring->reg_idx = adapter->rx_ring[0]->reg_idx; 1497 rx_ring->reg_idx = adapter->rx_ring[0]->reg_idx;
1496 rx_ring->rx_buf_len = IXGBE_RXBUFFER_2048; 1498 rx_ring->rx_buf_len = IXGBE_RXBUFFER_2048;
1497 rx_ring->numa_node = adapter->node; 1499 rx_ring->numa_node = adapter->node;
@@ -1595,8 +1597,7 @@ static int ixgbe_check_lbtest_frame(struct sk_buff *skb,
1595 return 13; 1597 return 13;
1596} 1598}
1597 1599
1598static u16 ixgbe_clean_test_rings(struct ixgbe_adapter *adapter, 1600static u16 ixgbe_clean_test_rings(struct ixgbe_ring *rx_ring,
1599 struct ixgbe_ring *rx_ring,
1600 struct ixgbe_ring *tx_ring, 1601 struct ixgbe_ring *tx_ring,
1601 unsigned int size) 1602 unsigned int size)
1602{ 1603{
@@ -1646,7 +1647,7 @@ static u16 ixgbe_clean_test_rings(struct ixgbe_adapter *adapter,
1646 } 1647 }
1647 1648
1648 /* re-map buffers to ring, store next to clean values */ 1649 /* re-map buffers to ring, store next to clean values */
1649 ixgbe_alloc_rx_buffers(adapter, rx_ring, count); 1650 ixgbe_alloc_rx_buffers(rx_ring, count);
1650 rx_ring->next_to_clean = rx_ntc; 1651 rx_ring->next_to_clean = rx_ntc;
1651 tx_ring->next_to_clean = tx_ntc; 1652 tx_ring->next_to_clean = tx_ntc;
1652 1653
@@ -1690,7 +1691,6 @@ static int ixgbe_run_loopback_test(struct ixgbe_adapter *adapter)
1690 for (i = 0; i < 64; i++) { 1691 for (i = 0; i < 64; i++) {
1691 skb_get(skb); 1692 skb_get(skb);
1692 tx_ret_val = ixgbe_xmit_frame_ring(skb, 1693 tx_ret_val = ixgbe_xmit_frame_ring(skb,
1693 adapter->netdev,
1694 adapter, 1694 adapter,
1695 tx_ring); 1695 tx_ring);
1696 if (tx_ret_val == NETDEV_TX_OK) 1696 if (tx_ret_val == NETDEV_TX_OK)
@@ -1705,8 +1705,7 @@ static int ixgbe_run_loopback_test(struct ixgbe_adapter *adapter)
1705 /* allow 200 milliseconds for packets to go from Tx to Rx */ 1705 /* allow 200 milliseconds for packets to go from Tx to Rx */
1706 msleep(200); 1706 msleep(200);
1707 1707
1708 good_cnt = ixgbe_clean_test_rings(adapter, rx_ring, 1708 good_cnt = ixgbe_clean_test_rings(rx_ring, tx_ring, size);
1709 tx_ring, size);
1710 if (good_cnt != 64) { 1709 if (good_cnt != 64) {
1711 ret_val = 13; 1710 ret_val = 13;
1712 break; 1711 break;
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index a47e09098166..29523cec2704 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -733,7 +733,6 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_q_vector *q_vector,
733 struct ixgbe_ring *tx_ring) 733 struct ixgbe_ring *tx_ring)
734{ 734{
735 struct ixgbe_adapter *adapter = q_vector->adapter; 735 struct ixgbe_adapter *adapter = q_vector->adapter;
736 struct net_device *netdev = adapter->netdev;
737 union ixgbe_adv_tx_desc *tx_desc, *eop_desc; 736 union ixgbe_adv_tx_desc *tx_desc, *eop_desc;
738 struct ixgbe_tx_buffer *tx_buffer_info; 737 struct ixgbe_tx_buffer *tx_buffer_info;
739 unsigned int i, eop, count = 0; 738 unsigned int i, eop, count = 0;
@@ -774,15 +773,15 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_q_vector *q_vector,
774 tx_ring->next_to_clean = i; 773 tx_ring->next_to_clean = i;
775 774
776#define TX_WAKE_THRESHOLD (DESC_NEEDED * 2) 775#define TX_WAKE_THRESHOLD (DESC_NEEDED * 2)
777 if (unlikely(count && netif_carrier_ok(netdev) && 776 if (unlikely(count && netif_carrier_ok(tx_ring->netdev) &&
778 (IXGBE_DESC_UNUSED(tx_ring) >= TX_WAKE_THRESHOLD))) { 777 (IXGBE_DESC_UNUSED(tx_ring) >= TX_WAKE_THRESHOLD))) {
779 /* Make sure that anybody stopping the queue after this 778 /* Make sure that anybody stopping the queue after this
780 * sees the new next_to_clean. 779 * sees the new next_to_clean.
781 */ 780 */
782 smp_mb(); 781 smp_mb();
783 if (__netif_subqueue_stopped(netdev, tx_ring->queue_index) && 782 if (__netif_subqueue_stopped(tx_ring->netdev, tx_ring->queue_index) &&
784 !test_bit(__IXGBE_DOWN, &adapter->state)) { 783 !test_bit(__IXGBE_DOWN, &adapter->state)) {
785 netif_wake_subqueue(netdev, tx_ring->queue_index); 784 netif_wake_subqueue(tx_ring->netdev, tx_ring->queue_index);
786 ++tx_ring->tx_stats.restart_queue; 785 ++tx_ring->tx_stats.restart_queue;
787 } 786 }
788 } 787 }
@@ -1004,24 +1003,27 @@ static inline void ixgbe_release_rx_desc(struct ixgbe_ring *rx_ring, u32 val)
1004 1003
1005/** 1004/**
1006 * ixgbe_alloc_rx_buffers - Replace used receive buffers; packet split 1005 * ixgbe_alloc_rx_buffers - Replace used receive buffers; packet split
1007 * @adapter: address of board private structure 1006 * @rx_ring: ring to place buffers on
1007 * @cleaned_count: number of buffers to replace
1008 **/ 1008 **/
1009void ixgbe_alloc_rx_buffers(struct ixgbe_adapter *adapter, 1009void ixgbe_alloc_rx_buffers(struct ixgbe_ring *rx_ring, u16 cleaned_count)
1010 struct ixgbe_ring *rx_ring,
1011 u16 cleaned_count)
1012{ 1010{
1013 union ixgbe_adv_rx_desc *rx_desc; 1011 union ixgbe_adv_rx_desc *rx_desc;
1014 struct ixgbe_rx_buffer *bi; 1012 struct ixgbe_rx_buffer *bi;
1015 struct sk_buff *skb; 1013 struct sk_buff *skb;
1016 u16 i = rx_ring->next_to_use; 1014 u16 i = rx_ring->next_to_use;
1017 1015
1016 /* do nothing if no valid netdev defined */
1017 if (!rx_ring->netdev)
1018 return;
1019
1018 while (cleaned_count--) { 1020 while (cleaned_count--) {
1019 rx_desc = IXGBE_RX_DESC_ADV(rx_ring, i); 1021 rx_desc = IXGBE_RX_DESC_ADV(rx_ring, i);
1020 bi = &rx_ring->rx_buffer_info[i]; 1022 bi = &rx_ring->rx_buffer_info[i];
1021 skb = bi->skb; 1023 skb = bi->skb;
1022 1024
1023 if (!skb) { 1025 if (!skb) {
1024 skb = netdev_alloc_skb_ip_align(adapter->netdev, 1026 skb = netdev_alloc_skb_ip_align(rx_ring->netdev,
1025 rx_ring->rx_buf_len); 1027 rx_ring->rx_buf_len);
1026 if (!skb) { 1028 if (!skb) {
1027 rx_ring->rx_stats.alloc_rx_buff_failed++; 1029 rx_ring->rx_stats.alloc_rx_buff_failed++;
@@ -1046,7 +1048,7 @@ void ixgbe_alloc_rx_buffers(struct ixgbe_adapter *adapter,
1046 1048
1047 if (rx_ring->flags & IXGBE_RING_RX_PS_ENABLED) { 1049 if (rx_ring->flags & IXGBE_RING_RX_PS_ENABLED) {
1048 if (!bi->page) { 1050 if (!bi->page) {
1049 bi->page = netdev_alloc_page(adapter->netdev); 1051 bi->page = netdev_alloc_page(rx_ring->netdev);
1050 if (!bi->page) { 1052 if (!bi->page) {
1051 rx_ring->rx_stats.alloc_rx_page_failed++; 1053 rx_ring->rx_stats.alloc_rx_page_failed++;
1052 goto no_buffers; 1054 goto no_buffers;
@@ -1304,7 +1306,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
1304 total_rx_bytes += skb->len; 1306 total_rx_bytes += skb->len;
1305 total_rx_packets++; 1307 total_rx_packets++;
1306 1308
1307 skb->protocol = eth_type_trans(skb, adapter->netdev); 1309 skb->protocol = eth_type_trans(skb, rx_ring->netdev);
1308#ifdef IXGBE_FCOE 1310#ifdef IXGBE_FCOE
1309 /* if ddp, not passing to ULD unless for FCP_RSP or error */ 1311 /* if ddp, not passing to ULD unless for FCP_RSP or error */
1310 if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) { 1312 if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) {
@@ -1320,7 +1322,7 @@ next_desc:
1320 1322
1321 /* return some buffers to hardware, one at a time is too slow */ 1323 /* return some buffers to hardware, one at a time is too slow */
1322 if (cleaned_count >= IXGBE_RX_BUFFER_WRITE) { 1324 if (cleaned_count >= IXGBE_RX_BUFFER_WRITE) {
1323 ixgbe_alloc_rx_buffers(adapter, rx_ring, cleaned_count); 1325 ixgbe_alloc_rx_buffers(rx_ring, cleaned_count);
1324 cleaned_count = 0; 1326 cleaned_count = 0;
1325 } 1327 }
1326 1328
@@ -1335,14 +1337,14 @@ next_desc:
1335 cleaned_count = IXGBE_DESC_UNUSED(rx_ring); 1337 cleaned_count = IXGBE_DESC_UNUSED(rx_ring);
1336 1338
1337 if (cleaned_count) 1339 if (cleaned_count)
1338 ixgbe_alloc_rx_buffers(adapter, rx_ring, cleaned_count); 1340 ixgbe_alloc_rx_buffers(rx_ring, cleaned_count);
1339 1341
1340#ifdef IXGBE_FCOE 1342#ifdef IXGBE_FCOE
1341 /* include DDPed FCoE data */ 1343 /* include DDPed FCoE data */
1342 if (ddp_bytes > 0) { 1344 if (ddp_bytes > 0) {
1343 unsigned int mss; 1345 unsigned int mss;
1344 1346
1345 mss = adapter->netdev->mtu - sizeof(struct fcoe_hdr) - 1347 mss = rx_ring->netdev->mtu - sizeof(struct fcoe_hdr) -
1346 sizeof(struct fc_frame_header) - 1348 sizeof(struct fc_frame_header) -
1347 sizeof(struct fcoe_crc_eof); 1349 sizeof(struct fcoe_crc_eof);
1348 if (mss > 512) 1350 if (mss > 512)
@@ -2810,7 +2812,7 @@ void ixgbe_configure_rx_ring(struct ixgbe_adapter *adapter,
2810 IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(reg_idx), rxdctl); 2812 IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(reg_idx), rxdctl);
2811 2813
2812 ixgbe_rx_desc_queue_enable(adapter, ring); 2814 ixgbe_rx_desc_queue_enable(adapter, ring);
2813 ixgbe_alloc_rx_buffers(adapter, ring, IXGBE_DESC_UNUSED(ring)); 2815 ixgbe_alloc_rx_buffers(ring, IXGBE_DESC_UNUSED(ring));
2814} 2816}
2815 2817
2816static void ixgbe_setup_psrtype(struct ixgbe_adapter *adapter) 2818static void ixgbe_setup_psrtype(struct ixgbe_adapter *adapter)
@@ -4455,6 +4457,7 @@ static int ixgbe_alloc_queues(struct ixgbe_adapter *adapter)
4455 ring->count = adapter->tx_ring_count; 4457 ring->count = adapter->tx_ring_count;
4456 ring->queue_index = i; 4458 ring->queue_index = i;
4457 ring->dev = &adapter->pdev->dev; 4459 ring->dev = &adapter->pdev->dev;
4460 ring->netdev = adapter->netdev;
4458 ring->numa_node = adapter->node; 4461 ring->numa_node = adapter->node;
4459 4462
4460 adapter->tx_ring[i] = ring; 4463 adapter->tx_ring[i] = ring;
@@ -4481,6 +4484,7 @@ static int ixgbe_alloc_queues(struct ixgbe_adapter *adapter)
4481 ring->count = rx_count; 4484 ring->count = rx_count;
4482 ring->queue_index = i; 4485 ring->queue_index = i;
4483 ring->dev = &adapter->pdev->dev; 4486 ring->dev = &adapter->pdev->dev;
4487 ring->netdev = adapter->netdev;
4484 ring->numa_node = adapter->node; 4488 ring->numa_node = adapter->node;
4485 4489
4486 adapter->rx_ring[i] = ring; 4490 adapter->rx_ring[i] = ring;
@@ -6229,10 +6233,9 @@ static void ixgbe_atr(struct ixgbe_adapter *adapter, struct sk_buff *skb,
6229 ixgbe_fdir_add_signature_filter_82599(&adapter->hw, &atr_input, queue); 6233 ixgbe_fdir_add_signature_filter_82599(&adapter->hw, &atr_input, queue);
6230} 6234}
6231 6235
6232static int __ixgbe_maybe_stop_tx(struct net_device *netdev, 6236static int __ixgbe_maybe_stop_tx(struct ixgbe_ring *tx_ring, int size)
6233 struct ixgbe_ring *tx_ring, int size)
6234{ 6237{
6235 netif_stop_subqueue(netdev, tx_ring->queue_index); 6238 netif_stop_subqueue(tx_ring->netdev, tx_ring->queue_index);
6236 /* Herbert's original patch had: 6239 /* Herbert's original patch had:
6237 * smp_mb__after_netif_stop_queue(); 6240 * smp_mb__after_netif_stop_queue();
6238 * but since that doesn't exist yet, just open code it. */ 6241 * but since that doesn't exist yet, just open code it. */
@@ -6244,17 +6247,16 @@ static int __ixgbe_maybe_stop_tx(struct net_device *netdev,
6244 return -EBUSY; 6247 return -EBUSY;
6245 6248
6246 /* A reprieve! - use start_queue because it doesn't call schedule */ 6249 /* A reprieve! - use start_queue because it doesn't call schedule */
6247 netif_start_subqueue(netdev, tx_ring->queue_index); 6250 netif_start_subqueue(tx_ring->netdev, tx_ring->queue_index);
6248 ++tx_ring->tx_stats.restart_queue; 6251 ++tx_ring->tx_stats.restart_queue;
6249 return 0; 6252 return 0;
6250} 6253}
6251 6254
6252static int ixgbe_maybe_stop_tx(struct net_device *netdev, 6255static int ixgbe_maybe_stop_tx(struct ixgbe_ring *tx_ring, int size)
6253 struct ixgbe_ring *tx_ring, int size)
6254{ 6256{
6255 if (likely(IXGBE_DESC_UNUSED(tx_ring) >= size)) 6257 if (likely(IXGBE_DESC_UNUSED(tx_ring) >= size))
6256 return 0; 6258 return 0;
6257 return __ixgbe_maybe_stop_tx(netdev, tx_ring, size); 6259 return __ixgbe_maybe_stop_tx(tx_ring, size);
6258} 6260}
6259 6261
6260static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb) 6262static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
@@ -6299,10 +6301,11 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
6299 return skb_tx_hash(dev, skb); 6301 return skb_tx_hash(dev, skb);
6300} 6302}
6301 6303
6302netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb, struct net_device *netdev, 6304netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
6303 struct ixgbe_adapter *adapter, 6305 struct ixgbe_adapter *adapter,
6304 struct ixgbe_ring *tx_ring) 6306 struct ixgbe_ring *tx_ring)
6305{ 6307{
6308 struct net_device *netdev = tx_ring->netdev;
6306 struct netdev_queue *txq; 6309 struct netdev_queue *txq;
6307 unsigned int first; 6310 unsigned int first;
6308 unsigned int tx_flags = 0; 6311 unsigned int tx_flags = 0;
@@ -6360,7 +6363,7 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb, struct net_device *netdev
6360 for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) 6363 for (f = 0; f < skb_shinfo(skb)->nr_frags; f++)
6361 count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size); 6364 count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size);
6362 6365
6363 if (ixgbe_maybe_stop_tx(netdev, tx_ring, count)) { 6366 if (ixgbe_maybe_stop_tx(tx_ring, count)) {
6364 tx_ring->tx_stats.tx_busy++; 6367 tx_ring->tx_stats.tx_busy++;
6365 return NETDEV_TX_BUSY; 6368 return NETDEV_TX_BUSY;
6366 } 6369 }
@@ -6412,7 +6415,7 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb, struct net_device *netdev
6412 txq->tx_bytes += skb->len; 6415 txq->tx_bytes += skb->len;
6413 txq->tx_packets++; 6416 txq->tx_packets++;
6414 ixgbe_tx_queue(tx_ring, tx_flags, count, skb->len, hdr_len); 6417 ixgbe_tx_queue(tx_ring, tx_flags, count, skb->len, hdr_len);
6415 ixgbe_maybe_stop_tx(netdev, tx_ring, DESC_NEEDED); 6418 ixgbe_maybe_stop_tx(tx_ring, DESC_NEEDED);
6416 6419
6417 } else { 6420 } else {
6418 dev_kfree_skb_any(skb); 6421 dev_kfree_skb_any(skb);
@@ -6429,7 +6432,7 @@ static netdev_tx_t ixgbe_xmit_frame(struct sk_buff *skb, struct net_device *netd
6429 struct ixgbe_ring *tx_ring; 6432 struct ixgbe_ring *tx_ring;
6430 6433
6431 tx_ring = adapter->tx_ring[skb->queue_mapping]; 6434 tx_ring = adapter->tx_ring[skb->queue_mapping];
6432 return ixgbe_xmit_frame_ring(skb, netdev, adapter, tx_ring); 6435 return ixgbe_xmit_frame_ring(skb, adapter, tx_ring);
6433} 6436}
6434 6437
6435/** 6438/**