Displaying 20 results from an estimated 301 matches for "vring_interrupt".
2017 Feb 03
2
[PATCH 2/9] virtio_pci: use shared interrupts for virtqueues
On 2017?01?27? 16:16, Christoph Hellwig wrote:
> + snprintf(vp_dev->msix_names[i + 1],
> + sizeof(*vp_dev->msix_names), "%s-%s",
> dev_name(&vp_dev->vdev.dev), names[i]);
> err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
> - vring_interrupt, 0,
> - vp_dev->msix_names[msix_vec],
> - vqs[i]);
> + vring_interrupt, IRQF_SHARED,
> + vp_dev->msix_names[i + 1], vqs[i]);
Do we need to check per_vq_vectors before dereferencing msix_names[i + 1] ?
Thanks
2017 Feb 03
2
[PATCH 2/9] virtio_pci: use shared interrupts for virtqueues
On 2017?01?27? 16:16, Christoph Hellwig wrote:
> + snprintf(vp_dev->msix_names[i + 1],
> + sizeof(*vp_dev->msix_names), "%s-%s",
> dev_name(&vp_dev->vdev.dev), names[i]);
> err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
> - vring_interrupt, 0,
> - vp_dev->msix_names[msix_vec],
> - vqs[i]);
> + vring_interrupt, IRQF_SHARED,
> + vp_dev->msix_names[i + 1], vqs[i]);
Do we need to check per_vq_vectors before dereferencing msix_names[i + 1] ?
Thanks
2017 Feb 03
1
[PATCH 1/9] virtio_pci: remove struct virtio_pci_vq_info
.../virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
> index 186cbab..a3376731 100644
> --- a/drivers/virtio/virtio_pci_common.c
> +++ b/drivers/virtio/virtio_pci_common.c
> @@ -62,16 +62,13 @@ static irqreturn_t vp_config_changed(int irq, void *opaque)
> static irqreturn_t vp_vring_interrupt(int irq, void *opaque)
> {
> struct virtio_pci_device *vp_dev = opaque;
> - struct virtio_pci_vq_info *info;
> irqreturn_t ret = IRQ_NONE;
> - unsigned long flags;
> + struct virtqueue *vq;
>
> - spin_lock_irqsave(&vp_dev->lock, flags);
> - list_for_each...
2017 Feb 03
1
[PATCH 1/9] virtio_pci: remove struct virtio_pci_vq_info
.../virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
> index 186cbab..a3376731 100644
> --- a/drivers/virtio/virtio_pci_common.c
> +++ b/drivers/virtio/virtio_pci_common.c
> @@ -62,16 +62,13 @@ static irqreturn_t vp_config_changed(int irq, void *opaque)
> static irqreturn_t vp_vring_interrupt(int irq, void *opaque)
> {
> struct virtio_pci_device *vp_dev = opaque;
> - struct virtio_pci_vq_info *info;
> irqreturn_t ret = IRQ_NONE;
> - unsigned long flags;
> + struct virtqueue *vq;
>
> - spin_lock_irqsave(&vp_dev->lock, flags);
> - list_for_each...
2023 Mar 24
1
[External] Re: [PATCH] virtio_ring: Suppress tx interrupt when napi_tx disable
...t; > Normally, if we receive an interrupt, we should disable the interrupt
> > > > > > in the interrupt callback handler.
> > > > >
> > > > > So the problem is:
> > > > >
> > > > > 1) event_triggered was set to true in vring_interrupt()
> > > > >
> > > > > 2) after this nothing will happen for virtqueue_disable_cb() so
> > > > > VRING_AVAIL_F_NO_INTERRUPT is not set in avail_flags_shadow
> > > > > 3) virtqueue_get_buf_ctx_split() will still think the cb is enabled
>...
2017 Feb 07
2
[PATCH 1/9] virtio_pci: remove struct virtio_pci_vq_info
...ci_common.c b/drivers/virtio/virtio_pci_common.c
> index 186cbab327b8..a33767318cbf 100644
> --- a/drivers/virtio/virtio_pci_common.c
> +++ b/drivers/virtio/virtio_pci_common.c
> @@ -62,16 +62,13 @@ static irqreturn_t vp_config_changed(int irq, void *opaque)
> static irqreturn_t vp_vring_interrupt(int irq, void *opaque)
> {
> struct virtio_pci_device *vp_dev = opaque;
> - struct virtio_pci_vq_info *info;
> irqreturn_t ret = IRQ_NONE;
> - unsigned long flags;
> + struct virtqueue *vq;
>
> - spin_lock_irqsave(&vp_dev->lock, flags);
> - list_for_each...
2017 Feb 07
2
[PATCH 1/9] virtio_pci: remove struct virtio_pci_vq_info
...ci_common.c b/drivers/virtio/virtio_pci_common.c
> index 186cbab327b8..a33767318cbf 100644
> --- a/drivers/virtio/virtio_pci_common.c
> +++ b/drivers/virtio/virtio_pci_common.c
> @@ -62,16 +62,13 @@ static irqreturn_t vp_config_changed(int irq, void *opaque)
> static irqreturn_t vp_vring_interrupt(int irq, void *opaque)
> {
> struct virtio_pci_device *vp_dev = opaque;
> - struct virtio_pci_vq_info *info;
> irqreturn_t ret = IRQ_NONE;
> - unsigned long flags;
> + struct virtqueue *vq;
>
> - spin_lock_irqsave(&vp_dev->lock, flags);
> - list_for_each...
2009 May 07
1
[PATCH 2/3] virtio_pci: split up vp_interrupt
...virtio_driver *drv;
+ drv = container_of(vp_dev->vdev.dev.driver,
+ struct virtio_driver, driver);
+
+ if (drv && drv->config_changed)
+ drv->config_changed(&vp_dev->vdev);
+ return IRQ_HANDLED;
+}
+
+/* Notify all virtqueues on an interrupt. */
+static irqreturn_t vp_vring_interrupt(int irq, void *opaque)
+{
+ struct virtio_pci_device *vp_dev = opaque;
+ struct virtio_pci_vq_info *info;
+ irqreturn_t ret = IRQ_NONE;
+ unsigned long flags;
+
+ spin_lock_irqsave(&vp_dev->lock, flags);
+ list_for_each_entry(info, &vp_dev->virtqueues, node) {
+ if (vring_interrupt(i...
2009 May 07
1
[PATCH 2/3] virtio_pci: split up vp_interrupt
...virtio_driver *drv;
+ drv = container_of(vp_dev->vdev.dev.driver,
+ struct virtio_driver, driver);
+
+ if (drv && drv->config_changed)
+ drv->config_changed(&vp_dev->vdev);
+ return IRQ_HANDLED;
+}
+
+/* Notify all virtqueues on an interrupt. */
+static irqreturn_t vp_vring_interrupt(int irq, void *opaque)
+{
+ struct virtio_pci_device *vp_dev = opaque;
+ struct virtio_pci_vq_info *info;
+ irqreturn_t ret = IRQ_NONE;
+ unsigned long flags;
+
+ spin_lock_irqsave(&vp_dev->lock, flags);
+ list_for_each_entry(info, &vp_dev->virtqueues, node) {
+ if (vring_interrupt(i...
2018 Feb 23
2
v4.16-rc2: virtio-block + ext4 lockdep splats / sleeping from invalid context
...f8
[ 162.454625] blk_update_request+0x80/0x2e8
[ 162.455450] blk_mq_end_request+0x20/0x70
[ 162.456240] virtblk_request_done+0x24/0x30
[ 162.457080] __blk_mq_complete_request+0x100/0x1b0
[ 162.458047] blk_mq_complete_request+0x60/0x98
[ 162.458918] virtblk_done+0x70/0xf8
[ 162.459608] vring_interrupt+0x38/0x50
[ 162.460367] __handle_irq_event_percpu+0x5c/0x148
[ 162.472443] handle_irq_event_percpu+0x34/0x88
[ 162.477991] handle_irq_event+0x48/0x78
[ 162.480661] handle_fasteoi_irq+0xc0/0x198
[ 162.485417] generic_handle_irq+0x24/0x38
[ 162.490334] __handle_domain_irq+0x84/0xf0
[ 162...
2018 Feb 23
2
v4.16-rc2: virtio-block + ext4 lockdep splats / sleeping from invalid context
...f8
[ 162.454625] blk_update_request+0x80/0x2e8
[ 162.455450] blk_mq_end_request+0x20/0x70
[ 162.456240] virtblk_request_done+0x24/0x30
[ 162.457080] __blk_mq_complete_request+0x100/0x1b0
[ 162.458047] blk_mq_complete_request+0x60/0x98
[ 162.458918] virtblk_done+0x70/0xf8
[ 162.459608] vring_interrupt+0x38/0x50
[ 162.460367] __handle_irq_event_percpu+0x5c/0x148
[ 162.472443] handle_irq_event_percpu+0x34/0x88
[ 162.477991] handle_irq_event+0x48/0x78
[ 162.480661] handle_fasteoi_irq+0xc0/0x198
[ 162.485417] generic_handle_irq+0x24/0x38
[ 162.490334] __handle_domain_irq+0x84/0xf0
[ 162...
2014 Nov 06
2
[RFC PATCH] virtio-mmio: support for multiple irqs
...amp;& vdrv->config_changed)
>> + vdrv->config_changed(&vm_dev->vdev);
>> + return IRQ_HANDLED;
>> +}
>> +
>> /* Notify all virtqueues on an interrupt. */
>> -static irqreturn_t vm_interrupt(int irq, void *opaque)
>> +static irqreturn_t vm_vring_interrupt(int irq, void *opaque)
>> {
>> struct virtio_mmio_device *vm_dev = opaque;
>> struct virtio_mmio_vq_info *info;
>> - struct virtio_driver *vdrv = container_of(vm_dev->vdev.dev.driver,
>> - struct virtio_driver, driver);
>> - unsigned long status;
>&g...
2014 Nov 06
2
[RFC PATCH] virtio-mmio: support for multiple irqs
...amp;& vdrv->config_changed)
>> + vdrv->config_changed(&vm_dev->vdev);
>> + return IRQ_HANDLED;
>> +}
>> +
>> /* Notify all virtqueues on an interrupt. */
>> -static irqreturn_t vm_interrupt(int irq, void *opaque)
>> +static irqreturn_t vm_vring_interrupt(int irq, void *opaque)
>> {
>> struct virtio_mmio_device *vm_dev = opaque;
>> struct virtio_mmio_vq_info *info;
>> - struct virtio_driver *vdrv = container_of(vm_dev->vdev.dev.driver,
>> - struct virtio_driver, driver);
>> - unsigned long status;
>&g...
2013 Apr 09
1
[PATCHv2 virtio-next] remoteproc: Add support for host virtio rings (vringh)
...10 +72,18 @@ irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int notifyid)
dev_dbg(&rproc->dev, "vq index %d is interrupted\n", notifyid);
rvring = idr_find(&rproc->notifyids, notifyid);
- if (!rvring || !rvring->vq)
+ if (!rvring)
return IRQ_NONE;
- return vring_interrupt(0, rvring->vq);
+ if (rvring->rvringh && rvring->rvringh->vringh_cb) {
+ rvring->rvringh->vringh_cb(&rvring->rvdev->vdev,
+ &rvring->rvringh->vrh);
+ return IRQ_HANDLED;
+ } else if (rvring->vq) {
+ return vring_interrupt(0, rvring->vq);
+...
2013 Apr 09
1
[PATCHv2 virtio-next] remoteproc: Add support for host virtio rings (vringh)
...10 +72,18 @@ irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int notifyid)
dev_dbg(&rproc->dev, "vq index %d is interrupted\n", notifyid);
rvring = idr_find(&rproc->notifyids, notifyid);
- if (!rvring || !rvring->vq)
+ if (!rvring)
return IRQ_NONE;
- return vring_interrupt(0, rvring->vq);
+ if (rvring->rvringh && rvring->rvringh->vringh_cb) {
+ rvring->rvringh->vringh_cb(&rvring->rvdev->vdev,
+ &rvring->rvringh->vrh);
+ return IRQ_HANDLED;
+ } else if (rvring->vq) {
+ return vring_interrupt(0, rvring->vq);
+...
2017 Feb 03
0
[PATCH 2/9] virtio_pci: use shared interrupts for virtqueues
...16, Christoph Hellwig wrote:
>> + snprintf(vp_dev->msix_names[i + 1],
>> + sizeof(*vp_dev->msix_names), "%s-%s",
>> dev_name(&vp_dev->vdev.dev), names[i]);
>> err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
>> - vring_interrupt, 0,
>> - vp_dev->msix_names[msix_vec],
>> - vqs[i]);
>> + vring_interrupt, IRQF_SHARED,
>> + vp_dev->msix_names[i + 1], vqs[i]);
>
> Do we need to check per_vq_vectors before dereferencing msix_names[i + 1] ?
No, we need to allocate the array...
2017 Feb 03
2
[PATCH 2/9] virtio_pci: use shared interrupts for virtqueues
...wrote:
>>> + snprintf(vp_dev->msix_names[i + 1],
>>> + sizeof(*vp_dev->msix_names), "%s-%s",
>>> dev_name(&vp_dev->vdev.dev), names[i]);
>>> err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
>>> - vring_interrupt, 0,
>>> - vp_dev->msix_names[msix_vec],
>>> - vqs[i]);
>>> + vring_interrupt, IRQF_SHARED,
>>> + vp_dev->msix_names[i + 1], vqs[i]);
>> Do we need to check per_vq_vectors before dereferencing msix_names[i + 1] ?
> No, we need to...
2017 Feb 03
2
[PATCH 2/9] virtio_pci: use shared interrupts for virtqueues
...wrote:
>>> + snprintf(vp_dev->msix_names[i + 1],
>>> + sizeof(*vp_dev->msix_names), "%s-%s",
>>> dev_name(&vp_dev->vdev.dev), names[i]);
>>> err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
>>> - vring_interrupt, 0,
>>> - vp_dev->msix_names[msix_vec],
>>> - vqs[i]);
>>> + vring_interrupt, IRQF_SHARED,
>>> + vp_dev->msix_names[i + 1], vqs[i]);
>> Do we need to check per_vq_vectors before dereferencing msix_names[i + 1] ?
> No, we need to...
2007 Dec 21
0
[kvm-devel] [Virtio-for-kvm] [PATCH 3/13] [Mostly resend] virtio additions
...drivers/virtio/virtio_ring.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 1dc04b6..f9dc079 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -260,6 +260,8 @@ irqreturn_t vring_interrupt(int irq, void *_vq)
return IRQ_HANDLED;
}
+EXPORT_SYMBOL_GPL(vring_interrupt);
+
static struct virtqueue_ops vring_vq_ops = {
.add_buf = vring_add_buf,
.get_buf = vring_get_buf,
@@ -312,8 +314,12 @@ struct virtqueue *vring_new_virtqueue(unsigned int num,
return &vq->v...
2007 Nov 07
1
[PATCH 0/3] virtio PCI driver
This patch series implements a PCI driver for virtio. This allows virtio
devices (like block and network) to be used in QEMU/KVM. I'll post a very
early KVM userspace backend in kvm-devel for those that are interested.
This series depends on the two virtio fixes I've posted and Rusty's config_ops
refactoring. I've tested with these patches on Rusty's experimental virtio