From: "Michael S. Tsirkin" <mst@redhat.com>
To: Davide Libenzi <davidel@xmailserver.org>
Cc: Avi Kivity <avi@redhat.com>, kvm@vger.kernel.org
Subject: Re: [PATCH 0/2] eventfd: new EFD_STATE flag
Date: Sun, 10 Jan 2010 18:22:02 +0200 [thread overview]
Message-ID: <20100110162202.GA29263@redhat.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1001100725040.20000@makko.or.mcafeemobile.com>
On Sun, Jan 10, 2010 at 07:26:12AM -0800, Davide Libenzi wrote:
> On Sun, 10 Jan 2010, Michael S. Tsirkin wrote:
>
> > > What is you do (under proper irqfd locking) something like:
> > >
> > > eventfd_ctx_read(ctx, 1, &cnt);
> > > if (irqfd->cnt != cnt) {
> > > irqfd->cnt = cnt;
> > > schedule_work(&irqfd->inject);
> > > }
> > >
> > >
> > >
> > >
> > > > And deactivation deep down does this (from irqfd_cleanup_wq workqueue,
> > > > so this is not under the spinlock):
> > > >
> > > > /*
> > > > * Synchronize with the wait-queue and unhook ourselves to
> > > > * prevent
> > > > * further events.
> > > > */
> > > > B.
> > > > remove_wait_queue(irqfd->wqh, &irqfd->wait);
> > > >
> > > > ....
> > > >
> > > > /*
> > > > * It is now safe to release the object's resources
> > > > */
> > > > eventfd_ctx_put(irqfd->eventfd);
> > > > kfree(irqfd);
> > >
> > > And:
> > >
> > > eventfd_ctx_read(ctx, 1, &irqfd->cnt);
> >
> >
> > ->
> >
> > > remove_wait_queue(irqfd->wqh, &irqfd->wait);
> > >
> > >
> > >
> > >
> > > - Davide
> >
> > Yes, this is exactly what I wanted to do. So, here's the issue: if an
> > event is signalled at point ->: after eventfd_ctx_read but before
> > remove_wait_queue, then we inject interrupt but counter will be left
> > non-zero and then when we unmask, we inject antoher, spurious interrupt.
> >
> > This is why I wanted to have eventfd_ctx_read not take wait queue head
> > lock: then I could do:
> >
> > spin_lock_irqsave(&ctx->wqh.lock, flags);
> > eventfd_ctx_read(ctx, 1, &irqfd->cnt);
> > __remove_wait_queue(irqfd->wqh, &irqfd->wait);
> > spin_lock_irqrestore(&ctx->wqh.lock, flags);
>
> This is why I said "under proper irqfd locking".
>
>
> - Davide
Not sure what you mean by irqfd locking. IMO we must take waitqueue
lock, otherwise we can not prevent wait queue callback from being
invoked, right? Note that if we take our own lock under wait queue
callback, we won't be able to use this lock around remove_wait_queue.
Also note how fs/evetfd.c uses __remove_wait_queue after taking wait
queue lock - we'd like to do the same with our wait queue.
Could you clarify pls?
--
MST
next prev parent reply other threads:[~2010-01-10 16:24 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-20 15:56 [PATCH 0/2] eventfd: new EFD_STATE flag Michael S. Tsirkin
2009-08-20 16:20 ` Davide Libenzi
2009-08-20 17:38 ` Avi Kivity
2009-08-20 17:44 ` Davide Libenzi
2009-08-20 17:56 ` Paolo Bonzini
2009-08-21 17:21 ` Davide Libenzi
2009-08-20 17:55 ` Michael S. Tsirkin
2009-08-20 18:06 ` Avi Kivity
2009-08-20 18:28 ` Michael S. Tsirkin
2009-08-23 13:01 ` Avi Kivity
2009-08-23 13:36 ` Michael S. Tsirkin
2009-08-23 13:40 ` Avi Kivity
2009-08-23 14:30 ` Michael S. Tsirkin
2009-08-23 16:51 ` Paolo Bonzini
2009-08-24 18:25 ` Davide Libenzi
2009-08-24 18:31 ` Avi Kivity
2009-08-24 22:08 ` Davide Libenzi
2009-08-24 22:10 ` Paolo Bonzini
2009-08-24 22:32 ` Davide Libenzi
2009-08-25 6:59 ` Paolo Bonzini
2009-08-25 4:26 ` Avi Kivity
2009-08-24 21:49 ` Michael S. Tsirkin
2009-08-24 22:15 ` Davide Libenzi
2009-08-25 7:22 ` Michael S. Tsirkin
2009-08-25 21:57 ` Davide Libenzi
2009-08-26 10:29 ` Michael S. Tsirkin
2009-08-26 10:41 ` Avi Kivity
2009-08-26 17:45 ` Davide Libenzi
2009-08-26 18:58 ` Avi Kivity
2009-08-26 19:13 ` Davide Libenzi
2009-08-26 19:42 ` Avi Kivity
2009-08-26 19:44 ` Davide Libenzi
2009-08-26 23:30 ` Davide Libenzi
2009-08-27 4:13 ` Avi Kivity
2009-08-27 8:06 ` Michael S. Tsirkin
2009-08-27 14:20 ` Davide Libenzi
2009-08-26 19:50 ` Gleb Natapov
2009-08-26 20:04 ` Davide Libenzi
2009-08-27 5:25 ` Gleb Natapov
2009-08-27 9:05 ` Paolo Bonzini
2009-08-27 9:09 ` Michael S. Tsirkin
2009-08-27 14:21 ` Davide Libenzi
2009-08-27 14:30 ` Michael S. Tsirkin
2009-08-27 14:38 ` Davide Libenzi
2009-08-27 14:49 ` Michael S. Tsirkin
2009-08-27 15:29 ` Davide Libenzi
2009-08-27 17:09 ` Davide Libenzi
[not found] ` <alpine.DEB.2.00.0908311644410.17349@makko.or.mcafeemobile.com>
[not found] ` <4A9CB318.7030401@redhat.com>
[not found] ` <alpine.DEB.2.00.0909010723380.28172@makko.or.mcafeemobile.com>
2010-01-06 19:33 ` Michael S. Tsirkin
2010-01-06 20:43 ` Davide Libenzi
2010-01-06 20:55 ` Michael S. Tsirkin
2010-01-06 21:17 ` Davide Libenzi
2010-01-06 22:29 ` Michael S. Tsirkin
2010-01-06 22:46 ` Davide Libenzi
2010-01-06 23:45 ` Michael S. Tsirkin
2010-01-06 23:59 ` Davide Libenzi
2010-01-07 0:02 ` Michael S. Tsirkin
2010-01-07 6:45 ` Michael S. Tsirkin
2010-01-07 7:25 ` Davide Libenzi
2010-01-07 10:36 ` Michael S. Tsirkin
2010-01-07 23:37 ` Davide Libenzi
2010-01-08 0:13 ` Davide Libenzi
2010-01-08 0:26 ` Davide Libenzi
2010-01-10 10:30 ` Michael S. Tsirkin
2010-01-10 15:26 ` Davide Libenzi
2010-01-10 16:22 ` Michael S. Tsirkin [this message]
2010-01-10 17:27 ` Davide Libenzi
2010-01-10 17:35 ` Michael S. Tsirkin
2010-01-10 19:04 ` Davide Libenzi
2010-01-11 7:34 ` Michael S. Tsirkin
2010-01-11 19:14 ` Davide Libenzi
2010-01-11 19:19 ` Michael S. Tsirkin
2010-01-11 22:53 ` Davide Libenzi
2010-01-13 17:07 ` Michael S. Tsirkin
2010-01-11 9:01 ` Gleb Natapov
2010-01-11 9:02 ` Michael S. Tsirkin
2010-01-11 9:08 ` Gleb Natapov
2010-01-11 9:19 ` Michael S. Tsirkin
2010-01-11 9:36 ` Gleb Natapov
2010-01-11 9:41 ` Michael S. Tsirkin
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=20100110162202.GA29263@redhat.com \
--to=mst@redhat.com \
--cc=avi@redhat.com \
--cc=davidel@xmailserver.org \
--cc=kvm@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).