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/init.h> 12 #include <linux/module.h> 13 #include <linux/cdev.h> 14 #include <linux/device.h> 15 #include <linux/eventfd.h> 16 #include <linux/slab.h> 17 #include <linux/wait.h> 18 #include <linux/dma-map-ops.h> 19 #include <linux/poll.h> 20 #include <linux/file.h> 21 #include <linux/uio.h> 22 #include <linux/vdpa.h> 23 #include <linux/nospec.h> 24 #include <linux/vmalloc.h> 25 #include <linux/sched/mm.h> 26 #include <uapi/linux/vduse.h> 27 #include <uapi/linux/vdpa.h> 28 #include <uapi/linux/virtio_config.h> 29 #include <uapi/linux/virtio_ids.h> 30 #include <uapi/linux/virtio_blk.h> 31 #include <linux/mod_devicetable.h> 32 33 #include "iova_domain.h" 34 35 #define DRV_AUTHOR "Yongji Xie <xieyongji@bytedance.com>" 36 #define DRV_DESC "vDPA Device in Userspace" 37 #define DRV_LICENSE "GPL v2" 38 39 #define VDUSE_DEV_MAX (1U << MINORBITS) 40 #define VDUSE_MAX_BOUNCE_SIZE (1024 * 1024 * 1024) 41 #define VDUSE_MIN_BOUNCE_SIZE (1024 * 1024) 42 #define VDUSE_BOUNCE_SIZE (64 * 1024 * 1024) 43 /* 128 MB reserved for virtqueue creation */ 44 #define VDUSE_IOVA_SIZE (VDUSE_MAX_BOUNCE_SIZE + 128 * 1024 * 1024) 45 #define VDUSE_MSG_DEFAULT_TIMEOUT 30 46 47 #define IRQ_UNBOUND -1 48 49 struct vduse_virtqueue { 50 u16 index; 51 u16 num_max; 52 u32 num; 53 u64 desc_addr; 54 u64 driver_addr; 55 u64 device_addr; 56 struct vdpa_vq_state state; 57 bool ready; 58 bool kicked; 59 spinlock_t kick_lock; 60 spinlock_t irq_lock; 61 struct eventfd_ctx *kickfd; 62 struct vdpa_callback cb; 63 struct work_struct inject; 64 struct work_struct kick; 65 int irq_effective_cpu; 66 struct cpumask irq_affinity; 67 struct kobject kobj; 68 }; 69 70 struct vduse_dev; 71 72 struct vduse_vdpa { 73 struct vdpa_device vdpa; 74 struct vduse_dev *dev; 75 }; 76 77 struct vduse_umem { 78 unsigned long iova; 79 unsigned long npages; 80 struct page **pages; 81 struct mm_struct *mm; 82 }; 83 84 struct vduse_dev { 85 struct vduse_vdpa *vdev; 86 struct device *dev; 87 struct vduse_virtqueue **vqs; 88 struct vduse_iova_domain *domain; 89 char *name; 90 struct mutex lock; 91 spinlock_t msg_lock; 92 u64 msg_unique; 93 u32 msg_timeout; 94 wait_queue_head_t waitq; 95 struct list_head send_list; 96 struct list_head recv_list; 97 struct vdpa_callback config_cb; 98 struct work_struct inject; 99 spinlock_t irq_lock; 100 struct rw_semaphore rwsem; 101 int minor; 102 bool broken; 103 bool connected; 104 u64 api_version; 105 u64 device_features; 106 u64 driver_features; 107 u32 device_id; 108 u32 vendor_id; 109 u32 generation; 110 u32 config_size; 111 void *config; 112 u8 status; 113 u32 vq_num; 114 u32 vq_align; 115 struct vduse_umem *umem; 116 struct mutex mem_lock; 117 unsigned int bounce_size; 118 struct mutex domain_lock; 119 }; 120 121 struct vduse_dev_msg { 122 struct vduse_dev_request req; 123 struct vduse_dev_response resp; 124 struct list_head list; 125 wait_queue_head_t waitq; 126 bool completed; 127 }; 128 129 struct vduse_control { 130 u64 api_version; 131 }; 132 133 static DEFINE_MUTEX(vduse_lock); 134 static DEFINE_IDR(vduse_idr); 135 136 static dev_t vduse_major; 137 static struct cdev vduse_ctrl_cdev; 138 static struct cdev vduse_cdev; 139 static struct workqueue_struct *vduse_irq_wq; 140 static struct workqueue_struct *vduse_irq_bound_wq; 141 142 static u32 allowed_device_id[] = { 143 VIRTIO_ID_BLOCK, 144 }; 145 146 static inline struct vduse_dev *vdpa_to_vduse(struct vdpa_device *vdpa) 147 { 148 struct vduse_vdpa *vdev = container_of(vdpa, struct vduse_vdpa, vdpa); 149 150 return vdev->dev; 151 } 152 153 static inline struct vduse_dev *dev_to_vduse(struct device *dev) 154 { 155 struct vdpa_device *vdpa = dev_to_vdpa(dev); 156 157 return vdpa_to_vduse(vdpa); 158 } 159 160 static struct vduse_dev_msg *vduse_find_msg(struct list_head *head, 161 uint32_t request_id) 162 { 163 struct vduse_dev_msg *msg; 164 165 list_for_each_entry(msg, head, list) { 166 if (msg->req.request_id == request_id) { 167 list_del(&msg->list); 168 return msg; 169 } 170 } 171 172 return NULL; 173 } 174 175 static struct vduse_dev_msg *vduse_dequeue_msg(struct list_head *head) 176 { 177 struct vduse_dev_msg *msg = NULL; 178 179 if (!list_empty(head)) { 180 msg = list_first_entry(head, struct vduse_dev_msg, list); 181 list_del(&msg->list); 182 } 183 184 return msg; 185 } 186 187 static void vduse_enqueue_msg(struct list_head *head, 188 struct vduse_dev_msg *msg) 189 { 190 list_add_tail(&msg->list, head); 191 } 192 193 static void vduse_dev_broken(struct vduse_dev *dev) 194 { 195 struct vduse_dev_msg *msg, *tmp; 196 197 if (unlikely(dev->broken)) 198 return; 199 200 list_splice_init(&dev->recv_list, &dev->send_list); 201 list_for_each_entry_safe(msg, tmp, &dev->send_list, list) { 202 list_del(&msg->list); 203 msg->completed = 1; 204 msg->resp.result = VDUSE_REQ_RESULT_FAILED; 205 wake_up(&msg->waitq); 206 } 207 dev->broken = true; 208 wake_up(&dev->waitq); 209 } 210 211 static int vduse_dev_msg_sync(struct vduse_dev *dev, 212 struct vduse_dev_msg *msg) 213 { 214 int ret; 215 216 if (unlikely(dev->broken)) 217 return -EIO; 218 219 init_waitqueue_head(&msg->waitq); 220 spin_lock(&dev->msg_lock); 221 if (unlikely(dev->broken)) { 222 spin_unlock(&dev->msg_lock); 223 return -EIO; 224 } 225 msg->req.request_id = dev->msg_unique++; 226 vduse_enqueue_msg(&dev->send_list, msg); 227 wake_up(&dev->waitq); 228 spin_unlock(&dev->msg_lock); 229 if (dev->msg_timeout) 230 ret = wait_event_killable_timeout(msg->waitq, msg->completed, 231 (long)dev->msg_timeout * HZ); 232 else 233 ret = wait_event_killable(msg->waitq, msg->completed); 234 235 spin_lock(&dev->msg_lock); 236 if (!msg->completed) { 237 list_del(&msg->list); 238 msg->resp.result = VDUSE_REQ_RESULT_FAILED; 239 /* Mark the device as malfunction when there is a timeout */ 240 if (!ret) 241 vduse_dev_broken(dev); 242 } 243 ret = (msg->resp.result == VDUSE_REQ_RESULT_OK) ? 0 : -EIO; 244 spin_unlock(&dev->msg_lock); 245 246 return ret; 247 } 248 249 static int vduse_dev_get_vq_state_packed(struct vduse_dev *dev, 250 struct vduse_virtqueue *vq, 251 struct vdpa_vq_state_packed *packed) 252 { 253 struct vduse_dev_msg msg = { 0 }; 254 int ret; 255 256 msg.req.type = VDUSE_GET_VQ_STATE; 257 msg.req.vq_state.index = vq->index; 258 259 ret = vduse_dev_msg_sync(dev, &msg); 260 if (ret) 261 return ret; 262 263 packed->last_avail_counter = 264 msg.resp.vq_state.packed.last_avail_counter & 0x0001; 265 packed->last_avail_idx = 266 msg.resp.vq_state.packed.last_avail_idx & 0x7FFF; 267 packed->last_used_counter = 268 msg.resp.vq_state.packed.last_used_counter & 0x0001; 269 packed->last_used_idx = 270 msg.resp.vq_state.packed.last_used_idx & 0x7FFF; 271 272 return 0; 273 } 274 275 static int vduse_dev_get_vq_state_split(struct vduse_dev *dev, 276 struct vduse_virtqueue *vq, 277 struct vdpa_vq_state_split *split) 278 { 279 struct vduse_dev_msg msg = { 0 }; 280 int ret; 281 282 msg.req.type = VDUSE_GET_VQ_STATE; 283 msg.req.vq_state.index = vq->index; 284 285 ret = vduse_dev_msg_sync(dev, &msg); 286 if (ret) 287 return ret; 288 289 split->avail_index = msg.resp.vq_state.split.avail_index; 290 291 return 0; 292 } 293 294 static int vduse_dev_set_status(struct vduse_dev *dev, u8 status) 295 { 296 struct vduse_dev_msg msg = { 0 }; 297 298 msg.req.type = VDUSE_SET_STATUS; 299 msg.req.s.status = status; 300 301 return vduse_dev_msg_sync(dev, &msg); 302 } 303 304 static int vduse_dev_update_iotlb(struct vduse_dev *dev, 305 u64 start, u64 last) 306 { 307 struct vduse_dev_msg msg = { 0 }; 308 309 if (last < start) 310 return -EINVAL; 311 312 msg.req.type = VDUSE_UPDATE_IOTLB; 313 msg.req.iova.start = start; 314 msg.req.iova.last = last; 315 316 return vduse_dev_msg_sync(dev, &msg); 317 } 318 319 static ssize_t vduse_dev_read_iter(struct kiocb *iocb, struct iov_iter *to) 320 { 321 struct file *file = iocb->ki_filp; 322 struct vduse_dev *dev = file->private_data; 323 struct vduse_dev_msg *msg; 324 int size = sizeof(struct vduse_dev_request); 325 ssize_t ret; 326 327 if (iov_iter_count(to) < size) 328 return -EINVAL; 329 330 spin_lock(&dev->msg_lock); 331 while (1) { 332 msg = vduse_dequeue_msg(&dev->send_list); 333 if (msg) 334 break; 335 336 ret = -EAGAIN; 337 if (file->f_flags & O_NONBLOCK) 338 goto unlock; 339 340 spin_unlock(&dev->msg_lock); 341 ret = wait_event_interruptible_exclusive(dev->waitq, 342 !list_empty(&dev->send_list)); 343 if (ret) 344 return ret; 345 346 spin_lock(&dev->msg_lock); 347 } 348 spin_unlock(&dev->msg_lock); 349 ret = copy_to_iter(&msg->req, size, to); 350 spin_lock(&dev->msg_lock); 351 if (ret != size) { 352 ret = -EFAULT; 353 vduse_enqueue_msg(&dev->send_list, msg); 354 goto unlock; 355 } 356 vduse_enqueue_msg(&dev->recv_list, msg); 357 unlock: 358 spin_unlock(&dev->msg_lock); 359 360 return ret; 361 } 362 363 static bool is_mem_zero(const char *ptr, int size) 364 { 365 int i; 366 367 for (i = 0; i < size; i++) { 368 if (ptr[i]) 369 return false; 370 } 371 return true; 372 } 373 374 static ssize_t vduse_dev_write_iter(struct kiocb *iocb, struct iov_iter *from) 375 { 376 struct file *file = iocb->ki_filp; 377 struct vduse_dev *dev = file->private_data; 378 struct vduse_dev_response resp; 379 struct vduse_dev_msg *msg; 380 size_t ret; 381 382 ret = copy_from_iter(&resp, sizeof(resp), from); 383 if (ret != sizeof(resp)) 384 return -EINVAL; 385 386 if (!is_mem_zero((const char *)resp.reserved, sizeof(resp.reserved))) 387 return -EINVAL; 388 389 spin_lock(&dev->msg_lock); 390 msg = vduse_find_msg(&dev->recv_list, resp.request_id); 391 if (!msg) { 392 ret = -ENOENT; 393 goto unlock; 394 } 395 396 memcpy(&msg->resp, &resp, sizeof(resp)); 397 msg->completed = 1; 398 wake_up(&msg->waitq); 399 unlock: 400 spin_unlock(&dev->msg_lock); 401 402 return ret; 403 } 404 405 static __poll_t vduse_dev_poll(struct file *file, poll_table *wait) 406 { 407 struct vduse_dev *dev = file->private_data; 408 __poll_t mask = 0; 409 410 poll_wait(file, &dev->waitq, wait); 411 412 spin_lock(&dev->msg_lock); 413 414 if (unlikely(dev->broken)) 415 mask |= EPOLLERR; 416 if (!list_empty(&dev->send_list)) 417 mask |= EPOLLIN | EPOLLRDNORM; 418 if (!list_empty(&dev->recv_list)) 419 mask |= EPOLLOUT | EPOLLWRNORM; 420 421 spin_unlock(&dev->msg_lock); 422 423 return mask; 424 } 425 426 static void vduse_dev_reset(struct vduse_dev *dev) 427 { 428 int i; 429 struct vduse_iova_domain *domain = dev->domain; 430 431 /* The coherent mappings are handled in vduse_dev_free_coherent() */ 432 if (domain && domain->bounce_map) 433 vduse_domain_reset_bounce_map(domain); 434 435 down_write(&dev->rwsem); 436 437 dev->status = 0; 438 dev->driver_features = 0; 439 dev->generation++; 440 spin_lock(&dev->irq_lock); 441 dev->config_cb.callback = NULL; 442 dev->config_cb.private = NULL; 443 spin_unlock(&dev->irq_lock); 444 flush_work(&dev->inject); 445 446 for (i = 0; i < dev->vq_num; i++) { 447 struct vduse_virtqueue *vq = dev->vqs[i]; 448 449 vq->ready = false; 450 vq->desc_addr = 0; 451 vq->driver_addr = 0; 452 vq->device_addr = 0; 453 vq->num = 0; 454 memset(&vq->state, 0, sizeof(vq->state)); 455 456 spin_lock(&vq->kick_lock); 457 vq->kicked = false; 458 if (vq->kickfd) 459 eventfd_ctx_put(vq->kickfd); 460 vq->kickfd = NULL; 461 spin_unlock(&vq->kick_lock); 462 463 spin_lock(&vq->irq_lock); 464 vq->cb.callback = NULL; 465 vq->cb.private = NULL; 466 vq->cb.trigger = NULL; 467 spin_unlock(&vq->irq_lock); 468 flush_work(&vq->inject); 469 flush_work(&vq->kick); 470 } 471 472 up_write(&dev->rwsem); 473 } 474 475 static int vduse_vdpa_set_vq_address(struct vdpa_device *vdpa, u16 idx, 476 u64 desc_area, u64 driver_area, 477 u64 device_area) 478 { 479 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 480 struct vduse_virtqueue *vq = dev->vqs[idx]; 481 482 vq->desc_addr = desc_area; 483 vq->driver_addr = driver_area; 484 vq->device_addr = device_area; 485 486 return 0; 487 } 488 489 static void vduse_vq_kick(struct vduse_virtqueue *vq) 490 { 491 spin_lock(&vq->kick_lock); 492 if (!vq->ready) 493 goto unlock; 494 495 if (vq->kickfd) 496 eventfd_signal(vq->kickfd); 497 else 498 vq->kicked = true; 499 unlock: 500 spin_unlock(&vq->kick_lock); 501 } 502 503 static void vduse_vq_kick_work(struct work_struct *work) 504 { 505 struct vduse_virtqueue *vq = container_of(work, 506 struct vduse_virtqueue, kick); 507 508 vduse_vq_kick(vq); 509 } 510 511 static void vduse_vdpa_kick_vq(struct vdpa_device *vdpa, u16 idx) 512 { 513 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 514 struct vduse_virtqueue *vq = dev->vqs[idx]; 515 516 if (!eventfd_signal_allowed()) { 517 schedule_work(&vq->kick); 518 return; 519 } 520 vduse_vq_kick(vq); 521 } 522 523 static void vduse_vdpa_set_vq_cb(struct vdpa_device *vdpa, u16 idx, 524 struct vdpa_callback *cb) 525 { 526 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 527 struct vduse_virtqueue *vq = dev->vqs[idx]; 528 529 spin_lock(&vq->irq_lock); 530 vq->cb.callback = cb->callback; 531 vq->cb.private = cb->private; 532 vq->cb.trigger = cb->trigger; 533 spin_unlock(&vq->irq_lock); 534 } 535 536 static void vduse_vdpa_set_vq_num(struct vdpa_device *vdpa, u16 idx, u32 num) 537 { 538 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 539 struct vduse_virtqueue *vq = dev->vqs[idx]; 540 541 vq->num = num; 542 } 543 544 static void vduse_vdpa_set_vq_ready(struct vdpa_device *vdpa, 545 u16 idx, bool ready) 546 { 547 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 548 struct vduse_virtqueue *vq = dev->vqs[idx]; 549 550 vq->ready = ready; 551 } 552 553 static bool vduse_vdpa_get_vq_ready(struct vdpa_device *vdpa, u16 idx) 554 { 555 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 556 struct vduse_virtqueue *vq = dev->vqs[idx]; 557 558 return vq->ready; 559 } 560 561 static int vduse_vdpa_set_vq_state(struct vdpa_device *vdpa, u16 idx, 562 const struct vdpa_vq_state *state) 563 { 564 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 565 struct vduse_virtqueue *vq = dev->vqs[idx]; 566 567 if (dev->driver_features & BIT_ULL(VIRTIO_F_RING_PACKED)) { 568 vq->state.packed.last_avail_counter = 569 state->packed.last_avail_counter; 570 vq->state.packed.last_avail_idx = state->packed.last_avail_idx; 571 vq->state.packed.last_used_counter = 572 state->packed.last_used_counter; 573 vq->state.packed.last_used_idx = state->packed.last_used_idx; 574 } else 575 vq->state.split.avail_index = state->split.avail_index; 576 577 return 0; 578 } 579 580 static int vduse_vdpa_get_vq_state(struct vdpa_device *vdpa, u16 idx, 581 struct vdpa_vq_state *state) 582 { 583 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 584 struct vduse_virtqueue *vq = dev->vqs[idx]; 585 586 if (dev->driver_features & BIT_ULL(VIRTIO_F_RING_PACKED)) 587 return vduse_dev_get_vq_state_packed(dev, vq, &state->packed); 588 589 return vduse_dev_get_vq_state_split(dev, vq, &state->split); 590 } 591 592 static u32 vduse_vdpa_get_vq_align(struct vdpa_device *vdpa) 593 { 594 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 595 596 return dev->vq_align; 597 } 598 599 static u64 vduse_vdpa_get_device_features(struct vdpa_device *vdpa) 600 { 601 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 602 603 return dev->device_features; 604 } 605 606 static int vduse_vdpa_set_driver_features(struct vdpa_device *vdpa, u64 features) 607 { 608 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 609 610 dev->driver_features = features; 611 return 0; 612 } 613 614 static u64 vduse_vdpa_get_driver_features(struct vdpa_device *vdpa) 615 { 616 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 617 618 return dev->driver_features; 619 } 620 621 static void vduse_vdpa_set_config_cb(struct vdpa_device *vdpa, 622 struct vdpa_callback *cb) 623 { 624 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 625 626 spin_lock(&dev->irq_lock); 627 dev->config_cb.callback = cb->callback; 628 dev->config_cb.private = cb->private; 629 spin_unlock(&dev->irq_lock); 630 } 631 632 static u16 vduse_vdpa_get_vq_num_max(struct vdpa_device *vdpa) 633 { 634 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 635 u16 num_max = 0; 636 int i; 637 638 for (i = 0; i < dev->vq_num; i++) 639 if (num_max < dev->vqs[i]->num_max) 640 num_max = dev->vqs[i]->num_max; 641 642 return num_max; 643 } 644 645 static u32 vduse_vdpa_get_device_id(struct vdpa_device *vdpa) 646 { 647 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 648 649 return dev->device_id; 650 } 651 652 static u32 vduse_vdpa_get_vendor_id(struct vdpa_device *vdpa) 653 { 654 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 655 656 return dev->vendor_id; 657 } 658 659 static u8 vduse_vdpa_get_status(struct vdpa_device *vdpa) 660 { 661 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 662 663 return dev->status; 664 } 665 666 static void vduse_vdpa_set_status(struct vdpa_device *vdpa, u8 status) 667 { 668 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 669 670 if (vduse_dev_set_status(dev, status)) 671 return; 672 673 dev->status = status; 674 } 675 676 static size_t vduse_vdpa_get_config_size(struct vdpa_device *vdpa) 677 { 678 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 679 680 return dev->config_size; 681 } 682 683 static void vduse_vdpa_get_config(struct vdpa_device *vdpa, unsigned int offset, 684 void *buf, unsigned int len) 685 { 686 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 687 688 /* Initialize the buffer in case of partial copy. */ 689 memset(buf, 0, len); 690 691 if (offset > dev->config_size) 692 return; 693 694 if (len > dev->config_size - offset) 695 len = dev->config_size - offset; 696 697 memcpy(buf, dev->config + offset, len); 698 } 699 700 static void vduse_vdpa_set_config(struct vdpa_device *vdpa, unsigned int offset, 701 const void *buf, unsigned int len) 702 { 703 /* Now we only support read-only configuration space */ 704 } 705 706 static int vduse_vdpa_reset(struct vdpa_device *vdpa) 707 { 708 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 709 int ret = vduse_dev_set_status(dev, 0); 710 711 vduse_dev_reset(dev); 712 713 return ret; 714 } 715 716 static u32 vduse_vdpa_get_generation(struct vdpa_device *vdpa) 717 { 718 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 719 720 return dev->generation; 721 } 722 723 static int vduse_vdpa_set_vq_affinity(struct vdpa_device *vdpa, u16 idx, 724 const struct cpumask *cpu_mask) 725 { 726 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 727 728 if (cpu_mask) 729 cpumask_copy(&dev->vqs[idx]->irq_affinity, cpu_mask); 730 else 731 cpumask_setall(&dev->vqs[idx]->irq_affinity); 732 733 return 0; 734 } 735 736 static const struct cpumask * 737 vduse_vdpa_get_vq_affinity(struct vdpa_device *vdpa, u16 idx) 738 { 739 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 740 741 return &dev->vqs[idx]->irq_affinity; 742 } 743 744 static int vduse_vdpa_set_map(struct vdpa_device *vdpa, 745 unsigned int asid, 746 struct vhost_iotlb *iotlb) 747 { 748 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 749 int ret; 750 751 ret = vduse_domain_set_map(dev->domain, iotlb); 752 if (ret) 753 return ret; 754 755 ret = vduse_dev_update_iotlb(dev, 0ULL, ULLONG_MAX); 756 if (ret) { 757 vduse_domain_clear_map(dev->domain, iotlb); 758 return ret; 759 } 760 761 return 0; 762 } 763 764 static void vduse_vdpa_free(struct vdpa_device *vdpa) 765 { 766 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 767 768 dev->vdev = NULL; 769 } 770 771 static const struct vdpa_config_ops vduse_vdpa_config_ops = { 772 .set_vq_address = vduse_vdpa_set_vq_address, 773 .kick_vq = vduse_vdpa_kick_vq, 774 .set_vq_cb = vduse_vdpa_set_vq_cb, 775 .set_vq_num = vduse_vdpa_set_vq_num, 776 .set_vq_ready = vduse_vdpa_set_vq_ready, 777 .get_vq_ready = vduse_vdpa_get_vq_ready, 778 .set_vq_state = vduse_vdpa_set_vq_state, 779 .get_vq_state = vduse_vdpa_get_vq_state, 780 .get_vq_align = vduse_vdpa_get_vq_align, 781 .get_device_features = vduse_vdpa_get_device_features, 782 .set_driver_features = vduse_vdpa_set_driver_features, 783 .get_driver_features = vduse_vdpa_get_driver_features, 784 .set_config_cb = vduse_vdpa_set_config_cb, 785 .get_vq_num_max = vduse_vdpa_get_vq_num_max, 786 .get_device_id = vduse_vdpa_get_device_id, 787 .get_vendor_id = vduse_vdpa_get_vendor_id, 788 .get_status = vduse_vdpa_get_status, 789 .set_status = vduse_vdpa_set_status, 790 .get_config_size = vduse_vdpa_get_config_size, 791 .get_config = vduse_vdpa_get_config, 792 .set_config = vduse_vdpa_set_config, 793 .get_generation = vduse_vdpa_get_generation, 794 .set_vq_affinity = vduse_vdpa_set_vq_affinity, 795 .get_vq_affinity = vduse_vdpa_get_vq_affinity, 796 .reset = vduse_vdpa_reset, 797 .set_map = vduse_vdpa_set_map, 798 .free = vduse_vdpa_free, 799 }; 800 801 static void vduse_dev_sync_single_for_device(struct device *dev, 802 dma_addr_t dma_addr, size_t size, 803 enum dma_data_direction dir) 804 { 805 struct vduse_dev *vdev = dev_to_vduse(dev); 806 struct vduse_iova_domain *domain = vdev->domain; 807 808 vduse_domain_sync_single_for_device(domain, dma_addr, size, dir); 809 } 810 811 static void vduse_dev_sync_single_for_cpu(struct device *dev, 812 dma_addr_t dma_addr, size_t size, 813 enum dma_data_direction dir) 814 { 815 struct vduse_dev *vdev = dev_to_vduse(dev); 816 struct vduse_iova_domain *domain = vdev->domain; 817 818 vduse_domain_sync_single_for_cpu(domain, dma_addr, size, dir); 819 } 820 821 static dma_addr_t vduse_dev_map_page(struct device *dev, struct page *page, 822 unsigned long offset, size_t size, 823 enum dma_data_direction dir, 824 unsigned long attrs) 825 { 826 struct vduse_dev *vdev = dev_to_vduse(dev); 827 struct vduse_iova_domain *domain = vdev->domain; 828 829 return vduse_domain_map_page(domain, page, offset, size, dir, attrs); 830 } 831 832 static void vduse_dev_unmap_page(struct device *dev, dma_addr_t dma_addr, 833 size_t size, enum dma_data_direction dir, 834 unsigned long attrs) 835 { 836 struct vduse_dev *vdev = dev_to_vduse(dev); 837 struct vduse_iova_domain *domain = vdev->domain; 838 839 return vduse_domain_unmap_page(domain, dma_addr, size, dir, attrs); 840 } 841 842 static void *vduse_dev_alloc_coherent(struct device *dev, size_t size, 843 dma_addr_t *dma_addr, gfp_t flag, 844 unsigned long attrs) 845 { 846 struct vduse_dev *vdev = dev_to_vduse(dev); 847 struct vduse_iova_domain *domain = vdev->domain; 848 unsigned long iova; 849 void *addr; 850 851 *dma_addr = DMA_MAPPING_ERROR; 852 addr = vduse_domain_alloc_coherent(domain, size, 853 (dma_addr_t *)&iova, flag, attrs); 854 if (!addr) 855 return NULL; 856 857 *dma_addr = (dma_addr_t)iova; 858 859 return addr; 860 } 861 862 static void vduse_dev_free_coherent(struct device *dev, size_t size, 863 void *vaddr, dma_addr_t dma_addr, 864 unsigned long attrs) 865 { 866 struct vduse_dev *vdev = dev_to_vduse(dev); 867 struct vduse_iova_domain *domain = vdev->domain; 868 869 vduse_domain_free_coherent(domain, size, vaddr, dma_addr, attrs); 870 } 871 872 static size_t vduse_dev_max_mapping_size(struct device *dev) 873 { 874 struct vduse_dev *vdev = dev_to_vduse(dev); 875 struct vduse_iova_domain *domain = vdev->domain; 876 877 return domain->bounce_size; 878 } 879 880 static const struct dma_map_ops vduse_dev_dma_ops = { 881 .sync_single_for_device = vduse_dev_sync_single_for_device, 882 .sync_single_for_cpu = vduse_dev_sync_single_for_cpu, 883 .map_page = vduse_dev_map_page, 884 .unmap_page = vduse_dev_unmap_page, 885 .alloc = vduse_dev_alloc_coherent, 886 .free = vduse_dev_free_coherent, 887 .max_mapping_size = vduse_dev_max_mapping_size, 888 }; 889 890 static unsigned int perm_to_file_flags(u8 perm) 891 { 892 unsigned int flags = 0; 893 894 switch (perm) { 895 case VDUSE_ACCESS_WO: 896 flags |= O_WRONLY; 897 break; 898 case VDUSE_ACCESS_RO: 899 flags |= O_RDONLY; 900 break; 901 case VDUSE_ACCESS_RW: 902 flags |= O_RDWR; 903 break; 904 default: 905 WARN(1, "invalidate vhost IOTLB permission\n"); 906 break; 907 } 908 909 return flags; 910 } 911 912 static int vduse_kickfd_setup(struct vduse_dev *dev, 913 struct vduse_vq_eventfd *eventfd) 914 { 915 struct eventfd_ctx *ctx = NULL; 916 struct vduse_virtqueue *vq; 917 u32 index; 918 919 if (eventfd->index >= dev->vq_num) 920 return -EINVAL; 921 922 index = array_index_nospec(eventfd->index, dev->vq_num); 923 vq = dev->vqs[index]; 924 if (eventfd->fd >= 0) { 925 ctx = eventfd_ctx_fdget(eventfd->fd); 926 if (IS_ERR(ctx)) 927 return PTR_ERR(ctx); 928 } else if (eventfd->fd != VDUSE_EVENTFD_DEASSIGN) 929 return 0; 930 931 spin_lock(&vq->kick_lock); 932 if (vq->kickfd) 933 eventfd_ctx_put(vq->kickfd); 934 vq->kickfd = ctx; 935 if (vq->ready && vq->kicked && vq->kickfd) { 936 eventfd_signal(vq->kickfd); 937 vq->kicked = false; 938 } 939 spin_unlock(&vq->kick_lock); 940 941 return 0; 942 } 943 944 static bool vduse_dev_is_ready(struct vduse_dev *dev) 945 { 946 int i; 947 948 for (i = 0; i < dev->vq_num; i++) 949 if (!dev->vqs[i]->num_max) 950 return false; 951 952 return true; 953 } 954 955 static void vduse_dev_irq_inject(struct work_struct *work) 956 { 957 struct vduse_dev *dev = container_of(work, struct vduse_dev, inject); 958 959 spin_lock_bh(&dev->irq_lock); 960 if (dev->config_cb.callback) 961 dev->config_cb.callback(dev->config_cb.private); 962 spin_unlock_bh(&dev->irq_lock); 963 } 964 965 static void vduse_vq_irq_inject(struct work_struct *work) 966 { 967 struct vduse_virtqueue *vq = container_of(work, 968 struct vduse_virtqueue, inject); 969 970 spin_lock_bh(&vq->irq_lock); 971 if (vq->ready && vq->cb.callback) 972 vq->cb.callback(vq->cb.private); 973 spin_unlock_bh(&vq->irq_lock); 974 } 975 976 static bool vduse_vq_signal_irqfd(struct vduse_virtqueue *vq) 977 { 978 bool signal = false; 979 980 if (!vq->cb.trigger) 981 return false; 982 983 spin_lock_irq(&vq->irq_lock); 984 if (vq->ready && vq->cb.trigger) { 985 eventfd_signal(vq->cb.trigger); 986 signal = true; 987 } 988 spin_unlock_irq(&vq->irq_lock); 989 990 return signal; 991 } 992 993 static int vduse_dev_queue_irq_work(struct vduse_dev *dev, 994 struct work_struct *irq_work, 995 int irq_effective_cpu) 996 { 997 int ret = -EINVAL; 998 999 down_read(&dev->rwsem); 1000 if (!(dev->status & VIRTIO_CONFIG_S_DRIVER_OK)) 1001 goto unlock; 1002 1003 ret = 0; 1004 if (irq_effective_cpu == IRQ_UNBOUND) 1005 queue_work(vduse_irq_wq, irq_work); 1006 else 1007 queue_work_on(irq_effective_cpu, 1008 vduse_irq_bound_wq, irq_work); 1009 unlock: 1010 up_read(&dev->rwsem); 1011 1012 return ret; 1013 } 1014 1015 static int vduse_dev_dereg_umem(struct vduse_dev *dev, 1016 u64 iova, u64 size) 1017 { 1018 int ret; 1019 1020 mutex_lock(&dev->mem_lock); 1021 ret = -ENOENT; 1022 if (!dev->umem) 1023 goto unlock; 1024 1025 ret = -EINVAL; 1026 if (!dev->domain) 1027 goto unlock; 1028 1029 if (dev->umem->iova != iova || size != dev->domain->bounce_size) 1030 goto unlock; 1031 1032 vduse_domain_remove_user_bounce_pages(dev->domain); 1033 unpin_user_pages_dirty_lock(dev->umem->pages, 1034 dev->umem->npages, true); 1035 atomic64_sub(dev->umem->npages, &dev->umem->mm->pinned_vm); 1036 mmdrop(dev->umem->mm); 1037 vfree(dev->umem->pages); 1038 kfree(dev->umem); 1039 dev->umem = NULL; 1040 ret = 0; 1041 unlock: 1042 mutex_unlock(&dev->mem_lock); 1043 return ret; 1044 } 1045 1046 static int vduse_dev_reg_umem(struct vduse_dev *dev, 1047 u64 iova, u64 uaddr, u64 size) 1048 { 1049 struct page **page_list = NULL; 1050 struct vduse_umem *umem = NULL; 1051 long pinned = 0; 1052 unsigned long npages, lock_limit; 1053 int ret; 1054 1055 if (!dev->domain || !dev->domain->bounce_map || 1056 size != dev->domain->bounce_size || 1057 iova != 0 || uaddr & ~PAGE_MASK) 1058 return -EINVAL; 1059 1060 mutex_lock(&dev->mem_lock); 1061 ret = -EEXIST; 1062 if (dev->umem) 1063 goto unlock; 1064 1065 ret = -ENOMEM; 1066 npages = size >> PAGE_SHIFT; 1067 page_list = __vmalloc(array_size(npages, sizeof(struct page *)), 1068 GFP_KERNEL_ACCOUNT); 1069 umem = kzalloc(sizeof(*umem), GFP_KERNEL); 1070 if (!page_list || !umem) 1071 goto unlock; 1072 1073 mmap_read_lock(current->mm); 1074 1075 lock_limit = PFN_DOWN(rlimit(RLIMIT_MEMLOCK)); 1076 if (npages + atomic64_read(¤t->mm->pinned_vm) > lock_limit) 1077 goto out; 1078 1079 pinned = pin_user_pages(uaddr, npages, FOLL_LONGTERM | FOLL_WRITE, 1080 page_list); 1081 if (pinned != npages) { 1082 ret = pinned < 0 ? pinned : -ENOMEM; 1083 goto out; 1084 } 1085 1086 ret = vduse_domain_add_user_bounce_pages(dev->domain, 1087 page_list, pinned); 1088 if (ret) 1089 goto out; 1090 1091 atomic64_add(npages, ¤t->mm->pinned_vm); 1092 1093 umem->pages = page_list; 1094 umem->npages = pinned; 1095 umem->iova = iova; 1096 umem->mm = current->mm; 1097 mmgrab(current->mm); 1098 1099 dev->umem = umem; 1100 out: 1101 if (ret && pinned > 0) 1102 unpin_user_pages(page_list, pinned); 1103 1104 mmap_read_unlock(current->mm); 1105 unlock: 1106 if (ret) { 1107 vfree(page_list); 1108 kfree(umem); 1109 } 1110 mutex_unlock(&dev->mem_lock); 1111 return ret; 1112 } 1113 1114 static void vduse_vq_update_effective_cpu(struct vduse_virtqueue *vq) 1115 { 1116 int curr_cpu = vq->irq_effective_cpu; 1117 1118 while (true) { 1119 curr_cpu = cpumask_next(curr_cpu, &vq->irq_affinity); 1120 if (cpu_online(curr_cpu)) 1121 break; 1122 1123 if (curr_cpu >= nr_cpu_ids) 1124 curr_cpu = IRQ_UNBOUND; 1125 } 1126 1127 vq->irq_effective_cpu = curr_cpu; 1128 } 1129 1130 static long vduse_dev_ioctl(struct file *file, unsigned int cmd, 1131 unsigned long arg) 1132 { 1133 struct vduse_dev *dev = file->private_data; 1134 void __user *argp = (void __user *)arg; 1135 int ret; 1136 1137 if (unlikely(dev->broken)) 1138 return -EPERM; 1139 1140 switch (cmd) { 1141 case VDUSE_IOTLB_GET_FD: { 1142 struct vduse_iotlb_entry entry; 1143 struct vhost_iotlb_map *map; 1144 struct vdpa_map_file *map_file; 1145 struct file *f = NULL; 1146 1147 ret = -EFAULT; 1148 if (copy_from_user(&entry, argp, sizeof(entry))) 1149 break; 1150 1151 ret = -EINVAL; 1152 if (entry.start > entry.last) 1153 break; 1154 1155 mutex_lock(&dev->domain_lock); 1156 if (!dev->domain) { 1157 mutex_unlock(&dev->domain_lock); 1158 break; 1159 } 1160 spin_lock(&dev->domain->iotlb_lock); 1161 map = vhost_iotlb_itree_first(dev->domain->iotlb, 1162 entry.start, entry.last); 1163 if (map) { 1164 map_file = (struct vdpa_map_file *)map->opaque; 1165 f = get_file(map_file->file); 1166 entry.offset = map_file->offset; 1167 entry.start = map->start; 1168 entry.last = map->last; 1169 entry.perm = map->perm; 1170 } 1171 spin_unlock(&dev->domain->iotlb_lock); 1172 mutex_unlock(&dev->domain_lock); 1173 ret = -EINVAL; 1174 if (!f) 1175 break; 1176 1177 ret = -EFAULT; 1178 if (copy_to_user(argp, &entry, sizeof(entry))) { 1179 fput(f); 1180 break; 1181 } 1182 ret = receive_fd(f, NULL, perm_to_file_flags(entry.perm)); 1183 fput(f); 1184 break; 1185 } 1186 case VDUSE_DEV_GET_FEATURES: 1187 /* 1188 * Just mirror what driver wrote here. 1189 * The driver is expected to check FEATURE_OK later. 1190 */ 1191 ret = put_user(dev->driver_features, (u64 __user *)argp); 1192 break; 1193 case VDUSE_DEV_SET_CONFIG: { 1194 struct vduse_config_data config; 1195 unsigned long size = offsetof(struct vduse_config_data, 1196 buffer); 1197 1198 ret = -EFAULT; 1199 if (copy_from_user(&config, argp, size)) 1200 break; 1201 1202 ret = -EINVAL; 1203 if (config.offset > dev->config_size || 1204 config.length == 0 || 1205 config.length > dev->config_size - config.offset) 1206 break; 1207 1208 ret = -EFAULT; 1209 if (copy_from_user(dev->config + config.offset, argp + size, 1210 config.length)) 1211 break; 1212 1213 ret = 0; 1214 break; 1215 } 1216 case VDUSE_DEV_INJECT_CONFIG_IRQ: 1217 ret = vduse_dev_queue_irq_work(dev, &dev->inject, IRQ_UNBOUND); 1218 break; 1219 case VDUSE_VQ_SETUP: { 1220 struct vduse_vq_config config; 1221 u32 index; 1222 1223 ret = -EFAULT; 1224 if (copy_from_user(&config, argp, sizeof(config))) 1225 break; 1226 1227 ret = -EINVAL; 1228 if (config.index >= dev->vq_num) 1229 break; 1230 1231 if (!is_mem_zero((const char *)config.reserved, 1232 sizeof(config.reserved))) 1233 break; 1234 1235 index = array_index_nospec(config.index, dev->vq_num); 1236 dev->vqs[index]->num_max = config.max_size; 1237 ret = 0; 1238 break; 1239 } 1240 case VDUSE_VQ_GET_INFO: { 1241 struct vduse_vq_info vq_info; 1242 struct vduse_virtqueue *vq; 1243 u32 index; 1244 1245 ret = -EFAULT; 1246 if (copy_from_user(&vq_info, argp, sizeof(vq_info))) 1247 break; 1248 1249 ret = -EINVAL; 1250 if (vq_info.index >= dev->vq_num) 1251 break; 1252 1253 index = array_index_nospec(vq_info.index, dev->vq_num); 1254 vq = dev->vqs[index]; 1255 vq_info.desc_addr = vq->desc_addr; 1256 vq_info.driver_addr = vq->driver_addr; 1257 vq_info.device_addr = vq->device_addr; 1258 vq_info.num = vq->num; 1259 1260 if (dev->driver_features & BIT_ULL(VIRTIO_F_RING_PACKED)) { 1261 vq_info.packed.last_avail_counter = 1262 vq->state.packed.last_avail_counter; 1263 vq_info.packed.last_avail_idx = 1264 vq->state.packed.last_avail_idx; 1265 vq_info.packed.last_used_counter = 1266 vq->state.packed.last_used_counter; 1267 vq_info.packed.last_used_idx = 1268 vq->state.packed.last_used_idx; 1269 } else 1270 vq_info.split.avail_index = 1271 vq->state.split.avail_index; 1272 1273 vq_info.ready = vq->ready; 1274 1275 ret = -EFAULT; 1276 if (copy_to_user(argp, &vq_info, sizeof(vq_info))) 1277 break; 1278 1279 ret = 0; 1280 break; 1281 } 1282 case VDUSE_VQ_SETUP_KICKFD: { 1283 struct vduse_vq_eventfd eventfd; 1284 1285 ret = -EFAULT; 1286 if (copy_from_user(&eventfd, argp, sizeof(eventfd))) 1287 break; 1288 1289 ret = vduse_kickfd_setup(dev, &eventfd); 1290 break; 1291 } 1292 case VDUSE_VQ_INJECT_IRQ: { 1293 u32 index; 1294 1295 ret = -EFAULT; 1296 if (get_user(index, (u32 __user *)argp)) 1297 break; 1298 1299 ret = -EINVAL; 1300 if (index >= dev->vq_num) 1301 break; 1302 1303 ret = 0; 1304 index = array_index_nospec(index, dev->vq_num); 1305 if (!vduse_vq_signal_irqfd(dev->vqs[index])) { 1306 vduse_vq_update_effective_cpu(dev->vqs[index]); 1307 ret = vduse_dev_queue_irq_work(dev, 1308 &dev->vqs[index]->inject, 1309 dev->vqs[index]->irq_effective_cpu); 1310 } 1311 break; 1312 } 1313 case VDUSE_IOTLB_REG_UMEM: { 1314 struct vduse_iova_umem umem; 1315 1316 ret = -EFAULT; 1317 if (copy_from_user(&umem, argp, sizeof(umem))) 1318 break; 1319 1320 ret = -EINVAL; 1321 if (!is_mem_zero((const char *)umem.reserved, 1322 sizeof(umem.reserved))) 1323 break; 1324 1325 mutex_lock(&dev->domain_lock); 1326 ret = vduse_dev_reg_umem(dev, umem.iova, 1327 umem.uaddr, umem.size); 1328 mutex_unlock(&dev->domain_lock); 1329 break; 1330 } 1331 case VDUSE_IOTLB_DEREG_UMEM: { 1332 struct vduse_iova_umem umem; 1333 1334 ret = -EFAULT; 1335 if (copy_from_user(&umem, argp, sizeof(umem))) 1336 break; 1337 1338 ret = -EINVAL; 1339 if (!is_mem_zero((const char *)umem.reserved, 1340 sizeof(umem.reserved))) 1341 break; 1342 mutex_lock(&dev->domain_lock); 1343 ret = vduse_dev_dereg_umem(dev, umem.iova, 1344 umem.size); 1345 mutex_unlock(&dev->domain_lock); 1346 break; 1347 } 1348 case VDUSE_IOTLB_GET_INFO: { 1349 struct vduse_iova_info info; 1350 struct vhost_iotlb_map *map; 1351 1352 ret = -EFAULT; 1353 if (copy_from_user(&info, argp, sizeof(info))) 1354 break; 1355 1356 ret = -EINVAL; 1357 if (info.start > info.last) 1358 break; 1359 1360 if (!is_mem_zero((const char *)info.reserved, 1361 sizeof(info.reserved))) 1362 break; 1363 1364 mutex_lock(&dev->domain_lock); 1365 if (!dev->domain) { 1366 mutex_unlock(&dev->domain_lock); 1367 break; 1368 } 1369 spin_lock(&dev->domain->iotlb_lock); 1370 map = vhost_iotlb_itree_first(dev->domain->iotlb, 1371 info.start, info.last); 1372 if (map) { 1373 info.start = map->start; 1374 info.last = map->last; 1375 info.capability = 0; 1376 if (dev->domain->bounce_map && map->start == 0 && 1377 map->last == dev->domain->bounce_size - 1) 1378 info.capability |= VDUSE_IOVA_CAP_UMEM; 1379 } 1380 spin_unlock(&dev->domain->iotlb_lock); 1381 mutex_unlock(&dev->domain_lock); 1382 if (!map) 1383 break; 1384 1385 ret = -EFAULT; 1386 if (copy_to_user(argp, &info, sizeof(info))) 1387 break; 1388 1389 ret = 0; 1390 break; 1391 } 1392 default: 1393 ret = -ENOIOCTLCMD; 1394 break; 1395 } 1396 1397 return ret; 1398 } 1399 1400 static int vduse_dev_release(struct inode *inode, struct file *file) 1401 { 1402 struct vduse_dev *dev = file->private_data; 1403 1404 mutex_lock(&dev->domain_lock); 1405 if (dev->domain) 1406 vduse_dev_dereg_umem(dev, 0, dev->domain->bounce_size); 1407 mutex_unlock(&dev->domain_lock); 1408 spin_lock(&dev->msg_lock); 1409 /* Make sure the inflight messages can processed after reconncection */ 1410 list_splice_init(&dev->recv_list, &dev->send_list); 1411 spin_unlock(&dev->msg_lock); 1412 dev->connected = false; 1413 1414 return 0; 1415 } 1416 1417 static struct vduse_dev *vduse_dev_get_from_minor(int minor) 1418 { 1419 struct vduse_dev *dev; 1420 1421 mutex_lock(&vduse_lock); 1422 dev = idr_find(&vduse_idr, minor); 1423 mutex_unlock(&vduse_lock); 1424 1425 return dev; 1426 } 1427 1428 static int vduse_dev_open(struct inode *inode, struct file *file) 1429 { 1430 int ret; 1431 struct vduse_dev *dev = vduse_dev_get_from_minor(iminor(inode)); 1432 1433 if (!dev) 1434 return -ENODEV; 1435 1436 ret = -EBUSY; 1437 mutex_lock(&dev->lock); 1438 if (dev->connected) 1439 goto unlock; 1440 1441 ret = 0; 1442 dev->connected = true; 1443 file->private_data = dev; 1444 unlock: 1445 mutex_unlock(&dev->lock); 1446 1447 return ret; 1448 } 1449 1450 static const struct file_operations vduse_dev_fops = { 1451 .owner = THIS_MODULE, 1452 .open = vduse_dev_open, 1453 .release = vduse_dev_release, 1454 .read_iter = vduse_dev_read_iter, 1455 .write_iter = vduse_dev_write_iter, 1456 .poll = vduse_dev_poll, 1457 .unlocked_ioctl = vduse_dev_ioctl, 1458 .compat_ioctl = compat_ptr_ioctl, 1459 .llseek = noop_llseek, 1460 }; 1461 1462 static ssize_t irq_cb_affinity_show(struct vduse_virtqueue *vq, char *buf) 1463 { 1464 return sprintf(buf, "%*pb\n", cpumask_pr_args(&vq->irq_affinity)); 1465 } 1466 1467 static ssize_t irq_cb_affinity_store(struct vduse_virtqueue *vq, 1468 const char *buf, size_t count) 1469 { 1470 cpumask_var_t new_value; 1471 int ret; 1472 1473 if (!zalloc_cpumask_var(&new_value, GFP_KERNEL)) 1474 return -ENOMEM; 1475 1476 ret = cpumask_parse(buf, new_value); 1477 if (ret) 1478 goto free_mask; 1479 1480 ret = -EINVAL; 1481 if (!cpumask_intersects(new_value, cpu_online_mask)) 1482 goto free_mask; 1483 1484 cpumask_copy(&vq->irq_affinity, new_value); 1485 ret = count; 1486 free_mask: 1487 free_cpumask_var(new_value); 1488 return ret; 1489 } 1490 1491 struct vq_sysfs_entry { 1492 struct attribute attr; 1493 ssize_t (*show)(struct vduse_virtqueue *vq, char *buf); 1494 ssize_t (*store)(struct vduse_virtqueue *vq, const char *buf, 1495 size_t count); 1496 }; 1497 1498 static struct vq_sysfs_entry irq_cb_affinity_attr = __ATTR_RW(irq_cb_affinity); 1499 1500 static struct attribute *vq_attrs[] = { 1501 &irq_cb_affinity_attr.attr, 1502 NULL, 1503 }; 1504 ATTRIBUTE_GROUPS(vq); 1505 1506 static ssize_t vq_attr_show(struct kobject *kobj, struct attribute *attr, 1507 char *buf) 1508 { 1509 struct vduse_virtqueue *vq = container_of(kobj, 1510 struct vduse_virtqueue, kobj); 1511 struct vq_sysfs_entry *entry = container_of(attr, 1512 struct vq_sysfs_entry, attr); 1513 1514 if (!entry->show) 1515 return -EIO; 1516 1517 return entry->show(vq, buf); 1518 } 1519 1520 static ssize_t vq_attr_store(struct kobject *kobj, struct attribute *attr, 1521 const char *buf, size_t count) 1522 { 1523 struct vduse_virtqueue *vq = container_of(kobj, 1524 struct vduse_virtqueue, kobj); 1525 struct vq_sysfs_entry *entry = container_of(attr, 1526 struct vq_sysfs_entry, attr); 1527 1528 if (!entry->store) 1529 return -EIO; 1530 1531 return entry->store(vq, buf, count); 1532 } 1533 1534 static const struct sysfs_ops vq_sysfs_ops = { 1535 .show = vq_attr_show, 1536 .store = vq_attr_store, 1537 }; 1538 1539 static void vq_release(struct kobject *kobj) 1540 { 1541 struct vduse_virtqueue *vq = container_of(kobj, 1542 struct vduse_virtqueue, kobj); 1543 kfree(vq); 1544 } 1545 1546 static const struct kobj_type vq_type = { 1547 .release = vq_release, 1548 .sysfs_ops = &vq_sysfs_ops, 1549 .default_groups = vq_groups, 1550 }; 1551 1552 static char *vduse_devnode(const struct device *dev, umode_t *mode) 1553 { 1554 return kasprintf(GFP_KERNEL, "vduse/%s", dev_name(dev)); 1555 } 1556 1557 static const struct class vduse_class = { 1558 .name = "vduse", 1559 .devnode = vduse_devnode, 1560 }; 1561 1562 static void vduse_dev_deinit_vqs(struct vduse_dev *dev) 1563 { 1564 int i; 1565 1566 if (!dev->vqs) 1567 return; 1568 1569 for (i = 0; i < dev->vq_num; i++) 1570 kobject_put(&dev->vqs[i]->kobj); 1571 kfree(dev->vqs); 1572 } 1573 1574 static int vduse_dev_init_vqs(struct vduse_dev *dev, u32 vq_align, u32 vq_num) 1575 { 1576 int ret, i; 1577 1578 dev->vq_align = vq_align; 1579 dev->vq_num = vq_num; 1580 dev->vqs = kcalloc(dev->vq_num, sizeof(*dev->vqs), GFP_KERNEL); 1581 if (!dev->vqs) 1582 return -ENOMEM; 1583 1584 for (i = 0; i < vq_num; i++) { 1585 dev->vqs[i] = kzalloc(sizeof(*dev->vqs[i]), GFP_KERNEL); 1586 if (!dev->vqs[i]) { 1587 ret = -ENOMEM; 1588 goto err; 1589 } 1590 1591 dev->vqs[i]->index = i; 1592 dev->vqs[i]->irq_effective_cpu = IRQ_UNBOUND; 1593 INIT_WORK(&dev->vqs[i]->inject, vduse_vq_irq_inject); 1594 INIT_WORK(&dev->vqs[i]->kick, vduse_vq_kick_work); 1595 spin_lock_init(&dev->vqs[i]->kick_lock); 1596 spin_lock_init(&dev->vqs[i]->irq_lock); 1597 cpumask_setall(&dev->vqs[i]->irq_affinity); 1598 1599 kobject_init(&dev->vqs[i]->kobj, &vq_type); 1600 ret = kobject_add(&dev->vqs[i]->kobj, 1601 &dev->dev->kobj, "vq%d", i); 1602 if (ret) { 1603 kfree(dev->vqs[i]); 1604 goto err; 1605 } 1606 } 1607 1608 return 0; 1609 err: 1610 while (i--) 1611 kobject_put(&dev->vqs[i]->kobj); 1612 kfree(dev->vqs); 1613 dev->vqs = NULL; 1614 return ret; 1615 } 1616 1617 static struct vduse_dev *vduse_dev_create(void) 1618 { 1619 struct vduse_dev *dev = kzalloc(sizeof(*dev), GFP_KERNEL); 1620 1621 if (!dev) 1622 return NULL; 1623 1624 mutex_init(&dev->lock); 1625 mutex_init(&dev->mem_lock); 1626 mutex_init(&dev->domain_lock); 1627 spin_lock_init(&dev->msg_lock); 1628 INIT_LIST_HEAD(&dev->send_list); 1629 INIT_LIST_HEAD(&dev->recv_list); 1630 spin_lock_init(&dev->irq_lock); 1631 init_rwsem(&dev->rwsem); 1632 1633 INIT_WORK(&dev->inject, vduse_dev_irq_inject); 1634 init_waitqueue_head(&dev->waitq); 1635 1636 return dev; 1637 } 1638 1639 static void vduse_dev_destroy(struct vduse_dev *dev) 1640 { 1641 kfree(dev); 1642 } 1643 1644 static struct vduse_dev *vduse_find_dev(const char *name) 1645 { 1646 struct vduse_dev *dev; 1647 int id; 1648 1649 idr_for_each_entry(&vduse_idr, dev, id) 1650 if (!strcmp(dev->name, name)) 1651 return dev; 1652 1653 return NULL; 1654 } 1655 1656 static int vduse_destroy_dev(char *name) 1657 { 1658 struct vduse_dev *dev = vduse_find_dev(name); 1659 1660 if (!dev) 1661 return -EINVAL; 1662 1663 mutex_lock(&dev->lock); 1664 if (dev->vdev || dev->connected) { 1665 mutex_unlock(&dev->lock); 1666 return -EBUSY; 1667 } 1668 dev->connected = true; 1669 mutex_unlock(&dev->lock); 1670 1671 vduse_dev_reset(dev); 1672 device_destroy(&vduse_class, MKDEV(MAJOR(vduse_major), dev->minor)); 1673 idr_remove(&vduse_idr, dev->minor); 1674 kvfree(dev->config); 1675 vduse_dev_deinit_vqs(dev); 1676 if (dev->domain) 1677 vduse_domain_destroy(dev->domain); 1678 kfree(dev->name); 1679 vduse_dev_destroy(dev); 1680 module_put(THIS_MODULE); 1681 1682 return 0; 1683 } 1684 1685 static bool device_is_allowed(u32 device_id) 1686 { 1687 int i; 1688 1689 for (i = 0; i < ARRAY_SIZE(allowed_device_id); i++) 1690 if (allowed_device_id[i] == device_id) 1691 return true; 1692 1693 return false; 1694 } 1695 1696 static bool features_is_valid(u64 features) 1697 { 1698 if (!(features & (1ULL << VIRTIO_F_ACCESS_PLATFORM))) 1699 return false; 1700 1701 /* Now we only support read-only configuration space */ 1702 if (features & (1ULL << VIRTIO_BLK_F_CONFIG_WCE)) 1703 return false; 1704 1705 return true; 1706 } 1707 1708 static bool vduse_validate_config(struct vduse_dev_config *config) 1709 { 1710 if (!is_mem_zero((const char *)config->reserved, 1711 sizeof(config->reserved))) 1712 return false; 1713 1714 if (config->vq_align > PAGE_SIZE) 1715 return false; 1716 1717 if (config->config_size > PAGE_SIZE) 1718 return false; 1719 1720 if (config->vq_num > 0xffff) 1721 return false; 1722 1723 if (!config->name[0]) 1724 return false; 1725 1726 if (!device_is_allowed(config->device_id)) 1727 return false; 1728 1729 if (!features_is_valid(config->features)) 1730 return false; 1731 1732 return true; 1733 } 1734 1735 static ssize_t msg_timeout_show(struct device *device, 1736 struct device_attribute *attr, char *buf) 1737 { 1738 struct vduse_dev *dev = dev_get_drvdata(device); 1739 1740 return sysfs_emit(buf, "%u\n", dev->msg_timeout); 1741 } 1742 1743 static ssize_t msg_timeout_store(struct device *device, 1744 struct device_attribute *attr, 1745 const char *buf, size_t count) 1746 { 1747 struct vduse_dev *dev = dev_get_drvdata(device); 1748 int ret; 1749 1750 ret = kstrtouint(buf, 10, &dev->msg_timeout); 1751 if (ret < 0) 1752 return ret; 1753 1754 return count; 1755 } 1756 1757 static DEVICE_ATTR_RW(msg_timeout); 1758 1759 static ssize_t bounce_size_show(struct device *device, 1760 struct device_attribute *attr, char *buf) 1761 { 1762 struct vduse_dev *dev = dev_get_drvdata(device); 1763 1764 return sysfs_emit(buf, "%u\n", dev->bounce_size); 1765 } 1766 1767 static ssize_t bounce_size_store(struct device *device, 1768 struct device_attribute *attr, 1769 const char *buf, size_t count) 1770 { 1771 struct vduse_dev *dev = dev_get_drvdata(device); 1772 unsigned int bounce_size; 1773 int ret; 1774 1775 ret = -EPERM; 1776 mutex_lock(&dev->domain_lock); 1777 if (dev->domain) 1778 goto unlock; 1779 1780 ret = kstrtouint(buf, 10, &bounce_size); 1781 if (ret < 0) 1782 goto unlock; 1783 1784 ret = -EINVAL; 1785 if (bounce_size > VDUSE_MAX_BOUNCE_SIZE || 1786 bounce_size < VDUSE_MIN_BOUNCE_SIZE) 1787 goto unlock; 1788 1789 dev->bounce_size = bounce_size & PAGE_MASK; 1790 ret = count; 1791 unlock: 1792 mutex_unlock(&dev->domain_lock); 1793 return ret; 1794 } 1795 1796 static DEVICE_ATTR_RW(bounce_size); 1797 1798 static struct attribute *vduse_dev_attrs[] = { 1799 &dev_attr_msg_timeout.attr, 1800 &dev_attr_bounce_size.attr, 1801 NULL 1802 }; 1803 1804 ATTRIBUTE_GROUPS(vduse_dev); 1805 1806 static int vduse_create_dev(struct vduse_dev_config *config, 1807 void *config_buf, u64 api_version) 1808 { 1809 int ret; 1810 struct vduse_dev *dev; 1811 1812 ret = -EEXIST; 1813 if (vduse_find_dev(config->name)) 1814 goto err; 1815 1816 ret = -ENOMEM; 1817 dev = vduse_dev_create(); 1818 if (!dev) 1819 goto err; 1820 1821 dev->api_version = api_version; 1822 dev->device_features = config->features; 1823 dev->device_id = config->device_id; 1824 dev->vendor_id = config->vendor_id; 1825 dev->name = kstrdup(config->name, GFP_KERNEL); 1826 if (!dev->name) 1827 goto err_str; 1828 1829 dev->bounce_size = VDUSE_BOUNCE_SIZE; 1830 dev->config = config_buf; 1831 dev->config_size = config->config_size; 1832 1833 ret = idr_alloc(&vduse_idr, dev, 1, VDUSE_DEV_MAX, GFP_KERNEL); 1834 if (ret < 0) 1835 goto err_idr; 1836 1837 dev->minor = ret; 1838 dev->msg_timeout = VDUSE_MSG_DEFAULT_TIMEOUT; 1839 dev->dev = device_create_with_groups(&vduse_class, NULL, 1840 MKDEV(MAJOR(vduse_major), dev->minor), 1841 dev, vduse_dev_groups, "%s", config->name); 1842 if (IS_ERR(dev->dev)) { 1843 ret = PTR_ERR(dev->dev); 1844 goto err_dev; 1845 } 1846 1847 ret = vduse_dev_init_vqs(dev, config->vq_align, config->vq_num); 1848 if (ret) 1849 goto err_vqs; 1850 1851 __module_get(THIS_MODULE); 1852 1853 return 0; 1854 err_vqs: 1855 device_destroy(&vduse_class, MKDEV(MAJOR(vduse_major), dev->minor)); 1856 err_dev: 1857 idr_remove(&vduse_idr, dev->minor); 1858 err_idr: 1859 kfree(dev->name); 1860 err_str: 1861 vduse_dev_destroy(dev); 1862 err: 1863 return ret; 1864 } 1865 1866 static long vduse_ioctl(struct file *file, unsigned int cmd, 1867 unsigned long arg) 1868 { 1869 int ret; 1870 void __user *argp = (void __user *)arg; 1871 struct vduse_control *control = file->private_data; 1872 1873 mutex_lock(&vduse_lock); 1874 switch (cmd) { 1875 case VDUSE_GET_API_VERSION: 1876 ret = put_user(control->api_version, (u64 __user *)argp); 1877 break; 1878 case VDUSE_SET_API_VERSION: { 1879 u64 api_version; 1880 1881 ret = -EFAULT; 1882 if (get_user(api_version, (u64 __user *)argp)) 1883 break; 1884 1885 ret = -EINVAL; 1886 if (api_version > VDUSE_API_VERSION) 1887 break; 1888 1889 ret = 0; 1890 control->api_version = api_version; 1891 break; 1892 } 1893 case VDUSE_CREATE_DEV: { 1894 struct vduse_dev_config config; 1895 unsigned long size = offsetof(struct vduse_dev_config, config); 1896 void *buf; 1897 1898 ret = -EFAULT; 1899 if (copy_from_user(&config, argp, size)) 1900 break; 1901 1902 ret = -EINVAL; 1903 if (vduse_validate_config(&config) == false) 1904 break; 1905 1906 buf = vmemdup_user(argp + size, config.config_size); 1907 if (IS_ERR(buf)) { 1908 ret = PTR_ERR(buf); 1909 break; 1910 } 1911 config.name[VDUSE_NAME_MAX - 1] = '\0'; 1912 ret = vduse_create_dev(&config, buf, control->api_version); 1913 if (ret) 1914 kvfree(buf); 1915 break; 1916 } 1917 case VDUSE_DESTROY_DEV: { 1918 char name[VDUSE_NAME_MAX]; 1919 1920 ret = -EFAULT; 1921 if (copy_from_user(name, argp, VDUSE_NAME_MAX)) 1922 break; 1923 1924 name[VDUSE_NAME_MAX - 1] = '\0'; 1925 ret = vduse_destroy_dev(name); 1926 break; 1927 } 1928 default: 1929 ret = -EINVAL; 1930 break; 1931 } 1932 mutex_unlock(&vduse_lock); 1933 1934 return ret; 1935 } 1936 1937 static int vduse_release(struct inode *inode, struct file *file) 1938 { 1939 struct vduse_control *control = file->private_data; 1940 1941 kfree(control); 1942 return 0; 1943 } 1944 1945 static int vduse_open(struct inode *inode, struct file *file) 1946 { 1947 struct vduse_control *control; 1948 1949 control = kmalloc(sizeof(struct vduse_control), GFP_KERNEL); 1950 if (!control) 1951 return -ENOMEM; 1952 1953 control->api_version = VDUSE_API_VERSION; 1954 file->private_data = control; 1955 1956 return 0; 1957 } 1958 1959 static const struct file_operations vduse_ctrl_fops = { 1960 .owner = THIS_MODULE, 1961 .open = vduse_open, 1962 .release = vduse_release, 1963 .unlocked_ioctl = vduse_ioctl, 1964 .compat_ioctl = compat_ptr_ioctl, 1965 .llseek = noop_llseek, 1966 }; 1967 1968 struct vduse_mgmt_dev { 1969 struct vdpa_mgmt_dev mgmt_dev; 1970 struct device dev; 1971 }; 1972 1973 static struct vduse_mgmt_dev *vduse_mgmt; 1974 1975 static int vduse_dev_init_vdpa(struct vduse_dev *dev, const char *name) 1976 { 1977 struct vduse_vdpa *vdev; 1978 int ret; 1979 1980 if (dev->vdev) 1981 return -EEXIST; 1982 1983 vdev = vdpa_alloc_device(struct vduse_vdpa, vdpa, dev->dev, 1984 &vduse_vdpa_config_ops, 1, 1, name, true); 1985 if (IS_ERR(vdev)) 1986 return PTR_ERR(vdev); 1987 1988 dev->vdev = vdev; 1989 vdev->dev = dev; 1990 vdev->vdpa.dev.dma_mask = &vdev->vdpa.dev.coherent_dma_mask; 1991 ret = dma_set_mask_and_coherent(&vdev->vdpa.dev, DMA_BIT_MASK(64)); 1992 if (ret) { 1993 put_device(&vdev->vdpa.dev); 1994 return ret; 1995 } 1996 set_dma_ops(&vdev->vdpa.dev, &vduse_dev_dma_ops); 1997 vdev->vdpa.dma_dev = &vdev->vdpa.dev; 1998 vdev->vdpa.mdev = &vduse_mgmt->mgmt_dev; 1999 2000 return 0; 2001 } 2002 2003 static int vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name, 2004 const struct vdpa_dev_set_config *config) 2005 { 2006 struct vduse_dev *dev; 2007 int ret; 2008 2009 mutex_lock(&vduse_lock); 2010 dev = vduse_find_dev(name); 2011 if (!dev || !vduse_dev_is_ready(dev)) { 2012 mutex_unlock(&vduse_lock); 2013 return -EINVAL; 2014 } 2015 ret = vduse_dev_init_vdpa(dev, name); 2016 mutex_unlock(&vduse_lock); 2017 if (ret) 2018 return ret; 2019 2020 mutex_lock(&dev->domain_lock); 2021 if (!dev->domain) 2022 dev->domain = vduse_domain_create(VDUSE_IOVA_SIZE - 1, 2023 dev->bounce_size); 2024 mutex_unlock(&dev->domain_lock); 2025 if (!dev->domain) { 2026 put_device(&dev->vdev->vdpa.dev); 2027 return -ENOMEM; 2028 } 2029 2030 ret = _vdpa_register_device(&dev->vdev->vdpa, dev->vq_num); 2031 if (ret) { 2032 put_device(&dev->vdev->vdpa.dev); 2033 mutex_lock(&dev->domain_lock); 2034 vduse_domain_destroy(dev->domain); 2035 dev->domain = NULL; 2036 mutex_unlock(&dev->domain_lock); 2037 return ret; 2038 } 2039 2040 return 0; 2041 } 2042 2043 static void vdpa_dev_del(struct vdpa_mgmt_dev *mdev, struct vdpa_device *dev) 2044 { 2045 _vdpa_unregister_device(dev); 2046 } 2047 2048 static const struct vdpa_mgmtdev_ops vdpa_dev_mgmtdev_ops = { 2049 .dev_add = vdpa_dev_add, 2050 .dev_del = vdpa_dev_del, 2051 }; 2052 2053 static struct virtio_device_id id_table[] = { 2054 { VIRTIO_ID_BLOCK, VIRTIO_DEV_ANY_ID }, 2055 { 0 }, 2056 }; 2057 2058 static void vduse_mgmtdev_release(struct device *dev) 2059 { 2060 struct vduse_mgmt_dev *mgmt_dev; 2061 2062 mgmt_dev = container_of(dev, struct vduse_mgmt_dev, dev); 2063 kfree(mgmt_dev); 2064 } 2065 2066 static int vduse_mgmtdev_init(void) 2067 { 2068 int ret; 2069 2070 vduse_mgmt = kzalloc(sizeof(*vduse_mgmt), GFP_KERNEL); 2071 if (!vduse_mgmt) 2072 return -ENOMEM; 2073 2074 ret = dev_set_name(&vduse_mgmt->dev, "vduse"); 2075 if (ret) { 2076 kfree(vduse_mgmt); 2077 return ret; 2078 } 2079 2080 vduse_mgmt->dev.release = vduse_mgmtdev_release; 2081 2082 ret = device_register(&vduse_mgmt->dev); 2083 if (ret) 2084 goto dev_reg_err; 2085 2086 vduse_mgmt->mgmt_dev.id_table = id_table; 2087 vduse_mgmt->mgmt_dev.ops = &vdpa_dev_mgmtdev_ops; 2088 vduse_mgmt->mgmt_dev.device = &vduse_mgmt->dev; 2089 ret = vdpa_mgmtdev_register(&vduse_mgmt->mgmt_dev); 2090 if (ret) 2091 device_unregister(&vduse_mgmt->dev); 2092 2093 return ret; 2094 2095 dev_reg_err: 2096 put_device(&vduse_mgmt->dev); 2097 return ret; 2098 } 2099 2100 static void vduse_mgmtdev_exit(void) 2101 { 2102 vdpa_mgmtdev_unregister(&vduse_mgmt->mgmt_dev); 2103 device_unregister(&vduse_mgmt->dev); 2104 } 2105 2106 static int vduse_init(void) 2107 { 2108 int ret; 2109 struct device *dev; 2110 2111 ret = class_register(&vduse_class); 2112 if (ret) 2113 return ret; 2114 2115 ret = alloc_chrdev_region(&vduse_major, 0, VDUSE_DEV_MAX, "vduse"); 2116 if (ret) 2117 goto err_chardev_region; 2118 2119 /* /dev/vduse/control */ 2120 cdev_init(&vduse_ctrl_cdev, &vduse_ctrl_fops); 2121 vduse_ctrl_cdev.owner = THIS_MODULE; 2122 ret = cdev_add(&vduse_ctrl_cdev, vduse_major, 1); 2123 if (ret) 2124 goto err_ctrl_cdev; 2125 2126 dev = device_create(&vduse_class, NULL, vduse_major, NULL, "control"); 2127 if (IS_ERR(dev)) { 2128 ret = PTR_ERR(dev); 2129 goto err_device; 2130 } 2131 2132 /* /dev/vduse/$DEVICE */ 2133 cdev_init(&vduse_cdev, &vduse_dev_fops); 2134 vduse_cdev.owner = THIS_MODULE; 2135 ret = cdev_add(&vduse_cdev, MKDEV(MAJOR(vduse_major), 1), 2136 VDUSE_DEV_MAX - 1); 2137 if (ret) 2138 goto err_cdev; 2139 2140 ret = -ENOMEM; 2141 vduse_irq_wq = alloc_workqueue("vduse-irq", 2142 WQ_HIGHPRI | WQ_SYSFS | WQ_UNBOUND, 0); 2143 if (!vduse_irq_wq) 2144 goto err_wq; 2145 2146 vduse_irq_bound_wq = alloc_workqueue("vduse-irq-bound", WQ_HIGHPRI, 0); 2147 if (!vduse_irq_bound_wq) 2148 goto err_bound_wq; 2149 2150 ret = vduse_domain_init(); 2151 if (ret) 2152 goto err_domain; 2153 2154 ret = vduse_mgmtdev_init(); 2155 if (ret) 2156 goto err_mgmtdev; 2157 2158 return 0; 2159 err_mgmtdev: 2160 vduse_domain_exit(); 2161 err_domain: 2162 destroy_workqueue(vduse_irq_bound_wq); 2163 err_bound_wq: 2164 destroy_workqueue(vduse_irq_wq); 2165 err_wq: 2166 cdev_del(&vduse_cdev); 2167 err_cdev: 2168 device_destroy(&vduse_class, vduse_major); 2169 err_device: 2170 cdev_del(&vduse_ctrl_cdev); 2171 err_ctrl_cdev: 2172 unregister_chrdev_region(vduse_major, VDUSE_DEV_MAX); 2173 err_chardev_region: 2174 class_unregister(&vduse_class); 2175 return ret; 2176 } 2177 module_init(vduse_init); 2178 2179 static void vduse_exit(void) 2180 { 2181 vduse_mgmtdev_exit(); 2182 vduse_domain_exit(); 2183 destroy_workqueue(vduse_irq_bound_wq); 2184 destroy_workqueue(vduse_irq_wq); 2185 cdev_del(&vduse_cdev); 2186 device_destroy(&vduse_class, vduse_major); 2187 cdev_del(&vduse_ctrl_cdev); 2188 unregister_chrdev_region(vduse_major, VDUSE_DEV_MAX); 2189 class_unregister(&vduse_class); 2190 } 2191 module_exit(vduse_exit); 2192 2193 MODULE_LICENSE(DRV_LICENSE); 2194 MODULE_AUTHOR(DRV_AUTHOR); 2195 MODULE_DESCRIPTION(DRV_DESC); 2196