From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29CDE3AD52D for ; Fri, 18 Sep 2026 14:18:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741087; cv=none; b=G+EPkr38Dj5IddmiJaV1XBf/D72F/UInesjEwxOec+/UpHlkLwjHr3gIY9IY2USvRtew78TwKJcDyoh1QEwe0wQKhKs7a3KVYcNy3/KA9PKRQI0o30Zb8DrW9KX3hZe52SBh+si6Zi4UiHp+XQ1tQksTqTMpyOPLc/AtTokm/c8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741087; c=relaxed/simple; bh=sx1UwW3xDFuaLzMdKnc77CcZQnHJXWxl0xTfnmk86HM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=K4bIWWTpKNpDylEzwtrs2T8TUfqy9gLiLYTK34mXQ9BOoDSaJDAAynizAyni+8oLoJOGblPkV8xnVHaluDIAC1LVDEaNW2Z9crIuMwtJ9uZ78J12P6Lku2pPYSZhlM5Z7eIC/Nm2hQ++FWkGfRf1hRaoKqJwYeG611QZRdgdJjc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JJ83R+sn; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JJ83R+sn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0898F1F000FF; Fri, 18 Sep 2026 14:18:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741085; bh=F4UcFgN5ms+bbUQcU8tcSIW9gIecezr/8JMKx3gOffg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=JJ83R+sn88/JyA2gROVKjZ8kC7WSOIarK1qoaSgxjUL/0lrPLeEzOykFzCNr1PqhC PDYtTOVCIQtAOwD/yXD/LkOat0oRn/1GwgnGqoKvA5k7eziFAFRxKupt0PmaiaiJUC Ak6tWqDWi3GMQAj3eLSkau0lCOmj3MD5nrcgzwsQd5WQzZMblkL/363c2DMXIcGP+J 3ZMSTPFPcrrjC2eAvCmvP3YJmgUZBOTeCPXQtunFMhtJzYVeRGC20s7jMAEr8UcIrY wDYm56iMc7IHoD6uomWTQXomYev1zl6QW6KznfTTdNSgzpy80CcRA4KYUED2rNN1Ca zkxu6orVEs/TA== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:50 +0200 Subject: [PATCH v4 01/13] drm/atomic: Switch to krealloc_array() in drm_atomic_get_private_obj_state() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-1-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1700; i=mripard@kernel.org; h=from:subject:message-id; bh=sx1UwW3xDFuaLzMdKnc77CcZQnHJXWxl0xTfnmk86HM=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPfg1+G6+il6lxe27/4LG+mStN70hbhxG5zK88uuc4 l+16O/rmMrCIMzJICumyPJEJuz08vbFVQ72K3/AzGFlAhnCwMUpABOJsGZseG//d21frafz+wtf /oq8EVt5VmtFovP9i5MdtjQXvVnsc2SmwL0us5NRSgnNhkzOJ0POM9YnhpR+Y2/UM3xoHp966EO oWobZ5+nWHuH/UpcZVeqaSZ5q/mW5tmtC3d6cS7+EBZ/3GAMA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The drm_atomic_get_private_obj_state() function manually computes the allocation size by multiplying the element count by the element size before passing it to krealloc(). krealloc_array() handles this multiplication internally and includes overflow checking. Switch to it and drop the now-unused size variable. Suggested-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 9bb761eda59f..aa47c647df31 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1077,11 +1077,10 @@ EXPORT_SYMBOL(drm_atomic_private_obj_fini); struct drm_private_state * drm_atomic_get_private_obj_state(struct drm_atomic_commit *state, struct drm_private_obj *obj) { int index, num_objs, ret; - size_t size; struct __drm_private_objs_state *arr; struct drm_private_state *obj_state; =20 WARN_ON(!state->acquire_ctx); drm_WARN_ON(state->dev, state->checked); @@ -1093,12 +1092,12 @@ drm_atomic_get_private_obj_state(struct drm_atomic_= commit *state, ret =3D drm_modeset_lock(&obj->lock, state->acquire_ctx); if (ret) return ERR_PTR(ret); =20 num_objs =3D state->num_private_objs + 1; - size =3D sizeof(*state->private_objs) * num_objs; - arr =3D krealloc(state->private_objs, size, GFP_KERNEL); + arr =3D krealloc_array(state->private_objs, num_objs, + sizeof(*state->private_objs), GFP_KERNEL); if (!arr) return ERR_PTR(-ENOMEM); =20 state->private_objs =3D arr; index =3D state->num_private_objs; --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C451739DBFA for ; Fri, 18 Sep 2026 14:18:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741091; cv=none; b=WTDhtb2/JGtFRkGGrZt1JSPtr6sBgrqOwUBqM1DY4IbgUxxaYAJu5v0AUPL1nmFIA/7f/ieHccrXjhhXAFzQByUnJDECOa0z8UkmRwOW24i115Ajt5Byz6LfpdORYNS8KydNFOjX63byXz8rjuXkyKEjrAbH0cIklOIEqoZrz7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741091; c=relaxed/simple; bh=i2WrNw8zpdTRI6O4z1Zz2vaXFVByyUcTvN7F0qMG0cg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=E9rSNG2IiG1CFu5hVF8jyAnbbw9fI169DtsYjEgl233u1Vn4/vdlTkL4U8ZE9tMzPZqkcWqaQ+zhsBjic/cqNklNMMVzTFZBMkZrHUO8ZxruIJvHmTSYpChSM1hoxT729qifB5GOLt5mR+80ulnviv4VIY8ijy2c5ONKcS0byzs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OcI/DrBf; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OcI/DrBf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 072D91F000FF; Fri, 18 Sep 2026 14:18:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741089; bh=kqkLo5Oca9UYfgJKcAHvGrarQb/IzNFnksb0I0ZXGIg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=OcI/DrBfL1PXVFVO6VROiBOi+lpr09PMVynXjPFz/YoGFrz9aulepvIgP4s1L0zjd 0VmBdVy8zYxFuJymp+ndRA5Gm5cci+riXdluscEsKQQ08pLCtRLL9JNOO6d8LAdYfs E2Ue9aaNgximay1Qj7bM3Dh34zwkPM9qy/Qi+5xiXE/ZxapTgh6gLBQTG3dR1WBT8l 2KsuMzdH0ck63Ik03VvtbNPQdd/dC6XbqNePp6YOvKeH9r5N77efJfb5ecm00KKmrj JrOUgwm0dFQSMaK1sa8CJv34O6jjTIBUEcD0QnEmxK8g0WdpPQoRa6tHDwYOuwyoHL +GTSUf8nlF6Ww== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:51 +0200 Subject: [PATCH v4 02/13] drm/atomic: Use __GFP_ZERO instead of explicit memset in drm_atomic_get_private_obj_state() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-2-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1437; i=mripard@kernel.org; h=from:subject:message-id; bh=i2WrNw8zpdTRI6O4z1Zz2vaXFVByyUcTvN7F0qMG0cg=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPQSMnPctTRYN4T8c82Va0XbLLiHPrKzcqf9S33VOX q/UpRDTMZWFQZiTQVZMkeWJTNjp5e2LqxzsV/6AmcPKBDKEgYtTACYiYMhYxZxhy9sccbb62uVl Tf0plwRlyl9VzmGT2ZCt8be1kl+Li5fHZvLBrj+f5l/d98TPfqcgYw1f97JkkX4POysX18wJG7T qSu4f9tFeWbV13zft3LMeM66aybpWaq5QkH8Q473t8rp7BwA= X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The drm_atomic_get_private_obj_state() function allocates a new entry in the private_objs array using krealloc_array(), then zeroes the new entry with a separate memset() call. However, since krealloc_array() already supports the __GFP_ZERO flag to zero newly allocated memory, the explicit memset() is redundant. Pass __GFP_ZERO to krealloc_array() and drop the manual memset(). Suggested-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index aa47c647df31..43b58e9b25e4 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1093,17 +1093,16 @@ drm_atomic_get_private_obj_state(struct drm_atomic_= commit *state, if (ret) return ERR_PTR(ret); =20 num_objs =3D state->num_private_objs + 1; arr =3D krealloc_array(state->private_objs, num_objs, - sizeof(*state->private_objs), GFP_KERNEL); + sizeof(*state->private_objs), GFP_KERNEL | __GFP_ZERO); if (!arr) return ERR_PTR(-ENOMEM); =20 state->private_objs =3D arr; index =3D state->num_private_objs; - memset(&state->private_objs[index], 0, sizeof(*state->private_objs)); =20 obj_state =3D obj->funcs->atomic_duplicate_state(obj); if (!obj_state) return ERR_PTR(-ENOMEM); =20 --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C52C34EE87C for ; Fri, 18 Sep 2026 14:18:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741095; cv=none; b=NPY+a21xtoX6alMX4ni8ugSG3eG+KXHmBN0+cn/9yEFoIzp91hA0tpQ+CIKuiYSRaoS9BgOqu8Tp6xCEYEVfcIC8MflM3kJnPN4BfseOw24ygiqy3bK/OYytG4jZ6IHzn+WPf1v8oxLMPXzXYDaRUb3Sr6b/BWQPJnPhAvgPx/I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741095; c=relaxed/simple; bh=QGxTju+P6OmxblkkOc/G7V6i744GeSNDFj3K6kdMM7Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jgc6QL0anb23AtW9sE52xgWJfCgR6CzRUp5AUoWg3HV+s8lbWReXEH/nEM9YfgKTpX9qghdv+Qoe0LEAffu6XcurUK/Vq3rEB3n9XbT1dZqitmsKa88kU0ycWHx/tr2q8R5FZ8RRAxi3YgTbNU9/7dvu+RBvpJvXXoY5WE6vDtM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KI0+AvZy; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KI0+AvZy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C28A11F000FF; Fri, 18 Sep 2026 14:18:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741093; bh=yX6VtmC9ZWWYErdutyz3INiDSj6zlwe+CO7hZeNh2ls=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=KI0+AvZyz+DFyf2wVg+qBgJWkhbvlKrWqFih5S0krV4loP1hX2khX0lxuF1oDm2y1 CwWd9lYlN/DPz6uEkKJMbUaD6zqW7Y5hcjEWA9Z9h1PDROtjEaRczayROIQSgpy8Uy Mk8H6/1DDycDB8AUKI8NAhOsxEw2UaafkCWhbHsXF6DvmP6y/J6QgLskvJPqcy4muJ S0UAqznHSNm0h6Q/64uRjpEHcpFbwnrVt6B7qS6mub8Ds4QL9LQrHMicgRhu9a5TBi 7iz35ZTWvWUGZ2M2eE3LVg2ouXMibkYRX8W1JPfEbYfFhWcQQcGDU0yCEPf4Qq57Cc 35d8Oe1VFAx+w== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:52 +0200 Subject: [PATCH v4 03/13] drm/atomic: Use __GFP_ZERO instead of explicit memset in drm_atomic_get_connector_state() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-3-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1560; i=mripard@kernel.org; h=from:subject:message-id; bh=QGxTju+P6OmxblkkOc/G7V6i744GeSNDFj3K6kdMM7Y=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPQS2P1i4NHT6sV1pZ+fs8JwT03Lp/q6VkZM26r/Kj z2UVvC8p2MqC4MwJ4OsmCLLE5mw08vbF1c52K/8ATOHlQlkCAMXpwBM5NtUxjpNoyDDnHeK8zfZ 6n3eHeHUvLaw+9JUacW9yRVXt0o9mxp2PsdqblD/fCevajG/6mlTHjHWWWzQ4LUw+5I60f7n385 U52De/8INboLX4pjVZ2kHct2eFqO12s9tT6QzV8DnEp1Tms0A X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The drm_atomic_get_connector_state() function grows the connectors array with krealloc_array() when the requested connector index exceeds the current allocation, then zeroes the new entries with a separate memset() call. Since krealloc_array() supports the __GFP_ZERO flag to zero newly allocated memory, the explicit memset() is unnecessary. Pass __GFP_ZERO to krealloc_array() and drop the manual memset(). Suggested-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 43b58e9b25e4..80436adcfb7f 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1388,18 +1388,15 @@ drm_atomic_get_connector_state(struct drm_atomic_co= mmit *state, if (index >=3D state->num_connector) { struct __drm_connnectors_state *c; int alloc =3D max(index + 1, config->num_connector); =20 c =3D krealloc_array(state->connectors, alloc, - sizeof(*state->connectors), GFP_KERNEL); + sizeof(*state->connectors), GFP_KERNEL | __GFP_ZERO); if (!c) return ERR_PTR(-ENOMEM); =20 state->connectors =3D c; - memset(&state->connectors[state->num_connector], 0, - sizeof(*state->connectors) * (alloc - state->num_connector)); - state->num_connector =3D alloc; } =20 connector_state =3D drm_atomic_get_new_connector_state(state, connector); if (connector_state) --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5629E4F68D7 for ; Fri, 18 Sep 2026 14:18:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741098; cv=none; b=lApHTcEnEGCXMJIwPHwj+5gZMLJI9gjrhBGzvpWHjl7EEMEHmsyU53NyHQIM1kh3ySaca+x4ccLPeoSvBV8G0ftdXXeu1qNE75WvkQL2YCBC3544Z9hcYdEThOgapp/+QMGYw/Nz512M5PeYZ9Zrd8GsU7vMU2S4zev9a17VdH8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741098; c=relaxed/simple; bh=EahHIB+82aiYlh6Ob+7rXwGmj9ORLofauuIYcAtEVoc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=T5G3OA3pcizY3J66mkwz51DsWAdIyzUw8gPgX1hELq09sQDpXH3rDOOJLrkHL1VPK7+sOFBOWD7rTsR/CP3rQ47XTINkND/l1JH1SSPKn5JCuD3TPgdvprHQhVsJtgew85CbUE17768ldYpallXzs5fsOwWvrmG1E7fZSq5kWMM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jTTkDKvU; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jTTkDKvU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7FC5F1F00898; Fri, 18 Sep 2026 14:18:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741097; bh=Wm/cjA47XwWzJbdZtNRqfomyf11E7/lPxwK2lVerdU0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=jTTkDKvUpo9VVDbDnp4hfGZv/C56KWYFca7Ul99QB8+PsgzA5s/VTpN0W5c1KCz5K tGbic/6ia1kAH3flyrJERa4Rmte7sCAirFf99LvQ1XOYe0BgJStccRDYF7DtvsSRFk OmBbAUno3bVy6seuZFQDiV/UiKnMpVJCRgxupvhD6bQT7wPfToSVwoWg1iHU6f+IZF 3+KKcaCM/rTNZrjxbpk2X2I+05cwiM8ps/ld8hWxU2SxQSHlVHDd5rzG4oq3AN4zsR guT8RcrhCQhjdcpN6X1ktx+k/s6REIQaBhPJ6TQylAtCLIftR2z/Dg63+HAH9qYb5c g7DqIBhQwYd4Q== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:53 +0200 Subject: [PATCH v4 04/13] drm/atomic: Create function to insert CRTC state into a commit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-4-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2660; i=mripard@kernel.org; h=from:subject:message-id; bh=EahHIB+82aiYlh6Ob+7rXwGmj9ORLofauuIYcAtEVoc=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPQQ3CC9LrxN+8furxRItoxPSpVcf3szK+W0vK7WYX e/J+YaSjqksDMKcDLJiiixPZMJOL29fXOVgv/IHzBxWJpAhDFycAjARThbG+sCdH+/zntWVkOFI bZt16MntG+Xry2b9KeFtNbQwztu1bsf6/Y+sJ3+cqBSWndN7edsiHsb6HFHureeMdpnJPNRMjvi RUBO9/cJCSY3HlYdbHRpPXngWsOroyav73C/sfCVaJlfo+3MLAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D drm_atomic_get_crtc_state() allocates a new CRTC state by duplicating the current one and inserts it into the atomic commit as a single operation. However, a later change will need to insert a CRTC state into a commit without going through the full allocation and duplication path in drm_atomic_get_crtc_state(). Extract the state insertion logic into a new static drm_atomic_commit_set_crtc_state() helper, and convert drm_atomic_get_crtc_state() to use it. Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 80436adcfb7f..178eca95d0e3 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -431,10 +431,25 @@ void __drm_atomic_commit_free(struct kref *ref) =20 drm_dev_put(dev); } EXPORT_SYMBOL(__drm_atomic_commit_free); =20 +static void drm_atomic_commit_set_crtc_state(struct drm_atomic_commit *com= mit, + struct drm_crtc *crtc, + struct drm_crtc_state *crtc_state) +{ + int index =3D drm_crtc_index(crtc); + + drm_modeset_lock_assert_held(&crtc->mutex); + + commit->crtcs[index].state_to_destroy =3D crtc_state; + commit->crtcs[index].old_state =3D crtc->state; + commit->crtcs[index].new_state =3D crtc_state; + commit->crtcs[index].ptr =3D crtc; + crtc_state->state =3D commit; +} + /** * drm_atomic_get_crtc_state - get CRTC state * @state: global atomic state object * @crtc: CRTC to get state object for * @@ -453,11 +468,11 @@ EXPORT_SYMBOL(__drm_atomic_commit_free); */ struct drm_crtc_state * drm_atomic_get_crtc_state(struct drm_atomic_commit *state, struct drm_crtc *crtc) { - int ret, index =3D drm_crtc_index(crtc); + int ret; struct drm_crtc_state *crtc_state; =20 WARN_ON(!state->acquire_ctx); drm_WARN_ON(state->dev, state->checked); =20 @@ -471,15 +486,11 @@ drm_atomic_get_crtc_state(struct drm_atomic_commit *s= tate, =20 crtc_state =3D crtc->funcs->atomic_duplicate_state(crtc); if (!crtc_state) return ERR_PTR(-ENOMEM); =20 - state->crtcs[index].state_to_destroy =3D crtc_state; - state->crtcs[index].old_state =3D crtc->state; - state->crtcs[index].new_state =3D crtc_state; - state->crtcs[index].ptr =3D crtc; - crtc_state->state =3D state; + drm_atomic_commit_set_crtc_state(state, crtc, crtc_state); =20 drm_dbg_atomic(state->dev, "Added [CRTC:%d:%s] %p state to %p\n", crtc->base.id, crtc->name, crtc_state, state); =20 return crtc_state; --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C7414FC320 for ; Fri, 18 Sep 2026 14:18:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741102; cv=none; b=FrJ9l21Ca47eTSrBXFTRwV+I8zafUq51CzM+4YMkQfn+ZxBIWat6YE1fSvPXWUZcd+4YEksu3Gpec/NarqcYbQC3xkQb69YbC7x6USVWHAY8btcanONYBDtzKb+OwkeZvLWLLMQ4sLTkamk6JRGnjGBNHjgZfiopwB+xs2/vEaY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741102; c=relaxed/simple; bh=umHqq+vvO35oRQTGbn6Ts9IWZXv3q3bKljlSLnPlabs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jHTG7E59jgfIPAZiqa5XuWfJbnu2/p2yH80jtAzTlYkenBGYueXa4TBHTxru/VlH95yrJSTCE9NnWhflsVZ2OncxEAlq2ihMZdys0qG4J0T4F9Odgn2AXYwRUezBQX2/zWOcUku1gFTRLOUmrWz8kLHi8tOXtTP1m8hLzGTjU7Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=khBtPNeF; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="khBtPNeF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 341A91F000FF; Fri, 18 Sep 2026 14:18:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741100; bh=Z0JGJXj4Um4YfgnYDwlmuWCSYIBxIj5z/95Lrd2v0QQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=khBtPNeFOR+fqZXgw17/gHpztu/6pI9N2axu1SE737tRXZ59wEiSuh9f8naGHM6qj I91x51Nd3rJHJ8b0h0zFKfY+7ZEU8GgIgU5x2oc1Y70fHfW6GNHdc7oxMMoQ48qxh9 XPF2AkQwnTW1CjEL5fBZL1HjaPXHOHqminZ/3p0GTKT8sGXlhYNBsRhN7oMvyMBec6 RzFcL/rM+6R8at1/rn0qsCyfAAcmf3WLES/FzazvUNRZ/i5FpDiDzOeG2rvef69bqi uVjTxu9wmZhcxBWqUbmbsfZIuPQZWgXevvB8WSdVCxKK6zJv5zr+0YrX3JIoMQeS2K V5fg3YGOfE3eA== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:54 +0200 Subject: [PATCH v4 05/13] drm/atomic: Create function to insert plane state into a commit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-5-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2731; i=mripard@kernel.org; h=from:subject:message-id; bh=umHqq+vvO35oRQTGbn6Ts9IWZXv3q3bKljlSLnPlabs=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPQQLt37JqNPsmLhUM3/qroMBjnIVXPxms39GXA0+H HpPIUyoYyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAEzEajJjfb2Z0jMvt82a2uF6 KzLe7nrmV6IaVC9sbsoZa87ks8leaNadLTqu5w1MS16qXP/4f2skY8MvecfwWwrfVZqVfnBVnLA 8wdvE6HDQZfIapfU/xU8e+RPyovDb9xkMz8scOUondj69ogcA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D drm_atomic_get_plane_state() allocates a new plane state by duplicating the current one and inserts it into the atomic commit as a single operation. However, a later change will need to insert a plane state into a commit without going through the full allocation and duplication path in drm_atomic_get_plane_state(). Extract the state insertion logic into a new static drm_atomic_commit_set_plane_state() helper, and convert drm_atomic_get_plane_state() to use it. Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 178eca95d0e3..b26458ee98d8 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -628,10 +628,25 @@ static int drm_atomic_connector_check(struct drm_conn= ector *connector, } =20 return 0; } =20 +static void drm_atomic_commit_set_plane_state(struct drm_atomic_commit *co= mmit, + struct drm_plane *plane, + struct drm_plane_state *plane_state) +{ + int index =3D drm_plane_index(plane); + + drm_modeset_lock_assert_held(&plane->mutex); + + commit->planes[index].state_to_destroy =3D plane_state; + commit->planes[index].old_state =3D plane->state; + commit->planes[index].new_state =3D plane_state; + commit->planes[index].ptr =3D plane; + plane_state->state =3D commit; +} + /** * drm_atomic_get_plane_state - get plane state * @state: global atomic state object * @plane: plane to get state object for * @@ -646,11 +661,11 @@ static int drm_atomic_connector_check(struct drm_conn= ector *connector, */ struct drm_plane_state * drm_atomic_get_plane_state(struct drm_atomic_commit *state, struct drm_plane *plane) { - int ret, index =3D drm_plane_index(plane); + int ret; struct drm_plane_state *plane_state; =20 WARN_ON(!state->acquire_ctx); drm_WARN_ON(state->dev, state->checked); =20 @@ -669,15 +684,11 @@ drm_atomic_get_plane_state(struct drm_atomic_commit *= state, =20 plane_state =3D plane->funcs->atomic_duplicate_state(plane); if (!plane_state) return ERR_PTR(-ENOMEM); =20 - state->planes[index].state_to_destroy =3D plane_state; - state->planes[index].ptr =3D plane; - state->planes[index].old_state =3D plane->state; - state->planes[index].new_state =3D plane_state; - plane_state->state =3D state; + drm_atomic_commit_set_plane_state(state, plane, plane_state); =20 drm_dbg_atomic(plane->dev, "Added [PLANE:%d:%s] %p state to %p\n", plane->base.id, plane->name, plane_state, state); =20 if (plane_state->crtc) { --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3E554FC332 for ; Fri, 18 Sep 2026 14:18:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741106; cv=none; b=B4kzhe+gpgDYY7MJCbuuZFg2vfDtVeKwuYB8xehzYUXQ8gLgHMkcXGwnArMqT+TKbvfixY9rFPffGsQfaHLuv7o7C6RQqOhNab6KIaqqYlIITxnDyZpIgkUAbchlVJO0HGvkajToO3DZSwG9pASSYylWH7Jg6yoXWuMz6VFlcu8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741106; c=relaxed/simple; bh=V5KSC2Y3Q/9B+8Et2em9ISdPFi1fOLtjjcyNtpS0Gu4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aOS0h2FX4ghTCewMliWfYai24gV0w80Fkn3rL3iTobPtIY0SDng3vhSbrT4wEsvWTgENuW18lQxm7Dl0gUcdkjBJMfuqvNq7sxVgVaDiIrc1ZUsqbTHajAmMhBimcmxyjl/bKbTzXBUHAL9g/ZQ7NJ7nTt4z/vZyvBF2GKaxM2U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kxbuRqIL; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kxbuRqIL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DC5791F000FF; Fri, 18 Sep 2026 14:18:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741104; bh=OKuaZrfatOHlSR0dx9iMm6UqgMduVRvClEIVFgHduLg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=kxbuRqILT7AvQZnCqRCQQR/kAItC02XBOKx51Q3OSfAzM6WkzZSQu0Djm9TYRBh0D gB9RiOhvjEwy6WXStqLwOggnVbLkaQ2GIfy2Qcb7aYz+sHuwgl4Cl8S69Y+UhYAm7n wZ6xisxRZLgcL+QxuD4WrHN2iK331YHbmtBzkw5/FOc9OyFx1I3HDw3OQABLaPn5Iw nTxRt6OPgIdMd/V8wtcXGjXUmexZVOZIPLnwLU2lrK4fcWSwBabGNXWY5OT9BCxaJb DiesqSZKHL4r4xxi4fuKV8vCqy6sQ1P0IbbNANqUY2VKyJIDpdxdBzMdKTSoTQ0VHh 2p6J1JuGtSt4A== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:55 +0200 Subject: [PATCH v4 06/13] drm/atomic: Create function to insert colorop state into a commit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-6-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2881; i=mripard@kernel.org; h=from:subject:message-id; bh=V5KSC2Y3Q/9B+8Et2em9ISdPFi1fOLtjjcyNtpS0Gu4=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPYTSdrrOELLqWfLrwsmom4xPj07s2SAfP6lz03Zm5 jszlAJ3d0xlYRDmZJAVU2R5IhN2enn74ioH+5U/YOawMoEMYeDiFICJ/D/D2HCd24lhV8Rlx4IV XREh9ocsLH3SZ+tKyewL5Fk+U75a1zrqxMuwS86rFJeG737yuqXrD2ND0+/0PYeSTjL9CbBrZri ZVF9hfj7u2KPbu81a+vcdfFYa3sratnFX7jTNJ74FZoKWYdsA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D drm_atomic_get_colorop_state() allocates a new colorop state by duplicating the current one and inserts it into the atomic commit as a single operation. However, a later change will need to insert a colorop state into a commit without going through the full allocation and duplication path in drm_atomic_get_colorop_state(). Extract the state insertion logic into a new static drm_atomic_commit_set_colorop_state() helper, and convert drm_atomic_get_colorop_state() to use it. Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index b26458ee98d8..807b575ecc54 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -702,10 +702,25 @@ drm_atomic_get_plane_state(struct drm_atomic_commit *= state, =20 return plane_state; } EXPORT_SYMBOL(drm_atomic_get_plane_state); =20 +static void drm_atomic_commit_set_colorop_state(struct drm_atomic_commit *= commit, + struct drm_colorop *colorop, + struct drm_colorop_state *colorop_state) +{ + int index =3D drm_colorop_index(colorop); + + drm_modeset_lock_assert_held(&colorop->plane->mutex); + + commit->colorops[index].state_to_destroy =3D colorop_state; + commit->colorops[index].old_state =3D colorop->state; + commit->colorops[index].new_state =3D colorop_state; + commit->colorops[index].ptr =3D colorop; + colorop_state->state =3D commit; +} + /** * drm_atomic_get_colorop_state - get colorop state * @state: global atomic state object * @colorop: colorop to get state object for * @@ -721,11 +736,11 @@ EXPORT_SYMBOL(drm_atomic_get_plane_state); */ struct drm_colorop_state * drm_atomic_get_colorop_state(struct drm_atomic_commit *state, struct drm_colorop *colorop) { - int ret, index =3D drm_colorop_index(colorop); + int ret; struct drm_colorop_state *colorop_state; =20 WARN_ON(!state->acquire_ctx); =20 colorop_state =3D drm_atomic_get_new_colorop_state(state, colorop); @@ -738,15 +753,11 @@ drm_atomic_get_colorop_state(struct drm_atomic_commit= *state, =20 colorop_state =3D drm_atomic_helper_colorop_duplicate_state(colorop); if (!colorop_state) return ERR_PTR(-ENOMEM); =20 - state->colorops[index].state_to_destroy =3D colorop_state; - state->colorops[index].ptr =3D colorop; - state->colorops[index].old_state =3D colorop->state; - state->colorops[index].new_state =3D colorop_state; - colorop_state->state =3D state; + drm_atomic_commit_set_colorop_state(state, colorop, colorop_state); =20 drm_dbg_atomic(colorop->dev, "Added [COLOROP:%d:%d] %p state to %p\n", colorop->base.id, colorop->type, colorop_state, state); =20 return colorop_state; --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82C204FC352 for ; Fri, 18 Sep 2026 14:18:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741109; cv=none; b=B9MlXfANRok0t6Hze8N89rrQg4BNu40vhbXsQ/xbShKIW6ccHQrDZPB+g0FyajQNNnCrNjRhIME0Jz48b9hDpLo0vdhz56tTAYRw3fQd2xBlgaB6e6CghtzgbPVqxXNsnba1GZIDrqVZErOLnQfmc9O5Y8dcTdutEHETB9CztVk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741109; c=relaxed/simple; bh=BRJTGw+97onV97kbziQAIAbVIFdl8pBQs6TCy6DnSP8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iJO4WLE6QIxGD2dV+QtvlFuY1G4dL2XjEgQzkDbyAdf8+TPRLQ3bh3h80R14NJ+ZjrI3dtVjVaZKkcSx1JEYWyVvFHFwUcUxwK82lePMm2hPryR8uZ8N49dkfRvNjBxculrir1OWDcyCOh/7NNw1ZTfoGCOPZ4Wa0ytqZ2udEhE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=B1hHrrcP; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="B1hHrrcP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A2B2A1F00898; Fri, 18 Sep 2026 14:18:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741108; bh=0WzE1B1LSthpsJjNPaw9LSFgpt2AeBHiUQMGOCcRaIg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=B1hHrrcP0j7SijW2Ss3v7PFTA0g5g53uklPshgUNzusDbeIIB+lLwBbNIk/di2/Ug Wmmfyvbj+HfW+lzHNFR19aBSZI902WfG09smN8W64grCCnbAxF/Fe29wZ92vSbcgHj Qf6dJHKQphhoqMFO0iSXM9nSvbx7sEi4lJ7GD+o+a9vhIIusi+fl6fTh+lgA7/3lo7 sW4uLxPcG7gYbniBfA9Ku5EoNa1CCV2LZmyvwLjyPLoN2OggRd6IijEh6tVB4GLngS 8EoXNM6UdPRLLb6of8hXMUm2bvu7VUhYG/jTgff5+LbyrtRIb/5dCzDw2dzMHggjGb q6couLbjfnA8A== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:56 +0200 Subject: [PATCH v4 07/13] drm/atomic: Create function to insert private obj state into a commit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-7-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3785; i=mripard@kernel.org; h=from:subject:message-id; bh=BRJTGw+97onV97kbziQAIAbVIFdl8pBQs6TCy6DnSP8=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPYSehL+7MVv/0zrT+ZvLzrGsWfP2wIm/SUsD7z6O/ blW+w9rV8dUFgZhTgZZMUWWJzJhp5e3L65ysF/5A2YOKxPIEAYuTgGYCPsvxnr/uzuYq0L4fhzk jF+5//T5rc5255+cDKhb08fOljKlKEMxcaG85a774Y80pf0caqOj9BgbDjq4iVwPaTJw/nF+XVT KvCtxa92ONC5xPCrWYmQQ/bXQeMcl7Rvs/ua+s2dbba3kfRcGAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D drm_atomic_get_private_obj_state() allocates a new private object state by duplicating the current one and inserts it into the atomic commit as a single operation. However, a later change will need to insert a private object state into a commit without going through the full allocation and duplication path in drm_atomic_get_private_obj_state(). Extract the state insertion logic, including the array reallocation, into a new static drm_atomic_commit_set_private_obj_state() helper, and convert drm_atomic_get_private_obj_state() to use it. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 53 +++++++++++++++++++++++++++++-----------= ---- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 807b575ecc54..513e91ad2fdc 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1093,10 +1093,39 @@ drm_atomic_private_obj_fini(struct drm_private_obj = *obj) obj->funcs->atomic_destroy_state(obj, obj->state); drm_modeset_lock_fini(&obj->lock); } EXPORT_SYMBOL(drm_atomic_private_obj_fini); =20 +static int drm_atomic_commit_set_private_obj_state(struct drm_atomic_commi= t *commit, + struct drm_private_obj *obj, + struct drm_private_state *obj_state) +{ + struct __drm_private_objs_state *arr; + int index, num_objs; + + drm_modeset_lock_assert_held(&obj->lock); + + num_objs =3D commit->num_private_objs + 1; + arr =3D krealloc_array(commit->private_objs, num_objs, + sizeof(*commit->private_objs), GFP_KERNEL | __GFP_ZERO); + if (!arr) + return -ENOMEM; + + commit->private_objs =3D arr; + index =3D commit->num_private_objs; + + commit->private_objs[index].state_to_destroy =3D obj_state; + commit->private_objs[index].old_state =3D obj->state; + commit->private_objs[index].new_state =3D obj_state; + commit->private_objs[index].ptr =3D obj; + obj_state->state =3D commit; + + commit->num_private_objs =3D num_objs; + + return 0; +} + /** * drm_atomic_get_private_obj_state - get private object state * @state: global atomic state * @obj: private object to get the state for * @@ -1109,12 +1138,11 @@ EXPORT_SYMBOL(drm_atomic_private_obj_fini); */ struct drm_private_state * drm_atomic_get_private_obj_state(struct drm_atomic_commit *state, struct drm_private_obj *obj) { - int index, num_objs, ret; - struct __drm_private_objs_state *arr; + int ret; struct drm_private_state *obj_state; =20 WARN_ON(!state->acquire_ctx); drm_WARN_ON(state->dev, state->checked); =20 @@ -1124,30 +1152,19 @@ drm_atomic_get_private_obj_state(struct drm_atomic_= commit *state, =20 ret =3D drm_modeset_lock(&obj->lock, state->acquire_ctx); if (ret) return ERR_PTR(ret); =20 - num_objs =3D state->num_private_objs + 1; - arr =3D krealloc_array(state->private_objs, num_objs, - sizeof(*state->private_objs), GFP_KERNEL | __GFP_ZERO); - if (!arr) - return ERR_PTR(-ENOMEM); - - state->private_objs =3D arr; - index =3D state->num_private_objs; - obj_state =3D obj->funcs->atomic_duplicate_state(obj); if (!obj_state) return ERR_PTR(-ENOMEM); =20 - state->private_objs[index].state_to_destroy =3D obj_state; - state->private_objs[index].old_state =3D obj->state; - state->private_objs[index].new_state =3D obj_state; - state->private_objs[index].ptr =3D obj; - obj_state->state =3D state; - - state->num_private_objs =3D num_objs; + ret =3D drm_atomic_commit_set_private_obj_state(state, obj, obj_state); + if (ret) { + obj->funcs->atomic_destroy_state(obj, obj_state); + return ERR_PTR(ret); + } =20 drm_dbg_atomic(state->dev, "Added new private object %p state %p to %p\n", obj, obj_state, state); =20 --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1BCB54FC35B for ; Fri, 18 Sep 2026 14:18:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741113; cv=none; b=S2AtkBjS3YRwYBxbCsff5cJuGwnZZr/v60vc+F8QZnuOYrL2EdWHRanrFtvbej5fj6e9NjfIwkgO+YqlAFv6ZWGUQkYJ7kzvIUsVIeO9zQqU/SrB7YRdk4wIfDE67kDUxIQYnEhbd3YX1h+RDWyLNCSi4TnDNu9c/94Ra1vs2OE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741113; c=relaxed/simple; bh=wXk2Y5M+awlDWKtwntUWZ0UdnIAVQvnJhc1Lp9fPWU4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cY2VFMqvX+0B+Siylgi3qmokPcxLo63xFs6vgVFkT3VG3wOGf9GbQ2R0pqoE4JHQNBcRfrlhcZLuaqClJ0cDEXtnC2r9WzQUv2Lg4E7booRWw/2X5G0H1aAxc5cwJZj4ZjzdnifBCunzcTtlUWNbR2oDOzIS0Fd1QIVn7Ln545c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=S5iNTDwD; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="S5iNTDwD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 72BBE1F00898; Fri, 18 Sep 2026 14:18:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741112; bh=wyTpr/ZMCwHBif2mu3Ul/cDM0OI59usyJD3PsBn5vRg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=S5iNTDwDsAEcm82lQlAYVIihKMskQJYvk+1MTogcp6voagEs2BuoXBTAD61U7DL4E TaZ7pnZd2Sy5/Fcs/RYtJZHYNdCk02hkYcDP4Vs3Dc1C/rN/pl5cwAqA14A8a1JI8/ me7XXo/OujR4rhS56o4cZlezR/4e+Omh/hbRDJb/GknvxUp0oks5eaLN4zrGS1lOL+ tzZkWKcd8F50usuZDYQiI6uqDnldWQtY/ANLIQS6FqtvZ0KO7LlBRCaI7nSHsqDKu/ EwqLJ1YxABTblUhJq+VcgL2Y64xDqij5qvi4YBztoRSdg0Ne+vTGBtNVWMlYdO5O05 uV5R1iNrgCEwQ== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:57 +0200 Subject: [PATCH v4 08/13] drm/atomic: Create function to insert connector state into a commit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-8-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4215; i=mripard@kernel.org; h=from:subject:message-id; bh=wXk2Y5M+awlDWKtwntUWZ0UdnIAVQvnJhc1Lp9fPWU4=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPYTezPpte1OK+daU0qmzv1Wc2Xr8b9FmeZ2fcglf2 b5JB7bmdExlYRDmZJAVU2R5IhN2enn74ioH+5U/YOawMoEMYeDiFICJbHzGWCvtVNe5OvTSamVn bkkHlbKH/05PTDlxWyA4k6ui4KdZ6svSydwbHfdXvPbImaGzNsB7MmPDvMPzquokq+auXhsVGbb 4QPhe5k3RT7a9PflA+tPtnrnbwnMvriu+Mp0pNTp+x5Fk+y5TAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D drm_atomic_get_connector_state() allocates a new connector state by duplicating the current one and inserts it into the atomic commit as a single operation. However, a later change will need to insert a connector state into a commit without going through the full allocation and duplication path in drm_atomic_get_connector_state(). Extract the state insertion logic, including the dynamic array reallocation, into a new static drm_atomic_commit_set_connector_state() helper, and convert drm_atomic_get_connector_state() to use it. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 60 ++++++++++++++++++++++++++++------------= ---- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 513e91ad2fdc..81591173265d 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1402,10 +1402,42 @@ drm_atomic_get_new_crtc_for_encoder(struct drm_atom= ic_commit *state, =20 return conn_state->crtc; } EXPORT_SYMBOL(drm_atomic_get_new_crtc_for_encoder); =20 +static int drm_atomic_commit_set_connector_state(struct drm_atomic_commit = *commit, + struct drm_connector *connector, + struct drm_connector_state *connector_state) +{ + struct drm_mode_config *config =3D &connector->dev->mode_config; + int index =3D drm_connector_index(connector); + + drm_modeset_lock_assert_held(&config->connection_mutex); + + if (index >=3D commit->num_connector) { + struct __drm_connnectors_state *c; + int alloc =3D max(index + 1, config->num_connector); + + c =3D krealloc_array(commit->connectors, alloc, + sizeof(*commit->connectors), GFP_KERNEL | __GFP_ZERO); + if (!c) + return -ENOMEM; + + commit->connectors =3D c; + commit->num_connector =3D alloc; + } + + drm_connector_get(connector); + commit->connectors[index].state_to_destroy =3D connector_state; + commit->connectors[index].old_state =3D connector->state; + commit->connectors[index].new_state =3D connector_state; + commit->connectors[index].ptr =3D connector; + connector_state->state =3D commit; + + return 0; +} + /** * drm_atomic_get_connector_state - get connector state * @state: global atomic state object * @connector: connector to get state object for * @@ -1420,50 +1452,34 @@ EXPORT_SYMBOL(drm_atomic_get_new_crtc_for_encoder); */ struct drm_connector_state * drm_atomic_get_connector_state(struct drm_atomic_commit *state, struct drm_connector *connector) { - int ret, index; + int ret; struct drm_mode_config *config =3D &connector->dev->mode_config; struct drm_connector_state *connector_state; =20 WARN_ON(!state->acquire_ctx); drm_WARN_ON(state->dev, state->checked); =20 ret =3D drm_modeset_lock(&config->connection_mutex, state->acquire_ctx); if (ret) return ERR_PTR(ret); =20 - index =3D drm_connector_index(connector); - - if (index >=3D state->num_connector) { - struct __drm_connnectors_state *c; - int alloc =3D max(index + 1, config->num_connector); - - c =3D krealloc_array(state->connectors, alloc, - sizeof(*state->connectors), GFP_KERNEL | __GFP_ZERO); - if (!c) - return ERR_PTR(-ENOMEM); - - state->connectors =3D c; - state->num_connector =3D alloc; - } - connector_state =3D drm_atomic_get_new_connector_state(state, connector); if (connector_state) return connector_state; =20 connector_state =3D connector->funcs->atomic_duplicate_state(connector); if (!connector_state) return ERR_PTR(-ENOMEM); =20 - drm_connector_get(connector); - state->connectors[index].state_to_destroy =3D connector_state; - state->connectors[index].old_state =3D connector->state; - state->connectors[index].new_state =3D connector_state; - state->connectors[index].ptr =3D connector; - connector_state->state =3D state; + ret =3D drm_atomic_commit_set_connector_state(state, connector, connector= _state); + if (ret) { + connector->funcs->atomic_destroy_state(connector, connector_state); + return ERR_PTR(ret); + } =20 drm_dbg_atomic(connector->dev, "Added [CONNECTOR:%d:%s] %p state to %p\n", connector->base.id, connector->name, connector_state, state); =20 --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D52934FD7A1 for ; Fri, 18 Sep 2026 14:18:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741117; cv=none; b=twCeTbxbKGGjSPprL1J9SeRzY7GVtObmguzcwBU71PQ94u2ij+zwp4caT6bj4m6WuKKPHJYGYZqmmofWFHn6MGomFd0To9NXZNAJ4bBm3gDBOW01CfAYKj2ugehvmzwpcn9f9IEwY9ttO0tJukk5jbHRdhADF/KJheX1rhBI5d8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741117; c=relaxed/simple; bh=Y2C0R8Cqaha9hjFthUOVKj33fKhAPVyJIizpHUxj51g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ic/pypvPTYKi27C8xQrWAT7RA0kmf27Xsj74MfDwVotIkMr77Tu9MpA4p+cMw7R3Q54YJfXH+jz8tKh3bV2fpANE033/QPfm7/S9BIwwjPgCV0bgxY7XuseJQGn334nzAMEVgbpKQjHM7qy+MB5QjCqGSrEGdK0JIu5Xpa9PBn4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jfAkDGz3; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jfAkDGz3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 36BFE1F000FF; Fri, 18 Sep 2026 14:18:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741115; bh=YDMIPGUl+kZWgLXxI0SgyFsNQfsPJ7fl/r1DvGq25QY=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=jfAkDGz37yAhSEY1R60wyCUW/EjIKnBVWJEL5nyaVQcggh14NgtXqy/QGkn91Mn1A T9QUBUNn0EYoEdviGNuAgsZfyMzSEyx0uNBh52+vjwVdzEmiWVWu9t0YDkOcxCYIu4 t9DvbBByjg92th615fkTw1KiJ2wLzNW4V9e+1FcNJ1Bw2LZM83pK2Yaxlt6nPXppKj N6oBKwb1tgmgkaOeQOXrxtxgpoRl6sTb3gzdau1eTdYMJB+bxrKsA6ZTD7rWc5siou 1cBURuDLOg3EqjPT7nboMbMSXdp/acb1amj8Lm4ESno+iHfrr2lGR98x4DfGJgT7sE X0y1bQJy2Be8w== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:58 +0200 Subject: [PATCH v4 09/13] drm/atomic: Add drm_atomic_implements_create_state() helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-9-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3580; i=mripard@kernel.org; h=from:subject:message-id; bh=Y2C0R8Cqaha9hjFthUOVKj33fKhAPVyJIizpHUxj51g=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPYTdm7alft+z5d2u6u3afLO+v73Y2PDj+R4rNeYzI TejjHrbOqayMAhzMsiKKbI8kQk7vbx9cZWD/cofMHNYmUCGMHBxCsBEingY6/1CLgd33U48ttu3 hGXFzJlTOJKmOUuabTqq/bn1zT8uuYMfMjY7WxzcvMBXpbhRQP3vY8b6vDPbOHMid62581XY6c4 rsX5ZlUMTzG+8vTq9yzFHiDlviX70Pt93DybdcL3FMv+Jk9hpAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The atomic reset path will need to create pristine default states from scratch for every plane, CRTC, and connector. This requires all of them to implement the atomic_create_state hook. Introduce a drm_atomic_implements_create_state() helper that iterates over all planes, CRTCs, and connectors and returns whether they all provide the hook. Color operations are excluded since they always use drm_atomic_helper_colorop_create_state() directly. This will be used both as a precondition before filling a commit with default states, and to report the device capability to userspace. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 49 ++++++++++++++++++++++++++++++++++++++++= ++++ include/drm/drm_atomic.h | 2 ++ 2 files changed, 51 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 81591173265d..7a77051096c9 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1598,10 +1598,59 @@ drm_atomic_get_new_bridge_state(const struct drm_at= omic_commit *state, =20 return drm_priv_to_bridge_state(obj_state); } EXPORT_SYMBOL(drm_atomic_get_new_bridge_state); =20 +/** + * drm_atomic_implements_create_state - check if a device supports creatin= g pristine states + * @dev: DRM device + * + * Check whether every plane, CRTC, and connector in @dev implements the + * &drm_plane_funcs.atomic_create_state, &drm_crtc_funcs.atomic_create_sta= te, + * and &drm_connector_funcs.atomic_create_state hooks respectively. These = hooks + * are required to create default states from scratch rather than duplicat= ing + * the current state. + * + * Color operations are not checked because they always use + * drm_atomic_helper_colorop_create_state() and do not have a per-driver h= ook. + * + * Returns: + * True if all objects implement atomic_create_state, false otherwise. + */ +bool drm_atomic_implements_create_state(struct drm_device *dev) +{ + struct drm_connector_list_iter conn_iter; + struct drm_connector *connector; + struct drm_plane *plane; + struct drm_crtc *crtc; + + /* + * colorops don't have an atomic_create_state hook but + * drm_atomic_helper_colorop_create_state() + */ + + drm_for_each_plane(plane, dev) + if (!plane->funcs->atomic_create_state) + return false; + + drm_for_each_crtc(crtc, dev) + if (!crtc->funcs->atomic_create_state) + return false; + + 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); + + return true; +} +EXPORT_SYMBOL(drm_atomic_implements_create_state); + /** * drm_atomic_add_encoder_bridges - add bridges attached to an encoder * @state: atomic state * @encoder: DRM encoder * diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index 3ae35b09c0cf..94356566a514 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -700,10 +700,12 @@ int drm_crtc_commit_wait(struct drm_crtc_commit *comm= it); =20 struct drm_atomic_commit * __must_check drm_atomic_commit_alloc(struct drm_device *dev); void drm_atomic_commit_clear(struct drm_atomic_commit *state); =20 +bool drm_atomic_can_create_state(struct drm_device *dev); + /** * drm_atomic_commit_get - acquire a reference to the atomic state * @state: The atomic state * * Returns a new reference to the @state --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91AF74FDA4B for ; Fri, 18 Sep 2026 14:18:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741121; cv=none; b=kBaIofuuBnAGBNGUYgxdoURtXoah0jIRur9vAmcsxMgzNWTUQG0vVAxFLEQj08EPOjonc9tGM1wZ8ad3iTT318Sn7q2sfVn9puOGLNaZuZ8gsg4Idk9Xt8rdhOwMA7dVKMc//tVhoWK3Os15FVv9B3J5qXi8qxYI6ZBg8NZJ7Bs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741121; c=relaxed/simple; bh=inWTgkDtp0vChZ9VKuHwhKGj/PyO3yywRvlVuv2aAuM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hyHUAT5YIMoOemMiDiQRPVQ6ue00T8zNYBWfZEgAOht9Vw6efqPIjQxktHM5VmBpJpjc1vduQKi7QNoK1jhG9EoAGJ6e81Mzf0Kui55oESR889vY2Dhn8OqoHU7lKPFfHCCxUhm59BghiSbt/EKGr1E6ut11XLDXLzNXy/3MhSo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SEgeU/Hn; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SEgeU/Hn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EE0D41F000FF; Fri, 18 Sep 2026 14:18:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741119; bh=XS3XWsQS/wsJtDoSQO+mZMWhw7DtPyBFXXLY/FPwBKQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=SEgeU/HnYxhDq5V1fO8AS+IuEcp0vYFEr9p9DXDBIHAeE4XesjOMgUkzj35OsPhr5 rL2truSuMKBXLNs3CDla6u4QbEI9+w7MiMo/2sDP5vh3BbQxaiWirnjCCNdE8DhRRO EgwyFG5tnPyRglSa5X+rtgaLmqYPBjwvLMViGgS/8DLvwaBOAcX6RXkNwZW1SZHZyd zcf9a7NG7uxGV5iDHSUmIAbxkAxE7wG9NQqEEnn5FHtAFhT3vJwO8Y7yaMA4etVzUa STejFyRM+Uuo/QCsOh4lBHgEsQoi7SvZi1Ogad0B292RpFKFTDvcfXu3aTX4rZCjdG jqHrDp1SW8nlQ== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:17:59 +0200 Subject: [PATCH v4 10/13] drm/atomic: Allow filling a commit with pristine object states Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-10-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6028; i=mripard@kernel.org; h=from:subject:message-id; bh=inWTgkDtp0vChZ9VKuHwhKGj/PyO3yywRvlVuv2aAuM=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPYTjFF9ZagTnT2eXnnfP8HyvOHdUg2SHcU56WlTfk tL/M9s6prIwCHMyyIopsjyRCTu9vH1xlYP9yh8wc1iZQIYwcHEKwEQuGDM2PGeJVuX54uanYXhO cYYr0/5La7QYGjO2NPyNXf9mr9TZl4e80kV/nf27rHP1gnNZRaf+M9apJzBHrypfcE1Z/OGxOXe vHFwo96dSepJ39vrwTtdfSZbtb5fsDDzGnvjwNkuz9pH3bsEA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The upcoming DRM_MODE_ATOMIC_RESET flag will need to create an atomic commit that brings the entire device back to a pristine state, as if no configuration had ever been applied. Create drm_atomic_commit_fill_with_defaults() which iterates over all CRTCs, planes, connectors, and color operations in the device and inserts a fresh default state for each one into the commit. This uses the atomic_create_state() hooks rather than atomic_duplicate_state(), since atomic_create_state() provides exactly this pristine state on a per-object basis. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 108 +++++++++++++++++++++++++++++++++++++++= ++++ drivers/gpu/drm/drm_ioctl.c | 1 + include/drm/drm_atomic.h | 3 +- 3 files changed, 111 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 7a77051096c9..b039edaa3271 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1647,10 +1647,118 @@ bool drm_atomic_implements_create_state(struct drm= _device *dev) =20 return true; } EXPORT_SYMBOL(drm_atomic_implements_create_state); =20 +/** + * drm_atomic_commit_fill_with_defaults - populate a commit with pristine = states + * @commit: atomic commit to fill + * + * Iterate over all CRTCs, planes, connectors, and color operations in + * the device and insert a freshly created default state for each one + * into @commit. The states are created through the atomic_create_state() + * hooks, producing the same initial state the driver starts with rather + * than a copy of the current hardware state. + * + * This is meant to be used with the %DRM_MODE_ATOMIC_RESET flag, which + * needs to bring the device back to a known baseline before applying + * userspace property changes on top. + * + * Returns: + * 0 on success, or a negative error code on failure. + */ +int drm_atomic_commit_fill_with_defaults(struct drm_atomic_commit *commit) +{ + struct drm_device *dev =3D commit->dev; + struct drm_mode_config *config =3D &dev->mode_config; + struct drm_crtc *crtc; + struct drm_plane *plane; + struct drm_connector *connector; + struct drm_connector_list_iter conn_iter; + struct drm_colorop *colorop; + int ret; + + drm_WARN_ON(dev, !commit->acquire_ctx); + + /* + * Private objects are ignored because none have userspace + * properties we might want to reset. atomic_check + * implementations will derive or infer their private obj state + * from the state that will end up being committed anyway. + */ + drm_for_each_colorop(colorop, dev) { + struct drm_colorop_state *colorop_state; + + ret =3D drm_modeset_lock(&colorop->plane->mutex, commit->acquire_ctx); + if (ret) + return ret; + + colorop_state =3D drm_atomic_helper_colorop_create_state(colorop); + if (IS_ERR(colorop_state)) + return PTR_ERR(colorop_state); + + drm_atomic_commit_set_colorop_state(commit, colorop, colorop_state); + } + + drm_for_each_plane(plane, dev) { + struct drm_plane_state *plane_state; + + ret =3D drm_modeset_lock(&plane->mutex, commit->acquire_ctx); + if (ret) + return ret; + + plane_state =3D plane->funcs->atomic_create_state(plane); + if (IS_ERR(plane_state)) + return PTR_ERR(plane_state); + + drm_atomic_commit_set_plane_state(commit, plane, plane_state); + } + + drm_for_each_crtc(crtc, dev) { + struct drm_crtc_state *crtc_state; + + ret =3D drm_modeset_lock(&crtc->mutex, commit->acquire_ctx); + if (ret) + return ret; + + crtc_state =3D crtc->funcs->atomic_create_state(crtc); + if (IS_ERR(crtc_state)) + return PTR_ERR(crtc_state); + + drm_atomic_commit_set_crtc_state(commit, crtc, crtc_state); + } + + drm_connector_list_iter_begin(dev, &conn_iter); + drm_for_each_connector_iter(connector, &conn_iter) { + struct drm_connector_state *connector_state; + + ret =3D drm_modeset_lock(&config->connection_mutex, commit->acquire_ctx); + if (ret) { + drm_connector_list_iter_end(&conn_iter); + return ret; + } + + connector_state =3D connector->funcs->atomic_create_state(connector); + if (IS_ERR(connector_state)) { + drm_connector_list_iter_end(&conn_iter); + ret =3D PTR_ERR(connector_state); + return ret; + } + + ret =3D drm_atomic_commit_set_connector_state(commit, connector, connect= or_state); + if (ret) { + connector->funcs->atomic_destroy_state(connector, connector_state); + drm_connector_list_iter_end(&conn_iter); + return ret; + } + } + drm_connector_list_iter_end(&conn_iter); + + return 0; +} +EXPORT_SYMBOL(drm_atomic_commit_fill_with_defaults); + /** * drm_atomic_add_encoder_bridges - add bridges attached to an encoder * @state: atomic state * @encoder: DRM encoder * diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 9039a39c4324..0dbf04d4aa9e 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -31,10 +31,11 @@ #include #include #include #include =20 +#include #include #include #include #include #include diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index 94356566a514..841a11ee2fda 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -700,11 +700,12 @@ int drm_crtc_commit_wait(struct drm_crtc_commit *comm= it); =20 struct drm_atomic_commit * __must_check drm_atomic_commit_alloc(struct drm_device *dev); void drm_atomic_commit_clear(struct drm_atomic_commit *state); =20 -bool drm_atomic_can_create_state(struct drm_device *dev); +bool drm_atomic_implements_create_state(struct drm_device *dev); +int drm_atomic_commit_fill_with_defaults(struct drm_atomic_commit *commit); =20 /** * drm_atomic_commit_get - acquire a reference to the atomic state * @state: The atomic state * --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4FCF4FDE7F for ; Fri, 18 Sep 2026 14:18:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741125; cv=none; b=Yp8kN1qtux8zt6PuqUd6BInatRS2bu9MGXxAiJ9UIOIY1DfB/s4OFCRzU1jj3Cqli6U+AR58YQMZvWXWfKxPXIuvyrUYyPxLCUMolcveLEAPpz4Y9GO97Q8RLl94FS/HCb1sGxQ7NIZboGLD8cFip+x6yWu+4df3TCL5HLVPDPQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741125; c=relaxed/simple; bh=zzvBXbMjAwZ0/KZw8aDVlC4NQJFPbEgXUUSYv1Y+V+k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GhWjm8q2408g9xjUJO2Kp/uTnRsnYmE0fa9CysBavydpr0Ok+GPEscwGhCtTWhOcAlZvaeFR9iGX3xEPZ78wL73Lmg8hvieZ42Sh9F4pocxVxnD1uOmkmiqFTm8xtXJ92Sx9QxO6En1lk71Pit93QP/EEc6YfK45HofefAMcaoQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=m0Q/fjcC; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="m0Q/fjcC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CBCA51F000FF; Fri, 18 Sep 2026 14:18:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741123; bh=2CPTv1J842nMwHMWJhCqTkdcv33ReicjRMjhrF4Rc1c=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=m0Q/fjcC3lE8AiM/bb756zMQY3UgKr7F8IMecHrcz/ss3pO5vEh8jlJBIiulPpyMv ZiHXsyKiRmnQAaJVnHmTUIC1C7PDQvPxfWt1p4wJ1sIOGGm5cayvTyYpOCfnG4/IKD fm/5fchWQ0pYf8zDe6v7/08RLQ2BgQfVh4AuSerff3DODlL5j2jEqNucEa9rzxujor dEQ6+QgQ5GlbhjadxZZ7cpHV5VXnOnDz7tcgHfJ0t8zND9UPlYchhucOag3vjE7Gs7 5hu+5PN/3pQYJkmWufy/x0vsYcX6JgfMKLQAcX3Yzx0TZEB8kc6/NtQ0rmd00R7OuG m/SXYZgRFL7HA== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:18:00 +0200 Subject: [PATCH v4 11/13] drm/atomic-uapi: Add DRM_MODE_ATOMIC_RESET flag Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-11-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6277; i=mripard@kernel.org; h=from:subject:message-id; bh=QxLmGr8FIlnpGqZI5c8vL0af5SOBJ665zMb2Fp0RHS0=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPUQ2edwWjJ6laNyR+nX9PaFW5Si7np+Wi9ojZb7cc 9J0+pvSMZWFQZiTQVZMkeWJTNjp5e2LqxzsV/6AmcPKBDKEgYtTACaS/5mxms18RfQnVX39b30b 19+ri9U11tzddsWrqp57foDLyrT+lnPvc7nlVbfe1rsbvq+y4rEgY5110XYR2VdnXJ1WzH0dJtv F2ODUpPF01fsyvoXzfmwpO79E2tUosu6Ch+X8HXf/Gc2f/wMA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D From: Sebastian Wick Userspace currently has no atomic way to reset all KMS object states to their defaults. To bring a display pipeline to a known state, a compositor must explicitly set every property on every object, which requires tracking which properties exist and what their defaults are. Introduce DRM_MODE_ATOMIC_RESET (0x0800) which, when passed to the atomic ioctl, fills the commit with default states for all KMS objects before applying the properties supplied in the request. Properties not explicitly included in the commit remain at their defaults (CRTCs inactive, planes disabled, connectors unbound, and so on). The flag cannot be combined with DRM_MODE_PAGE_FLIP_ASYNC, since a full state reset is incompatible with an async flip. Reviewed-by: Thomas Zimmermann Signed-off-by: Sebastian Wick Co-developed-by: Maxime Ripard Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 3 +++ drivers/gpu/drm/drm_atomic_uapi.c | 18 ++++++++++++++++++ drivers/gpu/drm/drm_ioctl.c | 3 +++ include/uapi/drm/drm.h | 10 ++++++++++ include/uapi/drm/drm_mode.h | 14 +++++++++++++- 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index b039edaa3271..0c5999695436 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1611,10 +1611,13 @@ EXPORT_SYMBOL(drm_atomic_get_new_bridge_state); * the current state. * * Color operations are not checked because they always use * drm_atomic_helper_colorop_create_state() and do not have a per-driver h= ook. * + * This is used to report the %DRM_CAP_ATOMIC_RESET capability to userspac= e, + * and as a precondition in drm_atomic_commit_fill_with_defaults(). + * * Returns: * True if all objects implement atomic_create_state, false otherwise. */ bool drm_atomic_implements_create_state(struct drm_device *dev) { diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic= _uapi.c index 4acfb588c412..1cbd7f81a09b 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -1664,10 +1664,17 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, drm_dbg_atomic(dev, "commit failed: page-flip event requested with test-only commit\= n"); return -EINVAL; } =20 + if ((arg->flags & DRM_MODE_ATOMIC_RESET) && + (arg->flags & DRM_MODE_PAGE_FLIP_ASYNC)) { + drm_dbg_atomic(dev, + "commit failed: reset cannot be combined with async flip\n"); + return -EINVAL; + } + state =3D drm_atomic_commit_alloc(dev); if (!state) return -ENOMEM; =20 drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE); @@ -1679,10 +1686,21 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, copied_objs =3D 0; copied_props =3D 0; fence_state =3D NULL; num_fences =3D 0; =20 + if (arg->flags & DRM_MODE_ATOMIC_RESET) { + if (!drm_atomic_implements_create_state(dev)) { + ret =3D -EOPNOTSUPP; + goto out; + } + + ret =3D drm_atomic_commit_fill_with_defaults(state); + if (ret) + goto out; + } + for (i =3D 0; i < arg->count_objs; i++) { uint32_t obj_id, count_props; struct drm_mode_object *obj; =20 if (get_user(obj_id, objs_ptr + copied_objs)) { diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 0dbf04d4aa9e..e589d93871e2 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -303,10 +303,13 @@ static int drm_getcap(struct drm_device *dev, void *d= ata, struct drm_file *file_ break; case DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP: req->value =3D drm_core_check_feature(dev, DRIVER_ATOMIC) && dev->mode_config.async_page_flip; break; + case DRM_CAP_ATOMIC_RESET: + req->value =3D drm_atomic_implements_create_state(dev); + break; default: return -EINVAL; } return 0; } diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index bc7ef7684099..b6e2f2edd122 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -793,10 +793,20 @@ struct drm_gem_change_handle { * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC for atomic * commits. */ #define DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP 0x15 =20 +/** + * DRM_CAP_ATOMIC_RESET + * + * If set to 1, the driver supports the &DRM_MODE_ATOMIC_RESET flag in + * &DRM_IOCTL_MODE_ATOMIC commits. When supported, userspace can pass that + * flag to reset all KMS object states to their defaults before applying + * property changes. + */ +#define DRM_CAP_ATOMIC_RESET 0x16 + /* DRM_IOCTL_GET_CAP ioctl argument type */ struct drm_get_cap { __u64 capability; __u64 value; }; diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h index ed1a660a3dfd..32eb3f650d7a 100644 --- a/include/uapi/drm/drm_mode.h +++ b/include/uapi/drm/drm_mode.h @@ -1326,10 +1326,21 @@ struct drm_mode_destroy_dumb { * To the best of the driver's knowledge, visual artifacts are guaranteed = to * not appear when this flag is not set. Some sinks might display visual * artifacts outside of the driver's control. */ #define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400 +/** + * DRM_MODE_ATOMIC_RESET + * + * Reset all KMS object states (CRTCs, planes, connectors, color operation= s) + * to their default values before applying the properties in this commit. + * Properties not explicitly included in the commit will remain at their + * defaults (CRTCs inactive, planes disabled, connectors unbound, etc.). + * + * This flag cannot be combined with &DRM_MODE_PAGE_FLIP_ASYNC. + */ +#define DRM_MODE_ATOMIC_RESET 0x0800 =20 /** * DRM_MODE_ATOMIC_FLAGS * * Bitfield of flags accepted by the &DRM_IOCTL_MODE_ATOMIC IOCTL in @@ -1338,11 +1349,12 @@ struct drm_mode_destroy_dumb { #define DRM_MODE_ATOMIC_FLAGS (\ DRM_MODE_PAGE_FLIP_EVENT |\ DRM_MODE_PAGE_FLIP_ASYNC |\ DRM_MODE_ATOMIC_TEST_ONLY |\ DRM_MODE_ATOMIC_NONBLOCK |\ - DRM_MODE_ATOMIC_ALLOW_MODESET) + DRM_MODE_ATOMIC_ALLOW_MODESET |\ + DRM_MODE_ATOMIC_RESET) =20 struct drm_mode_atomic { __u32 flags; __u32 count_objs; __u64 objs_ptr; --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C54D4FE2E1 for ; Fri, 18 Sep 2026 14:18:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741128; cv=none; b=swpzduTsVeZsTc3cSE1xZgf/z2xl3jJZgnJsdStpiENzbe+tdKAp/IR45xXao5FU7jvQDs7lUd0k24eH/sQBazUz7hDFhi3iXDHR70z5q0ot1NIWjy1EzfxvlsWESpi3Sn3VRisdN5j6jULEgTa68j4RP0bRSCfpm9YswqPAMMk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741128; c=relaxed/simple; bh=T0/yZbif8qvMhUYbKQ5OZSohlQVc+4QmXLfUx6lhP6s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QBluJnhfwB2YrStpWWesBTKq6hr6VbTFTYUX4tPskE5VqEac7uxkvghBbkeqDYx81f7ZL8nCGPktX+rYRSnAGeAQYxay7SWB9YjcuzrYmiheM6TM46n7EN3pSh/9Lirf4fncLgrSADH2C7pibUUVUE1U0fZaErydWmYb5r2j58Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kg03Xg9/; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kg03Xg9/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8BD931F00898; Fri, 18 Sep 2026 14:18:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741127; bh=WrDnBXEUES0WR7P2lhOYTykVEKJTOaUBbf8pmdHPY8w=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=kg03Xg9/UH09L0FZmK58QNBMKkuOUJYfHkkLDCTA4OVxT5Vmnyz/a+rHtVWzZ7B1q 1xsmCbtbFlJzXI/dMKI9xq1YlLsHnJFnDv+PrmqkmFaWbaQmBxmEQWCIepMgvBcU9J gw9bU6ys0aM2AX0vzvJgpBJJwUo7O5XJGW/rgo73GMR+DmGkCJeBcYQiWaJEohxytZ GcRjH67IT0Q1KjEW/JJSyIoi23V1OIR3BEYQ1cRlvZ6Nsdaab1mdcuAUcaR9/kHcSL tn3JdcIARLUcLA26pQ05bvrGrOxCc0vjVJTA/E1NTbFjFM/iguhmoKhfgEHeQvpB7f LRMFYY0D5tQkw== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:18:01 +0200 Subject: [PATCH v4 12/13] drm/vkms: Switch container_of helpers to container_of_const Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-12-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1657; i=mripard@kernel.org; h=from:subject:message-id; bh=T0/yZbif8qvMhUYbKQ5OZSohlQVc+4QmXLfUx6lhP6s=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPUREFCSXLm76OPOa5hdNsTWLLVYE13YrheR1fb0/1 ajBkO1Zx1QWBmFOBlkxRZYnMmGnl7cvrnKwX/kDZg4rE8gQBi5OAZhIUzxjQ/eMvRdit14Vvvun k+fIwt7GltOnmvl85ywq6e7P+H1s71+JFyZn2ERPvZu2JjX9yAWjJMY6y6NyX05eWu3yoO3d/yh dMZZqzr9aASZlf0ItzvevXRcXWMf1OHjCH9u1//dNNVvF/aYaAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The vkms container_of helpers use container_of() which discards the const qualifier from the input pointer. This prevents passing a const state pointer to to_vkms_plane_state() without a cast, for instance in atomic_get_property which receives a const drm_plane_state. Switch all four helpers to container_of_const() so the const qualifier is properly propagated to the result type. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vkms/vkms_drv.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_dr= v.h index 381483aa4fb0..dea6cad3f1b9 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -248,20 +248,20 @@ struct vkms_device { /* * The following helpers are used to convert a member of a struct into its= parent. */ =20 #define drm_crtc_to_vkms_output(target) \ - container_of(target, struct vkms_output, crtc) + container_of_const(target, struct vkms_output, crtc) =20 #define drm_device_to_vkms_device(target) \ - container_of(target, struct vkms_device, drm) + container_of_const(target, struct vkms_device, drm) =20 #define to_vkms_crtc_state(target)\ - container_of(target, struct vkms_crtc_state, base) + container_of_const(target, struct vkms_crtc_state, base) =20 #define to_vkms_plane_state(target)\ - container_of(target, struct vkms_plane_state, base.base) + container_of_const(target, struct vkms_plane_state, base.base) =20 /** * vkms_create() - Create a device from a configuration * @config: Config used to configure the new device * --=20 2.55.0 From nobody Wed Sep 23 06:07:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 785644FECD3 for ; Fri, 18 Sep 2026 14:18:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741133; cv=none; b=Rnmk66czXx1J7hy7hKuCsV1IGMzH0z6+nfPcWJ65arEpqvnY/srMVmZlmbXmcxd8tKCWADySHGv3mrynDQnEugd5yLCa31nkaEflXt3YivjqYac0m3tpE+m8Ty4vCkircr7lFgJgGuxl6fjfoDgwo4JILn/+N/k91i5NZ/2MDOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789741133; c=relaxed/simple; bh=rx00sXWn5MJHdSH6gN45L9lMWJzjUVjUG9ORKnW1irE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SVcyyCRmaINnncGz2TLy3J+ReP8716Mijt+b5NW/YMVgaIKZcZwvcX0gQeLFQ9moQkIpFslFqSyrBMOd0Fq/T9tHd92pW3IvjZJAzb/NJ1o1U5u2JiCyH9lfggdE9aYnmuvnKi931RDvWSwWsrbkRxdIxyurwCxP6CW/72bK4gA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=E0vk8Eos; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="E0vk8Eos" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 51CC51F000FF; Fri, 18 Sep 2026 14:18:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789741130; bh=3E4pVmulPx906Y/szUJIlCvfIQUV2m1nkOIylvsoXqA=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=E0vk8EosBWQytRkYBOO8xtpAQIni3gdejGlM7Ulio0M5L07buLxM2QoNid5L0pSVw I5qH02Jl7DKWHs61+J0QNeU/A5kBzbEbGxsi27fmKT9YysBKvhwrEnV2xGuLSwP6qC v1/opiOT0GeLJQ3FqQyAtX2tWW7eluJZ4adjYA5ybUi01WYv3VdeOckcnBhP1LahMv HFDMarFRiQIEr/N33m+TKJyRRo7i1N2jTGxoOc4SaSiPHN7IBNYRmwLjitFuyKivD7 yxr6WqvYTySwITxs1FgcGdhsjjNp2oJkJpL85G4H6yUw147DrIsfve+hT8/oZPlbu9 5BLccJu3Ij1LQ== From: Maxime Ripard Date: Fri, 18 Sep 2026 16:18:02 +0200 Subject: [PATCH v4 13/13] drm/vkms: Add driver-specific plane property for testing Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260918-drm-reset-state-flag-v4-13-5ad106370f05@kernel.org> References: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> In-Reply-To: <20260918-drm-reset-state-flag-v4-0-5ad106370f05@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: Daniel Stone , Harry Wentland , Jocelyn Falempe , =?utf-8?q?Jonas_=C3=85dahl?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Pekka Paalanen , Sebastian Wick , Simon Ser , Victoria Brekenfeld , Xaver Hugl , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6425; i=mripard@kernel.org; h=from:subject:message-id; bh=rx00sXWn5MJHdSH6gN45L9lMWJzjUVjUG9ORKnW1irE=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFlrPUTZmvYmpd9ReP1WyL3f7e17FcWZf1fZeq2Z7mV2v aB6nphzx1QWBmFOBlkxRZYnMmGnl7cvrnKwX/kDZg4rE8gQBi5OAZiIy0rG+rCXk9fEdncFhXxw XrHy0vuTk7T0lA/EHhCbdbExqWFBDWdbXmfZYv2vd089vbZMb/Z1JsaGbyyFfwqFnh/4+KWCV53 n26Y7PUz77y7euOyS9ec3kreWv1vZGOx78pquHpsj8757+bzFAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The DRM_MODE_ATOMIC_RESET flag allows userspace to reset all object states to their defaults before applying new property values. Testing that this mechanism works correctly requires a property that the test can set to a non-default value and then verify is properly reset. Using a standard property for this is problematic: compositors like Mutter enumerate and track all known properties, making it difficult to isolate the reset behavior from the compositor's own property management. Add a "vkms-test-do-not-use-in-prod" range property to vkms planes. The property is stored in vkms_plane_state, duplicated across state copies, and initialized from its registered default in atomic_create_state via drm_object_property_get_default_value(). Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vkms/vkms_drv.h | 3 ++ drivers/gpu/drm/vkms/vkms_plane.c | 61 +++++++++++++++++++++++++++++++++++= ++-- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_dr= v.h index dea6cad3f1b9..384616095b45 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -144,20 +144,23 @@ struct conversion_matrix { * @base: base plane state * @frame_info: data required for composing computation * @pixel_read_line: function to read a pixel line in this plane. The crea= tor of a * struct vkms_plane_state must ensure that this pointer is valid * @conversion_matrix: matrix used for yuv formats to convert to rgb + * @vkms_test_do_not_use_value: driver-specific property for testing only */ struct vkms_plane_state { struct drm_shadow_plane_state base; struct vkms_frame_info frame_info; pixel_read_line_t pixel_read_line; struct conversion_matrix conversion_matrix; + unsigned int vkms_test_do_not_use_value; }; =20 struct vkms_plane { struct drm_plane base; + struct drm_property *vkms_test_do_not_use_property; }; =20 struct vkms_color_lut { struct drm_color_lut *base; size_t lut_length; diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_= plane.c index fd3d34dcf0fe..0ebc131c2788 100644 --- a/drivers/gpu/drm/vkms/vkms_plane.c +++ b/drivers/gpu/drm/vkms/vkms_plane.c @@ -9,14 +9,18 @@ #include #include #include #include #include +#include =20 #include "vkms_drv.h" #include "vkms_formats.h" =20 +#define to_vkms_plane(target) \ + container_of_const(target, struct vkms_plane, base) + static const u32 vkms_formats[] =3D { DRM_FORMAT_ARGB8888, DRM_FORMAT_ABGR8888, DRM_FORMAT_BGRA8888, DRM_FORMAT_RGBA8888, @@ -52,16 +56,19 @@ static const u32 vkms_formats[] =3D { }; =20 static struct drm_plane_state * vkms_plane_duplicate_state(struct drm_plane *plane) { + struct vkms_plane_state *old_state =3D to_vkms_plane_state(plane->state); struct vkms_plane_state *vkms_state; =20 vkms_state =3D kzalloc_obj(*vkms_state); if (!vkms_state) return NULL; =20 + vkms_state->vkms_test_do_not_use_value =3D old_state->vkms_test_do_not_us= e_value; + __drm_gem_duplicate_shadow_plane_state(plane, &vkms_state->base); =20 return &vkms_state->base.base; } =20 @@ -83,28 +90,69 @@ static void vkms_plane_destroy_state(struct drm_plane *= plane, kfree(vkms_state); } =20 static struct drm_plane_state *vkms_plane_create_state(struct drm_plane *p= lane) { + struct vkms_plane *vkms_plane =3D to_vkms_plane(plane); struct vkms_plane_state *vkms_state; + u64 val; =20 vkms_state =3D kzalloc_obj(*vkms_state); if (!vkms_state) { DRM_ERROR("Cannot allocate vkms_plane_state\n"); return ERR_PTR(-ENOMEM); } =20 __drm_gem_shadow_plane_state_init(plane, &vkms_state->base); =20 + 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 =3D val; + return &(&vkms_state->base)->base; } =20 +static int vkms_plane_atomic_set_property(struct drm_plane *plane, + struct drm_plane_state *state, + struct drm_property *property, + uint64_t val) +{ + struct vkms_plane *vkms_plane =3D to_vkms_plane(plane); + struct vkms_plane_state *vkms_state =3D to_vkms_plane_state(state); + + if (property =3D=3D vkms_plane->vkms_test_do_not_use_property) { + vkms_state->vkms_test_do_not_use_value =3D val; + return 0; + } + + return -EINVAL; +} + +static int vkms_plane_atomic_get_property(struct drm_plane *plane, + const struct drm_plane_state *state, + struct drm_property *property, + uint64_t *val) +{ + const struct vkms_plane_state *vkms_state =3D to_vkms_plane_state(state); + const struct vkms_plane *vkms_plane =3D to_vkms_plane(plane); + + if (property =3D=3D vkms_plane->vkms_test_do_not_use_property) { + *val =3D vkms_state->vkms_test_do_not_use_value; + return 0; + } + + return -EINVAL; +} + static const struct drm_plane_funcs vkms_plane_funcs =3D { .update_plane =3D drm_atomic_helper_update_plane, .disable_plane =3D drm_atomic_helper_disable_plane, - .atomic_create_state =3D vkms_plane_create_state, - .atomic_duplicate_state =3D vkms_plane_duplicate_state, + .atomic_set_property =3D vkms_plane_atomic_set_property, + .atomic_get_property =3D vkms_plane_atomic_get_property, + .atomic_create_state =3D vkms_plane_create_state, + .atomic_duplicate_state =3D vkms_plane_duplicate_state, .atomic_destroy_state =3D vkms_plane_destroy_state, }; =20 static void vkms_plane_atomic_update(struct drm_plane *plane, struct drm_atomic_commit *state) @@ -281,10 +329,19 @@ struct vkms_plane *vkms_plane_init(struct vkms_device= *vkmsdev, BIT(DRM_COLOR_YCBCR_LIMITED_RANGE) | BIT(DRM_COLOR_YCBCR_FULL_RANGE), DRM_COLOR_YCBCR_BT601, DRM_COLOR_YCBCR_FULL_RANGE); =20 + plane->vkms_test_do_not_use_property =3D + drm_property_create_range(dev, 0, + "vkms-test-do-not-use-in-prod", + 0, U32_MAX); + if (plane->vkms_test_do_not_use_property) + drm_object_attach_property(&plane->base.base, + plane->vkms_test_do_not_use_property, + 0); + if (vkms_config_plane_get_default_pipeline(plane_cfg)) vkms_initialize_colorops(&plane->base); =20 return plane; } --=20 2.55.0