From: Dor Laor <dor.laor-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Rusty Russell <rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>
Cc: kvm-devel
<kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
virtualization
<virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>
Subject: Re: [PATCH 2/3] virtio ring implementation
Date: Tue, 25 Sep 2007 19:15:47 +0200 [thread overview]
Message-ID: <46F94243.2000602@qumranet.com> (raw)
In-Reply-To: <1190727156.27805.332.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
[-- Attachment #1.1: Type: text/plain, Size: 2468 bytes --]
Rusty Russell wrote:
>
> On Mon, 2007-09-24 at 15:44 +0200, Dor Laor wrote:
> > Rusty Russell wrote:
> > > +irqreturn_t vring_interrupt(int irq, void *_vq)
> > > +{
> > > + struct vring_virtqueue *vq = to_vvq(_vq);
> > > +
> > > + pr_debug("virtqueue interrupt for %p\n", vq);
> > > +
> > > + if (unlikely(vq->broken))
> > > + return IRQ_HANDLED;
> > > +
> > > + if (more_used(vq)) {
> > > + pr_debug("virtqueue callback for %p (%p)\n",
> > > + vq, vq->vq.callback);
> > > + if (!vq->vq.callback)
> > > + return IRQ_NONE;
> > > + if (!vq->vq.callback(&vq->vq))
> > > + vq->vring.avail->flags |=
> > > VRING_AVAIL_F_NO_INTERRUPT;
> > > + } else
> > > + pr_debug("virtqueue %p no more used\n", vq);
> > > +
> > > + return IRQ_HANDLED;
> > > +}
> > > +
> > >
> > Seems like there is a problem with shared irq line, the interrupt
> > handler always returns IRQ_HANDLED (except for the trivial case
> > were the callback is null).
>
> To reply for a second time, this time with thought. Sorry.
>
> Yes, this code is wrong. It should be:
>
> irqreturn_t vring_interrupt(int irq, void *_vq)
> {
> struct vring_virtqueue *vq = to_vvq(_vq);
>
> if (!more_used(vq)) {
> pr_debug("virtqueue interrupt with no work for %p\n", vq);
> return IRQ_NONE;
> }
>
> if (unlikely(vq->broken))
> return IRQ_HANDLED;
>
> pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback);
> if (vq->vq.callback && !vq->vq.callback(&vq->vq))
> vq->vring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT;
>
> return IRQ_HANDLED;
> }
>
> Cheers,
> Rusty.
>
At the moment it's not good enough, there is a potential race were the
guest optimistically turn off
the VRING_AVAIL_F_NO_INTERRUPT in the vring_restart and afterwards finds
there are more_used so
it consume them in the poll function.
If in the middle, packets arrive the host will see the flag is off and
send irq.
In that case the above irq handler will report IRQ_NONE.
It's also not trivial to cancel the optimistic approach in the restart
function since then there might be another race
that will result in missing irq reaching the guest.
I'll try to think of something better than a hypercall for switching irq
on/off.
Cheers mate,
Dor.
[-- Attachment #1.2: Type: text/html, Size: 4910 bytes --]
[-- Attachment #2: Type: text/plain, Size: 228 bytes --]
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
[-- Attachment #3: Type: text/plain, Size: 186 bytes --]
_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel
next prev parent reply other threads:[~2007-09-25 17:15 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-24 9:13 [PATCH 0/3] virtio implementation (draft VI) Rusty Russell
[not found] ` <1190625194.27805.199.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-24 9:14 ` [PATCH 1/3] virtio interface Rusty Russell
[not found] ` <1190625256.27805.201.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-24 9:15 ` [PATCH 2/3] virtio ring implementation Rusty Russell
[not found] ` <1190625307.27805.203.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-24 9:16 ` [PATCH 3/3] virtio module alias support Rusty Russell
[not found] ` <1190625394.27805.206.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-24 16:02 ` Greg KH
[not found] ` <20070924160221.GB5846-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2007-09-25 0:50 ` Rusty Russell
[not found] ` <1190681405.27805.243.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-25 1:57 ` Greg KH
[not found] ` <20070925015747.GA16011-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2007-09-25 2:11 ` Rusty Russell
[not found] ` <1190686275.27805.255.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-25 3:10 ` Greg KH
2007-09-24 13:44 ` [PATCH 2/3] virtio ring implementation Dor Laor
[not found] ` <46F7BF41.9060705-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-24 23:43 ` Rusty Russell
2007-09-25 13:32 ` Rusty Russell
[not found] ` <1190727156.27805.332.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-25 17:15 ` Dor Laor [this message]
[not found] ` <46F94243.2000602-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-25 23:37 ` Rusty Russell
[not found] ` <1190763475.2227.20.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-26 9:08 ` Dor Laor
2007-09-24 22:18 ` [PATCH 1/3] virtio interface Arnd Bergmann
[not found] ` <200709250018.12705.arnd-r2nGTMty4D4@public.gmane.org>
2007-09-24 23:37 ` Rusty Russell
[not found] ` <1190677058.27805.225.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-25 6:36 ` Arnd Bergmann
[not found] ` <200709250836.29451.arnd-r2nGTMty4D4@public.gmane.org>
2007-09-25 10:54 ` Rusty Russell
2007-09-25 8:18 ` Cornelia Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46F94243.2000602@qumranet.com \
--to=dor.laor-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=dor.laor-atKUWr5tajBWk0Htik3J/w@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org \
--cc=virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox