xref: /linux/drivers/vdpa/vdpa_user/vduse_dev.c (revision 48a4ee65e677559776349128e6a81a6041986c99)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * VDUSE: vDPA Device in Userspace
4  *
5  * Copyright (C) 2020-2021 Bytedance Inc. and/or its affiliates. All rights reserved.
6  *
7  * Author: Xie Yongji <xieyongji@bytedance.com>
8  *
9  */
10 
11 #include "linux/virtio_net.h"
12 #include <linux/bits.h>
13 #include <linux/cleanup.h>
14 #include <linux/init.h>
15 #include <linux/module.h>
16 #include <linux/cdev.h>
17 #include <linux/device.h>
18 #include <linux/eventfd.h>
19 #include <linux/slab.h>
20 #include <linux/wait.h>
21 #include <linux/dma-map-ops.h>
22 #include <linux/poll.h>
23 #include <linux/file.h>
24 #include <linux/uio.h>
25 #include <linux/vdpa.h>
26 #include <linux/nospec.h>
27 #include <linux/virtio.h>
28 #include <linux/vmalloc.h>
29 #include <linux/sched/mm.h>
30 #include <uapi/linux/vduse.h>
31 #include <uapi/linux/vdpa.h>
32 #include <uapi/linux/virtio_config.h>
33 #include <uapi/linux/virtio_ids.h>
34 #include <uapi/linux/virtio_blk.h>
35 #include <uapi/linux/virtio_ring.h>
36 
37 #include "iova_domain.h"
38 
39 #define DRV_AUTHOR   "Yongji Xie <xieyongji@bytedance.com>"
40 #define DRV_DESC     "vDPA Device in Userspace"
41 #define DRV_LICENSE  "GPL v2"
42 
43 #define VDUSE_DEV_MAX (1U << MINORBITS)
44 #define VDUSE_DEV_MAX_GROUPS 0xffff
45 #define VDUSE_DEV_MAX_AS 0xffff
46 #define VDUSE_MAX_BOUNCE_SIZE (1024 * 1024 * 1024)
47 #define VDUSE_MIN_BOUNCE_SIZE (1024 * 1024)
48 #define VDUSE_BOUNCE_SIZE (64 * 1024 * 1024)
49 /* 128 MB reserved for virtqueue creation */
50 #define VDUSE_IOVA_SIZE (VDUSE_MAX_BOUNCE_SIZE + 128 * 1024 * 1024)
51 #define VDUSE_MSG_DEFAULT_TIMEOUT 30
52 
53 #define IRQ_UNBOUND -1
54 
55 /* Supported VDUSE features */
56 static const uint64_t vduse_features = BIT_U64(VDUSE_F_QUEUE_READY) |
57 				       BIT_U64(VDUSE_F_SUSPEND);
58 
59 /*
60  * VDUSE instance have not asked the vduse API version, so assume 0.
61  *
62  * Old devices may not ask for the device version and assume it is 0.  Keep
63  * this value for these.  From the moment the VDUSE instance ask for the
64  * version, convert to the latests supported one and continue regular flow
65  */
66 #define VDUSE_API_VERSION_NOT_ASKED U64_MAX
67 
68 struct vduse_virtqueue {
69 	u16 index;
70 	u16 num_max;
71 	u32 num;
72 	u64 desc_addr;
73 	u64 driver_addr;
74 	u64 device_addr;
75 	struct vdpa_vq_state state;
76 	bool ready;
77 	bool kicked;
78 	u32 group;
79 	spinlock_t kick_lock;
80 	spinlock_t irq_lock;
81 	spinlock_t ready_lock;
82 	struct eventfd_ctx *kickfd;
83 	struct vdpa_callback cb;
84 	struct work_struct inject;
85 	struct work_struct kick;
86 	int irq_effective_cpu;
87 	struct cpumask irq_affinity;
88 	struct kobject kobj;
89 	struct vduse_dev *dev;
90 };
91 
92 struct vduse_dev;
93 
94 struct vduse_vdpa {
95 	struct vdpa_device vdpa;
96 	struct vduse_dev *dev;
97 };
98 
99 struct vduse_umem {
100 	unsigned long iova;
101 	unsigned long npages;
102 	struct page **pages;
103 	struct mm_struct *mm;
104 };
105 
106 struct vduse_as {
107 	struct vduse_iova_domain *domain;
108 	struct vduse_umem *umem;
109 	struct mutex mem_lock;
110 };
111 
112 struct vduse_vq_group {
113 	rwlock_t as_lock;
114 	struct vduse_as *as; /* Protected by as_lock */
115 	struct vduse_dev *dev;
116 };
117 
118 struct vduse_dev {
119 	struct vduse_vdpa *vdev;
120 	struct device *dev;
121 	struct vduse_virtqueue **vqs;
122 	struct vduse_as *as;
123 	char *name;
124 	struct mutex lock;
125 	spinlock_t msg_lock;
126 	u64 vduse_features;
127 	u64 msg_unique;
128 	u32 msg_timeout;
129 	wait_queue_head_t waitq;
130 	struct list_head send_list;
131 	struct list_head recv_list;
132 	struct vdpa_callback config_cb;
133 	struct work_struct inject;
134 	spinlock_t irq_lock;
135 	struct rw_semaphore rwsem;
136 	int minor;
137 	bool broken;
138 	bool connected;
139 	bool suspended;
140 	u64 api_version;
141 	u64 device_features;
142 	u64 driver_features;
143 	u32 device_id;
144 	u32 vendor_id;
145 	u32 generation;
146 	u32 config_size;
147 	void *config;
148 	u8 status;
149 	u32 vq_num;
150 	u32 vq_align;
151 	u32 ngroups;
152 	u32 nas;
153 	struct vduse_vq_group *groups;
154 	unsigned int bounce_size;
155 	struct mutex domain_lock;
156 };
157 
158 struct vduse_dev_msg {
159 	struct vduse_dev_request req;
160 	struct vduse_dev_response resp;
161 	struct list_head list;
162 	wait_queue_head_t waitq;
163 	bool completed;
164 };
165 
166 struct vduse_control {
167 	u64 api_version;
168 	u64 vduse_features;
169 };
170 
171 static DEFINE_MUTEX(vduse_lock);
172 static DEFINE_IDR(vduse_idr);
173 
174 static dev_t vduse_major;
175 static struct cdev vduse_ctrl_cdev;
176 static const struct device *vduse_ctrl_dev;
177 static struct cdev vduse_cdev;
178 static struct workqueue_struct *vduse_irq_wq;
179 static struct workqueue_struct *vduse_irq_bound_wq;
180 
181 static u32 allowed_device_id[] = {
182 	VIRTIO_ID_BLOCK,
183 	VIRTIO_ID_NET,
184 	VIRTIO_ID_FS,
185 };
186 
187 static inline struct vduse_dev *vdpa_to_vduse(struct vdpa_device *vdpa)
188 {
189 	struct vduse_vdpa *vdev = container_of(vdpa, struct vduse_vdpa, vdpa);
190 
191 	return vdev->dev;
192 }
193 
194 static inline struct vduse_dev *dev_to_vduse(struct device *dev)
195 {
196 	struct vdpa_device *vdpa = dev_to_vdpa(dev);
197 
198 	return vdpa_to_vduse(vdpa);
199 }
200 
201 static struct vduse_dev_msg *vduse_find_msg(struct list_head *head,
202 					    uint32_t request_id)
203 {
204 	struct vduse_dev_msg *msg;
205 
206 	list_for_each_entry(msg, head, list) {
207 		if (msg->req.request_id == request_id) {
208 			list_del(&msg->list);
209 			return msg;
210 		}
211 	}
212 
213 	return NULL;
214 }
215 
216 static struct vduse_dev_msg *vduse_dequeue_msg(struct list_head *head)
217 {
218 	struct vduse_dev_msg *msg = NULL;
219 
220 	if (!list_empty(head)) {
221 		msg = list_first_entry(head, struct vduse_dev_msg, list);
222 		list_del(&msg->list);
223 	}
224 
225 	return msg;
226 }
227 
228 static void vduse_enqueue_msg(struct list_head *head,
229 			      struct vduse_dev_msg *msg)
230 {
231 	list_add_tail(&msg->list, head);
232 }
233 
234 static void vduse_enqueue_msg_head(struct list_head *head,
235 				   struct vduse_dev_msg *msg)
236 {
237 	list_add(&msg->list, head);
238 }
239 
240 static void vduse_dev_broken(struct vduse_dev *dev)
241 {
242 	struct vduse_dev_msg *msg, *tmp;
243 
244 	if (unlikely(dev->broken))
245 		return;
246 
247 	list_splice_init(&dev->recv_list, &dev->send_list);
248 	list_for_each_entry_safe(msg, tmp, &dev->send_list, list) {
249 		list_del(&msg->list);
250 		msg->completed = 1;
251 		msg->resp.result = VDUSE_REQ_RESULT_FAILED;
252 		wake_up(&msg->waitq);
253 	}
254 	dev->broken = true;
255 	wake_up(&dev->waitq);
256 }
257 
258 static int vduse_dev_msg_sync(struct vduse_dev *dev,
259 			      struct vduse_dev_msg *msg)
260 {
261 	int ret;
262 
263 	if (unlikely(dev->broken))
264 		return -EIO;
265 
266 	init_waitqueue_head(&msg->waitq);
267 	spin_lock(&dev->msg_lock);
268 	if (unlikely(dev->broken)) {
269 		spin_unlock(&dev->msg_lock);
270 		return -EIO;
271 	}
272 	msg->req.request_id = dev->msg_unique++;
273 	vduse_enqueue_msg(&dev->send_list, msg);
274 	wake_up(&dev->waitq);
275 	spin_unlock(&dev->msg_lock);
276 	if (dev->msg_timeout)
277 		ret = wait_event_killable_timeout(msg->waitq, msg->completed,
278 						  (long)dev->msg_timeout * HZ);
279 	else
280 		ret = wait_event_killable(msg->waitq, msg->completed);
281 
282 	spin_lock(&dev->msg_lock);
283 	if (!msg->completed) {
284 		list_del(&msg->list);
285 		msg->resp.result = VDUSE_REQ_RESULT_FAILED;
286 		/* Mark the device as malfunction when there is a timeout */
287 		if (!ret)
288 			vduse_dev_broken(dev);
289 	}
290 	ret = (msg->resp.result == VDUSE_REQ_RESULT_OK) ? 0 : -EIO;
291 	spin_unlock(&dev->msg_lock);
292 
293 	return ret;
294 }
295 
296 static int vduse_dev_get_vq_state_packed(struct vduse_dev *dev,
297 					 struct vduse_virtqueue *vq,
298 					 struct vdpa_vq_state_packed *packed)
299 {
300 	struct vduse_dev_msg msg = { 0 };
301 	int ret;
302 
303 	msg.req.type = VDUSE_GET_VQ_STATE;
304 	msg.req.vq_state.index = vq->index;
305 
306 	ret = vduse_dev_msg_sync(dev, &msg);
307 	if (ret)
308 		return ret;
309 
310 	packed->last_avail_counter =
311 			msg.resp.vq_state.packed.last_avail_counter & 0x0001;
312 	packed->last_avail_idx =
313 			msg.resp.vq_state.packed.last_avail_idx & 0x7FFF;
314 	packed->last_used_counter =
315 			msg.resp.vq_state.packed.last_used_counter & 0x0001;
316 	packed->last_used_idx =
317 			msg.resp.vq_state.packed.last_used_idx & 0x7FFF;
318 
319 	return 0;
320 }
321 
322 static int vduse_dev_get_vq_state_split(struct vduse_dev *dev,
323 					struct vduse_virtqueue *vq,
324 					struct vdpa_vq_state_split *split)
325 {
326 	struct vduse_dev_msg msg = { 0 };
327 	int ret;
328 
329 	msg.req.type = VDUSE_GET_VQ_STATE;
330 	msg.req.vq_state.index = vq->index;
331 
332 	ret = vduse_dev_msg_sync(dev, &msg);
333 	if (ret)
334 		return ret;
335 
336 	split->avail_index = msg.resp.vq_state.split.avail_index;
337 
338 	return 0;
339 }
340 
341 static int vduse_dev_set_status(struct vduse_dev *dev, u8 status)
342 {
343 	struct vduse_dev_msg msg = { 0 };
344 
345 	msg.req.type = VDUSE_SET_STATUS;
346 	msg.req.s.status = status;
347 
348 	return vduse_dev_msg_sync(dev, &msg);
349 }
350 
351 static int vduse_dev_update_iotlb(struct vduse_dev *dev, u32 asid,
352 				  u64 start, u64 last)
353 {
354 	struct vduse_dev_msg msg = { 0 };
355 
356 	if (last < start)
357 		return -EINVAL;
358 
359 	msg.req.type = VDUSE_UPDATE_IOTLB;
360 	if (dev->api_version < VDUSE_API_VERSION_1) {
361 		msg.req.iova.start = start;
362 		msg.req.iova.last = last;
363 	} else {
364 		msg.req.iova_v2.start = start;
365 		msg.req.iova_v2.last = last;
366 		msg.req.iova_v2.asid = asid;
367 	}
368 
369 	return vduse_dev_msg_sync(dev, &msg);
370 }
371 
372 static ssize_t vduse_dev_read_iter(struct kiocb *iocb, struct iov_iter *to)
373 {
374 	struct file *file = iocb->ki_filp;
375 	struct vduse_dev *dev = file->private_data;
376 	struct vduse_dev_msg *msg;
377 	struct vduse_dev_request req;
378 	int size = sizeof(struct vduse_dev_request);
379 	ssize_t ret;
380 
381 	if (iov_iter_count(to) < size)
382 		return -EINVAL;
383 
384 	spin_lock(&dev->msg_lock);
385 	while (1) {
386 		msg = vduse_dequeue_msg(&dev->send_list);
387 		if (msg)
388 			break;
389 		spin_unlock(&dev->msg_lock);
390 
391 		if (file->f_flags & O_NONBLOCK)
392 			return -EAGAIN;
393 
394 		ret = wait_event_interruptible_exclusive(dev->waitq,
395 					!list_empty(&dev->send_list));
396 		if (ret)
397 			return ret;
398 
399 		spin_lock(&dev->msg_lock);
400 	}
401 
402 	memcpy(&req, &msg->req, sizeof(req));
403 	/*
404 	 * We must ensure vduse_msg is on send_list or recv_list before unlock
405 	 * dev->msg_lock. Because vduse_dev_msg_sync() may be timeout when we
406 	 * copy data to userspace, and will call list_del() for this msg.
407 	 */
408 	vduse_enqueue_msg(&dev->recv_list, msg);
409 	spin_unlock(&dev->msg_lock);
410 
411 	ret = copy_to_iter(&req, size, to);
412 	if (ret != size) {
413 		/*
414 		 * Roll back: move msg back to send_list if still pending.
415 		 *
416 		 * NOTE:
417 		 * vduse_find_msg() must use req.request_id instead of `msg`.
418 		 * A malicious userspace may reply to this request, and wake up
419 		 * the caller, after which `msg` will have already been freed.
420 		 * And here vduse_find_msg() will return NULL then do nothing.
421 		 */
422 		spin_lock(&dev->msg_lock);
423 		msg = vduse_find_msg(&dev->recv_list, req.request_id);
424 		if (msg)
425 			vduse_enqueue_msg_head(&dev->send_list, msg);
426 		spin_unlock(&dev->msg_lock);
427 		ret = -EFAULT;
428 	}
429 
430 	return ret;
431 }
432 
433 static bool is_mem_zero(const char *ptr, int size)
434 {
435 	int i;
436 
437 	for (i = 0; i < size; i++) {
438 		if (ptr[i])
439 			return false;
440 	}
441 	return true;
442 }
443 
444 static ssize_t vduse_dev_write_iter(struct kiocb *iocb, struct iov_iter *from)
445 {
446 	struct file *file = iocb->ki_filp;
447 	struct vduse_dev *dev = file->private_data;
448 	struct vduse_dev_response resp;
449 	struct vduse_dev_msg *msg;
450 	size_t ret;
451 
452 	ret = copy_from_iter(&resp, sizeof(resp), from);
453 	if (ret != sizeof(resp))
454 		return -EINVAL;
455 
456 	if (!is_mem_zero((const char *)resp.reserved, sizeof(resp.reserved)))
457 		return -EINVAL;
458 
459 	spin_lock(&dev->msg_lock);
460 	msg = vduse_find_msg(&dev->recv_list, resp.request_id);
461 	if (!msg) {
462 		ret = -ENOENT;
463 		goto unlock;
464 	}
465 
466 	memcpy(&msg->resp, &resp, sizeof(resp));
467 	msg->completed = 1;
468 	wake_up(&msg->waitq);
469 unlock:
470 	spin_unlock(&dev->msg_lock);
471 
472 	return ret;
473 }
474 
475 static __poll_t vduse_dev_poll(struct file *file, poll_table *wait)
476 {
477 	struct vduse_dev *dev = file->private_data;
478 	__poll_t mask = 0;
479 
480 	poll_wait(file, &dev->waitq, wait);
481 
482 	spin_lock(&dev->msg_lock);
483 
484 	if (unlikely(dev->broken))
485 		mask |= EPOLLERR;
486 	if (!list_empty(&dev->send_list))
487 		mask |= EPOLLIN | EPOLLRDNORM;
488 	if (!list_empty(&dev->recv_list))
489 		mask |= EPOLLOUT | EPOLLWRNORM;
490 
491 	spin_unlock(&dev->msg_lock);
492 
493 	return mask;
494 }
495 
496 static void vduse_dev_reset(struct vduse_dev *dev)
497 {
498 	int i;
499 
500 	/* The coherent mappings are handled in vduse_dev_free_coherent() */
501 	for (i = 0; i < dev->nas; i++) {
502 		struct vduse_iova_domain *domain = dev->as[i].domain;
503 
504 		if (domain && domain->bounce_map)
505 			vduse_domain_reset_bounce_map(domain);
506 	}
507 
508 	scoped_guard(rwsem_write, &dev->rwsem) {
509 		WRITE_ONCE(dev->suspended, false);
510 		dev->status = 0;
511 		dev->driver_features = 0;
512 		dev->generation++;
513 		spin_lock(&dev->irq_lock);
514 		dev->config_cb.callback = NULL;
515 		dev->config_cb.private = NULL;
516 		spin_unlock(&dev->irq_lock);
517 
518 		for (i = 0; i < dev->vq_num; i++) {
519 			struct vduse_virtqueue *vq = dev->vqs[i];
520 
521 			scoped_guard(spinlock_bh, &vq->ready_lock) {
522 				vq->ready = false;
523 			}
524 			vq->desc_addr = 0;
525 			vq->driver_addr = 0;
526 			vq->device_addr = 0;
527 			vq->num = 0;
528 			memset(&vq->state, 0, sizeof(vq->state));
529 
530 			spin_lock(&vq->kick_lock);
531 			vq->kicked = false;
532 			if (vq->kickfd)
533 				eventfd_ctx_put(vq->kickfd);
534 			vq->kickfd = NULL;
535 			spin_unlock(&vq->kick_lock);
536 
537 			spin_lock(&vq->irq_lock);
538 			vq->cb.callback = NULL;
539 			vq->cb.private = NULL;
540 			vq->cb.trigger = NULL;
541 			spin_unlock(&vq->irq_lock);
542 		}
543 	}
544 
545 	flush_work(&dev->inject);
546 	for (i = 0; i < dev->vq_num; i++) {
547 		struct vduse_virtqueue *vq = dev->vqs[i];
548 
549 		flush_work(&vq->inject);
550 		flush_work(&vq->kick);
551 	}
552 }
553 
554 static int vduse_vdpa_set_vq_address(struct vdpa_device *vdpa, u16 idx,
555 				u64 desc_area, u64 driver_area,
556 				u64 device_area)
557 {
558 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
559 	struct vduse_virtqueue *vq = dev->vqs[idx];
560 
561 	vq->desc_addr = desc_area;
562 	vq->driver_addr = driver_area;
563 	vq->device_addr = device_area;
564 
565 	return 0;
566 }
567 
568 static void vduse_vq_kick(struct vduse_virtqueue *vq)
569 {
570 	/*
571 	 * This runs in the context of the vdpa kick_vq op, which may be
572 	 * atomic (e.g. virtio-blk kicks from blk-mq dispatch under
573 	 * rcu_read_lock()), so dev->rwsem must not be taken here.
574 	 * dev->suspended is checked under kick_lock instead and
575 	 * vduse_vdpa_suspend() cycles every kick_lock after setting it.
576 	 */
577 	guard(spinlock)(&vq->kick_lock);
578 	if (READ_ONCE(vq->dev->suspended))
579 		return;
580 
581 	scoped_guard(spinlock_bh, &vq->ready_lock)
582 		if (!vq->ready)
583 			return;
584 
585 	if (vq->kickfd)
586 		eventfd_signal(vq->kickfd);
587 	else
588 		vq->kicked = true;
589 }
590 
591 static void vduse_vq_kick_work(struct work_struct *work)
592 {
593 	struct vduse_virtqueue *vq = container_of(work,
594 					struct vduse_virtqueue, kick);
595 
596 	vduse_vq_kick(vq);
597 }
598 
599 static void vduse_vdpa_kick_vq(struct vdpa_device *vdpa, u16 idx)
600 {
601 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
602 	struct vduse_virtqueue *vq = dev->vqs[idx];
603 
604 	if (!eventfd_signal_allowed()) {
605 		schedule_work(&vq->kick);
606 		return;
607 	}
608 	vduse_vq_kick(vq);
609 }
610 
611 static void vduse_vdpa_set_vq_cb(struct vdpa_device *vdpa, u16 idx,
612 			      struct vdpa_callback *cb)
613 {
614 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
615 	struct vduse_virtqueue *vq = dev->vqs[idx];
616 
617 	spin_lock(&vq->irq_lock);
618 	vq->cb.callback = cb->callback;
619 	vq->cb.private = cb->private;
620 	vq->cb.trigger = cb->trigger;
621 	spin_unlock(&vq->irq_lock);
622 }
623 
624 static void vduse_vdpa_set_vq_num(struct vdpa_device *vdpa, u16 idx, u32 num)
625 {
626 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
627 	struct vduse_virtqueue *vq = dev->vqs[idx];
628 
629 	vq->num = num;
630 }
631 
632 static u16 vduse_vdpa_get_vq_size(struct vdpa_device *vdpa, u16 idx)
633 {
634 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
635 	struct vduse_virtqueue *vq = dev->vqs[idx];
636 
637 	if (vq->num)
638 		return vq->num;
639 	else
640 		return vq->num_max;
641 }
642 
643 static void vduse_vdpa_set_vq_ready(struct vdpa_device *vdpa,
644 					u16 idx, bool ready)
645 {
646 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
647 	struct vduse_virtqueue *vq = dev->vqs[idx];
648 	struct vduse_dev_msg msg = { 0 };
649 	int r;
650 
651 	if (dev->vduse_features & BIT_U64(VDUSE_F_QUEUE_READY)) {
652 		msg.req.type = VDUSE_SET_VQ_READY;
653 		msg.req.vq_ready.num = idx;
654 		msg.req.vq_ready.ready = !!ready;
655 
656 		r = vduse_dev_msg_sync(dev, &msg);
657 
658 		if (r < 0) {
659 			dev_dbg(&vdpa->dev, "device refuses to set vq %u ready %u",
660 					idx, ready);
661 
662 			/* We can't do better than break the device in this case */
663 			spin_lock(&dev->msg_lock);
664 			vduse_dev_broken(dev);
665 			spin_unlock(&dev->msg_lock);
666 
667 			return;
668 		}
669 	}
670 
671 	guard(spinlock_bh)(&vq->ready_lock);
672 	vq->ready = ready;
673 }
674 
675 static bool vduse_vdpa_get_vq_ready(struct vdpa_device *vdpa, u16 idx)
676 {
677 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
678 	struct vduse_virtqueue *vq = dev->vqs[idx];
679 
680 	guard(spinlock_bh)(&vq->ready_lock);
681 	return vq->ready;
682 }
683 
684 static int vduse_vdpa_set_vq_state(struct vdpa_device *vdpa, u16 idx,
685 				const struct vdpa_vq_state *state)
686 {
687 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
688 	struct vduse_virtqueue *vq = dev->vqs[idx];
689 
690 	if (dev->driver_features & BIT_ULL(VIRTIO_F_RING_PACKED)) {
691 		vq->state.packed.last_avail_counter =
692 				state->packed.last_avail_counter;
693 		vq->state.packed.last_avail_idx = state->packed.last_avail_idx;
694 		vq->state.packed.last_used_counter =
695 				state->packed.last_used_counter;
696 		vq->state.packed.last_used_idx = state->packed.last_used_idx;
697 	} else
698 		vq->state.split.avail_index = state->split.avail_index;
699 
700 	return 0;
701 }
702 
703 static u32 vduse_get_vq_group(struct vdpa_device *vdpa, u16 idx)
704 {
705 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
706 
707 	if (dev->api_version < VDUSE_API_VERSION_1)
708 		return 0;
709 
710 	return dev->vqs[idx]->group;
711 }
712 
713 static union virtio_map vduse_get_vq_map(struct vdpa_device *vdpa, u16 idx)
714 {
715 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
716 	u32 vq_group = vduse_get_vq_group(vdpa, idx);
717 	union virtio_map ret = {
718 		.group = &dev->groups[vq_group],
719 	};
720 
721 	return ret;
722 }
723 
724 DEFINE_GUARD(vq_group_as_read_lock, struct vduse_vq_group *,
725 	if (_T->dev->nas > 1)
726 		read_lock(&_T->as_lock),
727 	if (_T->dev->nas > 1)
728 		read_unlock(&_T->as_lock))
729 
730 DEFINE_GUARD(vq_group_as_write_lock, struct vduse_vq_group *,
731 	if (_T->dev->nas > 1)
732 		write_lock(&_T->as_lock),
733 	if (_T->dev->nas > 1)
734 		write_unlock(&_T->as_lock))
735 
736 static int vduse_set_group_asid(struct vdpa_device *vdpa, unsigned int group,
737 				unsigned int asid)
738 {
739 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
740 	struct vduse_dev_msg msg = { 0 };
741 	int r;
742 
743 	if (dev->api_version < VDUSE_API_VERSION_1)
744 		return -EINVAL;
745 
746 	msg.req.type = VDUSE_SET_VQ_GROUP_ASID;
747 	msg.req.vq_group_asid.group = group;
748 	msg.req.vq_group_asid.asid = asid;
749 
750 	r = vduse_dev_msg_sync(dev, &msg);
751 	if (r < 0)
752 		return r;
753 
754 	guard(vq_group_as_write_lock)(&dev->groups[group]);
755 	dev->groups[group].as = &dev->as[asid];
756 
757 	return 0;
758 }
759 
760 static int vduse_vdpa_get_vq_state(struct vdpa_device *vdpa, u16 idx,
761 				struct vdpa_vq_state *state)
762 {
763 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
764 	struct vduse_virtqueue *vq = dev->vqs[idx];
765 
766 	if (dev->driver_features & BIT_ULL(VIRTIO_F_RING_PACKED))
767 		return vduse_dev_get_vq_state_packed(dev, vq, &state->packed);
768 
769 	return vduse_dev_get_vq_state_split(dev, vq, &state->split);
770 }
771 
772 static u32 vduse_vdpa_get_vq_align(struct vdpa_device *vdpa)
773 {
774 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
775 
776 	return dev->vq_align;
777 }
778 
779 static u64 vduse_vdpa_get_device_features(struct vdpa_device *vdpa)
780 {
781 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
782 
783 	return dev->device_features;
784 }
785 
786 static int vduse_vdpa_set_driver_features(struct vdpa_device *vdpa, u64 features)
787 {
788 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
789 
790 	dev->driver_features = features;
791 	return 0;
792 }
793 
794 static u64 vduse_vdpa_get_driver_features(struct vdpa_device *vdpa)
795 {
796 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
797 
798 	return dev->driver_features;
799 }
800 
801 static void vduse_vdpa_set_config_cb(struct vdpa_device *vdpa,
802 				  struct vdpa_callback *cb)
803 {
804 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
805 
806 	spin_lock(&dev->irq_lock);
807 	dev->config_cb.callback = cb->callback;
808 	dev->config_cb.private = cb->private;
809 	spin_unlock(&dev->irq_lock);
810 }
811 
812 static u16 vduse_vdpa_get_vq_num_max(struct vdpa_device *vdpa)
813 {
814 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
815 	u16 num_max = 0;
816 	int i;
817 
818 	for (i = 0; i < dev->vq_num; i++)
819 		if (num_max < dev->vqs[i]->num_max)
820 			num_max = dev->vqs[i]->num_max;
821 
822 	return num_max;
823 }
824 
825 static u32 vduse_vdpa_get_device_id(struct vdpa_device *vdpa)
826 {
827 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
828 
829 	return dev->device_id;
830 }
831 
832 static u32 vduse_vdpa_get_vendor_id(struct vdpa_device *vdpa)
833 {
834 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
835 
836 	return dev->vendor_id;
837 }
838 
839 static u8 vduse_vdpa_get_status(struct vdpa_device *vdpa)
840 {
841 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
842 
843 	return dev->status;
844 }
845 
846 static void vduse_vdpa_set_status(struct vdpa_device *vdpa, u8 status)
847 {
848 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
849 
850 	if (vduse_dev_set_status(dev, status))
851 		return;
852 
853 	dev->status = status;
854 }
855 
856 static size_t vduse_vdpa_get_config_size(struct vdpa_device *vdpa)
857 {
858 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
859 
860 	return dev->config_size;
861 }
862 
863 static void vduse_vdpa_get_config(struct vdpa_device *vdpa, unsigned int offset,
864 				  void *buf, unsigned int len)
865 {
866 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
867 
868 	/* Initialize the buffer in case of partial copy. */
869 	memset(buf, 0, len);
870 
871 	if (offset > dev->config_size)
872 		return;
873 
874 	if (len > dev->config_size - offset)
875 		len = dev->config_size - offset;
876 
877 	memcpy(buf, dev->config + offset, len);
878 }
879 
880 static void vduse_vdpa_set_config(struct vdpa_device *vdpa, unsigned int offset,
881 			const void *buf, unsigned int len)
882 {
883 	/* Now we only support read-only configuration space */
884 }
885 
886 static int vduse_vdpa_reset(struct vdpa_device *vdpa)
887 {
888 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
889 	int ret = vduse_dev_set_status(dev, 0);
890 
891 	vduse_dev_reset(dev);
892 
893 	return ret;
894 }
895 
896 static u32 vduse_vdpa_get_generation(struct vdpa_device *vdpa)
897 {
898 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
899 
900 	return dev->generation;
901 }
902 
903 static int vduse_vdpa_set_vq_affinity(struct vdpa_device *vdpa, u16 idx,
904 				      const struct cpumask *cpu_mask)
905 {
906 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
907 
908 	if (cpu_mask)
909 		cpumask_copy(&dev->vqs[idx]->irq_affinity, cpu_mask);
910 	else
911 		cpumask_setall(&dev->vqs[idx]->irq_affinity);
912 
913 	return 0;
914 }
915 
916 static const struct cpumask *
917 vduse_vdpa_get_vq_affinity(struct vdpa_device *vdpa, u16 idx)
918 {
919 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
920 
921 	return &dev->vqs[idx]->irq_affinity;
922 }
923 
924 static int vduse_vdpa_set_map(struct vdpa_device *vdpa,
925 				unsigned int asid,
926 				struct vhost_iotlb *iotlb)
927 {
928 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
929 	int ret;
930 
931 	ret = vduse_domain_set_map(dev->as[asid].domain, iotlb);
932 	if (ret)
933 		return ret;
934 
935 	ret = vduse_dev_update_iotlb(dev, asid, 0ULL, ULLONG_MAX);
936 	if (ret) {
937 		vduse_domain_clear_map(dev->as[asid].domain, iotlb);
938 		return ret;
939 	}
940 
941 	return 0;
942 }
943 
944 static int vduse_vdpa_suspend(struct vdpa_device *vdpa)
945 {
946 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
947 	struct vduse_dev_msg msg = { 0 };
948 	int ret;
949 
950 	msg.req.type = VDUSE_SUSPEND;
951 
952 	ret = vduse_dev_msg_sync(dev, &msg);
953 	if (ret == 0) {
954 		scoped_guard(rwsem_write, &dev->rwsem)
955 			WRITE_ONCE(dev->suspended, true);
956 
957 		/*
958 		 * Kicks check dev->suspended under kick_lock without taking
959 		 * the rwsem: cycle each kick_lock so that no kick that has
960 		 * already passed the check is still in flight after this.
961 		 */
962 		for (u32 i = 0; i < dev->vq_num; i++) {
963 			spin_lock(&dev->vqs[i]->kick_lock);
964 			spin_unlock(&dev->vqs[i]->kick_lock);
965 		}
966 
967 		cancel_work_sync(&dev->inject);
968 		for (u32 i = 0; i < dev->vq_num; i++)
969 			cancel_work_sync(&dev->vqs[i]->inject);
970 	}
971 
972 	return ret;
973 }
974 
975 static void vduse_vdpa_free(struct vdpa_device *vdpa)
976 {
977 	struct vduse_dev *dev = vdpa_to_vduse(vdpa);
978 
979 	dev->vdev = NULL;
980 }
981 
982 static const struct vdpa_config_ops vduse_vdpa_config_ops = {
983 	.set_vq_address		= vduse_vdpa_set_vq_address,
984 	.kick_vq		= vduse_vdpa_kick_vq,
985 	.set_vq_cb		= vduse_vdpa_set_vq_cb,
986 	.set_vq_num             = vduse_vdpa_set_vq_num,
987 	.get_vq_size		= vduse_vdpa_get_vq_size,
988 	.get_vq_group		= vduse_get_vq_group,
989 	.set_vq_ready		= vduse_vdpa_set_vq_ready,
990 	.get_vq_ready		= vduse_vdpa_get_vq_ready,
991 	.set_vq_state		= vduse_vdpa_set_vq_state,
992 	.get_vq_state		= vduse_vdpa_get_vq_state,
993 	.get_vq_align		= vduse_vdpa_get_vq_align,
994 	.get_device_features	= vduse_vdpa_get_device_features,
995 	.set_driver_features	= vduse_vdpa_set_driver_features,
996 	.get_driver_features	= vduse_vdpa_get_driver_features,
997 	.set_config_cb		= vduse_vdpa_set_config_cb,
998 	.get_vq_num_max		= vduse_vdpa_get_vq_num_max,
999 	.get_device_id		= vduse_vdpa_get_device_id,
1000 	.get_vendor_id		= vduse_vdpa_get_vendor_id,
1001 	.get_status		= vduse_vdpa_get_status,
1002 	.set_status		= vduse_vdpa_set_status,
1003 	.get_config_size	= vduse_vdpa_get_config_size,
1004 	.get_config		= vduse_vdpa_get_config,
1005 	.set_config		= vduse_vdpa_set_config,
1006 	.get_generation		= vduse_vdpa_get_generation,
1007 	.set_vq_affinity	= vduse_vdpa_set_vq_affinity,
1008 	.get_vq_affinity	= vduse_vdpa_get_vq_affinity,
1009 	.reset			= vduse_vdpa_reset,
1010 	.set_map		= vduse_vdpa_set_map,
1011 	.set_group_asid		= vduse_set_group_asid,
1012 	.get_vq_map		= vduse_get_vq_map,
1013 	.free			= vduse_vdpa_free,
1014 };
1015 
1016 static const struct vdpa_config_ops vduse_vdpa_config_ops_with_suspend = {
1017 	.set_vq_address		= vduse_vdpa_set_vq_address,
1018 	.kick_vq		= vduse_vdpa_kick_vq,
1019 	.set_vq_cb		= vduse_vdpa_set_vq_cb,
1020 	.set_vq_num             = vduse_vdpa_set_vq_num,
1021 	.get_vq_size		= vduse_vdpa_get_vq_size,
1022 	.get_vq_group		= vduse_get_vq_group,
1023 	.set_vq_ready		= vduse_vdpa_set_vq_ready,
1024 	.get_vq_ready		= vduse_vdpa_get_vq_ready,
1025 	.set_vq_state		= vduse_vdpa_set_vq_state,
1026 	.get_vq_state		= vduse_vdpa_get_vq_state,
1027 	.get_vq_align		= vduse_vdpa_get_vq_align,
1028 	.get_device_features	= vduse_vdpa_get_device_features,
1029 	.set_driver_features	= vduse_vdpa_set_driver_features,
1030 	.get_driver_features	= vduse_vdpa_get_driver_features,
1031 	.set_config_cb		= vduse_vdpa_set_config_cb,
1032 	.get_vq_num_max		= vduse_vdpa_get_vq_num_max,
1033 	.get_device_id		= vduse_vdpa_get_device_id,
1034 	.get_vendor_id		= vduse_vdpa_get_vendor_id,
1035 	.get_status		= vduse_vdpa_get_status,
1036 	.set_status		= vduse_vdpa_set_status,
1037 	.get_config_size	= vduse_vdpa_get_config_size,
1038 	.get_config		= vduse_vdpa_get_config,
1039 	.set_config		= vduse_vdpa_set_config,
1040 	.get_generation		= vduse_vdpa_get_generation,
1041 	.set_vq_affinity	= vduse_vdpa_set_vq_affinity,
1042 	.get_vq_affinity	= vduse_vdpa_get_vq_affinity,
1043 	.reset			= vduse_vdpa_reset,
1044 	.set_map		= vduse_vdpa_set_map,
1045 	.set_group_asid		= vduse_set_group_asid,
1046 	.get_vq_map		= vduse_get_vq_map,
1047 	.suspend		= vduse_vdpa_suspend,
1048 	.free			= vduse_vdpa_free,
1049 };
1050 
1051 static void vduse_dev_sync_single_for_device(union virtio_map token,
1052 					     dma_addr_t dma_addr, size_t size,
1053 					     enum dma_data_direction dir)
1054 {
1055 	struct vduse_iova_domain *domain;
1056 
1057 	if (!token.group)
1058 		return;
1059 
1060 	guard(vq_group_as_read_lock)(token.group);
1061 	domain = token.group->as->domain;
1062 	vduse_domain_sync_single_for_device(domain, dma_addr, size, dir);
1063 }
1064 
1065 static void vduse_dev_sync_single_for_cpu(union virtio_map token,
1066 					     dma_addr_t dma_addr, size_t size,
1067 					     enum dma_data_direction dir)
1068 {
1069 	struct vduse_iova_domain *domain;
1070 
1071 	if (!token.group)
1072 		return;
1073 
1074 	guard(vq_group_as_read_lock)(token.group);
1075 	domain = token.group->as->domain;
1076 	vduse_domain_sync_single_for_cpu(domain, dma_addr, size, dir);
1077 }
1078 
1079 static dma_addr_t vduse_dev_map_page(union virtio_map token, struct page *page,
1080 				     unsigned long offset, size_t size,
1081 				     enum dma_data_direction dir,
1082 				     unsigned long attrs)
1083 {
1084 	struct vduse_iova_domain *domain;
1085 
1086 	if (!token.group)
1087 		return DMA_MAPPING_ERROR;
1088 
1089 	guard(vq_group_as_read_lock)(token.group);
1090 	domain = token.group->as->domain;
1091 	return vduse_domain_map_page(domain, page, offset, size, dir, attrs);
1092 }
1093 
1094 static void vduse_dev_unmap_page(union virtio_map token, dma_addr_t dma_addr,
1095 				 size_t size, enum dma_data_direction dir,
1096 				 unsigned long attrs)
1097 {
1098 	struct vduse_iova_domain *domain;
1099 
1100 	if (!token.group)
1101 		return;
1102 
1103 	guard(vq_group_as_read_lock)(token.group);
1104 	domain = token.group->as->domain;
1105 	vduse_domain_unmap_page(domain, dma_addr, size, dir, attrs);
1106 }
1107 
1108 static void *vduse_dev_alloc_coherent(union virtio_map token, size_t size,
1109 				      dma_addr_t *dma_addr, gfp_t flag)
1110 {
1111 	void *addr;
1112 
1113 	*dma_addr = DMA_MAPPING_ERROR;
1114 	if (!token.group)
1115 		return NULL;
1116 
1117 	addr = alloc_pages_exact(size, flag | __GFP_ZERO);
1118 	if (!addr)
1119 		return NULL;
1120 
1121 	{
1122 		struct vduse_iova_domain *domain;
1123 
1124 		guard(vq_group_as_read_lock)(token.group);
1125 		domain = token.group->as->domain;
1126 		*dma_addr = vduse_domain_alloc_coherent(domain, size, addr);
1127 		if (*dma_addr == DMA_MAPPING_ERROR)
1128 			goto err;
1129 	}
1130 
1131 	return addr;
1132 
1133 err:
1134 	free_pages_exact(addr, size);
1135 	return NULL;
1136 }
1137 
1138 static void vduse_dev_free_coherent(union virtio_map token, size_t size,
1139 				    void *vaddr, dma_addr_t dma_addr,
1140 				    unsigned long attrs)
1141 {
1142 	if (!token.group)
1143 		return;
1144 
1145 	{
1146 		struct vduse_iova_domain *domain;
1147 
1148 		guard(vq_group_as_read_lock)(token.group);
1149 		domain = token.group->as->domain;
1150 		vduse_domain_free_coherent(domain, size, dma_addr, attrs);
1151 	}
1152 
1153 	free_pages_exact(vaddr, size);
1154 }
1155 
1156 static bool vduse_dev_need_sync(union virtio_map token, dma_addr_t dma_addr)
1157 {
1158 	if (!token.group)
1159 		return false;
1160 
1161 	guard(vq_group_as_read_lock)(token.group);
1162 	return dma_addr < token.group->as->domain->bounce_size;
1163 }
1164 
1165 static int vduse_dev_mapping_error(union virtio_map token, dma_addr_t dma_addr)
1166 {
1167 	if (unlikely(dma_addr == DMA_MAPPING_ERROR))
1168 		return -ENOMEM;
1169 	return 0;
1170 }
1171 
1172 static size_t vduse_dev_max_mapping_size(union virtio_map token)
1173 {
1174 	if (!token.group)
1175 		return 0;
1176 
1177 	guard(vq_group_as_read_lock)(token.group);
1178 	return token.group->as->domain->bounce_size;
1179 }
1180 
1181 static const struct virtio_map_ops vduse_map_ops = {
1182 	.sync_single_for_device = vduse_dev_sync_single_for_device,
1183 	.sync_single_for_cpu = vduse_dev_sync_single_for_cpu,
1184 	.map_page = vduse_dev_map_page,
1185 	.unmap_page = vduse_dev_unmap_page,
1186 	.alloc = vduse_dev_alloc_coherent,
1187 	.free = vduse_dev_free_coherent,
1188 	.need_sync = vduse_dev_need_sync,
1189 	.mapping_error = vduse_dev_mapping_error,
1190 	.max_mapping_size = vduse_dev_max_mapping_size,
1191 };
1192 
1193 static unsigned int perm_to_file_flags(u8 perm)
1194 {
1195 	unsigned int flags = 0;
1196 
1197 	switch (perm) {
1198 	case VDUSE_ACCESS_WO:
1199 		flags |= O_WRONLY;
1200 		break;
1201 	case VDUSE_ACCESS_RO:
1202 		flags |= O_RDONLY;
1203 		break;
1204 	case VDUSE_ACCESS_RW:
1205 		flags |= O_RDWR;
1206 		break;
1207 	default:
1208 		WARN(1, "invalidate vhost IOTLB permission\n");
1209 		break;
1210 	}
1211 
1212 	return flags;
1213 }
1214 
1215 static int vduse_kickfd_setup(struct vduse_dev *dev,
1216 			struct vduse_vq_eventfd *eventfd)
1217 {
1218 	struct eventfd_ctx *ctx = NULL;
1219 	struct vduse_virtqueue *vq;
1220 	u32 index;
1221 
1222 	if (eventfd->index >= dev->vq_num)
1223 		return -EINVAL;
1224 
1225 	index = array_index_nospec(eventfd->index, dev->vq_num);
1226 	vq = dev->vqs[index];
1227 	if (eventfd->fd >= 0) {
1228 		ctx = eventfd_ctx_fdget(eventfd->fd);
1229 		if (IS_ERR(ctx))
1230 			return PTR_ERR(ctx);
1231 	} else if (eventfd->fd != VDUSE_EVENTFD_DEASSIGN)
1232 		return 0;
1233 
1234 	guard(spinlock)(&vq->kick_lock);
1235 	if (vq->kickfd)
1236 		eventfd_ctx_put(vq->kickfd);
1237 	vq->kickfd = ctx;
1238 
1239 	guard(spinlock_bh)(&vq->ready_lock);
1240 	if (vq->ready && vq->kicked && vq->kickfd) {
1241 		eventfd_signal(vq->kickfd);
1242 		vq->kicked = false;
1243 	}
1244 
1245 	return 0;
1246 }
1247 
1248 static bool vduse_dev_is_ready(struct vduse_dev *dev)
1249 {
1250 	int i;
1251 
1252 	for (i = 0; i < dev->vq_num; i++)
1253 		if (!dev->vqs[i]->num_max)
1254 			return false;
1255 
1256 	return true;
1257 }
1258 
1259 static void vduse_dev_irq_inject(struct work_struct *work)
1260 {
1261 	struct vduse_dev *dev = container_of(work, struct vduse_dev, inject);
1262 
1263 	guard(rwsem_read)(&dev->rwsem);
1264 	if (dev->suspended)
1265 		return;
1266 
1267 	spin_lock_bh(&dev->irq_lock);
1268 	if (dev->config_cb.callback)
1269 		dev->config_cb.callback(dev->config_cb.private);
1270 	spin_unlock_bh(&dev->irq_lock);
1271 }
1272 
1273 static void vduse_vq_irq_inject(struct work_struct *work)
1274 {
1275 	struct vduse_virtqueue *vq = container_of(work,
1276 					struct vduse_virtqueue, inject);
1277 
1278 	guard(rwsem_read)(&vq->dev->rwsem);
1279 	if (vq->dev->suspended)
1280 		return;
1281 
1282 	guard(spinlock_bh)(&vq->irq_lock);
1283 	guard(spinlock_bh)(&vq->ready_lock);
1284 	if (vq->ready && vq->cb.callback)
1285 		vq->cb.callback(vq->cb.private);
1286 }
1287 
1288 static bool vduse_vq_signal_irqfd(struct vduse_virtqueue *vq)
1289 {
1290 	bool signal = false;
1291 
1292 	guard(rwsem_read)(&vq->dev->rwsem);
1293 	if (vq->dev->suspended)
1294 		return false;
1295 
1296 	if (!vq->cb.trigger)
1297 		return false;
1298 
1299 	guard(spinlock_irq)(&vq->irq_lock);
1300 	guard(spinlock_irq)(&vq->ready_lock);
1301 	if (vq->ready && vq->cb.trigger) {
1302 		eventfd_signal(vq->cb.trigger);
1303 		signal = true;
1304 	}
1305 
1306 	return signal;
1307 }
1308 
1309 static int vduse_dev_queue_irq_work(struct vduse_dev *dev,
1310 				    struct work_struct *irq_work,
1311 				    int irq_effective_cpu)
1312 {
1313 	int ret = -EINVAL;
1314 
1315 	guard(rwsem_read)(&dev->rwsem);
1316 	if (dev->suspended || !(dev->status & VIRTIO_CONFIG_S_DRIVER_OK))
1317 		return ret;
1318 
1319 	ret = 0;
1320 	if (irq_effective_cpu == IRQ_UNBOUND)
1321 		queue_work(vduse_irq_wq, irq_work);
1322 	else
1323 		queue_work_on(irq_effective_cpu,
1324 			      vduse_irq_bound_wq, irq_work);
1325 
1326 	return ret;
1327 }
1328 
1329 static int vduse_dev_dereg_umem(struct vduse_dev *dev, u32 asid,
1330 				u64 iova, u64 size)
1331 {
1332 	int ret;
1333 
1334 	mutex_lock(&dev->as[asid].mem_lock);
1335 	ret = -ENOENT;
1336 	if (!dev->as[asid].umem)
1337 		goto unlock;
1338 
1339 	ret = -EINVAL;
1340 	if (!dev->as[asid].domain)
1341 		goto unlock;
1342 
1343 	if (dev->as[asid].umem->iova != iova ||
1344 	    size != dev->as[asid].domain->bounce_size)
1345 		goto unlock;
1346 
1347 	vduse_domain_remove_user_bounce_pages(dev->as[asid].domain);
1348 	unpin_user_pages_dirty_lock(dev->as[asid].umem->pages,
1349 				    dev->as[asid].umem->npages, true);
1350 	atomic64_sub(dev->as[asid].umem->npages, &dev->as[asid].umem->mm->pinned_vm);
1351 	mmdrop(dev->as[asid].umem->mm);
1352 	vfree(dev->as[asid].umem->pages);
1353 	kfree(dev->as[asid].umem);
1354 	dev->as[asid].umem = NULL;
1355 	ret = 0;
1356 unlock:
1357 	mutex_unlock(&dev->as[asid].mem_lock);
1358 	return ret;
1359 }
1360 
1361 static int vduse_dev_reg_umem(struct vduse_dev *dev,
1362 			      u32 asid, u64 iova, u64 uaddr, u64 size)
1363 {
1364 	struct page **page_list = NULL;
1365 	struct vduse_umem *umem = NULL;
1366 	long pinned = 0;
1367 	unsigned long npages, lock_limit;
1368 	int ret;
1369 
1370 	if (!dev->as[asid].domain || !dev->as[asid].domain->bounce_map ||
1371 	    size != dev->as[asid].domain->bounce_size ||
1372 	    iova != 0 || uaddr & ~PAGE_MASK)
1373 		return -EINVAL;
1374 
1375 	mutex_lock(&dev->as[asid].mem_lock);
1376 	ret = -EEXIST;
1377 	if (dev->as[asid].umem)
1378 		goto unlock;
1379 
1380 	ret = -ENOMEM;
1381 	npages = size >> PAGE_SHIFT;
1382 	page_list = __vmalloc(array_size(npages, sizeof(struct page *)),
1383 			      GFP_KERNEL_ACCOUNT);
1384 	umem = kzalloc_obj(*umem);
1385 	if (!page_list || !umem)
1386 		goto unlock;
1387 
1388 	mmap_read_lock(current->mm);
1389 
1390 	lock_limit = PFN_DOWN(rlimit(RLIMIT_MEMLOCK));
1391 	if (npages + atomic64_read(&current->mm->pinned_vm) > lock_limit)
1392 		goto out;
1393 
1394 	pinned = pin_user_pages(uaddr, npages, FOLL_LONGTERM | FOLL_WRITE,
1395 				page_list);
1396 	if (pinned != npages) {
1397 		ret = pinned < 0 ? pinned : -ENOMEM;
1398 		goto out;
1399 	}
1400 
1401 	ret = vduse_domain_add_user_bounce_pages(dev->as[asid].domain,
1402 						 page_list, pinned);
1403 	if (ret)
1404 		goto out;
1405 
1406 	atomic64_add(npages, &current->mm->pinned_vm);
1407 
1408 	umem->pages = page_list;
1409 	umem->npages = pinned;
1410 	umem->iova = iova;
1411 	umem->mm = current->mm;
1412 	mmgrab(current->mm);
1413 
1414 	dev->as[asid].umem = umem;
1415 out:
1416 	if (ret && pinned > 0)
1417 		unpin_user_pages(page_list, pinned);
1418 
1419 	mmap_read_unlock(current->mm);
1420 unlock:
1421 	if (ret) {
1422 		vfree(page_list);
1423 		kfree(umem);
1424 	}
1425 	mutex_unlock(&dev->as[asid].mem_lock);
1426 	return ret;
1427 }
1428 
1429 static void vduse_vq_update_effective_cpu(struct vduse_virtqueue *vq)
1430 {
1431 	int curr_cpu = vq->irq_effective_cpu;
1432 
1433 	while (true) {
1434 		curr_cpu = cpumask_next(curr_cpu, &vq->irq_affinity);
1435 		if (cpu_online(curr_cpu))
1436 			break;
1437 
1438 		if (curr_cpu >= nr_cpu_ids)
1439 			curr_cpu = IRQ_UNBOUND;
1440 	}
1441 
1442 	vq->irq_effective_cpu = curr_cpu;
1443 }
1444 
1445 static int vduse_dev_iotlb_entry(struct vduse_dev *dev,
1446 				 struct vduse_iotlb_entry_v2 *entry,
1447 				 struct file **f, uint64_t *capability)
1448 {
1449 	u32 asid;
1450 	int r = -EINVAL;
1451 	struct vhost_iotlb_map *map;
1452 
1453 	if (entry->start > entry->last || entry->asid >= dev->nas)
1454 		return -EINVAL;
1455 
1456 	asid = array_index_nospec(entry->asid, dev->nas);
1457 	mutex_lock(&dev->domain_lock);
1458 
1459 	if (!dev->as[asid].domain)
1460 		goto out;
1461 
1462 	spin_lock(&dev->as[asid].domain->iotlb_lock);
1463 	map = vhost_iotlb_itree_first(dev->as[asid].domain->iotlb,
1464 				      entry->start, entry->last);
1465 	if (map) {
1466 		if (f) {
1467 			const struct vdpa_map_file *map_file;
1468 
1469 			map_file = (struct vdpa_map_file *)map->opaque;
1470 			entry->offset = map_file->offset;
1471 			*f = get_file(map_file->file);
1472 		}
1473 		entry->start = map->start;
1474 		entry->last = map->last;
1475 		entry->perm = map->perm;
1476 		if (capability) {
1477 			*capability = 0;
1478 
1479 			if (dev->as[asid].domain->bounce_map && map->start == 0 &&
1480 			    map->last == dev->as[asid].domain->bounce_size - 1)
1481 				*capability |= VDUSE_IOVA_CAP_UMEM;
1482 		}
1483 
1484 		r = 0;
1485 	}
1486 	spin_unlock(&dev->as[asid].domain->iotlb_lock);
1487 
1488 out:
1489 	mutex_unlock(&dev->domain_lock);
1490 	return r;
1491 }
1492 
1493 static long vduse_dev_ioctl(struct file *file, unsigned int cmd,
1494 			    unsigned long arg)
1495 {
1496 	struct vduse_dev *dev = file->private_data;
1497 	void __user *argp = (void __user *)arg;
1498 	int ret;
1499 
1500 	if (unlikely(dev->broken))
1501 		return -EPERM;
1502 
1503 	switch (cmd) {
1504 	case VDUSE_IOTLB_GET_FD:
1505 	case VDUSE_IOTLB_GET_FD2: {
1506 		struct vduse_iotlb_entry_v2 entry = {0};
1507 		struct file *f = NULL;
1508 
1509 		ret = -ENOIOCTLCMD;
1510 		if (dev->api_version < VDUSE_API_VERSION_1 &&
1511 		    cmd == VDUSE_IOTLB_GET_FD2)
1512 			break;
1513 
1514 		ret = -EFAULT;
1515 		if (copy_from_user(&entry, argp, _IOC_SIZE(cmd)))
1516 			break;
1517 
1518 		ret = -EINVAL;
1519 		if (!is_mem_zero((const char *)entry.reserved,
1520 				 sizeof(entry.reserved)))
1521 			break;
1522 
1523 		ret = vduse_dev_iotlb_entry(dev, &entry, &f, NULL);
1524 		if (ret)
1525 			break;
1526 
1527 		ret = -EINVAL;
1528 		if (!f)
1529 			break;
1530 
1531 		ret = copy_to_user(argp, &entry, _IOC_SIZE(cmd));
1532 		if (ret) {
1533 			ret = -EFAULT;
1534 			fput(f);
1535 			break;
1536 		}
1537 		ret = receive_fd(f, NULL, perm_to_file_flags(entry.perm));
1538 		fput(f);
1539 		break;
1540 	}
1541 	case VDUSE_DEV_GET_FEATURES:
1542 		/*
1543 		 * Just mirror what driver wrote here.
1544 		 * The driver is expected to check FEATURE_OK later.
1545 		 */
1546 		ret = put_user(dev->driver_features, (u64 __user *)argp);
1547 		break;
1548 	case VDUSE_DEV_SET_CONFIG: {
1549 		struct vduse_config_data config;
1550 		unsigned long size = offsetof(struct vduse_config_data,
1551 					      buffer);
1552 
1553 		ret = -EFAULT;
1554 		if (copy_from_user(&config, argp, size))
1555 			break;
1556 
1557 		ret = -EINVAL;
1558 		if (config.offset > dev->config_size ||
1559 		    config.length == 0 ||
1560 		    config.length > dev->config_size - config.offset)
1561 			break;
1562 
1563 		ret = -EFAULT;
1564 		if (copy_from_user(dev->config + config.offset, argp + size,
1565 				   config.length))
1566 			break;
1567 
1568 		ret = 0;
1569 		break;
1570 	}
1571 	case VDUSE_DEV_INJECT_CONFIG_IRQ:
1572 		ret = vduse_dev_queue_irq_work(dev, &dev->inject, IRQ_UNBOUND);
1573 		break;
1574 	case VDUSE_VQ_SETUP: {
1575 		struct vduse_vq_config config;
1576 		u32 index;
1577 
1578 		ret = -EFAULT;
1579 		if (copy_from_user(&config, argp, sizeof(config)))
1580 			break;
1581 
1582 		ret = -EINVAL;
1583 		if (config.index >= dev->vq_num)
1584 			break;
1585 
1586 		if (dev->api_version < VDUSE_API_VERSION_1) {
1587 			if (config.group)
1588 				break;
1589 		} else {
1590 			if (config.group >= dev->ngroups)
1591 				break;
1592 			if (dev->status & VIRTIO_CONFIG_S_DRIVER_OK)
1593 				break;
1594 		}
1595 
1596 		if (config.reserved1 ||
1597 		    !is_mem_zero((const char *)config.reserved2,
1598 				 sizeof(config.reserved2)))
1599 			break;
1600 
1601 		index = array_index_nospec(config.index, dev->vq_num);
1602 		dev->vqs[index]->num_max = config.max_size;
1603 		dev->vqs[index]->group = config.group;
1604 		ret = 0;
1605 		break;
1606 	}
1607 	case VDUSE_VQ_GET_INFO: {
1608 		struct vduse_vq_info vq_info;
1609 		struct vduse_virtqueue *vq;
1610 		u32 index;
1611 
1612 		ret = -EFAULT;
1613 		if (copy_from_user(&vq_info, argp, sizeof(vq_info)))
1614 			break;
1615 
1616 		ret = -EINVAL;
1617 		if (vq_info.index >= dev->vq_num)
1618 			break;
1619 
1620 		index = array_index_nospec(vq_info.index, dev->vq_num);
1621 		vq = dev->vqs[index];
1622 		vq_info.desc_addr = vq->desc_addr;
1623 		vq_info.driver_addr = vq->driver_addr;
1624 		vq_info.device_addr = vq->device_addr;
1625 		vq_info.num = vq->num;
1626 
1627 		if (dev->driver_features & BIT_ULL(VIRTIO_F_RING_PACKED)) {
1628 			vq_info.packed.last_avail_counter =
1629 				vq->state.packed.last_avail_counter;
1630 			vq_info.packed.last_avail_idx =
1631 				vq->state.packed.last_avail_idx;
1632 			vq_info.packed.last_used_counter =
1633 				vq->state.packed.last_used_counter;
1634 			vq_info.packed.last_used_idx =
1635 				vq->state.packed.last_used_idx;
1636 		} else
1637 			vq_info.split.avail_index =
1638 				vq->state.split.avail_index;
1639 
1640 		scoped_guard(spinlock_bh, &vq->ready_lock) {
1641 			vq_info.ready = vq->ready;
1642 		}
1643 
1644 		ret = -EFAULT;
1645 		if (copy_to_user(argp, &vq_info, sizeof(vq_info)))
1646 			break;
1647 
1648 		ret = 0;
1649 		break;
1650 	}
1651 	case VDUSE_VQ_SETUP_KICKFD: {
1652 		struct vduse_vq_eventfd eventfd;
1653 
1654 		ret = -EFAULT;
1655 		if (copy_from_user(&eventfd, argp, sizeof(eventfd)))
1656 			break;
1657 
1658 		ret = vduse_kickfd_setup(dev, &eventfd);
1659 		break;
1660 	}
1661 	case VDUSE_VQ_INJECT_IRQ: {
1662 		u32 index;
1663 
1664 		ret = -EFAULT;
1665 		if (get_user(index, (u32 __user *)argp))
1666 			break;
1667 
1668 		ret = -EINVAL;
1669 		if (index >= dev->vq_num)
1670 			break;
1671 
1672 		ret = 0;
1673 		index = array_index_nospec(index, dev->vq_num);
1674 		if (!vduse_vq_signal_irqfd(dev->vqs[index])) {
1675 			vduse_vq_update_effective_cpu(dev->vqs[index]);
1676 			ret = vduse_dev_queue_irq_work(dev,
1677 						&dev->vqs[index]->inject,
1678 						dev->vqs[index]->irq_effective_cpu);
1679 		}
1680 		break;
1681 	}
1682 	case VDUSE_IOTLB_REG_UMEM: {
1683 		struct vduse_iova_umem umem;
1684 		u32 asid;
1685 
1686 		ret = -EFAULT;
1687 		if (copy_from_user(&umem, argp, sizeof(umem)))
1688 			break;
1689 
1690 		ret = -EINVAL;
1691 		if (!is_mem_zero((const char *)umem.reserved,
1692 				 sizeof(umem.reserved)) ||
1693 		    (dev->api_version < VDUSE_API_VERSION_1 &&
1694 		     umem.asid != 0) || umem.asid >= dev->nas)
1695 			break;
1696 
1697 		mutex_lock(&dev->domain_lock);
1698 		asid = array_index_nospec(umem.asid, dev->nas);
1699 		ret = vduse_dev_reg_umem(dev, asid, umem.iova,
1700 					 umem.uaddr, umem.size);
1701 		mutex_unlock(&dev->domain_lock);
1702 		break;
1703 	}
1704 	case VDUSE_IOTLB_DEREG_UMEM: {
1705 		struct vduse_iova_umem umem;
1706 		u32 asid;
1707 
1708 		ret = -EFAULT;
1709 		if (copy_from_user(&umem, argp, sizeof(umem)))
1710 			break;
1711 
1712 		ret = -EINVAL;
1713 		if (!is_mem_zero((const char *)umem.reserved,
1714 				 sizeof(umem.reserved)) ||
1715 		    (dev->api_version < VDUSE_API_VERSION_1 &&
1716 		     umem.asid != 0) ||
1717 		     umem.asid >= dev->nas)
1718 			break;
1719 
1720 		mutex_lock(&dev->domain_lock);
1721 		asid = array_index_nospec(umem.asid, dev->nas);
1722 		ret = vduse_dev_dereg_umem(dev, asid, umem.iova,
1723 					   umem.size);
1724 		mutex_unlock(&dev->domain_lock);
1725 		break;
1726 	}
1727 	case VDUSE_IOTLB_GET_INFO: {
1728 		struct vduse_iova_info info;
1729 		struct vduse_iotlb_entry_v2 entry;
1730 
1731 		ret = -EFAULT;
1732 		if (copy_from_user(&info, argp, sizeof(info)))
1733 			break;
1734 
1735 		if (!is_mem_zero((const char *)info.reserved,
1736 				 sizeof(info.reserved)))
1737 			break;
1738 
1739 		if (dev->api_version < VDUSE_API_VERSION_1) {
1740 			if (info.asid)
1741 				break;
1742 		} else if (info.asid >= dev->nas)
1743 			break;
1744 
1745 		entry.start = info.start;
1746 		entry.last = info.last;
1747 		entry.asid = info.asid;
1748 		ret = vduse_dev_iotlb_entry(dev, &entry, NULL,
1749 					    &info.capability);
1750 		if (ret < 0)
1751 			break;
1752 
1753 		info.start = entry.start;
1754 		info.last = entry.last;
1755 		info.asid = entry.asid;
1756 
1757 		ret = -EFAULT;
1758 		if (copy_to_user(argp, &info, sizeof(info)))
1759 			break;
1760 
1761 		ret = 0;
1762 		break;
1763 	}
1764 	default:
1765 		ret = -ENOIOCTLCMD;
1766 		break;
1767 	}
1768 
1769 	return ret;
1770 }
1771 
1772 #ifdef CONFIG_COMPAT_FOR_U64_ALIGNMENT
1773 /*
1774  * i386 has different alignment constraints than x86_64,
1775  * so there are only 3 bytes of padding instead of 7.
1776  */
1777 struct compat_vduse_iotlb_entry {
1778 	compat_u64 offset;
1779 	compat_u64 start;
1780 	compat_u64 last;
1781 	__u8 perm;
1782 	__u8 padding[3];
1783 };
1784 #define COMPAT_VDUSE_IOTLB_GET_FD	_IOWR(VDUSE_BASE, 0x10, struct compat_vduse_iotlb_entry)
1785 
1786 struct compat_vduse_vq_info {
1787 	__u32 index;
1788 	__u32 num;
1789 	compat_u64 desc_addr;
1790 	compat_u64 driver_addr;
1791 	compat_u64 device_addr;
1792 	union {
1793 		struct vduse_vq_state_split split;
1794 		struct vduse_vq_state_packed packed;
1795 	};
1796 	__u8 ready;
1797 	__u8 padding[3];
1798 };
1799 #define COMPAT_VDUSE_VQ_GET_INFO	_IOWR(VDUSE_BASE, 0x15, struct compat_vduse_vq_info)
1800 
1801 static long vduse_dev_compat_ioctl(struct file *file, unsigned int cmd,
1802 				   unsigned long arg)
1803 {
1804 	struct vduse_dev *dev = file->private_data;
1805 	void __user *argp = (void __user *)arg;
1806 	int ret;
1807 
1808 	if (unlikely(dev->broken))
1809 		return -EPERM;
1810 
1811 	switch (cmd) {
1812 	case COMPAT_VDUSE_IOTLB_GET_FD: {
1813 		struct vduse_iotlb_entry_v2 entry = {0};
1814 		struct file *f = NULL;
1815 
1816 		ret = -EFAULT;
1817 		if (copy_from_user(&entry, argp, _IOC_SIZE(cmd)))
1818 			break;
1819 
1820 		ret = vduse_dev_iotlb_entry(dev, &entry, &f, NULL);
1821 		if (ret)
1822 			break;
1823 
1824 		ret = -EINVAL;
1825 		if (!f)
1826 			break;
1827 
1828 		ret = copy_to_user(argp, &entry, _IOC_SIZE(cmd));
1829 		if (ret) {
1830 			ret = -EFAULT;
1831 			fput(f);
1832 			break;
1833 		}
1834 		ret = receive_fd(f, NULL, perm_to_file_flags(entry.perm));
1835 		fput(f);
1836 		break;
1837 	}
1838 	case COMPAT_VDUSE_VQ_GET_INFO: {
1839 		struct vduse_vq_info vq_info = {};
1840 		struct vduse_virtqueue *vq;
1841 		u32 index;
1842 
1843 		ret = -EFAULT;
1844 		if (copy_from_user(&vq_info, argp,
1845 				   sizeof(struct compat_vduse_vq_info)))
1846 			break;
1847 
1848 		ret = -EINVAL;
1849 		if (vq_info.index >= dev->vq_num)
1850 			break;
1851 
1852 		index = array_index_nospec(vq_info.index, dev->vq_num);
1853 		vq = dev->vqs[index];
1854 		vq_info.desc_addr = vq->desc_addr;
1855 		vq_info.driver_addr = vq->driver_addr;
1856 		vq_info.device_addr = vq->device_addr;
1857 		vq_info.num = vq->num;
1858 
1859 		if (dev->driver_features & BIT_ULL(VIRTIO_F_RING_PACKED)) {
1860 			vq_info.packed.last_avail_counter =
1861 				vq->state.packed.last_avail_counter;
1862 			vq_info.packed.last_avail_idx =
1863 				vq->state.packed.last_avail_idx;
1864 			vq_info.packed.last_used_counter =
1865 				vq->state.packed.last_used_counter;
1866 			vq_info.packed.last_used_idx =
1867 				vq->state.packed.last_used_idx;
1868 		} else
1869 			vq_info.split.avail_index =
1870 				vq->state.split.avail_index;
1871 
1872 		scoped_guard(spinlock_bh, &vq->ready_lock) {
1873 			vq_info.ready = vq->ready;
1874 		}
1875 
1876 		ret = -EFAULT;
1877 		if (copy_to_user(argp, &vq_info,
1878 		    sizeof(struct compat_vduse_vq_info)))
1879 			break;
1880 
1881 		ret = 0;
1882 		break;
1883 	}
1884 	default:
1885 		return vduse_dev_ioctl(file, cmd,
1886 				       (unsigned long)compat_ptr(arg));
1887 	}
1888 
1889 	return ret;
1890 }
1891 #else
1892 #define vduse_dev_compat_ioctl compat_ptr_ioctl
1893 #endif
1894 
1895 static int vduse_dev_release(struct inode *inode, struct file *file)
1896 {
1897 	struct vduse_dev *dev = file->private_data;
1898 
1899 	mutex_lock(&dev->domain_lock);
1900 	for (int i = 0; i < dev->nas; i++)
1901 		if (dev->as[i].domain)
1902 			vduse_dev_dereg_umem(dev, i, 0,
1903 					     dev->as[i].domain->bounce_size);
1904 	mutex_unlock(&dev->domain_lock);
1905 	spin_lock(&dev->msg_lock);
1906 	/* Make sure the inflight messages can processed after reconncection */
1907 	list_splice_init(&dev->recv_list, &dev->send_list);
1908 	spin_unlock(&dev->msg_lock);
1909 	dev->connected = false;
1910 
1911 	return 0;
1912 }
1913 
1914 static int vduse_dev_open(struct inode *inode, struct file *file)
1915 {
1916 	int ret = -EBUSY;
1917 	struct vduse_dev *dev;
1918 
1919 	mutex_lock(&vduse_lock);
1920 	dev = idr_find(&vduse_idr, iminor(inode));
1921 	if (!dev) {
1922 		mutex_unlock(&vduse_lock);
1923 		return -ENODEV;
1924 	}
1925 
1926 	mutex_lock(&dev->lock);
1927 	if (dev->connected)
1928 		goto unlock;
1929 
1930 	ret = 0;
1931 	dev->connected = true;
1932 	file->private_data = dev;
1933 unlock:
1934 	mutex_unlock(&dev->lock);
1935 	mutex_unlock(&vduse_lock);
1936 
1937 	return ret;
1938 }
1939 
1940 static const struct file_operations vduse_dev_fops = {
1941 	.owner		= THIS_MODULE,
1942 	.open		= vduse_dev_open,
1943 	.release	= vduse_dev_release,
1944 	.read_iter	= vduse_dev_read_iter,
1945 	.write_iter	= vduse_dev_write_iter,
1946 	.poll		= vduse_dev_poll,
1947 	.unlocked_ioctl	= vduse_dev_ioctl,
1948 	.compat_ioctl	= vduse_dev_compat_ioctl,
1949 	.llseek		= noop_llseek,
1950 };
1951 
1952 static ssize_t irq_cb_affinity_show(struct vduse_virtqueue *vq, char *buf)
1953 {
1954 	return sprintf(buf, "%*pb\n", cpumask_pr_args(&vq->irq_affinity));
1955 }
1956 
1957 static ssize_t irq_cb_affinity_store(struct vduse_virtqueue *vq,
1958 				     const char *buf, size_t count)
1959 {
1960 	cpumask_var_t new_value;
1961 	int ret;
1962 
1963 	if (!zalloc_cpumask_var(&new_value, GFP_KERNEL))
1964 		return -ENOMEM;
1965 
1966 	ret = cpumask_parse(buf, new_value);
1967 	if (ret)
1968 		goto free_mask;
1969 
1970 	ret = -EINVAL;
1971 	if (!cpumask_intersects(new_value, cpu_online_mask))
1972 		goto free_mask;
1973 
1974 	cpumask_copy(&vq->irq_affinity, new_value);
1975 	ret = count;
1976 free_mask:
1977 	free_cpumask_var(new_value);
1978 	return ret;
1979 }
1980 
1981 struct vq_sysfs_entry {
1982 	struct attribute attr;
1983 	ssize_t (*show)(struct vduse_virtqueue *vq, char *buf);
1984 	ssize_t (*store)(struct vduse_virtqueue *vq, const char *buf,
1985 			 size_t count);
1986 };
1987 
1988 static struct vq_sysfs_entry irq_cb_affinity_attr = __ATTR_RW(irq_cb_affinity);
1989 
1990 static struct attribute *vq_attrs[] = {
1991 	&irq_cb_affinity_attr.attr,
1992 	NULL,
1993 };
1994 ATTRIBUTE_GROUPS(vq);
1995 
1996 static ssize_t vq_attr_show(struct kobject *kobj, struct attribute *attr,
1997 			    char *buf)
1998 {
1999 	struct vduse_virtqueue *vq = container_of(kobj,
2000 					struct vduse_virtqueue, kobj);
2001 	struct vq_sysfs_entry *entry = container_of(attr,
2002 					struct vq_sysfs_entry, attr);
2003 
2004 	if (!entry->show)
2005 		return -EIO;
2006 
2007 	return entry->show(vq, buf);
2008 }
2009 
2010 static ssize_t vq_attr_store(struct kobject *kobj, struct attribute *attr,
2011 			     const char *buf, size_t count)
2012 {
2013 	struct vduse_virtqueue *vq = container_of(kobj,
2014 					struct vduse_virtqueue, kobj);
2015 	struct vq_sysfs_entry *entry = container_of(attr,
2016 					struct vq_sysfs_entry, attr);
2017 
2018 	if (!entry->store)
2019 		return -EIO;
2020 
2021 	return entry->store(vq, buf, count);
2022 }
2023 
2024 static const struct sysfs_ops vq_sysfs_ops = {
2025 	.show = vq_attr_show,
2026 	.store = vq_attr_store,
2027 };
2028 
2029 static void vq_release(struct kobject *kobj)
2030 {
2031 	struct vduse_virtqueue *vq = container_of(kobj,
2032 					struct vduse_virtqueue, kobj);
2033 	kfree(vq);
2034 }
2035 
2036 static const struct kobj_type vq_type = {
2037 	.release	= vq_release,
2038 	.sysfs_ops	= &vq_sysfs_ops,
2039 	.default_groups	= vq_groups,
2040 };
2041 
2042 static char *vduse_devnode(const struct device *dev, umode_t *mode)
2043 {
2044 	return kasprintf(GFP_KERNEL, "vduse/%s", dev_name(dev));
2045 }
2046 
2047 static const struct class vduse_class = {
2048 	.name = "vduse",
2049 	.devnode = vduse_devnode,
2050 };
2051 
2052 static void vduse_dev_deinit_vqs(struct vduse_dev *dev)
2053 {
2054 	int i;
2055 
2056 	if (!dev->vqs)
2057 		return;
2058 
2059 	for (i = 0; i < dev->vq_num; i++)
2060 		kobject_put(&dev->vqs[i]->kobj);
2061 	kfree(dev->vqs);
2062 }
2063 
2064 static int vduse_dev_init_vqs(struct vduse_dev *dev, u32 vq_align, u32 vq_num)
2065 {
2066 	int ret, i;
2067 
2068 	dev->vq_align = vq_align;
2069 	dev->vq_num = vq_num;
2070 	dev->vqs = kzalloc_objs(*dev->vqs, dev->vq_num);
2071 	if (!dev->vqs)
2072 		return -ENOMEM;
2073 
2074 	for (i = 0; i < vq_num; i++) {
2075 		dev->vqs[i] = kzalloc_obj(*dev->vqs[i]);
2076 		if (!dev->vqs[i]) {
2077 			ret = -ENOMEM;
2078 			goto err;
2079 		}
2080 
2081 		dev->vqs[i]->index = i;
2082 		dev->vqs[i]->dev = dev;
2083 		dev->vqs[i]->irq_effective_cpu = IRQ_UNBOUND;
2084 		INIT_WORK(&dev->vqs[i]->inject, vduse_vq_irq_inject);
2085 		INIT_WORK(&dev->vqs[i]->kick, vduse_vq_kick_work);
2086 		spin_lock_init(&dev->vqs[i]->kick_lock);
2087 		spin_lock_init(&dev->vqs[i]->irq_lock);
2088 		spin_lock_init(&dev->vqs[i]->ready_lock);
2089 		cpumask_setall(&dev->vqs[i]->irq_affinity);
2090 
2091 		kobject_init(&dev->vqs[i]->kobj, &vq_type);
2092 		ret = kobject_add(&dev->vqs[i]->kobj,
2093 				  &dev->dev->kobj, "vq%d", i);
2094 		if (ret) {
2095 			kfree(dev->vqs[i]);
2096 			goto err;
2097 		}
2098 	}
2099 
2100 	return 0;
2101 err:
2102 	while (i--)
2103 		kobject_put(&dev->vqs[i]->kobj);
2104 	kfree(dev->vqs);
2105 	dev->vqs = NULL;
2106 	return ret;
2107 }
2108 
2109 static struct vduse_dev *vduse_dev_create(void)
2110 {
2111 	struct vduse_dev *dev = kzalloc_obj(*dev);
2112 
2113 	if (!dev)
2114 		return NULL;
2115 
2116 	mutex_init(&dev->lock);
2117 	mutex_init(&dev->domain_lock);
2118 	spin_lock_init(&dev->msg_lock);
2119 	INIT_LIST_HEAD(&dev->send_list);
2120 	INIT_LIST_HEAD(&dev->recv_list);
2121 	spin_lock_init(&dev->irq_lock);
2122 	init_rwsem(&dev->rwsem);
2123 
2124 	INIT_WORK(&dev->inject, vduse_dev_irq_inject);
2125 	init_waitqueue_head(&dev->waitq);
2126 
2127 	return dev;
2128 }
2129 
2130 static void vduse_dev_destroy(struct vduse_dev *dev)
2131 {
2132 	kfree(dev);
2133 }
2134 
2135 static struct vduse_dev *vduse_find_dev(const char *name)
2136 {
2137 	struct vduse_dev *dev;
2138 	int id;
2139 
2140 	idr_for_each_entry(&vduse_idr, dev, id)
2141 		if (!strcmp(dev->name, name))
2142 			return dev;
2143 
2144 	return NULL;
2145 }
2146 
2147 static int vduse_destroy_dev(char *name)
2148 {
2149 	struct vduse_dev *dev = vduse_find_dev(name);
2150 
2151 	if (!dev)
2152 		return -EINVAL;
2153 
2154 	mutex_lock(&dev->lock);
2155 	if (dev->vdev || dev->connected) {
2156 		mutex_unlock(&dev->lock);
2157 		return -EBUSY;
2158 	}
2159 	dev->connected = true;
2160 	mutex_unlock(&dev->lock);
2161 
2162 	vduse_dev_reset(dev);
2163 	device_destroy(&vduse_class, MKDEV(MAJOR(vduse_major), dev->minor));
2164 	idr_remove(&vduse_idr, dev->minor);
2165 	kvfree(dev->config);
2166 	vduse_dev_deinit_vqs(dev);
2167 	for (int i = 0; i < dev->nas; i++) {
2168 		if (dev->as[i].domain)
2169 			vduse_domain_destroy(dev->as[i].domain);
2170 	}
2171 	kfree(dev->as);
2172 	kfree(dev->name);
2173 	kfree(dev->groups);
2174 	vduse_dev_destroy(dev);
2175 	module_put(THIS_MODULE);
2176 
2177 	return 0;
2178 }
2179 
2180 static bool device_is_allowed(u32 device_id)
2181 {
2182 	int i;
2183 
2184 	for (i = 0; i < ARRAY_SIZE(allowed_device_id); i++)
2185 		if (allowed_device_id[i] == device_id)
2186 			return true;
2187 
2188 	return false;
2189 }
2190 
2191 static bool features_is_valid(struct vduse_dev_config *config)
2192 {
2193 	if (!(config->features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)))
2194 		return false;
2195 
2196 	/* Now we only support read-only configuration space */
2197 	if ((config->device_id == VIRTIO_ID_BLOCK) &&
2198 			(config->features & BIT_ULL(VIRTIO_BLK_F_CONFIG_WCE)))
2199 		return false;
2200 	else if ((config->device_id == VIRTIO_ID_NET) &&
2201 			(config->features & BIT_ULL(VIRTIO_NET_F_CTRL_VQ)))
2202 		return false;
2203 
2204 	if ((config->device_id == VIRTIO_ID_NET) &&
2205 			!(config->features & BIT_ULL(VIRTIO_F_VERSION_1)))
2206 		return false;
2207 
2208 	return true;
2209 }
2210 
2211 static bool vduse_validate_config(struct vduse_dev_config *config,
2212 				  u64 api_version)
2213 {
2214 	if (!is_mem_zero((const char *)config->reserved,
2215 			 sizeof(config->reserved)))
2216 		return false;
2217 
2218 	if (api_version < VDUSE_API_VERSION_1 &&
2219 	    (config->ngroups || config->nas))
2220 		return false;
2221 
2222 	if (api_version >= VDUSE_API_VERSION_1) {
2223 		if (!config->ngroups || config->ngroups > VDUSE_DEV_MAX_GROUPS)
2224 			return false;
2225 
2226 		if (!config->nas || config->nas > VDUSE_DEV_MAX_AS)
2227 			return false;
2228 	}
2229 
2230 	if (config->vq_align < VRING_USED_ALIGN_SIZE ||
2231 	    !is_power_of_2(config->vq_align) ||
2232 	    config->vq_align > PAGE_SIZE)
2233 		return false;
2234 
2235 	if (config->config_size > PAGE_SIZE)
2236 		return false;
2237 
2238 	if (config->vq_num > 0xffff)
2239 		return false;
2240 
2241 	if (!config->name[0])
2242 		return false;
2243 
2244 	if (!device_is_allowed(config->device_id))
2245 		return false;
2246 
2247 	if (!features_is_valid(config))
2248 		return false;
2249 
2250 	return true;
2251 }
2252 
2253 static ssize_t msg_timeout_show(struct device *device,
2254 				struct device_attribute *attr, char *buf)
2255 {
2256 	struct vduse_dev *dev = dev_get_drvdata(device);
2257 
2258 	return sysfs_emit(buf, "%u\n", dev->msg_timeout);
2259 }
2260 
2261 static ssize_t msg_timeout_store(struct device *device,
2262 				 struct device_attribute *attr,
2263 				 const char *buf, size_t count)
2264 {
2265 	struct vduse_dev *dev = dev_get_drvdata(device);
2266 	int ret;
2267 
2268 	ret = kstrtouint(buf, 10, &dev->msg_timeout);
2269 	if (ret < 0)
2270 		return ret;
2271 
2272 	return count;
2273 }
2274 
2275 static DEVICE_ATTR_RW(msg_timeout);
2276 
2277 static ssize_t bounce_size_show(struct device *device,
2278 				struct device_attribute *attr, char *buf)
2279 {
2280 	struct vduse_dev *dev = dev_get_drvdata(device);
2281 
2282 	return sysfs_emit(buf, "%u\n", dev->bounce_size);
2283 }
2284 
2285 static ssize_t bounce_size_store(struct device *device,
2286 				 struct device_attribute *attr,
2287 				 const char *buf, size_t count)
2288 {
2289 	struct vduse_dev *dev = dev_get_drvdata(device);
2290 	unsigned int bounce_size;
2291 	int ret;
2292 
2293 	ret = -EPERM;
2294 	mutex_lock(&dev->domain_lock);
2295 	/* Assuming that if the first domain is allocated, all are allocated */
2296 	if (dev->as[0].domain)
2297 		goto unlock;
2298 
2299 	ret = kstrtouint(buf, 10, &bounce_size);
2300 	if (ret < 0)
2301 		goto unlock;
2302 
2303 	ret = -EINVAL;
2304 	if (bounce_size > VDUSE_MAX_BOUNCE_SIZE ||
2305 	    bounce_size < VDUSE_MIN_BOUNCE_SIZE)
2306 		goto unlock;
2307 
2308 	dev->bounce_size = bounce_size & PAGE_MASK;
2309 	ret = count;
2310 unlock:
2311 	mutex_unlock(&dev->domain_lock);
2312 	return ret;
2313 }
2314 
2315 static DEVICE_ATTR_RW(bounce_size);
2316 
2317 static struct attribute *vduse_dev_attrs[] = {
2318 	&dev_attr_msg_timeout.attr,
2319 	&dev_attr_bounce_size.attr,
2320 	NULL
2321 };
2322 
2323 ATTRIBUTE_GROUPS(vduse_dev);
2324 
2325 static int vduse_create_dev(struct vduse_dev_config *config,
2326 			    void *config_buf, u64 api_version,
2327 			    uint64_t vduse_features)
2328 {
2329 	int ret;
2330 	struct vduse_dev *dev;
2331 
2332 	ret = -EPERM;
2333 	if ((config->device_id == VIRTIO_ID_NET) && !capable(CAP_NET_ADMIN))
2334 		goto err;
2335 
2336 	ret = -EEXIST;
2337 	if (vduse_find_dev(config->name))
2338 		goto err;
2339 
2340 	ret = -ENOMEM;
2341 	dev = vduse_dev_create();
2342 	if (!dev)
2343 		goto err;
2344 
2345 	dev->api_version = api_version;
2346 	dev->device_features = config->features;
2347 	dev->device_id = config->device_id;
2348 	dev->vendor_id = config->vendor_id;
2349 	dev->vduse_features = vduse_features;
2350 	dev_dbg(vduse_ctrl_dev, "Creating device %s with features 0x%llx",
2351 		config->name, vduse_features);
2352 
2353 	dev->nas = (dev->api_version < VDUSE_API_VERSION_1) ? 1 : config->nas;
2354 	dev->as = kzalloc_objs(dev->as[0], dev->nas);
2355 	if (!dev->as)
2356 		goto err_as;
2357 	for (int i = 0; i < dev->nas; i++)
2358 		mutex_init(&dev->as[i].mem_lock);
2359 
2360 	dev->ngroups = (dev->api_version < VDUSE_API_VERSION_1)
2361 		       ? 1
2362 		       : config->ngroups;
2363 	dev->groups = kzalloc_objs(dev->groups[0], dev->ngroups);
2364 	if (!dev->groups)
2365 		goto err_vq_groups;
2366 	for (u32 i = 0; i < dev->ngroups; ++i) {
2367 		dev->groups[i].dev = dev;
2368 		rwlock_init(&dev->groups[i].as_lock);
2369 		dev->groups[i].as = &dev->as[0];
2370 	}
2371 
2372 	dev->name = kstrdup(config->name, GFP_KERNEL);
2373 	if (!dev->name)
2374 		goto err_str;
2375 
2376 	dev->bounce_size = VDUSE_BOUNCE_SIZE;
2377 	dev->config = config_buf;
2378 	dev->config_size = config->config_size;
2379 
2380 	ret = idr_alloc(&vduse_idr, dev, 1, VDUSE_DEV_MAX, GFP_KERNEL);
2381 	if (ret < 0)
2382 		goto err_idr;
2383 
2384 	dev->minor = ret;
2385 	dev->msg_timeout = VDUSE_MSG_DEFAULT_TIMEOUT;
2386 	dev->dev = device_create_with_groups(&vduse_class, NULL,
2387 				MKDEV(MAJOR(vduse_major), dev->minor),
2388 				dev, vduse_dev_groups, "%s", config->name);
2389 	if (IS_ERR(dev->dev)) {
2390 		ret = PTR_ERR(dev->dev);
2391 		goto err_dev;
2392 	}
2393 
2394 	ret = vduse_dev_init_vqs(dev, config->vq_align, config->vq_num);
2395 	if (ret)
2396 		goto err_vqs;
2397 
2398 	__module_get(THIS_MODULE);
2399 
2400 	return 0;
2401 err_vqs:
2402 	device_destroy(&vduse_class, MKDEV(MAJOR(vduse_major), dev->minor));
2403 err_dev:
2404 	idr_remove(&vduse_idr, dev->minor);
2405 err_idr:
2406 	kfree(dev->name);
2407 err_str:
2408 	kfree(dev->groups);
2409 err_vq_groups:
2410 	kfree(dev->as);
2411 err_as:
2412 	vduse_dev_destroy(dev);
2413 err:
2414 	return ret;
2415 }
2416 
2417 static long vduse_ioctl(struct file *file, unsigned int cmd,
2418 			unsigned long arg)
2419 {
2420 	int ret;
2421 	void __user *argp = (void __user *)arg;
2422 	struct vduse_control *control = file->private_data;
2423 
2424 	mutex_lock(&vduse_lock);
2425 	switch (cmd) {
2426 	case VDUSE_GET_API_VERSION:
2427 		if (control->api_version == VDUSE_API_VERSION_NOT_ASKED)
2428 			control->api_version = VDUSE_API_VERSION_1;
2429 		ret = put_user(control->api_version, (u64 __user *)argp);
2430 		break;
2431 	case VDUSE_SET_API_VERSION: {
2432 		u64 api_version;
2433 
2434 		ret = -EFAULT;
2435 		if (get_user(api_version, (u64 __user *)argp))
2436 			break;
2437 
2438 		ret = -EINVAL;
2439 		if (api_version > VDUSE_API_VERSION_1)
2440 			break;
2441 
2442 		ret = 0;
2443 		control->api_version = api_version;
2444 		break;
2445 	}
2446 	case VDUSE_CREATE_DEV: {
2447 		struct vduse_dev_config config;
2448 		unsigned long size = offsetof(struct vduse_dev_config, config);
2449 		void *buf;
2450 
2451 		ret = -EFAULT;
2452 		if (copy_from_user(&config, argp, size))
2453 			break;
2454 
2455 		ret = -EINVAL;
2456 		if (control->api_version == VDUSE_API_VERSION_NOT_ASKED)
2457 			control->api_version = VDUSE_API_VERSION;
2458 		if (!vduse_validate_config(&config, control->api_version))
2459 			break;
2460 
2461 		buf = vmemdup_user(argp + size, config.config_size);
2462 		if (IS_ERR(buf)) {
2463 			ret = PTR_ERR(buf);
2464 			break;
2465 		}
2466 		config.name[VDUSE_NAME_MAX - 1] = '\0';
2467 		ret = vduse_create_dev(&config, buf, control->api_version,
2468 				       control->vduse_features);
2469 		if (ret)
2470 			kvfree(buf);
2471 		break;
2472 	}
2473 	case VDUSE_DESTROY_DEV: {
2474 		char name[VDUSE_NAME_MAX];
2475 
2476 		ret = -EFAULT;
2477 		if (copy_from_user(name, argp, VDUSE_NAME_MAX))
2478 			break;
2479 
2480 		name[VDUSE_NAME_MAX - 1] = '\0';
2481 		ret = vduse_destroy_dev(name);
2482 		break;
2483 	}
2484 	case VDUSE_GET_FEATURES:
2485 		ret = put_user(vduse_features, (u64 __user *)argp);
2486 		break;
2487 	case VDUSE_SET_FEATURES: {
2488 		u64 features;
2489 
2490 		ret = -EFAULT;
2491 		if (get_user(features, (u64 __user *)argp)) {
2492 			dev_dbg(vduse_ctrl_dev, "Could not get vduse features");
2493 			break;
2494 		}
2495 
2496 		ret = -EINVAL;
2497 		if (features & ~vduse_features) {
2498 			dev_dbg(vduse_ctrl_dev,
2499 				"Invalid features in %llx, expected %llx",
2500 				features, vduse_features);
2501 			break;
2502 		}
2503 
2504 		ret = 0;
2505 		control->vduse_features = features;
2506 		dev_dbg(vduse_ctrl_dev, "Set features %llx", features);
2507 
2508 		break;
2509 	}
2510 	default:
2511 		ret = -EINVAL;
2512 		break;
2513 	}
2514 	mutex_unlock(&vduse_lock);
2515 
2516 	return ret;
2517 }
2518 
2519 static int vduse_release(struct inode *inode, struct file *file)
2520 {
2521 	struct vduse_control *control = file->private_data;
2522 
2523 	kfree(control);
2524 	return 0;
2525 }
2526 
2527 static int vduse_open(struct inode *inode, struct file *file)
2528 {
2529 	struct vduse_control *control;
2530 
2531 	control = kmalloc_obj(struct vduse_control);
2532 	if (!control)
2533 		return -ENOMEM;
2534 
2535 	control->api_version = VDUSE_API_VERSION_NOT_ASKED;
2536 	control->vduse_features = 0;
2537 	file->private_data = control;
2538 
2539 	return 0;
2540 }
2541 
2542 static const struct file_operations vduse_ctrl_fops = {
2543 	.owner		= THIS_MODULE,
2544 	.open		= vduse_open,
2545 	.release	= vduse_release,
2546 	.unlocked_ioctl	= vduse_ioctl,
2547 	.compat_ioctl	= compat_ptr_ioctl,
2548 	.llseek		= noop_llseek,
2549 };
2550 
2551 struct vduse_mgmt_dev {
2552 	struct vdpa_mgmt_dev mgmt_dev;
2553 	struct device dev;
2554 };
2555 
2556 static struct vduse_mgmt_dev *vduse_mgmt;
2557 
2558 static int vduse_dev_init_vdpa(struct vduse_dev *dev, const char *name)
2559 {
2560 	struct vduse_vdpa *vdev;
2561 	const struct vdpa_config_ops *ops;
2562 
2563 	if (dev->vdev)
2564 		return -EEXIST;
2565 
2566 	if (dev->vduse_features & BIT_U64(VDUSE_F_SUSPEND))
2567 		ops = &vduse_vdpa_config_ops_with_suspend;
2568 	else
2569 		ops = &vduse_vdpa_config_ops;
2570 
2571 	vdev = vdpa_alloc_device(struct vduse_vdpa, vdpa, dev->dev,
2572 				 ops, &vduse_map_ops,
2573 				 dev->ngroups, dev->nas, name, true);
2574 	if (IS_ERR(vdev))
2575 		return PTR_ERR(vdev);
2576 
2577 	dev->vdev = vdev;
2578 	vdev->dev = dev;
2579 	vdev->vdpa.mdev = &vduse_mgmt->mgmt_dev;
2580 
2581 	return 0;
2582 }
2583 
2584 static int vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
2585 			const struct vdpa_dev_set_config *config)
2586 {
2587 	struct vduse_dev *dev;
2588 	size_t domain_bounce_size;
2589 	int ret, i;
2590 
2591 	mutex_lock(&vduse_lock);
2592 	dev = vduse_find_dev(name);
2593 	if (!dev || !vduse_dev_is_ready(dev)) {
2594 		mutex_unlock(&vduse_lock);
2595 		return -EINVAL;
2596 	}
2597 	ret = vduse_dev_init_vdpa(dev, name);
2598 	mutex_unlock(&vduse_lock);
2599 	if (ret)
2600 		return ret;
2601 
2602 	mutex_lock(&dev->domain_lock);
2603 	ret = 0;
2604 
2605 	domain_bounce_size = dev->bounce_size / dev->nas;
2606 	for (i = 0; i < dev->nas; ++i) {
2607 		dev->as[i].domain = vduse_domain_create(VDUSE_IOVA_SIZE - 1,
2608 							domain_bounce_size);
2609 		if (!dev->as[i].domain) {
2610 			ret = -ENOMEM;
2611 			goto err;
2612 		}
2613 	}
2614 
2615 	mutex_unlock(&dev->domain_lock);
2616 
2617 	ret = _vdpa_register_device(&dev->vdev->vdpa, dev->vq_num);
2618 	if (ret)
2619 		goto err_register;
2620 
2621 	return 0;
2622 
2623 err_register:
2624 	mutex_lock(&dev->domain_lock);
2625 
2626 err:
2627 	for (int j = 0; j < i; j++) {
2628 		if (dev->as[j].domain) {
2629 			vduse_domain_destroy(dev->as[j].domain);
2630 			dev->as[j].domain = NULL;
2631 		}
2632 	}
2633 	mutex_unlock(&dev->domain_lock);
2634 
2635 	put_device(&dev->vdev->vdpa.dev);
2636 
2637 	return ret;
2638 }
2639 
2640 static void vdpa_dev_del(struct vdpa_mgmt_dev *mdev, struct vdpa_device *dev)
2641 {
2642 	_vdpa_unregister_device(dev);
2643 }
2644 
2645 static const struct vdpa_mgmtdev_ops vdpa_dev_mgmtdev_ops = {
2646 	.dev_add = vdpa_dev_add,
2647 	.dev_del = vdpa_dev_del,
2648 };
2649 
2650 static struct virtio_device_id id_table[] = {
2651 	{ VIRTIO_ID_BLOCK, VIRTIO_DEV_ANY_ID },
2652 	{ VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID },
2653 	{ 0 },
2654 };
2655 
2656 static void vduse_mgmtdev_release(struct device *dev)
2657 {
2658 	struct vduse_mgmt_dev *mgmt_dev;
2659 
2660 	mgmt_dev = container_of(dev, struct vduse_mgmt_dev, dev);
2661 	kfree(mgmt_dev);
2662 }
2663 
2664 static int vduse_mgmtdev_init(void)
2665 {
2666 	int ret;
2667 
2668 	vduse_mgmt = kzalloc_obj(*vduse_mgmt);
2669 	if (!vduse_mgmt)
2670 		return -ENOMEM;
2671 
2672 	ret = dev_set_name(&vduse_mgmt->dev, "vduse");
2673 	if (ret) {
2674 		kfree(vduse_mgmt);
2675 		return ret;
2676 	}
2677 
2678 	vduse_mgmt->dev.release = vduse_mgmtdev_release;
2679 
2680 	ret = device_register(&vduse_mgmt->dev);
2681 	if (ret)
2682 		goto dev_reg_err;
2683 
2684 	vduse_mgmt->mgmt_dev.id_table = id_table;
2685 	vduse_mgmt->mgmt_dev.ops = &vdpa_dev_mgmtdev_ops;
2686 	vduse_mgmt->mgmt_dev.device = &vduse_mgmt->dev;
2687 	ret = vdpa_mgmtdev_register(&vduse_mgmt->mgmt_dev);
2688 	if (ret)
2689 		device_unregister(&vduse_mgmt->dev);
2690 
2691 	return ret;
2692 
2693 dev_reg_err:
2694 	put_device(&vduse_mgmt->dev);
2695 	return ret;
2696 }
2697 
2698 static void vduse_mgmtdev_exit(void)
2699 {
2700 	vdpa_mgmtdev_unregister(&vduse_mgmt->mgmt_dev);
2701 	device_unregister(&vduse_mgmt->dev);
2702 }
2703 
2704 static int vduse_init(void)
2705 {
2706 	int ret;
2707 
2708 	ret = class_register(&vduse_class);
2709 	if (ret)
2710 		return ret;
2711 
2712 	ret = alloc_chrdev_region(&vduse_major, 0, VDUSE_DEV_MAX, "vduse");
2713 	if (ret)
2714 		goto err_chardev_region;
2715 
2716 	/* /dev/vduse/control */
2717 	cdev_init(&vduse_ctrl_cdev, &vduse_ctrl_fops);
2718 	vduse_ctrl_cdev.owner = THIS_MODULE;
2719 	ret = cdev_add(&vduse_ctrl_cdev, vduse_major, 1);
2720 	if (ret)
2721 		goto err_ctrl_cdev;
2722 
2723 	vduse_ctrl_dev = device_create(&vduse_class, NULL, vduse_major, NULL, "control");
2724 	if (IS_ERR(vduse_ctrl_dev)) {
2725 		ret = PTR_ERR(vduse_ctrl_dev);
2726 		vduse_ctrl_dev = NULL;
2727 		goto err_device;
2728 	}
2729 
2730 	/* /dev/vduse/$DEVICE */
2731 	cdev_init(&vduse_cdev, &vduse_dev_fops);
2732 	vduse_cdev.owner = THIS_MODULE;
2733 	ret = cdev_add(&vduse_cdev, MKDEV(MAJOR(vduse_major), 1),
2734 		       VDUSE_DEV_MAX - 1);
2735 	if (ret)
2736 		goto err_cdev;
2737 
2738 	ret = -ENOMEM;
2739 	vduse_irq_wq = alloc_workqueue("vduse-irq",
2740 				WQ_HIGHPRI | WQ_SYSFS | WQ_UNBOUND, 0);
2741 	if (!vduse_irq_wq)
2742 		goto err_wq;
2743 
2744 	vduse_irq_bound_wq = alloc_workqueue("vduse-irq-bound",
2745 					     WQ_HIGHPRI | WQ_PERCPU, 0);
2746 	if (!vduse_irq_bound_wq)
2747 		goto err_bound_wq;
2748 
2749 	ret = vduse_domain_init();
2750 	if (ret)
2751 		goto err_domain;
2752 
2753 	ret = vduse_mgmtdev_init();
2754 	if (ret)
2755 		goto err_mgmtdev;
2756 
2757 	return 0;
2758 err_mgmtdev:
2759 	vduse_domain_exit();
2760 err_domain:
2761 	destroy_workqueue(vduse_irq_bound_wq);
2762 err_bound_wq:
2763 	destroy_workqueue(vduse_irq_wq);
2764 err_wq:
2765 	cdev_del(&vduse_cdev);
2766 err_cdev:
2767 	device_destroy(&vduse_class, vduse_major);
2768 err_device:
2769 	cdev_del(&vduse_ctrl_cdev);
2770 err_ctrl_cdev:
2771 	unregister_chrdev_region(vduse_major, VDUSE_DEV_MAX);
2772 err_chardev_region:
2773 	class_unregister(&vduse_class);
2774 	return ret;
2775 }
2776 module_init(vduse_init);
2777 
2778 static void vduse_exit(void)
2779 {
2780 	vduse_mgmtdev_exit();
2781 	vduse_domain_exit();
2782 	destroy_workqueue(vduse_irq_bound_wq);
2783 	destroy_workqueue(vduse_irq_wq);
2784 	cdev_del(&vduse_cdev);
2785 	device_destroy(&vduse_class, vduse_major);
2786 	cdev_del(&vduse_ctrl_cdev);
2787 	unregister_chrdev_region(vduse_major, VDUSE_DEV_MAX);
2788 	class_unregister(&vduse_class);
2789 	idr_destroy(&vduse_idr);
2790 }
2791 module_exit(vduse_exit);
2792 
2793 MODULE_LICENSE(DRV_LICENSE);
2794 MODULE_AUTHOR(DRV_AUTHOR);
2795 MODULE_DESCRIPTION(DRV_DESC);
2796