[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4A34EC47.5090103@novell.com>
Date: Sun, 14 Jun 2009 08:25:43 -0400
From: Gregory Haskins <ghaskins@...ell.com>
To: "Michael S. Tsirkin" <mst@...hat.com>
CC: kvm@...r.kernel.org, linux-kernel@...r.kernel.org, avi@...hat.com,
davidel@...ilserver.org, mtosatti@...hat.com
Subject: Re: [KVM PATCH v10] kvm: add support for irqfd
Michael S. Tsirkin wrote:
> On Thu, Jun 11, 2009 at 04:16:47PM +0300, Michael S. Tsirkin wrote:
>
>>> +
>>> + ret = file->f_op->poll(file, &irqfd->pt);
>>> + if (ret < 0)
>>> + goto fail;
>>>
>
> Looking at it some more, we have:
> struct file_operations {
> ....
> unsigned int (*poll) (struct file *, struct poll_table_struct *);
>
> So the comparison above does not seem to make sense:
> it seems that the return value from poll can not be negative.
>
Indeed. Will fix.
> Will the callback be executed if someone did a write to eventfd
> before we attached it? If no, maybe we should call it here
> if ret != 0.
>
I do the cleanup in case the callback has been called, but poll() fails
somewhere internally afterwards. Perhaps this is not a realistic
scenario, but it was my motivation for adding the wqh cleanup.
>
>
>>> +
>>> + irqfd->file = file;
>>> +
>>> + mutex_lock(&kvm->lock);
>>> + list_add_tail(&irqfd->list, &kvm->irqfds);
>>> + mutex_unlock(&kvm->lock);
>>> +
>>> + return 0;
>>> +
>>> +fail:
>>> + if (irqfd->wqh)
>>> + remove_wait_queue(irqfd->wqh, &irqfd->wait);
>>>
>> Why are these 2 lines here? Either we might get a callback even though
>> poll failed - and then this test without lock is probably racy -
>> or we can't, and then we can replace the above with BUG_ON(irqfd->wqh).
>>
>> Which is it? I think the later ...
>>
>>
>>
>>> +
>>> + if (file && !IS_ERR(file))
>>> + fput(file);
>>> +
>>> + kfree(irqfd);
>>> + return ret;
>>> +}
>>> +
>>>
Download attachment "signature.asc" of type "application/pgp-signature" (267 bytes)
Powered by blists - more mailing lists