12
12
#include "ionic_lif.h"
13
13
#include "ionic_txrx.h"
14
14
15
- static dma_addr_t ionic_tx_map_single (struct ionic_queue * q ,
16
- void * data , size_t len );
17
15
18
- static dma_addr_t ionic_tx_map_frag (struct ionic_queue * q ,
19
- const skb_frag_t * frag ,
20
- size_t offset , size_t len );
21
16
22
17
static void ionic_tx_desc_unmap_bufs (struct ionic_queue * q ,
23
18
struct ionic_tx_desc_info * desc_info );
@@ -320,9 +315,9 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame,
320
315
dma_sync_single_for_device (q -> dev , dma_addr ,
321
316
len , DMA_TO_DEVICE );
322
317
} else /* XDP_REDIRECT */ {
323
- dma_addr = ionic_tx_map_single ( q , frame -> data , len );
324
- if (! dma_addr )
325
- return - EIO ;
318
+ dma_addr = dma_map_single ( q -> dev , frame -> data , len , DMA_TO_DEVICE );
319
+ if (dma_mapping_error ( q -> dev , dma_addr ) )
320
+ goto dma_err ;
326
321
}
327
322
328
323
buf_info -> dma_addr = dma_addr ;
@@ -355,11 +350,12 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame,
355
350
skb_frag_size (frag ),
356
351
DMA_TO_DEVICE );
357
352
} else {
358
- dma_addr = ionic_tx_map_frag (q , frag , 0 ,
359
- skb_frag_size (frag ));
353
+ dma_addr = skb_frag_dma_map (q -> dev , frag , 0 ,
354
+ skb_frag_size (frag ),
355
+ DMA_TO_DEVICE );
360
356
if (dma_mapping_error (q -> dev , dma_addr )) {
361
357
ionic_tx_desc_unmap_bufs (q , desc_info );
362
- return - EIO ;
358
+ goto dma_err ;
363
359
}
364
360
}
365
361
bi -> dma_addr = dma_addr ;
@@ -388,6 +384,12 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame,
388
384
ionic_txq_post (q , ring_doorbell );
389
385
390
386
return 0 ;
387
+
388
+ dma_err :
389
+ net_warn_ratelimited ("%s: DMA map failed on %s!\n" ,
390
+ dev_name (q -> dev ), q -> name );
391
+ q_to_tx_stats (q )-> dma_map_err ++ ;
392
+ return - EIO ;
391
393
}
392
394
393
395
int ionic_xdp_xmit (struct net_device * netdev , int n ,
@@ -1072,38 +1074,6 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget)
1072
1074
return rx_work_done ;
1073
1075
}
1074
1076
1075
- static dma_addr_t ionic_tx_map_single (struct ionic_queue * q ,
1076
- void * data , size_t len )
1077
- {
1078
- struct device * dev = q -> dev ;
1079
- dma_addr_t dma_addr ;
1080
-
1081
- dma_addr = dma_map_single (dev , data , len , DMA_TO_DEVICE );
1082
- if (unlikely (dma_mapping_error (dev , dma_addr ))) {
1083
- net_warn_ratelimited ("%s: DMA single map failed on %s!\n" ,
1084
- dev_name (dev ), q -> name );
1085
- q_to_tx_stats (q )-> dma_map_err ++ ;
1086
- return 0 ;
1087
- }
1088
- return dma_addr ;
1089
- }
1090
-
1091
- static dma_addr_t ionic_tx_map_frag (struct ionic_queue * q ,
1092
- const skb_frag_t * frag ,
1093
- size_t offset , size_t len )
1094
- {
1095
- struct device * dev = q -> dev ;
1096
- dma_addr_t dma_addr ;
1097
-
1098
- dma_addr = skb_frag_dma_map (dev , frag , offset , len , DMA_TO_DEVICE );
1099
- if (unlikely (dma_mapping_error (dev , dma_addr ))) {
1100
- net_warn_ratelimited ("%s: DMA frag map failed on %s!\n" ,
1101
- dev_name (dev ), q -> name );
1102
- q_to_tx_stats (q )-> dma_map_err ++ ;
1103
- return 0 ;
1104
- }
1105
- return dma_addr ;
1106
- }
1107
1077
1108
1078
static int ionic_tx_map_skb (struct ionic_queue * q , struct sk_buff * skb ,
1109
1079
struct ionic_tx_desc_info * desc_info )
@@ -1115,18 +1085,18 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
1115
1085
skb_frag_t * frag ;
1116
1086
int frag_idx ;
1117
1087
1118
- dma_addr = ionic_tx_map_single ( q , skb -> data , skb_headlen (skb ));
1119
- if (! dma_addr )
1120
- return - EIO ;
1088
+ dma_addr = dma_map_single ( q -> dev , skb -> data , skb_headlen (skb ), DMA_TO_DEVICE );
1089
+ if (dma_mapping_error ( q -> dev , dma_addr ) )
1090
+ goto dma_early_fail ;
1121
1091
buf_info -> dma_addr = dma_addr ;
1122
1092
buf_info -> len = skb_headlen (skb );
1123
1093
buf_info ++ ;
1124
1094
1125
1095
frag = skb_shinfo (skb )-> frags ;
1126
1096
nfrags = skb_shinfo (skb )-> nr_frags ;
1127
1097
for (frag_idx = 0 ; frag_idx < nfrags ; frag_idx ++ , frag ++ ) {
1128
- dma_addr = ionic_tx_map_frag ( q , frag , 0 , skb_frag_size (frag ));
1129
- if (! dma_addr )
1098
+ dma_addr = skb_frag_dma_map ( q -> dev , frag , 0 , skb_frag_size (frag ), DMA_TO_DEVICE );
1099
+ if (dma_mapping_error ( q -> dev , dma_addr ) )
1130
1100
goto dma_fail ;
1131
1101
buf_info -> dma_addr = dma_addr ;
1132
1102
buf_info -> len = skb_frag_size (frag );
@@ -1147,6 +1117,10 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
1147
1117
}
1148
1118
dma_unmap_single (dev , desc_info -> bufs [0 ].dma_addr ,
1149
1119
desc_info -> bufs [0 ].len , DMA_TO_DEVICE );
1120
+ dma_early_fail :
1121
+ net_warn_ratelimited ("%s: DMA map failed on %s!\n" ,
1122
+ dev_name (dev ), q -> name );
1123
+ q_to_tx_stats (q )-> dma_map_err ++ ;
1150
1124
return - EIO ;
1151
1125
}
1152
1126
0 commit comments