Lines Matching refs:vp_dev

30 	struct virtio_pci_device *vp_dev = to_vp_device(vdev);
33 if (vp_dev->intx_enabled)
34 synchronize_irq(vp_dev->pci_dev->irq);
36 for (i = 0; i < vp_dev->msix_vectors; ++i)
37 synchronize_irq(pci_irq_vector(vp_dev->pci_dev, i));
52 struct virtio_pci_device *vp_dev = opaque;
54 virtio_config_changed(&vp_dev->vdev);
61 struct virtio_pci_device *vp_dev = opaque;
66 spin_lock_irqsave(&vp_dev->lock, flags);
67 list_for_each_entry(info, &vp_dev->virtqueues, node) {
71 spin_unlock_irqrestore(&vp_dev->lock, flags);
84 struct virtio_pci_device *vp_dev = opaque;
89 isr = ioread8(vp_dev->isr);
105 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
106 const char *name = dev_name(&vp_dev->vdev.dev);
111 vp_dev->msix_vectors = nvectors;
113 vp_dev->msix_names = kmalloc_array(nvectors,
114 sizeof(*vp_dev->msix_names),
116 if (!vp_dev->msix_names)
118 vp_dev->msix_affinity_masks
119 = kcalloc(nvectors, sizeof(*vp_dev->msix_affinity_masks),
121 if (!vp_dev->msix_affinity_masks)
124 if (!alloc_cpumask_var(&vp_dev->msix_affinity_masks[i],
133 err = pci_alloc_irq_vectors_affinity(vp_dev->pci_dev, nvectors,
137 vp_dev->msix_enabled = 1;
140 v = vp_dev->msix_used_vectors;
141 snprintf(vp_dev->msix_names[v], sizeof *vp_dev->msix_names,
143 err = request_irq(pci_irq_vector(vp_dev->pci_dev, v),
144 vp_config_changed, 0, vp_dev->msix_names[v],
145 vp_dev);
148 ++vp_dev->msix_used_vectors;
150 v = vp_dev->config_vector(vp_dev, v);
159 v = vp_dev->msix_used_vectors;
160 snprintf(vp_dev->msix_names[v], sizeof *vp_dev->msix_names,
162 err = request_irq(pci_irq_vector(vp_dev->pci_dev, v),
163 vp_vring_interrupt, 0, vp_dev->msix_names[v],
164 vp_dev);
167 ++vp_dev->msix_used_vectors;
180 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
189 vq = vp_dev->setup_vq(vp_dev, info, index, callback, name, ctx,
196 spin_lock_irqsave(&vp_dev->lock, flags);
197 list_add(&info->node, &vp_dev->virtqueues);
198 spin_unlock_irqrestore(&vp_dev->lock, flags);
203 vp_dev->vqs[index] = info;
213 struct virtio_pci_device *vp_dev = to_vp_device(vq->vdev);
214 struct virtio_pci_vq_info *info = vp_dev->vqs[vq->index];
217 spin_lock_irqsave(&vp_dev->lock, flags);
219 spin_unlock_irqrestore(&vp_dev->lock, flags);
221 vp_dev->del_vq(info);
228 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
233 if (vp_dev->per_vq_vectors) {
234 int v = vp_dev->vqs[vq->index]->msix_vector;
237 int irq = pci_irq_vector(vp_dev->pci_dev, v);
245 vp_dev->per_vq_vectors = false;
247 if (vp_dev->intx_enabled) {
248 free_irq(vp_dev->pci_dev->irq, vp_dev);
249 vp_dev->intx_enabled = 0;
252 for (i = 0; i < vp_dev->msix_used_vectors; ++i)
253 free_irq(pci_irq_vector(vp_dev->pci_dev, i), vp_dev);
255 if (vp_dev->msix_affinity_masks) {
256 for (i = 0; i < vp_dev->msix_vectors; i++)
257 free_cpumask_var(vp_dev->msix_affinity_masks[i]);
260 if (vp_dev->msix_enabled) {
262 vp_dev->config_vector(vp_dev, VIRTIO_MSI_NO_VECTOR);
264 pci_free_irq_vectors(vp_dev->pci_dev);
265 vp_dev->msix_enabled = 0;
268 vp_dev->msix_vectors = 0;
269 vp_dev->msix_used_vectors = 0;
270 kfree(vp_dev->msix_names);
271 vp_dev->msix_names = NULL;
272 kfree(vp_dev->msix_affinity_masks);
273 vp_dev->msix_affinity_masks = NULL;
274 kfree(vp_dev->vqs);
275 vp_dev->vqs = NULL;
284 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
288 vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL);
289 if (!vp_dev->vqs)
308 vp_dev->per_vq_vectors = per_vq_vectors;
309 allocated_vectors = vp_dev->msix_used_vectors;
318 else if (vp_dev->per_vq_vectors)
330 if (!vp_dev->per_vq_vectors || msix_vec == VIRTIO_MSI_NO_VECTOR)
334 snprintf(vp_dev->msix_names[msix_vec],
335 sizeof *vp_dev->msix_names,
337 dev_name(&vp_dev->vdev.dev), names[i]);
338 err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
340 vp_dev->msix_names[msix_vec],
356 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
359 vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL);
360 if (!vp_dev->vqs)
363 err = request_irq(vp_dev->pci_dev->irq, vp_interrupt, IRQF_SHARED,
364 dev_name(&vdev->dev), vp_dev);
368 vp_dev->intx_enabled = 1;
369 vp_dev->per_vq_vectors = false;
412 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
414 return pci_name(vp_dev->pci_dev);
425 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
426 struct virtio_pci_vq_info *info = vp_dev->vqs[vq->index];
433 if (vp_dev->msix_enabled) {
434 mask = vp_dev->msix_affinity_masks[info->msix_vector];
435 irq = pci_irq_vector(vp_dev->pci_dev, info->msix_vector);
448 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
450 if (!vp_dev->per_vq_vectors ||
451 vp_dev->vqs[index]->msix_vector == VIRTIO_MSI_NO_VECTOR)
454 return pci_irq_get_affinity(vp_dev->pci_dev,
455 vp_dev->vqs[index]->msix_vector);
462 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
465 ret = virtio_device_freeze(&vp_dev->vdev);
475 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
483 return virtio_device_restore(&vp_dev->vdev);
503 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
508 kfree(vp_dev);
514 struct virtio_pci_device *vp_dev, *reg_dev = NULL;
518 vp_dev = kzalloc(sizeof(struct virtio_pci_device), GFP_KERNEL);
519 if (!vp_dev)
522 pci_set_drvdata(pci_dev, vp_dev);
523 vp_dev->vdev.dev.parent = &pci_dev->dev;
524 vp_dev->vdev.dev.release = virtio_pci_release_dev;
525 vp_dev->pci_dev = pci_dev;
526 INIT_LIST_HEAD(&vp_dev->virtqueues);
527 spin_lock_init(&vp_dev->lock);
535 rc = virtio_pci_legacy_probe(vp_dev);
538 rc = virtio_pci_modern_probe(vp_dev);
542 rc = virtio_pci_modern_probe(vp_dev);
544 rc = virtio_pci_legacy_probe(vp_dev);
551 rc = register_virtio_device(&vp_dev->vdev);
552 reg_dev = vp_dev;
559 if (vp_dev->ioaddr)
560 virtio_pci_legacy_remove(vp_dev);
562 virtio_pci_modern_remove(vp_dev);
567 put_device(&vp_dev->vdev.dev);
569 kfree(vp_dev);
575 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
576 struct device *dev = get_device(&vp_dev->vdev.dev);
583 virtio_break_device(&vp_dev->vdev);
587 unregister_virtio_device(&vp_dev->vdev);
589 if (vp_dev->ioaddr)
590 virtio_pci_legacy_remove(vp_dev);
592 virtio_pci_modern_remove(vp_dev);
600 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
601 struct virtio_device *vdev = &vp_dev->vdev;