]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/vkms: Add a validation function for VKMS configuration
authorLouis Chauvet <louis.chauvet@bootlin.com>
Tue, 18 Feb 2025 10:12:07 +0000 (11:12 +0100)
committerMaxime Ripard <mripard@kernel.org>
Fri, 7 Mar 2025 09:58:23 +0000 (10:58 +0100)
As the configuration will be used by userspace, add a validator to avoid
creating a broken DRM device.

For the moment, the function always returns true, but rules will be
added in future patches.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
Co-developed-by: José Expósito <jose.exposito89@gmail.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250218101214.5790-8-jose.exposito89@gmail.com
Signed-off-by: Maxime Ripard <mripard@kernel.org>
drivers/gpu/drm/vkms/tests/vkms_config_test.c
drivers/gpu/drm/vkms/vkms_config.c
drivers/gpu/drm/vkms/vkms_config.h
drivers/gpu/drm/vkms/vkms_output.c

index 92798590051b3e78715958e8ef2df5b77c0473d6..6e07139d261c4c0cc36f9961fe106b90082ca4cf 100644 (file)
@@ -54,6 +54,8 @@ static void vkms_config_test_default_config(struct kunit *test)
        KUNIT_EXPECT_EQ(test, config->writeback, params->enable_writeback);
        KUNIT_EXPECT_EQ(test, config->overlay, params->enable_overlay);
 
+       KUNIT_EXPECT_TRUE(test, vkms_config_is_valid(config));
+
        vkms_config_destroy(config);
 }
 
index 9fb08d94a35158f512e657be0cb320e4b975c918..d1947537834c6bfe969852f7371b3d3983bfe548 100644 (file)
@@ -51,6 +51,12 @@ void vkms_config_destroy(struct vkms_config *config)
 }
 EXPORT_SYMBOL_IF_KUNIT(vkms_config_destroy);
 
+bool vkms_config_is_valid(const struct vkms_config *config)
+{
+       return true;
+}
+EXPORT_SYMBOL_IF_KUNIT(vkms_config_is_valid);
+
 static int vkms_config_show(struct seq_file *m, void *data)
 {
        struct drm_debugfs_entry *entry = m->private;
index fcaa909fb2e00c51c6355bd6e731f41e0c4ba38d..31c758631c376ab76870d9e50c66799d0f2ad6a5 100644 (file)
@@ -67,6 +67,16 @@ vkms_config_get_device_name(struct vkms_config *config)
        return config->dev_name;
 }
 
+/**
+ * vkms_config_is_valid() - Validate a configuration
+ * @config: Configuration to validate
+ *
+ * Returns:
+ * Whether the configuration is valid or not.
+ * For example, a configuration without primary planes is not valid.
+ */
+bool vkms_config_is_valid(const struct vkms_config *config);
+
 /**
  * vkms_config_register_debugfs() - Register a debugfs file to show the device's
  * configuration
index 068a7f87ececb865cfa4d0f53634e3be1989928c..414cc933af4177753e01d31955eea3a04d0ecb69 100644 (file)
@@ -16,6 +16,9 @@ int vkms_output_init(struct vkms_device *vkmsdev)
        int writeback;
        unsigned int n;
 
+       if (!vkms_config_is_valid(vkmsdev->config))
+               return -EINVAL;
+
        /*
         * Initialize used plane. One primary plane is required to perform the composition.
         *