1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* Virtio ring implementation.
3 *
4 * Copyright 2007 Rusty Russell IBM Corporation
5 */
6 #include <linux/virtio.h>
7 #include <linux/virtio_ring.h>
8 #include <linux/virtio_config.h>
9 #include <linux/device.h>
10 #include <linux/slab.h>
11 #include <linux/module.h>
12 #include <linux/hrtimer.h>
13 #include <linux/dma-mapping.h>
14 #include <linux/kmsan.h>
15 #include <linux/spinlock.h>
16 #include <xen/xen.h>
17
18 #ifdef DEBUG
19 /* For development, we want to crash whenever the ring is screwed. */
20 #define BAD_RING(_vq, fmt, args...) \
21 do { \
22 dev_err(&(_vq)->vq.vdev->dev, \
23 "%s:"fmt, (_vq)->vq.name, ##args); \
24 BUG(); \
25 } while (0)
26 /* Caller is supposed to guarantee no reentry. */
27 #define START_USE(_vq) \
28 do { \
29 if ((_vq)->in_use) \
30 panic("%s:in_use = %i\n", \
31 (_vq)->vq.name, (_vq)->in_use); \
32 (_vq)->in_use = __LINE__; \
33 } while (0)
34 #define END_USE(_vq) \
35 do { BUG_ON(!(_vq)->in_use); (_vq)->in_use = 0; } while(0)
36 #define LAST_ADD_TIME_UPDATE(_vq) \
37 do { \
38 ktime_t now = ktime_get(); \
39 \
40 /* No kick or get, with .1 second between? Warn. */ \
41 if ((_vq)->last_add_time_valid) \
42 WARN_ON(ktime_to_ms(ktime_sub(now, \
43 (_vq)->last_add_time)) > 100); \
44 (_vq)->last_add_time = now; \
45 (_vq)->last_add_time_valid = true; \
46 } while (0)
47 #define LAST_ADD_TIME_CHECK(_vq) \
48 do { \
49 if ((_vq)->last_add_time_valid) { \
50 WARN_ON(ktime_to_ms(ktime_sub(ktime_get(), \
51 (_vq)->last_add_time)) > 100); \
52 } \
53 } while (0)
54 #define LAST_ADD_TIME_INVALID(_vq) \
55 ((_vq)->last_add_time_valid = false)
56 #else
57 #define BAD_RING(_vq, fmt, args...) \
58 do { \
59 dev_err(&_vq->vq.vdev->dev, \
60 "%s:"fmt, (_vq)->vq.name, ##args); \
61 (_vq)->broken = true; \
62 } while (0)
63 #define START_USE(vq)
64 #define END_USE(vq)
65 #define LAST_ADD_TIME_UPDATE(vq)
66 #define LAST_ADD_TIME_CHECK(vq)
67 #define LAST_ADD_TIME_INVALID(vq)
68 #endif
69
70 enum vq_layout {
71 VQ_LAYOUT_SPLIT = 0,
72 VQ_LAYOUT_PACKED,
73 VQ_LAYOUT_SPLIT_IN_ORDER,
74 VQ_LAYOUT_PACKED_IN_ORDER,
75 };
76
77 struct vring_desc_state_split {
78 void *data; /* Data for callback. */
79
80 /* Indirect desc table and extra table, if any. These two will be
81 * allocated together. So we won't stress more to the memory allocator.
82 */
83 struct vring_desc *indir_desc;
84 u32 total_in_len;
85 };
86
87 struct vring_desc_state_packed {
88 void *data; /* Data for callback. */
89
90 /* Indirect desc table and extra table, if any. These two will be
91 * allocated together. So we won't stress more to the memory allocator.
92 */
93 struct vring_packed_desc *indir_desc;
94 u16 num; /* Descriptor list length. */
95 u16 last; /* The last desc state in a list. */
96 u32 total_in_len; /* In length for the skipped buffer. */
97 };
98
99 struct vring_desc_extra {
100 dma_addr_t addr; /* Descriptor DMA addr. */
101 u32 len; /* Descriptor length. */
102 u16 flags; /* Descriptor flags. */
103 u16 next; /* The next desc state in a list. */
104 };
105
106 struct vring_virtqueue_split {
107 /* Actual memory layout for this queue. */
108 struct vring vring;
109
110 /* Last written value to avail->flags */
111 u16 avail_flags_shadow;
112
113 /*
114 * Last written value to avail->idx in
115 * guest byte order.
116 */
117 u16 avail_idx_shadow;
118
119 /* Per-descriptor state. */
120 struct vring_desc_state_split *desc_state;
121 struct vring_desc_extra *desc_extra;
122
123 /* DMA address and size information */
124 dma_addr_t queue_dma_addr;
125 size_t queue_size_in_bytes;
126
127 /*
128 * The parameters for creating vrings are reserved for creating new
129 * vring.
130 */
131 u32 vring_align;
132 bool may_reduce_num;
133 };
134
135 struct vring_virtqueue_packed {
136 /* Actual memory layout for this queue. */
137 struct {
138 unsigned int num;
139 struct vring_packed_desc *desc;
140 struct vring_packed_desc_event *driver;
141 struct vring_packed_desc_event *device;
142 } vring;
143
144 /* Driver ring wrap counter. */
145 bool avail_wrap_counter;
146
147 /* Avail used flags. */
148 u16 avail_used_flags;
149
150 /* Index of the next avail descriptor. */
151 u16 next_avail_idx;
152
153 /*
154 * Last written value to driver->flags in
155 * guest byte order.
156 */
157 u16 event_flags_shadow;
158
159 /* Per-descriptor state. */
160 struct vring_desc_state_packed *desc_state;
161 struct vring_desc_extra *desc_extra;
162
163 /* DMA address and size information */
164 dma_addr_t ring_dma_addr;
165 dma_addr_t driver_event_dma_addr;
166 dma_addr_t device_event_dma_addr;
167 size_t ring_size_in_bytes;
168 size_t event_size_in_bytes;
169 };
170
171 struct vring_virtqueue;
172
173 struct virtqueue_ops {
174 int (*add)(struct vring_virtqueue *vq, struct scatterlist *sgs[],
175 unsigned int total_sg, unsigned int out_sgs,
176 unsigned int in_sgs, void *data,
177 void *ctx, bool premapped, gfp_t gfp,
178 unsigned long attr);
179 void *(*get)(struct vring_virtqueue *vq, unsigned int *len, void **ctx);
180 bool (*kick_prepare)(struct vring_virtqueue *vq);
181 void (*disable_cb)(struct vring_virtqueue *vq);
182 bool (*enable_cb_delayed)(struct vring_virtqueue *vq);
183 unsigned int (*enable_cb_prepare)(struct vring_virtqueue *vq);
184 bool (*poll)(const struct vring_virtqueue *vq,
185 unsigned int last_used_idx);
186 void *(*detach_unused_buf)(struct vring_virtqueue *vq);
187 bool (*more_used)(const struct vring_virtqueue *vq);
188 int (*resize)(struct vring_virtqueue *vq, u32 num);
189 void (*reset)(struct vring_virtqueue *vq);
190 };
191
192 struct vring_virtqueue {
193 struct virtqueue vq;
194
195 /* Is DMA API used? */
196 bool use_map_api;
197
198 /* Can we use weak barriers? */
199 bool weak_barriers;
200
201 /* Other side has made a mess, don't try any more. */
202 bool broken;
203
204 /* Host supports indirect buffers */
205 bool indirect;
206
207 /* Host publishes avail event idx */
208 bool event;
209
210 enum vq_layout layout;
211
212 /*
213 * Without IN_ORDER it's the head of free buffer list. With
214 * IN_ORDER and SPLIT, it's the next available buffer
215 * index. With IN_ORDER and PACKED, it's unused.
216 */
217 unsigned int free_head;
218
219 /*
220 * With IN_ORDER, once we see an in-order batch, this stores
221 * this last entry, and until we return the last buffer.
222 * After this, id is set to UINT_MAX to mark it invalid.
223 * Unused without IN_ORDER.
224 */
225 struct used_entry {
226 u32 id;
227 u32 len;
228 } batch_last;
229
230 /* Number we've added since last sync. */
231 unsigned int num_added;
232
233 /* Last used index we've seen.
234 * for split ring, it just contains last used index
235 * for packed ring:
236 * bits up to VRING_PACKED_EVENT_F_WRAP_CTR include the last used index.
237 * bits from VRING_PACKED_EVENT_F_WRAP_CTR include the used wrap counter.
238 */
239 u16 last_used_idx;
240
241 /* With IN_ORDER and SPLIT, last descriptor id we used to
242 * detach buffer.
243 */
244 u16 last_used;
245
246 /* Hint for event idx: already triggered no need to disable. */
247 bool event_triggered;
248
249 union {
250 /* Available for split ring */
251 struct vring_virtqueue_split split;
252
253 /* Available for packed ring */
254 struct vring_virtqueue_packed packed;
255 };
256
257 /* How to notify other side. FIXME: commonalize hcalls! */
258 bool (*notify)(struct virtqueue *vq);
259
260 /* DMA, allocation, and size information */
261 bool we_own_ring;
262
263 union virtio_map map;
264
265 #ifdef DEBUG
266 /* They're supposed to lock for us. */
267 unsigned int in_use;
268
269 /* Figure out if their kicks are too delayed. */
270 bool last_add_time_valid;
271 ktime_t last_add_time;
272 #endif
273 };
274
275 /*
276 * Accessors for device-writable fields in virtio rings.
277 * These fields are concurrently written by the device and read by the driver.
278 * Use READ_ONCE() to prevent compiler optimizations, document the
279 * intentional data race and prevent KCSAN warnings.
280 */
vring_read_split_used_idx(const struct vring_virtqueue * vq)281 static inline u16 vring_read_split_used_idx(const struct vring_virtqueue *vq)
282 {
283 return virtio16_to_cpu(vq->vq.vdev,
284 READ_ONCE(vq->split.vring.used->idx));
285 }
286
vring_read_split_used_id(const struct vring_virtqueue * vq,u16 idx)287 static inline u32 vring_read_split_used_id(const struct vring_virtqueue *vq,
288 u16 idx)
289 {
290 return virtio32_to_cpu(vq->vq.vdev,
291 READ_ONCE(vq->split.vring.used->ring[idx].id));
292 }
293
vring_read_split_used_len(const struct vring_virtqueue * vq,u16 idx)294 static inline u32 vring_read_split_used_len(const struct vring_virtqueue *vq, u16 idx)
295 {
296 return virtio32_to_cpu(vq->vq.vdev,
297 READ_ONCE(vq->split.vring.used->ring[idx].len));
298 }
299
vring_read_split_avail_event(const struct vring_virtqueue * vq)300 static inline u16 vring_read_split_avail_event(const struct vring_virtqueue *vq)
301 {
302 return virtio16_to_cpu(vq->vq.vdev,
303 READ_ONCE(vring_avail_event(&vq->split.vring)));
304 }
305
vring_read_packed_desc_flags(const struct vring_virtqueue * vq,u16 idx)306 static inline u16 vring_read_packed_desc_flags(const struct vring_virtqueue *vq,
307 u16 idx)
308 {
309 return le16_to_cpu(READ_ONCE(vq->packed.vring.desc[idx].flags));
310 }
311
vring_read_packed_desc_id(const struct vring_virtqueue * vq,u16 idx)312 static inline u16 vring_read_packed_desc_id(const struct vring_virtqueue *vq,
313 u16 idx)
314 {
315 return le16_to_cpu(READ_ONCE(vq->packed.vring.desc[idx].id));
316 }
317
vring_read_packed_desc_len(const struct vring_virtqueue * vq,u16 idx)318 static inline u32 vring_read_packed_desc_len(const struct vring_virtqueue *vq,
319 u16 idx)
320 {
321 return le32_to_cpu(READ_ONCE(vq->packed.vring.desc[idx].len));
322 }
323
324 static struct vring_desc_extra *vring_alloc_desc_extra(unsigned int num);
325 static void vring_free(struct virtqueue *_vq);
326
327 /*
328 * Helpers.
329 */
330
331 #define to_vvq(_vq) container_of_const(_vq, struct vring_virtqueue, vq)
332
333
virtqueue_is_packed(const struct vring_virtqueue * vq)334 static inline bool virtqueue_is_packed(const struct vring_virtqueue *vq)
335 {
336 return vq->layout == VQ_LAYOUT_PACKED ||
337 vq->layout == VQ_LAYOUT_PACKED_IN_ORDER;
338 }
339
virtqueue_is_in_order(const struct vring_virtqueue * vq)340 static inline bool virtqueue_is_in_order(const struct vring_virtqueue *vq)
341 {
342 return vq->layout == VQ_LAYOUT_SPLIT_IN_ORDER ||
343 vq->layout == VQ_LAYOUT_PACKED_IN_ORDER;
344 }
345
virtqueue_use_indirect(const struct vring_virtqueue * vq,unsigned int total_sg)346 static bool virtqueue_use_indirect(const struct vring_virtqueue *vq,
347 unsigned int total_sg)
348 {
349 /*
350 * If the host supports indirect descriptor tables, and we have multiple
351 * buffers, then go indirect. FIXME: tune this threshold
352 */
353 return (vq->indirect && total_sg > 1 && vq->vq.num_free);
354 }
355
356 /*
357 * Modern virtio devices have feature bits to specify whether they need a
358 * quirk and bypass the IOMMU. If not there, just use the DMA API.
359 *
360 * If there, the interaction between virtio and DMA API is messy.
361 *
362 * On most systems with virtio, physical addresses match bus addresses,
363 * and it doesn't particularly matter whether we use the DMA API.
364 *
365 * On some systems, including Xen and any system with a physical device
366 * that speaks virtio behind a physical IOMMU, we must use the DMA API
367 * for virtio DMA to work at all.
368 *
369 * On other systems, including SPARC and PPC64, virtio-pci devices are
370 * enumerated as though they are behind an IOMMU, but the virtio host
371 * ignores the IOMMU, so we must either pretend that the IOMMU isn't
372 * there or somehow map everything as the identity.
373 *
374 * For the time being, we preserve historic behavior and bypass the DMA
375 * API.
376 *
377 * TODO: install a per-device DMA ops structure that does the right thing
378 * taking into account all the above quirks, and use the DMA API
379 * unconditionally on data path.
380 */
381
vring_use_map_api(const struct virtio_device * vdev)382 static bool vring_use_map_api(const struct virtio_device *vdev)
383 {
384 if (!virtio_has_dma_quirk(vdev))
385 return true;
386
387 /* Otherwise, we are left to guess. */
388 /*
389 * In theory, it's possible to have a buggy QEMU-supposed
390 * emulated Q35 IOMMU and Xen enabled at the same time. On
391 * such a configuration, virtio has never worked and will
392 * not work without an even larger kludge. Instead, enable
393 * the DMA API if we're a Xen guest, which at least allows
394 * all of the sensible Xen configurations to work correctly.
395 */
396 if (xen_domain())
397 return true;
398
399 return false;
400 }
401
vring_need_unmap_buffer(const struct vring_virtqueue * vring,const struct vring_desc_extra * extra)402 static bool vring_need_unmap_buffer(const struct vring_virtqueue *vring,
403 const struct vring_desc_extra *extra)
404 {
405 return vring->use_map_api && (extra->addr != DMA_MAPPING_ERROR);
406 }
407
virtio_max_dma_size(const struct virtio_device * vdev)408 size_t virtio_max_dma_size(const struct virtio_device *vdev)
409 {
410 size_t max_segment_size = SIZE_MAX;
411
412 if (vring_use_map_api(vdev)) {
413 if (vdev->map) {
414 max_segment_size =
415 vdev->map->max_mapping_size(vdev->vmap);
416 } else
417 max_segment_size =
418 dma_max_mapping_size(vdev->dev.parent);
419 }
420
421 return max_segment_size;
422 }
423 EXPORT_SYMBOL_GPL(virtio_max_dma_size);
424
vring_alloc_queue(struct virtio_device * vdev,size_t size,dma_addr_t * map_handle,gfp_t flag,union virtio_map map)425 static void *vring_alloc_queue(struct virtio_device *vdev, size_t size,
426 dma_addr_t *map_handle, gfp_t flag,
427 union virtio_map map)
428 {
429 if (vring_use_map_api(vdev)) {
430 return virtqueue_map_alloc_coherent(vdev, map, size,
431 map_handle, flag);
432 } else {
433 void *queue = alloc_pages_exact(PAGE_ALIGN(size), flag);
434
435 if (queue) {
436 phys_addr_t phys_addr = virt_to_phys(queue);
437 *map_handle = (dma_addr_t)phys_addr;
438
439 /*
440 * Sanity check: make sure we dind't truncate
441 * the address. The only arches I can find that
442 * have 64-bit phys_addr_t but 32-bit dma_addr_t
443 * are certain non-highmem MIPS and x86
444 * configurations, but these configurations
445 * should never allocate physical pages above 32
446 * bits, so this is fine. Just in case, throw a
447 * warning and abort if we end up with an
448 * unrepresentable address.
449 */
450 if (WARN_ON_ONCE(*map_handle != phys_addr)) {
451 free_pages_exact(queue, PAGE_ALIGN(size));
452 return NULL;
453 }
454 }
455 return queue;
456 }
457 }
458
vring_free_queue(struct virtio_device * vdev,size_t size,void * queue,dma_addr_t map_handle,union virtio_map map)459 static void vring_free_queue(struct virtio_device *vdev, size_t size,
460 void *queue, dma_addr_t map_handle,
461 union virtio_map map)
462 {
463 if (vring_use_map_api(vdev))
464 virtqueue_map_free_coherent(vdev, map, size,
465 queue, map_handle);
466 else
467 free_pages_exact(queue, PAGE_ALIGN(size));
468 }
469
470 /*
471 * The DMA ops on various arches are rather gnarly right now, and
472 * making all of the arch DMA ops work on the vring device itself
473 * is a mess.
474 */
vring_dma_dev(const struct vring_virtqueue * vq)475 static struct device *vring_dma_dev(const struct vring_virtqueue *vq)
476 {
477 return vq->map.dma_dev;
478 }
479
vring_mapping_error(const struct vring_virtqueue * vq,dma_addr_t addr)480 static int vring_mapping_error(const struct vring_virtqueue *vq,
481 dma_addr_t addr)
482 {
483 struct virtio_device *vdev = vq->vq.vdev;
484
485 if (!vq->use_map_api)
486 return 0;
487
488 if (vdev->map)
489 return vdev->map->mapping_error(vq->map, addr);
490 else
491 return dma_mapping_error(vring_dma_dev(vq), addr);
492 }
493
494 /* Map one sg entry. */
vring_map_one_sg(const struct vring_virtqueue * vq,struct scatterlist * sg,enum dma_data_direction direction,dma_addr_t * addr,u32 * len,bool premapped,unsigned long attr)495 static int vring_map_one_sg(const struct vring_virtqueue *vq, struct scatterlist *sg,
496 enum dma_data_direction direction, dma_addr_t *addr,
497 u32 *len, bool premapped, unsigned long attr)
498 {
499 if (premapped) {
500 *addr = sg_dma_address(sg);
501 *len = sg_dma_len(sg);
502 return 0;
503 }
504
505 *len = sg->length;
506
507 if (!vq->use_map_api) {
508 /*
509 * If DMA is not used, KMSAN doesn't know that the scatterlist
510 * is initialized by the hardware. Explicitly check/unpoison it
511 * depending on the direction.
512 */
513 kmsan_handle_dma(sg_phys(sg), sg->length, direction);
514 *addr = (dma_addr_t)sg_phys(sg);
515 return 0;
516 }
517
518 /*
519 * We can't use dma_map_sg, because we don't use scatterlists in
520 * the way it expects (we don't guarantee that the scatterlist
521 * will exist for the lifetime of the mapping).
522 */
523 *addr = virtqueue_map_page_attrs(&vq->vq, sg_page(sg),
524 sg->offset, sg->length,
525 direction, attr);
526
527 if (vring_mapping_error(vq, *addr))
528 return -ENOMEM;
529
530 return 0;
531 }
532
vring_map_single(const struct vring_virtqueue * vq,void * cpu_addr,size_t size,enum dma_data_direction direction)533 static dma_addr_t vring_map_single(const struct vring_virtqueue *vq,
534 void *cpu_addr, size_t size,
535 enum dma_data_direction direction)
536 {
537 if (!vq->use_map_api)
538 return (dma_addr_t)virt_to_phys(cpu_addr);
539
540 return virtqueue_map_single_attrs(&vq->vq, cpu_addr,
541 size, direction, 0);
542 }
543
virtqueue_init(struct vring_virtqueue * vq,u32 num)544 static void virtqueue_init(struct vring_virtqueue *vq, u32 num)
545 {
546 vq->vq.num_free = num;
547
548 if (virtqueue_is_packed(vq))
549 vq->last_used_idx = 0 | (1 << VRING_PACKED_EVENT_F_WRAP_CTR);
550 else
551 vq->last_used_idx = 0;
552
553 vq->last_used = 0;
554
555 vq->event_triggered = false;
556 vq->num_added = 0;
557
558 #ifdef DEBUG
559 vq->in_use = false;
560 vq->last_add_time_valid = false;
561 #endif
562 }
563
564
565 /*
566 * Split ring specific functions - *_split().
567 */
568
vring_unmap_one_split(const struct vring_virtqueue * vq,struct vring_desc_extra * extra)569 static unsigned int vring_unmap_one_split(const struct vring_virtqueue *vq,
570 struct vring_desc_extra *extra)
571 {
572 u16 flags;
573
574 flags = extra->flags;
575
576 if (flags & VRING_DESC_F_INDIRECT) {
577 if (!vq->use_map_api)
578 goto out;
579 } else if (!vring_need_unmap_buffer(vq, extra))
580 goto out;
581
582 virtqueue_unmap_page_attrs(&vq->vq,
583 extra->addr,
584 extra->len,
585 (flags & VRING_DESC_F_WRITE) ?
586 DMA_FROM_DEVICE : DMA_TO_DEVICE,
587 0);
588
589 out:
590 return extra->next;
591 }
592
alloc_indirect_split(struct vring_virtqueue * vq,unsigned int total_sg,gfp_t gfp)593 static struct vring_desc *alloc_indirect_split(struct vring_virtqueue *vq,
594 unsigned int total_sg,
595 gfp_t gfp)
596 {
597 struct vring_desc_extra *extra;
598 struct vring_desc *desc;
599 unsigned int i, size;
600
601 /*
602 * We require lowmem mappings for the descriptors because
603 * otherwise virt_to_phys will give us bogus addresses in the
604 * virtqueue.
605 */
606 gfp &= ~__GFP_HIGHMEM;
607
608 size = sizeof(*desc) * total_sg + sizeof(*extra) * total_sg;
609
610 desc = kmalloc(size, gfp);
611 if (!desc)
612 return NULL;
613
614 extra = (struct vring_desc_extra *)&desc[total_sg];
615
616 for (i = 0; i < total_sg; i++)
617 extra[i].next = i + 1;
618
619 return desc;
620 }
621
virtqueue_add_desc_split(struct vring_virtqueue * vq,struct vring_desc * desc,struct vring_desc_extra * extra,unsigned int i,dma_addr_t addr,unsigned int len,u16 flags,bool premapped)622 static inline unsigned int virtqueue_add_desc_split(struct vring_virtqueue *vq,
623 struct vring_desc *desc,
624 struct vring_desc_extra *extra,
625 unsigned int i,
626 dma_addr_t addr,
627 unsigned int len,
628 u16 flags, bool premapped)
629 {
630 struct virtio_device *vdev = vq->vq.vdev;
631 u16 next;
632
633 desc[i].flags = cpu_to_virtio16(vdev, flags);
634 desc[i].addr = cpu_to_virtio64(vdev, addr);
635 desc[i].len = cpu_to_virtio32(vdev, len);
636
637 extra[i].addr = premapped ? DMA_MAPPING_ERROR : addr;
638 extra[i].len = len;
639 extra[i].flags = flags;
640
641 next = extra[i].next;
642
643 desc[i].next = cpu_to_virtio16(vdev, next);
644
645 return next;
646 }
647
virtqueue_add_split(struct vring_virtqueue * vq,struct scatterlist * sgs[],unsigned int total_sg,unsigned int out_sgs,unsigned int in_sgs,void * data,void * ctx,bool premapped,gfp_t gfp,unsigned long attr)648 static inline int virtqueue_add_split(struct vring_virtqueue *vq,
649 struct scatterlist *sgs[],
650 unsigned int total_sg,
651 unsigned int out_sgs,
652 unsigned int in_sgs,
653 void *data,
654 void *ctx,
655 bool premapped,
656 gfp_t gfp,
657 unsigned long attr)
658 {
659 struct vring_desc_extra *extra;
660 struct scatterlist *sg;
661 struct vring_desc *desc;
662 unsigned int i, n, avail, descs_used, err_idx, sg_count = 0;
663 /* Total length for in-order */
664 unsigned int total_in_len = 0;
665 int head;
666 bool indirect;
667
668 START_USE(vq);
669
670 BUG_ON(data == NULL);
671 BUG_ON(ctx && vq->indirect);
672
673 if (unlikely(vq->broken)) {
674 END_USE(vq);
675 return -EIO;
676 }
677
678 LAST_ADD_TIME_UPDATE(vq);
679
680 BUG_ON(total_sg == 0);
681
682 head = vq->free_head;
683
684 if (virtqueue_use_indirect(vq, total_sg))
685 desc = alloc_indirect_split(vq, total_sg, gfp);
686 else {
687 desc = NULL;
688 WARN_ON_ONCE(total_sg > vq->split.vring.num && !vq->indirect);
689 }
690
691 if (desc) {
692 /* Use a single buffer which doesn't continue */
693 indirect = true;
694 /* Set up rest to use this indirect table. */
695 i = 0;
696 descs_used = 1;
697 extra = (struct vring_desc_extra *)&desc[total_sg];
698 } else {
699 indirect = false;
700 desc = vq->split.vring.desc;
701 extra = vq->split.desc_extra;
702 i = head;
703 descs_used = total_sg;
704 }
705
706 if (unlikely(vq->vq.num_free < descs_used)) {
707 pr_debug("Can't add buf len %i - avail = %i\n",
708 descs_used, vq->vq.num_free);
709 /* FIXME: for historical reasons, we force a notify here if
710 * there are outgoing parts to the buffer. Presumably the
711 * host should service the ring ASAP. */
712 if (out_sgs)
713 vq->notify(&vq->vq);
714 if (indirect)
715 kfree(desc);
716 END_USE(vq);
717 return -ENOSPC;
718 }
719
720 for (n = 0; n < out_sgs; n++) {
721 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
722 dma_addr_t addr;
723 u32 len;
724 u16 flags = 0;
725
726 if (++sg_count != total_sg)
727 flags |= VRING_DESC_F_NEXT;
728
729 if (vring_map_one_sg(vq, sg, DMA_TO_DEVICE, &addr, &len,
730 premapped, attr))
731 goto unmap_release;
732
733 /* Note that we trust indirect descriptor
734 * table since it use stream DMA mapping.
735 */
736 i = virtqueue_add_desc_split(vq, desc, extra, i, addr,
737 len, flags, premapped);
738 }
739 }
740 for (; n < (out_sgs + in_sgs); n++) {
741 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
742 dma_addr_t addr;
743 u32 len;
744 u16 flags = VRING_DESC_F_WRITE;
745
746 if (++sg_count != total_sg)
747 flags |= VRING_DESC_F_NEXT;
748
749 if (vring_map_one_sg(vq, sg, DMA_FROM_DEVICE, &addr, &len,
750 premapped, attr))
751 goto unmap_release;
752
753 /* Note that we trust indirect descriptor
754 * table since it use stream DMA mapping.
755 */
756 i = virtqueue_add_desc_split(vq, desc, extra, i, addr,
757 len, flags, premapped);
758 total_in_len += len;
759 }
760 }
761
762 if (indirect) {
763 /* Now that the indirect table is filled in, map it. */
764 dma_addr_t addr = vring_map_single(
765 vq, desc, total_sg * sizeof(struct vring_desc),
766 DMA_TO_DEVICE);
767 if (vring_mapping_error(vq, addr))
768 goto unmap_release;
769
770 virtqueue_add_desc_split(vq, vq->split.vring.desc,
771 vq->split.desc_extra,
772 head, addr,
773 total_sg * sizeof(struct vring_desc),
774 VRING_DESC_F_INDIRECT, false);
775 }
776
777 /* We're using some buffers from the free list. */
778 vq->vq.num_free -= descs_used;
779
780 /* Update free pointer */
781 if (virtqueue_is_in_order(vq)) {
782 vq->free_head += descs_used;
783 if (vq->free_head >= vq->split.vring.num)
784 vq->free_head -= vq->split.vring.num;
785 vq->split.desc_state[head].total_in_len = total_in_len;
786 } else if (indirect)
787 vq->free_head = vq->split.desc_extra[head].next;
788 else
789 vq->free_head = i;
790
791 /* Store token and indirect buffer state. */
792 vq->split.desc_state[head].data = data;
793 if (indirect)
794 vq->split.desc_state[head].indir_desc = desc;
795 else
796 vq->split.desc_state[head].indir_desc = ctx;
797
798 /* Put entry in available array (but don't update avail->idx until they
799 * do sync). */
800 avail = vq->split.avail_idx_shadow & (vq->split.vring.num - 1);
801 vq->split.vring.avail->ring[avail] = cpu_to_virtio16(vq->vq.vdev, head);
802
803 /* Descriptors and available array need to be set before we expose the
804 * new available array entries. */
805 virtio_wmb(vq->weak_barriers);
806 vq->split.avail_idx_shadow++;
807 vq->split.vring.avail->idx = cpu_to_virtio16(vq->vq.vdev,
808 vq->split.avail_idx_shadow);
809 vq->num_added++;
810
811 pr_debug("Added buffer head %i to %p\n", head, vq);
812 END_USE(vq);
813
814 /* This is very unlikely, but theoretically possible. Kick
815 * just in case. */
816 if (unlikely(vq->num_added == (1 << 16) - 1))
817 virtqueue_kick(&vq->vq);
818
819 return 0;
820
821 unmap_release:
822 err_idx = i;
823
824 if (indirect)
825 i = 0;
826 else
827 i = head;
828
829 for (n = 0; n < total_sg; n++) {
830 if (i == err_idx)
831 break;
832
833 i = vring_unmap_one_split(vq, &extra[i]);
834 }
835
836 if (indirect)
837 kfree(desc);
838
839 END_USE(vq);
840 return -ENOMEM;
841 }
842
virtqueue_kick_prepare_split(struct vring_virtqueue * vq)843 static bool virtqueue_kick_prepare_split(struct vring_virtqueue *vq)
844 {
845 u16 new, old;
846 bool needs_kick;
847
848 START_USE(vq);
849 /* We need to expose available array entries before checking avail
850 * event. */
851 virtio_mb(vq->weak_barriers);
852
853 old = vq->split.avail_idx_shadow - vq->num_added;
854 new = vq->split.avail_idx_shadow;
855 vq->num_added = 0;
856
857 LAST_ADD_TIME_CHECK(vq);
858 LAST_ADD_TIME_INVALID(vq);
859
860 if (vq->event) {
861 needs_kick = vring_need_event(vring_read_split_avail_event(vq),
862 new, old);
863 } else {
864 needs_kick = !(vq->split.vring.used->flags &
865 cpu_to_virtio16(vq->vq.vdev,
866 VRING_USED_F_NO_NOTIFY));
867 }
868 END_USE(vq);
869 return needs_kick;
870 }
871
detach_indirect_split(struct vring_virtqueue * vq,unsigned int head)872 static void detach_indirect_split(struct vring_virtqueue *vq,
873 unsigned int head)
874 {
875 struct vring_desc_extra *extra = vq->split.desc_extra;
876 struct vring_desc *indir_desc = vq->split.desc_state[head].indir_desc;
877 unsigned int j;
878 u32 len, num;
879
880 /* Free the indirect table, if any, now that it's unmapped. */
881 if (!indir_desc)
882 return;
883 len = vq->split.desc_extra[head].len;
884
885 BUG_ON(!(vq->split.desc_extra[head].flags &
886 VRING_DESC_F_INDIRECT));
887 BUG_ON(len == 0 || len % sizeof(struct vring_desc));
888
889 num = len / sizeof(struct vring_desc);
890
891 extra = (struct vring_desc_extra *)&indir_desc[num];
892
893 if (vq->use_map_api) {
894 for (j = 0; j < num; j++)
895 vring_unmap_one_split(vq, &extra[j]);
896 }
897
898 kfree(indir_desc);
899 vq->split.desc_state[head].indir_desc = NULL;
900 }
901
detach_buf_split_in_order(struct vring_virtqueue * vq,unsigned int head,void ** ctx)902 static unsigned detach_buf_split_in_order(struct vring_virtqueue *vq,
903 unsigned int head,
904 void **ctx)
905 {
906 struct vring_desc_extra *extra;
907 unsigned int i;
908 __virtio16 nextflag = cpu_to_virtio16(vq->vq.vdev, VRING_DESC_F_NEXT);
909
910 /* Clear data ptr. */
911 vq->split.desc_state[head].data = NULL;
912
913 extra = vq->split.desc_extra;
914
915 /* Put back on free list: unmap first-level descriptors and find end */
916 i = head;
917
918 while (vq->split.vring.desc[i].flags & nextflag) {
919 i = vring_unmap_one_split(vq, &extra[i]);
920 vq->vq.num_free++;
921 }
922
923 vring_unmap_one_split(vq, &extra[i]);
924
925 /* Plus final descriptor */
926 vq->vq.num_free++;
927
928 if (vq->indirect)
929 detach_indirect_split(vq, head);
930 else if (ctx)
931 *ctx = vq->split.desc_state[head].indir_desc;
932
933 return i;
934 }
935
detach_buf_split(struct vring_virtqueue * vq,unsigned int head,void ** ctx)936 static void detach_buf_split(struct vring_virtqueue *vq, unsigned int head,
937 void **ctx)
938 {
939 unsigned int i = detach_buf_split_in_order(vq, head, ctx);
940
941 vq->split.desc_extra[i].next = vq->free_head;
942 vq->free_head = head;
943 }
944
virtqueue_poll_split(const struct vring_virtqueue * vq,unsigned int last_used_idx)945 static bool virtqueue_poll_split(const struct vring_virtqueue *vq,
946 unsigned int last_used_idx)
947 {
948 return (u16)last_used_idx != vring_read_split_used_idx(vq);
949 }
950
more_used_split(const struct vring_virtqueue * vq)951 static bool more_used_split(const struct vring_virtqueue *vq)
952 {
953 return virtqueue_poll_split(vq, vq->last_used_idx);
954 }
955
more_used_split_in_order(const struct vring_virtqueue * vq)956 static bool more_used_split_in_order(const struct vring_virtqueue *vq)
957 {
958 if (vq->batch_last.id != UINT_MAX)
959 return true;
960
961 return virtqueue_poll_split(vq, vq->last_used_idx);
962 }
963
virtqueue_get_buf_ctx_split(struct vring_virtqueue * vq,unsigned int * len,void ** ctx)964 static void *virtqueue_get_buf_ctx_split(struct vring_virtqueue *vq,
965 unsigned int *len,
966 void **ctx)
967 {
968 void *ret;
969 unsigned int i;
970 u16 last_used;
971
972 START_USE(vq);
973
974 if (unlikely(vq->broken)) {
975 END_USE(vq);
976 return NULL;
977 }
978
979 if (!more_used_split(vq)) {
980 pr_debug("No more buffers in queue\n");
981 END_USE(vq);
982 return NULL;
983 }
984
985 /* Only get used array entries after they have been exposed by host. */
986 virtio_rmb(vq->weak_barriers);
987
988 last_used = (vq->last_used_idx & (vq->split.vring.num - 1));
989 i = vring_read_split_used_id(vq, last_used);
990 *len = vring_read_split_used_len(vq, last_used);
991
992 if (unlikely(i >= vq->split.vring.num)) {
993 BAD_RING(vq, "id %u out of range\n", i);
994 return NULL;
995 }
996 if (unlikely(!vq->split.desc_state[i].data)) {
997 BAD_RING(vq, "id %u is not a head!\n", i);
998 return NULL;
999 }
1000
1001 /* detach_buf_split clears data, so grab it now. */
1002 ret = vq->split.desc_state[i].data;
1003 detach_buf_split(vq, i, ctx);
1004 vq->last_used_idx++;
1005 /* If we expect an interrupt for the next entry, tell host
1006 * by writing event index and flush out the write before
1007 * the read in the next get_buf call. */
1008 if (!(vq->split.avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT))
1009 virtio_store_mb(vq->weak_barriers,
1010 &vring_used_event(&vq->split.vring),
1011 cpu_to_virtio16(vq->vq.vdev, vq->last_used_idx));
1012
1013 LAST_ADD_TIME_INVALID(vq);
1014
1015 END_USE(vq);
1016 return ret;
1017 }
1018
virtqueue_get_buf_ctx_split_in_order(struct vring_virtqueue * vq,unsigned int * len,void ** ctx)1019 static void *virtqueue_get_buf_ctx_split_in_order(struct vring_virtqueue *vq,
1020 unsigned int *len,
1021 void **ctx)
1022 {
1023 void *ret;
1024 unsigned int num = vq->split.vring.num;
1025 unsigned int num_free = vq->vq.num_free;
1026 u16 last_used, last_used_idx;
1027
1028 START_USE(vq);
1029
1030 if (unlikely(vq->broken)) {
1031 END_USE(vq);
1032 return NULL;
1033 }
1034
1035 last_used = vq->last_used & (num - 1);
1036 last_used_idx = vq->last_used_idx & (num - 1);
1037
1038 if (vq->batch_last.id == UINT_MAX) {
1039 if (!more_used_split_in_order(vq)) {
1040 pr_debug("No more buffers in queue\n");
1041 END_USE(vq);
1042 return NULL;
1043 }
1044
1045 /*
1046 * Only get used array entries after they have been
1047 * exposed by host.
1048 */
1049 virtio_rmb(vq->weak_barriers);
1050
1051 vq->batch_last.id = vring_read_split_used_id(vq, last_used_idx);
1052 vq->batch_last.len = vring_read_split_used_len(vq, last_used_idx);
1053 }
1054
1055 if (vq->batch_last.id == last_used) {
1056 vq->batch_last.id = UINT_MAX;
1057 *len = vq->batch_last.len;
1058 } else {
1059 *len = vq->split.desc_state[last_used].total_in_len;
1060 }
1061
1062 if (unlikely(!vq->split.desc_state[last_used].data)) {
1063 BAD_RING(vq, "id %u is not a head!\n", last_used);
1064 return NULL;
1065 }
1066
1067 /* detach_buf_split clears data, so grab it now. */
1068 ret = vq->split.desc_state[last_used].data;
1069 detach_buf_split_in_order(vq, last_used, ctx);
1070
1071 vq->last_used_idx++;
1072 vq->last_used += (vq->vq.num_free - num_free);
1073 /* If we expect an interrupt for the next entry, tell host
1074 * by writing event index and flush out the write before
1075 * the read in the next get_buf call. */
1076 if (!(vq->split.avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT))
1077 virtio_store_mb(vq->weak_barriers,
1078 &vring_used_event(&vq->split.vring),
1079 cpu_to_virtio16(vq->vq.vdev, vq->last_used_idx));
1080
1081 LAST_ADD_TIME_INVALID(vq);
1082
1083 END_USE(vq);
1084 return ret;
1085 }
1086
virtqueue_disable_cb_split(struct vring_virtqueue * vq)1087 static void virtqueue_disable_cb_split(struct vring_virtqueue *vq)
1088 {
1089 if (!(vq->split.avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT)) {
1090 vq->split.avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT;
1091
1092 /*
1093 * If device triggered an event already it won't trigger one again:
1094 * no need to disable.
1095 */
1096 if (vq->event_triggered)
1097 return;
1098
1099 if (vq->event)
1100 /* TODO: this is a hack. Figure out a cleaner value to write. */
1101 vring_used_event(&vq->split.vring) = 0x0;
1102 else
1103 vq->split.vring.avail->flags =
1104 cpu_to_virtio16(vq->vq.vdev,
1105 vq->split.avail_flags_shadow);
1106 }
1107 }
1108
virtqueue_enable_cb_prepare_split(struct vring_virtqueue * vq)1109 static unsigned int virtqueue_enable_cb_prepare_split(struct vring_virtqueue *vq)
1110 {
1111 u16 last_used_idx;
1112
1113 START_USE(vq);
1114
1115 /* We optimistically turn back on interrupts, then check if there was
1116 * more to do. */
1117 /* Depending on the VIRTIO_RING_F_EVENT_IDX feature, we need to
1118 * either clear the flags bit or point the event index at the next
1119 * entry. Always do both to keep code simple. */
1120 if (vq->split.avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT) {
1121 vq->split.avail_flags_shadow &= ~VRING_AVAIL_F_NO_INTERRUPT;
1122 if (!vq->event)
1123 vq->split.vring.avail->flags =
1124 cpu_to_virtio16(vq->vq.vdev,
1125 vq->split.avail_flags_shadow);
1126 }
1127 vring_used_event(&vq->split.vring) = cpu_to_virtio16(vq->vq.vdev,
1128 last_used_idx = vq->last_used_idx);
1129 END_USE(vq);
1130 return last_used_idx;
1131 }
1132
virtqueue_enable_cb_delayed_split(struct vring_virtqueue * vq)1133 static bool virtqueue_enable_cb_delayed_split(struct vring_virtqueue *vq)
1134 {
1135 u16 bufs;
1136
1137 START_USE(vq);
1138
1139 /* We optimistically turn back on interrupts, then check if there was
1140 * more to do. */
1141 /* Depending on the VIRTIO_RING_F_USED_EVENT_IDX feature, we need to
1142 * either clear the flags bit or point the event index at the next
1143 * entry. Always update the event index to keep code simple. */
1144 if (vq->split.avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT) {
1145 vq->split.avail_flags_shadow &= ~VRING_AVAIL_F_NO_INTERRUPT;
1146 if (!vq->event)
1147 vq->split.vring.avail->flags =
1148 cpu_to_virtio16(vq->vq.vdev,
1149 vq->split.avail_flags_shadow);
1150 }
1151 /* TODO: tune this threshold */
1152 bufs = (u16)(vq->split.avail_idx_shadow - vq->last_used_idx) * 3 / 4;
1153
1154 virtio_store_mb(vq->weak_barriers,
1155 &vring_used_event(&vq->split.vring),
1156 cpu_to_virtio16(vq->vq.vdev, vq->last_used_idx + bufs));
1157
1158 if (unlikely((u16)(vring_read_split_used_idx(vq)
1159 - vq->last_used_idx) > bufs)) {
1160 END_USE(vq);
1161 return false;
1162 }
1163
1164 END_USE(vq);
1165 return true;
1166 }
1167
virtqueue_detach_unused_buf_split(struct vring_virtqueue * vq)1168 static void *virtqueue_detach_unused_buf_split(struct vring_virtqueue *vq)
1169 {
1170 unsigned int i;
1171 void *buf;
1172
1173 START_USE(vq);
1174
1175 for (i = 0; i < vq->split.vring.num; i++) {
1176 if (!vq->split.desc_state[i].data)
1177 continue;
1178 /* detach_buf_split clears data, so grab it now. */
1179 buf = vq->split.desc_state[i].data;
1180 if (virtqueue_is_in_order(vq))
1181 detach_buf_split_in_order(vq, i, NULL);
1182 else
1183 detach_buf_split(vq, i, NULL);
1184 vq->split.avail_idx_shadow--;
1185 vq->split.vring.avail->idx = cpu_to_virtio16(vq->vq.vdev,
1186 vq->split.avail_idx_shadow);
1187 END_USE(vq);
1188 return buf;
1189 }
1190 /* That should have freed everything. */
1191 BUG_ON(vq->vq.num_free != vq->split.vring.num);
1192
1193 END_USE(vq);
1194 return NULL;
1195 }
1196
virtqueue_vring_init_split(struct vring_virtqueue_split * vring_split,struct vring_virtqueue * vq)1197 static void virtqueue_vring_init_split(struct vring_virtqueue_split *vring_split,
1198 struct vring_virtqueue *vq)
1199 {
1200 struct virtio_device *vdev;
1201
1202 vdev = vq->vq.vdev;
1203
1204 vring_split->avail_flags_shadow = 0;
1205 vring_split->avail_idx_shadow = 0;
1206
1207 /* No callback? Tell other side not to bother us. */
1208 if (!vq->vq.callback) {
1209 vring_split->avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT;
1210 if (!vq->event)
1211 vring_split->vring.avail->flags = cpu_to_virtio16(vdev,
1212 vring_split->avail_flags_shadow);
1213 }
1214 }
1215
virtqueue_reset_split(struct vring_virtqueue * vq)1216 static void virtqueue_reset_split(struct vring_virtqueue *vq)
1217 {
1218 int num;
1219
1220 num = vq->split.vring.num;
1221
1222 vq->split.vring.avail->flags = 0;
1223 vq->split.vring.avail->idx = 0;
1224
1225 /* reset avail event */
1226 vq->split.vring.avail->ring[num] = 0;
1227
1228 vq->split.vring.used->flags = 0;
1229 vq->split.vring.used->idx = 0;
1230
1231 /* reset used event */
1232 *(__virtio16 *)&(vq->split.vring.used->ring[num]) = 0;
1233
1234 virtqueue_init(vq, num);
1235
1236 virtqueue_vring_init_split(&vq->split, vq);
1237 }
1238
virtqueue_vring_attach_split(struct vring_virtqueue * vq,struct vring_virtqueue_split * vring_split)1239 static void virtqueue_vring_attach_split(struct vring_virtqueue *vq,
1240 struct vring_virtqueue_split *vring_split)
1241 {
1242 vq->split = *vring_split;
1243
1244 /* Put everything in free lists. */
1245 vq->free_head = 0;
1246 vq->batch_last.id = UINT_MAX;
1247 }
1248
vring_alloc_state_extra_split(struct vring_virtqueue_split * vring_split)1249 static int vring_alloc_state_extra_split(struct vring_virtqueue_split *vring_split)
1250 {
1251 struct vring_desc_state_split *state;
1252 struct vring_desc_extra *extra;
1253 u32 num = vring_split->vring.num;
1254
1255 state = kmalloc_objs(struct vring_desc_state_split, num);
1256 if (!state)
1257 goto err_state;
1258
1259 extra = vring_alloc_desc_extra(num);
1260 if (!extra)
1261 goto err_extra;
1262
1263 memset(state, 0, num * sizeof(struct vring_desc_state_split));
1264
1265 vring_split->desc_state = state;
1266 vring_split->desc_extra = extra;
1267 return 0;
1268
1269 err_extra:
1270 kfree(state);
1271 err_state:
1272 return -ENOMEM;
1273 }
1274
vring_free_split(struct vring_virtqueue_split * vring_split,struct virtio_device * vdev,union virtio_map map)1275 static void vring_free_split(struct vring_virtqueue_split *vring_split,
1276 struct virtio_device *vdev,
1277 union virtio_map map)
1278 {
1279 vring_free_queue(vdev, vring_split->queue_size_in_bytes,
1280 vring_split->vring.desc,
1281 vring_split->queue_dma_addr,
1282 map);
1283
1284 kfree(vring_split->desc_state);
1285 kfree(vring_split->desc_extra);
1286 }
1287
vring_alloc_queue_split(struct vring_virtqueue_split * vring_split,struct virtio_device * vdev,u32 num,unsigned int vring_align,bool may_reduce_num,union virtio_map map)1288 static int vring_alloc_queue_split(struct vring_virtqueue_split *vring_split,
1289 struct virtio_device *vdev,
1290 u32 num,
1291 unsigned int vring_align,
1292 bool may_reduce_num,
1293 union virtio_map map)
1294 {
1295 void *queue = NULL;
1296 dma_addr_t dma_addr;
1297
1298 /* We assume num is a power of 2. */
1299 if (!is_power_of_2(num)) {
1300 dev_warn(&vdev->dev, "Bad virtqueue length %u\n", num);
1301 return -EINVAL;
1302 }
1303
1304 /* TODO: allocate each queue chunk individually */
1305 for (; num && vring_size(num, vring_align) > PAGE_SIZE; num /= 2) {
1306 queue = vring_alloc_queue(vdev, vring_size(num, vring_align),
1307 &dma_addr,
1308 GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
1309 map);
1310 if (queue)
1311 break;
1312 if (!may_reduce_num)
1313 return -ENOMEM;
1314 }
1315
1316 if (!num)
1317 return -ENOMEM;
1318
1319 if (!queue) {
1320 /* Try to get a single page. You are my only hope! */
1321 queue = vring_alloc_queue(vdev, vring_size(num, vring_align),
1322 &dma_addr, GFP_KERNEL | __GFP_ZERO,
1323 map);
1324 }
1325 if (!queue)
1326 return -ENOMEM;
1327
1328 vring_init(&vring_split->vring, num, queue, vring_align);
1329
1330 vring_split->queue_dma_addr = dma_addr;
1331 vring_split->queue_size_in_bytes = vring_size(num, vring_align);
1332
1333 vring_split->vring_align = vring_align;
1334 vring_split->may_reduce_num = may_reduce_num;
1335
1336 return 0;
1337 }
1338
1339 static const struct virtqueue_ops split_ops;
1340
__vring_new_virtqueue_split(unsigned int index,struct vring_virtqueue_split * vring_split,struct virtio_device * vdev,bool weak_barriers,bool context,bool (* notify)(struct virtqueue *),void (* callback)(struct virtqueue *),const char * name,union virtio_map map)1341 static struct virtqueue *__vring_new_virtqueue_split(unsigned int index,
1342 struct vring_virtqueue_split *vring_split,
1343 struct virtio_device *vdev,
1344 bool weak_barriers,
1345 bool context,
1346 bool (*notify)(struct virtqueue *),
1347 void (*callback)(struct virtqueue *),
1348 const char *name,
1349 union virtio_map map)
1350 {
1351 struct vring_virtqueue *vq;
1352 int err;
1353
1354 vq = kmalloc_obj(*vq);
1355 if (!vq)
1356 return NULL;
1357
1358 vq->vq.callback = callback;
1359 vq->vq.vdev = vdev;
1360 vq->vq.name = name;
1361 vq->vq.index = index;
1362 vq->vq.reset = false;
1363 vq->we_own_ring = false;
1364 vq->notify = notify;
1365 vq->weak_barriers = weak_barriers;
1366 #ifdef CONFIG_VIRTIO_HARDEN_NOTIFICATION
1367 vq->broken = true;
1368 #else
1369 vq->broken = false;
1370 #endif
1371 vq->map = map;
1372 vq->use_map_api = vring_use_map_api(vdev);
1373
1374 vq->indirect = virtio_has_feature(vdev, VIRTIO_RING_F_INDIRECT_DESC) &&
1375 !context;
1376 vq->event = virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX);
1377 vq->layout = virtio_has_feature(vdev, VIRTIO_F_IN_ORDER) ?
1378 VQ_LAYOUT_SPLIT_IN_ORDER : VQ_LAYOUT_SPLIT;
1379
1380 if (virtio_has_feature(vdev, VIRTIO_F_ORDER_PLATFORM))
1381 vq->weak_barriers = false;
1382
1383 err = vring_alloc_state_extra_split(vring_split);
1384 if (err) {
1385 kfree(vq);
1386 return NULL;
1387 }
1388
1389 virtqueue_vring_init_split(vring_split, vq);
1390
1391 virtqueue_init(vq, vring_split->vring.num);
1392 virtqueue_vring_attach_split(vq, vring_split);
1393
1394 spin_lock(&vdev->vqs_list_lock);
1395 list_add_tail(&vq->vq.list, &vdev->vqs);
1396 spin_unlock(&vdev->vqs_list_lock);
1397 return &vq->vq;
1398 }
1399
vring_create_virtqueue_split(unsigned int index,unsigned int num,unsigned int vring_align,struct virtio_device * vdev,bool weak_barriers,bool may_reduce_num,bool context,bool (* notify)(struct virtqueue *),void (* callback)(struct virtqueue *),const char * name,union virtio_map map)1400 static struct virtqueue *vring_create_virtqueue_split(
1401 unsigned int index,
1402 unsigned int num,
1403 unsigned int vring_align,
1404 struct virtio_device *vdev,
1405 bool weak_barriers,
1406 bool may_reduce_num,
1407 bool context,
1408 bool (*notify)(struct virtqueue *),
1409 void (*callback)(struct virtqueue *),
1410 const char *name,
1411 union virtio_map map)
1412 {
1413 struct vring_virtqueue_split vring_split = {};
1414 struct virtqueue *vq;
1415 int err;
1416
1417 err = vring_alloc_queue_split(&vring_split, vdev, num, vring_align,
1418 may_reduce_num, map);
1419 if (err)
1420 return NULL;
1421
1422 vq = __vring_new_virtqueue_split(index, &vring_split, vdev, weak_barriers,
1423 context, notify, callback, name, map);
1424 if (!vq) {
1425 vring_free_split(&vring_split, vdev, map);
1426 return NULL;
1427 }
1428
1429 to_vvq(vq)->we_own_ring = true;
1430
1431 return vq;
1432 }
1433
virtqueue_resize_split(struct vring_virtqueue * vq,u32 num)1434 static int virtqueue_resize_split(struct vring_virtqueue *vq, u32 num)
1435 {
1436 struct vring_virtqueue_split vring_split = {};
1437 struct virtio_device *vdev = vq->vq.vdev;
1438 int err;
1439
1440 err = vring_alloc_queue_split(&vring_split, vdev, num,
1441 vq->split.vring_align,
1442 vq->split.may_reduce_num,
1443 vq->map);
1444 if (err)
1445 goto err;
1446
1447 err = vring_alloc_state_extra_split(&vring_split);
1448 if (err)
1449 goto err_state_extra;
1450
1451 vring_free(&vq->vq);
1452
1453 virtqueue_vring_init_split(&vring_split, vq);
1454
1455 virtqueue_init(vq, vring_split.vring.num);
1456 virtqueue_vring_attach_split(vq, &vring_split);
1457
1458 return 0;
1459
1460 err_state_extra:
1461 vring_free_split(&vring_split, vdev, vq->map);
1462 err:
1463 virtqueue_reset_split(vq);
1464 return -ENOMEM;
1465 }
1466
1467
1468 /*
1469 * Packed ring specific functions - *_packed().
1470 */
packed_used_wrap_counter(u16 last_used_idx)1471 static bool packed_used_wrap_counter(u16 last_used_idx)
1472 {
1473 return !!(last_used_idx & (1 << VRING_PACKED_EVENT_F_WRAP_CTR));
1474 }
1475
packed_last_used(u16 last_used_idx)1476 static u16 packed_last_used(u16 last_used_idx)
1477 {
1478 return last_used_idx & ~(-(1 << VRING_PACKED_EVENT_F_WRAP_CTR));
1479 }
1480
vring_unmap_extra_packed(const struct vring_virtqueue * vq,const struct vring_desc_extra * extra)1481 static void vring_unmap_extra_packed(const struct vring_virtqueue *vq,
1482 const struct vring_desc_extra *extra)
1483 {
1484 u16 flags;
1485
1486 flags = extra->flags;
1487
1488 if (flags & VRING_DESC_F_INDIRECT) {
1489 if (!vq->use_map_api)
1490 return;
1491 } else if (!vring_need_unmap_buffer(vq, extra))
1492 return;
1493
1494 virtqueue_unmap_page_attrs(&vq->vq,
1495 extra->addr, extra->len,
1496 (flags & VRING_DESC_F_WRITE) ?
1497 DMA_FROM_DEVICE : DMA_TO_DEVICE,
1498 0);
1499 }
1500
alloc_indirect_packed(unsigned int total_sg,gfp_t gfp)1501 static struct vring_packed_desc *alloc_indirect_packed(unsigned int total_sg,
1502 gfp_t gfp)
1503 {
1504 struct vring_desc_extra *extra;
1505 struct vring_packed_desc *desc;
1506 int i, size;
1507
1508 /*
1509 * We require lowmem mappings for the descriptors because
1510 * otherwise virt_to_phys will give us bogus addresses in the
1511 * virtqueue.
1512 */
1513 gfp &= ~__GFP_HIGHMEM;
1514
1515 size = (sizeof(*desc) + sizeof(*extra)) * total_sg;
1516
1517 desc = kmalloc(size, gfp);
1518 if (!desc)
1519 return NULL;
1520
1521 extra = (struct vring_desc_extra *)&desc[total_sg];
1522
1523 for (i = 0; i < total_sg; i++)
1524 extra[i].next = i + 1;
1525
1526 return desc;
1527 }
1528
virtqueue_add_indirect_packed(struct vring_virtqueue * vq,struct scatterlist * sgs[],unsigned int total_sg,unsigned int out_sgs,unsigned int in_sgs,void * data,bool premapped,gfp_t gfp,u16 id,unsigned long attr)1529 static int virtqueue_add_indirect_packed(struct vring_virtqueue *vq,
1530 struct scatterlist *sgs[],
1531 unsigned int total_sg,
1532 unsigned int out_sgs,
1533 unsigned int in_sgs,
1534 void *data,
1535 bool premapped,
1536 gfp_t gfp,
1537 u16 id,
1538 unsigned long attr)
1539 {
1540 struct vring_desc_extra *extra;
1541 struct vring_packed_desc *desc;
1542 struct scatterlist *sg;
1543 unsigned int i, n, err_idx, len, total_in_len = 0;
1544 u16 head;
1545 dma_addr_t addr;
1546
1547 head = vq->packed.next_avail_idx;
1548 desc = alloc_indirect_packed(total_sg, gfp);
1549 if (!desc)
1550 return -ENOMEM;
1551
1552 extra = (struct vring_desc_extra *)&desc[total_sg];
1553
1554 if (unlikely(vq->vq.num_free < 1)) {
1555 pr_debug("Can't add buf len 1 - avail = 0\n");
1556 kfree(desc);
1557 END_USE(vq);
1558 return -ENOSPC;
1559 }
1560
1561 i = 0;
1562
1563 for (n = 0; n < out_sgs + in_sgs; n++) {
1564 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
1565 if (vring_map_one_sg(vq, sg, n < out_sgs ?
1566 DMA_TO_DEVICE : DMA_FROM_DEVICE,
1567 &addr, &len, premapped, attr))
1568 goto unmap_release;
1569
1570 desc[i].flags = cpu_to_le16(n < out_sgs ?
1571 0 : VRING_DESC_F_WRITE);
1572 desc[i].addr = cpu_to_le64(addr);
1573 desc[i].len = cpu_to_le32(len);
1574
1575 if (unlikely(vq->use_map_api)) {
1576 extra[i].addr = premapped ? DMA_MAPPING_ERROR : addr;
1577 extra[i].len = len;
1578 extra[i].flags = n < out_sgs ? 0 : VRING_DESC_F_WRITE;
1579 }
1580
1581 if (n >= out_sgs)
1582 total_in_len += len;
1583 i++;
1584 }
1585 }
1586
1587 /* Now that the indirect table is filled in, map it. */
1588 addr = vring_map_single(vq, desc,
1589 total_sg * sizeof(struct vring_packed_desc),
1590 DMA_TO_DEVICE);
1591 if (vring_mapping_error(vq, addr))
1592 goto unmap_release;
1593
1594 vq->packed.vring.desc[head].addr = cpu_to_le64(addr);
1595 vq->packed.vring.desc[head].len = cpu_to_le32(total_sg *
1596 sizeof(struct vring_packed_desc));
1597 vq->packed.vring.desc[head].id = cpu_to_le16(id);
1598
1599 if (vq->use_map_api) {
1600 vq->packed.desc_extra[id].addr = addr;
1601 vq->packed.desc_extra[id].len = total_sg *
1602 sizeof(struct vring_packed_desc);
1603 vq->packed.desc_extra[id].flags = VRING_DESC_F_INDIRECT |
1604 vq->packed.avail_used_flags;
1605 }
1606
1607 /*
1608 * A driver MUST NOT make the first descriptor in the list
1609 * available before all subsequent descriptors comprising
1610 * the list are made available.
1611 */
1612 virtio_wmb(vq->weak_barriers);
1613 vq->packed.vring.desc[head].flags = cpu_to_le16(VRING_DESC_F_INDIRECT |
1614 vq->packed.avail_used_flags);
1615
1616 /* We're using some buffers from the free list. */
1617 vq->vq.num_free -= 1;
1618
1619 /* Update free pointer */
1620 n = head + 1;
1621 if (n >= vq->packed.vring.num) {
1622 n = 0;
1623 vq->packed.avail_wrap_counter ^= 1;
1624 vq->packed.avail_used_flags ^=
1625 1 << VRING_PACKED_DESC_F_AVAIL |
1626 1 << VRING_PACKED_DESC_F_USED;
1627 }
1628 vq->packed.next_avail_idx = n;
1629 if (!virtqueue_is_in_order(vq))
1630 vq->free_head = vq->packed.desc_extra[id].next;
1631
1632 /* Store token and indirect buffer state. */
1633 vq->packed.desc_state[id].num = 1;
1634 vq->packed.desc_state[id].data = data;
1635 vq->packed.desc_state[id].indir_desc = desc;
1636 vq->packed.desc_state[id].last = id;
1637 vq->packed.desc_state[id].total_in_len = total_in_len;
1638
1639 vq->num_added += 1;
1640
1641 pr_debug("Added buffer head %i to %p\n", head, vq);
1642 END_USE(vq);
1643
1644 return 0;
1645
1646 unmap_release:
1647 err_idx = i;
1648
1649 for (i = 0; i < err_idx; i++)
1650 vring_unmap_extra_packed(vq, &extra[i]);
1651
1652 kfree(desc);
1653
1654 END_USE(vq);
1655 return -ENOMEM;
1656 }
1657
virtqueue_add_packed(struct vring_virtqueue * vq,struct scatterlist * sgs[],unsigned int total_sg,unsigned int out_sgs,unsigned int in_sgs,void * data,void * ctx,bool premapped,gfp_t gfp,unsigned long attr)1658 static inline int virtqueue_add_packed(struct vring_virtqueue *vq,
1659 struct scatterlist *sgs[],
1660 unsigned int total_sg,
1661 unsigned int out_sgs,
1662 unsigned int in_sgs,
1663 void *data,
1664 void *ctx,
1665 bool premapped,
1666 gfp_t gfp,
1667 unsigned long attr)
1668 {
1669 struct vring_packed_desc *desc;
1670 struct scatterlist *sg;
1671 unsigned int i, n, c, descs_used, err_idx, len;
1672 __le16 head_flags, flags;
1673 u16 head, id, prev, curr, avail_used_flags, unpub_flags;
1674 int err;
1675
1676 START_USE(vq);
1677
1678 BUG_ON(data == NULL);
1679 BUG_ON(ctx && vq->indirect);
1680
1681 if (unlikely(vq->broken)) {
1682 END_USE(vq);
1683 return -EIO;
1684 }
1685
1686 LAST_ADD_TIME_UPDATE(vq);
1687
1688 BUG_ON(total_sg == 0);
1689
1690 if (virtqueue_use_indirect(vq, total_sg)) {
1691 id = vq->free_head;
1692 BUG_ON(id == vq->packed.vring.num);
1693 err = virtqueue_add_indirect_packed(vq, sgs, total_sg, out_sgs,
1694 in_sgs, data, premapped, gfp,
1695 id, attr);
1696 if (err != -ENOMEM) {
1697 END_USE(vq);
1698 return err;
1699 }
1700
1701 /* fall back on direct */
1702 }
1703
1704 head = vq->packed.next_avail_idx;
1705 avail_used_flags = vq->packed.avail_used_flags;
1706
1707 WARN_ON_ONCE(total_sg > vq->packed.vring.num && !vq->indirect);
1708
1709 desc = vq->packed.vring.desc;
1710 i = head;
1711 descs_used = total_sg;
1712
1713 if (unlikely(vq->vq.num_free < descs_used)) {
1714 pr_debug("Can't add buf len %i - avail = %i\n",
1715 descs_used, vq->vq.num_free);
1716 END_USE(vq);
1717 return -ENOSPC;
1718 }
1719
1720 id = vq->free_head;
1721 BUG_ON(id == vq->packed.vring.num);
1722
1723 curr = id;
1724 c = 0;
1725 for (n = 0; n < out_sgs + in_sgs; n++) {
1726 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
1727 dma_addr_t addr;
1728
1729 if (vring_map_one_sg(vq, sg, n < out_sgs ?
1730 DMA_TO_DEVICE : DMA_FROM_DEVICE,
1731 &addr, &len, premapped, attr))
1732 goto unmap_release;
1733
1734 flags = cpu_to_le16(vq->packed.avail_used_flags |
1735 (++c == total_sg ? 0 : VRING_DESC_F_NEXT) |
1736 (n < out_sgs ? 0 : VRING_DESC_F_WRITE));
1737 if (i == head)
1738 head_flags = flags;
1739 else
1740 desc[i].flags = flags;
1741
1742 desc[i].addr = cpu_to_le64(addr);
1743 desc[i].len = cpu_to_le32(len);
1744 desc[i].id = cpu_to_le16(id);
1745
1746 if (unlikely(vq->use_map_api)) {
1747 vq->packed.desc_extra[curr].addr = premapped ?
1748 DMA_MAPPING_ERROR : addr;
1749 vq->packed.desc_extra[curr].len = len;
1750 vq->packed.desc_extra[curr].flags =
1751 le16_to_cpu(flags);
1752 }
1753 prev = curr;
1754 curr = vq->packed.desc_extra[curr].next;
1755
1756 if ((unlikely(++i >= vq->packed.vring.num))) {
1757 i = 0;
1758 vq->packed.avail_used_flags ^=
1759 1 << VRING_PACKED_DESC_F_AVAIL |
1760 1 << VRING_PACKED_DESC_F_USED;
1761 }
1762 }
1763 }
1764
1765 if (i <= head)
1766 vq->packed.avail_wrap_counter ^= 1;
1767
1768 /* We're using some buffers from the free list. */
1769 vq->vq.num_free -= descs_used;
1770
1771 /* Update free pointer */
1772 vq->packed.next_avail_idx = i;
1773 vq->free_head = curr;
1774
1775 /* Store token. */
1776 vq->packed.desc_state[id].num = descs_used;
1777 vq->packed.desc_state[id].data = data;
1778 vq->packed.desc_state[id].indir_desc = ctx;
1779 vq->packed.desc_state[id].last = prev;
1780
1781 /*
1782 * A driver MUST NOT make the first descriptor in the list
1783 * available before all subsequent descriptors comprising
1784 * the list are made available.
1785 */
1786 virtio_wmb(vq->weak_barriers);
1787 vq->packed.vring.desc[head].flags = head_flags;
1788 vq->num_added += descs_used;
1789
1790 pr_debug("Added buffer head %i to %p\n", head, vq);
1791 END_USE(vq);
1792
1793 return 0;
1794
1795 unmap_release:
1796 err_idx = i;
1797 i = head;
1798 curr = vq->free_head;
1799
1800 vq->packed.avail_used_flags = avail_used_flags;
1801 unpub_flags = avail_used_flags ^ (1 << VRING_PACKED_DESC_F_AVAIL |
1802 1 << VRING_PACKED_DESC_F_USED);
1803
1804 for (n = 0; n < total_sg; n++) {
1805 if (i == err_idx)
1806 break;
1807 /*
1808 * The mapping loop made every descriptor but the head
1809 * available. Stamp the previous wrap counter's AVAIL and USED
1810 * bits on those, so that a later and shorter chain at this head
1811 * does not leave one of them available beyond its own last
1812 * descriptor. Marking them used instead would hand
1813 * is_used_desc_packed() a completion we never made.
1814 */
1815 if (i != head)
1816 desc[i].flags = cpu_to_le16(unpub_flags);
1817 vring_unmap_extra_packed(vq, &vq->packed.desc_extra[curr]);
1818 curr = vq->packed.desc_extra[curr].next;
1819 i++;
1820 if (i >= vq->packed.vring.num) {
1821 i = 0;
1822 unpub_flags ^= 1 << VRING_PACKED_DESC_F_AVAIL |
1823 1 << VRING_PACKED_DESC_F_USED;
1824 }
1825 }
1826
1827 END_USE(vq);
1828 return -EIO;
1829 }
1830
virtqueue_add_packed_in_order(struct vring_virtqueue * vq,struct scatterlist * sgs[],unsigned int total_sg,unsigned int out_sgs,unsigned int in_sgs,void * data,void * ctx,bool premapped,gfp_t gfp,unsigned long attr)1831 static inline int virtqueue_add_packed_in_order(struct vring_virtqueue *vq,
1832 struct scatterlist *sgs[],
1833 unsigned int total_sg,
1834 unsigned int out_sgs,
1835 unsigned int in_sgs,
1836 void *data,
1837 void *ctx,
1838 bool premapped,
1839 gfp_t gfp,
1840 unsigned long attr)
1841 {
1842 struct vring_packed_desc *desc;
1843 struct scatterlist *sg;
1844 unsigned int i, n, sg_count, err_idx, total_in_len = 0;
1845 __le16 head_flags, flags;
1846 u16 head, avail_used_flags, unpub_flags;
1847 bool avail_wrap_counter;
1848 int err;
1849
1850 START_USE(vq);
1851
1852 BUG_ON(data == NULL);
1853 BUG_ON(ctx && vq->indirect);
1854
1855 if (unlikely(vq->broken)) {
1856 END_USE(vq);
1857 return -EIO;
1858 }
1859
1860 LAST_ADD_TIME_UPDATE(vq);
1861
1862 BUG_ON(total_sg == 0);
1863
1864 if (virtqueue_use_indirect(vq, total_sg)) {
1865 err = virtqueue_add_indirect_packed(vq, sgs, total_sg, out_sgs,
1866 in_sgs, data, premapped, gfp,
1867 vq->packed.next_avail_idx,
1868 attr);
1869 if (err != -ENOMEM) {
1870 END_USE(vq);
1871 return err;
1872 }
1873
1874 /* fall back on direct */
1875 }
1876
1877 head = vq->packed.next_avail_idx;
1878 avail_used_flags = vq->packed.avail_used_flags;
1879 avail_wrap_counter = vq->packed.avail_wrap_counter;
1880
1881 WARN_ON_ONCE(total_sg > vq->packed.vring.num && !vq->indirect);
1882
1883 desc = vq->packed.vring.desc;
1884 i = head;
1885
1886 if (unlikely(vq->vq.num_free < total_sg)) {
1887 pr_debug("Can't add buf len %i - avail = %i\n",
1888 total_sg, vq->vq.num_free);
1889 END_USE(vq);
1890 return -ENOSPC;
1891 }
1892
1893 sg_count = 0;
1894 for (n = 0; n < out_sgs + in_sgs; n++) {
1895 for (sg = sgs[n]; sg; sg = sg_next(sg)) {
1896 dma_addr_t addr;
1897 u32 len;
1898
1899 flags = 0;
1900 if (++sg_count != total_sg)
1901 flags |= cpu_to_le16(VRING_DESC_F_NEXT);
1902 if (n >= out_sgs)
1903 flags |= cpu_to_le16(VRING_DESC_F_WRITE);
1904
1905 if (vring_map_one_sg(vq, sg, n < out_sgs ?
1906 DMA_TO_DEVICE : DMA_FROM_DEVICE,
1907 &addr, &len, premapped, attr))
1908 goto unmap_release;
1909
1910 flags |= cpu_to_le16(vq->packed.avail_used_flags);
1911
1912 if (i == head)
1913 head_flags = flags;
1914 else
1915 desc[i].flags = flags;
1916
1917 desc[i].addr = cpu_to_le64(addr);
1918 desc[i].len = cpu_to_le32(len);
1919 desc[i].id = cpu_to_le16(head);
1920
1921 if (unlikely(vq->use_map_api)) {
1922 vq->packed.desc_extra[i].addr = premapped ?
1923 DMA_MAPPING_ERROR : addr;
1924 vq->packed.desc_extra[i].len = len;
1925 vq->packed.desc_extra[i].flags =
1926 le16_to_cpu(flags);
1927 }
1928
1929 if ((unlikely(++i >= vq->packed.vring.num))) {
1930 i = 0;
1931 vq->packed.avail_used_flags ^=
1932 1 << VRING_PACKED_DESC_F_AVAIL |
1933 1 << VRING_PACKED_DESC_F_USED;
1934 vq->packed.avail_wrap_counter ^= 1;
1935 }
1936
1937 if (n >= out_sgs)
1938 total_in_len += len;
1939 }
1940 }
1941
1942 /* We're using some buffers from the free list. */
1943 vq->vq.num_free -= total_sg;
1944
1945 /* Update free pointer */
1946 vq->packed.next_avail_idx = i;
1947
1948 /* Store token. */
1949 vq->packed.desc_state[head].num = total_sg;
1950 vq->packed.desc_state[head].data = data;
1951 vq->packed.desc_state[head].indir_desc = ctx;
1952 vq->packed.desc_state[head].total_in_len = total_in_len;
1953
1954 /*
1955 * A driver MUST NOT make the first descriptor in the list
1956 * available before all subsequent descriptors comprising
1957 * the list are made available.
1958 */
1959 virtio_wmb(vq->weak_barriers);
1960 vq->packed.vring.desc[head].flags = head_flags;
1961 vq->num_added += total_sg;
1962
1963 pr_debug("Added buffer head %i to %p\n", head, vq);
1964 END_USE(vq);
1965
1966 return 0;
1967
1968 unmap_release:
1969 err_idx = i;
1970 i = head;
1971 vq->packed.avail_used_flags = avail_used_flags;
1972 vq->packed.avail_wrap_counter = avail_wrap_counter;
1973 unpub_flags = avail_used_flags ^ (1 << VRING_PACKED_DESC_F_AVAIL |
1974 1 << VRING_PACKED_DESC_F_USED);
1975
1976 for (n = 0; n < total_sg; n++) {
1977 if (i == err_idx)
1978 break;
1979 /*
1980 * The mapping loop made every descriptor but the head
1981 * available. Stamp the previous wrap counter's AVAIL and USED
1982 * bits on those, so that a later and shorter chain at this head
1983 * does not leave one of them available beyond its own last
1984 * descriptor. Marking them used instead would hand
1985 * is_used_desc_packed() a completion we never made.
1986 */
1987 if (i != head)
1988 desc[i].flags = cpu_to_le16(unpub_flags);
1989 vring_unmap_extra_packed(vq, &vq->packed.desc_extra[i]);
1990 i++;
1991 if (i >= vq->packed.vring.num) {
1992 i = 0;
1993 unpub_flags ^= 1 << VRING_PACKED_DESC_F_AVAIL |
1994 1 << VRING_PACKED_DESC_F_USED;
1995 }
1996 }
1997
1998 END_USE(vq);
1999 return -EIO;
2000 }
2001
virtqueue_kick_prepare_packed(struct vring_virtqueue * vq)2002 static bool virtqueue_kick_prepare_packed(struct vring_virtqueue *vq)
2003 {
2004 u16 new, old, off_wrap, flags, wrap_counter, event_idx;
2005 bool needs_kick;
2006 union {
2007 struct {
2008 __le16 off_wrap;
2009 __le16 flags;
2010 };
2011 u32 u32;
2012 } snapshot;
2013
2014 START_USE(vq);
2015
2016 /*
2017 * We need to expose the new flags value before checking notification
2018 * suppressions.
2019 */
2020 virtio_mb(vq->weak_barriers);
2021
2022 old = vq->packed.next_avail_idx - vq->num_added;
2023 new = vq->packed.next_avail_idx;
2024 vq->num_added = 0;
2025
2026 snapshot.u32 = *(u32 *)vq->packed.vring.device;
2027 flags = le16_to_cpu(snapshot.flags);
2028
2029 LAST_ADD_TIME_CHECK(vq);
2030 LAST_ADD_TIME_INVALID(vq);
2031
2032 if (flags != VRING_PACKED_EVENT_FLAG_DESC) {
2033 needs_kick = (flags != VRING_PACKED_EVENT_FLAG_DISABLE);
2034 goto out;
2035 }
2036
2037 off_wrap = le16_to_cpu(snapshot.off_wrap);
2038
2039 wrap_counter = off_wrap >> VRING_PACKED_EVENT_F_WRAP_CTR;
2040 event_idx = off_wrap & ~(1 << VRING_PACKED_EVENT_F_WRAP_CTR);
2041 if (wrap_counter != vq->packed.avail_wrap_counter)
2042 event_idx -= vq->packed.vring.num;
2043
2044 needs_kick = vring_need_event(event_idx, new, old);
2045 out:
2046 END_USE(vq);
2047 return needs_kick;
2048 }
2049
detach_buf_packed_in_order(struct vring_virtqueue * vq,unsigned int id,void ** ctx)2050 static void detach_buf_packed_in_order(struct vring_virtqueue *vq,
2051 unsigned int id, void **ctx)
2052 {
2053 struct vring_desc_state_packed *state = NULL;
2054 struct vring_packed_desc *desc;
2055 unsigned int i, curr;
2056
2057 state = &vq->packed.desc_state[id];
2058
2059 /* Clear data ptr. */
2060 state->data = NULL;
2061
2062 vq->vq.num_free += state->num;
2063
2064 if (unlikely(vq->use_map_api)) {
2065 curr = id;
2066 for (i = 0; i < state->num; i++) {
2067 vring_unmap_extra_packed(vq,
2068 &vq->packed.desc_extra[curr]);
2069 curr = vq->packed.desc_extra[curr].next;
2070 }
2071 }
2072
2073 if (vq->indirect) {
2074 struct vring_desc_extra *extra;
2075 u32 len, num;
2076
2077 /* Free the indirect table, if any, now that it's unmapped. */
2078 desc = state->indir_desc;
2079 if (!desc)
2080 return;
2081
2082 if (vq->use_map_api) {
2083 len = vq->packed.desc_extra[id].len;
2084 num = len / sizeof(struct vring_packed_desc);
2085
2086 extra = (struct vring_desc_extra *)&desc[num];
2087
2088 for (i = 0; i < num; i++)
2089 vring_unmap_extra_packed(vq, &extra[i]);
2090 }
2091 kfree(desc);
2092 state->indir_desc = NULL;
2093 } else if (ctx) {
2094 *ctx = state->indir_desc;
2095 }
2096 }
2097
detach_buf_packed(struct vring_virtqueue * vq,unsigned int id,void ** ctx)2098 static void detach_buf_packed(struct vring_virtqueue *vq,
2099 unsigned int id, void **ctx)
2100 {
2101 struct vring_desc_state_packed *state = &vq->packed.desc_state[id];
2102
2103 vq->packed.desc_extra[state->last].next = vq->free_head;
2104 vq->free_head = id;
2105
2106 detach_buf_packed_in_order(vq, id, ctx);
2107 }
2108
is_used_desc_packed(const struct vring_virtqueue * vq,u16 idx,bool used_wrap_counter)2109 static inline bool is_used_desc_packed(const struct vring_virtqueue *vq,
2110 u16 idx, bool used_wrap_counter)
2111 {
2112 u16 flags;
2113 bool avail, used;
2114
2115 flags = vring_read_packed_desc_flags(vq, idx);
2116 avail = !!(flags & (1 << VRING_PACKED_DESC_F_AVAIL));
2117 used = !!(flags & (1 << VRING_PACKED_DESC_F_USED));
2118
2119 return avail == used && used == used_wrap_counter;
2120 }
2121
virtqueue_poll_packed(const struct vring_virtqueue * vq,unsigned int off_wrap)2122 static bool virtqueue_poll_packed(const struct vring_virtqueue *vq,
2123 unsigned int off_wrap)
2124 {
2125 bool wrap_counter;
2126 u16 used_idx;
2127
2128 wrap_counter = off_wrap >> VRING_PACKED_EVENT_F_WRAP_CTR;
2129 used_idx = off_wrap & ~(1 << VRING_PACKED_EVENT_F_WRAP_CTR);
2130
2131 return is_used_desc_packed(vq, used_idx, wrap_counter);
2132 }
2133
more_used_packed(const struct vring_virtqueue * vq)2134 static bool more_used_packed(const struct vring_virtqueue *vq)
2135 {
2136 return virtqueue_poll_packed(vq, READ_ONCE(vq->last_used_idx));
2137 }
2138
update_last_used_idx_packed(struct vring_virtqueue * vq,u16 id,u16 last_used,u16 used_wrap_counter)2139 static void update_last_used_idx_packed(struct vring_virtqueue *vq,
2140 u16 id, u16 last_used,
2141 u16 used_wrap_counter)
2142 {
2143 last_used += vq->packed.desc_state[id].num;
2144 if (unlikely(last_used >= vq->packed.vring.num)) {
2145 last_used -= vq->packed.vring.num;
2146 used_wrap_counter ^= 1;
2147 }
2148
2149 last_used = (last_used | (used_wrap_counter << VRING_PACKED_EVENT_F_WRAP_CTR));
2150 WRITE_ONCE(vq->last_used_idx, last_used);
2151
2152 /*
2153 * If we expect an interrupt for the next entry, tell host
2154 * by writing event index and flush out the write before
2155 * the read in the next get_buf call.
2156 */
2157 if (vq->packed.event_flags_shadow == VRING_PACKED_EVENT_FLAG_DESC)
2158 virtio_store_mb(vq->weak_barriers,
2159 &vq->packed.vring.driver->off_wrap,
2160 cpu_to_le16(vq->last_used_idx));
2161 }
2162
more_used_packed_in_order(const struct vring_virtqueue * vq)2163 static bool more_used_packed_in_order(const struct vring_virtqueue *vq)
2164 {
2165 if (vq->batch_last.id != UINT_MAX)
2166 return true;
2167
2168 return virtqueue_poll_packed(vq, READ_ONCE(vq->last_used_idx));
2169 }
2170
virtqueue_get_buf_ctx_packed_in_order(struct vring_virtqueue * vq,unsigned int * len,void ** ctx)2171 static void *virtqueue_get_buf_ctx_packed_in_order(struct vring_virtqueue *vq,
2172 unsigned int *len,
2173 void **ctx)
2174 {
2175 unsigned int num = vq->packed.vring.num;
2176 u16 last_used, last_used_idx;
2177 bool used_wrap_counter;
2178 void *ret;
2179
2180 START_USE(vq);
2181
2182 if (unlikely(vq->broken)) {
2183 END_USE(vq);
2184 return NULL;
2185 }
2186
2187 last_used_idx = vq->last_used_idx;
2188 used_wrap_counter = packed_used_wrap_counter(last_used_idx);
2189 last_used = packed_last_used(last_used_idx);
2190
2191 if (vq->batch_last.id == UINT_MAX) {
2192 if (!more_used_packed_in_order(vq)) {
2193 pr_debug("No more buffers in queue\n");
2194 END_USE(vq);
2195 return NULL;
2196 }
2197 /* Only get used elements after they have been exposed by host. */
2198 virtio_rmb(vq->weak_barriers);
2199 vq->batch_last.id =
2200 le16_to_cpu(vq->packed.vring.desc[last_used].id);
2201 vq->batch_last.len =
2202 le32_to_cpu(vq->packed.vring.desc[last_used].len);
2203 }
2204
2205 if (vq->batch_last.id == last_used) {
2206 vq->batch_last.id = UINT_MAX;
2207 *len = vq->batch_last.len;
2208 } else {
2209 *len = vq->packed.desc_state[last_used].total_in_len;
2210 }
2211
2212 if (unlikely(last_used >= num)) {
2213 BAD_RING(vq, "id %u out of range\n", last_used);
2214 return NULL;
2215 }
2216 if (unlikely(!vq->packed.desc_state[last_used].data)) {
2217 BAD_RING(vq, "id %u is not a head!\n", last_used);
2218 return NULL;
2219 }
2220
2221 /* detach_buf_packed clears data, so grab it now. */
2222 ret = vq->packed.desc_state[last_used].data;
2223 detach_buf_packed_in_order(vq, last_used, ctx);
2224
2225 update_last_used_idx_packed(vq, last_used, last_used,
2226 used_wrap_counter);
2227
2228 LAST_ADD_TIME_INVALID(vq);
2229
2230 END_USE(vq);
2231 return ret;
2232 }
2233
virtqueue_get_buf_ctx_packed(struct vring_virtqueue * vq,unsigned int * len,void ** ctx)2234 static void *virtqueue_get_buf_ctx_packed(struct vring_virtqueue *vq,
2235 unsigned int *len,
2236 void **ctx)
2237 {
2238 unsigned int num = vq->packed.vring.num;
2239 u16 last_used, id, last_used_idx;
2240 bool used_wrap_counter;
2241 void *ret;
2242
2243 START_USE(vq);
2244
2245 if (unlikely(vq->broken)) {
2246 END_USE(vq);
2247 return NULL;
2248 }
2249
2250 if (!more_used_packed(vq)) {
2251 pr_debug("No more buffers in queue\n");
2252 END_USE(vq);
2253 return NULL;
2254 }
2255
2256 /* Only get used elements after they have been exposed by host. */
2257 virtio_rmb(vq->weak_barriers);
2258
2259 last_used_idx = READ_ONCE(vq->last_used_idx);
2260 used_wrap_counter = packed_used_wrap_counter(last_used_idx);
2261 last_used = packed_last_used(last_used_idx);
2262 id = vring_read_packed_desc_id(vq, last_used);
2263 *len = vring_read_packed_desc_len(vq, last_used);
2264
2265 if (unlikely(id >= num)) {
2266 BAD_RING(vq, "id %u out of range\n", id);
2267 return NULL;
2268 }
2269 if (unlikely(!vq->packed.desc_state[id].data)) {
2270 BAD_RING(vq, "id %u is not a head!\n", id);
2271 return NULL;
2272 }
2273
2274 /* detach_buf_packed clears data, so grab it now. */
2275 ret = vq->packed.desc_state[id].data;
2276 detach_buf_packed(vq, id, ctx);
2277
2278 update_last_used_idx_packed(vq, id, last_used, used_wrap_counter);
2279
2280 LAST_ADD_TIME_INVALID(vq);
2281
2282 END_USE(vq);
2283 return ret;
2284 }
2285
virtqueue_disable_cb_packed(struct vring_virtqueue * vq)2286 static void virtqueue_disable_cb_packed(struct vring_virtqueue *vq)
2287 {
2288 if (vq->packed.event_flags_shadow != VRING_PACKED_EVENT_FLAG_DISABLE) {
2289 vq->packed.event_flags_shadow = VRING_PACKED_EVENT_FLAG_DISABLE;
2290
2291 /*
2292 * If device triggered an event already it won't trigger one again:
2293 * no need to disable.
2294 */
2295 if (vq->event_triggered)
2296 return;
2297
2298 vq->packed.vring.driver->flags =
2299 cpu_to_le16(vq->packed.event_flags_shadow);
2300 }
2301 }
2302
virtqueue_enable_cb_prepare_packed(struct vring_virtqueue * vq)2303 static unsigned int virtqueue_enable_cb_prepare_packed(struct vring_virtqueue *vq)
2304 {
2305 START_USE(vq);
2306
2307 /*
2308 * We optimistically turn back on interrupts, then check if there was
2309 * more to do.
2310 */
2311
2312 if (vq->event) {
2313 vq->packed.vring.driver->off_wrap =
2314 cpu_to_le16(vq->last_used_idx);
2315 /*
2316 * We need to update event offset and event wrap
2317 * counter first before updating event flags.
2318 */
2319 virtio_wmb(vq->weak_barriers);
2320 }
2321
2322 if (vq->packed.event_flags_shadow == VRING_PACKED_EVENT_FLAG_DISABLE) {
2323 vq->packed.event_flags_shadow = vq->event ?
2324 VRING_PACKED_EVENT_FLAG_DESC :
2325 VRING_PACKED_EVENT_FLAG_ENABLE;
2326 vq->packed.vring.driver->flags =
2327 cpu_to_le16(vq->packed.event_flags_shadow);
2328 }
2329
2330 END_USE(vq);
2331 return vq->last_used_idx;
2332 }
2333
virtqueue_enable_cb_delayed_packed(struct vring_virtqueue * vq)2334 static bool virtqueue_enable_cb_delayed_packed(struct vring_virtqueue *vq)
2335 {
2336 u16 used_idx, wrap_counter, last_used_idx;
2337 u16 bufs;
2338
2339 START_USE(vq);
2340
2341 /*
2342 * We optimistically turn back on interrupts, then check if there was
2343 * more to do.
2344 */
2345
2346 if (vq->event) {
2347 /* TODO: tune this threshold */
2348 bufs = (vq->packed.vring.num - vq->vq.num_free) * 3 / 4;
2349 last_used_idx = READ_ONCE(vq->last_used_idx);
2350 wrap_counter = packed_used_wrap_counter(last_used_idx);
2351
2352 used_idx = packed_last_used(last_used_idx) + bufs;
2353 if (used_idx >= vq->packed.vring.num) {
2354 used_idx -= vq->packed.vring.num;
2355 wrap_counter ^= 1;
2356 }
2357
2358 vq->packed.vring.driver->off_wrap = cpu_to_le16(used_idx |
2359 (wrap_counter << VRING_PACKED_EVENT_F_WRAP_CTR));
2360
2361 /*
2362 * We need to update event offset and event wrap
2363 * counter first before updating event flags.
2364 */
2365 virtio_wmb(vq->weak_barriers);
2366 }
2367
2368 if (vq->packed.event_flags_shadow == VRING_PACKED_EVENT_FLAG_DISABLE) {
2369 vq->packed.event_flags_shadow = vq->event ?
2370 VRING_PACKED_EVENT_FLAG_DESC :
2371 VRING_PACKED_EVENT_FLAG_ENABLE;
2372 vq->packed.vring.driver->flags =
2373 cpu_to_le16(vq->packed.event_flags_shadow);
2374 }
2375
2376 /*
2377 * We need to update event suppression structure first
2378 * before re-checking for more used buffers.
2379 */
2380 virtio_mb(vq->weak_barriers);
2381
2382 last_used_idx = READ_ONCE(vq->last_used_idx);
2383 wrap_counter = packed_used_wrap_counter(last_used_idx);
2384 used_idx = packed_last_used(last_used_idx);
2385 if (is_used_desc_packed(vq, used_idx, wrap_counter)) {
2386 END_USE(vq);
2387 return false;
2388 }
2389
2390 END_USE(vq);
2391 return true;
2392 }
2393
virtqueue_detach_unused_buf_packed(struct vring_virtqueue * vq)2394 static void *virtqueue_detach_unused_buf_packed(struct vring_virtqueue *vq)
2395 {
2396 unsigned int i;
2397 void *buf;
2398
2399 START_USE(vq);
2400
2401 for (i = 0; i < vq->packed.vring.num; i++) {
2402 if (!vq->packed.desc_state[i].data)
2403 continue;
2404 /* detach_buf clears data, so grab it now. */
2405 buf = vq->packed.desc_state[i].data;
2406 if (virtqueue_is_in_order(vq))
2407 detach_buf_packed_in_order(vq, i, NULL);
2408 else
2409 detach_buf_packed(vq, i, NULL);
2410 END_USE(vq);
2411 return buf;
2412 }
2413 /* That should have freed everything. */
2414 BUG_ON(vq->vq.num_free != vq->packed.vring.num);
2415
2416 END_USE(vq);
2417 return NULL;
2418 }
2419
vring_alloc_desc_extra(unsigned int num)2420 static struct vring_desc_extra *vring_alloc_desc_extra(unsigned int num)
2421 {
2422 struct vring_desc_extra *desc_extra;
2423 unsigned int i;
2424
2425 desc_extra = kmalloc_objs(struct vring_desc_extra, num);
2426 if (!desc_extra)
2427 return NULL;
2428
2429 memset(desc_extra, 0, num * sizeof(struct vring_desc_extra));
2430
2431 for (i = 0; i < num - 1; i++)
2432 desc_extra[i].next = i + 1;
2433
2434 desc_extra[num - 1].next = 0;
2435
2436 return desc_extra;
2437 }
2438
vring_free_packed(struct vring_virtqueue_packed * vring_packed,struct virtio_device * vdev,union virtio_map map)2439 static void vring_free_packed(struct vring_virtqueue_packed *vring_packed,
2440 struct virtio_device *vdev,
2441 union virtio_map map)
2442 {
2443 if (vring_packed->vring.desc)
2444 vring_free_queue(vdev, vring_packed->ring_size_in_bytes,
2445 vring_packed->vring.desc,
2446 vring_packed->ring_dma_addr,
2447 map);
2448
2449 if (vring_packed->vring.driver)
2450 vring_free_queue(vdev, vring_packed->event_size_in_bytes,
2451 vring_packed->vring.driver,
2452 vring_packed->driver_event_dma_addr,
2453 map);
2454
2455 if (vring_packed->vring.device)
2456 vring_free_queue(vdev, vring_packed->event_size_in_bytes,
2457 vring_packed->vring.device,
2458 vring_packed->device_event_dma_addr,
2459 map);
2460
2461 kfree(vring_packed->desc_state);
2462 kfree(vring_packed->desc_extra);
2463 }
2464
vring_alloc_queue_packed(struct vring_virtqueue_packed * vring_packed,struct virtio_device * vdev,u32 num,union virtio_map map)2465 static int vring_alloc_queue_packed(struct vring_virtqueue_packed *vring_packed,
2466 struct virtio_device *vdev,
2467 u32 num, union virtio_map map)
2468 {
2469 struct vring_packed_desc *ring;
2470 struct vring_packed_desc_event *driver, *device;
2471 dma_addr_t ring_dma_addr, driver_event_dma_addr, device_event_dma_addr;
2472 size_t ring_size_in_bytes, event_size_in_bytes;
2473
2474 ring_size_in_bytes = num * sizeof(struct vring_packed_desc);
2475
2476 ring = vring_alloc_queue(vdev, ring_size_in_bytes,
2477 &ring_dma_addr,
2478 GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
2479 map);
2480 if (!ring)
2481 goto err;
2482
2483 vring_packed->vring.desc = ring;
2484 vring_packed->ring_dma_addr = ring_dma_addr;
2485 vring_packed->ring_size_in_bytes = ring_size_in_bytes;
2486
2487 event_size_in_bytes = sizeof(struct vring_packed_desc_event);
2488
2489 driver = vring_alloc_queue(vdev, event_size_in_bytes,
2490 &driver_event_dma_addr,
2491 GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
2492 map);
2493 if (!driver)
2494 goto err;
2495
2496 vring_packed->vring.driver = driver;
2497 vring_packed->event_size_in_bytes = event_size_in_bytes;
2498 vring_packed->driver_event_dma_addr = driver_event_dma_addr;
2499
2500 device = vring_alloc_queue(vdev, event_size_in_bytes,
2501 &device_event_dma_addr,
2502 GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
2503 map);
2504 if (!device)
2505 goto err;
2506
2507 vring_packed->vring.device = device;
2508 vring_packed->device_event_dma_addr = device_event_dma_addr;
2509
2510 vring_packed->vring.num = num;
2511
2512 return 0;
2513
2514 err:
2515 vring_free_packed(vring_packed, vdev, map);
2516 return -ENOMEM;
2517 }
2518
vring_alloc_state_extra_packed(struct vring_virtqueue_packed * vring_packed)2519 static int vring_alloc_state_extra_packed(struct vring_virtqueue_packed *vring_packed)
2520 {
2521 struct vring_desc_state_packed *state;
2522 struct vring_desc_extra *extra;
2523 u32 num = vring_packed->vring.num;
2524
2525 state = kmalloc_objs(struct vring_desc_state_packed, num);
2526 if (!state)
2527 goto err_desc_state;
2528
2529 memset(state, 0, num * sizeof(struct vring_desc_state_packed));
2530
2531 extra = vring_alloc_desc_extra(num);
2532 if (!extra)
2533 goto err_desc_extra;
2534
2535 vring_packed->desc_state = state;
2536 vring_packed->desc_extra = extra;
2537
2538 return 0;
2539
2540 err_desc_extra:
2541 kfree(state);
2542 err_desc_state:
2543 return -ENOMEM;
2544 }
2545
virtqueue_vring_init_packed(struct vring_virtqueue_packed * vring_packed,bool callback)2546 static void virtqueue_vring_init_packed(struct vring_virtqueue_packed *vring_packed,
2547 bool callback)
2548 {
2549 vring_packed->next_avail_idx = 0;
2550 vring_packed->avail_wrap_counter = 1;
2551 vring_packed->event_flags_shadow = 0;
2552 vring_packed->avail_used_flags = 1 << VRING_PACKED_DESC_F_AVAIL;
2553
2554 /* No callback? Tell other side not to bother us. */
2555 if (!callback) {
2556 vring_packed->event_flags_shadow = VRING_PACKED_EVENT_FLAG_DISABLE;
2557 vring_packed->vring.driver->flags =
2558 cpu_to_le16(vring_packed->event_flags_shadow);
2559 }
2560 }
2561
virtqueue_vring_attach_packed(struct vring_virtqueue * vq,struct vring_virtqueue_packed * vring_packed)2562 static void virtqueue_vring_attach_packed(struct vring_virtqueue *vq,
2563 struct vring_virtqueue_packed *vring_packed)
2564 {
2565 vq->packed = *vring_packed;
2566
2567 if (virtqueue_is_in_order(vq)) {
2568 vq->batch_last.id = UINT_MAX;
2569 } else {
2570 /*
2571 * Put everything in free lists. Note that
2572 * next_avail_idx is sufficient with IN_ORDER so
2573 * free_head is unused.
2574 */
2575 vq->free_head = 0;
2576 }
2577 }
virtqueue_reset_packed(struct vring_virtqueue * vq)2578 static void virtqueue_reset_packed(struct vring_virtqueue *vq)
2579 {
2580 memset(vq->packed.vring.device, 0, vq->packed.event_size_in_bytes);
2581 memset(vq->packed.vring.driver, 0, vq->packed.event_size_in_bytes);
2582
2583 /* we need to reset the desc.flags. For more, see is_used_desc_packed() */
2584 memset(vq->packed.vring.desc, 0, vq->packed.ring_size_in_bytes);
2585 virtqueue_init(vq, vq->packed.vring.num);
2586 virtqueue_vring_init_packed(&vq->packed, !!vq->vq.callback);
2587 }
2588
2589 static const struct virtqueue_ops packed_ops;
2590
__vring_new_virtqueue_packed(unsigned int index,struct vring_virtqueue_packed * vring_packed,struct virtio_device * vdev,bool weak_barriers,bool context,bool (* notify)(struct virtqueue *),void (* callback)(struct virtqueue *),const char * name,union virtio_map map)2591 static struct virtqueue *__vring_new_virtqueue_packed(unsigned int index,
2592 struct vring_virtqueue_packed *vring_packed,
2593 struct virtio_device *vdev,
2594 bool weak_barriers,
2595 bool context,
2596 bool (*notify)(struct virtqueue *),
2597 void (*callback)(struct virtqueue *),
2598 const char *name,
2599 union virtio_map map)
2600 {
2601 struct vring_virtqueue *vq;
2602 int err;
2603
2604 vq = kmalloc_obj(*vq);
2605 if (!vq)
2606 return NULL;
2607
2608 vq->vq.callback = callback;
2609 vq->vq.vdev = vdev;
2610 vq->vq.name = name;
2611 vq->vq.index = index;
2612 vq->vq.reset = false;
2613 vq->we_own_ring = false;
2614 vq->notify = notify;
2615 vq->weak_barriers = weak_barriers;
2616 #ifdef CONFIG_VIRTIO_HARDEN_NOTIFICATION
2617 vq->broken = true;
2618 #else
2619 vq->broken = false;
2620 #endif
2621 vq->map = map;
2622 vq->use_map_api = vring_use_map_api(vdev);
2623
2624 vq->indirect = virtio_has_feature(vdev, VIRTIO_RING_F_INDIRECT_DESC) &&
2625 !context;
2626 vq->event = virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX);
2627 vq->layout = virtio_has_feature(vdev, VIRTIO_F_IN_ORDER) ?
2628 VQ_LAYOUT_PACKED_IN_ORDER : VQ_LAYOUT_PACKED;
2629
2630 if (virtio_has_feature(vdev, VIRTIO_F_ORDER_PLATFORM))
2631 vq->weak_barriers = false;
2632
2633 err = vring_alloc_state_extra_packed(vring_packed);
2634 if (err) {
2635 kfree(vq);
2636 return NULL;
2637 }
2638
2639 virtqueue_vring_init_packed(vring_packed, !!callback);
2640
2641 virtqueue_init(vq, vring_packed->vring.num);
2642 virtqueue_vring_attach_packed(vq, vring_packed);
2643
2644 spin_lock(&vdev->vqs_list_lock);
2645 list_add_tail(&vq->vq.list, &vdev->vqs);
2646 spin_unlock(&vdev->vqs_list_lock);
2647 return &vq->vq;
2648 }
2649
vring_create_virtqueue_packed(unsigned int index,unsigned int num,unsigned int vring_align,struct virtio_device * vdev,bool weak_barriers,bool may_reduce_num,bool context,bool (* notify)(struct virtqueue *),void (* callback)(struct virtqueue *),const char * name,union virtio_map map)2650 static struct virtqueue *vring_create_virtqueue_packed(
2651 unsigned int index,
2652 unsigned int num,
2653 unsigned int vring_align,
2654 struct virtio_device *vdev,
2655 bool weak_barriers,
2656 bool may_reduce_num,
2657 bool context,
2658 bool (*notify)(struct virtqueue *),
2659 void (*callback)(struct virtqueue *),
2660 const char *name,
2661 union virtio_map map)
2662 {
2663 struct vring_virtqueue_packed vring_packed = {};
2664 struct virtqueue *vq;
2665
2666 if (vring_alloc_queue_packed(&vring_packed, vdev, num, map))
2667 return NULL;
2668
2669 vq = __vring_new_virtqueue_packed(index, &vring_packed, vdev, weak_barriers,
2670 context, notify, callback, name, map);
2671 if (!vq) {
2672 vring_free_packed(&vring_packed, vdev, map);
2673 return NULL;
2674 }
2675
2676 to_vvq(vq)->we_own_ring = true;
2677
2678 return vq;
2679 }
2680
virtqueue_resize_packed(struct vring_virtqueue * vq,u32 num)2681 static int virtqueue_resize_packed(struct vring_virtqueue *vq, u32 num)
2682 {
2683 struct vring_virtqueue_packed vring_packed = {};
2684 struct virtio_device *vdev = vq->vq.vdev;
2685 int err;
2686
2687 if (vring_alloc_queue_packed(&vring_packed, vdev, num, vq->map))
2688 goto err_ring;
2689
2690 err = vring_alloc_state_extra_packed(&vring_packed);
2691 if (err)
2692 goto err_state_extra;
2693
2694 vring_free(&vq->vq);
2695
2696 virtqueue_vring_init_packed(&vring_packed, !!vq->vq.callback);
2697
2698 virtqueue_init(vq, vring_packed.vring.num);
2699 virtqueue_vring_attach_packed(vq, &vring_packed);
2700
2701 return 0;
2702
2703 err_state_extra:
2704 vring_free_packed(&vring_packed, vdev, vq->map);
2705 err_ring:
2706 virtqueue_reset_packed(vq);
2707 return -ENOMEM;
2708 }
2709
2710 static const struct virtqueue_ops split_ops = {
2711 .add = virtqueue_add_split,
2712 .get = virtqueue_get_buf_ctx_split,
2713 .kick_prepare = virtqueue_kick_prepare_split,
2714 .disable_cb = virtqueue_disable_cb_split,
2715 .enable_cb_delayed = virtqueue_enable_cb_delayed_split,
2716 .enable_cb_prepare = virtqueue_enable_cb_prepare_split,
2717 .poll = virtqueue_poll_split,
2718 .detach_unused_buf = virtqueue_detach_unused_buf_split,
2719 .more_used = more_used_split,
2720 .resize = virtqueue_resize_split,
2721 .reset = virtqueue_reset_split,
2722 };
2723
2724 static const struct virtqueue_ops packed_ops = {
2725 .add = virtqueue_add_packed,
2726 .get = virtqueue_get_buf_ctx_packed,
2727 .kick_prepare = virtqueue_kick_prepare_packed,
2728 .disable_cb = virtqueue_disable_cb_packed,
2729 .enable_cb_delayed = virtqueue_enable_cb_delayed_packed,
2730 .enable_cb_prepare = virtqueue_enable_cb_prepare_packed,
2731 .poll = virtqueue_poll_packed,
2732 .detach_unused_buf = virtqueue_detach_unused_buf_packed,
2733 .more_used = more_used_packed,
2734 .resize = virtqueue_resize_packed,
2735 .reset = virtqueue_reset_packed,
2736 };
2737
2738 static const struct virtqueue_ops split_in_order_ops = {
2739 .add = virtqueue_add_split,
2740 .get = virtqueue_get_buf_ctx_split_in_order,
2741 .kick_prepare = virtqueue_kick_prepare_split,
2742 .disable_cb = virtqueue_disable_cb_split,
2743 .enable_cb_delayed = virtqueue_enable_cb_delayed_split,
2744 .enable_cb_prepare = virtqueue_enable_cb_prepare_split,
2745 .poll = virtqueue_poll_split,
2746 .detach_unused_buf = virtqueue_detach_unused_buf_split,
2747 .more_used = more_used_split_in_order,
2748 .resize = virtqueue_resize_split,
2749 .reset = virtqueue_reset_split,
2750 };
2751
2752 static const struct virtqueue_ops packed_in_order_ops = {
2753 .add = virtqueue_add_packed_in_order,
2754 .get = virtqueue_get_buf_ctx_packed_in_order,
2755 .kick_prepare = virtqueue_kick_prepare_packed,
2756 .disable_cb = virtqueue_disable_cb_packed,
2757 .enable_cb_delayed = virtqueue_enable_cb_delayed_packed,
2758 .enable_cb_prepare = virtqueue_enable_cb_prepare_packed,
2759 .poll = virtqueue_poll_packed,
2760 .detach_unused_buf = virtqueue_detach_unused_buf_packed,
2761 .more_used = more_used_packed_in_order,
2762 .resize = virtqueue_resize_packed,
2763 .reset = virtqueue_reset_packed,
2764 };
2765
virtqueue_disable_and_recycle(struct virtqueue * _vq,void (* recycle)(struct virtqueue * vq,void * buf))2766 static int virtqueue_disable_and_recycle(struct virtqueue *_vq,
2767 void (*recycle)(struct virtqueue *vq, void *buf))
2768 {
2769 struct vring_virtqueue *vq = to_vvq(_vq);
2770 struct virtio_device *vdev = vq->vq.vdev;
2771 void *buf;
2772 int err;
2773
2774 if (!vq->we_own_ring)
2775 return -EPERM;
2776
2777 if (!vdev->config->disable_vq_and_reset)
2778 return -ENOENT;
2779
2780 if (!vdev->config->enable_vq_after_reset)
2781 return -ENOENT;
2782
2783 err = vdev->config->disable_vq_and_reset(_vq);
2784 if (err)
2785 return err;
2786
2787 while ((buf = virtqueue_detach_unused_buf(_vq)) != NULL)
2788 recycle(_vq, buf);
2789
2790 return 0;
2791 }
2792
virtqueue_enable_after_reset(struct virtqueue * _vq)2793 static int virtqueue_enable_after_reset(struct virtqueue *_vq)
2794 {
2795 struct vring_virtqueue *vq = to_vvq(_vq);
2796 struct virtio_device *vdev = vq->vq.vdev;
2797
2798 if (vdev->config->enable_vq_after_reset(_vq))
2799 return -EBUSY;
2800
2801 return 0;
2802 }
2803
2804 /*
2805 * Generic functions and exported symbols.
2806 */
2807
2808 #define VIRTQUEUE_CALL(vq, op, ...) \
2809 ({ \
2810 typeof(vq) __VIRTQUEUE_CALL_vq = (vq); \
2811 typeof(split_ops.op(__VIRTQUEUE_CALL_vq, ##__VA_ARGS__)) ret; \
2812 \
2813 switch (__VIRTQUEUE_CALL_vq->layout) { \
2814 case VQ_LAYOUT_SPLIT: \
2815 ret = split_ops.op(__VIRTQUEUE_CALL_vq, ##__VA_ARGS__); \
2816 break; \
2817 case VQ_LAYOUT_PACKED: \
2818 ret = packed_ops.op(__VIRTQUEUE_CALL_vq, ##__VA_ARGS__);\
2819 break; \
2820 case VQ_LAYOUT_SPLIT_IN_ORDER: \
2821 ret = split_in_order_ops.op(vq, ##__VA_ARGS__); \
2822 break; \
2823 case VQ_LAYOUT_PACKED_IN_ORDER: \
2824 ret = packed_in_order_ops.op(vq, ##__VA_ARGS__); \
2825 break; \
2826 default: \
2827 BUG(); \
2828 break; \
2829 } \
2830 ret; \
2831 })
2832
2833 #define VOID_VIRTQUEUE_CALL(vq, op, ...) \
2834 ({ \
2835 typeof(vq) __VIRTQUEUE_CALL_vq = (vq); \
2836 \
2837 switch (__VIRTQUEUE_CALL_vq->layout) { \
2838 case VQ_LAYOUT_SPLIT: \
2839 split_ops.op(__VIRTQUEUE_CALL_vq, ##__VA_ARGS__); \
2840 break; \
2841 case VQ_LAYOUT_PACKED: \
2842 packed_ops.op(__VIRTQUEUE_CALL_vq, ##__VA_ARGS__); \
2843 break; \
2844 case VQ_LAYOUT_SPLIT_IN_ORDER: \
2845 split_in_order_ops.op(vq, ##__VA_ARGS__); \
2846 break; \
2847 case VQ_LAYOUT_PACKED_IN_ORDER: \
2848 packed_in_order_ops.op(vq, ##__VA_ARGS__); \
2849 break; \
2850 default: \
2851 BUG(); \
2852 break; \
2853 } \
2854 })
2855
virtqueue_add(struct virtqueue * _vq,struct scatterlist * sgs[],unsigned int total_sg,unsigned int out_sgs,unsigned int in_sgs,void * data,void * ctx,bool premapped,gfp_t gfp,unsigned long attr)2856 static inline int virtqueue_add(struct virtqueue *_vq,
2857 struct scatterlist *sgs[],
2858 unsigned int total_sg,
2859 unsigned int out_sgs,
2860 unsigned int in_sgs,
2861 void *data,
2862 void *ctx,
2863 bool premapped,
2864 gfp_t gfp,
2865 unsigned long attr)
2866 {
2867 struct vring_virtqueue *vq = to_vvq(_vq);
2868
2869 return VIRTQUEUE_CALL(vq, add, sgs, total_sg,
2870 out_sgs, in_sgs, data,
2871 ctx, premapped, gfp, attr);
2872 }
2873
2874 /**
2875 * virtqueue_add_sgs - expose buffers to other end
2876 * @_vq: the struct virtqueue we're talking about.
2877 * @sgs: array of terminated scatterlists.
2878 * @out_sgs: the number of scatterlists readable by other side
2879 * @in_sgs: the number of scatterlists which are writable (after readable ones)
2880 * @data: the token identifying the buffer.
2881 * @gfp: how to do memory allocations (if necessary).
2882 *
2883 * Caller must ensure we don't call this with other virtqueue operations
2884 * at the same time (except where noted).
2885 *
2886 * Returns zero or a negative error (ie. ENOSPC, ENOMEM, EIO).
2887 *
2888 * NB: ENOSPC is a special code that is only returned on an attempt to add a
2889 * buffer to a full VQ. It indicates that some buffers are outstanding and that
2890 * the operation can be retried after some buffers have been used.
2891 */
virtqueue_add_sgs(struct virtqueue * _vq,struct scatterlist * sgs[],unsigned int out_sgs,unsigned int in_sgs,void * data,gfp_t gfp)2892 int virtqueue_add_sgs(struct virtqueue *_vq,
2893 struct scatterlist *sgs[],
2894 unsigned int out_sgs,
2895 unsigned int in_sgs,
2896 void *data,
2897 gfp_t gfp)
2898 {
2899 unsigned int i, total_sg = 0;
2900
2901 /* Count them first. */
2902 for (i = 0; i < out_sgs + in_sgs; i++) {
2903 struct scatterlist *sg;
2904
2905 for (sg = sgs[i]; sg; sg = sg_next(sg))
2906 total_sg++;
2907 }
2908 return virtqueue_add(_vq, sgs, total_sg, out_sgs, in_sgs,
2909 data, NULL, false, gfp, 0);
2910 }
2911 EXPORT_SYMBOL_GPL(virtqueue_add_sgs);
2912
2913 /**
2914 * virtqueue_add_outbuf - expose output buffers to other end
2915 * @vq: the struct virtqueue we're talking about.
2916 * @sg: scatterlist (must be well-formed and terminated!)
2917 * @num: the number of entries in @sg readable by other side
2918 * @data: the token identifying the buffer.
2919 * @gfp: how to do memory allocations (if necessary).
2920 *
2921 * Caller must ensure we don't call this with other virtqueue operations
2922 * at the same time (except where noted).
2923 *
2924 * Returns zero or a negative error (ie. ENOSPC, ENOMEM, EIO).
2925 */
virtqueue_add_outbuf(struct virtqueue * vq,struct scatterlist * sg,unsigned int num,void * data,gfp_t gfp)2926 int virtqueue_add_outbuf(struct virtqueue *vq,
2927 struct scatterlist *sg, unsigned int num,
2928 void *data,
2929 gfp_t gfp)
2930 {
2931 return virtqueue_add(vq, &sg, num, 1, 0, data, NULL, false, gfp, 0);
2932 }
2933 EXPORT_SYMBOL_GPL(virtqueue_add_outbuf);
2934
2935 /**
2936 * virtqueue_add_outbuf_premapped - expose output buffers to other end
2937 * @vq: the struct virtqueue we're talking about.
2938 * @sg: scatterlist (must be well-formed and terminated!)
2939 * @num: the number of entries in @sg readable by other side
2940 * @data: the token identifying the buffer.
2941 * @gfp: how to do memory allocations (if necessary).
2942 *
2943 * Caller must ensure we don't call this with other virtqueue operations
2944 * at the same time (except where noted).
2945 *
2946 * Return:
2947 * Returns zero or a negative error (ie. ENOSPC, ENOMEM, EIO).
2948 */
virtqueue_add_outbuf_premapped(struct virtqueue * vq,struct scatterlist * sg,unsigned int num,void * data,gfp_t gfp)2949 int virtqueue_add_outbuf_premapped(struct virtqueue *vq,
2950 struct scatterlist *sg, unsigned int num,
2951 void *data,
2952 gfp_t gfp)
2953 {
2954 return virtqueue_add(vq, &sg, num, 1, 0, data, NULL, true, gfp, 0);
2955 }
2956 EXPORT_SYMBOL_GPL(virtqueue_add_outbuf_premapped);
2957
2958 /**
2959 * virtqueue_add_inbuf - expose input buffers to other end
2960 * @vq: the struct virtqueue we're talking about.
2961 * @sg: scatterlist (must be well-formed and terminated!)
2962 * @num: the number of entries in @sg writable by other side
2963 * @data: the token identifying the buffer.
2964 * @gfp: how to do memory allocations (if necessary).
2965 *
2966 * Caller must ensure we don't call this with other virtqueue operations
2967 * at the same time (except where noted).
2968 *
2969 * Returns zero or a negative error (ie. ENOSPC, ENOMEM, EIO).
2970 */
virtqueue_add_inbuf(struct virtqueue * vq,struct scatterlist * sg,unsigned int num,void * data,gfp_t gfp)2971 int virtqueue_add_inbuf(struct virtqueue *vq,
2972 struct scatterlist *sg, unsigned int num,
2973 void *data,
2974 gfp_t gfp)
2975 {
2976 return virtqueue_add(vq, &sg, num, 0, 1, data, NULL, false, gfp, 0);
2977 }
2978 EXPORT_SYMBOL_GPL(virtqueue_add_inbuf);
2979
2980 /**
2981 * virtqueue_add_inbuf_cache_clean - expose input buffers with cache clean
2982 * @vq: the struct virtqueue we're talking about.
2983 * @sg: scatterlist (must be well-formed and terminated!)
2984 * @num: the number of entries in @sg writable by other side
2985 * @data: the token identifying the buffer.
2986 * @gfp: how to do memory allocations (if necessary).
2987 *
2988 * Same as virtqueue_add_inbuf but passes DMA_ATTR_DEBUGGING_IGNORE_CACHELINES
2989 * to indicate that the CPU will not dirty any cacheline overlapping this buffer
2990 * while it is available, and to suppress overlapping cacheline warnings in DMA
2991 * debug builds.
2992 *
2993 * Caller must ensure we don't call this with other virtqueue operations
2994 * at the same time (except where noted).
2995 *
2996 * Returns zero or a negative error (ie. ENOSPC, ENOMEM, EIO).
2997 */
virtqueue_add_inbuf_cache_clean(struct virtqueue * vq,struct scatterlist * sg,unsigned int num,void * data,gfp_t gfp)2998 int virtqueue_add_inbuf_cache_clean(struct virtqueue *vq,
2999 struct scatterlist *sg, unsigned int num,
3000 void *data,
3001 gfp_t gfp)
3002 {
3003 return virtqueue_add(vq, &sg, num, 0, 1, data, NULL, false, gfp,
3004 DMA_ATTR_DEBUGGING_IGNORE_CACHELINES);
3005 }
3006 EXPORT_SYMBOL_GPL(virtqueue_add_inbuf_cache_clean);
3007
3008 /**
3009 * virtqueue_add_inbuf_ctx - expose input buffers to other end
3010 * @vq: the struct virtqueue we're talking about.
3011 * @sg: scatterlist (must be well-formed and terminated!)
3012 * @num: the number of entries in @sg writable by other side
3013 * @data: the token identifying the buffer.
3014 * @ctx: extra context for the token
3015 * @gfp: how to do memory allocations (if necessary).
3016 *
3017 * Caller must ensure we don't call this with other virtqueue operations
3018 * at the same time (except where noted).
3019 *
3020 * Returns zero or a negative error (ie. ENOSPC, ENOMEM, EIO).
3021 */
virtqueue_add_inbuf_ctx(struct virtqueue * vq,struct scatterlist * sg,unsigned int num,void * data,void * ctx,gfp_t gfp)3022 int virtqueue_add_inbuf_ctx(struct virtqueue *vq,
3023 struct scatterlist *sg, unsigned int num,
3024 void *data,
3025 void *ctx,
3026 gfp_t gfp)
3027 {
3028 return virtqueue_add(vq, &sg, num, 0, 1, data, ctx, false, gfp, 0);
3029 }
3030 EXPORT_SYMBOL_GPL(virtqueue_add_inbuf_ctx);
3031
3032 /**
3033 * virtqueue_add_inbuf_premapped - expose input buffers to other end
3034 * @vq: the struct virtqueue we're talking about.
3035 * @sg: scatterlist (must be well-formed and terminated!)
3036 * @num: the number of entries in @sg writable by other side
3037 * @data: the token identifying the buffer.
3038 * @ctx: extra context for the token
3039 * @gfp: how to do memory allocations (if necessary).
3040 *
3041 * Caller must ensure we don't call this with other virtqueue operations
3042 * at the same time (except where noted).
3043 *
3044 * Return:
3045 * Returns zero or a negative error (ie. ENOSPC, ENOMEM, EIO).
3046 */
virtqueue_add_inbuf_premapped(struct virtqueue * vq,struct scatterlist * sg,unsigned int num,void * data,void * ctx,gfp_t gfp)3047 int virtqueue_add_inbuf_premapped(struct virtqueue *vq,
3048 struct scatterlist *sg, unsigned int num,
3049 void *data,
3050 void *ctx,
3051 gfp_t gfp)
3052 {
3053 return virtqueue_add(vq, &sg, num, 0, 1, data, ctx, true, gfp, 0);
3054 }
3055 EXPORT_SYMBOL_GPL(virtqueue_add_inbuf_premapped);
3056
3057 /**
3058 * virtqueue_dma_dev - get the dma dev
3059 * @_vq: the struct virtqueue we're talking about.
3060 *
3061 * Returns the dma dev. That can been used for dma api.
3062 */
virtqueue_dma_dev(struct virtqueue * _vq)3063 struct device *virtqueue_dma_dev(struct virtqueue *_vq)
3064 {
3065 struct vring_virtqueue *vq = to_vvq(_vq);
3066
3067 if (vq->use_map_api && !_vq->vdev->map)
3068 return vq->map.dma_dev;
3069 else
3070 return NULL;
3071 }
3072 EXPORT_SYMBOL_GPL(virtqueue_dma_dev);
3073
3074 /**
3075 * virtqueue_kick_prepare - first half of split virtqueue_kick call.
3076 * @_vq: the struct virtqueue
3077 *
3078 * Instead of virtqueue_kick(), you can do:
3079 * if (virtqueue_kick_prepare(vq))
3080 * virtqueue_notify(vq);
3081 *
3082 * This is sometimes useful because the virtqueue_kick_prepare() needs
3083 * to be serialized, but the actual virtqueue_notify() call does not.
3084 */
virtqueue_kick_prepare(struct virtqueue * _vq)3085 bool virtqueue_kick_prepare(struct virtqueue *_vq)
3086 {
3087 struct vring_virtqueue *vq = to_vvq(_vq);
3088
3089 return VIRTQUEUE_CALL(vq, kick_prepare);
3090 }
3091 EXPORT_SYMBOL_GPL(virtqueue_kick_prepare);
3092
3093 /**
3094 * virtqueue_notify - second half of split virtqueue_kick call.
3095 * @_vq: the struct virtqueue
3096 *
3097 * This does not need to be serialized.
3098 *
3099 * Returns false if host notify failed or queue is broken, otherwise true.
3100 */
virtqueue_notify(struct virtqueue * _vq)3101 bool virtqueue_notify(struct virtqueue *_vq)
3102 {
3103 struct vring_virtqueue *vq = to_vvq(_vq);
3104
3105 if (unlikely(vq->broken))
3106 return false;
3107
3108 /* Prod other side to tell it about changes. */
3109 if (!vq->notify(_vq)) {
3110 vq->broken = true;
3111 return false;
3112 }
3113 return true;
3114 }
3115 EXPORT_SYMBOL_GPL(virtqueue_notify);
3116
3117 /**
3118 * virtqueue_kick - update after add_buf
3119 * @vq: the struct virtqueue
3120 *
3121 * After one or more virtqueue_add_* calls, invoke this to kick
3122 * the other side.
3123 *
3124 * Caller must ensure we don't call this with other virtqueue
3125 * operations at the same time (except where noted).
3126 *
3127 * Returns false if kick failed, otherwise true.
3128 */
virtqueue_kick(struct virtqueue * vq)3129 bool virtqueue_kick(struct virtqueue *vq)
3130 {
3131 if (virtqueue_kick_prepare(vq))
3132 return virtqueue_notify(vq);
3133 return true;
3134 }
3135 EXPORT_SYMBOL_GPL(virtqueue_kick);
3136
3137 /**
3138 * virtqueue_get_buf_ctx - get the next used buffer
3139 * @_vq: the struct virtqueue we're talking about.
3140 * @len: the length written into the buffer
3141 * @ctx: extra context for the token
3142 *
3143 * If the device wrote data into the buffer, @len will be set to the
3144 * amount written. This means you don't need to clear the buffer
3145 * beforehand to ensure there's no data leakage in the case of short
3146 * writes.
3147 *
3148 * Caller must ensure we don't call this with other virtqueue
3149 * operations at the same time (except where noted).
3150 *
3151 * Returns NULL if there are no used buffers, or the "data" token
3152 * handed to virtqueue_add_*().
3153 */
virtqueue_get_buf_ctx(struct virtqueue * _vq,unsigned int * len,void ** ctx)3154 void *virtqueue_get_buf_ctx(struct virtqueue *_vq, unsigned int *len,
3155 void **ctx)
3156 {
3157 struct vring_virtqueue *vq = to_vvq(_vq);
3158
3159 return VIRTQUEUE_CALL(vq, get, len, ctx);
3160 }
3161 EXPORT_SYMBOL_GPL(virtqueue_get_buf_ctx);
3162
virtqueue_get_buf(struct virtqueue * _vq,unsigned int * len)3163 void *virtqueue_get_buf(struct virtqueue *_vq, unsigned int *len)
3164 {
3165 return virtqueue_get_buf_ctx(_vq, len, NULL);
3166 }
3167 EXPORT_SYMBOL_GPL(virtqueue_get_buf);
3168 /**
3169 * virtqueue_disable_cb - disable callbacks
3170 * @_vq: the struct virtqueue we're talking about.
3171 *
3172 * Note that this is not necessarily synchronous, hence unreliable and only
3173 * useful as an optimization.
3174 *
3175 * Unlike other operations, this need not be serialized.
3176 */
virtqueue_disable_cb(struct virtqueue * _vq)3177 void virtqueue_disable_cb(struct virtqueue *_vq)
3178 {
3179 struct vring_virtqueue *vq = to_vvq(_vq);
3180
3181 VOID_VIRTQUEUE_CALL(vq, disable_cb);
3182 }
3183 EXPORT_SYMBOL_GPL(virtqueue_disable_cb);
3184
3185 /**
3186 * virtqueue_enable_cb_prepare - restart callbacks after disable_cb
3187 * @_vq: the struct virtqueue we're talking about.
3188 *
3189 * This re-enables callbacks; it returns current queue state
3190 * in an opaque unsigned value. This value should be later tested by
3191 * virtqueue_poll, to detect a possible race between the driver checking for
3192 * more work, and enabling callbacks.
3193 *
3194 * Caller must ensure we don't call this with other virtqueue
3195 * operations at the same time (except where noted).
3196 */
virtqueue_enable_cb_prepare(struct virtqueue * _vq)3197 unsigned int virtqueue_enable_cb_prepare(struct virtqueue *_vq)
3198 {
3199 struct vring_virtqueue *vq = to_vvq(_vq);
3200
3201 if (vq->event_triggered)
3202 vq->event_triggered = false;
3203
3204 return VIRTQUEUE_CALL(vq, enable_cb_prepare);
3205 }
3206 EXPORT_SYMBOL_GPL(virtqueue_enable_cb_prepare);
3207
3208 /**
3209 * virtqueue_poll - query pending used buffers
3210 * @_vq: the struct virtqueue we're talking about.
3211 * @last_used_idx: virtqueue state (from call to virtqueue_enable_cb_prepare).
3212 *
3213 * Returns "true" if there are pending used buffers in the queue.
3214 *
3215 * This does not need to be serialized.
3216 */
virtqueue_poll(struct virtqueue * _vq,unsigned int last_used_idx)3217 bool virtqueue_poll(struct virtqueue *_vq, unsigned int last_used_idx)
3218 {
3219 struct vring_virtqueue *vq = to_vvq(_vq);
3220
3221 if (unlikely(vq->broken))
3222 return false;
3223
3224 virtio_mb(vq->weak_barriers);
3225
3226 return VIRTQUEUE_CALL(vq, poll, last_used_idx);
3227 }
3228 EXPORT_SYMBOL_GPL(virtqueue_poll);
3229
3230 /**
3231 * virtqueue_enable_cb - restart callbacks after disable_cb.
3232 * @_vq: the struct virtqueue we're talking about.
3233 *
3234 * This re-enables callbacks; it returns "false" if there are pending
3235 * buffers in the queue, to detect a possible race between the driver
3236 * checking for more work, and enabling callbacks.
3237 *
3238 * Caller must ensure we don't call this with other virtqueue
3239 * operations at the same time (except where noted).
3240 */
virtqueue_enable_cb(struct virtqueue * _vq)3241 bool virtqueue_enable_cb(struct virtqueue *_vq)
3242 {
3243 unsigned int last_used_idx = virtqueue_enable_cb_prepare(_vq);
3244
3245 return !virtqueue_poll(_vq, last_used_idx);
3246 }
3247 EXPORT_SYMBOL_GPL(virtqueue_enable_cb);
3248
3249 /**
3250 * virtqueue_enable_cb_delayed - restart callbacks after disable_cb.
3251 * @_vq: the struct virtqueue we're talking about.
3252 *
3253 * This re-enables callbacks but hints to the other side to delay
3254 * interrupts until most of the available buffers have been processed;
3255 * it returns "false" if there are many pending buffers in the queue,
3256 * to detect a possible race between the driver checking for more work,
3257 * and enabling callbacks.
3258 *
3259 * Caller must ensure we don't call this with other virtqueue
3260 * operations at the same time (except where noted).
3261 */
virtqueue_enable_cb_delayed(struct virtqueue * _vq)3262 bool virtqueue_enable_cb_delayed(struct virtqueue *_vq)
3263 {
3264 struct vring_virtqueue *vq = to_vvq(_vq);
3265
3266 /*
3267 * When the device is broken there is no point in polling used->idx,
3268 * the backend will never update it. Return true to let callers
3269 * exit their cleanup loops instead of spinning forever.
3270 */
3271 if (unlikely(vq->broken))
3272 return true;
3273
3274 if (vq->event_triggered)
3275 data_race(vq->event_triggered = false);
3276
3277 return VIRTQUEUE_CALL(vq, enable_cb_delayed);
3278 }
3279 EXPORT_SYMBOL_GPL(virtqueue_enable_cb_delayed);
3280
3281 /**
3282 * virtqueue_detach_unused_buf - detach first unused buffer
3283 * @_vq: the struct virtqueue we're talking about.
3284 *
3285 * Returns NULL or the "data" token handed to virtqueue_add_*().
3286 * This is not valid on an active queue; it is useful for device
3287 * shutdown or the reset queue.
3288 */
virtqueue_detach_unused_buf(struct virtqueue * _vq)3289 void *virtqueue_detach_unused_buf(struct virtqueue *_vq)
3290 {
3291 struct vring_virtqueue *vq = to_vvq(_vq);
3292
3293 return VIRTQUEUE_CALL(vq, detach_unused_buf);
3294 }
3295 EXPORT_SYMBOL_GPL(virtqueue_detach_unused_buf);
3296
more_used(const struct vring_virtqueue * vq)3297 static inline bool more_used(const struct vring_virtqueue *vq)
3298 {
3299 return VIRTQUEUE_CALL(vq, more_used);
3300 }
3301
3302 /**
3303 * vring_interrupt - notify a virtqueue on an interrupt
3304 * @irq: the IRQ number (ignored)
3305 * @_vq: the struct virtqueue to notify
3306 *
3307 * Calls the callback function of @_vq to process the virtqueue
3308 * notification.
3309 */
vring_interrupt(int irq,void * _vq)3310 irqreturn_t vring_interrupt(int irq, void *_vq)
3311 {
3312 struct vring_virtqueue *vq = to_vvq(_vq);
3313
3314 if (!more_used(vq)) {
3315 pr_debug("virtqueue interrupt with no work for %p\n", vq);
3316 return IRQ_NONE;
3317 }
3318
3319 if (unlikely(vq->broken)) {
3320 #ifdef CONFIG_VIRTIO_HARDEN_NOTIFICATION
3321 dev_warn_once(&vq->vq.vdev->dev,
3322 "virtio vring IRQ raised before DRIVER_OK");
3323 return IRQ_NONE;
3324 #else
3325 return IRQ_HANDLED;
3326 #endif
3327 }
3328
3329 /* Just a hint for performance: so it's ok that this can be racy! */
3330 if (vq->event)
3331 data_race(vq->event_triggered = true);
3332
3333 pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback);
3334 if (vq->vq.callback)
3335 vq->vq.callback(&vq->vq);
3336
3337 return IRQ_HANDLED;
3338 }
3339 EXPORT_SYMBOL_GPL(vring_interrupt);
3340
vring_create_virtqueue(unsigned int index,unsigned int num,unsigned int vring_align,struct virtio_device * vdev,bool weak_barriers,bool may_reduce_num,bool context,bool (* notify)(struct virtqueue *),void (* callback)(struct virtqueue *),const char * name)3341 struct virtqueue *vring_create_virtqueue(
3342 unsigned int index,
3343 unsigned int num,
3344 unsigned int vring_align,
3345 struct virtio_device *vdev,
3346 bool weak_barriers,
3347 bool may_reduce_num,
3348 bool context,
3349 bool (*notify)(struct virtqueue *),
3350 void (*callback)(struct virtqueue *),
3351 const char *name)
3352 {
3353 union virtio_map map = {.dma_dev = vdev->dev.parent};
3354
3355 if (virtio_has_feature(vdev, VIRTIO_F_RING_PACKED))
3356 return vring_create_virtqueue_packed(index, num, vring_align,
3357 vdev, weak_barriers, may_reduce_num,
3358 context, notify, callback, name, map);
3359
3360 return vring_create_virtqueue_split(index, num, vring_align,
3361 vdev, weak_barriers, may_reduce_num,
3362 context, notify, callback, name, map);
3363 }
3364 EXPORT_SYMBOL_GPL(vring_create_virtqueue);
3365
vring_create_virtqueue_map(unsigned int index,unsigned int num,unsigned int vring_align,struct virtio_device * vdev,bool weak_barriers,bool may_reduce_num,bool context,bool (* notify)(struct virtqueue *),void (* callback)(struct virtqueue *),const char * name,union virtio_map map)3366 struct virtqueue *vring_create_virtqueue_map(
3367 unsigned int index,
3368 unsigned int num,
3369 unsigned int vring_align,
3370 struct virtio_device *vdev,
3371 bool weak_barriers,
3372 bool may_reduce_num,
3373 bool context,
3374 bool (*notify)(struct virtqueue *),
3375 void (*callback)(struct virtqueue *),
3376 const char *name,
3377 union virtio_map map)
3378 {
3379
3380 if (virtio_has_feature(vdev, VIRTIO_F_RING_PACKED))
3381 return vring_create_virtqueue_packed(index, num, vring_align,
3382 vdev, weak_barriers, may_reduce_num,
3383 context, notify, callback, name, map);
3384
3385 return vring_create_virtqueue_split(index, num, vring_align,
3386 vdev, weak_barriers, may_reduce_num,
3387 context, notify, callback, name, map);
3388 }
3389 EXPORT_SYMBOL_GPL(vring_create_virtqueue_map);
3390
3391 /**
3392 * virtqueue_resize - resize the vring of vq
3393 * @_vq: the struct virtqueue we're talking about.
3394 * @num: new ring num
3395 * @recycle: callback to recycle unused buffers
3396 * @recycle_done: callback to be invoked when recycle for all unused buffers done
3397 *
3398 * When it is really necessary to create a new vring, it will set the current vq
3399 * into the reset state. Then call the passed callback to recycle the buffer
3400 * that is no longer used. Only after the new vring is successfully created, the
3401 * old vring will be released.
3402 *
3403 * Caller must ensure we don't call this with other virtqueue operations
3404 * at the same time (except where noted).
3405 *
3406 * Returns zero or a negative error.
3407 * 0: success.
3408 * -ENOMEM: Failed to allocate a new ring, fall back to the original ring size.
3409 * vq can still work normally
3410 * -EBUSY: Failed to sync with device, vq may not work properly
3411 * -ENOENT: Transport or device not supported
3412 * -E2BIG/-EINVAL: num error
3413 * -EPERM: Operation not permitted
3414 *
3415 */
virtqueue_resize(struct virtqueue * _vq,u32 num,void (* recycle)(struct virtqueue * vq,void * buf),void (* recycle_done)(struct virtqueue * vq))3416 int virtqueue_resize(struct virtqueue *_vq, u32 num,
3417 void (*recycle)(struct virtqueue *vq, void *buf),
3418 void (*recycle_done)(struct virtqueue *vq))
3419 {
3420 struct vring_virtqueue *vq = to_vvq(_vq);
3421 int err, err_reset;
3422
3423 if (num > vq->vq.num_max)
3424 return -E2BIG;
3425
3426 if (!num)
3427 return -EINVAL;
3428
3429 if (virtqueue_get_vring_size(_vq) == num)
3430 return 0;
3431
3432 err = virtqueue_disable_and_recycle(_vq, recycle);
3433 if (err)
3434 return err;
3435 if (recycle_done)
3436 recycle_done(_vq);
3437
3438 err = VIRTQUEUE_CALL(vq, resize, num);
3439
3440 err_reset = virtqueue_enable_after_reset(_vq);
3441 if (err_reset)
3442 return err_reset;
3443
3444 return err;
3445 }
3446 EXPORT_SYMBOL_GPL(virtqueue_resize);
3447
3448 /**
3449 * virtqueue_reset - detach and recycle all unused buffers
3450 * @_vq: the struct virtqueue we're talking about.
3451 * @recycle: callback to recycle unused buffers
3452 * @recycle_done: callback to be invoked when recycle for all unused buffers done
3453 *
3454 * Caller must ensure we don't call this with other virtqueue operations
3455 * at the same time (except where noted).
3456 *
3457 * Returns zero or a negative error.
3458 * 0: success.
3459 * -EBUSY: Failed to sync with device, vq may not work properly
3460 * -ENOENT: Transport or device not supported
3461 * -EPERM: Operation not permitted
3462 */
virtqueue_reset(struct virtqueue * _vq,void (* recycle)(struct virtqueue * vq,void * buf),void (* recycle_done)(struct virtqueue * vq))3463 int virtqueue_reset(struct virtqueue *_vq,
3464 void (*recycle)(struct virtqueue *vq, void *buf),
3465 void (*recycle_done)(struct virtqueue *vq))
3466 {
3467 struct vring_virtqueue *vq = to_vvq(_vq);
3468 int err;
3469
3470 err = virtqueue_disable_and_recycle(_vq, recycle);
3471 if (err)
3472 return err;
3473 if (recycle_done)
3474 recycle_done(_vq);
3475
3476 VOID_VIRTQUEUE_CALL(vq, reset);
3477
3478 return virtqueue_enable_after_reset(_vq);
3479 }
3480 EXPORT_SYMBOL_GPL(virtqueue_reset);
3481
vring_new_virtqueue(unsigned int index,unsigned int num,unsigned int vring_align,struct virtio_device * vdev,bool weak_barriers,bool context,void * pages,bool (* notify)(struct virtqueue * vq),void (* callback)(struct virtqueue * vq),const char * name)3482 struct virtqueue *vring_new_virtqueue(unsigned int index,
3483 unsigned int num,
3484 unsigned int vring_align,
3485 struct virtio_device *vdev,
3486 bool weak_barriers,
3487 bool context,
3488 void *pages,
3489 bool (*notify)(struct virtqueue *vq),
3490 void (*callback)(struct virtqueue *vq),
3491 const char *name)
3492 {
3493 struct vring_virtqueue_split vring_split = {};
3494 union virtio_map map = {.dma_dev = vdev->dev.parent};
3495
3496 if (virtio_has_feature(vdev, VIRTIO_F_RING_PACKED)) {
3497 struct vring_virtqueue_packed vring_packed = {};
3498
3499 vring_packed.vring.num = num;
3500 vring_packed.vring.desc = pages;
3501 return __vring_new_virtqueue_packed(index, &vring_packed,
3502 vdev, weak_barriers,
3503 context, notify, callback,
3504 name, map);
3505 }
3506
3507 vring_init(&vring_split.vring, num, pages, vring_align);
3508 return __vring_new_virtqueue_split(index, &vring_split, vdev, weak_barriers,
3509 context, notify, callback, name,
3510 map);
3511 }
3512 EXPORT_SYMBOL_GPL(vring_new_virtqueue);
3513
vring_free(struct virtqueue * _vq)3514 static void vring_free(struct virtqueue *_vq)
3515 {
3516 struct vring_virtqueue *vq = to_vvq(_vq);
3517
3518 if (vq->we_own_ring) {
3519 if (virtqueue_is_packed(vq)) {
3520 vring_free_queue(vq->vq.vdev,
3521 vq->packed.ring_size_in_bytes,
3522 vq->packed.vring.desc,
3523 vq->packed.ring_dma_addr,
3524 vq->map);
3525
3526 vring_free_queue(vq->vq.vdev,
3527 vq->packed.event_size_in_bytes,
3528 vq->packed.vring.driver,
3529 vq->packed.driver_event_dma_addr,
3530 vq->map);
3531
3532 vring_free_queue(vq->vq.vdev,
3533 vq->packed.event_size_in_bytes,
3534 vq->packed.vring.device,
3535 vq->packed.device_event_dma_addr,
3536 vq->map);
3537
3538 kfree(vq->packed.desc_state);
3539 kfree(vq->packed.desc_extra);
3540 } else {
3541 vring_free_queue(vq->vq.vdev,
3542 vq->split.queue_size_in_bytes,
3543 vq->split.vring.desc,
3544 vq->split.queue_dma_addr,
3545 vq->map);
3546 }
3547 }
3548 if (!virtqueue_is_packed(vq)) {
3549 kfree(vq->split.desc_state);
3550 kfree(vq->split.desc_extra);
3551 }
3552 }
3553
vring_del_virtqueue(struct virtqueue * _vq)3554 void vring_del_virtqueue(struct virtqueue *_vq)
3555 {
3556 struct vring_virtqueue *vq = to_vvq(_vq);
3557
3558 spin_lock(&vq->vq.vdev->vqs_list_lock);
3559 list_del(&_vq->list);
3560 spin_unlock(&vq->vq.vdev->vqs_list_lock);
3561
3562 vring_free(_vq);
3563
3564 kfree(vq);
3565 }
3566 EXPORT_SYMBOL_GPL(vring_del_virtqueue);
3567
vring_notification_data(struct virtqueue * _vq)3568 u32 vring_notification_data(struct virtqueue *_vq)
3569 {
3570 struct vring_virtqueue *vq = to_vvq(_vq);
3571 u16 next;
3572
3573 if (virtqueue_is_packed(vq))
3574 next = (vq->packed.next_avail_idx &
3575 ~(-(1 << VRING_PACKED_EVENT_F_WRAP_CTR))) |
3576 vq->packed.avail_wrap_counter <<
3577 VRING_PACKED_EVENT_F_WRAP_CTR;
3578 else
3579 next = vq->split.avail_idx_shadow;
3580
3581 return next << 16 | _vq->index;
3582 }
3583 EXPORT_SYMBOL_GPL(vring_notification_data);
3584
3585 /* Manipulates transport-specific feature bits. */
vring_transport_features(struct virtio_device * vdev)3586 void vring_transport_features(struct virtio_device *vdev)
3587 {
3588 unsigned int i;
3589
3590 for (i = VIRTIO_TRANSPORT_F_START; i < VIRTIO_TRANSPORT_F_END; i++) {
3591 switch (i) {
3592 case VIRTIO_RING_F_INDIRECT_DESC:
3593 break;
3594 case VIRTIO_RING_F_EVENT_IDX:
3595 break;
3596 case VIRTIO_F_VERSION_1:
3597 break;
3598 case VIRTIO_F_ACCESS_PLATFORM:
3599 break;
3600 case VIRTIO_F_RING_PACKED:
3601 break;
3602 case VIRTIO_F_ORDER_PLATFORM:
3603 break;
3604 case VIRTIO_F_NOTIFICATION_DATA:
3605 break;
3606 case VIRTIO_F_IN_ORDER:
3607 break;
3608 default:
3609 /* We don't understand this bit. */
3610 __virtio_clear_bit(vdev, i);
3611 }
3612 }
3613 }
3614 EXPORT_SYMBOL_GPL(vring_transport_features);
3615
3616 /**
3617 * virtqueue_get_vring_size - return the size of the virtqueue's vring
3618 * @_vq: the struct virtqueue containing the vring of interest.
3619 *
3620 * Returns the size of the vring. This is mainly used for boasting to
3621 * userspace. Unlike other operations, this need not be serialized.
3622 */
virtqueue_get_vring_size(const struct virtqueue * _vq)3623 unsigned int virtqueue_get_vring_size(const struct virtqueue *_vq)
3624 {
3625
3626 const struct vring_virtqueue *vq = to_vvq(_vq);
3627
3628 return virtqueue_is_packed(vq) ? vq->packed.vring.num :
3629 vq->split.vring.num;
3630 }
3631 EXPORT_SYMBOL_GPL(virtqueue_get_vring_size);
3632
3633 /*
3634 * This function should only be called by the core, not directly by the driver.
3635 */
__virtqueue_break(struct virtqueue * _vq)3636 void __virtqueue_break(struct virtqueue *_vq)
3637 {
3638 struct vring_virtqueue *vq = to_vvq(_vq);
3639
3640 /* Pairs with READ_ONCE() in virtqueue_is_broken(). */
3641 WRITE_ONCE(vq->broken, true);
3642 }
3643 EXPORT_SYMBOL_GPL(__virtqueue_break);
3644
3645 /*
3646 * This function should only be called by the core, not directly by the driver.
3647 */
__virtqueue_unbreak(struct virtqueue * _vq)3648 void __virtqueue_unbreak(struct virtqueue *_vq)
3649 {
3650 struct vring_virtqueue *vq = to_vvq(_vq);
3651
3652 /* Pairs with READ_ONCE() in virtqueue_is_broken(). */
3653 WRITE_ONCE(vq->broken, false);
3654 }
3655 EXPORT_SYMBOL_GPL(__virtqueue_unbreak);
3656
virtqueue_is_broken(const struct virtqueue * _vq)3657 bool virtqueue_is_broken(const struct virtqueue *_vq)
3658 {
3659 const struct vring_virtqueue *vq = to_vvq(_vq);
3660
3661 return READ_ONCE(vq->broken);
3662 }
3663 EXPORT_SYMBOL_GPL(virtqueue_is_broken);
3664
3665 /*
3666 * This should prevent the device from being used, allowing drivers to
3667 * recover. You may need to grab appropriate locks to flush.
3668 */
virtio_break_device(struct virtio_device * dev)3669 void virtio_break_device(struct virtio_device *dev)
3670 {
3671 struct virtqueue *_vq;
3672
3673 spin_lock(&dev->vqs_list_lock);
3674 list_for_each_entry(_vq, &dev->vqs, list) {
3675 struct vring_virtqueue *vq = to_vvq(_vq);
3676
3677 /* Pairs with READ_ONCE() in virtqueue_is_broken(). */
3678 WRITE_ONCE(vq->broken, true);
3679 }
3680 spin_unlock(&dev->vqs_list_lock);
3681 }
3682 EXPORT_SYMBOL_GPL(virtio_break_device);
3683
3684 /*
3685 * This should allow the device to be used by the driver. You may
3686 * need to grab appropriate locks to flush the write to
3687 * vq->broken. This should only be used in some specific case e.g
3688 * (probing and restoring). This function should only be called by the
3689 * core, not directly by the driver.
3690 */
__virtio_unbreak_device(struct virtio_device * dev)3691 void __virtio_unbreak_device(struct virtio_device *dev)
3692 {
3693 struct virtqueue *_vq;
3694
3695 spin_lock(&dev->vqs_list_lock);
3696 list_for_each_entry(_vq, &dev->vqs, list) {
3697 struct vring_virtqueue *vq = to_vvq(_vq);
3698
3699 /* Pairs with READ_ONCE() in virtqueue_is_broken(). */
3700 WRITE_ONCE(vq->broken, false);
3701 }
3702 spin_unlock(&dev->vqs_list_lock);
3703 }
3704 EXPORT_SYMBOL_GPL(__virtio_unbreak_device);
3705
virtqueue_get_desc_addr(const struct virtqueue * _vq)3706 dma_addr_t virtqueue_get_desc_addr(const struct virtqueue *_vq)
3707 {
3708 const struct vring_virtqueue *vq = to_vvq(_vq);
3709
3710 BUG_ON(!vq->we_own_ring);
3711
3712 if (virtqueue_is_packed(vq))
3713 return vq->packed.ring_dma_addr;
3714
3715 return vq->split.queue_dma_addr;
3716 }
3717 EXPORT_SYMBOL_GPL(virtqueue_get_desc_addr);
3718
virtqueue_get_avail_addr(const struct virtqueue * _vq)3719 dma_addr_t virtqueue_get_avail_addr(const struct virtqueue *_vq)
3720 {
3721 const struct vring_virtqueue *vq = to_vvq(_vq);
3722
3723 BUG_ON(!vq->we_own_ring);
3724
3725 if (virtqueue_is_packed(vq))
3726 return vq->packed.driver_event_dma_addr;
3727
3728 return vq->split.queue_dma_addr +
3729 ((char *)vq->split.vring.avail - (char *)vq->split.vring.desc);
3730 }
3731 EXPORT_SYMBOL_GPL(virtqueue_get_avail_addr);
3732
virtqueue_get_used_addr(const struct virtqueue * _vq)3733 dma_addr_t virtqueue_get_used_addr(const struct virtqueue *_vq)
3734 {
3735 const struct vring_virtqueue *vq = to_vvq(_vq);
3736
3737 BUG_ON(!vq->we_own_ring);
3738
3739 if (virtqueue_is_packed(vq))
3740 return vq->packed.device_event_dma_addr;
3741
3742 return vq->split.queue_dma_addr +
3743 ((char *)vq->split.vring.used - (char *)vq->split.vring.desc);
3744 }
3745 EXPORT_SYMBOL_GPL(virtqueue_get_used_addr);
3746
3747 /* Only available for split ring */
virtqueue_get_vring(const struct virtqueue * vq)3748 const struct vring *virtqueue_get_vring(const struct virtqueue *vq)
3749 {
3750 return &to_vvq(vq)->split.vring;
3751 }
3752 EXPORT_SYMBOL_GPL(virtqueue_get_vring);
3753
3754 /**
3755 * virtqueue_map_alloc_coherent - alloc coherent mapping
3756 * @vdev: the virtio device we are talking to
3757 * @map: metadata for performing mapping
3758 * @size: the size of the buffer
3759 * @map_handle: the pointer to the mapped address
3760 * @gfp: allocation flag (GFP_XXX)
3761 *
3762 * return virtual address or NULL on error
3763 */
virtqueue_map_alloc_coherent(struct virtio_device * vdev,union virtio_map map,size_t size,dma_addr_t * map_handle,gfp_t gfp)3764 void *virtqueue_map_alloc_coherent(struct virtio_device *vdev,
3765 union virtio_map map,
3766 size_t size, dma_addr_t *map_handle,
3767 gfp_t gfp)
3768 {
3769 if (vdev->map)
3770 return vdev->map->alloc(map, size,
3771 map_handle, gfp);
3772 else
3773 return dma_alloc_coherent(map.dma_dev, size,
3774 map_handle, gfp);
3775 }
3776 EXPORT_SYMBOL_GPL(virtqueue_map_alloc_coherent);
3777
3778 /**
3779 * virtqueue_map_free_coherent - free coherent mapping
3780 * @vdev: the virtio device we are talking to
3781 * @map: metadata for performing mapping
3782 * @size: the size of the buffer
3783 * @vaddr: the virtual address that needs to be freed
3784 * @map_handle: the mapped address that needs to be freed
3785 *
3786 */
virtqueue_map_free_coherent(struct virtio_device * vdev,union virtio_map map,size_t size,void * vaddr,dma_addr_t map_handle)3787 void virtqueue_map_free_coherent(struct virtio_device *vdev,
3788 union virtio_map map, size_t size, void *vaddr,
3789 dma_addr_t map_handle)
3790 {
3791 if (vdev->map)
3792 vdev->map->free(map, size, vaddr,
3793 map_handle, 0);
3794 else
3795 dma_free_coherent(map.dma_dev, size, vaddr, map_handle);
3796 }
3797 EXPORT_SYMBOL_GPL(virtqueue_map_free_coherent);
3798
3799 /**
3800 * virtqueue_map_page_attrs - map a page to the device
3801 * @_vq: the virtqueue we are talking to
3802 * @page: the page that will be mapped by the device
3803 * @offset: the offset in the page for a buffer
3804 * @size: the buffer size
3805 * @dir: mapping direction
3806 * @attrs: mapping attributes
3807 *
3808 * Returns mapped address. Caller should check that by virtqueue_map_mapping_error().
3809 */
virtqueue_map_page_attrs(const struct virtqueue * _vq,struct page * page,unsigned long offset,size_t size,enum dma_data_direction dir,unsigned long attrs)3810 dma_addr_t virtqueue_map_page_attrs(const struct virtqueue *_vq,
3811 struct page *page,
3812 unsigned long offset,
3813 size_t size,
3814 enum dma_data_direction dir,
3815 unsigned long attrs)
3816 {
3817 const struct vring_virtqueue *vq = to_vvq(_vq);
3818 struct virtio_device *vdev = _vq->vdev;
3819
3820 if (vdev->map)
3821 return vdev->map->map_page(vq->map,
3822 page, offset, size,
3823 dir, attrs);
3824
3825 return dma_map_page_attrs(vring_dma_dev(vq),
3826 page, offset, size,
3827 dir, attrs);
3828 }
3829 EXPORT_SYMBOL_GPL(virtqueue_map_page_attrs);
3830
3831 /**
3832 * virtqueue_unmap_page_attrs - map a page to the device
3833 * @_vq: the virtqueue we are talking to
3834 * @map_handle: the mapped address
3835 * @size: the buffer size
3836 * @dir: mapping direction
3837 * @attrs: unmapping attributes
3838 */
virtqueue_unmap_page_attrs(const struct virtqueue * _vq,dma_addr_t map_handle,size_t size,enum dma_data_direction dir,unsigned long attrs)3839 void virtqueue_unmap_page_attrs(const struct virtqueue *_vq,
3840 dma_addr_t map_handle,
3841 size_t size, enum dma_data_direction dir,
3842 unsigned long attrs)
3843 {
3844 const struct vring_virtqueue *vq = to_vvq(_vq);
3845 struct virtio_device *vdev = _vq->vdev;
3846
3847 if (vdev->map)
3848 vdev->map->unmap_page(vq->map,
3849 map_handle, size, dir, attrs);
3850 else
3851 dma_unmap_page_attrs(vring_dma_dev(vq), map_handle,
3852 size, dir, attrs);
3853 }
3854 EXPORT_SYMBOL_GPL(virtqueue_unmap_page_attrs);
3855
3856 /**
3857 * virtqueue_map_single_attrs - map DMA for _vq
3858 * @_vq: the struct virtqueue we're talking about.
3859 * @ptr: the pointer of the buffer to do dma
3860 * @size: the size of the buffer to do dma
3861 * @dir: DMA direction
3862 * @attrs: DMA Attrs
3863 *
3864 * The caller calls this to do dma mapping in advance. The DMA address can be
3865 * passed to this _vq when it is in pre-mapped mode.
3866 *
3867 * return mapped address. Caller should check that by virtqueue_map_mapping_error().
3868 */
virtqueue_map_single_attrs(const struct virtqueue * _vq,void * ptr,size_t size,enum dma_data_direction dir,unsigned long attrs)3869 dma_addr_t virtqueue_map_single_attrs(const struct virtqueue *_vq, void *ptr,
3870 size_t size,
3871 enum dma_data_direction dir,
3872 unsigned long attrs)
3873 {
3874 const struct vring_virtqueue *vq = to_vvq(_vq);
3875
3876 if (!vq->use_map_api) {
3877 kmsan_handle_dma(virt_to_phys(ptr), size, dir);
3878 return (dma_addr_t)virt_to_phys(ptr);
3879 }
3880
3881 /* DMA must never operate on areas that might be remapped. */
3882 if (dev_WARN_ONCE(&_vq->vdev->dev, is_vmalloc_addr(ptr),
3883 "rejecting DMA map of vmalloc memory\n"))
3884 return DMA_MAPPING_ERROR;
3885
3886 return virtqueue_map_page_attrs(&vq->vq, virt_to_page(ptr),
3887 offset_in_page(ptr), size, dir, attrs);
3888 }
3889 EXPORT_SYMBOL_GPL(virtqueue_map_single_attrs);
3890
3891 /**
3892 * virtqueue_unmap_single_attrs - unmap map for _vq
3893 * @_vq: the struct virtqueue we're talking about.
3894 * @addr: the dma address to unmap
3895 * @size: the size of the buffer
3896 * @dir: DMA direction
3897 * @attrs: DMA Attrs
3898 *
3899 * Unmap the address that is mapped by the virtqueue_map_* APIs.
3900 *
3901 */
virtqueue_unmap_single_attrs(const struct virtqueue * _vq,dma_addr_t addr,size_t size,enum dma_data_direction dir,unsigned long attrs)3902 void virtqueue_unmap_single_attrs(const struct virtqueue *_vq,
3903 dma_addr_t addr,
3904 size_t size, enum dma_data_direction dir,
3905 unsigned long attrs)
3906 {
3907 const struct vring_virtqueue *vq = to_vvq(_vq);
3908
3909 if (!vq->use_map_api)
3910 return;
3911
3912 virtqueue_unmap_page_attrs(_vq, addr, size, dir, attrs);
3913 }
3914 EXPORT_SYMBOL_GPL(virtqueue_unmap_single_attrs);
3915
3916 /**
3917 * virtqueue_map_mapping_error - check dma address
3918 * @_vq: the struct virtqueue we're talking about.
3919 * @addr: DMA address
3920 *
3921 * Returns 0 means dma valid. Other means invalid dma address.
3922 */
virtqueue_map_mapping_error(const struct virtqueue * _vq,dma_addr_t addr)3923 int virtqueue_map_mapping_error(const struct virtqueue *_vq, dma_addr_t addr)
3924 {
3925 const struct vring_virtqueue *vq = to_vvq(_vq);
3926
3927 return vring_mapping_error(vq, addr);
3928 }
3929 EXPORT_SYMBOL_GPL(virtqueue_map_mapping_error);
3930
3931 /**
3932 * virtqueue_map_need_sync - check a dma address needs sync
3933 * @_vq: the struct virtqueue we're talking about.
3934 * @addr: DMA address
3935 *
3936 * Check if the dma address mapped by the virtqueue_map_* APIs needs to be
3937 * synchronized
3938 *
3939 * return bool
3940 */
virtqueue_map_need_sync(const struct virtqueue * _vq,dma_addr_t addr)3941 bool virtqueue_map_need_sync(const struct virtqueue *_vq, dma_addr_t addr)
3942 {
3943 const struct vring_virtqueue *vq = to_vvq(_vq);
3944 struct virtio_device *vdev = _vq->vdev;
3945
3946 if (!vq->use_map_api)
3947 return false;
3948
3949 if (vdev->map)
3950 return vdev->map->need_sync(vq->map, addr);
3951 else
3952 return dma_need_sync(vring_dma_dev(vq), addr);
3953 }
3954 EXPORT_SYMBOL_GPL(virtqueue_map_need_sync);
3955
3956 /**
3957 * virtqueue_map_sync_single_range_for_cpu - map sync for cpu
3958 * @_vq: the struct virtqueue we're talking about.
3959 * @addr: DMA address
3960 * @offset: DMA address offset
3961 * @size: buf size for sync
3962 * @dir: DMA direction
3963 *
3964 * Before calling this function, use virtqueue_map_need_sync() to confirm that
3965 * the DMA address really needs to be synchronized
3966 *
3967 */
virtqueue_map_sync_single_range_for_cpu(const struct virtqueue * _vq,dma_addr_t addr,unsigned long offset,size_t size,enum dma_data_direction dir)3968 void virtqueue_map_sync_single_range_for_cpu(const struct virtqueue *_vq,
3969 dma_addr_t addr,
3970 unsigned long offset, size_t size,
3971 enum dma_data_direction dir)
3972 {
3973 const struct vring_virtqueue *vq = to_vvq(_vq);
3974 struct virtio_device *vdev = _vq->vdev;
3975
3976 if (!vq->use_map_api)
3977 return;
3978
3979 if (vdev->map)
3980 vdev->map->sync_single_for_cpu(vq->map,
3981 addr + offset, size, dir);
3982 else
3983 dma_sync_single_range_for_cpu(vring_dma_dev(vq),
3984 addr, offset, size, dir);
3985 }
3986 EXPORT_SYMBOL_GPL(virtqueue_map_sync_single_range_for_cpu);
3987
3988 /**
3989 * virtqueue_map_sync_single_range_for_device - map sync for device
3990 * @_vq: the struct virtqueue we're talking about.
3991 * @addr: DMA address
3992 * @offset: DMA address offset
3993 * @size: buf size for sync
3994 * @dir: DMA direction
3995 *
3996 * Before calling this function, use virtqueue_map_need_sync() to confirm that
3997 * the DMA address really needs to be synchronized
3998 */
virtqueue_map_sync_single_range_for_device(const struct virtqueue * _vq,dma_addr_t addr,unsigned long offset,size_t size,enum dma_data_direction dir)3999 void virtqueue_map_sync_single_range_for_device(const struct virtqueue *_vq,
4000 dma_addr_t addr,
4001 unsigned long offset, size_t size,
4002 enum dma_data_direction dir)
4003 {
4004 const struct vring_virtqueue *vq = to_vvq(_vq);
4005 struct virtio_device *vdev = _vq->vdev;
4006
4007 if (!vq->use_map_api)
4008 return;
4009
4010 if (vdev->map)
4011 vdev->map->sync_single_for_device(vq->map,
4012 addr + offset,
4013 size, dir);
4014 else
4015 dma_sync_single_range_for_device(vring_dma_dev(vq), addr,
4016 offset, size, dir);
4017 }
4018 EXPORT_SYMBOL_GPL(virtqueue_map_sync_single_range_for_device);
4019
4020 MODULE_DESCRIPTION("Virtio ring implementation");
4021 MODULE_LICENSE("GPL");
4022