@@ -129,6 +129,7 @@ static int ionic_rx_page_alloc(struct ionic_queue *q,
129
129
struct ionic_buf_info * buf_info )
130
130
{
131
131
struct ionic_rx_stats * stats ;
132
+ dma_addr_t dma_addr ;
132
133
struct device * dev ;
133
134
struct page * page ;
134
135
@@ -143,16 +144,17 @@ static int ionic_rx_page_alloc(struct ionic_queue *q,
143
144
return - ENOMEM ;
144
145
}
145
146
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 ))) {
149
150
__free_pages (page , 0 );
150
151
net_err_ratelimited ("%s: %s dma map failed\n" ,
151
152
dev_name (dev ), q -> name );
152
153
stats -> dma_map_err ++ ;
153
154
return - EIO ;
154
155
}
155
156
157
+ buf_info -> dma_addr = dma_addr ;
156
158
buf_info -> page = page ;
157
159
buf_info -> page_offset = 0 ;
158
160
@@ -371,10 +373,8 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame,
371
373
stats = q_to_tx_stats (q );
372
374
373
375
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 )
376
377
return - EIO ;
377
- }
378
378
buf_info -> dma_addr = dma_addr ;
379
379
buf_info -> len = len ;
380
380
buf_info -> page = page ;
@@ -397,8 +397,7 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame,
397
397
elem = ionic_tx_sg_elems (q );
398
398
for (i = 0 ; i < sinfo -> nr_frags ; i ++ , frag ++ , bi ++ ) {
399
399
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 ) {
402
401
ionic_tx_desc_unmap_bufs (q , desc_info );
403
402
return - EIO ;
404
403
}
@@ -1092,6 +1091,7 @@ static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q,
1092
1091
net_warn_ratelimited ("%s: DMA frag map failed on %s!\n" ,
1093
1092
dev_name (dev ), q -> name );
1094
1093
stats -> dma_map_err ++ ;
1094
+ return 0 ;
1095
1095
}
1096
1096
return dma_addr ;
1097
1097
}
@@ -1100,18 +1100,15 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
1100
1100
struct ionic_tx_desc_info * desc_info )
1101
1101
{
1102
1102
struct ionic_buf_info * buf_info = desc_info -> bufs ;
1103
- struct ionic_tx_stats * stats = q_to_tx_stats (q );
1104
1103
struct device * dev = q -> dev ;
1105
1104
dma_addr_t dma_addr ;
1106
1105
unsigned int nfrags ;
1107
1106
skb_frag_t * frag ;
1108
1107
int frag_idx ;
1109
1108
1110
1109
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 )
1113
1111
return - EIO ;
1114
- }
1115
1112
buf_info -> dma_addr = dma_addr ;
1116
1113
buf_info -> len = skb_headlen (skb );
1117
1114
buf_info ++ ;
@@ -1120,10 +1117,8 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
1120
1117
nfrags = skb_shinfo (skb )-> nr_frags ;
1121
1118
for (frag_idx = 0 ; frag_idx < nfrags ; frag_idx ++ , frag ++ ) {
1122
1119
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 )
1125
1121
goto dma_fail ;
1126
- }
1127
1122
buf_info -> dma_addr = dma_addr ;
1128
1123
buf_info -> len = skb_frag_size (frag );
1129
1124
buf_info ++ ;
@@ -1141,7 +1136,8 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb,
1141
1136
dma_unmap_page (dev , buf_info -> dma_addr ,
1142
1137
buf_info -> len , DMA_TO_DEVICE );
1143
1138
}
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 );
1145
1141
return - EIO ;
1146
1142
}
1147
1143
@@ -1155,11 +1151,11 @@ static void ionic_tx_desc_unmap_bufs(struct ionic_queue *q,
1155
1151
if (!desc_info -> nbufs )
1156
1152
return ;
1157
1153
1158
- dma_unmap_single (dev , ( dma_addr_t ) buf_info -> dma_addr ,
1154
+ dma_unmap_single (dev , buf_info -> dma_addr ,
1159
1155
buf_info -> len , DMA_TO_DEVICE );
1160
1156
buf_info ++ ;
1161
1157
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 ,
1163
1159
buf_info -> len , DMA_TO_DEVICE );
1164
1160
1165
1161
desc_info -> nbufs = 0 ;
0 commit comments