]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: v4l2-ctrls: return -EACCES if request wasn't completed
authorHans Verkuil <hansverk@cisco.com>
Thu, 23 Aug 2018 10:33:49 +0000 (06:33 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Tue, 11 Sep 2018 13:46:41 +0000 (09:46 -0400)
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: Hans Verkuil <hansverk@cisco.com>
Reviewed-by: Tomasz Figa <tfiga@chromium.org>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Documentation/media/uapi/v4l/vidioc-g-ext-ctrls.rst
drivers/media/v4l2-core/v4l2-ctrls.c

index 9c56a9b6e98a4a6f9457854bdb3ff5137d39ae20..ad8908ce309561820460381e0f09ca1272feba27 100644 (file)
@@ -107,13 +107,12 @@ then ``EINVAL`` will be returned.
 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.
 
-If ``request_fd`` is specified and ``which`` is set to ``V4L2_CTRL_WHICH_REQUEST_VAL``
-during a call to :ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`, then the
-returned values will be the values currently set for the request (or 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 if it has already
-completed. Attempting to get controls while the request has been queued but
-not yet completed will result in an ``EBUSY`` error.
+If ``request_fd`` is specified and ``which`` is set to
+``V4L2_CTRL_WHICH_REQUEST_VAL`` during a call to
+:ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`, then it will return the
+values of the controls at the time of request completion.
+If the request is not yet completed, then this will result in an
+``EACCES`` error.
 
 The driver will only set/get these controls if all control values are
 correct. This prevents the situation where only some of the controls
@@ -405,8 +404,9 @@ ENOSPC
     and this error code is returned.
 
 EACCES
-    Attempt to try or set a read-only control or to get a write-only
-    control.
+    Attempt to try or set a read-only control, or to get a write-only
+    control, or to get a control from a request that has not yet been
+    completed.
 
 EPERM
     The ``which`` field was set to ``V4L2_CTRL_WHICH_REQUEST_VAL`` but the
index a197b60183f5965e697c7bc3b9281f96d611e6e5..ccaf3068de6d42f42de63b97f4ab9c1c42c93f16 100644 (file)
@@ -3301,10 +3301,9 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct media_device *mdev,
                if (IS_ERR(req))
                        return PTR_ERR(req);
 
-               if (req->state != MEDIA_REQUEST_STATE_IDLE &&
-                   req->state != MEDIA_REQUEST_STATE_COMPLETE) {
+               if (req->state != MEDIA_REQUEST_STATE_COMPLETE) {
                        media_request_put(req);
-                       return -EBUSY;
+                       return -EACCES;
                }
 
                obj = v4l2_ctrls_find_req_obj(hdl, req, false);