forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/infiniband/hw/hfi1/vnic_sdma.c
....@@ -1,5 +1,5 @@
11 /*
2
- * Copyright(c) 2017 Intel Corporation.
2
+ * Copyright(c) 2017 - 2018 Intel Corporation.
33 *
44 * This file is provided under a dual BSD/GPLv2 license. When using or
55 * redistributing this file, you may do so under either license.
....@@ -102,14 +102,15 @@
102102 goto bail_txadd;
103103
104104 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];
106106
107107 /* combine physically continuous fragments later? */
108108 ret = sdma_txadd_page(sde->dd,
109109 &tx->txreq,
110110 skb_frag_page(frag),
111
- frag->page_offset,
112
- skb_frag_size(frag));
111
+ skb_frag_off(frag),
112
+ skb_frag_size(frag),
113
+ NULL, NULL, NULL);
113114 if (unlikely(ret))
114115 goto bail_txadd;
115116 }
....@@ -193,8 +194,8 @@
193194 if (unlikely(ret))
194195 goto free_desc;
195196
196
- ret = sdma_send_txreq(sde, &vnic_sdma->wait, &tx->txreq,
197
- vnic_sdma->pkts_sent);
197
+ ret = sdma_send_txreq(sde, iowait_get_ib_work(&vnic_sdma->wait),
198
+ &tx->txreq, vnic_sdma->pkts_sent);
198199 /* When -ECOMM, sdma callback will be called with ABORT status */
199200 if (unlikely(ret && unlikely(ret != -ECOMM)))
200201 goto free_desc;
....@@ -225,25 +226,26 @@
225226 * become available.
226227 */
227228 static int hfi1_vnic_sdma_sleep(struct sdma_engine *sde,
228
- struct iowait *wait,
229
+ struct iowait_work *wait,
229230 struct sdma_txreq *txreq,
230231 uint seq,
231232 bool pkts_sent)
232233 {
233234 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;
235
+ container_of(wait->iow, struct hfi1_vnic_sdma, wait);
236236
237
- write_seqlock(&dev->iowait_lock);
237
+ write_seqlock(&sde->waitlock);
238238 if (sdma_progress(sde, seq, txreq)) {
239
- write_sequnlock(&dev->iowait_lock);
239
+ write_sequnlock(&sde->waitlock);
240240 return -EAGAIN;
241241 }
242242
243243 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);
244
+ if (list_empty(&vnic_sdma->wait.list)) {
245
+ iowait_get_priority(wait->iow);
246
+ iowait_queue(pkts_sent, wait->iow, &sde->dmawait);
247
+ }
248
+ write_sequnlock(&sde->waitlock);
247249 return -EBUSY;
248250 }
249251
....@@ -280,8 +282,9 @@
280282 for (i = 0; i < vinfo->num_tx_q; i++) {
281283 struct hfi1_vnic_sdma *vnic_sdma = &vinfo->sdma[i];
282284
283
- iowait_init(&vnic_sdma->wait, 0, NULL, hfi1_vnic_sdma_sleep,
284
- hfi1_vnic_sdma_wakeup, NULL);
285
+ iowait_init(&vnic_sdma->wait, 0, NULL, NULL,
286
+ hfi1_vnic_sdma_sleep,
287
+ hfi1_vnic_sdma_wakeup, NULL, NULL);
285288 vnic_sdma->sde = &vinfo->dd->per_sdma[i];
286289 vnic_sdma->dd = vinfo->dd;
287290 vnic_sdma->vinfo = vinfo;
....@@ -290,10 +293,12 @@
290293
291294 /* Add a free descriptor watermark for wakeups */
292295 if (vnic_sdma->sde->descq_cnt > HFI1_VNIC_SDMA_DESC_WTRMRK) {
296
+ struct iowait_work *work;
297
+
293298 INIT_LIST_HEAD(&vnic_sdma->stx.list);
294299 vnic_sdma->stx.num_desc = HFI1_VNIC_SDMA_DESC_WTRMRK;
295
- list_add_tail(&vnic_sdma->stx.list,
296
- &vnic_sdma->wait.tx_head);
300
+ work = iowait_get_ib_work(&vnic_sdma->wait);
301
+ list_add_tail(&vnic_sdma->stx.list, &work->tx_head);
297302 }
298303 }
299304 }