@@ -129,6 +129,7 @@ static int ionic_rx_page_alloc(struct ionic_queue *q,
129129 struct ionic_buf_info * buf_info )
130130{
131131 struct ionic_rx_stats * stats ;
132+ dma_addr_t dma_addr ;
132133 struct device * dev ;
133134 struct page * page ;
134135
@@ -143,16 +144,17 @@ static int ionic_rx_page_alloc(struct ionic_queue *q,
143144 return - ENOMEM ;
144145 }
145146
146- buf_info -> dma_addr = dma_map_page (dev , page , 0 ,
147- IONIC_PAGE_SIZE , DMA_FROM_DEVICE );
148- if (unlikely (dma_mapping_error (dev , buf_info -> dma_addr ))) {
147+ dma_addr = dma_map_page (dev , page , 0 ,
148+ IONIC_PAGE_SIZE , DMA_FROM_DEVICE );
149+ if (unlikely (dma_mapping_error (dev , dma_addr ))) {
149150 __free_pages (page , 0 );
150151 net_err_ratelimited ("%s: %s dma map failed\n" ,
151152 dev_name (dev ), q -> name );
152153 stats -> dma_map_err ++ ;
153154 return - EIO ;
154155 }
155156
157+ buf_info -> dma_addr = dma_addr ;
156158 buf_info -> page = page ;
157159 buf_info -> page_offset = 0 ;
158160
@@ -371,10 +373,8 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame,
371373 stats = q_to_tx_stats (q );
372374
373375 dma_addr = ionic_tx_map_single (q , frame -> data , len );
374- if (dma_mapping_error (q -> dev , dma_addr )) {
375- stats -> dma_map_err ++ ;
376+ if (!dma_addr )
376377 return - EIO ;
377- }
378378 buf_info -> dma_addr = dma_addr ;
379379 buf_info -> len = len ;
380380 buf_info -> page = page ;
@@ -397,8 +397,7 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame,
397397 elem = ionic_tx_sg_elems (q );
398398 for (i = 0 ; i < sinfo -> nr_frags ; i ++ , frag ++ , bi ++ ) {
399399 dma_addr = ionic_tx_map_frag (q , frag , 0 , skb_frag_size (frag ));
400- if (dma_mapping_error (q -> dev , dma_addr )) {
401- stats -> dma_map_err ++ ;
400+ if (!dma_addr ) {
402401 ionic_tx_desc_unmap_bufs (q , desc_info );
403402 return - EIO ;
404403 }
@@ -1092,6 +1091,7 @@ static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q,
10921091 net_warn_ratelimited ("%s: DMA frag map failed on %s!\n" ,
10931092 dev_name (dev ), q -> name );
10941093 stats -> dma_map_err ++ ;
1094+ return 0 ;
10951095 }
10961096 return dma_addr ;
10971097}
@@ -1100,18 +1100,15 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
11001100 struct ionic_tx_desc_info * desc_info )
11011101{
11021102 struct ionic_buf_info * buf_info = desc_info -> bufs ;
1103- struct ionic_tx_stats * stats = q_to_tx_stats (q );
11041103 struct device * dev = q -> dev ;
11051104 dma_addr_t dma_addr ;
11061105 unsigned int nfrags ;
11071106 skb_frag_t * frag ;
11081107 int frag_idx ;
11091108
11101109 dma_addr = ionic_tx_map_single (q , skb -> data , skb_headlen (skb ));
1111- if (dma_mapping_error (dev , dma_addr )) {
1112- stats -> dma_map_err ++ ;
1110+ if (!dma_addr )
11131111 return - EIO ;
1114- }
11151112 buf_info -> dma_addr = dma_addr ;
11161113 buf_info -> len = skb_headlen (skb );
11171114 buf_info ++ ;
@@ -1120,10 +1117,8 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
11201117 nfrags = skb_shinfo (skb )-> nr_frags ;
11211118 for (frag_idx = 0 ; frag_idx < nfrags ; frag_idx ++ , frag ++ ) {
11221119 dma_addr = ionic_tx_map_frag (q , frag , 0 , skb_frag_size (frag ));
1123- if (dma_mapping_error (dev , dma_addr )) {
1124- stats -> dma_map_err ++ ;
1120+ if (!dma_addr )
11251121 goto dma_fail ;
1126- }
11271122 buf_info -> dma_addr = dma_addr ;
11281123 buf_info -> len = skb_frag_size (frag );
11291124 buf_info ++ ;
@@ -1141,7 +1136,8 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
11411136 dma_unmap_page (dev , buf_info -> dma_addr ,
11421137 buf_info -> len , DMA_TO_DEVICE );
11431138 }
1144- dma_unmap_single (dev , buf_info -> dma_addr , buf_info -> len , DMA_TO_DEVICE );
1139+ dma_unmap_single (dev , desc_info -> bufs [0 ].dma_addr ,
1140+ desc_info -> bufs [0 ].len , DMA_TO_DEVICE );
11451141 return - EIO ;
11461142}
11471143
@@ -1155,11 +1151,11 @@ static void ionic_tx_desc_unmap_bufs(struct ionic_queue *q,
11551151 if (!desc_info -> nbufs )
11561152 return ;
11571153
1158- dma_unmap_single (dev , ( dma_addr_t ) buf_info -> dma_addr ,
1154+ dma_unmap_single (dev , buf_info -> dma_addr ,
11591155 buf_info -> len , DMA_TO_DEVICE );
11601156 buf_info ++ ;
11611157 for (i = 1 ; i < desc_info -> nbufs ; i ++ , buf_info ++ )
1162- dma_unmap_page (dev , ( dma_addr_t ) buf_info -> dma_addr ,
1158+ dma_unmap_page (dev , buf_info -> dma_addr ,
11631159 buf_info -> len , DMA_TO_DEVICE );
11641160
11651161 desc_info -> nbufs = 0 ;
0 commit comments