Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] drm/vkms: missing connector atomic_create_state breaks DRM_MODE_ATOMIC_RESET --
commit dd5905026f6d7cc05c849f79e8c81bca404953ae Author: Maxime Ripard <[email protected]> drm/vkms: Add driver-specific plane property for testing This commit adds a driver-specific "vkms-test-do-not-use-in-prod" range property to vkms planes to allow userspace to test DRM_MODE_ATOMIC_RESET without interfering with standard compositor properties. > diff --git a/drivers/gpu/drm/vkms/vkms_plane.c > b/drivers/gpu/drm/vkms/vkms_plane.c > index fd3d34dcf0fe5..42513cb462ace 100644 > --- a/drivers/gpu/drm/vkms/vkms_plane.c > +++ b/drivers/gpu/drm/vkms/vkms_plane.c [ ... ] > @@ -85,7 +92,9 @@ static void vkms_plane_destroy_state(struct drm_plane > *plane, > > static struct drm_plane_state *vkms_plane_create_state(struct drm_plane > *plane) > { > + struct vkms_plane *vkms_plane = to_vkms_plane(plane); > struct vkms_plane_state *vkms_state; > + u64 val; > > vkms_state = kzalloc_obj(*vkms_state); > if (!vkms_state) { > @@ -95,14 +104,53 @@ static struct drm_plane_state > *vkms_plane_create_state(struct drm_plane *plane) > > __drm_gem_shadow_plane_state_init(plane, &vkms_state->base); > > + if (!drm_object_property_get_default_value(&plane->base, > + > vkms_plane->vkms_test_do_not_use_property, > + &val)) > + vkms_state->vkms_test_do_not_use_value = val; [Severity: Medium] As reported by Sashiko on v6 [1], can vkms_plane_create_state() actually be reached via DRM_MODE_ATOMIC_RESET while vkms connectors do not implement atomic_create_state? When userspace queries DRM_CAP_ATOMIC_RESET in drm_getcap() or submits an atomic commit with DRM_MODE_ATOMIC_RESET in drm_mode_atomic_ioctl(), drm_atomic_implements_create_state() and drm_atomic_commit_fill_with_defaults() check all connectors on the device: drivers/gpu/drm/drm_atomic.c:drm_atomic_implements_create_state() { ... drm_connector_list_iter_begin(dev, &conn_iter); drm_for_each_connector_iter(connector, &conn_iter) { if (!connector->funcs->atomic_create_state) { drm_connector_list_iter_end(&conn_iter); return false; } } drm_connector_list_iter_end(&conn_iter); ... } In vkms, both connector function tables still set .reset instead of .atomic_create_state: drivers/gpu/drm/vkms/vkms_connector.c: static const struct drm_connector_funcs vkms_connector_funcs = { .detect = vkms_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, .reset = drm_atomic_helper_connector_reset, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, }; drivers/gpu/drm/vkms/vkms_writeback.c: static const struct drm_connector_funcs vkms_wb_connector_funcs = { .fill_modes = drm_helper_probe_single_connector_modes, .reset = drm_atomic_helper_connector_reset, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, }; Because every valid vkms device requires at least one connector, drm_atomic_implements_create_state() returns false and DRM_MODE_ATOMIC_RESET commits fail with -EOPNOTSUPP before vkms_plane_create_state() can be invoked. Should vkms_connector_funcs and vkms_wb_connector_funcs also be converted to use .atomic_create_state = drm_atomic_helper_connector_create_state so this property can be used to test DRM_MODE_ATOMIC_RESET? [1] https://lore.kernel.org/r/[email protected] -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=16
