Lines Matching full:vp_dev

29 	struct virtio_pci_device *vp_dev = to_vp_device(vdev);  in vp_is_avq()  local
34 return index == vp_dev->admin_vq.vq_index; in vp_is_avq()
40 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_synchronize_vectors() local
43 if (vp_dev->intx_enabled) in vp_synchronize_vectors()
44 synchronize_irq(vp_dev->pci_dev->irq); in vp_synchronize_vectors()
46 for (i = 0; i < vp_dev->msix_vectors; ++i) in vp_synchronize_vectors()
47 synchronize_irq(pci_irq_vector(vp_dev->pci_dev, i)); in vp_synchronize_vectors()
61 struct virtio_pci_device *vp_dev) in vp_vring_slow_path_interrupt() argument
66 spin_lock_irqsave(&vp_dev->lock, flags); in vp_vring_slow_path_interrupt()
67 list_for_each_entry(info, &vp_dev->slow_virtqueues, node) in vp_vring_slow_path_interrupt()
69 spin_unlock_irqrestore(&vp_dev->lock, flags); in vp_vring_slow_path_interrupt()
75 struct virtio_pci_device *vp_dev = opaque; in vp_config_changed() local
77 virtio_config_changed(&vp_dev->vdev); in vp_config_changed()
78 vp_vring_slow_path_interrupt(irq, vp_dev); in vp_config_changed()
85 struct virtio_pci_device *vp_dev = opaque; in vp_vring_interrupt() local
90 spin_lock_irqsave(&vp_dev->lock, flags); in vp_vring_interrupt()
91 list_for_each_entry(info, &vp_dev->virtqueues, node) { in vp_vring_interrupt()
95 spin_unlock_irqrestore(&vp_dev->lock, flags); in vp_vring_interrupt()
108 struct virtio_pci_device *vp_dev = opaque; in vp_interrupt() local
113 isr = ioread8(vp_dev->isr); in vp_interrupt()
131 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_request_msix_vectors() local
132 const char *name = dev_name(&vp_dev->vdev.dev); in vp_request_msix_vectors()
137 vp_dev->msix_vectors = nvectors; in vp_request_msix_vectors()
139 vp_dev->msix_names = kmalloc_objs(*vp_dev->msix_names, nvectors); in vp_request_msix_vectors()
140 if (!vp_dev->msix_names) in vp_request_msix_vectors()
142 vp_dev->msix_affinity_masks in vp_request_msix_vectors()
143 = kzalloc_objs(*vp_dev->msix_affinity_masks, nvectors); in vp_request_msix_vectors()
144 if (!vp_dev->msix_affinity_masks) in vp_request_msix_vectors()
147 if (!alloc_cpumask_var(&vp_dev->msix_affinity_masks[i], in vp_request_msix_vectors()
159 err = pci_alloc_irq_vectors_affinity(vp_dev->pci_dev, nvectors, in vp_request_msix_vectors()
163 vp_dev->msix_enabled = 1; in vp_request_msix_vectors()
166 v = vp_dev->msix_used_vectors; in vp_request_msix_vectors()
167 snprintf(vp_dev->msix_names[v], sizeof *vp_dev->msix_names, in vp_request_msix_vectors()
169 err = request_irq(pci_irq_vector(vp_dev->pci_dev, v), in vp_request_msix_vectors()
170 vp_config_changed, 0, vp_dev->msix_names[v], in vp_request_msix_vectors()
171 vp_dev); in vp_request_msix_vectors()
174 ++vp_dev->msix_used_vectors; in vp_request_msix_vectors()
176 v = vp_dev->config_vector(vp_dev, v); in vp_request_msix_vectors()
185 v = vp_dev->msix_used_vectors; in vp_request_msix_vectors()
186 snprintf(vp_dev->msix_names[v], sizeof *vp_dev->msix_names, in vp_request_msix_vectors()
188 err = request_irq(pci_irq_vector(vp_dev->pci_dev, v), in vp_request_msix_vectors()
189 vp_vring_interrupt, 0, vp_dev->msix_names[v], in vp_request_msix_vectors()
190 vp_dev); in vp_request_msix_vectors()
193 ++vp_dev->msix_used_vectors; in vp_request_msix_vectors()
212 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_setup_vq() local
221 vq = vp_dev->setup_vq(vp_dev, info, index, callback, name, ctx, in vp_setup_vq()
228 spin_lock_irqsave(&vp_dev->lock, flags); in vp_setup_vq()
230 list_add(&info->node, &vp_dev->virtqueues); in vp_setup_vq()
232 list_add(&info->node, &vp_dev->slow_virtqueues); in vp_setup_vq()
233 spin_unlock_irqrestore(&vp_dev->lock, flags); in vp_setup_vq()
248 struct virtio_pci_device *vp_dev = to_vp_device(vq->vdev); in vp_del_vq() local
256 spin_lock_irqsave(&vp_dev->lock, flags); in vp_del_vq()
258 spin_unlock_irqrestore(&vp_dev->lock, flags); in vp_del_vq()
261 vp_dev->del_vq(info); in vp_del_vq()
268 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_del_vqs() local
274 info = vp_is_avq(vdev, vq->index) ? vp_dev->admin_vq.info : in vp_del_vqs()
275 vp_dev->vqs[vq->index]; in vp_del_vqs()
277 if (vp_dev->per_vq_vectors) { in vp_del_vqs()
281 int irq = pci_irq_vector(vp_dev->pci_dev, v); in vp_del_vqs()
289 vp_dev->per_vq_vectors = false; in vp_del_vqs()
291 if (vp_dev->intx_enabled) { in vp_del_vqs()
292 free_irq(vp_dev->pci_dev->irq, vp_dev); in vp_del_vqs()
293 vp_dev->intx_enabled = 0; in vp_del_vqs()
296 for (i = 0; i < vp_dev->msix_used_vectors; ++i) in vp_del_vqs()
297 free_irq(pci_irq_vector(vp_dev->pci_dev, i), vp_dev); in vp_del_vqs()
299 if (vp_dev->msix_affinity_masks) { in vp_del_vqs()
300 for (i = 0; i < vp_dev->msix_vectors; i++) in vp_del_vqs()
301 free_cpumask_var(vp_dev->msix_affinity_masks[i]); in vp_del_vqs()
304 if (vp_dev->msix_enabled) { in vp_del_vqs()
306 vp_dev->config_vector(vp_dev, VIRTIO_MSI_NO_VECTOR); in vp_del_vqs()
308 pci_free_irq_vectors(vp_dev->pci_dev); in vp_del_vqs()
309 vp_dev->msix_enabled = 0; in vp_del_vqs()
312 vp_dev->msix_vectors = 0; in vp_del_vqs()
313 vp_dev->msix_used_vectors = 0; in vp_del_vqs()
314 kfree(vp_dev->msix_names); in vp_del_vqs()
315 vp_dev->msix_names = NULL; in vp_del_vqs()
316 kfree(vp_dev->msix_affinity_masks); in vp_del_vqs()
317 vp_dev->msix_affinity_masks = NULL; in vp_del_vqs()
318 kfree(vp_dev->vqs); in vp_del_vqs()
319 vp_dev->vqs = NULL; in vp_del_vqs()
335 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_find_one_vq_msix() local
362 snprintf(vp_dev->msix_names[msix_vec], sizeof(*vp_dev->msix_names), in vp_find_one_vq_msix()
363 "%s-%s", dev_name(&vp_dev->vdev.dev), name); in vp_find_one_vq_msix()
364 err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec), in vp_find_one_vq_msix()
366 vp_dev->msix_names[msix_vec], vq); in vp_find_one_vq_msix()
381 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_find_vqs_msix() local
382 struct virtio_pci_admin_vq *avq = &vp_dev->admin_vq; in vp_find_vqs_msix()
389 vp_dev->vqs = kzalloc_objs(*vp_dev->vqs, nvqs); in vp_find_vqs_msix()
390 if (!vp_dev->vqs) in vp_find_vqs_msix()
393 if (vp_dev->avq_index) { in vp_find_vqs_msix()
394 err = vp_dev->avq_index(vdev, &avq->vq_index, &avq_num); in vp_find_vqs_msix()
420 vp_dev->per_vq_vectors = per_vq_vectors; in vp_find_vqs_msix()
421 allocated_vectors = vp_dev->msix_used_vectors; in vp_find_vqs_msix()
431 &vp_dev->vqs[queue_idx]); in vp_find_vqs_msix()
444 vector_policy, &vp_dev->admin_vq.info); in vp_find_vqs_msix()
461 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_find_vqs_intx() local
462 struct virtio_pci_admin_vq *avq = &vp_dev->admin_vq; in vp_find_vqs_intx()
467 vp_dev->vqs = kzalloc_objs(*vp_dev->vqs, nvqs); in vp_find_vqs_intx()
468 if (!vp_dev->vqs) in vp_find_vqs_intx()
471 if (vp_dev->avq_index) { in vp_find_vqs_intx()
472 err = vp_dev->avq_index(vdev, &avq->vq_index, &avq_num); in vp_find_vqs_intx()
477 err = request_irq(vp_dev->pci_dev->irq, vp_interrupt, IRQF_SHARED, in vp_find_vqs_intx()
478 dev_name(&vdev->dev), vp_dev); in vp_find_vqs_intx()
482 vp_dev->intx_enabled = 1; in vp_find_vqs_intx()
483 vp_dev->per_vq_vectors = false; in vp_find_vqs_intx()
493 VIRTIO_MSI_NO_VECTOR, &vp_dev->vqs[queue_idx]); in vp_find_vqs_intx()
506 &vp_dev->admin_vq.info); in vp_find_vqs_intx()
551 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_bus_name() local
553 return pci_name(vp_dev->pci_dev); in vp_bus_name()
564 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_set_vq_affinity() local
565 struct virtio_pci_vq_info *info = vp_dev->vqs[vq->index]; in vp_set_vq_affinity()
572 if (vp_dev->msix_enabled) { in vp_set_vq_affinity()
573 mask = vp_dev->msix_affinity_masks[info->msix_vector]; in vp_set_vq_affinity()
574 irq = pci_irq_vector(vp_dev->pci_dev, info->msix_vector); in vp_set_vq_affinity()
587 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_get_vq_affinity() local
589 if (!vp_dev->per_vq_vectors || in vp_get_vq_affinity()
590 vp_dev->vqs[index]->msix_vector == VIRTIO_MSI_NO_VECTOR || in vp_get_vq_affinity()
591 vp_is_slow_path_vector(vp_dev->vqs[index]->msix_vector)) in vp_get_vq_affinity()
594 return pci_irq_get_affinity(vp_dev->pci_dev, in vp_get_vq_affinity()
595 vp_dev->vqs[index]->msix_vector); in vp_get_vq_affinity()
602 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_freeze() local
605 ret = virtio_device_freeze(&vp_dev->vdev); in virtio_pci_freeze()
615 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_restore() local
623 return virtio_device_restore(&vp_dev->vdev); in virtio_pci_restore()
675 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in virtio_pci_release_dev() local
680 kfree(vp_dev); in virtio_pci_release_dev()
686 struct virtio_pci_device *vp_dev, *reg_dev = NULL; in virtio_pci_probe() local
690 vp_dev = kzalloc_obj(struct virtio_pci_device); in virtio_pci_probe()
691 if (!vp_dev) in virtio_pci_probe()
694 pci_set_drvdata(pci_dev, vp_dev); in virtio_pci_probe()
695 vp_dev->vdev.dev.parent = &pci_dev->dev; in virtio_pci_probe()
696 vp_dev->vdev.dev.release = virtio_pci_release_dev; in virtio_pci_probe()
697 vp_dev->pci_dev = pci_dev; in virtio_pci_probe()
698 INIT_LIST_HEAD(&vp_dev->virtqueues); in virtio_pci_probe()
699 INIT_LIST_HEAD(&vp_dev->slow_virtqueues); in virtio_pci_probe()
700 spin_lock_init(&vp_dev->lock); in virtio_pci_probe()
708 rc = virtio_pci_legacy_probe(vp_dev); in virtio_pci_probe()
711 rc = virtio_pci_modern_probe(vp_dev); in virtio_pci_probe()
715 rc = virtio_pci_modern_probe(vp_dev); in virtio_pci_probe()
717 rc = virtio_pci_legacy_probe(vp_dev); in virtio_pci_probe()
724 rc = register_virtio_device(&vp_dev->vdev); in virtio_pci_probe()
725 reg_dev = vp_dev; in virtio_pci_probe()
732 if (vp_dev->is_legacy) in virtio_pci_probe()
733 virtio_pci_legacy_remove(vp_dev); in virtio_pci_probe()
735 virtio_pci_modern_remove(vp_dev); in virtio_pci_probe()
740 put_device(&vp_dev->vdev.dev); in virtio_pci_probe()
742 kfree(vp_dev); in virtio_pci_probe()
748 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_remove() local
749 struct device *dev = get_device(&vp_dev->vdev.dev); in virtio_pci_remove()
756 virtio_break_device(&vp_dev->vdev); in virtio_pci_remove()
760 unregister_virtio_device(&vp_dev->vdev); in virtio_pci_remove()
762 if (vp_dev->is_legacy) in virtio_pci_remove()
763 virtio_pci_legacy_remove(vp_dev); in virtio_pci_remove()
765 virtio_pci_modern_remove(vp_dev); in virtio_pci_remove()
773 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_sriov_configure() local
774 struct virtio_device *vdev = &vp_dev->vdev; in virtio_pci_sriov_configure()
800 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_reset_prepare() local
803 ret = virtio_device_reset_prepare(&vp_dev->vdev); in virtio_pci_reset_prepare()
817 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_reset_done() local
826 ret = virtio_device_reset_done(&vp_dev->vdev); in virtio_pci_reset_done()