hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
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,13 +102,13 @@
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,
111
+ skb_frag_off(frag),
112112 skb_frag_size(frag));
113113 if (unlikely(ret))
114114 goto bail_txadd;
....@@ -193,8 +193,8 @@
193193 if (unlikely(ret))
194194 goto free_desc;
195195
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);
198198 /* When -ECOMM, sdma callback will be called with ABORT status */
199199 if (unlikely(ret && unlikely(ret != -ECOMM)))
200200 goto free_desc;
....@@ -225,25 +225,26 @@
225225 * become available.
226226 */
227227 static int hfi1_vnic_sdma_sleep(struct sdma_engine *sde,
228
- struct iowait *wait,
228
+ struct iowait_work *wait,
229229 struct sdma_txreq *txreq,
230230 uint seq,
231231 bool pkts_sent)
232232 {
233233 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);
236235
237
- write_seqlock(&dev->iowait_lock);
236
+ write_seqlock(&sde->waitlock);
238237 if (sdma_progress(sde, seq, txreq)) {
239
- write_sequnlock(&dev->iowait_lock);
238
+ write_sequnlock(&sde->waitlock);
240239 return -EAGAIN;
241240 }
242241
243242 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);
247248 return -EBUSY;
248249 }
249250
....@@ -280,8 +281,9 @@
280281 for (i = 0; i < vinfo->num_tx_q; i++) {
281282 struct hfi1_vnic_sdma *vnic_sdma = &vinfo->sdma[i];
282283
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);
285287 vnic_sdma->sde = &vinfo->dd->per_sdma[i];
286288 vnic_sdma->dd = vinfo->dd;
287289 vnic_sdma->vinfo = vinfo;
....@@ -290,10 +292,12 @@
290292
291293 /* Add a free descriptor watermark for wakeups */
292294 if (vnic_sdma->sde->descq_cnt > HFI1_VNIC_SDMA_DESC_WTRMRK) {
295
+ struct iowait_work *work;
296
+
293297 INIT_LIST_HEAD(&vnic_sdma->stx.list);
294298 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);
297301 }
298302 }
299303 }