• Tomi Valkeinen's avatar
    media: v4l2-subdev: Add new ioctl for client capabilities · f57fa295
    Tomi Valkeinen authored
    Add new ioctls to set and get subdev client capabilities. Client in this
    context means the userspace application which opens the subdev device
    node. The client capabilities are stored in the file handle of the
    opened subdev device node, and the client must set the capabilities for
    each opened subdev.
    
    For now we only add a single flag, V4L2_SUBDEV_CLIENT_CAP_STREAMS, which
    indicates that the client is streams-aware.
    
    The reason for needing such a flag is as follows:
    
    Many structs passed via ioctls, e.g. struct v4l2_subdev_format, contain
    reserved fields (usually a single array field). These reserved fields
    can be used to extend the ioctl. The userspace is required to zero the
    reserved fields.
    
    We recently added a new 'stream' field to many of these structs, and the
    space for the field was taken from these reserved arrays. The assumption
    was that these new 'stream' fields are always initialized to zero if the
    userspace does not use them. This was a mistake, as, as mentioned above,
    the userspace is required to zero the _reserved_ fields. In other words,
    there is no requirement to zero this new stream field, and if the
    userspace doesn't use the field (which is the case for all userspace
    applications at the moment), the field may contain random data.
    
    This shows that the way the reserved fields are defined in v4l2 is, in
    my opinion, somewhat broken, but there is nothing to do about that.
    
    To fix this issue we need a way for the userspace to tell the kernel
    that the userspace has indeed set the 'stream' field, and it's fine for
    the kernel to access it. This is achieved with the new ioctl, which the
    userspace should usually use right after opening the subdev device node.
    Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
    f57fa295
v4l2-subdev.c 57 KB