lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20220722215001.1380608-1-jshargo@chromium.org>
Date:   Fri, 22 Jul 2022 17:50:01 -0400
From:   Jim Shargo <jshargo@...omium.org>
To:     jshargo@...gle.com,
        Rodrigo Siqueira <rodrigosiqueiramelo@...il.com>,
        Melissa Wen <melissa.srw@...il.com>,
        Haneen Mohammed <hamohammed.sa@...il.com>,
        Daniel Vetter <daniel@...ll.ch>,
        David Airlie <airlied@...ux.ie>,
        Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
        Maxime Ripard <mripard@...nel.org>,
        Thomas Zimmermann <tzimmermann@...e.de>,
        Jonathan Corbet <corbet@....net>
Cc:     Jim Shargo <jshargo@...omium.org>, dri-devel@...ts.freedesktop.org,
        linux-doc@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: [PATCH 0/5] drm/vkms: Add ConfigFS Support

Intro
=====

This patchset adds basic ConfigFS support to VKMS, allowing users to
build new DRM devices with user-defined DRM objects and object
relationships by creating, writing, and symlinking files.

Usage
=====

Modprobe VKMS and mount ConfigFS:

  $ mkdir -p /config/; mount -t configfs
  $ modprobe vkms enable_overlay=1 enable_cursor=1 enable_writeback=1

This will create a `/config/vkms` directory, where users may create
new VKMS devices. The standard default device is still created, so
existing use-cases should be unaffected.

Creating a new device happens in three stages:

  1) Create a new directory to represent a new device:
       $ mkdir /config/vkms/dev

  2) Populate the new device with crtcs, planes, connectors, encoders,
     and CRTCs by mkdir'ing in the appropriate directories. Connect the
     objects via symlinks.

  3) To register the device:
       $ echo 1 > /config/vkms/dev/is_registered

If the write is successful, you have a new VKMS device ready to use!

See the updated vkms.rst for more details and a full example.

Changes within VKMS
===================

The most meaningful change within VKMS is the introduction of a list
of "cards" representing individual virtual drivers. Each card
maintains its own devices, arrays of objects, and output/writeback
machinery.

Until cards are registered, all of their data lives in within the
ConfigFS tree. Only during registration do we interface with DRM at
all to create the device.

Due to limitations with ConfigFS, the default device is a special
case, without all of the objects represented in its ConfigFS
directory.

Testing
=======

Suspend tests are not working in my VM, so I skipped those. Otherwise,
here are the tests that I have been running:

  $ igt-gpu-tools/scripts/run-tests.sh -x ".*suspend.*" \
        -t ".*kms_flip.*" \
        -t ".*kms_writeback.*" \
        -t ".*kms_cursor_crc*" \
        -t ".*kms_plane.*"

I've observed no changes between passed/failed tests before and after
my changes on the default device.

IGT revision: eddc67c5c85b8ee6eb4d13752ca43da5073dc985

I'll also note that I've been working on a VKMS test suite in IGT that
exercises the new ConfigFS behavior, and that it's a work-in-progress.

Future Work
===========

This should be the biggest and most invasive change in VKMS to make it
more configurable and able to mimic real devices. That said, it should
serve as a basis for additional useful features, including:

  - Simulating hot-plugging by keeping the connectors directory live
    and allowing users to add/remove connectors after the device is
    registered.
  - Additional properties could be turned on and off, or tuned, based
    on files within object directories. For instance, GAMMA/DEGAMMA
    LUT sizes could be configurable per-device, or support for
    individual formats could be turned on and off.

Additional Notes
================

This is my first kernel patchset, and though I've had it reviewed by
my team (with a lot of of kernel/drm expertise), I recommend reading
it with a bit of extra scrutiny. As you can tell by the fact this
didn't get mailed with the other patches :P.

Thanks!

Jim Shargo (5):
  drm/vkms: Merge default_config and device
  drm/vkms: VKMS now supports more than one "card"
  drm/vkms: Support multiple objects (crtcs, etc.) per card
  drm/vkms: Add ConfigFS scaffolding to VKMS
  drm/vkms: Support registering configfs devices

 Documentation/gpu/vkms.rst            |  76 ++++
 drivers/gpu/drm/Kconfig               |   1 +
 drivers/gpu/drm/vkms/Makefile         |   1 +
 drivers/gpu/drm/vkms/vkms_composer.c  |  28 +-
 drivers/gpu/drm/vkms/vkms_configfs.c  | 546 ++++++++++++++++++++++++++
 drivers/gpu/drm/vkms/vkms_crtc.c      |  88 +++--
 drivers/gpu/drm/vkms/vkms_drv.c       | 204 ++++++----
 drivers/gpu/drm/vkms/vkms_drv.h       | 173 ++++++--
 drivers/gpu/drm/vkms/vkms_output.c    | 335 +++++++++++++---
 drivers/gpu/drm/vkms/vkms_plane.c     |  43 +-
 drivers/gpu/drm/vkms/vkms_writeback.c |  27 +-
 11 files changed, 1288 insertions(+), 234 deletions(-)
 create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.c

-- 
2.37.1.359.gd136c6c3e2-goog

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ