From: "José Expósito" <jose.exposito89@gmail.com>
To: Louis Chauvet <louis.chauvet@bootlin.com>
Cc: igt-dev@lists.freedesktop.org
Subject: Re: [PATCH i-g-t 35/39] lib/vkms: Test changing enabled device planes
Date: Fri, 28 Feb 2025 12:52:04 +0100 [thread overview]
Message-ID: <Z8GjZNMrOujZkN8G@fedora> (raw)
In-Reply-To: <65677f97-dd40-48ef-bd64-ce8e468c0518@bootlin.com>
Hi Louis,
Thanks a lot for reviewing this series, there were a ton of
patches. I hope they were easy enough to understand :)
I won't have time to look into all of your reviews this week,
but I'll try to at least anwser to this one as I see you are
finding some test failures.
On Fri, Feb 28, 2025 at 09:51:47AM +0100, Louis Chauvet wrote:
>
>
> Le 18/02/2025 à 17:50, José Expósito a écrit :
> > Test that, once a VKMS device is enabled, the plane values can't change
> > and that deleting it or the attached CRTCs doesn't change the VKMS
> > device.
> >
> > Add a function that performs a basic validation checking that the
> > device created matches the expected one.
> >
> > Signed-off-by: José Expósito <jose.exposito89@gmail.com>
>
> The next tests don't pass on my VM, can you share details on your setup?
> (kernel branch, architecture)
I'm testing on a QEMU VM (x86_64), using this kernel branch [1], which
is basically [2] + [3].
This is the script I'm using to run the IGT tests:
$ meson setup build ; ninja -C build && \
ssh -p 2222 jose@127.0.0.1 -t \
'cd shared/igt-gpu-tools && \
sudo modprobe vkms && \
sudo systemctl isolate multi-user.target && \
sudo IGT_DEVICE="sys:/sys/devices/platform/vkms" \
./build/tests/vkms/vkms_configfs ; \
sudo systemctl isolate graphical.target'
Basically, I build in the host and run on the VM by sharing the code
and builds in "shared/igt-gpu-tools" inside the VM.
[1] https://github.com/JoseExposito/linux/tree/patch-vkms-configfs
[2] https://lore.kernel.org/all/20250218101214.5790-1-jose.exposito89@gmail.com/
[3] https://lore.kernel.org/dri-devel/20250225175936.7223-1-jose.exposito89@gmail.com/T/
> > ---
> > lib/igt_vkms.c | 27 +++++++
> > lib/igt_vkms.h | 1 +
> > tests/vkms/vkms_configfs.c | 147 +++++++++++++++++++++++++++++++++++++
> > 3 files changed, 175 insertions(+)
> >
> > diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
> > index 4c44efec9..3dab7a823 100644
> > --- a/lib/igt_vkms.c
> > +++ b/lib/igt_vkms.c
> > [...]
> > +static void assert_device_config(igt_vkms_config_t *cfg)
> > +{
> > + drmDevicePtr devices[64];
> > + drmDevicePtr dev;
> > + drmModeResPtr res;
> > + drmModePlaneResPtr plane_res;
> > + drmModeConnectorPtr connector_res;
> > + igt_vkms_crtc_config_t *crtc;
> > + igt_vkms_connector_config_t *connector;
> > + int n_devices;
> > + int n_planes = 0;
> > + int n_crtcs = 0;
> > + int n_encoders = 0;
> > + int n_connectors = 0;
> > + int n_connector_status_cfg[4] = {0};
> > + int n_connector_status_drm[4] = {0};
> > + int fd;
> > +
> > + n_devices = drmGetDevices(devices, ARRAY_SIZE(devices));
> > +
> > + dev = find_device(cfg->device_name, devices, n_devices);
> > + igt_assert_f(dev, "Device '%s' not found\n", cfg->device_name);
> > +
> > + fd = open(dev->nodes[DRM_NODE_PRIMARY], O_RDONLY);
> > + igt_assert_f(fd >= 0, "Error opening device '%s' at path '%s'\n",
> > + cfg->device_name, dev->nodes[DRM_NODE_PRIMARY]);
> > + igt_assert_f(!drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1),
> > + "Error setting DRM_CLIENT_CAP_UNIVERSAL_PLANES\n");
> > + igt_assert_f(!drmSetClientCap(fd, DRM_CLIENT_CAP_ATOMIC, 1),
> > + "Error setting DRM_CLIENT_CAP_ATOMIC\n");
> > + igt_assert_f(!drmSetClientCap(fd, DRM_CLIENT_CAP_WRITEBACK_CONNECTORS, 1),
> > + "Error setting DRM_CLIENT_CAP_WRITEBACK_CONNECTORS\n");
> > +
> > + res = drmModeGetResources(fd);
> > + igt_assert_f(res, "Error getting resources\n");
> > + plane_res = drmModeGetPlaneResources(fd);
> > + igt_assert_f(plane_res, "Error getting plane resources\n");
> > +
> > + for (int n = 0; (&cfg->planes[n])->name; n++)
> > + n_planes++;
> > +
> > + for (int n = 0; (crtc = &cfg->crtcs[n])->name; n++) {
> > + n_crtcs++;
> > +
> > + if (crtc->writeback) {
> > + n_encoders++;
> > + n_connectors++;
> > + n_connector_status_cfg[DRM_MODE_UNKNOWNCONNECTION]++;
I wonder why this is not working for you.
I see in your comment in 39/39 that you are not getting the right numner
of connectors when "crtc->writeback == true", but I'm adding them here.
Could add a log and check if this is actually the problem, please?
Best wishes,
Jose
> > + }
> > + }
> > +
> > + for (int n = 0; (&cfg->encoders[n])->name; n++)
> > + n_encoders++;
> > +
> > + for (int n = 0; (connector = &cfg->connectors[n])->name; n++) {
> > + n_connectors++;
> > + n_connector_status_cfg[connector->status]++;
> > + }
> > +
> > + for (int n = 0; n < res->count_connectors; n++) {
> > + connector_res = drmModeGetConnectorCurrent(fd,
> > + res->connectors[n]);
> > + n_connector_status_drm[connector_res->connection]++;
> > + drmModeFreeConnector(connector_res);
> > + }
>
> I think the main issue here is something I already observed: you need to
> force probe the connector status (and in this test you really want to do
> it), so you should use `drmModeGetConnector`.
>
> I just tested, it seems to work, except for the last test about connector
> hotplug (see my review).
>
> > +
> > + igt_assert_eq(n_planes, plane_res->count_planes);
> > + igt_assert_eq(n_crtcs, res->count_crtcs);
> > + igt_assert_eq(n_encoders, res->count_encoders);
> > + igt_assert_eq(n_connectors, res->count_connectors);
> > + igt_assert_eq(n_connector_status_cfg[DRM_MODE_CONNECTED],
> > + n_connector_status_drm[DRM_MODE_CONNECTED]);
> > + igt_assert_eq(n_connector_status_cfg[DRM_MODE_DISCONNECTED],
> > + n_connector_status_drm[DRM_MODE_DISCONNECTED]);
> > + igt_assert_eq(n_connector_status_cfg[DRM_MODE_UNKNOWNCONNECTION],
> > + n_connector_status_drm[DRM_MODE_UNKNOWNCONNECTION]);
>
> ^ Fails on those asserts
>
> > +
> > + drmModeFreePlaneResources(plane_res);
> > + drmModeFreeResources(res);
> > + close(fd);
> > + drmFreeDevices(devices, n_devices);
> > +}
> > +
> > /**
> > * SUBTEST: device-default-files
> > * Description: Test that creating a VKMS device creates the default files and
> > @@ -1414,6 +1497,69 @@ static void test_enable_too_many_connectors(void)
> > igt_vkms_device_destroy(dev);
> > }
> > +/**
> > + * SUBTEST: enabled-plane-cannot-change
> > + * Description: Test that, once a VKMS device is enabled, the plane values can't
> > + * change and that deleting it or the attached CRTCs doesn't change
> > + * the VKMS device.
> > + */
> > +
> > +static void test_enabled_plane_cannot_change(void)
> > +{
> > + igt_vkms_t *dev;
> > +
> > + igt_vkms_config_t cfg = {
> > + .device_name = __func__,
> > + .planes = {
> > + {
> > + .name = "plane0",
> > + .type = DRM_PLANE_TYPE_PRIMARY,
> > + .possible_crtcs = { "crtc0"},
> > + },
> > + {
> > + .name = "plane1",
> > + .type = DRM_PLANE_TYPE_PRIMARY,
> > + .possible_crtcs = { "crtc1"},
> > + },
> > + },
> > + .crtcs = {
> > + { .name = "crtc0" },
> > + { .name = "crtc1" },
> > + },
> > + .encoders = {
> > + { .name = "encoder0", .possible_crtcs = { "crtc0" } },
> > + { .name = "encoder1", .possible_crtcs = { "crtc1" } },
> > + },
> > + .connectors = {
> > + {
> > + .name = "connector0",
> > + .possible_encoders = { "encoder0", "encoder1" },
> > + },
> > + },
> > + };
> > +
> > + dev = igt_vkms_device_create_from_config(&cfg);
> > + igt_assert(dev);
> > +
> > + igt_vkms_device_set_enabled(dev, true);
> > + igt_assert(igt_vkms_device_is_enabled(dev));
> > + assert_device_config(&cfg);
> > +
> > + /* Try to change values */
> > + igt_vkms_plane_set_type(dev, "plane0", DRM_PLANE_TYPE_OVERLAY);
> > + igt_assert_eq(igt_vkms_plane_get_type(dev, "plane0"),
> > + DRM_PLANE_TYPE_PRIMARY);
> > +
> > + igt_assert(!igt_vkms_plane_attach_crtc(dev, "plane0", "crtc1"));
> > +
> > + /* Deleting pipeline items doesn't affect the device */
> > + igt_assert(igt_vkms_plane_detach_crtc(dev, "plane0", "crtc0"));
> > + igt_assert(igt_vkms_device_remove_plane(dev, "plane0"));
> > + assert_device_config(&cfg);
> > +
> > + igt_vkms_device_destroy(dev);
> > +}
> > +
> > igt_main
> > {
> > struct {
> > @@ -1451,6 +1597,7 @@ igt_main
> > { "enable-crtc-no-encoder", test_enable_crtc_no_encoder },
> > { "enable-no-connectors", test_enable_no_connectors },
> > { "enable-too-many-connectors", test_enable_too_many_connectors },
> > + { "enabled-plane-cannot-change", test_enabled_plane_cannot_change },
> > };
> > igt_fixture {
>
> --
> Louis Chauvet, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
>
next prev parent reply other threads:[~2025-02-28 14:02 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-18 16:49 [PATCH i-g-t 00/39] VKMS configfs tests José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 01/39] lib/drmtest: Add VKMS as a known driver type José Expósito
2025-02-27 13:12 ` Louis Chauvet
2025-03-13 17:22 ` José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 02/39] lib/igt_debugfs: Move is_mountpoint() to igt_aux José Expósito
2025-02-27 13:12 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 03/39] lib/igt_configfs: Add helper to mount configfs José Expósito
2025-02-27 13:14 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 04/39] lib/vkms: Add minimal VKMS library and test device default files José Expósito
2025-02-27 13:12 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 05/39] lib/vkms: Allow to enable/disable VKMS devices José Expósito
2025-02-27 13:15 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 06/39] tests/vkms_configfs: Test device invalid values José Expósito
2025-02-27 13:14 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 07/39] lib/vkms: Test plane default files José Expósito
2025-02-27 13:15 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 08/39] lib/vkms: Test plane default values José Expósito
2025-02-27 13:15 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 09/39] lib/vkms: Test plane invalid values José Expósito
2025-02-27 13:14 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 10/39] lib/vkms: Test CRTC default files José Expósito
2025-02-27 13:15 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 11/39] lib/vkms: Test CRTC default values José Expósito
2025-02-27 13:12 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 12/39] lib/vkms: Test CRTC invalid values José Expósito
2025-02-27 13:12 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 13/39] lib/vkms: Test encoder default files José Expósito
2025-02-27 13:14 ` Louis Chauvet
2025-03-13 17:25 ` José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 14/39] lib/vkms: Test connector " José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 15/39] lib/vkms: Test connector default values José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 16/39] lib/vkms: Test plane connector invalid values José Expósito
2025-02-27 13:12 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 17/39] lib/vkms: Test attaching planes to CRTCs José Expósito
2025-02-27 13:15 ` Louis Chauvet
2025-03-13 17:23 ` José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 18/39] lib/vkms: Test attaching encoders " José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 19/39] lib/vkms: Test attaching connectors to encoders José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 20/39] tests/vkms_configfs: Test enablement without pipeline items José Expósito
2025-02-27 13:06 ` Louis Chauvet
2025-02-28 1:47 ` Greg Kroah-Hartman
2025-02-28 11:58 ` José Expósito
2025-02-18 16:49 ` [PATCH i-g-t 21/39] lib/vkms: Create VKMS device from static config José Expósito
2025-02-27 14:30 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 22/39] tests/vkms_configfs: Test adding too many planes José Expósito
2025-02-27 14:53 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 23/39] tests/vkms_configfs: Test not adding a primary plane José Expósito
2025-02-27 14:54 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 24/39] tests/vkms_configfs: Test adding multiple primary planes José Expósito
2025-02-27 15:00 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 25/39] tests/vkms_configfs: Test adding multiple cursor planes José Expósito
2025-02-27 15:00 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 26/39] tests/vkms_configfs: Test adding a plane without possible CRTCs José Expósito
2025-02-27 15:01 ` Louis Chauvet
2025-02-18 16:49 ` [PATCH i-g-t 27/39] tests/vkms_configfs: Test enabling a device without CRTCs José Expósito
2025-02-27 15:15 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 28/39] tests/vkms_configfs: Test enabling a device with too many CRTCs José Expósito
2025-02-27 15:05 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 29/39] tests/vkms_configfs: Test enabling a device without encoders José Expósito
2025-02-27 15:05 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 30/39] tests/vkms_configfs: Test enabling a device with too many encoders José Expósito
2025-02-27 15:05 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 31/39] tests/vkms_configfs: Test adding an encoder without possible CRTCs José Expósito
2025-02-27 15:15 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 32/39] tests/vkms_configfs: Test adding a CRTC without encoders José Expósito
2025-02-27 15:15 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 33/39] tests/vkms_configfs: Test enabling a device without connectors José Expósito
2025-02-27 15:15 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 34/39] tests/vkms_configfs: Test enabling a device with too many connectors José Expósito
2025-02-27 15:15 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 35/39] lib/vkms: Test changing enabled device planes José Expósito
2025-02-28 8:51 ` Louis Chauvet
2025-02-28 11:52 ` José Expósito [this message]
2025-02-28 22:15 ` Louis Chauvet
2025-02-18 16:50 ` [PATCH i-g-t 36/39] lib/vkms: Test changing enabled device CRTCs José Expósito
2025-02-18 16:50 ` [PATCH i-g-t 37/39] lib/vkms: Test changing enabled device encoders José Expósito
2025-02-18 16:50 ` [PATCH i-g-t 38/39] lib/vkms: Test changing enabled device connectors José Expósito
2025-02-18 16:50 ` [PATCH i-g-t 39/39] tests/vkms_configfs: Test connector hot-plug José Expósito
2025-02-28 8:51 ` Louis Chauvet
2025-02-27 13:11 ` [PATCH i-g-t 00/39] VKMS configfs tests Louis Chauvet
2025-02-28 21:22 ` ✓ Xe.CI.BAT: success for VKMS configfs tests (rev3) Patchwork
2025-02-28 21:25 ` ✓ i915.CI.BAT: " Patchwork
2025-03-01 5:04 ` ✗ Xe.CI.Full: failure " Patchwork
2025-03-01 9:43 ` ✗ i915.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z8GjZNMrOujZkN8G@fedora \
--to=jose.exposito89@gmail.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=louis.chauvet@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.