Displaying 4 results from an estimated 4 matches for "vp_free_vqs".
2009 Apr 27
0
[PATCH 8/8] virtio_pci: optional MSI-X support
...return vp_vring_interrupt(irq, opaque);
}
- spin_lock_irqsave(&vp_dev->lock, flags);
- list_for_each_entry(info, &vp_dev->virtqueues, node) {
- if (vring_interrupt(irq, info->vq) == IRQ_HANDLED)
- ret = IRQ_HANDLED;
+/* the config->free_vqs() implementation */
+static void vp_free_vqs(struct virtio_device *vdev) {
+ struct virtio_pci_device *vp_dev = to_vp_device(vdev);
+ int i;
+
+ for (i = 0; i < vp_dev->msix_preset_vectors; ++i)
+ free_irq(vp_dev->msix_entries[i].vector, vp_dev);
+
+ if (!vp_dev->msix_preset_vectors)
+ free_irq(vp_dev->pci_dev->irq, vp_dev...
2009 Apr 27
0
[PATCH 8/8] virtio_pci: optional MSI-X support
...return vp_vring_interrupt(irq, opaque);
}
- spin_lock_irqsave(&vp_dev->lock, flags);
- list_for_each_entry(info, &vp_dev->virtqueues, node) {
- if (vring_interrupt(irq, info->vq) == IRQ_HANDLED)
- ret = IRQ_HANDLED;
+/* the config->free_vqs() implementation */
+static void vp_free_vqs(struct virtio_device *vdev) {
+ struct virtio_pci_device *vp_dev = to_vp_device(vdev);
+ int i;
+
+ for (i = 0; i < vp_dev->msix_preset_vectors; ++i)
+ free_irq(vp_dev->msix_entries[i].vector, vp_dev);
+
+ if (!vp_dev->msix_preset_vectors)
+ free_irq(vp_dev->pci_dev->irq, vp_dev...
2009 May 07
1
[PATCH 3/3] virtio_pci: optional MSI-X support
...i) {
+ err = request_irq(vp_dev->msix_entries[i].vector,
+ i == VP_MSIX_CONFIG_VECTOR ?
+ vp_config_changed : vp_vring_interrupt,
+ 0, vp_dev->msix_names[i], vp_dev);
+ if (err) {
+ /* Set msix_preset_vectors so that only vectors we
+ * already allocated will be freed by vp_free_vqs. */
+ vp_dev->msix_preset_vectors = i;
+ goto error_irq;
+ }
+ }
+
+ /* Set the vector used for configuration */
+ iowrite16(VP_MSIX_CONFIG_VECTOR,
+ vp_dev->ioaddr + VIRTIO_MSI_CONFIG_VECTOR);
+ return 0;
+error_irq:
+ vp_free_vectors(vdev);
+ kfree(vp_dev->msix_names);
+error_nam...
2009 May 07
1
[PATCH 3/3] virtio_pci: optional MSI-X support
...i) {
+ err = request_irq(vp_dev->msix_entries[i].vector,
+ i == VP_MSIX_CONFIG_VECTOR ?
+ vp_config_changed : vp_vring_interrupt,
+ 0, vp_dev->msix_names[i], vp_dev);
+ if (err) {
+ /* Set msix_preset_vectors so that only vectors we
+ * already allocated will be freed by vp_free_vqs. */
+ vp_dev->msix_preset_vectors = i;
+ goto error_irq;
+ }
+ }
+
+ /* Set the vector used for configuration */
+ iowrite16(VP_MSIX_CONFIG_VECTOR,
+ vp_dev->ioaddr + VIRTIO_MSI_CONFIG_VECTOR);
+ return 0;
+error_irq:
+ vp_free_vectors(vdev);
+ kfree(vp_dev->msix_names);
+error_nam...