Hi Dafna,
On 9/19/19 10:32 PM, Dafna Hirschfeld wrote:
> This patchset introduces the usage of configfs in order to create vimc devices
> with a configured topology. A patch introducing configfs usage was already
> sent by Helen Koike:
> https://patchwork.linuxtv.org/patch/53397/ . The current patch is based on
> her patch but
> suggests a new API for using configfs.
> It uses symlinks to represent a link between two entities, an approach
> already used in the kernel
> by usb gadgets composed with configfs to associate usb gadget's functions to
> its configurations.
> For example, a topology of sensor->capture will be created with the following
> commands:
>
> CONFIGFS_ROOT=/sys/kernel/config
>
> mkdir ${CONFIGFS_ROOT}/vimc/mdev/
> mkdir ${CONFIGFS_ROOT}/vimc/mdev/vimc-sensor:sen
> mkdir ${CONFIGFS_ROOT}/vimc/mdev/vimc-capture:cap
> tree ${CONFIGFS_ROOT}
> /configfs/
> `-- vimc
> `-- mdev
> |-- hotplug
> |-- vimc-capture:cap
> | `-- pad:sink:0
> `-- vimc-sensor:sen
> `-- pad:source:0
>
> mkdir ${CONFIGFS_ROOT}/vimc/mdev/vimc-sensor:sen/pad:source:0/to-cap
> ln -s ${CONFIGFS_ROOT}/vimc/mdev/vimc-capture:cap/pad:sink:0
> ${CONFIGFS_ROOT}/vimc/mdev/vimc-sensor:sen/pad:source:0/to-cap
> tree ${CONFIGFS_ROOT}
> /configfs/
> `-- vimc
> `-- mdev
> |-- hotplug
> |-- vimc-capture:cap
> | `-- pad:sink:0
> `-- vimc-sensor:sen
> `-- pad:source:0
> `-- to-cap
> |-- enabled
> |-- immutable
> `-- pad:sink:0 ->
> ../../../../../vimc/mdev/vimc-capture:cap/pad:sink:0
>
> There are several reasons to prefer the symlink approach in order to
> represent links between entities.
> The previous approach in which links are represented with directories of the
> form 'entity1:pad>-><entity2:pad'
> requires userspace to parse the dirctories names in order to understand the
> topology, while in the symlink
> approach userspace needs only to traverse the configfs tree.
> Also, the usage of symlinks prevents userspace from creating links between
> entities that don't exist and also
> an entity can't be removed if there is a symlink pointing to it or from it,
> while in the previous approach the
Why can't you remove an entity if there is a symlink pointing to it?
In the example above I can remove mdev/vimc-capture:cap just fine. Afterwards
the pad:sink:0 symlink will point to a non-existing file, but that's valid
symlink behavior.
Or is vimc checking internally and prohibits the user from making invalid
changes?
In any case, this cover letter is a bit confusing and needs to address this in
more
detail.
Regards,
Hans
> links were created by creating unrelated directories and care had to be taken
> to ensure consistency. This way
> the topology configured from userspace is restricted to always be valid and
> represent the current topology of
> the device. This results in less validation needed in kernel code when
> plugging the device and less possibility
> for mistakes in the userspace side. Last, but not least, using symlinks is
> the natural way of associating things
> in configfs.
>
> This patch is meant to demonstrate the suggested configfs api and get
> comments and acceptance/disagreement from
> the community. It passes few tests that configure basic topology and streams
> the capture entities.
> Here is the tests script:
> https://gitlab.collabora.com/dafna/scripts/blob/master/configfs/sym-unit-tests-simple-topo.sh
> Further versions will go through more extensive debugging.
>
> The patchset is rebased on top of v5 of the patchset 'Collapse vimc into
> single monolithic driver' sent by Shuah Khan
> https://lkml.org/lkml/2019/9/17/656
>
> Patch 1, was sent by me before as a single patch and is needed for the
> configfs implementation.
>
> Patch 2, documents how to use the new configfs api in order to create and set
> devices topologies.
>
> Patch 3, only adds the new configfs api code but does not use it yet, so it
> still creates only the hardcoded device.
>
> Patch 4, removes the hardcoded device topology and creates devices with
> topologies configured with the configfs.
>
> Patch 5, implements indexing for the bus_info field since now there can be
> more than one vimc device.
>
> Dafna Hirschfeld (5):
> media: vimc: upon streaming, check that the pipeline starts with a
> source entity
> docs: media: vimc: Documenting vimc topology configuration using
> configfs
> media: vimc: Add the implementation for the configfs api
> media: vimc: use configfs instead of having hardcoded configuration
> media: vimc: Add device index to the bus_info
>
> Documentation/media/v4l-drivers/vimc.dot | 28 +-
> Documentation/media/v4l-drivers/vimc.rst | 240 ++++++-
> drivers/media/platform/vimc/Kconfig | 9 +-
> drivers/media/platform/vimc/Makefile | 2 +-
> drivers/media/platform/vimc/vimc-capture.c | 50 +-
> drivers/media/platform/vimc/vimc-common.h | 86 ++-
> drivers/media/platform/vimc/vimc-configfs.c | 656 ++++++++++++++++++++
> drivers/media/platform/vimc/vimc-configfs.h | 41 ++
> drivers/media/platform/vimc/vimc-core.c | 350 +++++------
> drivers/media/platform/vimc/vimc-debayer.c | 35 +-
> drivers/media/platform/vimc/vimc-scaler.c | 35 +-
> drivers/media/platform/vimc/vimc-sensor.c | 33 +-
> drivers/media/platform/vimc/vimc-streamer.c | 39 +-
> 13 files changed, 1289 insertions(+), 315 deletions(-)
> create mode 100644 drivers/media/platform/vimc/vimc-configfs.c
> create mode 100644 drivers/media/platform/vimc/vimc-configfs.h
>