Re: [PATCH 1/9] uapi: General notification ring definitions [ver #5]
From: Greg Kroah-Hartman
Date: Wed Jul 03 2019 - 13:08:15 EST
On Fri, Jun 28, 2019 at 04:48:34PM +0100, David Howells wrote:
> Add UAPI definitions for the general notification ring, including the
> following pieces:
> (1) struct watch_notification.
> This is the metadata header for each entry in the ring. It includes a
> type and subtype that indicate the source of the message
> (eg. WATCH_TYPE_MOUNT_NOTIFY) and the kind of the message
> (eg. NOTIFY_MOUNT_NEW_MOUNT).
> The header also contains an information field that conveys the
> following information:
> - WATCH_INFO_LENGTH. The size of the entry (entries are variable
> - WATCH_INFO_ID. The watch ID specified when the watchpoint was
> - WATCH_INFO_TYPE_INFO. (Sub)type-specific information.
> - WATCH_INFO_FLAG_*. Flag bits overlain on the type-specific
> information. For use by the type.
> All the information in the header can be used in filtering messages at
> the point of writing into the buffer.
> (2) struct watch_queue_buffer.
> This describes the layout of the ring. Note that the first slots in
> the ring contain a special metadata entry that contains the ring
> pointers. The producer in the kernel knows to skip this and it has a
> proper header (WATCH_TYPE_META, WATCH_META_SKIP_NOTIFICATION) that
> indicates the size so that the ring consumer can handle it the same as
> any other record and just skip it.
> Note that this means that ring entries can never be split over the end
> of the ring, so if an entry would need to be split, a skip record is
> inserted to wrap the ring first; this is also WATCH_TYPE_META,
> (3) WATCH_INFO_NOTIFICATIONS_LOST.
> This is a flag that can be set in the metadata header by the kernel to
> indicate that at least one message was lost since it was last cleared
> by userspace.
> Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>