1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Virtio PCI driver - common functionality for all device versions 4 * 5 * This module allows virtio devices to be used over a virtual PCI device. 6 * This can be used with QEMU based VMMs like KVM or Xen. 7 * 8 * Copyright IBM Corp. 2007 9 * Copyright Red Hat, Inc. 2014 10 * 11 * Authors: 12 * Anthony Liguori <aliguori@us.ibm.com> 13 * Rusty Russell <rusty@rustcorp.com.au> 14 * Michael S. Tsirkin <mst@redhat.com> 15 */ 16 17 #include "virtio_pci_common.h" 18 19 static bool force_legacy = false; 20 21 #if IS_ENABLED(CONFIG_VIRTIO_PCI_LEGACY) 22 module_param(force_legacy, bool, 0444); 23 MODULE_PARM_DESC(force_legacy, 24 "Force legacy mode for transitional virtio 1 devices"); 25 #endif 26 27 bool vp_is_avq(struct virtio_device *vdev, unsigned int index) 28 { 29 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 30 31 if (!virtio_has_feature(vdev, VIRTIO_F_ADMIN_VQ)) 32 return false; 33 34 return index == vp_dev->admin_vq.vq_index; 35 } 36 37 /* wait for pending irq handlers */ 38 void vp_synchronize_vectors(struct virtio_device *vdev) 39 { 40 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 41 int i; 42 43 if (vp_dev->intx_enabled) 44 synchronize_irq(vp_dev->pci_dev->irq); 45 46 for (i = 0; i < vp_dev->msix_vectors; ++i) 47 synchronize_irq(pci_irq_vector(vp_dev->pci_dev, i)); 48 } 49 50 /* the notify function used when creating a virt queue */ 51 bool vp_notify(struct virtqueue *vq) 52 { 53 /* we write the queue's selector into the notification register to 54 * signal the other end */ 55 iowrite16(vq->index, (void __iomem *)vq->priv); 56 return true; 57 } 58 59 /* Notify all slow path virtqueues on an interrupt. */ 60 static void vp_vring_slow_path_interrupt(int irq, 61 struct virtio_pci_device *vp_dev) 62 { 63 struct virtio_pci_vq_info *info; 64 unsigned long flags; 65 66 spin_lock_irqsave(&vp_dev->lock, flags); 67 list_for_each_entry(info, &vp_dev->slow_virtqueues, node) 68 vring_interrupt(irq, info->vq); 69 spin_unlock_irqrestore(&vp_dev->lock, flags); 70 } 71 72 /* Handle a configuration change: Tell driver if it wants to know. */ 73 static irqreturn_t vp_config_changed(int irq, void *opaque) 74 { 75 struct virtio_pci_device *vp_dev = opaque; 76 77 virtio_config_changed(&vp_dev->vdev); 78 vp_vring_slow_path_interrupt(irq, vp_dev); 79 return IRQ_HANDLED; 80 } 81 82 /* Notify all virtqueues on an interrupt. */ 83 static irqreturn_t vp_vring_interrupt(int irq, void *opaque) 84 { 85 struct virtio_pci_device *vp_dev = opaque; 86 struct virtio_pci_vq_info *info; 87 irqreturn_t ret = IRQ_NONE; 88 unsigned long flags; 89 90 spin_lock_irqsave(&vp_dev->lock, flags); 91 list_for_each_entry(info, &vp_dev->virtqueues, node) { 92 if (vring_interrupt(irq, info->vq) == IRQ_HANDLED) 93 ret = IRQ_HANDLED; 94 } 95 spin_unlock_irqrestore(&vp_dev->lock, flags); 96 97 return ret; 98 } 99 100 /* A small wrapper to also acknowledge the interrupt when it's handled. 101 * I really need an EIO hook for the vring so I can ack the interrupt once we 102 * know that we'll be handling the IRQ but before we invoke the callback since 103 * the callback may notify the host which results in the host attempting to 104 * raise an interrupt that we would then mask once we acknowledged the 105 * interrupt. */ 106 static irqreturn_t vp_interrupt(int irq, void *opaque) 107 { 108 struct virtio_pci_device *vp_dev = opaque; 109 u8 isr; 110 111 /* reading the ISR has the effect of also clearing it so it's very 112 * important to save off the value. */ 113 isr = ioread8(vp_dev->isr); 114 115 /* It's definitely not us if the ISR was not high */ 116 if (!isr) 117 return IRQ_NONE; 118 119 /* Configuration change? Tell driver if it wants to know. */ 120 if (isr & VIRTIO_PCI_ISR_CONFIG) 121 vp_config_changed(irq, opaque); 122 123 vp_vring_interrupt(irq, opaque); 124 125 return IRQ_HANDLED; 126 } 127 128 static int vp_request_msix_vectors(struct virtio_device *vdev, int nvectors, 129 bool per_vq_vectors, struct irq_affinity *desc) 130 { 131 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 132 const char *name = dev_name(&vp_dev->vdev.dev); 133 unsigned int flags = PCI_IRQ_MSIX; 134 unsigned int i, v; 135 int err = -ENOMEM; 136 137 vp_dev->msix_vectors = nvectors; 138 139 vp_dev->msix_names = kmalloc_objs(*vp_dev->msix_names, nvectors); 140 if (!vp_dev->msix_names) 141 goto error; 142 vp_dev->msix_affinity_masks 143 = kzalloc_objs(*vp_dev->msix_affinity_masks, nvectors); 144 if (!vp_dev->msix_affinity_masks) 145 goto error; 146 for (i = 0; i < nvectors; ++i) 147 if (!alloc_cpumask_var(&vp_dev->msix_affinity_masks[i], 148 GFP_KERNEL)) 149 goto error; 150 151 if (!per_vq_vectors) 152 desc = NULL; 153 154 if (desc) { 155 flags |= PCI_IRQ_AFFINITY; 156 desc->pre_vectors++; /* virtio config vector */ 157 } 158 159 err = pci_alloc_irq_vectors_affinity(vp_dev->pci_dev, nvectors, 160 nvectors, flags, desc); 161 if (err < 0) 162 goto error; 163 vp_dev->msix_enabled = 1; 164 165 /* Set the vector used for configuration */ 166 v = vp_dev->msix_used_vectors; 167 snprintf(vp_dev->msix_names[v], sizeof *vp_dev->msix_names, 168 "%s-config", name); 169 err = request_irq(pci_irq_vector(vp_dev->pci_dev, v), 170 vp_config_changed, 0, vp_dev->msix_names[v], 171 vp_dev); 172 if (err) 173 goto error; 174 ++vp_dev->msix_used_vectors; 175 176 v = vp_dev->config_vector(vp_dev, v); 177 /* Verify we had enough resources to assign the vector */ 178 if (v == VIRTIO_MSI_NO_VECTOR) { 179 err = -EBUSY; 180 goto error; 181 } 182 183 if (!per_vq_vectors) { 184 /* Shared vector for all VQs */ 185 v = vp_dev->msix_used_vectors; 186 snprintf(vp_dev->msix_names[v], sizeof *vp_dev->msix_names, 187 "%s-virtqueues", name); 188 err = request_irq(pci_irq_vector(vp_dev->pci_dev, v), 189 vp_vring_interrupt, 0, vp_dev->msix_names[v], 190 vp_dev); 191 if (err) 192 goto error; 193 ++vp_dev->msix_used_vectors; 194 } 195 return 0; 196 error: 197 return err; 198 } 199 200 static bool vp_is_slow_path_vector(u16 msix_vec) 201 { 202 return msix_vec == VP_MSIX_CONFIG_VECTOR; 203 } 204 205 static struct virtqueue *vp_setup_vq(struct virtio_device *vdev, unsigned int index, 206 void (*callback)(struct virtqueue *vq), 207 const char *name, 208 bool ctx, 209 u16 msix_vec, 210 struct virtio_pci_vq_info **p_info) 211 { 212 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 213 struct virtio_pci_vq_info *info = kmalloc_obj(*info); 214 struct virtqueue *vq; 215 unsigned long flags; 216 217 /* fill out our structure that represents an active queue */ 218 if (!info) 219 return ERR_PTR(-ENOMEM); 220 221 vq = vp_dev->setup_vq(vp_dev, info, index, callback, name, ctx, 222 msix_vec); 223 if (IS_ERR(vq)) 224 goto out_info; 225 226 info->vq = vq; 227 if (callback) { 228 spin_lock_irqsave(&vp_dev->lock, flags); 229 if (!vp_is_slow_path_vector(msix_vec)) 230 list_add(&info->node, &vp_dev->virtqueues); 231 else 232 list_add(&info->node, &vp_dev->slow_virtqueues); 233 spin_unlock_irqrestore(&vp_dev->lock, flags); 234 } else { 235 INIT_LIST_HEAD(&info->node); 236 } 237 238 *p_info = info; 239 return vq; 240 241 out_info: 242 kfree(info); 243 return vq; 244 } 245 246 static void vp_del_vq(struct virtqueue *vq, struct virtio_pci_vq_info *info) 247 { 248 struct virtio_pci_device *vp_dev = to_vp_device(vq->vdev); 249 unsigned long flags; 250 251 /* 252 * If it fails during re-enable reset vq. This way we won't rejoin 253 * info->node to the queue. Prevent unexpected irqs. 254 */ 255 if (!vq->reset) { 256 spin_lock_irqsave(&vp_dev->lock, flags); 257 list_del(&info->node); 258 spin_unlock_irqrestore(&vp_dev->lock, flags); 259 } 260 261 vp_dev->del_vq(info); 262 kfree(info); 263 } 264 265 /* the config->del_vqs() implementation */ 266 void vp_del_vqs(struct virtio_device *vdev) 267 { 268 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 269 struct virtio_pci_vq_info *info; 270 struct virtqueue *vq, *n; 271 int i; 272 273 list_for_each_entry_safe(vq, n, &vdev->vqs, list) { 274 info = vp_is_avq(vdev, vq->index) ? vp_dev->admin_vq.info : 275 vp_dev->vqs[vq->index]; 276 277 if (vp_dev->per_vq_vectors) { 278 int v = info->msix_vector; 279 if (v != VIRTIO_MSI_NO_VECTOR && 280 !vp_is_slow_path_vector(v)) { 281 int irq = pci_irq_vector(vp_dev->pci_dev, v); 282 283 irq_update_affinity_hint(irq, NULL); 284 free_irq(irq, vq); 285 } 286 } 287 vp_del_vq(vq, info); 288 } 289 vp_dev->per_vq_vectors = false; 290 291 if (vp_dev->intx_enabled) { 292 free_irq(vp_dev->pci_dev->irq, vp_dev); 293 vp_dev->intx_enabled = 0; 294 } 295 296 for (i = 0; i < vp_dev->msix_used_vectors; ++i) 297 free_irq(pci_irq_vector(vp_dev->pci_dev, i), vp_dev); 298 299 if (vp_dev->msix_affinity_masks) { 300 for (i = 0; i < vp_dev->msix_vectors; i++) 301 free_cpumask_var(vp_dev->msix_affinity_masks[i]); 302 } 303 304 if (vp_dev->msix_enabled) { 305 /* Disable the vector used for configuration */ 306 vp_dev->config_vector(vp_dev, VIRTIO_MSI_NO_VECTOR); 307 308 pci_free_irq_vectors(vp_dev->pci_dev); 309 vp_dev->msix_enabled = 0; 310 } 311 312 vp_dev->msix_vectors = 0; 313 vp_dev->msix_used_vectors = 0; 314 kfree(vp_dev->msix_names); 315 vp_dev->msix_names = NULL; 316 kfree(vp_dev->msix_affinity_masks); 317 vp_dev->msix_affinity_masks = NULL; 318 kfree(vp_dev->vqs); 319 vp_dev->vqs = NULL; 320 } 321 322 enum vp_vq_vector_policy { 323 VP_VQ_VECTOR_POLICY_EACH, 324 VP_VQ_VECTOR_POLICY_SHARED_SLOW, 325 VP_VQ_VECTOR_POLICY_SHARED, 326 }; 327 328 static struct virtqueue * 329 vp_find_one_vq_msix(struct virtio_device *vdev, int queue_idx, 330 vq_callback_t *callback, const char *name, bool ctx, 331 bool slow_path, int *allocated_vectors, 332 enum vp_vq_vector_policy vector_policy, 333 struct virtio_pci_vq_info **p_info) 334 { 335 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 336 struct virtqueue *vq; 337 u16 msix_vec; 338 int err; 339 340 if (!callback) 341 msix_vec = VIRTIO_MSI_NO_VECTOR; 342 else if (vector_policy == VP_VQ_VECTOR_POLICY_EACH || 343 (vector_policy == VP_VQ_VECTOR_POLICY_SHARED_SLOW && 344 !slow_path)) 345 msix_vec = (*allocated_vectors)++; 346 else if (vector_policy != VP_VQ_VECTOR_POLICY_EACH && 347 slow_path) 348 msix_vec = VP_MSIX_CONFIG_VECTOR; 349 else 350 msix_vec = VP_MSIX_VQ_VECTOR; 351 vq = vp_setup_vq(vdev, queue_idx, callback, name, ctx, msix_vec, 352 p_info); 353 if (IS_ERR(vq)) 354 return vq; 355 356 if (vector_policy == VP_VQ_VECTOR_POLICY_SHARED || 357 msix_vec == VIRTIO_MSI_NO_VECTOR || 358 vp_is_slow_path_vector(msix_vec)) 359 return vq; 360 361 /* allocate per-vq irq if available and necessary */ 362 snprintf(vp_dev->msix_names[msix_vec], sizeof(*vp_dev->msix_names), 363 "%s-%s", dev_name(&vp_dev->vdev.dev), name); 364 err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec), 365 vring_interrupt, 0, 366 vp_dev->msix_names[msix_vec], vq); 367 if (err) { 368 vp_del_vq(vq, *p_info); 369 return ERR_PTR(err); 370 } 371 372 return vq; 373 } 374 375 static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs, 376 struct virtqueue *vqs[], 377 struct virtqueue_info vqs_info[], 378 enum vp_vq_vector_policy vector_policy, 379 struct irq_affinity *desc) 380 { 381 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 382 struct virtio_pci_admin_vq *avq = &vp_dev->admin_vq; 383 struct virtqueue_info *vqi; 384 int i, err, nvectors, allocated_vectors, queue_idx = 0; 385 struct virtqueue *vq; 386 bool per_vq_vectors; 387 u16 avq_num = 0; 388 389 vp_dev->vqs = kzalloc_objs(*vp_dev->vqs, nvqs); 390 if (!vp_dev->vqs) 391 return -ENOMEM; 392 393 if (vp_dev->avq_index) { 394 err = vp_dev->avq_index(vdev, &avq->vq_index, &avq_num); 395 if (err) 396 goto error_find; 397 } 398 399 per_vq_vectors = vector_policy != VP_VQ_VECTOR_POLICY_SHARED; 400 401 if (per_vq_vectors) { 402 /* Best option: one for change interrupt, one per vq. */ 403 nvectors = 1; 404 for (i = 0; i < nvqs; ++i) { 405 vqi = &vqs_info[i]; 406 if (vqi->name && vqi->callback) 407 ++nvectors; 408 } 409 if (avq_num && vector_policy == VP_VQ_VECTOR_POLICY_EACH) 410 ++nvectors; 411 } else { 412 /* Second best: one for change, shared for all vqs. */ 413 nvectors = 2; 414 } 415 416 err = vp_request_msix_vectors(vdev, nvectors, per_vq_vectors, desc); 417 if (err) 418 goto error_find; 419 420 vp_dev->per_vq_vectors = per_vq_vectors; 421 allocated_vectors = vp_dev->msix_used_vectors; 422 for (i = 0; i < nvqs; ++i) { 423 vqi = &vqs_info[i]; 424 if (!vqi->name) { 425 vqs[i] = NULL; 426 continue; 427 } 428 vqs[i] = vp_find_one_vq_msix(vdev, queue_idx, vqi->callback, 429 vqi->name, vqi->ctx, false, 430 &allocated_vectors, vector_policy, 431 &vp_dev->vqs[queue_idx]); 432 queue_idx++; 433 if (IS_ERR(vqs[i])) { 434 err = PTR_ERR(vqs[i]); 435 goto error_find; 436 } 437 } 438 439 if (!avq_num) 440 return 0; 441 sprintf(avq->name, "avq.%u", avq->vq_index); 442 vq = vp_find_one_vq_msix(vdev, avq->vq_index, vp_modern_avq_done, 443 avq->name, false, true, &allocated_vectors, 444 vector_policy, &vp_dev->admin_vq.info); 445 if (IS_ERR(vq)) { 446 err = PTR_ERR(vq); 447 goto error_find; 448 } 449 450 return 0; 451 452 error_find: 453 vp_del_vqs(vdev); 454 return err; 455 } 456 457 static int vp_find_vqs_intx(struct virtio_device *vdev, unsigned int nvqs, 458 struct virtqueue *vqs[], 459 struct virtqueue_info vqs_info[]) 460 { 461 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 462 struct virtio_pci_admin_vq *avq = &vp_dev->admin_vq; 463 int i, err, queue_idx = 0; 464 struct virtqueue *vq; 465 u16 avq_num = 0; 466 467 vp_dev->vqs = kzalloc_objs(*vp_dev->vqs, nvqs); 468 if (!vp_dev->vqs) 469 return -ENOMEM; 470 471 if (vp_dev->avq_index) { 472 err = vp_dev->avq_index(vdev, &avq->vq_index, &avq_num); 473 if (err) 474 goto out_del_vqs; 475 } 476 477 err = request_irq(vp_dev->pci_dev->irq, vp_interrupt, IRQF_SHARED, 478 dev_name(&vdev->dev), vp_dev); 479 if (err) 480 goto out_del_vqs; 481 482 vp_dev->intx_enabled = 1; 483 vp_dev->per_vq_vectors = false; 484 for (i = 0; i < nvqs; ++i) { 485 struct virtqueue_info *vqi = &vqs_info[i]; 486 487 if (!vqi->name) { 488 vqs[i] = NULL; 489 continue; 490 } 491 vqs[i] = vp_setup_vq(vdev, queue_idx, vqi->callback, 492 vqi->name, vqi->ctx, 493 VIRTIO_MSI_NO_VECTOR, &vp_dev->vqs[queue_idx]); 494 queue_idx++; 495 if (IS_ERR(vqs[i])) { 496 err = PTR_ERR(vqs[i]); 497 goto out_del_vqs; 498 } 499 } 500 501 if (!avq_num) 502 return 0; 503 sprintf(avq->name, "avq.%u", avq->vq_index); 504 vq = vp_setup_vq(vdev, avq->vq_index, vp_modern_avq_done, avq->name, 505 false, VIRTIO_MSI_NO_VECTOR, 506 &vp_dev->admin_vq.info); 507 if (IS_ERR(vq)) { 508 err = PTR_ERR(vq); 509 goto out_del_vqs; 510 } 511 512 return 0; 513 out_del_vqs: 514 vp_del_vqs(vdev); 515 return err; 516 } 517 518 /* the config->find_vqs() implementation */ 519 int vp_find_vqs(struct virtio_device *vdev, unsigned int nvqs, 520 struct virtqueue *vqs[], struct virtqueue_info vqs_info[], 521 struct irq_affinity *desc) 522 { 523 int err; 524 525 /* Try MSI-X with one vector per queue. */ 526 err = vp_find_vqs_msix(vdev, nvqs, vqs, vqs_info, 527 VP_VQ_VECTOR_POLICY_EACH, desc); 528 if (!err) 529 return 0; 530 /* Fallback: MSI-X with one shared vector for config and 531 * slow path queues, one vector per queue for the rest. 532 */ 533 err = vp_find_vqs_msix(vdev, nvqs, vqs, vqs_info, 534 VP_VQ_VECTOR_POLICY_SHARED_SLOW, desc); 535 if (!err) 536 return 0; 537 /* Fallback: MSI-X with one vector for config, one shared for queues. */ 538 err = vp_find_vqs_msix(vdev, nvqs, vqs, vqs_info, 539 VP_VQ_VECTOR_POLICY_SHARED, desc); 540 if (!err) 541 return 0; 542 /* Is there an interrupt? If not give up. */ 543 if (!(to_vp_device(vdev)->pci_dev->irq)) 544 return err; 545 /* Finally fall back to regular interrupts. */ 546 return vp_find_vqs_intx(vdev, nvqs, vqs, vqs_info); 547 } 548 549 const char *vp_bus_name(struct virtio_device *vdev) 550 { 551 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 552 553 return pci_name(vp_dev->pci_dev); 554 } 555 556 /* Setup the affinity for a virtqueue: 557 * - force the affinity for per vq vector 558 * - OR over all affinities for shared MSI 559 * - ignore the affinity request if we're using INTX 560 */ 561 int vp_set_vq_affinity(struct virtqueue *vq, const struct cpumask *cpu_mask) 562 { 563 struct virtio_device *vdev = vq->vdev; 564 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 565 struct virtio_pci_vq_info *info = vp_dev->vqs[vq->index]; 566 struct cpumask *mask; 567 unsigned int irq; 568 569 if (!vq->callback) 570 return -EINVAL; 571 572 if (vp_dev->msix_enabled) { 573 mask = vp_dev->msix_affinity_masks[info->msix_vector]; 574 irq = pci_irq_vector(vp_dev->pci_dev, info->msix_vector); 575 if (!cpu_mask) 576 irq_update_affinity_hint(irq, NULL); 577 else { 578 cpumask_copy(mask, cpu_mask); 579 irq_set_affinity_and_hint(irq, mask); 580 } 581 } 582 return 0; 583 } 584 585 const struct cpumask *vp_get_vq_affinity(struct virtio_device *vdev, int index) 586 { 587 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 588 589 if (!vp_dev->per_vq_vectors || 590 vp_dev->vqs[index]->msix_vector == VIRTIO_MSI_NO_VECTOR || 591 vp_is_slow_path_vector(vp_dev->vqs[index]->msix_vector)) 592 return NULL; 593 594 return pci_irq_get_affinity(vp_dev->pci_dev, 595 vp_dev->vqs[index]->msix_vector); 596 } 597 598 #ifdef CONFIG_PM_SLEEP 599 static int virtio_pci_freeze(struct device *dev) 600 { 601 struct pci_dev *pci_dev = to_pci_dev(dev); 602 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); 603 int ret; 604 605 ret = virtio_device_freeze(&vp_dev->vdev); 606 607 if (!ret) 608 pci_disable_device(pci_dev); 609 return ret; 610 } 611 612 static int virtio_pci_restore(struct device *dev) 613 { 614 struct pci_dev *pci_dev = to_pci_dev(dev); 615 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); 616 int ret; 617 618 ret = pci_enable_device(pci_dev); 619 if (ret) 620 return ret; 621 622 pci_set_master(pci_dev); 623 return virtio_device_restore(&vp_dev->vdev); 624 } 625 626 static bool vp_supports_pm_no_reset(struct device *dev) 627 { 628 struct pci_dev *pci_dev = to_pci_dev(dev); 629 u16 pmcsr; 630 631 if (!pci_dev->pm_cap) 632 return false; 633 634 pci_read_config_word(pci_dev, pci_dev->pm_cap + PCI_PM_CTRL, &pmcsr); 635 if (PCI_POSSIBLE_ERROR(pmcsr)) { 636 dev_err(dev, "Unable to query pmcsr"); 637 return false; 638 } 639 640 return pmcsr & PCI_PM_CTRL_NO_SOFT_RESET; 641 } 642 643 static int virtio_pci_suspend(struct device *dev) 644 { 645 return vp_supports_pm_no_reset(dev) ? 0 : virtio_pci_freeze(dev); 646 } 647 648 static int virtio_pci_resume(struct device *dev) 649 { 650 return vp_supports_pm_no_reset(dev) ? 0 : virtio_pci_restore(dev); 651 } 652 653 static const struct dev_pm_ops virtio_pci_pm_ops = { 654 .suspend = virtio_pci_suspend, 655 .resume = virtio_pci_resume, 656 .freeze = virtio_pci_freeze, 657 .thaw = virtio_pci_restore, 658 .poweroff = virtio_pci_freeze, 659 .restore = virtio_pci_restore, 660 }; 661 #endif 662 663 664 /* Qumranet donated their vendor ID for devices 0x1000 thru 0x10FF. */ 665 static const struct pci_device_id virtio_pci_id_table[] = { 666 { PCI_DEVICE(PCI_VENDOR_ID_REDHAT_QUMRANET, PCI_ANY_ID) }, 667 { 0 } 668 }; 669 670 MODULE_DEVICE_TABLE(pci, virtio_pci_id_table); 671 672 static void virtio_pci_release_dev(struct device *_d) 673 { 674 struct virtio_device *vdev = dev_to_virtio(_d); 675 struct virtio_pci_device *vp_dev = to_vp_device(vdev); 676 677 /* As struct device is a kobject, it's not safe to 678 * free the memory (including the reference counter itself) 679 * until it's release callback. */ 680 kfree(vp_dev); 681 } 682 683 static int virtio_pci_probe(struct pci_dev *pci_dev, 684 const struct pci_device_id *id) 685 { 686 struct virtio_pci_device *vp_dev, *reg_dev = NULL; 687 int rc; 688 689 /* allocate our structure and fill it out */ 690 vp_dev = kzalloc_obj(struct virtio_pci_device); 691 if (!vp_dev) 692 return -ENOMEM; 693 694 pci_set_drvdata(pci_dev, vp_dev); 695 vp_dev->vdev.dev.parent = &pci_dev->dev; 696 vp_dev->vdev.dev.release = virtio_pci_release_dev; 697 vp_dev->pci_dev = pci_dev; 698 INIT_LIST_HEAD(&vp_dev->virtqueues); 699 INIT_LIST_HEAD(&vp_dev->slow_virtqueues); 700 spin_lock_init(&vp_dev->lock); 701 702 /* enable the device */ 703 rc = pci_enable_device(pci_dev); 704 if (rc) 705 goto err_enable_device; 706 707 if (force_legacy) { 708 rc = virtio_pci_legacy_probe(vp_dev); 709 /* Also try modern mode if we can't map BAR0 (no IO space). */ 710 if (rc == -ENODEV || rc == -ENOMEM) 711 rc = virtio_pci_modern_probe(vp_dev); 712 if (rc) 713 goto err_probe; 714 } else { 715 rc = virtio_pci_modern_probe(vp_dev); 716 if (rc == -ENODEV) 717 rc = virtio_pci_legacy_probe(vp_dev); 718 if (rc) 719 goto err_probe; 720 } 721 722 pci_set_master(pci_dev); 723 724 rc = register_virtio_device(&vp_dev->vdev); 725 reg_dev = vp_dev; 726 if (rc) 727 goto err_register; 728 729 return 0; 730 731 err_register: 732 if (vp_dev->is_legacy) 733 virtio_pci_legacy_remove(vp_dev); 734 else 735 virtio_pci_modern_remove(vp_dev); 736 err_probe: 737 pci_disable_device(pci_dev); 738 err_enable_device: 739 if (reg_dev) 740 put_device(&vp_dev->vdev.dev); 741 else 742 kfree(vp_dev); 743 return rc; 744 } 745 746 static void virtio_pci_remove(struct pci_dev *pci_dev) 747 { 748 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); 749 struct device *dev = get_device(&vp_dev->vdev.dev); 750 751 /* 752 * Device is marked broken on surprise removal so that virtio upper 753 * layers can abort any ongoing operation. 754 */ 755 if (!pci_device_is_present(pci_dev)) 756 virtio_break_device(&vp_dev->vdev); 757 758 pci_disable_sriov(pci_dev); 759 760 unregister_virtio_device(&vp_dev->vdev); 761 762 if (vp_dev->is_legacy) 763 virtio_pci_legacy_remove(vp_dev); 764 else 765 virtio_pci_modern_remove(vp_dev); 766 767 pci_disable_device(pci_dev); 768 put_device(dev); 769 } 770 771 static int virtio_pci_sriov_configure(struct pci_dev *pci_dev, int num_vfs) 772 { 773 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); 774 struct virtio_device *vdev = &vp_dev->vdev; 775 int ret; 776 777 if (!(vdev->config->get_status(vdev) & VIRTIO_CONFIG_S_DRIVER_OK)) 778 return -EBUSY; 779 780 if (!__virtio_test_bit(vdev, VIRTIO_F_SR_IOV)) 781 return -EINVAL; 782 783 if (pci_vfs_assigned(pci_dev)) 784 return -EPERM; 785 786 if (num_vfs == 0) { 787 pci_disable_sriov(pci_dev); 788 return 0; 789 } 790 791 ret = pci_enable_sriov(pci_dev, num_vfs); 792 if (ret < 0) 793 return ret; 794 795 return num_vfs; 796 } 797 798 static void virtio_pci_reset_prepare(struct pci_dev *pci_dev) 799 { 800 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); 801 int ret = 0; 802 803 ret = virtio_device_reset_prepare(&vp_dev->vdev); 804 if (ret) { 805 if (ret != -EOPNOTSUPP) 806 dev_warn(&pci_dev->dev, "Reset prepare failure: %d", 807 ret); 808 return; 809 } 810 811 if (pci_is_enabled(pci_dev)) 812 pci_disable_device(pci_dev); 813 } 814 815 static void virtio_pci_reset_done(struct pci_dev *pci_dev) 816 { 817 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); 818 int ret; 819 820 if (pci_is_enabled(pci_dev)) 821 return; 822 823 ret = pci_enable_device(pci_dev); 824 if (!ret) { 825 pci_set_master(pci_dev); 826 ret = virtio_device_reset_done(&vp_dev->vdev); 827 } 828 829 if (ret && ret != -EOPNOTSUPP) 830 dev_warn(&pci_dev->dev, "Reset done failure: %d", ret); 831 } 832 833 static const struct pci_error_handlers virtio_pci_err_handler = { 834 .reset_prepare = virtio_pci_reset_prepare, 835 .reset_done = virtio_pci_reset_done, 836 }; 837 838 static struct pci_driver virtio_pci_driver = { 839 .name = "virtio-pci", 840 .id_table = virtio_pci_id_table, 841 .probe = virtio_pci_probe, 842 .remove = virtio_pci_remove, 843 #ifdef CONFIG_PM_SLEEP 844 .driver.pm = &virtio_pci_pm_ops, 845 #endif 846 .sriov_configure = virtio_pci_sriov_configure, 847 .err_handler = &virtio_pci_err_handler, 848 }; 849 850 struct virtio_device *virtio_pci_vf_get_pf_dev(struct pci_dev *pdev) 851 { 852 struct virtio_pci_device *pf_vp_dev; 853 854 pf_vp_dev = pci_iov_get_pf_drvdata(pdev, &virtio_pci_driver); 855 if (IS_ERR(pf_vp_dev)) 856 return NULL; 857 858 return &pf_vp_dev->vdev; 859 } 860 861 module_pci_driver(virtio_pci_driver); 862 863 MODULE_AUTHOR("Anthony Liguori <aliguori@us.ibm.com>"); 864 MODULE_DESCRIPTION("virtio-pci"); 865 MODULE_LICENSE("GPL"); 866 MODULE_VERSION("1"); 867