Commit b6b84557 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

media: v4l2-ctrls: return -EACCES if request wasn't completed

For now (this might be relaxed in the future) we do not allow getting
controls from a request that isn't completed. In that case we return
-EACCES. Update the documentation accordingly.
Signed-off-by: default avatarHans Verkuil <hansverk@cisco.com>
Reviewed-by: default avatarTomasz Figa <tfiga@chromium.org>
Acked-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 34b41472
...@@ -107,13 +107,12 @@ then ``EINVAL`` will be returned. ...@@ -107,13 +107,12 @@ then ``EINVAL`` will be returned.
An attempt to call :ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` for a An attempt to call :ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` for a
request that has already been queued will result in an ``EBUSY`` error. request that has already been queued will result in an ``EBUSY`` error.
If ``request_fd`` is specified and ``which`` is set to ``V4L2_CTRL_WHICH_REQUEST_VAL`` If ``request_fd`` is specified and ``which`` is set to
during a call to :ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`, then the ``V4L2_CTRL_WHICH_REQUEST_VAL`` during a call to
returned values will be the values currently set for the request (or the :ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`, then it will return the
hardware value if none is set) if the request has not yet been queued, or the values of the controls at the time of request completion.
values of the controls at the time of request completion if it has already If the request is not yet completed, then this will result in an
completed. Attempting to get controls while the request has been queued but ``EACCES`` error.
not yet completed will result in an ``EBUSY`` error.
The driver will only set/get these controls if all control values are The driver will only set/get these controls if all control values are
correct. This prevents the situation where only some of the controls correct. This prevents the situation where only some of the controls
...@@ -405,8 +404,9 @@ ENOSPC ...@@ -405,8 +404,9 @@ ENOSPC
and this error code is returned. and this error code is returned.
EACCES EACCES
Attempt to try or set a read-only control or to get a write-only Attempt to try or set a read-only control, or to get a write-only
control. control, or to get a control from a request that has not yet been
completed.
EPERM EPERM
The ``which`` field was set to ``V4L2_CTRL_WHICH_REQUEST_VAL`` but the The ``which`` field was set to ``V4L2_CTRL_WHICH_REQUEST_VAL`` but the
......
...@@ -3301,10 +3301,9 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct media_device *mdev, ...@@ -3301,10 +3301,9 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct media_device *mdev,
if (IS_ERR(req)) if (IS_ERR(req))
return PTR_ERR(req); return PTR_ERR(req);
if (req->state != MEDIA_REQUEST_STATE_IDLE && if (req->state != MEDIA_REQUEST_STATE_COMPLETE) {
req->state != MEDIA_REQUEST_STATE_COMPLETE) {
media_request_put(req); media_request_put(req);
return -EBUSY; return -EACCES;
} }
obj = v4l2_ctrls_find_req_obj(hdl, req, false); obj = v4l2_ctrls_find_req_obj(hdl, req, false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment