[alsa-devel] [PATCH v15 0/6] Media Device Allocator API

Hans Verkuil hverkuil at xs4all.nl
Tue Apr 2 09:38:15 CEST 2019


On 4/2/19 2:40 AM, Shuah Khan wrote:
> Media Device Allocator API to allows multiple drivers share a media device.
> This API solves a very common use-case for media devices where one physical
> device (an USB stick) provides both audio and video. When such media device
> exposes a standard USB Audio class, a proprietary Video class, two or more
> independent drivers will share a single physical USB bridge. In such cases,
> it is necessary to coordinate access to the shared resource.
> 
> Using this API, drivers can allocate a media device with the shared struct
> device as the key. Once the media device is allocated by a driver, other
> drivers can get a reference to it. The media device is released when all
> the references are released.
> 
> The primary focus for testing The patch series is making sure media
> device is released when both drivers release the media device with
> a series of unbind/binds on both drivers.
> 
> - both au0828 and snd-usb-aduio as built-in
> - both au0828 and snd-usb-aduio as modules
> - au0828 as module and snd-usb-aduio as built-in
> - au0828 as built-in and snd-usb-aduio as module
> 
> Test results can be found at:
> 
> https://docs.google.com/document/d/1RMF8Rwj7xHJEoOx6_K2f-REgZJ63BMeAVEf-CV-0HsM/edit?usp=sharing

Phew, after posting v2 of my patch "au0828: stop video streaming only when last
user stops" everything now works as it should, including the issue with two VBI
streams you found.

Should I take the selftest patch or will you take that yourself?

Let me know so I can make the pull request for this. It's been a long journey
since the first post on April 9th, 2014: "[RFC PATCH 0/2] managed token devres
interfaces".

Almost exactly five years of work!

Regards,

	Hans

> 
> Changes since v14:
> - Fixed typos and Copyright date.
> - Made VBI shareable with audio and video.
> - Tested with Hans's patch to to fix second VBi stream stepping
>   on active VBI stream. The patch didn't fix the problem.
> 
>   1. Start qv4l2 -V /dev/vbi0
>     Start capture - Streaming active
> 
>   2. Start qv4l2 -V /dev/vbi0
>    Start capture - Streaming active
>    Streaming won't start and the first stream stops.
> 
> There is still a problem in au0828. I am sending the patch series with
> audio, video, and VBI shareable with this known issue.
> 
> Changes since v13:
> - Minor changes to variable names and other minor changes to copyright
>   and typos suggested by Hans Verkuil.
> 
> Changes since v12:
> - Patch 1: Fixed prototype warns from media_dev_allocator.c. Removed
>   dependency on find_module() by adding struct module to input args.
>   Still need module name to pass into media_device API.
> - Patch 2 & 4: Update media dev allocator api calls to pass in struct module
>   pointer.
> - No changes to Patches 3 & 5.
> - Added patch 6 with a test. It can go in separately.
> 
> Changes since v11:
> - Patch 1: Add CONFIG_MODULES dependency in media_dev_allocator files.
>   to fix compile errors when CONFIG_MODULES is disabled.
> - Patch 2, 3: No changes.
> - Patch 4: Fix sparse error reported by Dan Carpenter.
> - Patch 5: Fix warns found by Hans Verkuil.
> - v11 was tested on 5.0-rc7 and addresses comments on v10 series from
>   Hans Verkuil. Fixed problems found in resource sharing logic in au0828
>   adding a patch 5 to this series. The test plan used for testing resource
>   sharing could serve as a regression test plan and the test results can be
>   found at:
> - v10 was tested on 5.0-rc3 and addresses comments on v9 series from
>   Hans Verkuil.
> 
> Changes since v10:
> - Patch 1: Fixed SPDX tag and removed redundant IS_ENABLED(CONFIG_USB)
>            around media_device_usb_allocate() - Sakari Ailus's review
>            comment.
> - Patch 2 and 3: No changes
> - Patch 4: Fixed SPDX tag - Sakari Ailus's review comment.
> - Carried Reviewed-by tag from Takashi Iwai for the sound from v9.
> - Patch 5: This is a new patch added to fix resource sharing
>            inconsistencies and problem found during testing using Han's
>            tests.
> 
> Changes since v9:
> - Patch 1: Fix mutex assert warning from find_module() calls. This
>   code was written before the change to find_module() that requires
>   callers to hold module_mutex. I missed this during my testing on
>   4.20-rc6. Hans Verkuil reported the problem.
> - Patch 4: sound/usb: Initializes all the entities it can before
>   registering the device based on comments from Hans Verkuil
> - Carried Reviewed-by tag from Takashi Iwai for the sound from v9.
> - No changes to Patches 2 and 3.
> 
> References:
> https://lkml.org/lkml/2018/11/2/169
> https://www.mail-archive.com/linux-media@vger.kernel.org/msg105854.html
> 
> Shuah Khan (6):
>   media: Media Device Allocator API
>   media: change au0828 to use Media Device Allocator API
>   media: media.h: Enable ALSA MEDIA_INTF_T* interface types
>   sound/usb: Use Media Controller API to share media resources
>   au0828: fix enable and disable source audio and video inconsistencies
>   selftests: media_dev_allocator api test
> 
>  Documentation/media/kapi/mc-core.rst          |  41 +++
>  drivers/media/Makefile                        |   6 +
>  drivers/media/media-dev-allocator.c           | 135 ++++++++
>  drivers/media/usb/au0828/Kconfig              |   2 +
>  drivers/media/usb/au0828/au0828-core.c        | 196 ++++++++---
>  drivers/media/usb/au0828/au0828.h             |   6 +-
>  include/media/media-dev-allocator.h           |  63 ++++
>  include/uapi/linux/media.h                    |  25 +-
>  sound/usb/Kconfig                             |   4 +
>  sound/usb/Makefile                            |   2 +
>  sound/usb/card.c                              |  14 +
>  sound/usb/card.h                              |   3 +
>  sound/usb/media.c                             | 327 ++++++++++++++++++
>  sound/usb/media.h                             |  74 ++++
>  sound/usb/mixer.h                             |   3 +
>  sound/usb/pcm.c                               |  29 +-
>  sound/usb/quirks-table.h                      |   1 +
>  sound/usb/stream.c                            |   2 +
>  sound/usb/usbaudio.h                          |   6 +
>  .../media_tests/media_dev_allocator.sh        |  85 +++++
>  20 files changed, 963 insertions(+), 61 deletions(-)
>  create mode 100644 drivers/media/media-dev-allocator.c
>  create mode 100644 include/media/media-dev-allocator.h
>  create mode 100644 sound/usb/media.c
>  create mode 100644 sound/usb/media.h
>  create mode 100755 tools/testing/selftests/media_tests/media_dev_allocator.sh
> 



More information about the Alsa-devel mailing list