From: Arun R Murthy <arun.r.murthy@intel.com>
To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Simona Vetter <simona@ffwll.ch>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Jani Nikula <jani.nikula@linux.intel.com>,
Rodrigo Vivi <rodrigo.vivi@intel.com>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
naveen1.kumar@intel.com, xaver.hugl@kde.org,
uma.shankar@intel.com, harry.wentland@amd.com,
Arun R Murthy <arun.r.murthy@intel.com>
Subject: [PATCH v2 3/4] drm/atomic: Return user readable error in atomic_ioctl
Date: Wed, 30 Jul 2025 15:46:38 +0530 [thread overview]
Message-ID: <20250730-atomic-v2-3-cc02ce0263dd@intel.com> (raw)
In-Reply-To: <20250730-atomic-v2-0-cc02ce0263dd@intel.com>
Add user readable error codes for failure cases in drm_atomic_ioctl() so
that user can decode the error code and take corrective measurements.
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
---
drivers/gpu/drm/drm_atomic.c | 5 +++++
drivers/gpu/drm/drm_atomic_uapi.c | 20 +++++++++++++++-----
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index cd15cf52f0c9144711da5879da57884674aea9e4..0cf73022955437260d138c6a1e2bb9a8a4eca2f0 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1513,6 +1513,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
if (drm_atomic_crtc_needs_modeset(new_crtc_state)) {
drm_dbg_atomic(dev, "[CRTC:%d:%s] requires full modeset\n",
crtc->base.id, crtc->name);
+ state->error_code = DRM_MODE_ATOMIC_CRTC_NEED_FULL_MODESET;
+
return -EINVAL;
}
}
@@ -1537,8 +1539,11 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
drm_dbg_atomic(dev,
"driver added CRTC to commit: requested 0x%x, affected 0x%0x\n",
requested_crtc, affected_crtc);
+ state->error_code = DRM_MODE_ATOMIC_NEED_FULL_MODESET;
WARN(!state->allow_modeset, "adding CRTC not allowed without modesets: requested 0x%x, affected 0x%0x\n",
requested_crtc, affected_crtc);
+
+ return -EINVAL;
}
return 0;
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index ecc73d52bfae41a7ef455a7e13649ec56c690b90..b96707ca23ac01878c3df25b8a4a026f6c6c31d2 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -1058,6 +1058,8 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
ret = drm_atomic_crtc_get_property(crtc, crtc_state,
prop, &old_val);
ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop);
+ if (ret)
+ state->error_code = DRM_MODE_ATOMIC_ASYNC_PROP_CHANGED;
break;
}
@@ -1089,6 +1091,7 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
/* ask the driver if this non-primary plane is supported */
if (plane->type != DRM_PLANE_TYPE_PRIMARY) {
+ state->error_code = DRM_MODE_ATOMIC_ASYNC_NOT_PRIMARY;
ret = -EINVAL;
if (plane_funcs && plane_funcs->atomic_async_check)
@@ -1400,6 +1403,11 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
if (!drm_core_check_feature(dev, DRIVER_ATOMIC))
return -EOPNOTSUPP;
+ if (arg->reserved) {
+ drm_dbg_atomic(dev, "commit failed: reserved field set\n");
+ return -EINVAL;
+ }
+
/* disallow for userspace that has not enabled atomic cap (even
* though this may be a bit overkill, since legacy userspace
* wouldn't know how to call this ioctl)
@@ -1407,16 +1415,13 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
if (!file_priv->atomic) {
drm_dbg_atomic(dev,
"commit failed: atomic cap not enabled\n");
+ arg->reserved = DRM_MODE_ATOMIC_CAP_NOT_ENABLED;
return -EINVAL;
}
if (arg->flags & ~DRM_MODE_ATOMIC_FLAGS) {
drm_dbg_atomic(dev, "commit failed: invalid flag\n");
- return -EINVAL;
- }
-
- if (arg->reserved) {
- drm_dbg_atomic(dev, "commit failed: reserved field set\n");
+ arg->reserved = DRM_MODE_ATOMIC_INVALID_FLAG;
return -EINVAL;
}
@@ -1424,6 +1429,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
if (!dev->mode_config.async_page_flip) {
drm_dbg_atomic(dev,
"commit failed: DRM_MODE_PAGE_FLIP_ASYNC not supported\n");
+ arg->reserved = DRM_MODE_ATOMIC_PAGE_FLIP_ASYNC;
return -EINVAL;
}
@@ -1435,6 +1441,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
(arg->flags & DRM_MODE_PAGE_FLIP_EVENT)) {
drm_dbg_atomic(dev,
"commit failed: page-flip event requested with test-only commit\n");
+ arg->reserved = DRM_MODE_ATOMIC_FLIP_EVENT_WITH_CHECKONLY;
return -EINVAL;
}
@@ -1541,6 +1548,9 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
ret = drm_atomic_commit(state);
}
+ /* update the error code if any error to allow user handling it */
+ arg->reserved = state->error_code;
+
out:
complete_signaling(dev, state, fence_state, num_fences, !ret);
--
2.25.1
next prev parent reply other threads:[~2025-07-30 10:36 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-30 10:16 [PATCH v2 0/4] User readable error codes on atomic_ioctl failure Arun R Murthy
2025-07-30 10:16 ` [PATCH v2 1/4] drm: Define user readable error codes for atomic ioctl Arun R Murthy
2025-07-30 11:22 ` Biju Das
2025-07-30 13:45 ` Murthy, Arun R
2025-07-31 11:32 ` Xaver Hugl
2025-08-01 4:48 ` Murthy, Arun R
2025-07-30 10:16 ` [PATCH v2 2/4] drm/atomic: Add error_code element in atomic_state Arun R Murthy
2025-07-30 10:16 ` Arun R Murthy [this message]
2025-07-30 13:14 ` [PATCH v2 3/4] drm/atomic: Return user readable error in atomic_ioctl Harry Wentland
2025-07-30 13:55 ` Murthy, Arun R
2025-07-30 14:19 ` Harry Wentland
2025-07-30 10:16 ` [PATCH v2 4/4] drm/i915/display: Error codes for async flip failures Arun R Murthy
2025-07-30 10:43 ` ✓ CI.KUnit: success for User readable error codes on atomic_ioctl failure Patchwork
2025-07-30 10:58 ` ✗ CI.checksparse: warning " Patchwork
2025-07-30 11:22 ` ✓ Xe.CI.BAT: success " Patchwork
2025-07-30 12:57 ` ✗ i915.CI.BAT: failure " Patchwork
2025-07-30 13:25 ` ✗ Xe.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250730-atomic-v2-3-cc02ce0263dd@intel.com \
--to=arun.r.murthy@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=harry.wentland@amd.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=naveen1.kumar@intel.com \
--cc=rodrigo.vivi@intel.com \
--cc=simona@ffwll.ch \
--cc=uma.shankar@intel.com \
--cc=xaver.hugl@kde.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.