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];
222 spin_lock_irqsave(&vp_dev->lock, flags);
224 spin_unlock_irqrestore(&vp_dev->lock, flags);
227 vp_dev->del_vq(info);
234 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
239 if (vp_dev->per_vq_vectors) {
240 int v = vp_dev->vqs[vq->index]->msix_vector;
243 int irq = pci_irq_vector(vp_dev->pci_dev, v);
251 vp_dev->per_vq_vectors = false;
253 if (vp_dev->intx_enabled) {
254 free_irq(vp_dev->pci_dev->irq, vp_dev);
255 vp_dev->intx_enabled = 0;
258 for (i = 0; i < vp_dev->msix_used_vectors; ++i)
259 free_irq(pci_irq_vector(vp_dev->pci_dev, i), vp_dev);
261 if (vp_dev->msix_affinity_masks) {
262 for (i = 0; i < vp_dev->msix_vectors; i++)
263 free_cpumask_var(vp_dev->msix_affinity_masks[i]);
266 if (vp_dev->msix_enabled) {
268 vp_dev->config_vector(vp_dev, VIRTIO_MSI_NO_VECTOR);
270 pci_free_irq_vectors(vp_dev->pci_dev);
271 vp_dev->msix_enabled = 0;
274 vp_dev->msix_vectors = 0;
275 vp_dev->msix_used_vectors = 0;
276 kfree(vp_dev->msix_names);
277 vp_dev->msix_names = NULL;
278 kfree(vp_dev->msix_affinity_masks);
279 vp_dev->msix_affinity_masks = NULL;
280 kfree(vp_dev->vqs);
281 vp_dev->vqs = NULL;
290 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
294 vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL);
295 if (!vp_dev->vqs)
314 vp_dev->per_vq_vectors = per_vq_vectors;
315 allocated_vectors = vp_dev->msix_used_vectors;
324 else if (vp_dev->per_vq_vectors)
336 if (!vp_dev->per_vq_vectors || msix_vec == VIRTIO_MSI_NO_VECTOR)
340 snprintf(vp_dev->msix_names[msix_vec],
341 sizeof *vp_dev->msix_names,
343 dev_name(&vp_dev->vdev.dev), names[i]);
344 err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
346 vp_dev->msix_names[msix_vec],
362 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
365 vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL);
366 if (!vp_dev->vqs)
369 err = request_irq(vp_dev->pci_dev->irq, vp_interrupt, IRQF_SHARED,
370 dev_name(&vdev->dev), vp_dev);
374 vp_dev->intx_enabled = 1;
375 vp_dev->per_vq_vectors = false;
421 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
423 return pci_name(vp_dev->pci_dev);
434 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
435 struct virtio_pci_vq_info *info = vp_dev->vqs[vq->index];
442 if (vp_dev->msix_enabled) {
443 mask = vp_dev->msix_affinity_masks[info->msix_vector];
444 irq = pci_irq_vector(vp_dev->pci_dev, info->msix_vector);
457 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
459 if (!vp_dev->per_vq_vectors ||
460 vp_dev->vqs[index]->msix_vector == VIRTIO_MSI_NO_VECTOR)
463 return pci_irq_get_affinity(vp_dev->pci_dev,
464 vp_dev->vqs[index]->msix_vector);
471 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
474 ret = virtio_device_freeze(&vp_dev->vdev);
484 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
492 return virtio_device_restore(&vp_dev->vdev);
512 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
517 kfree(vp_dev);
523 struct virtio_pci_device *vp_dev, *reg_dev = NULL;
527 vp_dev = kzalloc(sizeof(struct virtio_pci_device), GFP_KERNEL);
528 if (!vp_dev)
531 pci_set_drvdata(pci_dev, vp_dev);
532 vp_dev->vdev.dev.parent = &pci_dev->dev;
533 vp_dev->vdev.dev.release = virtio_pci_release_dev;
534 vp_dev->pci_dev = pci_dev;
535 INIT_LIST_HEAD(&vp_dev->virtqueues);
536 spin_lock_init(&vp_dev->lock);
544 rc = virtio_pci_legacy_probe(vp_dev);
547 rc = virtio_pci_modern_probe(vp_dev);
551 rc = virtio_pci_modern_probe(vp_dev);
553 rc = virtio_pci_legacy_probe(vp_dev);
560 rc = register_virtio_device(&vp_dev->vdev);
561 reg_dev = vp_dev;
568 if (vp_dev->is_legacy)
569 virtio_pci_legacy_remove(vp_dev);
571 virtio_pci_modern_remove(vp_dev);
576 put_device(&vp_dev->vdev.dev);
578 kfree(vp_dev);
584 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
585 struct device *dev = get_device(&vp_dev->vdev.dev);
592 virtio_break_device(&vp_dev->vdev);
596 unregister_virtio_device(&vp_dev->vdev);
598 if (vp_dev->is_legacy)
599 virtio_pci_legacy_remove(vp_dev);
601 virtio_pci_modern_remove(vp_dev);
609 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
610 struct virtio_device *vdev = &vp_dev->vdev;