Re: [KVM PATCH 2/3] eventfd: add a notifier mechanism

Gregory Haskins
2009-04-23T22:12:33Z

[-- Attachment #1: Type: text/plain, Size: 2269 bytes --]

Davide Libenzi wrote:
> On Thu, 23 Apr 2009, Gregory Haskins wrote:
>
>
>> Davide Libenzi wrote:
>>
>>> On Thu, 23 Apr 2009, Gregory Haskins wrote:
>>>
>>>
>>>
>>>> This allows synchronous notifications to register with the eventfd
>>>> infrastructure. Unlike traditional vfs based eventfd readers, notifiees
>>>> do not implictly clear the counter on reception. However, the clearing
>>>> is primarily important to allowing threads to block waiting for events
>>>> anyway, so its an acceptable trade-off since blocking doesn't apply to
>>>> notifiers.
>>>>
>>>>
>>> Do you really need to add a notifier? Eventfd already has a wait queue,
>>> and we support callback-based wakeups, so is there any reason we shouldn't
>>> use those and rely on the already existing wakeups?
>>>
>>>
>> Well, IIUC the issue is that a wait queue implies that you are in fact
>> waiting...which we may not. :)
>>
>> The target in this particular application with kvm-irqfd is a vcpu
>> context, which *may* be sleeping in something like a HLT, but it also
>> could be in a number of other states such as non-root (guest) mode, it
>> could be running in the kernel, it could be up in userspace, etc.
>>
>> That said: I am not married to the concept that this has to be a
>> notifier callback, but I do want to be able to meet the target
>> application. So if there is some way to do that within the existing
>> wait-queue contstruct, I am open to suggestions.
>>
>
> Take a look at init_waitqueue_func_entry(), in particula at that "func"
> parameter. Then look at how __wake_up_common() does its thing.
> You don't need to be "waiting" for our wakeup system to work. Callbacks
> works just fine, otherwise things like epoll could not work at all.
>

Yeah, I was looking at that this afternoon after you mentioned it. That
makes sense.

As of right now the wqh is embedded in the eventfd, accessible only by
the .read() vtable entry. In order to do this as you suggest, I imagine
I need to slightly modify the eventfd interface to allow waiters other
than the embedded readers to join the wait-queue. How would you like to
see that interface look?

Thanks Davide,
-Greg

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 266 bytes --]