Re: [PATCH-RFC 2/2] eventfd: EFD_STATE flag

From: Avi Kivity
Date: Mon Aug 03 2009 - 11:24:29 EST


On 08/03/2009 06:14 PM, Michael S. Tsirkin wrote:
On Mon, Aug 03, 2009 at 06:09:38PM +0300, Avi Kivity wrote:
On 07/28/2009 08:55 PM, Michael S. Tsirkin wrote:
This implements a new EFD_STATE flag for eventfd.
When set, this flag changes eventfd behaviour in the following way:
- write simply stores the value written, and is always non-blocking
- read unblocks when the value written changes, and
returns the value written

Motivation: we'd like to use eventfd in qemu to pass interrupts from
(emulated or assigned) devices to guest. For level interrupts, the
counter supported currently by eventfd is not a good match: we really
need to set interrupt to a level, typically 0 or 1, and give the guest
ability to see the last value written.


@@ -31,37 +31,59 @@ struct eventfd_ctx {
* issue a wakeup.
*/
__u64 count;
+ /*
+ * When EF_STATE flag is set, eventfd behaves differently:
+ * value written gets stored in "count", read will copy
+ * "count" to "state".
+ */
+ __u64 state;
unsigned int flags;
};

Why not write the new value into ->count directly?

That's what it says. state is ther to detect that value was changed
after last read. Makes sense?

Why not do it at the point of the write?

if (value != ctx->count) {
ctx->count = value;
wake_things_up();
}

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/