From: Louis Chauvet <louis.chauvet@bootlin.com>
To: "José Expósito" <jose.exposito89@gmail.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 23:15:07 +0100 [thread overview]
Message-ID: <00f977cc-04fe-423a-9e5e-9dd7661707fa@bootlin.com> (raw)
In-Reply-To: <Z8GjZNMrOujZkN8G@fedora>
Le 28/02/2025 à 12:52, José Expósito a écrit :
> Hi Louis,
>
> Thanks a lot for reviewing this series, there were a ton of
> patches. I hope they were easy enough to understand :)
Apart from the meson part, the rest is straightforward to understand,
your tests are very clear! It was just long to review because there are
39 patches, not because they were complex.
> 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.
Don't panic, almost all of my reviews are R-bys!
> 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].
Perfect, I work on almost the same branch, but I will test with your
> 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.
I have a very similar setup (except I use virtme-ng to configure the
VM), so I don't think this is an issue. Thanks for sharing those details!
> [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.
True! I missed this part (I read too fast, sorry). So this is probably
not the problem.
> Could add a log and check if this is actually the problem, please?
I will re-run the tests on Monday to print exactly what are the
values/expected values, and search why they fails.
Thanks!
Louis Chauvet
> 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
>>
>>
--
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2025-02-28 22:15 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
2025-02-28 22:15 ` Louis Chauvet [this message]
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=00f977cc-04fe-423a-9e5e-9dd7661707fa@bootlin.com \
--to=louis.chauvet@bootlin.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=jose.exposito89@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox