Skip to content

Make sure .device_run is always called in non-atomic context

Ezequiel Garcia linux-media 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v5 Latest5 patches 6 repliesIn review
  2. v12 patches 4 repliesSuperseded

Patches in v5 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/5mem2mem: Require capture and output mutexes to matchdrivers/media/v4l2-core/v4l2-mem2mem.c+7 -50 replies
2/5v4l2-ioctl.c: Simplify locking for m2m devicesdrivers/media/v4l2-core/v4l2-ioctl.c+2 -450 replies
3/5v4l2-mem2mem: Simplify exiting the function in __v4l2_m2m_try_scheduledrivers/media/v4l2-core/v4l2-mem2mem.c+13 -160 replies
4/5v4l2-mem2mem: Avoid calling .device_run in v4l2_m2m_job_finishdrivers/media/v4l2-core/v4l2-mem2mem.c+24 -10 replies
5/5media: cedrus: Get rid of interrupt bottom-halfdrivers/staging/media/sunxi/cedrus/cedrus_hw.c+5 -211 reply

Reviews trailers per patch

1 of 5 patches has a Reviewed-by or Acked-by.

PatchPaul Kocialkowski
SeriesT-b
1/5
2/5
3/5
4/5
5/5A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v5 thread

Cover letter [PATCH v5 0/5] Make sure .device_run is always called in non-atomic context

This series goal is to avoid drivers from having ad-hoc code to call .device_run in non-atomic context. Currently, .device_run can be called via v4l2_m2m_job_finish(), not only running in interrupt context, but also creating a nasty re-entrant path into mem2mem drivers.

The proposed solution is to add a per-device worker that is scheduled by v4l2_m2m_job_finish, which replaces drivers having a threaded interrupt or similar.

This change allows v4l2_m2m_job_finish() to be called in interrupt context, separating .device_run and v4l2_m2m_job_finish() contexts.

It's worth mentioning that v4l2_m2m_cancel_job() doesn't need to flush or cancel the new worker, because the job_spinlock synchronizes both and also because the core prevents simultaneous jobs. Either v4l2_m2m_cancel_job() will wait for the worker, or the worker will be unable to run a new job.

Patches apply on top of Request API and the Cedrus VPU driver.

Tested with cedrus driver using v4l2-request-test and vicodec driver using gstreamer.

Ezequiel Garcia (4):
mem2mem: Require capture and output mutexes to match v4l2-ioctl.c: Simplify locking for m2m devices
v4l2-mem2mem: Avoid calling .device_run in v4l2_m2m_job_finish
media: cedrus: Get rid of interrupt bottom-half

Sakari Ailus (1):
v4l2-mem2mem: Simplify exiting the function in __v4l2_m2m_try_schedule

 drivers/media/v4l2-core/v4l2-ioctl.c          | 47 +------------
 drivers/media/v4l2-core/v4l2-mem2mem.c        | 66 ++++++++++++-------
 .../staging/media/sunxi/cedrus/cedrus_hw.c    | 26 ++------
 3 files changed, 51 insertions(+), 88 deletions(-)
Signature · 1 line
2.19.1