Commit e79c7159 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

media: media requests: return EBADR instead of EACCES



If requests are used when they shouldn't, or not used when they should,
then return EBADR (Invalid request descriptor) instead of EACCES.

The reason for this change is that EACCES has more to do with permissions
(not being the owner of the resource), but in this case the request file
descriptor is just wrong for the current mode of the device.

Update the documentation accordingly.

Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent ca0d1bd4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ A queued request cannot be modified anymore.
.. caution::
   For :ref:`memory-to-memory devices <mem2mem>` you can use requests only for
   output buffers, not for capture buffers. Attempting to add a capture buffer
   to a request will result in an ``EACCES`` error.
   to a request will result in an ``EBADR`` error.

If the request contains configurations for multiple entities, individual drivers
may synchronize so the requested pipeline's topology is applied before the
+1 −1
Original line number Diff line number Diff line
@@ -326,7 +326,7 @@ struct v4l2_buffer
	Applications should not set ``V4L2_BUF_FLAG_REQUEST_FD`` for any ioctls
	other than :ref:`VIDIOC_QBUF <VIDIOC_QBUF>`.

	If the device does not support requests, then ``EACCES`` will be returned.
	If the device does not support requests, then ``EBADR`` will be returned.
	If requests are supported but an invalid request file descriptor is
	given, then ``EINVAL`` will be returned.

+5 −7
Original line number Diff line number Diff line
@@ -111,7 +111,7 @@ in use. Setting it means that the buffer will not be passed to the driver
until the request itself is queued. Also, the driver will apply any
settings associated with the request for this buffer. This field will
be ignored unless the ``V4L2_BUF_FLAG_REQUEST_FD`` flag is set.
If the device does not support requests, then ``EACCES`` will be returned.
If the device does not support requests, then ``EBADR`` will be returned.
If requests are supported but an invalid request file descriptor is given,
then ``EINVAL`` will be returned.

@@ -125,7 +125,7 @@ then ``EINVAL`` will be returned.

   For :ref:`memory-to-memory devices <mem2mem>` you can specify the
   ``request_fd`` only for output buffers, not for capture buffers. Attempting
   to specify this for a capture buffer will result in an ``EACCES`` error.
   to specify this for a capture buffer will result in an ``EBADR`` error.

Applications call the ``VIDIOC_DQBUF`` ioctl to dequeue a filled
(capturing) or displayed (output) buffer from the driver's outgoing
@@ -185,12 +185,10 @@ EPIPE
    codecs if a buffer with the ``V4L2_BUF_FLAG_LAST`` was already
    dequeued and no new buffers are expected to become available.

EACCES
    The ``V4L2_BUF_FLAG_REQUEST_FD`` flag was set but the device does not
    support requests for the given buffer type.

EBADR
    The ``V4L2_BUF_FLAG_REQUEST_FD`` flag was not set but the device requires
    The ``V4L2_BUF_FLAG_REQUEST_FD`` flag was set but the device does not
    support requests for the given buffer type, or
    the ``V4L2_BUF_FLAG_REQUEST_FD`` flag was not set but the device requires
    that the buffer is part of a request.

EBUSY
+1 −1
Original line number Diff line number Diff line
@@ -392,7 +392,7 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct media_device *md
		return 0;
	} else if (!q->supports_requests) {
		dprintk(1, "%s: queue does not support requests\n", opname);
		return -EACCES;
		return -EBADR;
	} else if (q->uses_qbuf) {
		dprintk(1, "%s: queue does not use requests\n", opname);
		return -EBUSY;
+2 −2
Original line number Diff line number Diff line
@@ -251,7 +251,7 @@ media_request_get_by_fd(struct media_device *mdev, int request_fd)

	if (!mdev || !mdev->ops ||
	    !mdev->ops->req_validate || !mdev->ops->req_queue)
		return ERR_PTR(-EACCES);
		return ERR_PTR(-EBADR);

	filp = fget(request_fd);
	if (!filp)
@@ -407,7 +407,7 @@ int media_request_object_bind(struct media_request *req,
	int ret = -EBUSY;

	if (WARN_ON(!ops->release))
		return -EACCES;
		return -EBADR;

	spin_lock_irqsave(&req->lock, flags);

Loading