All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv15 00/35] Request API
@ 2018-06-04 11:46 Hans Verkuil
  2018-06-04 11:46 ` [PATCHv15 01/35] uapi/linux/media.h: add request API Hans Verkuil
                   ` (34 more replies)
  0 siblings, 35 replies; 61+ messages in thread
From: Hans Verkuil @ 2018-06-04 11:46 UTC (permalink / raw)
  To: linux-media

From: Hans Verkuil <hans.verkuil@cisco.com>

Hi all,

This is version 15 of the Request API series.

The main changes compared to v14 are:

- Squashed various patches from v14 together where applicable.

- All comments to v13/v14 patches have been processed and code
  adapted where applicable.

- Added new init_buffer vb2 buffer op to initialize struct
  vb2_v4l2_buffer (the request_fd field should be inited to -1).

- The vb2 internal state PREPARED has been removed. Instead two
  new bool fields 'synced' and 'prepared' keep track of whether
  buffers are synced and/or prepared. This simplifies vb2 when it
  comes to keeping track of the buffer state and this is especially
  important when buffers can be in a request, but not yet queued.

- After dequeueing a buffer that was part of a request the request_fd
  is filled in correctly, but it is also cleared (init_buffer) internally.
  So calling querybuf after the dqbuf will not have an associated
  request anymore. This makes sense since the buffer has no longer any
  relationship with a request after dqbuf was called.

- Once you start queueing buffers in a request it is no longer allowed
  to queue buffers directly (i.e. without a request) until the queue
  is cancelled. This might be relaxed in the future, but for now this
  prevents mixing request and non-request buffers.

- vim2m now uses delayed work instead of a timer.

- It is no longer allowed to use requests for capture buffers of a
  memory-to-memory device. See this discussion:
  https://www.mail-archive.com/linux-media@vger.kernel.org/msg132202.html

This series has been tested extensively with v4l2-compliance (modified
to test requests) and the vim2m and vivid drivers.

Regarding locking:

There are two request locks used: req_queue_mutex (part of media_device)
ensures high-level serialization of queueing/reiniting and canceling
requests. It serializes STREAMON/OFF, close() and MEDIA_REQUEST_IOC_QUEUE.
This is the top-level lock and should be taken before any others.

The 'lock' spin_lock in struct media_request protects that structure and
should be held for a short time only.

When MEDIA_REQUEST_IOC_QUEUE is called it will validate and queue both
control handlers and vb2 buffers. For control handlers the control handler
lock will be taken, for vb2 buffers the vb2_queue lock will be taken.
This requires that the lock field in vb2_queue is set, which is checked in
videobuf2-v4l2.c.

TODO:

vim2m: the media topology is a bit bogus, this needs to be fixed
(i.e. a proper HW entity should be added). But for now it is
good enough for testing.

Everything seemed to slip nicely into place while working on this,
so I hope this is finally an implementation that we can proceed to
upstream and build upon for complex camera pipelines in the future.

This patch series is also available here:

https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=reqv15

The patched v4l2-compliance is available here:

https://git.linuxtv.org/hverkuil/v4l-utils.git/log/?h=request

Regards,

	Hans

Alexandre Courbot (2):
  videodev2.h: add request_fd field to v4l2_ext_controls
  Documentation: v4l: document request API

Hans Verkuil (31):
  uapi/linux/media.h: add request API
  media-request: implement media requests
  media-request: add media_request_get_by_fd
  media-request: add media_request_object_find
  v4l2-device.h: add v4l2_device_supports_requests() helper
  v4l2-dev: lock req_queue_mutex
  v4l2-ctrls: v4l2_ctrl_add_handler: add from_other_dev
  v4l2-ctrls: prepare internal structs for request API
  v4l2-ctrls: alloc memory for p_req
  v4l2-ctrls: use ref in helper instead of ctrl
  v4l2-ctrls: add core request support
  v4l2-ctrls: support g/s_ext_ctrls for requests
  vb2: store userspace data in vb2_v4l2_buffer
  davinci_vpfe: remove bogus vb2->state check
  vb2: drop VB2_BUF_STATE_PREPARED, use bool prepared/synced instead
  videodev2.h: Add request_fd field to v4l2_buffer
  vb2: add init_buffer buffer op
  videobuf2-core: embed media_request_object
  videobuf2-core: integrate with media requests
  videobuf2-v4l2: integrate with media requests
  videobuf2-core: add request helper functions
  videobuf2-v4l2: add vb2_request_queue/validate helpers
  videobuf2-core: add uses_requests flag
  videobuf2-v4l2: refuse qbuf if queue uses requests
  v4l2-mem2mem: add vb2_m2m_request_queue
  vim2m: add media device
  vim2m: use workqueue
  vim2m: support requests
  vivid: add mc
  vivid: add request support
  RFC: media-requests: add debugfs node

Sakari Ailus (2):
  media: doc: Add media-request.h header to documentation build
  v4l2-mem2mem: Simplify exiting the function in v4l2_m2m_try_schedule

 Documentation/media/kapi/mc-core.rst          |   2 +
 .../media/uapi/mediactl/media-controller.rst  |   1 +
 .../media/uapi/mediactl/media-funcs.rst       |   3 +
 .../uapi/mediactl/media-ioc-request-alloc.rst |  71 +++
 .../uapi/mediactl/media-request-ioc-queue.rst |  50 ++
 .../mediactl/media-request-ioc-reinit.rst     |  51 ++
 .../media/uapi/mediactl/request-api.rst       | 219 ++++++++
 Documentation/media/uapi/v4l/buffer.rst       |  18 +-
 .../media/uapi/v4l/vidioc-g-ext-ctrls.rst     |  28 +-
 Documentation/media/uapi/v4l/vidioc-qbuf.rst  |  11 +
 .../media/videodev2.h.rst.exceptions          |   1 +
 drivers/media/Makefile                        |   3 +-
 .../media/common/videobuf2/videobuf2-core.c   | 244 +++++++--
 .../media/common/videobuf2/videobuf2-v4l2.c   | 492 +++++++++++------
 drivers/media/dvb-core/dvb_vb2.c              |   5 +-
 drivers/media/dvb-frontends/rtl2832_sdr.c     |   5 +-
 drivers/media/media-device.c                  |  55 ++
 drivers/media/media-devnode.c                 |  17 +
 drivers/media/media-request.c                 | 491 +++++++++++++++++
 drivers/media/pci/bt8xx/bttv-driver.c         |   2 +-
 drivers/media/pci/cx23885/cx23885-417.c       |   2 +-
 drivers/media/pci/cx88/cx88-blackbird.c       |   2 +-
 drivers/media/pci/cx88/cx88-video.c           |   2 +-
 drivers/media/pci/saa7134/saa7134-empress.c   |   4 +-
 drivers/media/pci/saa7134/saa7134-video.c     |   2 +-
 .../media/platform/exynos4-is/fimc-capture.c  |   2 +-
 drivers/media/platform/omap3isp/ispvideo.c    |   4 +-
 drivers/media/platform/rcar-vin/rcar-core.c   |   2 +-
 drivers/media/platform/rcar_drif.c            |   2 +-
 .../media/platform/s3c-camif/camif-capture.c  |   4 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_dec.c  |   4 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_enc.c  |   4 +-
 .../media/platform/soc_camera/soc_camera.c    |   7 +-
 drivers/media/platform/vim2m.c                |  93 +++-
 drivers/media/platform/vivid/vivid-core.c     |  69 +++
 drivers/media/platform/vivid/vivid-core.h     |   8 +
 drivers/media/platform/vivid/vivid-ctrls.c    |  46 +-
 .../media/platform/vivid/vivid-kthread-cap.c  |  12 +
 .../media/platform/vivid/vivid-kthread-out.c  |  12 +
 drivers/media/platform/vivid/vivid-sdr-cap.c  |  16 +
 drivers/media/platform/vivid/vivid-vbi-cap.c  |  10 +
 drivers/media/platform/vivid/vivid-vbi-out.c  |  10 +
 drivers/media/platform/vivid/vivid-vid-cap.c  |  10 +
 drivers/media/platform/vivid/vivid-vid-out.c  |  10 +
 drivers/media/usb/cpia2/cpia2_v4l.c           |   2 +-
 drivers/media/usb/cx231xx/cx231xx-417.c       |   2 +-
 drivers/media/usb/cx231xx/cx231xx-video.c     |   4 +-
 drivers/media/usb/msi2500/msi2500.c           |   2 +-
 drivers/media/usb/tm6000/tm6000-video.c       |   2 +-
 drivers/media/usb/uvc/uvc_queue.c             |   5 +-
 drivers/media/usb/uvc/uvc_v4l2.c              |   3 +-
 drivers/media/usb/uvc/uvcvideo.h              |   1 +
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c |  14 +-
 drivers/media/v4l2-core/v4l2-ctrls.c          | 501 +++++++++++++++++-
 drivers/media/v4l2-core/v4l2-dev.c            |  13 +
 drivers/media/v4l2-core/v4l2-device.c         |   3 +-
 drivers/media/v4l2-core/v4l2-ioctl.c          |  44 +-
 drivers/media/v4l2-core/v4l2-mem2mem.c        |  70 ++-
 drivers/media/v4l2-core/v4l2-subdev.c         |   9 +-
 .../staging/media/davinci_vpfe/vpfe_video.c   |   7 +-
 drivers/staging/media/imx/imx-media-dev.c     |   2 +-
 drivers/staging/media/imx/imx-media-fim.c     |   2 +-
 drivers/staging/media/omap4iss/iss_video.c    |   3 +-
 drivers/usb/gadget/function/uvc_queue.c       |   2 +-
 include/media/media-device.h                  |  33 ++
 include/media/media-devnode.h                 |   4 +
 include/media/media-request.h                 | 380 +++++++++++++
 include/media/v4l2-ctrls.h                    |  76 ++-
 include/media/v4l2-device.h                   |  11 +
 include/media/v4l2-mem2mem.h                  |   4 +
 include/media/videobuf2-core.h                |  53 +-
 include/media/videobuf2-v4l2.h                |  20 +-
 include/uapi/linux/media.h                    |  12 +
 include/uapi/linux/videodev2.h                |  14 +-
 74 files changed, 3036 insertions(+), 368 deletions(-)
 create mode 100644 Documentation/media/uapi/mediactl/media-ioc-request-alloc.rst
 create mode 100644 Documentation/media/uapi/mediactl/media-request-ioc-queue.rst
 create mode 100644 Documentation/media/uapi/mediactl/media-request-ioc-reinit.rst
 create mode 100644 Documentation/media/uapi/mediactl/request-api.rst
 create mode 100644 drivers/media/media-request.c
 create mode 100644 include/media/media-request.h

-- 
2.17.0

^ permalink raw reply	[flat|nested] 61+ messages in thread

end of thread, other threads:[~2018-07-03 14:22 UTC | newest]

Thread overview: 61+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-04 11:46 [PATCHv15 00/35] Request API Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 01/35] uapi/linux/media.h: add request API Hans Verkuil
2018-07-03  9:21   ` Mauro Carvalho Chehab
2018-07-03  9:33     ` Hans Verkuil
2018-07-03 10:04       ` Mauro Carvalho Chehab
2018-06-04 11:46 ` [PATCHv15 02/35] media-request: implement media requests Hans Verkuil
2018-06-15  7:08   ` Hans Verkuil
2018-07-02  8:58     ` Tomasz Figa
2018-07-02  9:11       ` Hans Verkuil
2018-07-02 10:57         ` Tomasz Figa
2018-07-02 10:56   ` Tomasz Figa
2018-07-02 11:26     ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 03/35] media: doc: Add media-request.h header to documentation build Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 04/35] media-request: add media_request_get_by_fd Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 05/35] media-request: add media_request_object_find Hans Verkuil
2018-07-02 12:33   ` Tomasz Figa
2018-07-02 12:37     ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 06/35] v4l2-device.h: add v4l2_device_supports_requests() helper Hans Verkuil
2018-07-02 13:01   ` Sakari Ailus
2018-06-04 11:46 ` [PATCHv15 07/35] v4l2-dev: lock req_queue_mutex Hans Verkuil
2018-07-02 13:06   ` Tomasz Figa
2018-07-02 13:23     ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 08/35] videodev2.h: add request_fd field to v4l2_ext_controls Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 09/35] v4l2-ctrls: v4l2_ctrl_add_handler: add from_other_dev Hans Verkuil
2018-06-04 16:22   ` Hans Verkuil
2018-06-05 10:16     ` Philipp Zabel
2018-06-04 17:11   ` Ezequiel Garcia
2018-06-04 11:46 ` [PATCHv15 10/35] v4l2-ctrls: prepare internal structs for request API Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 11/35] v4l2-ctrls: alloc memory for p_req Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 12/35] v4l2-ctrls: use ref in helper instead of ctrl Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 13/35] v4l2-ctrls: add core request support Hans Verkuil
2018-06-04 17:18   ` Ezequiel Garcia
2018-06-15  7:18   ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 14/35] v4l2-ctrls: support g/s_ext_ctrls for requests Hans Verkuil
2018-06-15  7:20   ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 15/35] vb2: store userspace data in vb2_v4l2_buffer Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 16/35] davinci_vpfe: remove bogus vb2->state check Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 17/35] vb2: drop VB2_BUF_STATE_PREPARED, use bool prepared/synced instead Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 18/35] videodev2.h: Add request_fd field to v4l2_buffer Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 19/35] vb2: add init_buffer buffer op Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 20/35] videobuf2-core: embed media_request_object Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 21/35] videobuf2-core: integrate with media requests Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 22/35] videobuf2-v4l2: " Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 23/35] videobuf2-core: add request helper functions Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 24/35] videobuf2-v4l2: add vb2_request_queue/validate helpers Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 25/35] videobuf2-core: add uses_requests flag Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 26/35] videobuf2-v4l2: refuse qbuf if queue uses requests Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 27/35] v4l2-mem2mem: Simplify exiting the function in v4l2_m2m_try_schedule Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 28/35] v4l2-mem2mem: add vb2_m2m_request_queue Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 29/35] Documentation: v4l: document request API Hans Verkuil
2018-07-03 11:50   ` Mauro Carvalho Chehab
2018-07-03 13:02     ` Hans Verkuil
2018-07-03 14:08       ` Mauro Carvalho Chehab
2018-07-03 14:22         ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 30/35] vim2m: add media device Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 31/35] vim2m: use workqueue Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 32/35] vim2m: support requests Hans Verkuil
2018-06-04 17:15   ` Ezequiel Garcia
2018-06-04 11:46 ` [PATCHv15 33/35] vivid: add mc Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 34/35] vivid: add request support Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 35/35] RFC: media-requests: add debugfs node Hans Verkuil

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.