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(¤t->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, ¤t->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