Re: [RFC 0/4] Introduce drmfs pseudo filesystem for drm subsystem

sourab gupta
2016-12-14T08:49:53Z

On Mon, 2016-12-12 at 07:33 -0800, Alex Deucher wrote:
> On Mon, Dec 12, 2016 at 1:14 AM, sourab gupta <sourab.gupta@intel.com> wrote:
> > On Mon, 2016-12-05 at 03:06 -0800, Dhingra, Swati wrote:
> >> From: Swati Dhingra <swati.dhingra@intel.com>
> >>
> >> Currently, we don't have a stable ABI which can be used for the purpose of
> >> providing output debug/loggging/crc and other such data from DRM.
> >> The ABI in current use (filesystems, ioctls, et al.) have their own
> >> constraints and are intended to output a particular type of data.
> >> Few cases in point:
> >> sysfs - stable ABI, but constrained to one textual value per file
> >> debugfs - unstable ABI, free-for-all
> >> ioctls - not as suitable to many single purpose continuous data
> >> dumping, we would very quickly run out ioctl space; requires more
> >> userspace support than "cat"
> >> device nodes - a real possibilty, kernel instantiation is more tricky,
> >> requires udev (+udev.rules) or userspace discovery of the
> >> dynamic major:minor (via sysfs) [mounting a registered
> >> filesystem is easy in comparison]
> >> netlink - stream based, therefore involves numerous copies.
> >>
> >> Debugfs is the lesser among the evils here, thereby we have grown used to the
> >> convenience and flexibility in presentation that debugfs gives us
> >> (including relayfs inodes) that we want some of that hierachy in stable user
> >> ABI form.
> >>
> >> Due to these limitations, there is a need for a new pseudo filesytem, that
> >> would act as a stable 'free-for-all' ABI, with the heirarchial structure and
> >> thus convenience of debugfs. This will be managed by drm, thus named 'drmfs'.
> >> DRM would register this filesystem to manage a canonical mountpoint, but this
> >> wouldn't limit everyone to only using that pseudofs underneath.
> >>
> >> This can serve to hold various kinds of output data from Linux DRM subsystems,
> >> for the files which can't truely fit anywhere else with existing ABI's but
> >> present so, for the lack of a better place.
> >>
> >> In this patch series, we have introduced a pseudo filesystem named as 'drmfs'
> >> for now. The filesystem is introduced in the first patch, and the subsequent
> >> patches make use of the filesystem interfaces, in drm driver, and making them
> >> available for use by the drm subsystem components, one of which is i915.
> >> We've moved the location of i915 GuC logs from debugfs to drmfs in the last
> >> patch. Subsequently, more such files such as pipe_crc, error states, memory
> >> stats, etc. can be move to this filesystem, if the idea introduced here is
> >> acceptable per se. The filesystem introduced is being used to house the data
> >> generated by i915 driver in this patch series, but will hopefully be generic
> >> enough to provide scope for usage by any other drm subsystem component.
> >>
> >> The patch series is being floated as RFC to gather feedback on the idea and
> >> infrastructure proposed here and it's suitability to address the specific
> >> problem statement/use case.
> >>
> >> TODO: Create documentation. Will do so in next version.
> >>
> >> v2: fix the bat failures caused due to missing config check
> >>
> >> v3: Changes made:
> >> - Move the location of drmfs from fs/ to drivers/gpu/drm/ (Chris)
> >> - Moving config checks to header (Chris,Daniel)
> >>
> >>
> >> Sourab Gupta (4):
> >> drm: Introduce drmfs pseudo filesystem interfaces
> >> drm: Register drmfs filesystem from drm init
> >> drm: Create driver specific root directory inside drmfs
> >> drm/i915: Creating guc log file in drmfs instead of debugfs
> >>
> >> drivers/gpu/drm/Kconfig | 9 +
> >> drivers/gpu/drm/Makefile | 1 +
> >> drivers/gpu/drm/drm_drv.c | 12 +
> >> drivers/gpu/drm/drmfs.c | 555 +++++++++++++++++++++++++++++
> >> drivers/gpu/drm/i915/i915_guc_submission.c | 33 +-
> >> include/drm/drm_drv.h | 3 +
> >> include/drm/drmfs.h | 77 ++++
> >> include/uapi/linux/magic.h | 3 +
> >> 8 files changed, 672 insertions(+), 21 deletions(-)
> >> create mode 100644 drivers/gpu/drm/drmfs.c
> >> create mode 100644 include/drm/drmfs.h
> >>
> >> --
> >> 2.7.4
> >>
> >
> > Hi dri-devel folks,
> >
> > Any feedback on the proposed drmfs infrastructure being proposed here?
>
> I haven't looked too closely, but so far we haven't run into anything
> that we haven't been able to support via some combination of sysfs and
> debugfs.
>
> Alex

Hi Alex,

The intent here is to introduce a stable free-for-all ABI which has the
hierarchical structure and convenience of debugfs. One of the possible
candidate/usecase here is for holding the GuC (micro-controller) logs.
Currently, we're using relayfs to provide these logs to userspace.
Relayfs needs a parent dentry to be associated with log file, and also
we need these logs to be available in production kernels. In absence of
any other suitable candidate, debugfs is used currently, since it
provides the heirarchial VFS structures available (dentry et al.). But
still we felt the need for a stable ABI, which is modeled on lines of
debugfs but which we can control fully.

Chris,
Can you add on if I'm not fully clear.

Regards,
Sourab