.. | .. |
---|
1 | 1 | /* |
---|
2 | | - * Copyright(c) 2017 Intel Corporation. |
---|
| 2 | + * Copyright(c) 2017 - 2018 Intel Corporation. |
---|
3 | 3 | * |
---|
4 | 4 | * This file is provided under a dual BSD/GPLv2 license. When using or |
---|
5 | 5 | * redistributing this file, you may do so under either license. |
---|
.. | .. |
---|
102 | 102 | goto bail_txadd; |
---|
103 | 103 | |
---|
104 | 104 | for (i = 0; i < skb_shinfo(tx->skb)->nr_frags; i++) { |
---|
105 | | - struct skb_frag_struct *frag = &skb_shinfo(tx->skb)->frags[i]; |
---|
| 105 | + skb_frag_t *frag = &skb_shinfo(tx->skb)->frags[i]; |
---|
106 | 106 | |
---|
107 | 107 | /* combine physically continuous fragments later? */ |
---|
108 | 108 | ret = sdma_txadd_page(sde->dd, |
---|
109 | 109 | &tx->txreq, |
---|
110 | 110 | skb_frag_page(frag), |
---|
111 | | - frag->page_offset, |
---|
| 111 | + skb_frag_off(frag), |
---|
112 | 112 | skb_frag_size(frag)); |
---|
113 | 113 | if (unlikely(ret)) |
---|
114 | 114 | goto bail_txadd; |
---|
.. | .. |
---|
193 | 193 | if (unlikely(ret)) |
---|
194 | 194 | goto free_desc; |
---|
195 | 195 | |
---|
196 | | - ret = sdma_send_txreq(sde, &vnic_sdma->wait, &tx->txreq, |
---|
197 | | - vnic_sdma->pkts_sent); |
---|
| 196 | + ret = sdma_send_txreq(sde, iowait_get_ib_work(&vnic_sdma->wait), |
---|
| 197 | + &tx->txreq, vnic_sdma->pkts_sent); |
---|
198 | 198 | /* When -ECOMM, sdma callback will be called with ABORT status */ |
---|
199 | 199 | if (unlikely(ret && unlikely(ret != -ECOMM))) |
---|
200 | 200 | goto free_desc; |
---|
.. | .. |
---|
225 | 225 | * become available. |
---|
226 | 226 | */ |
---|
227 | 227 | static int hfi1_vnic_sdma_sleep(struct sdma_engine *sde, |
---|
228 | | - struct iowait *wait, |
---|
| 228 | + struct iowait_work *wait, |
---|
229 | 229 | struct sdma_txreq *txreq, |
---|
230 | 230 | uint seq, |
---|
231 | 231 | bool pkts_sent) |
---|
232 | 232 | { |
---|
233 | 233 | struct hfi1_vnic_sdma *vnic_sdma = |
---|
234 | | - container_of(wait, struct hfi1_vnic_sdma, wait); |
---|
235 | | - struct hfi1_ibdev *dev = &vnic_sdma->dd->verbs_dev; |
---|
| 234 | + container_of(wait->iow, struct hfi1_vnic_sdma, wait); |
---|
236 | 235 | |
---|
237 | | - write_seqlock(&dev->iowait_lock); |
---|
| 236 | + write_seqlock(&sde->waitlock); |
---|
238 | 237 | if (sdma_progress(sde, seq, txreq)) { |
---|
239 | | - write_sequnlock(&dev->iowait_lock); |
---|
| 238 | + write_sequnlock(&sde->waitlock); |
---|
240 | 239 | return -EAGAIN; |
---|
241 | 240 | } |
---|
242 | 241 | |
---|
243 | 242 | vnic_sdma->state = HFI1_VNIC_SDMA_Q_DEFERRED; |
---|
244 | | - if (list_empty(&vnic_sdma->wait.list)) |
---|
245 | | - iowait_queue(pkts_sent, wait, &sde->dmawait); |
---|
246 | | - write_sequnlock(&dev->iowait_lock); |
---|
| 243 | + if (list_empty(&vnic_sdma->wait.list)) { |
---|
| 244 | + iowait_get_priority(wait->iow); |
---|
| 245 | + iowait_queue(pkts_sent, wait->iow, &sde->dmawait); |
---|
| 246 | + } |
---|
| 247 | + write_sequnlock(&sde->waitlock); |
---|
247 | 248 | return -EBUSY; |
---|
248 | 249 | } |
---|
249 | 250 | |
---|
.. | .. |
---|
280 | 281 | for (i = 0; i < vinfo->num_tx_q; i++) { |
---|
281 | 282 | struct hfi1_vnic_sdma *vnic_sdma = &vinfo->sdma[i]; |
---|
282 | 283 | |
---|
283 | | - iowait_init(&vnic_sdma->wait, 0, NULL, hfi1_vnic_sdma_sleep, |
---|
284 | | - hfi1_vnic_sdma_wakeup, NULL); |
---|
| 284 | + iowait_init(&vnic_sdma->wait, 0, NULL, NULL, |
---|
| 285 | + hfi1_vnic_sdma_sleep, |
---|
| 286 | + hfi1_vnic_sdma_wakeup, NULL, NULL); |
---|
285 | 287 | vnic_sdma->sde = &vinfo->dd->per_sdma[i]; |
---|
286 | 288 | vnic_sdma->dd = vinfo->dd; |
---|
287 | 289 | vnic_sdma->vinfo = vinfo; |
---|
.. | .. |
---|
290 | 292 | |
---|
291 | 293 | /* Add a free descriptor watermark for wakeups */ |
---|
292 | 294 | if (vnic_sdma->sde->descq_cnt > HFI1_VNIC_SDMA_DESC_WTRMRK) { |
---|
| 295 | + struct iowait_work *work; |
---|
| 296 | + |
---|
293 | 297 | INIT_LIST_HEAD(&vnic_sdma->stx.list); |
---|
294 | 298 | vnic_sdma->stx.num_desc = HFI1_VNIC_SDMA_DESC_WTRMRK; |
---|
295 | | - list_add_tail(&vnic_sdma->stx.list, |
---|
296 | | - &vnic_sdma->wait.tx_head); |
---|
| 299 | + work = iowait_get_ib_work(&vnic_sdma->wait); |
---|
| 300 | + list_add_tail(&vnic_sdma->stx.list, &work->tx_head); |
---|
297 | 301 | } |
---|
298 | 302 | } |
---|
299 | 303 | } |
---|