From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7080534A3A7 for ; Fri, 13 Feb 2026 12:08:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770984527; cv=none; b=FQRkeeBv211Uz/M3tmGL6/Ae7NQmscgB7c4RPD9JrgGKSoKX0KjvtQ0ChqWH4L85+i8MmaEcz98LAF0hmkPep+nv4IjeRdGpLeoc5HXdi0qbfsZmTTkcceop+X8uPDAPBLRb+l/H5RDD/ZAXXmO6XHEyZLYY5D1KVUrCrKg3XBc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770984527; c=relaxed/simple; bh=hrhddXnGGELn0tADwE41L42Y7rNs8xVGmMqf0p1zkmg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s/60Akgp//4gFFwzjBrgZG+2wb3COtzXScl5lLiQiz0Xppi1OsPODQhO9TVXKqmJSyDHLvb3txkoH9Mh8vkvcIrNaJ1Dtzke8S0xlkdk+SnUepPxYXC8aAAY6qPrn6wrRxP+0ZbRvPPMWrgORCLXa1lRe9VEfVDpG3a8DzAnsrU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=h4isRKmZ; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="h4isRKmZ" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-482f2599980so9757675e9.0 for ; Fri, 13 Feb 2026 04:08:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770984525; x=1771589325; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hXJX7nXY8BjcdSOfqiZmvYAlq9sn8uCtkrmoZSGXdnE=; b=h4isRKmZtUn1wU3uw3d8xk1zDu6UP3YyZgulP/2vpvm4Xnu10P1Rri2BpWjdO+NSou 5oZAVnNlwexXH6GWwm99YbmMa0y2GvKByHPMGpTsLi2aRihxN4n0IbTQwbhFA0oTvE/V SadAhnZ6tWzO/MjhBIQOKPRa3pHE/3be7wZAkA276kYTfAtC2qf8fkmIPZXaIVf0zw8c t/irhvw5OasmW+UBHE8DREOAm3xGuyUCEcNhmBNHNLp3ciyAJJw/J0h/szxhgjoa69nm eRAy2ysKSoDZLWnkVg4SkMRQllvPPUAmE5w5JDfA/cUQLTDYv4ITWmUX5pECjJnStmv8 NQzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770984525; x=1771589325; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=hXJX7nXY8BjcdSOfqiZmvYAlq9sn8uCtkrmoZSGXdnE=; b=j059860CNamrDJQRGeqQ9vpxG5jlfYrI//GTyXhhw9ObTmd9V11+KtK4DkTwmbDzn/ imYqj3UmR7zufNtvetNXB8cY954aL2pnNQtED8MMvvh1rYNBmpTu7k5BwFkPFedHgnUr 8VuDhSvKyXMJpuBvTpkK7cXKx/sRTybE9os5tRkNwXKu6R024YkeKvFudbdzaY3VrWZG V8XpyrXdjXDKZqxZ9BeYDZroGIYC9Xv5XyrBokbvUhtwLa8GjJ3lD5x+Y+1xezcvHGSU EdvIw+WwdZxRN4aUtLnNhcPlzuTXmhn3BIYMsl8gzboAUMIiaPrAQ1JbRIH1Rdbp+OwG yoyQ== X-Forwarded-Encrypted: i=1; AJvYcCUTgD8IrztsZ/O+Anq4yXlbaT8zAokwgORpjRT8MHC9hbZP9mtTX2G4jX3ewtkqd1g6UySH6zljzuKAu3o=@vger.kernel.org X-Gm-Message-State: AOJu0YwfrmS0wIdp/rZwGtQ1hSidft9pkvph//kjL6D3v9LNR+cxo8F5 RF7Ox6ibxhUdOl3FeNuO7wLS2ZufQAmeNuffFjDRXLEc2kfhjuHQC3JU X-Gm-Gg: AZuq6aKcXSybjqv6ifpOvCg9woMkOvHFQUrEN9ROdKWanT87yv0xNEvwi8x8Me3Y7yp hSHRy7c3fofndPKIrEMzL4+e0q795Y5WNwG7mwOLH7FgX9sEvYyC62ncj5tOJeLVIH/PB3jTwzd 1Nr+iocBiGCMS368PFt9202g1SLuwQ3xDyHyMnfvUG/KB1BLNKBdUGEqgC4Awj8uDje5AjIEUbh R7lw6FFTX6RJGl/xBAmQGMtRwSOVuGMHmaiGABhiYo8crBMqC/ucgXpFcGgQoOcA2ofBE3Tor2z nsA5dib6TzqvF9PcGw8fzzlGqeyfZl9OTAUz0CSEFNjZfgCNP5p5fe6Hlagi1P+FzcjnMsoQ4VV /PI3ogjPKjcwKgh23jSAHmi7oUwyGj0MUgqutZvIMp8RqxT04nORyA+JHRonns8RhAc2K63DHgA dtFJy/K7jmhC/hZYPh55Vy9WdzIzULLqMzmXI/3qFybIFFVCti0Pbfy5hWT5QDlEjFS8jUsYf3N xJizVg= X-Received: by 2002:a05:600c:4f4b:b0:477:98f7:2aec with SMTP id 5b1f17b1804b1-48373a160b8mr29989545e9.3.1770984524690; Fri, 13 Feb 2026 04:08:44 -0800 (PST) Received: from Arch-Spectre.dur.ac.uk ([129.234.0.168]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4835d99497asm289274955e9.6.2026.02.13.04.08.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Feb 2026 04:08:44 -0800 (PST) From: Yicong Hui To: christian.koenig@amd.com Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, skhan@linuxfoundation.org, david.hunter.linux@gmail.com, Yicong Hui Subject: [RFC PATCH v1 1/2] drm/syncobj: Add DRM_IOCTL_SYNCOBJ_QUERY_ERROR to query fence error status Date: Fri, 13 Feb 2026 12:08:34 +0000 Message-ID: <20260213120836.81283-2-yiconghui@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260213120836.81283-1-yiconghui@gmail.com> References: <20260213120836.81283-1-yiconghui@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Add DRM_IOCTL_SYNCOBJ_QUERY_ERROR to allow userspace to query the error status of a fence held by a timeline/binary syncobj. Signed-off-by: Yicong Hui --- drivers/gpu/drm/drm_internal.h | 2 ++ drivers/gpu/drm/drm_ioctl.c | 2 ++ drivers/gpu/drm/drm_syncobj.c | 22 ++++++++++++++++++++++ include/uapi/drm/drm.h | 13 +++++++++++++ 4 files changed, 39 insertions(+) diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index f893b1e3a596..d4d722983544 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -285,6 +285,8 @@ int drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private); int drm_syncobj_query_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private); +int drm_syncobj_query_error_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private); /* drm_framebuffer.c */ void drm_framebuffer_print_info(struct drm_printer *p, unsigned int indent, diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index ff193155129e..61b114a6a65f 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -732,6 +732,8 @@ static const struct drm_ioctl_desc drm_ioctls[] = { DRM_IOCTL_DEF(DRM_IOCTL_MODE_LIST_LESSEES, drm_mode_list_lessees_ioctl, DRM_MASTER), DRM_IOCTL_DEF(DRM_IOCTL_MODE_GET_LEASE, drm_mode_get_lease_ioctl, DRM_MASTER), DRM_IOCTL_DEF(DRM_IOCTL_MODE_REVOKE_LEASE, drm_mode_revoke_lease_ioctl, DRM_MASTER), + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_QUERY_ERROR, drm_syncobj_query_error_ioctl, + DRM_RENDER_ALLOW), }; #define DRM_CORE_IOCTL_COUNT ARRAY_SIZE(drm_ioctls) diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index 2d4ab745fdad..2152cd029070 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -1717,3 +1717,25 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data, return ret; } + +int drm_syncobj_query_error_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private) +{ + struct drm_syncobj_error *args = data; + struct dma_fence *fence; + int ret; + + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) + return -EOPNOTSUPP; + + ret = drm_syncobj_find_fence(file_private, args->handle, args->point, 0, &fence); + + if (ret) + return ret; + + args->error = fence->error; + + dma_fence_put(fence); + + return 0; +} diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index 27cc159c1d27..087c0f2120ec 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -1051,6 +1051,11 @@ struct drm_syncobj_timeline_array { __u32 flags; }; +struct drm_syncobj_error { + __u32 handle; + __s32 error; + __u64 point; +}; /* Query current scanout sequence number */ struct drm_crtc_get_sequence { @@ -1363,6 +1368,14 @@ extern "C" { */ #define DRM_IOCTL_GEM_CHANGE_HANDLE DRM_IOWR(0xD2, struct drm_gem_change_handle) +/** + * DRM_IOCTL_SYNCOBJ_QUERY_ERROR - Query the error code from a failed drm_syncobj + * + * This ioctl provides userspace a way to query the error code of a binary and + * timeline drm_syncobj in the case that the submission fails. + */ +#define DRM_IOCTL_SYNCOBJ_QUERY_ERROR DRM_IOWR(0xD3, struct drm_syncobj_error) + /* * Device specific ioctls should only be in their respective headers * The device specific ioctl range is from 0x40 to 0x9f. -- 2.53.0