dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Louis Chauvet" <louis.chauvet@bootlin.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v5 15/38] drm/vkms: Introduce config for plane rotation
Date: Sat, 27 Jun 2026 03:42:33 +0000	[thread overview]
Message-ID: <20260627034233.CFCC51F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260627-vkms-all-config-v5-15-854aa0840926@bootlin.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] vkms_config_valid_plane_rotation() incorrectly allows multiple base rotation bits to be set in default_rotation, which will trigger a kernel WARNING.
- [Low] The validation check ensuring that supported_rotations contains at least one rotation is mathematically unreachable dead code.
--

commit f25358e4a8dbe82dcc32cb1193229da2bf2b59f3
Author: Louis Chauvet <louis.chauvet@bootlin.com>

drm/vkms: Introduce config for plane rotation

This commit introduces a new configuration interface that allows customizing 
the supported rotations for each plane. This is useful for testing specific 
rotation setups without advertising all possible plane rotations.

> diff --git a/drivers/gpu/drm/vkms/tests/vkms_config_test.c b/drivers/gpu/drm/vkms/tests/vkms_config_test.c
> index 1e4ea1863420f..c33fe737678ff 100644
> --- a/drivers/gpu/drm/vkms/tests/vkms_config_test.c
> +++ b/drivers/gpu/drm/vkms/tests/vkms_config_test.c
[ ... ]
> @@ -481,6 +488,44 @@ static void vkms_config_test_valid_plane_type(struct kunit *test)
[ ... ]
> +	/* Invalid, supported rotations must contains at least one rotation */
> +	vkms_config_plane_set_supported_rotations(plane_cfg, DRM_MODE_REFLECT_MASK);
> +	vkms_config_plane_set_default_rotation(plane_cfg, DRM_MODE_REFLECT_X | DRM_MODE_ROTATE_0);
> +	KUNIT_EXPECT_FALSE(test, vkms_config_valid_plane_rotation(config, plane_cfg));

[Severity: Low]
Does this test actually verify the intended check?

Since default_rotation is not a subset of supported_rotations here, this test 
fails the earlier subset check in vkms_config_valid_plane_rotation(), 
meaning it never actually reaches the supported_rotations validation check.

> +	KUNIT_EXPECT_FALSE(test, vkms_config_is_valid(config));
> +
> +	/* Invalid, default rotation must contains at least one rotation */
> +	vkms_config_plane_set_supported_rotations(plane_cfg,
> +						  DRM_MODE_REFLECT_MASK | DRM_MODE_ROTATE_0);
> +	vkms_config_plane_set_default_rotation(plane_cfg, DRM_MODE_REFLECT_X);
> +	KUNIT_EXPECT_FALSE(test, vkms_config_valid_plane_rotation(config, plane_cfg));
> +	KUNIT_EXPECT_FALSE(test, vkms_config_is_valid(config));
> +
> +	vkms_config_destroy(config);
> +}
> +
>  static void vkms_config_test_valid_plane_possible_crtcs(struct kunit *test)
>  {
>  	struct vkms_config *config;
> diff --git a/drivers/gpu/drm/vkms/vkms_config.c b/drivers/gpu/drm/vkms/vkms_config.c
> index 54994f3c8e144..5c86eb24fedf3 100644
> --- a/drivers/gpu/drm/vkms/vkms_config.c
> +++ b/drivers/gpu/drm/vkms/vkms_config.c
[ ... ]
> @@ -150,6 +151,33 @@ static bool valid_plane_number(const struct vkms_config *config)
>  	return true;
>  }
>  
> +VISIBLE_IF_KUNIT
> +bool vkms_config_valid_plane_rotation(const struct vkms_config *config,
> +				      const struct vkms_config_plane *plane_cfg)
> +{
> +	struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
> +
> +	if ((vkms_config_plane_get_default_rotation(plane_cfg) &
> +	     vkms_config_plane_get_supported_rotations(plane_cfg)) !=
> +	    vkms_config_plane_get_default_rotation(plane_cfg)) {
> +		drm_info(dev, "Configured default rotation is not supported by the plane\n");
> +		return false;
> +	}
> +
> +	if ((vkms_config_plane_get_default_rotation(plane_cfg) & DRM_MODE_ROTATE_MASK) == 0) {
> +		drm_info(dev, "Configured default rotation must contains at least one possible rotation\n");
> +		return false;
> +	}

[Severity: Medium]
Will this allow multiple base rotation bits (e.g., DRM_MODE_ROTATE_0 | 
DRM_MODE_ROTATE_90) to be set simultaneously?

The API invariant in drm_plane_create_rotation_property() requires exactly one 
base rotation angle and uses is_power_of_2() to check this. If multiple bits 
pass this validation here, it could trigger a kernel WARNING stack trace later 
when creating the property.

Should this check use is_power_of_2() instead?

> +
> +	if ((vkms_config_plane_get_supported_rotations(plane_cfg) & DRM_MODE_ROTATE_MASK) == 0) {

[Severity: Low]
Is this block mathematically unreachable dead code?

If default_rotation contains at least one rotation bit (from the previous check) 
and default_rotation is a bitwise subset of supported_rotations (from the first 
check), then supported_rotations is mathematically guaranteed to contain at least 
one rotation bit.

> +		drm_info(dev, "Configured supported rotations must contains at least one possible rotation\n");
> +		return false;
> +	}
> +
> +	return true;
> +}
> +EXPORT_SYMBOL_IF_KUNIT(vkms_config_valid_plane_rotation);
> +
[ ... ]
> diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c
> index f351202031244..8a64ea41734b8 100644
> --- a/drivers/gpu/drm/vkms/vkms_plane.c
> +++ b/drivers/gpu/drm/vkms/vkms_plane.c
> @@ -235,8 +235,9 @@ struct vkms_plane *vkms_plane_init(struct vkms_device *vkmsdev,
>  
>  	drm_plane_helper_add(&plane->base, &vkms_plane_helper_funcs);
>  
> -	drm_plane_create_rotation_property(&plane->base, DRM_MODE_ROTATE_0,
> -					   DRM_MODE_ROTATE_MASK | DRM_MODE_REFLECT_MASK);
> +	drm_plane_create_rotation_property(&plane->base,
> +					   vkms_config_plane_get_default_rotation(plane_cfg),
> +					   vkms_config_plane_get_supported_rotations(plane_cfg));

[Severity: Medium]
This is where the invalid configuration could be passed to the DRM core.

If vkms_config_valid_plane_rotation() allows a default_rotation mask with 
multiple rotation bits, calling drm_plane_create_rotation_property() here will 
trigger its WARN_ON() invariant check.

>  
>  	drm_plane_create_color_properties(&plane->base,
>  					  BIT(DRM_COLOR_YCBCR_BT601) |

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260627-vkms-all-config-v5-0-854aa0840926@bootlin.com?part=15

  reply	other threads:[~2026-06-27  3:42 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-27  3:30 [PATCH v5 00/38] VKMS: Introduce multiple configFS attributes Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 01/38] drm/drm_mode_config: Add helper to get plane type name Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 02/38] drm/blend: Get a rotation name from it's bitfield Louis Chauvet
2026-06-27  3:41   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 03/38] drm/drm_color_mgmt: Expose drm_get_color_encoding_name Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 04/38] drm/drm_color_mgmt: Expose drm_get_color_range_name Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 05/38] drm/connector: Export drm_get_colorspace_name Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 06/38] drm/drm_atomic_state_helper: Properly load default value for rotation Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 07/38] Documentation: ABI: vkms: Add current VKMS ABI documentation Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 08/38] drm/vkms: Add error handling in plane config creation Louis Chauvet
2026-06-27  3:41   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 09/38] drm/vkms: Simplify plane_release code Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 10/38] drm/vkms: Explicitly display plane type Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 11/38] drm/vkms: Use enabled/disabled instead of 1/0 for debug Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 12/38] drm/vkms: Explicitly display connector status Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 13/38] drm/vkms: Introduce config for plane name Louis Chauvet
2026-06-27  3:46   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 14/38] drm/vkms: Use plane folder name as " Louis Chauvet
2026-06-27  3:43   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 15/38] drm/vkms: Introduce config for plane rotation Louis Chauvet
2026-06-27  3:42   ` sashiko-bot [this message]
2026-06-27  3:30 ` [PATCH v5 16/38] drm/vkms: Use DRM_ROTATION_FMT macros for rotation display Louis Chauvet
2026-06-27  3:39   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 17/38] drm/vkms: Introduce configfs for plane rotation Louis Chauvet
2026-06-27  3:46   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 18/38] drm/vkms: Introduce config for plane color encoding Louis Chauvet
2026-06-27  3:43   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 19/38] drm/vkms: Introduce configfs " Louis Chauvet
2026-06-27  3:49   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 20/38] drm/vkms: Introduce config for plane color range Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 21/38] drm/vkms: Introduce configfs " Louis Chauvet
2026-06-27  3:45   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 22/38] drm/vkms: Introduce config for plane format Louis Chauvet
2026-06-27  3:46   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 23/38] drm/vkms: Introduce configfs " Louis Chauvet
2026-06-27  3:45   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 24/38] drm/vkms: Properly render plane using their zpos Louis Chauvet
2026-06-27  3:44   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 25/38] drm/vkms: Introduce config for plane zpos property Louis Chauvet
2026-06-27  3:41   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 26/38] drm/vkms: Introduce configfs " Louis Chauvet
2026-06-27  3:46   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 27/38] drm/vkms: Introduce config for connector type Louis Chauvet
2026-06-27  3:45   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 28/38] drm/vkms: Introduce configfs " Louis Chauvet
2026-06-27  3:45   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 29/38] drm/vkms: Rename vkms_connector_init to vkms_connector_init_static Louis Chauvet
2026-06-27  3:30 ` [PATCH v5 30/38] drm/vkms: Introduce config for connector supported colorspace Louis Chauvet
2026-06-27  3:58   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 31/38] drm/vkms: Introduce configfs " Louis Chauvet
2026-06-27  3:48   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 32/38] drm/vkms: Introduce config for connector EDID Louis Chauvet
2026-06-27  3:48   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 33/38] drm/vkms: Introduce configfs " Louis Chauvet
2026-06-27  3:50   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 34/38] drm/vkms: Store the enabled/disabled status for connector Louis Chauvet
2026-06-27  3:48   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 35/38] drm/vkms: Allow to hot-add connectors Louis Chauvet
2026-06-27  3:50   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 36/38] drm/vkms: Introduce configfs for dynamic connector creation Louis Chauvet
2026-06-27  3:55   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 37/38] drm/vkms: Add connector parent configuration in vkms_config Louis Chauvet
2026-06-27  3:57   ` sashiko-bot
2026-06-27  3:30 ` [PATCH v5 38/38] drm/vkms: Add ConfigFS interface for connector parent and port_id Louis Chauvet
2026-06-27  3:45   ` sashiko-bot

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=20260627034233.CFCC51F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=louis.chauvet@bootlin.com \
    --cc=sashiko-reviews@lists.linux.dev \
    /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