Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'ixgbevf'

Aaron Brown says:

====================
Intel Wired LAN Driver Updates

This series contains updates from Emil to ixgbevf.

He cleans up the code by removing the adapter structure as a
parameter from multiple functions in favor of using the ixgbevf_ring
structure and moves hot-path specific statistic int the ring
structure for anticipated performance gains.

He also removes the Tx/Rx counters for checksum offload and adds
counters for tx_restart_queue and tx_timeout_count.

Next he makes it so that the first tx_buffer structure acts as a
central storage location for most the skb info we are about to
transmit, then takes advantage of the dma buffer always being
present in the first descriptor and mapped as single allowing a
call to dma_unmap_single which alleviates the need to check for
DMA mapping in ixgbevf_clean_tx_irq().

Finally he merges the ixgbevf_tx_map call and the ixgbevf_tx_queue
call into a single function.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+418 -385
+1
drivers/net/ethernet/intel/ixgbevf/defines.h
··· 183 183 #define IXGBE_TXD_CMD_DEXT 0x20000000 /* Descriptor extension (0 = legacy) */ 184 184 #define IXGBE_TXD_CMD_VLE 0x40000000 /* Add VLAN tag */ 185 185 #define IXGBE_TXD_STAT_DD 0x00000001 /* Descriptor Done */ 186 + #define IXGBE_TXD_CMD (IXGBE_TXD_CMD_EOP | IXGBE_TXD_CMD_RS) 186 187 187 188 /* Transmit Descriptor - Advanced */ 188 189 union ixgbe_adv_tx_desc {
+33 -33
drivers/net/ethernet/intel/ixgbevf/ethtool.c
··· 77 77 {"tx_bytes", IXGBEVF_STAT(stats.vfgotc, stats.base_vfgotc, 78 78 stats.saved_reset_vfgotc)}, 79 79 {"tx_busy", IXGBEVF_ZSTAT(tx_busy)}, 80 + {"tx_restart_queue", IXGBEVF_ZSTAT(restart_queue)}, 81 + {"tx_timeout_count", IXGBEVF_ZSTAT(tx_timeout_count)}, 80 82 {"multicast", IXGBEVF_STAT(stats.vfmprc, stats.base_vfmprc, 81 83 stats.saved_reset_vfmprc)}, 82 - {"rx_csum_offload_good", IXGBEVF_ZSTAT(hw_csum_rx_good)}, 83 84 {"rx_csum_offload_errors", IXGBEVF_ZSTAT(hw_csum_rx_error)}, 84 - {"tx_csum_offload_ctxt", IXGBEVF_ZSTAT(hw_csum_tx_good)}, 85 85 #ifdef BP_EXTENDED_STATS 86 86 {"rx_bp_poll_yield", IXGBEVF_ZSTAT(bp_rx_yields)}, 87 87 {"rx_bp_cleaned", IXGBEVF_ZSTAT(bp_rx_cleaned)}, ··· 305 305 /* clone ring and setup updated count */ 306 306 tx_ring[i] = *adapter->tx_ring[i]; 307 307 tx_ring[i].count = new_tx_count; 308 - err = ixgbevf_setup_tx_resources(adapter, &tx_ring[i]); 309 - if (!err) 310 - continue; 311 - while (i) { 312 - i--; 313 - ixgbevf_free_tx_resources(adapter, &tx_ring[i]); 308 + err = ixgbevf_setup_tx_resources(&tx_ring[i]); 309 + if (err) { 310 + while (i) { 311 + i--; 312 + ixgbevf_free_tx_resources(&tx_ring[i]); 313 + } 314 + 315 + vfree(tx_ring); 316 + tx_ring = NULL; 317 + 318 + goto clear_reset; 314 319 } 315 - 316 - vfree(tx_ring); 317 - tx_ring = NULL; 318 - 319 - goto clear_reset; 320 320 } 321 321 } 322 322 ··· 331 331 /* clone ring and setup updated count */ 332 332 rx_ring[i] = *adapter->rx_ring[i]; 333 333 rx_ring[i].count = new_rx_count; 334 - err = ixgbevf_setup_rx_resources(adapter, &rx_ring[i]); 335 - if (!err) 336 - continue; 337 - while (i) { 338 - i--; 339 - ixgbevf_free_rx_resources(adapter, &rx_ring[i]); 334 + err = ixgbevf_setup_rx_resources(&rx_ring[i]); 335 + if (err) { 336 + while (i) { 337 + i--; 338 + ixgbevf_free_rx_resources(&rx_ring[i]); 339 + } 340 + 341 + vfree(rx_ring); 342 + rx_ring = NULL; 343 + 344 + goto clear_reset; 340 345 } 341 - 342 - vfree(rx_ring); 343 - rx_ring = NULL; 344 - 345 - goto clear_reset; 346 346 } 347 347 } 348 348 ··· 352 352 /* Tx */ 353 353 if (tx_ring) { 354 354 for (i = 0; i < adapter->num_tx_queues; i++) { 355 - ixgbevf_free_tx_resources(adapter, adapter->tx_ring[i]); 355 + ixgbevf_free_tx_resources(adapter->tx_ring[i]); 356 356 *adapter->tx_ring[i] = tx_ring[i]; 357 357 } 358 358 adapter->tx_ring_count = new_tx_count; ··· 364 364 /* Rx */ 365 365 if (rx_ring) { 366 366 for (i = 0; i < adapter->num_rx_queues; i++) { 367 - ixgbevf_free_rx_resources(adapter, adapter->rx_ring[i]); 367 + ixgbevf_free_rx_resources(adapter->rx_ring[i]); 368 368 *adapter->rx_ring[i] = rx_ring[i]; 369 369 } 370 370 adapter->rx_ring_count = new_rx_count; ··· 380 380 /* free Tx resources if Rx error is encountered */ 381 381 if (tx_ring) { 382 382 for (i = 0; i < adapter->num_tx_queues; i++) 383 - ixgbevf_free_tx_resources(adapter, &tx_ring[i]); 383 + ixgbevf_free_tx_resources(&tx_ring[i]); 384 384 vfree(tx_ring); 385 385 } 386 386 ··· 411 411 tx_yields = 0, tx_cleaned = 0, tx_missed = 0; 412 412 413 413 for (i = 0; i < adapter->num_rx_queues; i++) { 414 - rx_yields += adapter->rx_ring[i]->bp_yields; 415 - rx_cleaned += adapter->rx_ring[i]->bp_cleaned; 416 - rx_yields += adapter->rx_ring[i]->bp_yields; 414 + rx_yields += adapter->rx_ring[i]->stats.yields; 415 + rx_cleaned += adapter->rx_ring[i]->stats.cleaned; 416 + rx_yields += adapter->rx_ring[i]->stats.yields; 417 417 } 418 418 419 419 for (i = 0; i < adapter->num_tx_queues; i++) { 420 - tx_yields += adapter->tx_ring[i]->bp_yields; 421 - tx_cleaned += adapter->tx_ring[i]->bp_cleaned; 422 - tx_yields += adapter->tx_ring[i]->bp_yields; 420 + tx_yields += adapter->tx_ring[i]->stats.yields; 421 + tx_cleaned += adapter->tx_ring[i]->stats.cleaned; 422 + tx_yields += adapter->tx_ring[i]->stats.yields; 423 423 } 424 424 425 425 adapter->bp_rx_yields = rx_yields;
+54 -36
drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
··· 46 46 /* wrapper around a pointer to a socket buffer, 47 47 * so a DMA handle can be stored along with the buffer */ 48 48 struct ixgbevf_tx_buffer { 49 - struct sk_buff *skb; 50 - dma_addr_t dma; 51 - unsigned long time_stamp; 52 49 union ixgbe_adv_tx_desc *next_to_watch; 53 - u16 length; 54 - u16 mapped_as_page; 50 + unsigned long time_stamp; 51 + struct sk_buff *skb; 52 + unsigned int bytecount; 53 + unsigned short gso_segs; 54 + __be16 protocol; 55 + DEFINE_DMA_UNMAP_ADDR(dma); 56 + DEFINE_DMA_UNMAP_LEN(len); 57 + u32 tx_flags; 55 58 }; 56 59 57 60 struct ixgbevf_rx_buffer { 58 61 struct sk_buff *skb; 59 62 dma_addr_t dma; 63 + }; 64 + 65 + struct ixgbevf_stats { 66 + u64 packets; 67 + u64 bytes; 68 + #ifdef BP_EXTENDED_STATS 69 + u64 yields; 70 + u64 misses; 71 + u64 cleaned; 72 + #endif 73 + }; 74 + 75 + struct ixgbevf_tx_queue_stats { 76 + u64 restart_queue; 77 + u64 tx_busy; 78 + u64 tx_done_old; 79 + }; 80 + 81 + struct ixgbevf_rx_queue_stats { 82 + u64 non_eop_descs; 83 + u64 alloc_rx_page_failed; 84 + u64 alloc_rx_buff_failed; 85 + u64 csum_err; 60 86 }; 61 87 62 88 struct ixgbevf_ring { ··· 96 70 unsigned int next_to_use; 97 71 unsigned int next_to_clean; 98 72 99 - int queue_index; /* needed for multiqueue queue management */ 100 73 union { 101 74 struct ixgbevf_tx_buffer *tx_buffer_info; 102 75 struct ixgbevf_rx_buffer *rx_buffer_info; 103 76 }; 104 77 105 - u64 total_bytes; 106 - u64 total_packets; 107 - struct u64_stats_sync syncp; 78 + struct ixgbevf_stats stats; 79 + struct u64_stats_sync syncp; 80 + union { 81 + struct ixgbevf_tx_queue_stats tx_stats; 82 + struct ixgbevf_rx_queue_stats rx_stats; 83 + }; 84 + 108 85 u64 hw_csum_rx_error; 109 - u64 hw_csum_rx_good; 110 - #ifdef BP_EXTENDED_STATS 111 - u64 bp_yields; 112 - u64 bp_misses; 113 - u64 bp_cleaned; 114 - #endif 115 86 u8 __iomem *tail; 116 87 117 88 u16 reg_idx; /* holds the special value that gets the hardware register ··· 116 93 * for DCB and RSS modes */ 117 94 118 95 u16 rx_buf_len; 96 + int queue_index; /* needed for multiqueue queue management */ 119 97 }; 120 98 121 99 /* How many Rx Buffers do we bundle into one write to the hardware ? */ ··· 147 123 #define IXGBE_TX_FLAGS_VLAN (u32)(1 << 1) 148 124 #define IXGBE_TX_FLAGS_TSO (u32)(1 << 2) 149 125 #define IXGBE_TX_FLAGS_IPV4 (u32)(1 << 3) 150 - #define IXGBE_TX_FLAGS_FCOE (u32)(1 << 4) 151 - #define IXGBE_TX_FLAGS_FSO (u32)(1 << 5) 152 126 #define IXGBE_TX_FLAGS_VLAN_MASK 0xffff0000 153 127 #define IXGBE_TX_FLAGS_VLAN_PRIO_MASK 0x0000e000 154 128 #define IXGBE_TX_FLAGS_VLAN_SHIFT 16 ··· 208 186 q_vector->state |= IXGBEVF_QV_STATE_NAPI_YIELD; 209 187 rc = false; 210 188 #ifdef BP_EXTENDED_STATS 211 - q_vector->tx.ring->bp_yields++; 189 + q_vector->tx.ring->stats.yields++; 212 190 #endif 213 191 } else { 214 192 /* we don't care if someone yielded */ ··· 243 221 q_vector->state |= IXGBEVF_QV_STATE_POLL_YIELD; 244 222 rc = false; 245 223 #ifdef BP_EXTENDED_STATS 246 - q_vector->rx.ring->bp_yields++; 224 + q_vector->rx.ring->stats.yields++; 247 225 #endif 248 226 } else { 249 227 /* preserve yield marks */ ··· 336 314 struct ixgbevf_adapter { 337 315 struct timer_list watchdog_timer; 338 316 unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; 339 - u16 bd_number; 340 317 struct work_struct reset_task; 341 318 struct ixgbevf_q_vector *q_vector[MAX_MSIX_Q_VECTORS]; 342 319 ··· 348 327 u32 eims_other; 349 328 350 329 /* TX */ 351 - struct ixgbevf_ring *tx_ring[MAX_TX_QUEUES]; /* One per active queue */ 352 330 int num_tx_queues; 331 + struct ixgbevf_ring *tx_ring[MAX_TX_QUEUES]; /* One per active queue */ 353 332 u64 restart_queue; 354 - u64 hw_csum_tx_good; 355 - u64 lsc_int; 356 - u64 hw_tso_ctxt; 357 - u64 hw_tso6_ctxt; 358 333 u32 tx_timeout_count; 359 334 360 335 /* RX */ 361 - struct ixgbevf_ring *rx_ring[MAX_TX_QUEUES]; /* One per active queue */ 362 336 int num_rx_queues; 337 + struct ixgbevf_ring *rx_ring[MAX_TX_QUEUES]; /* One per active queue */ 363 338 u64 hw_csum_rx_error; 364 339 u64 hw_rx_no_dma_resources; 365 - u64 hw_csum_rx_good; 366 340 u64 non_eop_descs; 367 341 int num_msix_vectors; 368 - struct msix_entry *msix_entries; 369 - 370 342 u32 alloc_rx_page_failed; 371 343 u32 alloc_rx_buff_failed; 372 344 ··· 371 357 #define IXGBE_FLAG_IN_NETPOLL (u32)(1 << 1) 372 358 #define IXGBEVF_FLAG_QUEUE_RESET_REQUESTED (u32)(1 << 2) 373 359 360 + struct msix_entry *msix_entries; 361 + 374 362 /* OS defined structs */ 375 363 struct net_device *netdev; 376 364 struct pci_dev *pdev; ··· 380 364 /* structs defined in ixgbe_vf.h */ 381 365 struct ixgbe_hw hw; 382 366 u16 msg_enable; 383 - struct ixgbevf_hw_stats stats; 367 + u16 bd_number; 384 368 /* Interrupt Throttle Rate */ 385 369 u32 eitr_param; 370 + 371 + struct ixgbevf_hw_stats stats; 386 372 387 373 unsigned long state; 388 374 u64 tx_busy; ··· 404 386 u32 link_speed; 405 387 bool link_up; 406 388 407 - struct work_struct watchdog_task; 408 - 409 389 spinlock_t mbx_lock; 390 + 391 + struct work_struct watchdog_task; 410 392 }; 411 393 412 394 enum ixbgevf_state_t { ··· 438 420 void ixgbevf_reinit_locked(struct ixgbevf_adapter *adapter); 439 421 void ixgbevf_reset(struct ixgbevf_adapter *adapter); 440 422 void ixgbevf_set_ethtool_ops(struct net_device *netdev); 441 - int ixgbevf_setup_rx_resources(struct ixgbevf_adapter *, struct ixgbevf_ring *); 442 - int ixgbevf_setup_tx_resources(struct ixgbevf_adapter *, struct ixgbevf_ring *); 443 - void ixgbevf_free_rx_resources(struct ixgbevf_adapter *, struct ixgbevf_ring *); 444 - void ixgbevf_free_tx_resources(struct ixgbevf_adapter *, struct ixgbevf_ring *); 423 + int ixgbevf_setup_rx_resources(struct ixgbevf_ring *); 424 + int ixgbevf_setup_tx_resources(struct ixgbevf_ring *); 425 + void ixgbevf_free_rx_resources(struct ixgbevf_ring *); 426 + void ixgbevf_free_tx_resources(struct ixgbevf_ring *); 445 427 void ixgbevf_update_stats(struct ixgbevf_adapter *adapter); 446 428 int ethtool_ioctl(struct ifreq *ifr); 447 429
+330 -316
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
··· 145 145 } 146 146 147 147 static void ixgbevf_unmap_and_free_tx_resource(struct ixgbevf_ring *tx_ring, 148 - struct ixgbevf_tx_buffer 149 - *tx_buffer_info) 148 + struct ixgbevf_tx_buffer *tx_buffer) 150 149 { 151 - if (tx_buffer_info->dma) { 152 - if (tx_buffer_info->mapped_as_page) 153 - dma_unmap_page(tx_ring->dev, 154 - tx_buffer_info->dma, 155 - tx_buffer_info->length, 156 - DMA_TO_DEVICE); 157 - else 150 + if (tx_buffer->skb) { 151 + dev_kfree_skb_any(tx_buffer->skb); 152 + if (dma_unmap_len(tx_buffer, len)) 158 153 dma_unmap_single(tx_ring->dev, 159 - tx_buffer_info->dma, 160 - tx_buffer_info->length, 154 + dma_unmap_addr(tx_buffer, dma), 155 + dma_unmap_len(tx_buffer, len), 161 156 DMA_TO_DEVICE); 162 - tx_buffer_info->dma = 0; 157 + } else if (dma_unmap_len(tx_buffer, len)) { 158 + dma_unmap_page(tx_ring->dev, 159 + dma_unmap_addr(tx_buffer, dma), 160 + dma_unmap_len(tx_buffer, len), 161 + DMA_TO_DEVICE); 163 162 } 164 - if (tx_buffer_info->skb) { 165 - dev_kfree_skb_any(tx_buffer_info->skb); 166 - tx_buffer_info->skb = NULL; 167 - } 168 - tx_buffer_info->time_stamp = 0; 169 - /* tx_buffer_info must be completely set up in the transmit path */ 163 + tx_buffer->next_to_watch = NULL; 164 + tx_buffer->skb = NULL; 165 + dma_unmap_len_set(tx_buffer, len, 0); 166 + /* tx_buffer must be completely set up in the transmit path */ 170 167 } 171 168 172 169 #define IXGBE_MAX_TXD_PWR 14 ··· 184 187 struct ixgbevf_ring *tx_ring) 185 188 { 186 189 struct ixgbevf_adapter *adapter = q_vector->adapter; 187 - union ixgbe_adv_tx_desc *tx_desc, *eop_desc; 188 - struct ixgbevf_tx_buffer *tx_buffer_info; 189 - unsigned int i, count = 0; 190 + struct ixgbevf_tx_buffer *tx_buffer; 191 + union ixgbe_adv_tx_desc *tx_desc; 190 192 unsigned int total_bytes = 0, total_packets = 0; 193 + unsigned int budget = tx_ring->count / 2; 194 + unsigned int i = tx_ring->next_to_clean; 191 195 192 196 if (test_bit(__IXGBEVF_DOWN, &adapter->state)) 193 197 return true; 194 198 195 - i = tx_ring->next_to_clean; 196 - tx_buffer_info = &tx_ring->tx_buffer_info[i]; 197 - eop_desc = tx_buffer_info->next_to_watch; 199 + tx_buffer = &tx_ring->tx_buffer_info[i]; 200 + tx_desc = IXGBEVF_TX_DESC(tx_ring, i); 201 + i -= tx_ring->count; 198 202 199 203 do { 200 - bool cleaned = false; 204 + union ixgbe_adv_tx_desc *eop_desc = tx_buffer->next_to_watch; 201 205 202 206 /* if next_to_watch is not set then there is no work pending */ 203 207 if (!eop_desc) ··· 212 214 break; 213 215 214 216 /* clear next_to_watch to prevent false hangs */ 215 - tx_buffer_info->next_to_watch = NULL; 217 + tx_buffer->next_to_watch = NULL; 216 218 217 - for ( ; !cleaned; count++) { 218 - struct sk_buff *skb; 219 - tx_desc = IXGBEVF_TX_DESC(tx_ring, i); 220 - cleaned = (tx_desc == eop_desc); 221 - skb = tx_buffer_info->skb; 219 + /* update the statistics for this packet */ 220 + total_bytes += tx_buffer->bytecount; 221 + total_packets += tx_buffer->gso_segs; 222 222 223 - if (cleaned && skb) { 224 - unsigned int segs, bytecount; 223 + /* free the skb */ 224 + dev_kfree_skb_any(tx_buffer->skb); 225 225 226 - /* gso_segs is currently only valid for tcp */ 227 - segs = skb_shinfo(skb)->gso_segs ?: 1; 228 - /* multiply data chunks by size of headers */ 229 - bytecount = ((segs - 1) * skb_headlen(skb)) + 230 - skb->len; 231 - total_packets += segs; 232 - total_bytes += bytecount; 226 + /* unmap skb header data */ 227 + dma_unmap_single(tx_ring->dev, 228 + dma_unmap_addr(tx_buffer, dma), 229 + dma_unmap_len(tx_buffer, len), 230 + DMA_TO_DEVICE); 231 + 232 + /* clear tx_buffer data */ 233 + tx_buffer->skb = NULL; 234 + dma_unmap_len_set(tx_buffer, len, 0); 235 + 236 + /* unmap remaining buffers */ 237 + while (tx_desc != eop_desc) { 238 + tx_buffer++; 239 + tx_desc++; 240 + i++; 241 + if (unlikely(!i)) { 242 + i -= tx_ring->count; 243 + tx_buffer = tx_ring->tx_buffer_info; 244 + tx_desc = IXGBEVF_TX_DESC(tx_ring, 0); 233 245 } 234 246 235 - ixgbevf_unmap_and_free_tx_resource(tx_ring, 236 - tx_buffer_info); 237 - 238 - tx_desc->wb.status = 0; 239 - 240 - i++; 241 - if (i == tx_ring->count) 242 - i = 0; 243 - 244 - tx_buffer_info = &tx_ring->tx_buffer_info[i]; 247 + /* unmap any remaining paged data */ 248 + if (dma_unmap_len(tx_buffer, len)) { 249 + dma_unmap_page(tx_ring->dev, 250 + dma_unmap_addr(tx_buffer, dma), 251 + dma_unmap_len(tx_buffer, len), 252 + DMA_TO_DEVICE); 253 + dma_unmap_len_set(tx_buffer, len, 0); 254 + } 245 255 } 246 256 247 - eop_desc = tx_buffer_info->next_to_watch; 248 - } while (count < tx_ring->count); 257 + /* move us one more past the eop_desc for start of next pkt */ 258 + tx_buffer++; 259 + tx_desc++; 260 + i++; 261 + if (unlikely(!i)) { 262 + i -= tx_ring->count; 263 + tx_buffer = tx_ring->tx_buffer_info; 264 + tx_desc = IXGBEVF_TX_DESC(tx_ring, 0); 265 + } 249 266 267 + /* issue prefetch for next Tx descriptor */ 268 + prefetch(tx_desc); 269 + 270 + /* update budget accounting */ 271 + budget--; 272 + } while (likely(budget)); 273 + 274 + i += tx_ring->count; 250 275 tx_ring->next_to_clean = i; 276 + u64_stats_update_begin(&tx_ring->syncp); 277 + tx_ring->stats.bytes += total_bytes; 278 + tx_ring->stats.packets += total_packets; 279 + u64_stats_update_end(&tx_ring->syncp); 280 + q_vector->tx.total_bytes += total_bytes; 281 + q_vector->tx.total_packets += total_packets; 251 282 252 283 #define TX_WAKE_THRESHOLD (DESC_NEEDED * 2) 253 - if (unlikely(count && netif_carrier_ok(tx_ring->netdev) && 284 + if (unlikely(total_packets && netif_carrier_ok(tx_ring->netdev) && 254 285 (ixgbevf_desc_unused(tx_ring) >= TX_WAKE_THRESHOLD))) { 255 286 /* Make sure that anybody stopping the queue after this 256 287 * sees the new next_to_clean. 257 288 */ 258 289 smp_mb(); 290 + 259 291 if (__netif_subqueue_stopped(tx_ring->netdev, 260 292 tx_ring->queue_index) && 261 293 !test_bit(__IXGBEVF_DOWN, &adapter->state)) { 262 294 netif_wake_subqueue(tx_ring->netdev, 263 295 tx_ring->queue_index); 264 - ++adapter->restart_queue; 296 + ++tx_ring->tx_stats.restart_queue; 265 297 } 266 298 } 267 299 268 - u64_stats_update_begin(&tx_ring->syncp); 269 - tx_ring->total_bytes += total_bytes; 270 - tx_ring->total_packets += total_packets; 271 - u64_stats_update_end(&tx_ring->syncp); 272 - q_vector->tx.total_bytes += total_bytes; 273 - q_vector->tx.total_packets += total_packets; 274 - 275 - return count < tx_ring->count; 300 + return !!budget; 276 301 } 277 302 278 303 /** ··· 364 343 /* if IP and error */ 365 344 if ((status_err & IXGBE_RXD_STAT_IPCS) && 366 345 (status_err & IXGBE_RXDADV_ERR_IPE)) { 367 - ring->hw_csum_rx_error++; 346 + ring->rx_stats.csum_err++; 368 347 return; 369 348 } 370 349 ··· 372 351 return; 373 352 374 353 if (status_err & IXGBE_RXDADV_ERR_TCPE) { 375 - ring->hw_csum_rx_error++; 354 + ring->rx_stats.csum_err++; 376 355 return; 377 356 } 378 357 379 358 /* It must be a TCP or UDP packet with a valid checksum */ 380 359 skb->ip_summed = CHECKSUM_UNNECESSARY; 381 - ring->hw_csum_rx_good++; 382 360 } 383 361 384 362 /** 385 363 * ixgbevf_alloc_rx_buffers - Replace used receive buffers; packet split 386 - * @adapter: address of board private structure 364 + * @rx_ring: rx descriptor ring (for a specific queue) to setup buffers on 387 365 **/ 388 - static void ixgbevf_alloc_rx_buffers(struct ixgbevf_adapter *adapter, 389 - struct ixgbevf_ring *rx_ring, 366 + static void ixgbevf_alloc_rx_buffers(struct ixgbevf_ring *rx_ring, 390 367 int cleaned_count) 391 368 { 392 - struct pci_dev *pdev = adapter->pdev; 393 369 union ixgbe_adv_rx_desc *rx_desc; 394 370 struct ixgbevf_rx_buffer *bi; 395 371 unsigned int i = rx_ring->next_to_use; 396 372 397 - bi = &rx_ring->rx_buffer_info[i]; 398 - 399 373 while (cleaned_count--) { 400 374 rx_desc = IXGBEVF_RX_DESC(rx_ring, i); 375 + bi = &rx_ring->rx_buffer_info[i]; 401 376 402 377 if (!bi->skb) { 403 378 struct sk_buff *skb; 404 379 405 380 skb = netdev_alloc_skb_ip_align(rx_ring->netdev, 406 381 rx_ring->rx_buf_len); 407 - if (!skb) { 408 - adapter->alloc_rx_buff_failed++; 382 + if (!skb) 409 383 goto no_buffers; 410 - } 384 + 411 385 bi->skb = skb; 412 386 413 - bi->dma = dma_map_single(&pdev->dev, skb->data, 387 + bi->dma = dma_map_single(rx_ring->dev, skb->data, 414 388 rx_ring->rx_buf_len, 415 389 DMA_FROM_DEVICE); 416 - if (dma_mapping_error(&pdev->dev, bi->dma)) { 390 + if (dma_mapping_error(rx_ring->dev, bi->dma)) { 417 391 dev_kfree_skb(skb); 418 392 bi->skb = NULL; 419 - dev_err(&pdev->dev, "RX DMA map failed\n"); 393 + dev_err(rx_ring->dev, "Rx DMA map failed\n"); 420 394 break; 421 395 } 422 396 } ··· 420 404 i++; 421 405 if (i == rx_ring->count) 422 406 i = 0; 423 - bi = &rx_ring->rx_buffer_info[i]; 424 407 } 425 408 426 409 no_buffers: 410 + rx_ring->rx_stats.alloc_rx_buff_failed++; 427 411 if (rx_ring->next_to_use != i) 428 412 ixgbevf_release_rx_desc(rx_ring, i); 429 413 } ··· 440 424 struct ixgbevf_ring *rx_ring, 441 425 int budget) 442 426 { 443 - struct ixgbevf_adapter *adapter = q_vector->adapter; 444 - struct pci_dev *pdev = adapter->pdev; 445 427 union ixgbe_adv_rx_desc *rx_desc, *next_rxd; 446 428 struct ixgbevf_rx_buffer *rx_buffer_info, *next_buffer; 447 429 struct sk_buff *skb; ··· 465 451 rx_buffer_info->skb = NULL; 466 452 467 453 if (rx_buffer_info->dma) { 468 - dma_unmap_single(&pdev->dev, rx_buffer_info->dma, 454 + dma_unmap_single(rx_ring->dev, rx_buffer_info->dma, 469 455 rx_ring->rx_buf_len, 470 456 DMA_FROM_DEVICE); 471 457 rx_buffer_info->dma = 0; ··· 485 471 if (!(staterr & IXGBE_RXD_STAT_EOP)) { 486 472 skb->next = next_buffer->skb; 487 473 IXGBE_CB(skb->next)->prev = skb; 488 - adapter->non_eop_descs++; 474 + rx_ring->rx_stats.non_eop_descs++; 489 475 goto next_desc; 490 476 } 491 477 ··· 517 503 * source pruning. 518 504 */ 519 505 if ((skb->pkt_type & (PACKET_BROADCAST | PACKET_MULTICAST)) && 520 - ether_addr_equal(adapter->netdev->dev_addr, 506 + ether_addr_equal(rx_ring->netdev->dev_addr, 521 507 eth_hdr(skb)->h_source)) { 522 508 dev_kfree_skb_irq(skb); 523 509 goto next_desc; ··· 530 516 531 517 /* return some buffers to hardware, one at a time is too slow */ 532 518 if (cleaned_count >= IXGBEVF_RX_BUFFER_WRITE) { 533 - ixgbevf_alloc_rx_buffers(adapter, rx_ring, 534 - cleaned_count); 519 + ixgbevf_alloc_rx_buffers(rx_ring, cleaned_count); 535 520 cleaned_count = 0; 536 521 } 537 522 ··· 545 532 cleaned_count = ixgbevf_desc_unused(rx_ring); 546 533 547 534 if (cleaned_count) 548 - ixgbevf_alloc_rx_buffers(adapter, rx_ring, cleaned_count); 535 + ixgbevf_alloc_rx_buffers(rx_ring, cleaned_count); 549 536 550 537 u64_stats_update_begin(&rx_ring->syncp); 551 - rx_ring->total_packets += total_rx_packets; 552 - rx_ring->total_bytes += total_rx_bytes; 538 + rx_ring->stats.packets += total_rx_packets; 539 + rx_ring->stats.bytes += total_rx_bytes; 553 540 u64_stats_update_end(&rx_ring->syncp); 554 541 q_vector->rx.total_packets += total_rx_packets; 555 542 q_vector->rx.total_bytes += total_rx_bytes; ··· 654 641 found = ixgbevf_clean_rx_irq(q_vector, ring, 4); 655 642 #ifdef BP_EXTENDED_STATS 656 643 if (found) 657 - ring->bp_cleaned += found; 644 + ring->stats.cleaned += found; 658 645 else 659 - ring->bp_misses++; 646 + ring->stats.misses++; 660 647 #endif 661 648 if (found) 662 649 break; ··· 1330 1317 IXGBE_WRITE_REG(hw, IXGBE_VFRXDCTL(reg_idx), rxdctl); 1331 1318 1332 1319 ixgbevf_rx_desc_queue_enable(adapter, ring); 1333 - ixgbevf_alloc_rx_buffers(adapter, ring, ixgbevf_desc_unused(ring)); 1320 + ixgbevf_alloc_rx_buffers(ring, ixgbevf_desc_unused(ring)); 1334 1321 } 1335 1322 1336 1323 /** ··· 1646 1633 1647 1634 /** 1648 1635 * ixgbevf_clean_rx_ring - Free Rx Buffers per Queue 1649 - * @adapter: board private structure 1650 1636 * @rx_ring: ring to free buffers from 1651 1637 **/ 1652 - static void ixgbevf_clean_rx_ring(struct ixgbevf_adapter *adapter, 1653 - struct ixgbevf_ring *rx_ring) 1638 + static void ixgbevf_clean_rx_ring(struct ixgbevf_ring *rx_ring) 1654 1639 { 1655 - struct pci_dev *pdev = adapter->pdev; 1656 1640 unsigned long size; 1657 1641 unsigned int i; 1658 1642 ··· 1662 1652 1663 1653 rx_buffer_info = &rx_ring->rx_buffer_info[i]; 1664 1654 if (rx_buffer_info->dma) { 1665 - dma_unmap_single(&pdev->dev, rx_buffer_info->dma, 1655 + dma_unmap_single(rx_ring->dev, rx_buffer_info->dma, 1666 1656 rx_ring->rx_buf_len, 1667 1657 DMA_FROM_DEVICE); 1668 1658 rx_buffer_info->dma = 0; ··· 1687 1677 1688 1678 /** 1689 1679 * ixgbevf_clean_tx_ring - Free Tx Buffers 1690 - * @adapter: board private structure 1691 1680 * @tx_ring: ring to be cleaned 1692 1681 **/ 1693 - static void ixgbevf_clean_tx_ring(struct ixgbevf_adapter *adapter, 1694 - struct ixgbevf_ring *tx_ring) 1682 + static void ixgbevf_clean_tx_ring(struct ixgbevf_ring *tx_ring) 1695 1683 { 1696 1684 struct ixgbevf_tx_buffer *tx_buffer_info; 1697 1685 unsigned long size; ··· 1719 1711 int i; 1720 1712 1721 1713 for (i = 0; i < adapter->num_rx_queues; i++) 1722 - ixgbevf_clean_rx_ring(adapter, adapter->rx_ring[i]); 1714 + ixgbevf_clean_rx_ring(adapter->rx_ring[i]); 1723 1715 } 1724 1716 1725 1717 /** ··· 1731 1723 int i; 1732 1724 1733 1725 for (i = 0; i < adapter->num_tx_queues; i++) 1734 - ixgbevf_clean_tx_ring(adapter, adapter->tx_ring[i]); 1726 + ixgbevf_clean_tx_ring(adapter->tx_ring[i]); 1735 1727 } 1736 1728 1737 1729 void ixgbevf_down(struct ixgbevf_adapter *adapter) ··· 2283 2275 for (i = 0; i < adapter->num_rx_queues; i++) { 2284 2276 adapter->hw_csum_rx_error += 2285 2277 adapter->rx_ring[i]->hw_csum_rx_error; 2286 - adapter->hw_csum_rx_good += 2287 - adapter->rx_ring[i]->hw_csum_rx_good; 2288 2278 adapter->rx_ring[i]->hw_csum_rx_error = 0; 2289 - adapter->rx_ring[i]->hw_csum_rx_good = 0; 2290 2279 } 2291 2280 } 2292 2281 ··· 2431 2426 2432 2427 /** 2433 2428 * ixgbevf_free_tx_resources - Free Tx Resources per Queue 2434 - * @adapter: board private structure 2435 2429 * @tx_ring: Tx descriptor ring for a specific queue 2436 2430 * 2437 2431 * Free all transmit software resources 2438 2432 **/ 2439 - void ixgbevf_free_tx_resources(struct ixgbevf_adapter *adapter, 2440 - struct ixgbevf_ring *tx_ring) 2433 + void ixgbevf_free_tx_resources(struct ixgbevf_ring *tx_ring) 2441 2434 { 2442 - struct pci_dev *pdev = adapter->pdev; 2443 - 2444 - ixgbevf_clean_tx_ring(adapter, tx_ring); 2435 + ixgbevf_clean_tx_ring(tx_ring); 2445 2436 2446 2437 vfree(tx_ring->tx_buffer_info); 2447 2438 tx_ring->tx_buffer_info = NULL; ··· 2446 2445 if (!tx_ring->desc) 2447 2446 return; 2448 2447 2449 - dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc, 2448 + dma_free_coherent(tx_ring->dev, tx_ring->size, tx_ring->desc, 2450 2449 tx_ring->dma); 2451 2450 2452 2451 tx_ring->desc = NULL; ··· 2464 2463 2465 2464 for (i = 0; i < adapter->num_tx_queues; i++) 2466 2465 if (adapter->tx_ring[i]->desc) 2467 - ixgbevf_free_tx_resources(adapter, adapter->tx_ring[i]); 2466 + ixgbevf_free_tx_resources(adapter->tx_ring[i]); 2468 2467 } 2469 2468 2470 2469 /** 2471 2470 * ixgbevf_setup_tx_resources - allocate Tx resources (Descriptors) 2472 - * @adapter: board private structure 2473 2471 * @tx_ring: tx descriptor ring (for a specific queue) to setup 2474 2472 * 2475 2473 * Return 0 on success, negative on failure 2476 2474 **/ 2477 - int ixgbevf_setup_tx_resources(struct ixgbevf_adapter *adapter, 2478 - struct ixgbevf_ring *tx_ring) 2475 + int ixgbevf_setup_tx_resources(struct ixgbevf_ring *tx_ring) 2479 2476 { 2480 - struct pci_dev *pdev = adapter->pdev; 2481 2477 int size; 2482 2478 2483 2479 size = sizeof(struct ixgbevf_tx_buffer) * tx_ring->count; ··· 2486 2488 tx_ring->size = tx_ring->count * sizeof(union ixgbe_adv_tx_desc); 2487 2489 tx_ring->size = ALIGN(tx_ring->size, 4096); 2488 2490 2489 - tx_ring->desc = dma_alloc_coherent(&pdev->dev, tx_ring->size, 2491 + tx_ring->desc = dma_alloc_coherent(tx_ring->dev, tx_ring->size, 2490 2492 &tx_ring->dma, GFP_KERNEL); 2491 2493 if (!tx_ring->desc) 2492 2494 goto err; ··· 2516 2518 int i, err = 0; 2517 2519 2518 2520 for (i = 0; i < adapter->num_tx_queues; i++) { 2519 - err = ixgbevf_setup_tx_resources(adapter, adapter->tx_ring[i]); 2521 + err = ixgbevf_setup_tx_resources(adapter->tx_ring[i]); 2520 2522 if (!err) 2521 2523 continue; 2522 2524 hw_dbg(&adapter->hw, ··· 2529 2531 2530 2532 /** 2531 2533 * ixgbevf_setup_rx_resources - allocate Rx resources (Descriptors) 2532 - * @adapter: board private structure 2533 2534 * @rx_ring: rx descriptor ring (for a specific queue) to setup 2534 2535 * 2535 2536 * Returns 0 on success, negative on failure 2536 2537 **/ 2537 - int ixgbevf_setup_rx_resources(struct ixgbevf_adapter *adapter, 2538 - struct ixgbevf_ring *rx_ring) 2538 + int ixgbevf_setup_rx_resources(struct ixgbevf_ring *rx_ring) 2539 2539 { 2540 - struct pci_dev *pdev = adapter->pdev; 2541 2540 int size; 2542 2541 2543 2542 size = sizeof(struct ixgbevf_rx_buffer) * rx_ring->count; 2544 2543 rx_ring->rx_buffer_info = vzalloc(size); 2545 2544 if (!rx_ring->rx_buffer_info) 2546 - goto alloc_failed; 2545 + goto err; 2547 2546 2548 2547 /* Round up to nearest 4K */ 2549 2548 rx_ring->size = rx_ring->count * sizeof(union ixgbe_adv_rx_desc); 2550 2549 rx_ring->size = ALIGN(rx_ring->size, 4096); 2551 2550 2552 - rx_ring->desc = dma_alloc_coherent(&pdev->dev, rx_ring->size, 2551 + rx_ring->desc = dma_alloc_coherent(rx_ring->dev, rx_ring->size, 2553 2552 &rx_ring->dma, GFP_KERNEL); 2554 2553 2555 - if (!rx_ring->desc) { 2556 - vfree(rx_ring->rx_buffer_info); 2557 - rx_ring->rx_buffer_info = NULL; 2558 - goto alloc_failed; 2559 - } 2554 + if (!rx_ring->desc) 2555 + goto err; 2560 2556 2561 2557 return 0; 2562 - alloc_failed: 2558 + err: 2559 + vfree(rx_ring->rx_buffer_info); 2560 + rx_ring->rx_buffer_info = NULL; 2561 + dev_err(rx_ring->dev, "Unable to allocate memory for the Rx descriptor ring\n"); 2563 2562 return -ENOMEM; 2564 2563 } 2565 2564 ··· 2575 2580 int i, err = 0; 2576 2581 2577 2582 for (i = 0; i < adapter->num_rx_queues; i++) { 2578 - err = ixgbevf_setup_rx_resources(adapter, adapter->rx_ring[i]); 2583 + err = ixgbevf_setup_rx_resources(adapter->rx_ring[i]); 2579 2584 if (!err) 2580 2585 continue; 2581 2586 hw_dbg(&adapter->hw, ··· 2587 2592 2588 2593 /** 2589 2594 * ixgbevf_free_rx_resources - Free Rx Resources 2590 - * @adapter: board private structure 2591 2595 * @rx_ring: ring to clean the resources from 2592 2596 * 2593 2597 * Free all receive software resources 2594 2598 **/ 2595 - void ixgbevf_free_rx_resources(struct ixgbevf_adapter *adapter, 2596 - struct ixgbevf_ring *rx_ring) 2599 + void ixgbevf_free_rx_resources(struct ixgbevf_ring *rx_ring) 2597 2600 { 2598 - struct pci_dev *pdev = adapter->pdev; 2599 - 2600 - ixgbevf_clean_rx_ring(adapter, rx_ring); 2601 + ixgbevf_clean_rx_ring(rx_ring); 2601 2602 2602 2603 vfree(rx_ring->rx_buffer_info); 2603 2604 rx_ring->rx_buffer_info = NULL; 2604 2605 2605 - dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc, 2606 + dma_free_coherent(rx_ring->dev, rx_ring->size, rx_ring->desc, 2606 2607 rx_ring->dma); 2607 2608 2608 2609 rx_ring->desc = NULL; ··· 2616 2625 2617 2626 for (i = 0; i < adapter->num_rx_queues; i++) 2618 2627 if (adapter->rx_ring[i]->desc) 2619 - ixgbevf_free_rx_resources(adapter, adapter->rx_ring[i]); 2628 + ixgbevf_free_rx_resources(adapter->rx_ring[i]); 2620 2629 } 2621 2630 2622 2631 /** ··· 2780 2789 } 2781 2790 2782 2791 static int ixgbevf_tso(struct ixgbevf_ring *tx_ring, 2783 - struct sk_buff *skb, u32 tx_flags, u8 *hdr_len) 2792 + struct ixgbevf_tx_buffer *first, 2793 + u8 *hdr_len) 2784 2794 { 2795 + struct sk_buff *skb = first->skb; 2785 2796 u32 vlan_macip_lens, type_tucmd; 2786 2797 u32 mss_l4len_idx, l4len; 2787 2798 ··· 2808 2815 IPPROTO_TCP, 2809 2816 0); 2810 2817 type_tucmd |= IXGBE_ADVTXD_TUCMD_IPV4; 2818 + first->tx_flags |= IXGBE_TX_FLAGS_TSO | 2819 + IXGBE_TX_FLAGS_CSUM | 2820 + IXGBE_TX_FLAGS_IPV4; 2811 2821 } else if (skb_is_gso_v6(skb)) { 2812 2822 ipv6_hdr(skb)->payload_len = 0; 2813 2823 tcp_hdr(skb)->check = 2814 2824 ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, 2815 2825 &ipv6_hdr(skb)->daddr, 2816 2826 0, IPPROTO_TCP, 0); 2827 + first->tx_flags |= IXGBE_TX_FLAGS_TSO | 2828 + IXGBE_TX_FLAGS_CSUM; 2817 2829 } 2818 2830 2819 2831 /* compute header lengths */ 2820 2832 l4len = tcp_hdrlen(skb); 2821 2833 *hdr_len += l4len; 2822 2834 *hdr_len = skb_transport_offset(skb) + l4len; 2835 + 2836 + /* update gso size and bytecount with header size */ 2837 + first->gso_segs = skb_shinfo(skb)->gso_segs; 2838 + first->bytecount += (first->gso_segs - 1) * *hdr_len; 2823 2839 2824 2840 /* mss_l4len_id: use 1 as index for TSO */ 2825 2841 mss_l4len_idx = l4len << IXGBE_ADVTXD_L4LEN_SHIFT; ··· 2838 2836 /* vlan_macip_lens: HEADLEN, MACLEN, VLAN tag */ 2839 2837 vlan_macip_lens = skb_network_header_len(skb); 2840 2838 vlan_macip_lens |= skb_network_offset(skb) << IXGBE_ADVTXD_MACLEN_SHIFT; 2841 - vlan_macip_lens |= tx_flags & IXGBE_TX_FLAGS_VLAN_MASK; 2839 + vlan_macip_lens |= first->tx_flags & IXGBE_TX_FLAGS_VLAN_MASK; 2842 2840 2843 2841 ixgbevf_tx_ctxtdesc(tx_ring, vlan_macip_lens, 2844 2842 type_tucmd, mss_l4len_idx); ··· 2846 2844 return 1; 2847 2845 } 2848 2846 2849 - static bool ixgbevf_tx_csum(struct ixgbevf_ring *tx_ring, 2850 - struct sk_buff *skb, u32 tx_flags) 2847 + static void ixgbevf_tx_csum(struct ixgbevf_ring *tx_ring, 2848 + struct ixgbevf_tx_buffer *first) 2851 2849 { 2850 + struct sk_buff *skb = first->skb; 2852 2851 u32 vlan_macip_lens = 0; 2853 2852 u32 mss_l4len_idx = 0; 2854 2853 u32 type_tucmd = 0; ··· 2870 2867 if (unlikely(net_ratelimit())) { 2871 2868 dev_warn(tx_ring->dev, 2872 2869 "partial checksum but proto=%x!\n", 2873 - skb->protocol); 2870 + first->protocol); 2874 2871 } 2875 2872 break; 2876 2873 } ··· 2898 2895 } 2899 2896 break; 2900 2897 } 2898 + 2899 + /* update TX checksum flag */ 2900 + first->tx_flags |= IXGBE_TX_FLAGS_CSUM; 2901 2901 } 2902 2902 2903 2903 /* vlan_macip_lens: MACLEN, VLAN tag */ 2904 2904 vlan_macip_lens |= skb_network_offset(skb) << IXGBE_ADVTXD_MACLEN_SHIFT; 2905 - vlan_macip_lens |= tx_flags & IXGBE_TX_FLAGS_VLAN_MASK; 2905 + vlan_macip_lens |= first->tx_flags & IXGBE_TX_FLAGS_VLAN_MASK; 2906 2906 2907 2907 ixgbevf_tx_ctxtdesc(tx_ring, vlan_macip_lens, 2908 2908 type_tucmd, mss_l4len_idx); 2909 - 2910 - return (skb->ip_summed == CHECKSUM_PARTIAL); 2911 2909 } 2912 2910 2913 - static int ixgbevf_tx_map(struct ixgbevf_ring *tx_ring, 2914 - struct sk_buff *skb, u32 tx_flags) 2911 + static __le32 ixgbevf_tx_cmd_type(u32 tx_flags) 2915 2912 { 2916 - struct ixgbevf_tx_buffer *tx_buffer_info; 2917 - unsigned int len; 2918 - unsigned int total = skb->len; 2919 - unsigned int offset = 0, size; 2920 - int count = 0; 2921 - unsigned int nr_frags = skb_shinfo(skb)->nr_frags; 2922 - unsigned int f; 2923 - int i; 2913 + /* set type for advanced descriptor with frame checksum insertion */ 2914 + __le32 cmd_type = cpu_to_le32(IXGBE_ADVTXD_DTYP_DATA | 2915 + IXGBE_ADVTXD_DCMD_IFCS | 2916 + IXGBE_ADVTXD_DCMD_DEXT); 2924 2917 2925 - i = tx_ring->next_to_use; 2926 - 2927 - len = min(skb_headlen(skb), total); 2928 - while (len) { 2929 - tx_buffer_info = &tx_ring->tx_buffer_info[i]; 2930 - size = min(len, (unsigned int)IXGBE_MAX_DATA_PER_TXD); 2931 - 2932 - tx_buffer_info->length = size; 2933 - tx_buffer_info->mapped_as_page = false; 2934 - tx_buffer_info->dma = dma_map_single(tx_ring->dev, 2935 - skb->data + offset, 2936 - size, DMA_TO_DEVICE); 2937 - if (dma_mapping_error(tx_ring->dev, tx_buffer_info->dma)) 2938 - goto dma_error; 2939 - 2940 - len -= size; 2941 - total -= size; 2942 - offset += size; 2943 - count++; 2944 - i++; 2945 - if (i == tx_ring->count) 2946 - i = 0; 2947 - } 2948 - 2949 - for (f = 0; f < nr_frags; f++) { 2950 - const struct skb_frag_struct *frag; 2951 - 2952 - frag = &skb_shinfo(skb)->frags[f]; 2953 - len = min((unsigned int)skb_frag_size(frag), total); 2954 - offset = 0; 2955 - 2956 - while (len) { 2957 - tx_buffer_info = &tx_ring->tx_buffer_info[i]; 2958 - size = min(len, (unsigned int)IXGBE_MAX_DATA_PER_TXD); 2959 - 2960 - tx_buffer_info->length = size; 2961 - tx_buffer_info->dma = 2962 - skb_frag_dma_map(tx_ring->dev, frag, 2963 - offset, size, DMA_TO_DEVICE); 2964 - if (dma_mapping_error(tx_ring->dev, 2965 - tx_buffer_info->dma)) 2966 - goto dma_error; 2967 - tx_buffer_info->mapped_as_page = true; 2968 - 2969 - len -= size; 2970 - total -= size; 2971 - offset += size; 2972 - count++; 2973 - i++; 2974 - if (i == tx_ring->count) 2975 - i = 0; 2976 - } 2977 - if (total == 0) 2978 - break; 2979 - } 2980 - 2981 - if (i == 0) 2982 - i = tx_ring->count - 1; 2983 - else 2984 - i = i - 1; 2985 - tx_ring->tx_buffer_info[i].skb = skb; 2986 - 2987 - return count; 2988 - 2989 - dma_error: 2990 - dev_err(tx_ring->dev, "TX DMA map failed\n"); 2991 - 2992 - /* clear timestamp and dma mappings for failed tx_buffer_info map */ 2993 - tx_buffer_info->dma = 0; 2994 - count--; 2995 - 2996 - /* clear timestamp and dma mappings for remaining portion of packet */ 2997 - while (count >= 0) { 2998 - count--; 2999 - i--; 3000 - if (i < 0) 3001 - i += tx_ring->count; 3002 - tx_buffer_info = &tx_ring->tx_buffer_info[i]; 3003 - ixgbevf_unmap_and_free_tx_resource(tx_ring, tx_buffer_info); 3004 - } 3005 - 3006 - return count; 3007 - } 3008 - 3009 - static void ixgbevf_tx_queue(struct ixgbevf_ring *tx_ring, int tx_flags, 3010 - int count, unsigned int first, u32 paylen, 3011 - u8 hdr_len) 3012 - { 3013 - union ixgbe_adv_tx_desc *tx_desc = NULL; 3014 - struct ixgbevf_tx_buffer *tx_buffer_info; 3015 - u32 olinfo_status = 0, cmd_type_len = 0; 3016 - unsigned int i; 3017 - 3018 - u32 txd_cmd = IXGBE_TXD_CMD_EOP | IXGBE_TXD_CMD_RS | IXGBE_TXD_CMD_IFCS; 3019 - 3020 - cmd_type_len |= IXGBE_ADVTXD_DTYP_DATA; 3021 - 3022 - cmd_type_len |= IXGBE_ADVTXD_DCMD_IFCS | IXGBE_ADVTXD_DCMD_DEXT; 3023 - 2918 + /* set HW vlan bit if vlan is present */ 3024 2919 if (tx_flags & IXGBE_TX_FLAGS_VLAN) 3025 - cmd_type_len |= IXGBE_ADVTXD_DCMD_VLE; 2920 + cmd_type |= cpu_to_le32(IXGBE_ADVTXD_DCMD_VLE); 3026 2921 2922 + /* set segmentation enable bits for TSO/FSO */ 2923 + if (tx_flags & IXGBE_TX_FLAGS_TSO) 2924 + cmd_type |= cpu_to_le32(IXGBE_ADVTXD_DCMD_TSE); 2925 + 2926 + return cmd_type; 2927 + } 2928 + 2929 + static void ixgbevf_tx_olinfo_status(union ixgbe_adv_tx_desc *tx_desc, 2930 + u32 tx_flags, unsigned int paylen) 2931 + { 2932 + __le32 olinfo_status = cpu_to_le32(paylen << IXGBE_ADVTXD_PAYLEN_SHIFT); 2933 + 2934 + /* enable L4 checksum for TSO and TX checksum offload */ 3027 2935 if (tx_flags & IXGBE_TX_FLAGS_CSUM) 3028 - olinfo_status |= IXGBE_ADVTXD_POPTS_TXSM; 2936 + olinfo_status |= cpu_to_le32(IXGBE_ADVTXD_POPTS_TXSM); 3029 2937 3030 - if (tx_flags & IXGBE_TX_FLAGS_TSO) { 3031 - cmd_type_len |= IXGBE_ADVTXD_DCMD_TSE; 2938 + /* enble IPv4 checksum for TSO */ 2939 + if (tx_flags & IXGBE_TX_FLAGS_IPV4) 2940 + olinfo_status |= cpu_to_le32(IXGBE_ADVTXD_POPTS_IXSM); 3032 2941 3033 - /* use index 1 context for tso */ 3034 - olinfo_status |= (1 << IXGBE_ADVTXD_IDX_SHIFT); 3035 - if (tx_flags & IXGBE_TX_FLAGS_IPV4) 3036 - olinfo_status |= IXGBE_ADVTXD_POPTS_IXSM; 3037 - } 2942 + /* use index 1 context for TSO/FSO/FCOE */ 2943 + if (tx_flags & IXGBE_TX_FLAGS_TSO) 2944 + olinfo_status |= cpu_to_le32(1 << IXGBE_ADVTXD_IDX_SHIFT); 3038 2945 3039 - /* 3040 - * Check Context must be set if Tx switch is enabled, which it 2946 + /* Check Context must be set if Tx switch is enabled, which it 3041 2947 * always is for case where virtual functions are running 3042 2948 */ 3043 - olinfo_status |= IXGBE_ADVTXD_CC; 2949 + olinfo_status |= cpu_to_le32(IXGBE_ADVTXD_CC); 3044 2950 3045 - olinfo_status |= ((paylen - hdr_len) << IXGBE_ADVTXD_PAYLEN_SHIFT); 2951 + tx_desc->read.olinfo_status = olinfo_status; 2952 + } 3046 2953 3047 - i = tx_ring->next_to_use; 3048 - while (count--) { 3049 - tx_buffer_info = &tx_ring->tx_buffer_info[i]; 3050 - tx_desc = IXGBEVF_TX_DESC(tx_ring, i); 3051 - tx_desc->read.buffer_addr = cpu_to_le64(tx_buffer_info->dma); 3052 - tx_desc->read.cmd_type_len = 3053 - cpu_to_le32(cmd_type_len | tx_buffer_info->length); 3054 - tx_desc->read.olinfo_status = cpu_to_le32(olinfo_status); 2954 + static void ixgbevf_tx_map(struct ixgbevf_ring *tx_ring, 2955 + struct ixgbevf_tx_buffer *first, 2956 + const u8 hdr_len) 2957 + { 2958 + dma_addr_t dma; 2959 + struct sk_buff *skb = first->skb; 2960 + struct ixgbevf_tx_buffer *tx_buffer; 2961 + union ixgbe_adv_tx_desc *tx_desc; 2962 + struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[0]; 2963 + unsigned int data_len = skb->data_len; 2964 + unsigned int size = skb_headlen(skb); 2965 + unsigned int paylen = skb->len - hdr_len; 2966 + u32 tx_flags = first->tx_flags; 2967 + __le32 cmd_type; 2968 + u16 i = tx_ring->next_to_use; 2969 + 2970 + tx_desc = IXGBEVF_TX_DESC(tx_ring, i); 2971 + 2972 + ixgbevf_tx_olinfo_status(tx_desc, tx_flags, paylen); 2973 + cmd_type = ixgbevf_tx_cmd_type(tx_flags); 2974 + 2975 + dma = dma_map_single(tx_ring->dev, skb->data, size, DMA_TO_DEVICE); 2976 + if (dma_mapping_error(tx_ring->dev, dma)) 2977 + goto dma_error; 2978 + 2979 + /* record length, and DMA address */ 2980 + dma_unmap_len_set(first, len, size); 2981 + dma_unmap_addr_set(first, dma, dma); 2982 + 2983 + tx_desc->read.buffer_addr = cpu_to_le64(dma); 2984 + 2985 + for (;;) { 2986 + while (unlikely(size > IXGBE_MAX_DATA_PER_TXD)) { 2987 + tx_desc->read.cmd_type_len = 2988 + cmd_type | cpu_to_le32(IXGBE_MAX_DATA_PER_TXD); 2989 + 2990 + i++; 2991 + tx_desc++; 2992 + if (i == tx_ring->count) { 2993 + tx_desc = IXGBEVF_TX_DESC(tx_ring, 0); 2994 + i = 0; 2995 + } 2996 + 2997 + dma += IXGBE_MAX_DATA_PER_TXD; 2998 + size -= IXGBE_MAX_DATA_PER_TXD; 2999 + 3000 + tx_desc->read.buffer_addr = cpu_to_le64(dma); 3001 + tx_desc->read.olinfo_status = 0; 3002 + } 3003 + 3004 + if (likely(!data_len)) 3005 + break; 3006 + 3007 + tx_desc->read.cmd_type_len = cmd_type | cpu_to_le32(size); 3008 + 3055 3009 i++; 3056 - if (i == tx_ring->count) 3010 + tx_desc++; 3011 + if (i == tx_ring->count) { 3012 + tx_desc = IXGBEVF_TX_DESC(tx_ring, 0); 3057 3013 i = 0; 3014 + } 3015 + 3016 + size = skb_frag_size(frag); 3017 + data_len -= size; 3018 + 3019 + dma = skb_frag_dma_map(tx_ring->dev, frag, 0, size, 3020 + DMA_TO_DEVICE); 3021 + if (dma_mapping_error(tx_ring->dev, dma)) 3022 + goto dma_error; 3023 + 3024 + tx_buffer = &tx_ring->tx_buffer_info[i]; 3025 + dma_unmap_len_set(tx_buffer, len, size); 3026 + dma_unmap_addr_set(tx_buffer, dma, dma); 3027 + 3028 + tx_desc->read.buffer_addr = cpu_to_le64(dma); 3029 + tx_desc->read.olinfo_status = 0; 3030 + 3031 + frag++; 3058 3032 } 3059 3033 3060 - tx_desc->read.cmd_type_len |= cpu_to_le32(txd_cmd); 3034 + /* write last descriptor with RS and EOP bits */ 3035 + cmd_type |= cpu_to_le32(size) | cpu_to_le32(IXGBE_TXD_CMD); 3036 + tx_desc->read.cmd_type_len = cmd_type; 3061 3037 3062 - tx_ring->tx_buffer_info[first].time_stamp = jiffies; 3038 + /* set the timestamp */ 3039 + first->time_stamp = jiffies; 3063 3040 3064 - /* Force memory writes to complete before letting h/w 3065 - * know there are new descriptors to fetch. (Only 3066 - * applicable for weak-ordered memory model archs, 3067 - * such as IA-64). 3041 + /* Force memory writes to complete before letting h/w know there 3042 + * are new descriptors to fetch. (Only applicable for weak-ordered 3043 + * memory model archs, such as IA-64). 3044 + * 3045 + * We also need this memory barrier (wmb) to make certain all of the 3046 + * status bits have been updated before next_to_watch is written. 3068 3047 */ 3069 3048 wmb(); 3070 3049 3071 - tx_ring->tx_buffer_info[first].next_to_watch = tx_desc; 3050 + /* set next_to_watch value indicating a packet is present */ 3051 + first->next_to_watch = tx_desc; 3052 + 3053 + i++; 3054 + if (i == tx_ring->count) 3055 + i = 0; 3056 + 3057 + tx_ring->next_to_use = i; 3058 + 3059 + /* notify HW of packet */ 3060 + writel(i, tx_ring->tail); 3061 + 3062 + return; 3063 + dma_error: 3064 + dev_err(tx_ring->dev, "TX DMA map failed\n"); 3065 + 3066 + /* clear dma mappings for failed tx_buffer_info map */ 3067 + for (;;) { 3068 + tx_buffer = &tx_ring->tx_buffer_info[i]; 3069 + ixgbevf_unmap_and_free_tx_resource(tx_ring, tx_buffer); 3070 + if (tx_buffer == first) 3071 + break; 3072 + if (i == 0) 3073 + i = tx_ring->count; 3074 + i--; 3075 + } 3076 + 3072 3077 tx_ring->next_to_use = i; 3073 3078 } 3074 3079 3075 3080 static int __ixgbevf_maybe_stop_tx(struct ixgbevf_ring *tx_ring, int size) 3076 3081 { 3077 - struct ixgbevf_adapter *adapter = netdev_priv(tx_ring->netdev); 3078 - 3079 3082 netif_stop_subqueue(tx_ring->netdev, tx_ring->queue_index); 3080 3083 /* Herbert's original patch had: 3081 3084 * smp_mb__after_netif_stop_queue(); ··· 3095 3086 3096 3087 /* A reprieve! - use start_queue because it doesn't call schedule */ 3097 3088 netif_start_subqueue(tx_ring->netdev, tx_ring->queue_index); 3098 - ++adapter->restart_queue; 3089 + ++tx_ring->tx_stats.restart_queue; 3090 + 3099 3091 return 0; 3100 3092 } 3101 3093 ··· 3110 3100 static int ixgbevf_xmit_frame(struct sk_buff *skb, struct net_device *netdev) 3111 3101 { 3112 3102 struct ixgbevf_adapter *adapter = netdev_priv(netdev); 3103 + struct ixgbevf_tx_buffer *first; 3113 3104 struct ixgbevf_ring *tx_ring; 3114 - unsigned int first; 3115 - unsigned int tx_flags = 0; 3116 - u8 hdr_len = 0; 3117 - int r_idx = 0, tso; 3105 + int tso; 3106 + u32 tx_flags = 0; 3118 3107 u16 count = TXD_USE_COUNT(skb_headlen(skb)); 3119 3108 #if PAGE_SIZE > IXGBE_MAX_DATA_PER_TXD 3120 3109 unsigned short f; 3121 3110 #endif 3111 + u8 hdr_len = 0; 3122 3112 u8 *dst_mac = skb_header_pointer(skb, 0, 0, NULL); 3113 + 3123 3114 if (!dst_mac || is_link_local_ether_addr(dst_mac)) { 3124 3115 dev_kfree_skb(skb); 3125 3116 return NETDEV_TX_OK; 3126 3117 } 3127 3118 3128 - tx_ring = adapter->tx_ring[r_idx]; 3119 + tx_ring = adapter->tx_ring[skb->queue_mapping]; 3129 3120 3130 3121 /* 3131 3122 * need: 1 descriptor per page * PAGE_SIZE/IXGBE_MAX_DATA_PER_TXD, ··· 3142 3131 count += skb_shinfo(skb)->nr_frags; 3143 3132 #endif 3144 3133 if (ixgbevf_maybe_stop_tx(tx_ring, count + 3)) { 3145 - adapter->tx_busy++; 3134 + tx_ring->tx_stats.tx_busy++; 3146 3135 return NETDEV_TX_BUSY; 3147 3136 } 3137 + 3138 + /* record the location of the first descriptor for this packet */ 3139 + first = &tx_ring->tx_buffer_info[tx_ring->next_to_use]; 3140 + first->skb = skb; 3141 + first->bytecount = skb->len; 3142 + first->gso_segs = 1; 3148 3143 3149 3144 if (vlan_tx_tag_present(skb)) { 3150 3145 tx_flags |= vlan_tx_tag_get(skb); ··· 3158 3141 tx_flags |= IXGBE_TX_FLAGS_VLAN; 3159 3142 } 3160 3143 3161 - first = tx_ring->next_to_use; 3144 + /* record initial flags and protocol */ 3145 + first->tx_flags = tx_flags; 3146 + first->protocol = vlan_get_protocol(skb); 3162 3147 3163 - if (skb->protocol == htons(ETH_P_IP)) 3164 - tx_flags |= IXGBE_TX_FLAGS_IPV4; 3165 - tso = ixgbevf_tso(tx_ring, skb, tx_flags, &hdr_len); 3166 - if (tso < 0) { 3167 - dev_kfree_skb_any(skb); 3168 - return NETDEV_TX_OK; 3169 - } 3148 + tso = ixgbevf_tso(tx_ring, first, &hdr_len); 3149 + if (tso < 0) 3150 + goto out_drop; 3151 + else 3152 + ixgbevf_tx_csum(tx_ring, first); 3170 3153 3171 - if (tso) 3172 - tx_flags |= IXGBE_TX_FLAGS_TSO | IXGBE_TX_FLAGS_CSUM; 3173 - else if (ixgbevf_tx_csum(tx_ring, skb, tx_flags)) 3174 - tx_flags |= IXGBE_TX_FLAGS_CSUM; 3175 - 3176 - ixgbevf_tx_queue(tx_ring, tx_flags, 3177 - ixgbevf_tx_map(tx_ring, skb, tx_flags), 3178 - first, skb->len, hdr_len); 3179 - 3180 - writel(tx_ring->next_to_use, tx_ring->tail); 3154 + ixgbevf_tx_map(tx_ring, first, hdr_len); 3181 3155 3182 3156 ixgbevf_maybe_stop_tx(tx_ring, DESC_NEEDED); 3157 + 3158 + return NETDEV_TX_OK; 3159 + 3160 + out_drop: 3161 + dev_kfree_skb_any(first->skb); 3162 + first->skb = NULL; 3183 3163 3184 3164 return NETDEV_TX_OK; 3185 3165 } ··· 3345 3331 ring = adapter->rx_ring[i]; 3346 3332 do { 3347 3333 start = u64_stats_fetch_begin_bh(&ring->syncp); 3348 - bytes = ring->total_bytes; 3349 - packets = ring->total_packets; 3334 + bytes = ring->stats.bytes; 3335 + packets = ring->stats.packets; 3350 3336 } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); 3351 3337 stats->rx_bytes += bytes; 3352 3338 stats->rx_packets += packets; ··· 3356 3342 ring = adapter->tx_ring[i]; 3357 3343 do { 3358 3344 start = u64_stats_fetch_begin_bh(&ring->syncp); 3359 - bytes = ring->total_bytes; 3360 - packets = ring->total_packets; 3345 + bytes = ring->stats.bytes; 3346 + packets = ring->stats.packets; 3361 3347 } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); 3362 3348 stats->tx_bytes += bytes; 3363 3349 stats->tx_packets += packets;