@@ -2459,6 +2459,10 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb)
2459
2459
skb -> data ,
2460
2460
skb_headlen (skb ),
2461
2461
DMA_TO_DEVICE );
2462
+ if (dma_mapping_error (& adapter -> pdev -> dev ,
2463
+ dma_addr ))
2464
+ return - ENOMEM ;
2465
+
2462
2466
desc [frag ].addr_lo = lower_32_bits (dma_addr );
2463
2467
desc [frag ].addr_hi = upper_32_bits (dma_addr );
2464
2468
frag ++ ;
@@ -2468,6 +2472,10 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb)
2468
2472
skb -> data ,
2469
2473
skb_headlen (skb ) / 2 ,
2470
2474
DMA_TO_DEVICE );
2475
+ if (dma_mapping_error (& adapter -> pdev -> dev ,
2476
+ dma_addr ))
2477
+ return - ENOMEM ;
2478
+
2471
2479
desc [frag ].addr_lo = lower_32_bits (dma_addr );
2472
2480
desc [frag ].addr_hi = upper_32_bits (dma_addr );
2473
2481
frag ++ ;
@@ -2478,6 +2486,10 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb)
2478
2486
skb_headlen (skb ) / 2 ,
2479
2487
skb_headlen (skb ) / 2 ,
2480
2488
DMA_TO_DEVICE );
2489
+ if (dma_mapping_error (& adapter -> pdev -> dev ,
2490
+ dma_addr ))
2491
+ goto unmap_first_out ;
2492
+
2481
2493
desc [frag ].addr_lo = lower_32_bits (dma_addr );
2482
2494
desc [frag ].addr_hi = upper_32_bits (dma_addr );
2483
2495
frag ++ ;
@@ -2489,6 +2501,9 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb)
2489
2501
0 ,
2490
2502
desc [frag ].len_vlan ,
2491
2503
DMA_TO_DEVICE );
2504
+ if (dma_mapping_error (& adapter -> pdev -> dev , dma_addr ))
2505
+ goto unmap_out ;
2506
+
2492
2507
desc [frag ].addr_lo = lower_32_bits (dma_addr );
2493
2508
desc [frag ].addr_hi = upper_32_bits (dma_addr );
2494
2509
frag ++ ;
@@ -2578,6 +2593,27 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb)
2578
2593
& adapter -> regs -> global .watchdog_timer );
2579
2594
}
2580
2595
return 0 ;
2596
+
2597
+ unmap_out :
2598
+ // Unmap the body of the packet with map_page
2599
+ while (-- i ) {
2600
+ frag -- ;
2601
+ dma_addr = desc [frag ].addr_lo ;
2602
+ dma_addr |= (u64 )desc [frag ].addr_hi << 32 ;
2603
+ dma_unmap_page (& adapter -> pdev -> dev , dma_addr ,
2604
+ desc [frag ].len_vlan , DMA_TO_DEVICE );
2605
+ }
2606
+
2607
+ unmap_first_out :
2608
+ // Unmap the header with map_single
2609
+ while (frag -- ) {
2610
+ dma_addr = desc [frag ].addr_lo ;
2611
+ dma_addr |= (u64 )desc [frag ].addr_hi << 32 ;
2612
+ dma_unmap_single (& adapter -> pdev -> dev , dma_addr ,
2613
+ desc [frag ].len_vlan , DMA_TO_DEVICE );
2614
+ }
2615
+
2616
+ return - ENOMEM ;
2581
2617
}
2582
2618
2583
2619
static int send_packet (struct sk_buff * skb , struct et131x_adapter * adapter )
0 commit comments