public inbox for intel-xe@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Murthy, Arun R" <arun.r.murthy@intel.com>
To: "Kandpal, Suraj" <suraj.kandpal@intel.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
	Jani Nikula <jani.nikula@linux.intel.com>,
	"Vivi, Rodrigo" <rodrigo.vivi@intel.com>,
	Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Tvrtko Ursulin <tursulin@ursulin.net>,
	"xaver.hugl@kde.org" <xaver.hugl@kde.org>,
	"harry.wentland@amd.com" <harry.wentland@amd.com>,
	"Shankar, Uma" <uma.shankar@intel.com>,
	"louis.chauvet@bootlin.com" <louis.chauvet@bootlin.com>,
	"Kumar, Naveen1" <naveen1.kumar@intel.com>,
	"Yella, Ramya Krishna" <ramya.krishna.yella@intel.com>
Cc: "dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>,
	"intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>
Subject: RE: [PATCH v9 5/7] drm/atomic: Return user readable error in atomic_ioctl
Date: Tue, 17 Feb 2026 04:06:01 +0000	[thread overview]
Message-ID: <IA0PR11MB7307E0F361AB3076F86393D4BA6DA@IA0PR11MB7307.namprd11.prod.outlook.com> (raw)
In-Reply-To: <DM3PPF208195D8DA23C85CF5B0645AABDD4E361A@DM3PPF208195D8D.namprd11.prod.outlook.com>


> -----Original Message-----
> From: Kandpal, Suraj <suraj.kandpal@intel.com>
> Sent: Friday, February 13, 2026 2:54 PM
> To: Murthy, Arun R <arun.r.murthy@intel.com>; Maarten Lankhorst
> <maarten.lankhorst@linux.intel.com>; Maxime Ripard <mripard@kernel.org>;
> Thomas Zimmermann <tzimmermann@suse.de>; David Airlie
> <airlied@gmail.com>; Simona Vetter <simona@ffwll.ch>; Jani Nikula
> <jani.nikula@linux.intel.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>; Joonas
> Lahtinen <joonas.lahtinen@linux.intel.com>; Tvrtko Ursulin
> <tursulin@ursulin.net>; xaver.hugl@kde.org; harry.wentland@amd.com;
> Shankar, Uma <uma.shankar@intel.com>; louis.chauvet@bootlin.com; Kumar,
> Naveen1 <naveen1.kumar@intel.com>; Yella, Ramya Krishna
> <ramya.krishna.yella@intel.com>
> Cc: dri-devel@lists.freedesktop.org; intel-gfx@lists.freedesktop.org; intel-
> xe@lists.freedesktop.org; Murthy, Arun R <arun.r.murthy@intel.com>
> Subject: RE: [PATCH v9 5/7] drm/atomic: Return user readable error in
> atomic_ioctl
> 
> > Subject: [PATCH v9 5/7] drm/atomic: Return user readable error in
> > atomic_ioctl
> >
> > Add user readable error codes for failure cases in drm_atomic_ioctl()
> > so that user can decode the error code and take corrective measurements.
> >
> > v8: Replaced DRM_MODE_ATOMIC_ASYNC_NOT_SUPP_PLANE,
> >     DRM_MODE_ATOMIC_ASYNC_MODIFIER_NOT_SUPP with
> INVALID_API_USAGE
> >     (Xaver)
> > v9: Move free atomic_state on error to patch 3 (Suraj)
> >
> > Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
> > ---
> >  drivers/gpu/drm/drm_atomic_uapi.c | 58
> > +++++++++++++++++++++++++++++--
> > --------
> >  1 file changed, 44 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c
> > b/drivers/gpu/drm/drm_atomic_uapi.c
> > index
> >
> bcd12b6eac4f497d2edb8581d9fb0fd54cbef827..f0c3f080f5d66c733dfbfa23f38
> a
> > 22132193adec 100644
> > --- a/drivers/gpu/drm/drm_atomic_uapi.c
> > +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> > @@ -1196,6 +1196,11 @@ int drm_atomic_set_property(struct
> > drm_atomic_state *state,
> >  			ret = drm_atomic_connector_get_property(connector,
> > connector_state,
> >  								prop,
> > &old_val);
> >  			ret = drm_atomic_check_prop_changes(ret, old_val,
> prop_value,
> > prop);
> > +			if (ret) {
> > +				drm_mode_atomic_add_error_msg(&state-
> > >error_code,
> > +
> > DRM_MODE_ATOMIC_ASYNC_PROP_CHANGED,
> > +							      "property change
> > not allowed in async flip");
> > +			}
> >  			break;
> >  		}
> >
> > @@ -1218,6 +1223,11 @@ 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) {
> > +				drm_mode_atomic_add_error_msg(&state-
> > >error_code,
> > +
> > DRM_MODE_ATOMIC_ASYNC_PROP_CHANGED,
> > +							      "property change
> > not allowed in async flip");
> > +			}
> >  			break;
> >  		}
> >
> > @@ -1256,9 +1266,10 @@ int drm_atomic_set_property(struct
> > drm_atomic_state *state,
> >  					ret = plane_funcs-
> > >atomic_async_check(plane, state, true);
> >
> >  				if (ret) {
> > -					drm_dbg_atomic(prop->dev,
> > -						       "[PLANE:%d:%s] does not
> > support async flips\n",
> > -						       obj->id, plane->name);
> > +
> > 	drm_mode_atomic_add_error_msg(&state->error_code,
> > +
> > DRM_MODE_ATOMIC_INVALID_API_USAGE,
> > +
> > "[PLANE:%d:%s] does not support async flip",
> > +								      obj->id,
> > plane->name);
> >  					break;
> >  				}
> >  			}
> > @@ -1568,6 +1579,7 @@ int drm_mode_atomic_ioctl(struct drm_device
> *dev,
> >  	struct drm_atomic_state *state;
> >  	struct drm_modeset_acquire_ctx ctx;
> >  	struct drm_out_fence_state *fence_state;
> > +	struct drm_mode_atomic_err_code __user *error_code_ptr;
> >  	int ret = 0;
> >  	unsigned int i, j, num_fences = 0;
> >  	bool async_flip = false;
> > @@ -1576,6 +1588,14 @@ 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,
> > +			       "memory not allocated for drm_atomic error
> > reporting\n");
> > +	else
> > +		/* Update the error code if any error to allow user handling it
> > */
> > +		error_code_ptr = (struct drm_mode_atomic_err_code __user
> > *)
> > +				 (unsigned long)arg->reserved;
> > +
> >  	state = drm_atomic_state_alloc(dev);
> >  	if (!state)
> >  		return -ENOMEM;
> > @@ -1584,11 +1604,16 @@ int drm_mode_atomic_ioctl(struct drm_device
> > *dev,
> >  	state->acquire_ctx = &ctx;
> >  	state->allow_modeset = !!(arg->flags &
> > DRM_MODE_ATOMIC_ALLOW_MODESET);
> >
> > +	memset(&state->error_code, 0, sizeof(*error_code_ptr));
> > +
> >  	/* 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)
> >  	 */
> >  	if (!file_priv->atomic) {
> > +		drm_mode_atomic_add_error_msg(&state->error_code,
> > +
> > DRM_MODE_ATOMIC_INVALID_API_USAGE,
> > +					      "drm atomic capability not
> > enabled");
> >  		drm_dbg_atomic(dev,
> >  			       "commit failed: atomic cap not enabled\n");
> >  		ret = -EINVAL;
> > @@ -1596,21 +1621,18 @@ int drm_mode_atomic_ioctl(struct drm_device
> > *dev,
> >  	}
> >
> >  	if (arg->flags & ~DRM_MODE_ATOMIC_FLAGS) {
> > -		drm_dbg_atomic(dev, "commit failed: invalid flag\n");
> > -		ret = -EINVAL;
> > -		goto out;
> > -	}
> > -
> > -	if (arg->reserved) {
> > -		drm_dbg_atomic(dev, "commit failed: reserved field set\n");
> > +		drm_mode_atomic_add_error_msg(&state->error_code,
> > +
> > DRM_MODE_ATOMIC_INVALID_API_USAGE,
> > +					      "invalid flag");
> >  		ret = -EINVAL;
> >  		goto out;
> >  	}
> >
> >  	if (arg->flags & DRM_MODE_PAGE_FLIP_ASYNC) {
> >  		if (!dev->mode_config.async_page_flip) {
> > -			drm_dbg_atomic(dev,
> > -				       "commit failed:
> > DRM_MODE_PAGE_FLIP_ASYNC not supported\n");
> > +			drm_mode_atomic_add_error_msg(&state-
> > >error_code,
> > +
> > DRM_MODE_ATOMIC_INVALID_API_USAGE,
> > +
> > "DRM_MODE_PAGE_FLIP_ASYNC not supported with ATOMIC
> > +ioctl");
> >  			ret = -EINVAL;
> >  			goto out;
> >  		}
> > @@ -1621,8 +1643,9 @@ int drm_mode_atomic_ioctl(struct drm_device
> *dev,
> >  	/* can't test and expect an event at the same time. */
> >  	if ((arg->flags & DRM_MODE_ATOMIC_TEST_ONLY) &&
> >  			(arg->flags & DRM_MODE_PAGE_FLIP_EVENT)) {
> > -		drm_dbg_atomic(dev,
> > -			       "commit failed: page-flip event requested with
> > test-only commit\n");
> > +		drm_mode_atomic_add_error_msg(&state->error_code,
> > +
> > DRM_MODE_ATOMIC_INVALID_API_USAGE,
> > +					      "page-flip event requested with
> > test-only commit");
> >  		ret = -EINVAL;
> >  		goto out;
> >  	}
> > @@ -1725,6 +1748,13 @@ int drm_mode_atomic_ioctl(struct drm_device
> > *dev,
> >  	}
> >
> >  out:
> > +	/* Update the error code if any error to allow user handling it */
> > +	if (ret < 0 && arg->reserved) {
> > +		if (copy_to_user(error_code_ptr, &state->error_code,
> > +				 sizeof(state->error_code)))
> 
> Corner case what if you end up here right after allocating a state and come here
> because of one of the conditions Which were previously checked before state
> allocation. And then this copy to user fails.
> Then we return without freeing the state, fences etc. Should this be done in a
> cleaner way.
> 
Can as well change this return -EFAULT to just ret = -EFAULT and allow the code flow to continue to clear the atomic state and drop the locks acquired.

Thanks and Regards,
Arun R Murthy
-------------------


  reply	other threads:[~2026-02-17  4:06 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-10  9:03 [PATCH v9 0/7] User readable error codes on atomic_ioctl failure Arun R Murthy
2026-02-10  9:03 ` [PATCH v9 1/7] drm: Define user readable error codes for atomic ioctl Arun R Murthy
2026-02-10  9:03 ` [PATCH v9 2/7] drm/atomic: Add error_code element in atomic_state Arun R Murthy
2026-02-10  9:03 ` [PATCH v9 3/7] drm/atomic: Allocate atomic_state at the beginning of atomic_ioctl Arun R Murthy
2026-02-13  9:20   ` Kandpal, Suraj
2026-02-10  9:03 ` [PATCH v9 4/7] drm/atomic: Call complete_signaling only if prepare_signaling is done Arun R Murthy
2026-02-10  9:03 ` [PATCH v9 5/7] drm/atomic: Return user readable error in atomic_ioctl Arun R Murthy
2026-02-13  9:23   ` Kandpal, Suraj
2026-02-17  4:06     ` Murthy, Arun R [this message]
2026-02-17  4:07       ` Kandpal, Suraj
2026-02-17  4:06     ` Kandpal, Suraj
2026-02-10  9:04 ` [PATCH v9 6/7] drm/i915/display: Error codes for async flip failures Arun R Murthy
2026-02-10  9:04 ` [PATCH v9 7/7] drm: Introduce DRM_CAP_ATOMIC_ERROR_REPORTING Arun R Murthy
2026-02-10  9:11 ` ✗ CI.checkpatch: warning for User readable error codes on atomic_ioctl failure (rev8) Patchwork
2026-02-10  9:13 ` ✓ CI.KUnit: success " Patchwork
2026-02-10 10:02 ` ✓ Xe.CI.BAT: " Patchwork
2026-02-10 13:13 ` ✗ Xe.CI.FULL: failure " 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=IA0PR11MB7307E0F361AB3076F86393D4BA6DA@IA0PR11MB7307.namprd11.prod.outlook.com \
    --to=arun.r.murthy@intel.com \
    --cc=airlied@gmail.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=louis.chauvet@bootlin.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=naveen1.kumar@intel.com \
    --cc=ramya.krishna.yella@intel.com \
    --cc=rodrigo.vivi@intel.com \
    --cc=simona@ffwll.ch \
    --cc=suraj.kandpal@intel.com \
    --cc=tursulin@ursulin.net \
    --cc=tzimmermann@suse.de \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox