* ✗ CI.checkpatch: warning for Add clear-error-counter command to drm_ras
2026-04-09 7:33 [PATCH v2 0/2] Add clear-error-counter command to drm_ras Riana Tauro
@ 2026-04-09 7:07 ` Patchwork
2026-04-09 7:08 ` ✗ CI.KUnit: failure " Patchwork
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2026-04-09 7:07 UTC (permalink / raw)
To: Riana Tauro; +Cc: intel-xe
== Series Details ==
Series: Add clear-error-counter command to drm_ras
URL : https://patchwork.freedesktop.org/series/164601/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
1f57ba1afceae32108bd24770069f764d940a0e4
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 6d9a11f9d7dd850a6894de837f3403ce165e8554
Author: Riana Tauro <riana.tauro@intel.com>
Date: Thu Apr 9 13:03:20 2026 +0530
drm/xe/xe_drm_ras: Add support for clear-error-counter in XE drm_ras
Add support for clear-error-counter command in XE drm_ras
This resets the counter value.
Usage:
$ sudo ynl --family drm_ras --do clear-error-counter --json \
'{"node-id":1, "error-id":1}'
None
Signed-off-by: Riana Tauro <riana.tauro@intel.com>
Reviewed-by: Raag Jadav <raag.jadav@intel.com>
+ /mt/dim checkpatch e105f427a4533d9a6d4597597da78484313c9b61 drm-intel
d45f37f8710d drm/drm_ras: Add clear-error-counter netlink command to drm_ras
-:165: WARNING:LONG_LINE: line length of 116 exceeds 100 columns
#165: FILE: drivers/gpu/drm/drm_ras_nl.c:26:
+static const struct nla_policy drm_ras_clear_error_counter_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
total: 0 errors, 1 warnings, 0 checks, 163 lines checked
6d9a11f9d7dd drm/xe/xe_drm_ras: Add support for clear-error-counter in XE drm_ras
^ permalink raw reply [flat|nested] 10+ messages in thread
* ✗ CI.KUnit: failure for Add clear-error-counter command to drm_ras
2026-04-09 7:33 [PATCH v2 0/2] Add clear-error-counter command to drm_ras Riana Tauro
2026-04-09 7:07 ` ✗ CI.checkpatch: warning for " Patchwork
@ 2026-04-09 7:08 ` Patchwork
2026-04-09 7:33 ` [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink " Riana Tauro
2026-04-09 7:33 ` [PATCH v2 2/2] drm/xe/xe_drm_ras: Add support for clear-error-counter in XE drm_ras Riana Tauro
3 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2026-04-09 7:08 UTC (permalink / raw)
To: Riana Tauro; +Cc: intel-xe
== Series Details ==
Series: Add clear-error-counter command to drm_ras
URL : https://patchwork.freedesktop.org/series/164601/
State : failure
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[07:07:17] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[07:07:21] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[07:07:52] Starting KUnit Kernel (1/1)...
[07:07:52] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[07:07:53] ================== guc_buf (11 subtests) ===================
[07:07:53] [PASSED] test_smallest
[07:07:53] [PASSED] test_largest
[07:07:53] [PASSED] test_granular
[07:07:53] [PASSED] test_unique
[07:07:53] [PASSED] test_overlap
[07:07:53] [PASSED] test_reusable
[07:07:53] [PASSED] test_too_big
[07:07:53] [PASSED] test_flush
[07:07:53] [PASSED] test_lookup
[07:07:53] [PASSED] test_data
[07:07:53] [PASSED] test_class
[07:07:53] ===================== [PASSED] guc_buf =====================
[07:07:53] =================== guc_dbm (7 subtests) ===================
[07:07:53] [PASSED] test_empty
[07:07:53] [PASSED] test_default
[07:07:53] ======================== test_size ========================
[07:07:53] [PASSED] 4
[07:07:53] [PASSED] 8
[07:07:53] [PASSED] 32
[07:07:53] [PASSED] 256
[07:07:53] ==================== [PASSED] test_size ====================
[07:07:53] ======================= test_reuse ========================
[07:07:53] [PASSED] 4
[07:07:53] [PASSED] 8
[07:07:53] [PASSED] 32
[07:07:53] [PASSED] 256
[07:07:53] =================== [PASSED] test_reuse ====================
[07:07:53] =================== test_range_overlap ====================
[07:07:53] [PASSED] 4
[07:07:53] [PASSED] 8
[07:07:53] [PASSED] 32
[07:07:53] [PASSED] 256
[07:07:53] =============== [PASSED] test_range_overlap ================
[07:07:53] =================== test_range_compact ====================
[07:07:53] [PASSED] 4
[07:07:53] [PASSED] 8
[07:07:53] [PASSED] 32
[07:07:53] [PASSED] 256
[07:07:53] =============== [PASSED] test_range_compact ================
[07:07:53] ==================== test_range_spare =====================
[07:07:53] [PASSED] 4
[07:07:53] [PASSED] 8
[07:07:53] [PASSED] 32
[07:07:53] [PASSED] 256
[07:07:53] ================ [PASSED] test_range_spare =================
[07:07:53] ===================== [PASSED] guc_dbm =====================
[07:07:53] =================== guc_idm (6 subtests) ===================
[07:07:53] [PASSED] bad_init
[07:07:53] [PASSED] no_init
[07:07:53] [PASSED] init_fini
[07:07:53] [PASSED] check_used
[07:07:53] [PASSED] check_quota
[07:07:53] [PASSED] check_all
[07:07:53] ===================== [PASSED] guc_idm =====================
[07:07:53] ================== no_relay (3 subtests) ===================
[07:07:53] [PASSED] xe_drops_guc2pf_if_not_ready
[07:07:53] [PASSED] xe_drops_guc2vf_if_not_ready
[07:07:53] [PASSED] xe_rejects_send_if_not_ready
[07:07:53] ==================== [PASSED] no_relay =====================
[07:07:53] ================== pf_relay (14 subtests) ==================
[07:07:53] [PASSED] pf_rejects_guc2pf_too_short
[07:07:53] [PASSED] pf_rejects_guc2pf_too_long
[07:07:53] [PASSED] pf_rejects_guc2pf_no_payload
[07:07:53] [PASSED] pf_fails_no_payload
[07:07:53] [PASSED] pf_fails_bad_origin
[07:07:53] [PASSED] pf_fails_bad_type
[07:07:53] [PASSED] pf_txn_reports_error
[07:07:53] [PASSED] pf_txn_sends_pf2guc
[07:07:53] [PASSED] pf_sends_pf2guc
[07:07:53] [SKIPPED] pf_loopback_nop
[07:07:53] [SKIPPED] pf_loopback_echo
[07:07:53] [SKIPPED] pf_loopback_fail
[07:07:53] [SKIPPED] pf_loopback_busy
[07:07:53] [SKIPPED] pf_loopback_retry
[07:07:53] ==================== [PASSED] pf_relay =====================
[07:07:53] ================== vf_relay (3 subtests) ===================
[07:07:53] [PASSED] vf_rejects_guc2vf_too_short
[07:07:53] [PASSED] vf_rejects_guc2vf_too_long
[07:07:53] [PASSED] vf_rejects_guc2vf_no_payload
[07:07:53] ==================== [PASSED] vf_relay =====================
[07:07:53] ================ pf_gt_config (9 subtests) =================
[07:07:53] [PASSED] fair_contexts_1vf
[07:07:53] [PASSED] fair_doorbells_1vf
[07:07:53] [PASSED] fair_ggtt_1vf
[07:07:53] ====================== fair_vram_1vf ======================
[07:07:53] [PASSED] 3.50 GiB
[07:07:53] [PASSED] 11.5 GiB
[07:07:53] [PASSED] 15.5 GiB
[07:07:53] [PASSED] 31.5 GiB
[07:07:53] [PASSED] 63.5 GiB
[07:07:53] [PASSED] 1.91 GiB
[07:07:53] ================== [PASSED] fair_vram_1vf ==================
[07:07:53] ================ fair_vram_1vf_admin_only =================
[07:07:53] [PASSED] 3.50 GiB
[07:07:53] [PASSED] 11.5 GiB
[07:07:53] [PASSED] 15.5 GiB
[07:07:53] [PASSED] 31.5 GiB
[07:07:53] [PASSED] 63.5 GiB
[07:07:53] [PASSED] 1.91 GiB
[07:07:53] ============ [PASSED] fair_vram_1vf_admin_only =============
[07:07:53] ====================== fair_contexts ======================
[07:07:53] [PASSED] 1 VF
[07:07:53] [PASSED] 2 VFs
[07:07:53] [PASSED] 3 VFs
[07:07:53] [PASSED] 4 VFs
[07:07:53] [PASSED] 5 VFs
[07:07:53] [PASSED] 6 VFs
[07:07:53] [PASSED] 7 VFs
[07:07:53] [PASSED] 8 VFs
[07:07:53] [PASSED] 9 VFs
[07:07:53] [PASSED] 10 VFs
[07:07:53] [PASSED] 11 VFs
[07:07:53] [PASSED] 12 VFs
[07:07:53] [PASSED] 13 VFs
[07:07:53] [PASSED] 14 VFs
[07:07:53] [PASSED] 15 VFs
[07:07:53] [PASSED] 16 VFs
[07:07:53] [PASSED] 17 VFs
[07:07:53] [PASSED] 18 VFs
[07:07:53] [PASSED] 19 VFs
[07:07:53] [PASSED] 20 VFs
[07:07:53] [PASSED] 21 VFs
[07:07:53] [PASSED] 22 VFs
[07:07:53] [PASSED] 23 VFs
[07:07:53] [PASSED] 24 VFs
[07:07:53] [PASSED] 25 VFs
[07:07:53] [PASSED] 26 VFs
[07:07:53] [PASSED] 27 VFs
[07:07:53] [PASSED] 28 VFs
[07:07:53] [PASSED] 29 VFs
[07:07:53] [PASSED] 30 VFs
[07:07:53] [PASSED] 31 VFs
[07:07:53] [PASSED] 32 VFs
[07:07:53] [PASSED] 33 VFs
[07:07:53] [PASSED] 34 VFs
[07:07:53] [PASSED] 35 VFs
[07:07:53] [PASSED] 36 VFs
[07:07:53] [PASSED] 37 VFs
[07:07:53] [PASSED] 38 VFs
[07:07:53] [PASSED] 39 VFs
[07:07:53] [PASSED] 40 VFs
[07:07:53] [PASSED] 41 VFs
[07:07:53] [PASSED] 42 VFs
[07:07:53] [PASSED] 43 VFs
[07:07:53] [PASSED] 44 VFs
[07:07:53] [PASSED] 45 VFs
[07:07:53] [PASSED] 46 VFs
[07:07:53] [PASSED] 47 VFs
[07:07:53] [PASSED] 48 VFs
[07:07:53] [PASSED] 49 VFs
[07:07:53] [PASSED] 50 VFs
[07:07:53] [PASSED] 51 VFs
[07:07:53] [PASSED] 52 VFs
[07:07:53] [PASSED] 53 VFs
[07:07:53] [PASSED] 54 VFs
[07:07:53] [PASSED] 55 VFs
[07:07:53] [PASSED] 56 VFs
[07:07:53] [PASSED] 57 VFs
[07:07:53] [PASSED] 58 VFs
[07:07:53] [PASSED] 59 VFs
[07:07:53] [PASSED] 60 VFs
[07:07:53] [PASSED] 61 VFs
[07:07:53] [PASSED] 62 VFs
[07:07:53] [PASSED] 63 VFs
[07:07:53] ================== [PASSED] fair_contexts ==================
[07:07:53] ===================== fair_doorbells ======================
[07:07:53] [PASSED] 1 VF
[07:07:53] [PASSED] 2 VFs
[07:07:53] [PASSED] 3 VFs
[07:07:53] [PASSED] 4 VFs
[07:07:53] [PASSED] 5 VFs
[07:07:53] [PASSED] 6 VFs
[07:07:53] [PASSED] 7 VFs
[07:07:53] [PASSED] 8 VFs
[07:07:53] [PASSED] 9 VFs
[07:07:53] [PASSED] 10 VFs
[07:07:53] [PASSED] 11 VFs
[07:07:53] [PASSED] 12 VFs
[07:07:53] [PASSED] 13 VFs
[07:07:53] [PASSED] 14 VFs
[07:07:53] [PASSED] 15 VFs
[07:07:53] [PASSED] 16 VFs
[07:07:53] [PASSED] 17 VFs
[07:07:53] [PASSED] 18 VFs
[07:07:53] [PASSED] 19 VFs
[07:07:53] [PASSED] 20 VFs
[07:07:53] [PASSED] 21 VFs
[07:07:53] [PASSED] 22 VFs
[07:07:53] [PASSED] 23 VFs
[07:07:53] [PASSED] 24 VFs
[07:07:53] [PASSED] 25 VFs
[07:07:53] [PASSED] 26 VFs
[07:07:53] [PASSED] 27 VFs
[07:07:53] [PASSED] 28 VFs
[07:07:53] [PASSED] 29 VFs
[07:07:53] [PASSED] 30 VFs
[07:07:53] [PASSED] 31 VFs
[07:07:53] [PASSED] 32 VFs
[07:07:53] [PASSED] 33 VFs
[07:07:53] [PASSED] 34 VFs
[07:07:53] [PASSED] 35 VFs
[07:07:53] [PASSED] 36 VFs
[07:07:53] [PASSED] 37 VFs
[07:07:53] [PASSED] 38 VFs
[07:07:53] [PASSED] 39 VFs
[07:07:53] [PASSED] 40 VFs
[07:07:53] [PASSED] 41 VFs
[07:07:53] [PASSED] 42 VFs
[07:07:53] [PASSED] 43 VFs
[07:07:53] [PASSED] 44 VFs
[07:07:53] [PASSED] 45 VFs
[07:07:53] [PASSED] 46 VFs
[07:07:53] [PASSED] 47 VFs
[07:07:53] [PASSED] 48 VFs
[07:07:53] [PASSED] 49 VFs
[07:07:53] [PASSED] 50 VFs
[07:07:53] [PASSED] 51 VFs
[07:07:53] [PASSED] 52 VFs
[07:07:53] [PASSED] 53 VFs
[07:07:53] [PASSED] 54 VFs
[07:07:53] [PASSED] 55 VFs
[07:07:53] [PASSED] 56 VFs
[07:07:53] [PASSED] 57 VFs
[07:07:53] [PASSED] 58 VFs
[07:07:53] [PASSED] 59 VFs
[07:07:53] [PASSED] 60 VFs
[07:07:53] [PASSED] 61 VFs
[07:07:53] [PASSED] 62 VFs
[07:07:53] [PASSED] 63 VFs
[07:07:53] ================= [PASSED] fair_doorbells ==================
[07:07:53] ======================== fair_ggtt ========================
[07:07:53] [PASSED] 1 VF
[07:07:53] [PASSED] 2 VFs
[07:07:53] [PASSED] 3 VFs
[07:07:53] [PASSED] 4 VFs
[07:07:53] [PASSED] 5 VFs
[07:07:53] [PASSED] 6 VFs
[07:07:53] [PASSED] 7 VFs
[07:07:53] [PASSED] 8 VFs
[07:07:53] [PASSED] 9 VFs
[07:07:53] [PASSED] 10 VFs
[07:07:53] [PASSED] 11 VFs
[07:07:53] [PASSED] 12 VFs
[07:07:53] [PASSED] 13 VFs
[07:07:53] [PASSED] 14 VFs
[07:07:53] [PASSED] 15 VFs
[07:07:53] [PASSED] 16 VFs
[07:07:53] [PASSED] 17 VFs
[07:07:53] [PASSED] 18 VFs
[07:07:53] [PASSED] 19 VFs
[07:07:53] [PASSED] 20 VFs
[07:07:53] [PASSED] 21 VFs
[07:07:53] [PASSED] 22 VFs
[07:07:53] [PASSED] 23 VFs
[07:07:53] [PASSED] 24 VFs
[07:07:53] [PASSED] 25 VFs
[07:07:53] [PASSED] 26 VFs
[07:07:53] [PASSED] 27 VFs
[07:07:53] [PASSED] 28 VFs
[07:07:53] [PASSED] 29 VFs
[07:07:53] [PASSED] 30 VFs
[07:07:53] [PASSED] 31 VFs
[07:07:53] [PASSED] 32 VFs
[07:07:53] [PASSED] 33 VFs
[07:07:53] [PASSED] 34 VFs
[07:07:53] [PASSED] 35 VFs
[07:07:53] [PASSED] 36 VFs
[07:07:53] [PASSED] 37 VFs
[07:07:53] [PASSED] 38 VFs
[07:07:53] [PASSED] 39 VFs
[07:07:53] [PASSED] 40 VFs
[07:07:53] [PASSED] 41 VFs
[07:07:53] [PASSED] 42 VFs
[07:07:53] [PASSED] 43 VFs
[07:07:53] [PASSED] 44 VFs
[07:07:53] [PASSED] 45 VFs
[07:07:53] [PASSED] 46 VFs
[07:07:53] [PASSED] 47 VFs
[07:07:53] [PASSED] 48 VFs
[07:07:53] [PASSED] 49 VFs
[07:07:53] [PASSED] 50 VFs
[07:07:53] [PASSED] 51 VFs
[07:07:53] [PASSED] 52 VFs
[07:07:53] [PASSED] 53 VFs
[07:07:53] [PASSED] 54 VFs
[07:07:53] [PASSED] 55 VFs
[07:07:53] [PASSED] 56 VFs
[07:07:53] [PASSED] 57 VFs
[07:07:53] [PASSED] 58 VFs
[07:07:53] [PASSED] 59 VFs
[07:07:53] [PASSED] 60 VFs
[07:07:53] [PASSED] 61 VFs
[07:07:53] [PASSED] 62 VFs
[07:07:53] [PASSED] 63 VFs
[07:07:53] ==================== [PASSED] fair_ggtt ====================
[07:07:53] ======================== fair_vram ========================
[07:07:53] [PASSED] 1 VF
[07:07:53] [PASSED] 2 VFs
[07:07:53] [PASSED] 3 VFs
[07:07:53] [PASSED] 4 VFs
[07:07:53] [PASSED] 5 VFs
[07:07:53] [PASSED] 6 VFs
[07:07:53] [PASSED] 7 VFs
[07:07:53] [PASSED] 8 VFs
[07:07:53] [PASSED] 9 VFs
[07:07:53] [PASSED] 10 VFs
[07:07:53] [PASSED] 11 VFs
[07:07:53] [PASSED] 12 VFs
[07:07:53] [PASSED] 13 VFs
[07:07:53] [PASSED] 14 VFs
[07:07:53] [PASSED] 15 VFs
[07:07:53] [PASSED] 16 VFs
[07:07:53] [PASSED] 17 VFs
[07:07:53] [PASSED] 18 VFs
[07:07:53] [PASSED] 19 VFs
[07:07:53] [PASSED] 20 VFs
[07:07:53] [PASSED] 21 VFs
[07:07:53] [PASSED] 22 VFs
[07:07:53] [PASSED] 23 VFs
[07:07:53] [PASSED] 24 VFs
[07:07:53] [PASSED] 25 VFs
[07:07:53] [PASSED] 26 VFs
[07:07:53] [PASSED] 27 VFs
[07:07:53] [PASSED] 28 VFs
[07:07:53] [PASSED] 29 VFs
[07:07:53] [PASSED] 30 VFs
[07:07:53] [PASSED] 31 VFs
[07:07:53] [PASSED] 32 VFs
[07:07:53] [PASSED] 33 VFs
[07:07:53] [PASSED] 34 VFs
[07:07:53] [PASSED] 35 VFs
[07:07:53] [PASSED] 36 VFs
[07:07:53] [PASSED] 37 VFs
[07:07:53] [PASSED] 38 VFs
[07:07:53] [PASSED] 39 VFs
[07:07:53] [PASSED] 40 VFs
[07:07:53] [PASSED] 41 VFs
[07:07:53] [PASSED] 42 VFs
[07:07:53] [PASSED] 43 VFs
[07:07:53] [PASSED] 44 VFs
[07:07:53] [PASSED] 45 VFs
[07:07:53] [PASSED] 46 VFs
[07:07:53] [PASSED] 47 VFs
[07:07:53] [PASSED] 48 VFs
[07:07:53] [PASSED] 49 VFs
[07:07:53] [PASSED] 50 VFs
[07:07:53] [PASSED] 51 VFs
[07:07:53] [PASSED] 52 VFs
[07:07:53] [PASSED] 53 VFs
[07:07:53] [PASSED] 54 VFs
[07:07:53] [PASSED] 55 VFs
[07:07:53] [PASSED] 56 VFs
[07:07:53] [PASSED] 57 VFs
[07:07:53] [PASSED] 58 VFs
[07:07:53] [PASSED] 59 VFs
[07:07:53] [PASSED] 60 VFs
[07:07:53] [PASSED] 61 VFs
[07:07:53] [PASSED] 62 VFs
[07:07:53] [PASSED] 63 VFs
[07:07:53] ==================== [PASSED] fair_vram ====================
[07:07:53] ================== [PASSED] pf_gt_config ===================
[07:07:53] ===================== lmtt (1 subtest) =====================
[07:07:53] ======================== test_ops =========================
[07:07:53] [PASSED] 2-level
[07:07:53] [PASSED] multi-level
[07:07:53] ==================== [PASSED] test_ops =====================
[07:07:53] ====================== [PASSED] lmtt =======================
[07:07:53] ================= pf_service (11 subtests) =================
[07:07:53] [PASSED] pf_negotiate_any
[07:07:53] [PASSED] pf_negotiate_base_match
[07:07:53] [PASSED] pf_negotiate_base_newer
[07:07:53] [PASSED] pf_negotiate_base_next
[07:07:53] [SKIPPED] pf_negotiate_base_older
[07:07:53] [PASSED] pf_negotiate_base_prev
[07:07:53] [PASSED] pf_negotiate_latest_match
[07:07:53] [PASSED] pf_negotiate_latest_newer
[07:07:53] [PASSED] pf_negotiate_latest_next
[07:07:53] [SKIPPED] pf_negotiate_latest_older
[07:07:53] [SKIPPED] pf_negotiate_latest_prev
[07:07:53] =================== [PASSED] pf_service ====================
[07:07:53] ================= xe_guc_g2g (2 subtests) ==================
[07:07:53] ============== xe_live_guc_g2g_kunit_default ==============
[07:07:53] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[07:07:53] ============== xe_live_guc_g2g_kunit_allmem ===============
[07:07:53] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[07:07:53] =================== [SKIPPED] xe_guc_g2g ===================
[07:07:53] =================== xe_mocs (2 subtests) ===================
[07:07:53] ================ xe_live_mocs_kernel_kunit ================
[07:07:53] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[07:07:53] ================ xe_live_mocs_reset_kunit =================
[07:07:53] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[07:07:53] ==================== [SKIPPED] xe_mocs =====================
[07:07:53] ================= xe_migrate (2 subtests) ==================
[07:07:53] ================= xe_migrate_sanity_kunit =================
[07:07:53] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[07:07:53] ================== xe_validate_ccs_kunit ==================
[07:07:53] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[07:07:53] =================== [SKIPPED] xe_migrate ===================
[07:07:53] ================== xe_dma_buf (1 subtest) ==================
[07:07:53] ==================== xe_dma_buf_kunit =====================
[07:07:53] ================ [SKIPPED] xe_dma_buf_kunit ================
[07:07:53] =================== [SKIPPED] xe_dma_buf ===================
[07:07:53] ================= xe_bo_shrink (1 subtest) =================
[07:07:53] =================== xe_bo_shrink_kunit ====================
[07:07:53] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[07:07:53] ================== [SKIPPED] xe_bo_shrink ==================
[07:07:53] ==================== xe_bo (2 subtests) ====================
[07:07:53] ================== xe_ccs_migrate_kunit ===================
[07:07:53] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[07:07:53] ==================== xe_bo_evict_kunit ====================
[07:07:53] =============== [SKIPPED] xe_bo_evict_kunit ================
[07:07:53] ===================== [SKIPPED] xe_bo ======================
[07:07:53] ==================== args (13 subtests) ====================
[07:07:53] [PASSED] count_args_test
[07:07:53] [PASSED] call_args_example
[07:07:53] [PASSED] call_args_test
[07:07:53] [PASSED] drop_first_arg_example
[07:07:53] [PASSED] drop_first_arg_test
[07:07:53] [PASSED] first_arg_example
[07:07:53] [PASSED] first_arg_test
[07:07:53] [PASSED] last_arg_example
[07:07:53] [PASSED] last_arg_test
[07:07:53] [PASSED] pick_arg_example
[07:07:53] [PASSED] if_args_example
[07:07:53] [PASSED] if_args_test
[07:07:53] [PASSED] sep_comma_example
[07:07:53] ====================== [PASSED] args =======================
[07:07:53] =================== xe_pci (3 subtests) ====================
[07:07:53] ==================== check_graphics_ip ====================
[07:07:53] [PASSED] 12.00 Xe_LP
[07:07:53] [PASSED] 12.10 Xe_LP+
[07:07:53] [PASSED] 12.55 Xe_HPG
[07:07:53] [PASSED] 12.60 Xe_HPC
[07:07:53] [PASSED] 12.70 Xe_LPG
[07:07:53] [PASSED] 12.71 Xe_LPG
[07:07:53] [PASSED] 12.74 Xe_LPG+
[07:07:53] [PASSED] 20.01 Xe2_HPG
[07:07:53] [PASSED] 20.02 Xe2_HPG
[07:07:53] [PASSED] 20.04 Xe2_LPG
[07:07:53] [PASSED] 30.00 Xe3_LPG
[07:07:53] [PASSED] 30.01 Xe3_LPG
[07:07:53] [PASSED] 30.03 Xe3_LPG
[07:07:53] [PASSED] 30.04 Xe3_LPG
[07:07:53] [PASSED] 30.05 Xe3_LPG
[07:07:53] [PASSED] 35.10 Xe3p_LPG
[07:07:53] [PASSED] 35.11 Xe3p_XPC
[07:07:53] ================ [PASSED] check_graphics_ip ================
[07:07:53] ===================== check_media_ip ======================
[07:07:53] [PASSED] 12.00 Xe_M
[07:07:53] [PASSED] 12.55 Xe_HPM
[07:07:53] [PASSED] 13.00 Xe_LPM+
[07:07:53] [PASSED] 13.01 Xe2_HPM
[07:07:53] [PASSED] 20.00 Xe2_LPM
[07:07:53] [PASSED] 30.00 Xe3_LPM
[07:07:53] [PASSED] 30.02 Xe3_LPM
[07:07:53] [PASSED] 35.00 Xe3p_LPM
[07:07:53] [PASSED] 35.03 Xe3p_HPM
[07:07:53] ================= [PASSED] check_media_ip ==================
[07:07:53] =================== check_platform_desc ===================
[07:07:53] [PASSED] 0x9A60 (TIGERLAKE)
[07:07:53] [PASSED] 0x9A68 (TIGERLAKE)
[07:07:53] [PASSED] 0x9A70 (TIGERLAKE)
[07:07:53] [PASSED] 0x9A40 (TIGERLAKE)
[07:07:53] [PASSED] 0x9A49 (TIGERLAKE)
[07:07:53] [PASSED] 0x9A59 (TIGERLAKE)
[07:07:53] [PASSED] 0x9A78 (TIGERLAKE)
[07:07:53] [PASSED] 0x9AC0 (TIGERLAKE)
[07:07:53] [PASSED] 0x9AC9 (TIGERLAKE)
[07:07:53] [PASSED] 0x9AD9 (TIGERLAKE)
[07:07:53] [PASSED] 0x9AF8 (TIGERLAKE)
[07:07:53] [PASSED] 0x4C80 (ROCKETLAKE)
[07:07:53] [PASSED] 0x4C8A (ROCKETLAKE)
[07:07:53] [PASSED] 0x4C8B (ROCKETLAKE)
[07:07:53] [PASSED] 0x4C8C (ROCKETLAKE)
[07:07:53] [PASSED] 0x4C90 (ROCKETLAKE)
[07:07:53] [PASSED] 0x4C9A (ROCKETLAKE)
[07:07:53] [PASSED] 0x4680 (ALDERLAKE_S)
[07:07:53] [PASSED] 0x4682 (ALDERLAKE_S)
[07:07:53] [PASSED] 0x4688 (ALDERLAKE_S)
[07:07:53] [PASSED] 0x468A (ALDERLAKE_S)
[07:07:53] [PASSED] 0x468B (ALDERLAKE_S)
[07:07:53] [PASSED] 0x4690 (ALDERLAKE_S)
[07:07:53] [PASSED] 0x4692 (ALDERLAKE_S)
[07:07:53] [PASSED] 0x4693 (ALDERLAKE_S)
[07:07:53] [PASSED] 0x46A0 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46A1 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46A2 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46A3 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46A6 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46A8 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46AA (ALDERLAKE_P)
[07:07:53] [PASSED] 0x462A (ALDERLAKE_P)
[07:07:53] [PASSED] 0x4626 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x4628 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46B0 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46B1 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46B2 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46B3 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46C0 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46C1 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46C2 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46C3 (ALDERLAKE_P)
[07:07:53] [PASSED] 0x46D0 (ALDERLAKE_N)
[07:07:53] [PASSED] 0x46D1 (ALDERLAKE_N)
[07:07:53] [PASSED] 0x46D2 (ALDERLAKE_N)
[07:07:53] [PASSED] 0x46D3 (ALDERLAKE_N)
[07:07:53] [PASSED] 0x46D4 (ALDERLAKE_N)
[07:07:53] [PASSED] 0xA721 (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA7A1 (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA7A9 (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA7AC (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA7AD (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA720 (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA7A0 (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA7A8 (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA7AA (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA7AB (ALDERLAKE_P)
[07:07:53] [PASSED] 0xA780 (ALDERLAKE_S)
[07:07:53] [PASSED] 0xA781 (ALDERLAKE_S)
[07:07:53] [PASSED] 0xA782 (ALDERLAKE_S)
[07:07:53] [PASSED] 0xA783 (ALDERLAKE_S)
[07:07:53] [PASSED] 0xA788 (ALDERLAKE_S)
[07:07:53] [PASSED] 0xA789 (ALDERLAKE_S)
[07:07:53] [PASSED] 0xA78A (ALDERLAKE_S)
[07:07:53] [PASSED] 0xA78B (ALDERLAKE_S)
[07:07:53] [PASSED] 0x4905 (DG1)
[07:07:53] [PASSED] 0x4906 (DG1)
[07:07:53] [PASSED] 0x4907 (DG1)
[07:07:53] [PASSED] 0x4908 (DG1)
[07:07:53] [PASSED] 0x4909 (DG1)
[07:07:53] [PASSED] 0x56C0 (DG2)
[07:07:53] [PASSED] 0x56C2 (DG2)
[07:07:53] [PASSED] 0x56C1 (DG2)
[07:07:53] [PASSED] 0x7D51 (METEORLAKE)
[07:07:53] [PASSED] 0x7DD1 (METEORLAKE)
[07:07:53] [PASSED] 0x7D41 (METEORLAKE)
[07:07:53] [PASSED] 0x7D67 (METEORLAKE)
[07:07:53] [PASSED] 0xB640 (METEORLAKE)
[07:07:53] [PASSED] 0x56A0 (DG2)
[07:07:53] [PASSED] 0x56A1 (DG2)
[07:07:53] [PASSED] 0x56A2 (DG2)
[07:07:53] [PASSED] 0x56BE (DG2)
[07:07:53] [PASSED] 0x56BF (DG2)
[07:07:53] [PASSED] 0x5690 (DG2)
[07:07:53] [PASSED] 0x5691 (DG2)
[07:07:53] [PASSED] 0x5692 (DG2)
[07:07:53] [PASSED] 0x56A5 (DG2)
[07:07:53] [PASSED] 0x56A6 (DG2)
[07:07:53] [PASSED] 0x56B0 (DG2)
[07:07:53] [PASSED] 0x56B1 (DG2)
[07:07:53] [PASSED] 0x56BA (DG2)
[07:07:53] [PASSED] 0x56BB (DG2)
[07:07:53] [PASSED] 0x56BC (DG2)
[07:07:53] [PASSED] 0x56BD (DG2)
[07:07:53] [PASSED] 0x5693 (DG2)
[07:07:53] [PASSED] 0x5694 (DG2)
[07:07:53] [PASSED] 0x5695 (DG2)
[07:07:53] [PASSED] 0x56A3 (DG2)
[07:07:53] [PASSED] 0x56A4 (DG2)
[07:07:53] [PASSED] 0x56B2 (DG2)
[07:07:53] [PASSED] 0x56B3 (DG2)
[07:07:53] [PASSED] 0x5696 (DG2)
[07:07:53] [PASSED] 0x5697 (DG2)
[07:07:53] [PASSED] 0xB69 (PVC)
[07:07:53] [PASSED] 0xB6E (PVC)
[07:07:53] [PASSED] 0xBD4 (PVC)
[07:07:53] [PASSED] 0xBD5 (PVC)
[07:07:53] [PASSED] 0xBD6 (PVC)
[07:07:53] [PASSED] 0xBD7 (PVC)
[07:07:53] [PASSED] 0xBD8 (PVC)
[07:07:53] [PASSED] 0xBD9 (PVC)
[07:07:53] [PASSED] 0xBDA (PVC)
[07:07:53] [PASSED] 0xBDB (PVC)
[07:07:53] [PASSED] 0xBE0 (PVC)
[07:07:53] [PASSED] 0xBE1 (PVC)
[07:07:53] [PASSED] 0xBE5 (PVC)
[07:07:53] [PASSED] 0x7D40 (METEORLAKE)
[07:07:53] [PASSED] 0x7D45 (METEORLAKE)
[07:07:53] [PASSED] 0x7D55 (METEORLAKE)
[07:07:53] [PASSED] 0x7D60 (METEORLAKE)
[07:07:53] [PASSED] 0x7DD5 (METEORLAKE)
[07:07:53] [PASSED] 0x6420 (LUNARLAKE)
[07:07:53] [PASSED] 0x64A0 (LUNARLAKE)
[07:07:53] [PASSED] 0x64B0 (LUNARLAKE)
[07:07:53] [PASSED] 0xE202 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE209 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE20B (BATTLEMAGE)
[07:07:53] [PASSED] 0xE20C (BATTLEMAGE)
[07:07:53] [PASSED] 0xE20D (BATTLEMAGE)
[07:07:53] [PASSED] 0xE210 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE211 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE212 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE216 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE220 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE221 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE222 (BATTLEMAGE)
[07:07:53] [PASSED] 0xE223 (BATTLEMAGE)
[07:07:53] [PASSED] 0xB080 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB081 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB082 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB083 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB084 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB085 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB086 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB087 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB08F (PANTHERLAKE)
[07:07:53] [PASSED] 0xB090 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB0A0 (PANTHERLAKE)
[07:07:53] [PASSED] 0xB0B0 (PANTHERLAKE)
[07:07:53] [PASSED] 0xFD80 (PANTHERLAKE)
[07:07:53] [PASSED] 0xFD81 (PANTHERLAKE)
[07:07:53] [PASSED] 0xD740 (NOVALAKE_S)
[07:07:53] [PASSED] 0xD741 (NOVALAKE_S)
[07:07:53] [PASSED] 0xD742 (NOVALAKE_S)
[07:07:53] [PASSED] 0xD743 (NOVALAKE_S)
[07:07:53] [PASSED] 0xD744 (NOVALAKE_S)
[07:07:53] [PASSED] 0xD745 (NOVALAKE_S)
[07:07:53] [PASSED] 0x674C (CRESCENTISLAND)
[07:07:53] [PASSED] 0xD750 (NOVALAKE_P)
[07:07:53] [PASSED] 0xD751 (NOVALAKE_P)
[07:07:53] [PASSED] 0xD752 (NOVALAKE_P)
[07:07:53] [PASSED] 0xD753 (NOVALAKE_P)
[07:07:53] [PASSED] 0xD754 (NOVALAKE_P)
[07:07:53] [PASSED] 0xD755 (NOVALAKE_P)
[07:07:53] [PASSED] 0xD756 (NOVALAKE_P)
[07:07:53] [PASSED] 0xD757 (NOVALAKE_P)
[07:07:53] [PASSED] 0xD75F (NOVALAKE_P)
[07:07:53] =============== [PASSED] check_platform_desc ===============
[07:07:53] ===================== [PASSED] xe_pci ======================
[07:07:53] =================== xe_rtp (2 subtests) ====================
[07:07:53] =============== xe_rtp_process_to_sr_tests ================
[07:07:53] [PASSED] coalesce-same-reg
[07:07:53] [PASSED] no-match-no-add
[07:07:53] [PASSED] match-or
[07:07:53] [PASSED] match-or-xfail
[07:07:53] [PASSED] no-match-no-add-multiple-rules
[07:07:53] [PASSED] two-regs-two-entries
[07:07:53] [PASSED] clr-one-set-other
[07:07:53] [PASSED] set-field
[07:07:53] [PASSED] conflict-duplicate
stty: 'standard input': Inappropriate ioctl for device
[07:07:53] [PASSED] conflict-not-disjoint
[07:07:53] [PASSED] conflict-reg-type
[07:07:53] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[07:07:53] ================== xe_rtp_process_tests ===================
[07:07:53] [PASSED] active1
[07:07:53] [PASSED] active2
[07:07:53] [PASSED] active-inactive
[07:07:53] [PASSED] inactive-active
[07:07:53] [PASSED] inactive-1st_or_active-inactive
[07:07:53] [PASSED] inactive-2nd_or_active-inactive
[07:07:53] [PASSED] inactive-last_or_active-inactive
[07:07:53] [PASSED] inactive-no_or_active-inactive
[07:07:53] ============== [PASSED] xe_rtp_process_tests ===============
[07:07:53] ===================== [PASSED] xe_rtp ======================
[07:07:53] ==================== xe_wa (1 subtest) =====================
[07:07:53] ======================== xe_wa_gt =========================
[07:07:53] [PASSED] TIGERLAKE B0
[07:07:53] [PASSED] DG1 A0
[07:07:53] [PASSED] DG1 B0
[07:07:53] [PASSED] ALDERLAKE_S A0
[07:07:53] [PASSED] ALDERLAKE_S B0
[07:07:53] [PASSED] ALDERLAKE_S C0
[07:07:53] [PASSED] ALDERLAKE_S D0
[07:07:53] [PASSED] ALDERLAKE_P A0
[07:07:53] [PASSED] ALDERLAKE_P B0
[07:07:53] [PASSED] ALDERLAKE_P C0
[07:07:53] [PASSED] ALDERLAKE_S RPLS D0
[07:07:53] [PASSED] ALDERLAKE_P RPLU E0
[07:07:53] [PASSED] DG2 G10 C0
[07:07:53] [PASSED] DG2 G11 B1
[07:07:53] [PASSED] DG2 G12 A1
[07:07:53] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[07:07:53] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[07:07:53] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[07:07:53] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[07:07:53] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[07:07:53] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[07:07:53] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[07:07:53] ==================== [PASSED] xe_wa_gt =====================
[07:07:53] ====================== [PASSED] xe_wa ======================
[07:07:53] ============================================================
[07:07:53] Testing complete. Ran 597 tests: passed: 579, skipped: 18
[07:07:53] Elapsed time: 36.302s total, 4.245s configuring, 31.440s building, 0.595s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[07:07:53] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[07:07:55] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[07:08:19] Starting KUnit Kernel (1/1)...
[07:08:19] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[07:08:20] ============ drm_test_pick_cmdline (2 subtests) ============
[07:08:20] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[07:08:20] =============== drm_test_pick_cmdline_named ===============
[07:08:20] [PASSED] NTSC
[07:08:20] [PASSED] NTSC-J
[07:08:20] [PASSED] PAL
[07:08:20] [PASSED] PAL-M
[07:08:20] =========== [PASSED] drm_test_pick_cmdline_named ===========
[07:08:20] ============== [PASSED] drm_test_pick_cmdline ==============
[07:08:20] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[07:08:20] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[07:08:20] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[07:08:20] =========== drm_validate_clone_mode (2 subtests) ===========
[07:08:20] ============== drm_test_check_in_clone_mode ===============
[07:08:20] [PASSED] in_clone_mode
[07:08:20] [PASSED] not_in_clone_mode
[07:08:20] ========== [PASSED] drm_test_check_in_clone_mode ===========
[07:08:20] =============== drm_test_check_valid_clones ===============
[07:08:20] [PASSED] not_in_clone_mode
[07:08:20] [PASSED] valid_clone
[07:08:20] [PASSED] invalid_clone
[07:08:20] =========== [PASSED] drm_test_check_valid_clones ===========
[07:08:20] ============= [PASSED] drm_validate_clone_mode =============
[07:08:20] ============= drm_validate_modeset (1 subtest) =============
[07:08:20] [PASSED] drm_test_check_connector_changed_modeset
[07:08:20] ============== [PASSED] drm_validate_modeset ===============
[07:08:20] ====== drm_test_bridge_get_current_state (2 subtests) ======
[07:08:20] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[07:08:20] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[07:08:20] ======== [PASSED] drm_test_bridge_get_current_state ========
[07:08:20] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[07:08:20] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[07:08:20] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[07:08:20] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[07:08:20] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[07:08:20] ============== drm_bridge_alloc (2 subtests) ===============
[07:08:20] [PASSED] drm_test_drm_bridge_alloc_basic
[07:08:20] [PASSED] drm_test_drm_bridge_alloc_get_put
[07:08:20] ================ [PASSED] drm_bridge_alloc =================
[07:08:20] ============= drm_cmdline_parser (40 subtests) =============
[07:08:20] [PASSED] drm_test_cmdline_force_d_only
[07:08:20] [PASSED] drm_test_cmdline_force_D_only_dvi
[07:08:20] [PASSED] drm_test_cmdline_force_D_only_hdmi
[07:08:20] [PASSED] drm_test_cmdline_force_D_only_not_digital
[07:08:20] [PASSED] drm_test_cmdline_force_e_only
[07:08:20] [PASSED] drm_test_cmdline_res
[07:08:20] [PASSED] drm_test_cmdline_res_vesa
[07:08:20] [PASSED] drm_test_cmdline_res_vesa_rblank
[07:08:20] [PASSED] drm_test_cmdline_res_rblank
[07:08:20] [PASSED] drm_test_cmdline_res_bpp
[07:08:20] [PASSED] drm_test_cmdline_res_refresh
[07:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh
[07:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[07:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[07:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[07:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[07:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[07:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[07:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[07:08:20] [PASSED] drm_test_cmdline_res_margins_force_on
[07:08:20] [PASSED] drm_test_cmdline_res_vesa_margins
[07:08:20] [PASSED] drm_test_cmdline_name
[07:08:20] [PASSED] drm_test_cmdline_name_bpp
[07:08:20] [PASSED] drm_test_cmdline_name_option
[07:08:20] [PASSED] drm_test_cmdline_name_bpp_option
[07:08:20] [PASSED] drm_test_cmdline_rotate_0
[07:08:20] [PASSED] drm_test_cmdline_rotate_90
[07:08:20] [PASSED] drm_test_cmdline_rotate_180
[07:08:20] [PASSED] drm_test_cmdline_rotate_270
[07:08:20] [PASSED] drm_test_cmdline_hmirror
[07:08:20] [PASSED] drm_test_cmdline_vmirror
[07:08:20] [PASSED] drm_test_cmdline_margin_options
[07:08:20] [PASSED] drm_test_cmdline_multiple_options
[07:08:20] [PASSED] drm_test_cmdline_bpp_extra_and_option
[07:08:20] [PASSED] drm_test_cmdline_extra_and_option
[07:08:20] [PASSED] drm_test_cmdline_freestanding_options
[07:08:20] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[07:08:20] [PASSED] drm_test_cmdline_panel_orientation
[07:08:20] ================ drm_test_cmdline_invalid =================
[07:08:20] [PASSED] margin_only
[07:08:20] [PASSED] interlace_only
[07:08:20] [PASSED] res_missing_x
[07:08:20] [PASSED] res_missing_y
[07:08:20] [PASSED] res_bad_y
[07:08:20] [PASSED] res_missing_y_bpp
[07:08:20] [PASSED] res_bad_bpp
[07:08:20] [PASSED] res_bad_refresh
[07:08:20] [PASSED] res_bpp_refresh_force_on_off
[07:08:20] [PASSED] res_invalid_mode
[07:08:20] [PASSED] res_bpp_wrong_place_mode
[07:08:20] [PASSED] name_bpp_refresh
[07:08:20] [PASSED] name_refresh
[07:08:20] [PASSED] name_refresh_wrong_mode
[07:08:20] [PASSED] name_refresh_invalid_mode
[07:08:20] [PASSED] rotate_multiple
[07:08:20] [PASSED] rotate_invalid_val
[07:08:20] [PASSED] rotate_truncated
[07:08:20] [PASSED] invalid_option
[07:08:20] [PASSED] invalid_tv_option
[07:08:20] [PASSED] truncated_tv_option
[07:08:20] ============ [PASSED] drm_test_cmdline_invalid =============
[07:08:20] =============== drm_test_cmdline_tv_options ===============
[07:08:20] [PASSED] NTSC
[07:08:20] [PASSED] NTSC_443
[07:08:20] [PASSED] NTSC_J
[07:08:20] [PASSED] PAL
[07:08:20] [PASSED] PAL_M
[07:08:20] [PASSED] PAL_N
[07:08:20] [PASSED] SECAM
[07:08:20] [PASSED] MONO_525
[07:08:20] [PASSED] MONO_625
[07:08:20] =========== [PASSED] drm_test_cmdline_tv_options ===========
[07:08:20] =============== [PASSED] drm_cmdline_parser ================
[07:08:20] ========== drmm_connector_hdmi_init (20 subtests) ==========
[07:08:20] [PASSED] drm_test_connector_hdmi_init_valid
[07:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_8
[07:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_10
[07:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_12
[07:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[07:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_null
[07:08:20] [PASSED] drm_test_connector_hdmi_init_formats_empty
[07:08:20] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[07:08:20] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[07:08:20] [PASSED] supported_formats=0x9 yuv420_allowed=1
[07:08:20] [PASSED] supported_formats=0x9 yuv420_allowed=0
[07:08:20] [PASSED] supported_formats=0x5 yuv420_allowed=1
[07:08:20] [PASSED] supported_formats=0x5 yuv420_allowed=0
[07:08:20] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[07:08:20] [PASSED] drm_test_connector_hdmi_init_null_ddc
[07:08:20] [PASSED] drm_test_connector_hdmi_init_null_product
[07:08:20] [PASSED] drm_test_connector_hdmi_init_null_vendor
[07:08:20] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[07:08:20] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[07:08:20] [PASSED] drm_test_connector_hdmi_init_product_valid
[07:08:20] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[07:08:20] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[07:08:20] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[07:08:20] ========= drm_test_connector_hdmi_init_type_valid =========
[07:08:20] [PASSED] HDMI-A
[07:08:20] [PASSED] HDMI-B
[07:08:20] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[07:08:20] ======== drm_test_connector_hdmi_init_type_invalid ========
[07:08:20] [PASSED] Unknown
[07:08:20] [PASSED] VGA
[07:08:20] [PASSED] DVI-I
[07:08:20] [PASSED] DVI-D
[07:08:20] [PASSED] DVI-A
[07:08:20] [PASSED] Composite
[07:08:20] [PASSED] SVIDEO
[07:08:20] [PASSED] LVDS
[07:08:20] [PASSED] Component
[07:08:20] [PASSED] DIN
[07:08:20] [PASSED] DP
[07:08:20] [PASSED] TV
[07:08:20] [PASSED] eDP
[07:08:20] [PASSED] Virtual
[07:08:20] [PASSED] DSI
[07:08:20] [PASSED] DPI
[07:08:20] [PASSED] Writeback
[07:08:20] [PASSED] SPI
[07:08:20] [PASSED] USB
[07:08:20] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[07:08:20] ============ [PASSED] drmm_connector_hdmi_init =============
[07:08:20] ============= drmm_connector_init (3 subtests) =============
[07:08:20] [PASSED] drm_test_drmm_connector_init
[07:08:20] [PASSED] drm_test_drmm_connector_init_null_ddc
[07:08:20] ========= drm_test_drmm_connector_init_type_valid =========
[07:08:20] [PASSED] Unknown
[07:08:20] [PASSED] VGA
[07:08:20] [PASSED] DVI-I
[07:08:20] [PASSED] DVI-D
[07:08:20] [PASSED] DVI-A
[07:08:20] [PASSED] Composite
[07:08:20] [PASSED] SVIDEO
[07:08:20] [PASSED] LVDS
[07:08:20] [PASSED] Component
[07:08:20] [PASSED] DIN
[07:08:20] [PASSED] DP
[07:08:20] [PASSED] HDMI-A
[07:08:20] [PASSED] HDMI-B
[07:08:20] [PASSED] TV
[07:08:20] [PASSED] eDP
[07:08:20] [PASSED] Virtual
[07:08:20] [PASSED] DSI
[07:08:20] [PASSED] DPI
[07:08:20] [PASSED] Writeback
[07:08:20] [PASSED] SPI
[07:08:20] [PASSED] USB
[07:08:20] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[07:08:20] =============== [PASSED] drmm_connector_init ===============
[07:08:20] ========= drm_connector_dynamic_init (6 subtests) ==========
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_init
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_init_properties
[07:08:20] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[07:08:20] [PASSED] Unknown
[07:08:20] [PASSED] VGA
[07:08:20] [PASSED] DVI-I
[07:08:20] [PASSED] DVI-D
[07:08:20] [PASSED] DVI-A
[07:08:20] [PASSED] Composite
[07:08:20] [PASSED] SVIDEO
[07:08:20] [PASSED] LVDS
[07:08:20] [PASSED] Component
[07:08:20] [PASSED] DIN
[07:08:20] [PASSED] DP
[07:08:20] [PASSED] HDMI-A
[07:08:20] [PASSED] HDMI-B
[07:08:20] [PASSED] TV
[07:08:20] [PASSED] eDP
[07:08:20] [PASSED] Virtual
[07:08:20] [PASSED] DSI
[07:08:20] [PASSED] DPI
[07:08:20] [PASSED] Writeback
[07:08:20] [PASSED] SPI
[07:08:20] [PASSED] USB
[07:08:20] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[07:08:20] ======== drm_test_drm_connector_dynamic_init_name =========
[07:08:20] [PASSED] Unknown
[07:08:20] [PASSED] VGA
[07:08:20] [PASSED] DVI-I
[07:08:20] [PASSED] DVI-D
[07:08:20] [PASSED] DVI-A
[07:08:20] [PASSED] Composite
[07:08:20] [PASSED] SVIDEO
[07:08:20] [PASSED] LVDS
[07:08:20] [PASSED] Component
[07:08:20] [PASSED] DIN
[07:08:20] [PASSED] DP
[07:08:20] [PASSED] HDMI-A
[07:08:20] [PASSED] HDMI-B
[07:08:20] [PASSED] TV
[07:08:20] [PASSED] eDP
[07:08:20] [PASSED] Virtual
[07:08:20] [PASSED] DSI
[07:08:20] [PASSED] DPI
[07:08:20] [PASSED] Writeback
[07:08:20] [PASSED] SPI
[07:08:20] [PASSED] USB
[07:08:20] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[07:08:20] =========== [PASSED] drm_connector_dynamic_init ============
[07:08:20] ==== drm_connector_dynamic_register_early (4 subtests) =====
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[07:08:20] ====== [PASSED] drm_connector_dynamic_register_early =======
[07:08:20] ======= drm_connector_dynamic_register (7 subtests) ========
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[07:08:20] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[07:08:20] ========= [PASSED] drm_connector_dynamic_register ==========
[07:08:20] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[07:08:20] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[07:08:20] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[07:08:20] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[07:08:20] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[07:08:20] ========== drm_test_get_tv_mode_from_name_valid ===========
[07:08:20] [PASSED] NTSC
[07:08:20] [PASSED] NTSC-443
[07:08:20] [PASSED] NTSC-J
[07:08:20] [PASSED] PAL
[07:08:20] [PASSED] PAL-M
[07:08:20] [PASSED] PAL-N
[07:08:20] [PASSED] SECAM
[07:08:20] [PASSED] Mono
[07:08:20] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[07:08:20] [PASSED] drm_test_get_tv_mode_from_name_truncated
[07:08:20] ============ [PASSED] drm_get_tv_mode_from_name ============
[07:08:20] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[07:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[07:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[07:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[07:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[07:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[07:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[07:08:20] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[07:08:20] [PASSED] VIC 96
[07:08:20] [PASSED] VIC 97
[07:08:20] [PASSED] VIC 101
[07:08:20] [PASSED] VIC 102
[07:08:20] [PASSED] VIC 106
[07:08:20] [PASSED] VIC 107
[07:08:20] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[07:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[07:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[07:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[07:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[07:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[07:08:20] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[07:08:20] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[07:08:20] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[07:08:20] [PASSED] Automatic
[07:08:20] [PASSED] Full
[07:08:20] [PASSED] Limited 16:235
[07:08:20] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[07:08:20] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[07:08:20] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[07:08:20] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[07:08:20] === drm_test_drm_hdmi_connector_get_output_format_name ====
[07:08:20] [PASSED] RGB
[07:08:20] [PASSED] YUV 4:2:0
[07:08:20] [PASSED] YUV 4:2:2
[07:08:20] [PASSED] YUV 4:4:4
[07:08:20] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[07:08:20] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[07:08:20] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[07:08:20] ============= drm_damage_helper (21 subtests) ==============
[07:08:20] [PASSED] drm_test_damage_iter_no_damage
[07:08:20] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[07:08:20] [PASSED] drm_test_damage_iter_no_damage_src_moved
[07:08:20] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[07:08:20] [PASSED] drm_test_damage_iter_no_damage_not_visible
[07:08:20] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[07:08:20] [PASSED] drm_test_damage_iter_no_damage_no_fb
[07:08:20] [PASSED] drm_test_damage_iter_simple_damage
[07:08:20] [PASSED] drm_test_damage_iter_single_damage
[07:08:20] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[07:08:20] [PASSED] drm_test_damage_iter_single_damage_outside_src
[07:08:20] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[07:08:20] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[07:08:20] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[07:08:20] [PASSED] drm_test_damage_iter_single_damage_src_moved
[07:08:20] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[07:08:20] [PASSED] drm_test_damage_iter_damage
[07:08:20] [PASSED] drm_test_damage_iter_damage_one_intersect
[07:08:20] [PASSED] drm_test_damage_iter_damage_one_outside
[07:08:20] [PASSED] drm_test_damage_iter_damage_src_moved
[07:08:20] [PASSED] drm_test_damage_iter_damage_not_visible
[07:08:20] ================ [PASSED] drm_damage_helper ================
[07:08:20] ============== drm_dp_mst_helper (3 subtests) ==============
[07:08:20] ============== drm_test_dp_mst_calc_pbn_mode ==============
[07:08:20] [PASSED] Clock 154000 BPP 30 DSC disabled
[07:08:20] [PASSED] Clock 234000 BPP 30 DSC disabled
[07:08:20] [PASSED] Clock 297000 BPP 24 DSC disabled
[07:08:20] [PASSED] Clock 332880 BPP 24 DSC enabled
[07:08:20] [PASSED] Clock 324540 BPP 24 DSC enabled
[07:08:20] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[07:08:20] ============== drm_test_dp_mst_calc_pbn_div ===============
[07:08:20] [PASSED] Link rate 2000000 lane count 4
[07:08:20] [PASSED] Link rate 2000000 lane count 2
[07:08:20] [PASSED] Link rate 2000000 lane count 1
[07:08:20] [PASSED] Link rate 1350000 lane count 4
[07:08:20] [PASSED] Link rate 1350000 lane count 2
[07:08:20] [PASSED] Link rate 1350000 lane count 1
[07:08:20] [PASSED] Link rate 1000000 lane count 4
[07:08:20] [PASSED] Link rate 1000000 lane count 2
[07:08:20] [PASSED] Link rate 1000000 lane count 1
[07:08:20] [PASSED] Link rate 810000 lane count 4
[07:08:20] [PASSED] Link rate 810000 lane count 2
[07:08:20] [PASSED] Link rate 810000 lane count 1
[07:08:20] [PASSED] Link rate 540000 lane count 4
[07:08:20] [PASSED] Link rate 540000 lane count 2
[07:08:20] [PASSED] Link rate 540000 lane count 1
[07:08:20] [PASSED] Link rate 270000 lane count 4
[07:08:20] [PASSED] Link rate 270000 lane count 2
[07:08:20] [PASSED] Link rate 270000 lane count 1
[07:08:20] [PASSED] Link rate 162000 lane count 4
[07:08:20] [PASSED] Link rate 162000 lane count 2
[07:08:20] [PASSED] Link rate 162000 lane count 1
[07:08:20] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[07:08:20] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[07:08:20] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[07:08:20] [PASSED] DP_POWER_UP_PHY with port number
[07:08:20] [PASSED] DP_POWER_DOWN_PHY with port number
[07:08:20] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[07:08:20] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[07:08:20] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[07:08:20] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[07:08:20] [PASSED] DP_QUERY_PAYLOAD with port number
[07:08:20] [PASSED] DP_QUERY_PAYLOAD with VCPI
[07:08:20] [PASSED] DP_REMOTE_DPCD_READ with port number
[07:08:20] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[07:08:20] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[07:08:20] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[07:08:20] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[07:08:20] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[07:08:20] [PASSED] DP_REMOTE_I2C_READ with port number
[07:08:20] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[07:08:20] [PASSED] DP_REMOTE_I2C_READ with transactions array
[07:08:20] [PASSED] DP_REMOTE_I2C_WRITE with port number
[07:08:20] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[07:08:20] [PASSED] DP_REMOTE_I2C_WRITE with data array
[07:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[07:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[07:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[07:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[07:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[07:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[07:08:20] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[07:08:20] ================ [PASSED] drm_dp_mst_helper ================
[07:08:20] ================== drm_exec (7 subtests) ===================
[07:08:20] [PASSED] sanitycheck
[07:08:20] [PASSED] test_lock
[07:08:20] [PASSED] test_lock_unlock
[07:08:20] [PASSED] test_duplicates
[07:08:20] [PASSED] test_prepare
[07:08:20] [PASSED] test_prepare_array
[07:08:20] [PASSED] test_multiple_loops
[07:08:20] ==================== [PASSED] drm_exec =====================
[07:08:20] =========== drm_format_helper_test (17 subtests) ===========
[07:08:20] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[07:08:20] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[07:08:20] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[07:08:20] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[07:08:20] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[07:08:20] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[07:08:20] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[07:08:20] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[07:08:20] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[07:08:20] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[07:08:20] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[07:08:20] ============== drm_test_fb_xrgb8888_to_mono ===============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[07:08:20] ==================== drm_test_fb_swab =====================
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ================ [PASSED] drm_test_fb_swab =================
[07:08:20] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[07:08:20] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[07:08:20] [PASSED] single_pixel_source_buffer
[07:08:20] [PASSED] single_pixel_clip_rectangle
[07:08:20] [PASSED] well_known_colors
[07:08:20] [PASSED] destination_pitch
[07:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[07:08:20] ================= drm_test_fb_clip_offset =================
[07:08:20] [PASSED] pass through
[07:08:20] [PASSED] horizontal offset
[07:08:20] [PASSED] vertical offset
[07:08:20] [PASSED] horizontal and vertical offset
[07:08:20] [PASSED] horizontal offset (custom pitch)
[07:08:20] [PASSED] vertical offset (custom pitch)
[07:08:20] [PASSED] horizontal and vertical offset (custom pitch)
[07:08:20] ============= [PASSED] drm_test_fb_clip_offset =============
[07:08:20] =================== drm_test_fb_memcpy ====================
[07:08:20] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[07:08:20] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[07:08:20] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[07:08:20] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[07:08:20] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[07:08:20] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[07:08:20] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[07:08:20] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[07:08:20] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[07:08:20] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[07:08:20] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[07:08:20] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[07:08:20] =============== [PASSED] drm_test_fb_memcpy ================
[07:08:20] ============= [PASSED] drm_format_helper_test ==============
[07:08:20] ================= drm_format (18 subtests) =================
[07:08:20] [PASSED] drm_test_format_block_width_invalid
[07:08:20] [PASSED] drm_test_format_block_width_one_plane
[07:08:20] [PASSED] drm_test_format_block_width_two_plane
[07:08:20] [PASSED] drm_test_format_block_width_three_plane
[07:08:20] [PASSED] drm_test_format_block_width_tiled
[07:08:20] [PASSED] drm_test_format_block_height_invalid
[07:08:20] [PASSED] drm_test_format_block_height_one_plane
[07:08:20] [PASSED] drm_test_format_block_height_two_plane
[07:08:20] [PASSED] drm_test_format_block_height_three_plane
[07:08:20] [PASSED] drm_test_format_block_height_tiled
[07:08:20] [PASSED] drm_test_format_min_pitch_invalid
[07:08:20] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[07:08:20] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[07:08:20] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[07:08:20] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[07:08:20] [PASSED] drm_test_format_min_pitch_two_plane
[07:08:20] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[07:08:20] [PASSED] drm_test_format_min_pitch_tiled
[07:08:20] =================== [PASSED] drm_format ====================
[07:08:20] ============== drm_framebuffer (10 subtests) ===============
[07:08:20] ========== drm_test_framebuffer_check_src_coords ==========
[07:08:20] [PASSED] Success: source fits into fb
[07:08:20] [PASSED] Fail: overflowing fb with x-axis coordinate
[07:08:20] [PASSED] Fail: overflowing fb with y-axis coordinate
[07:08:20] [PASSED] Fail: overflowing fb with source width
[07:08:20] [PASSED] Fail: overflowing fb with source height
[07:08:20] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[07:08:20] [PASSED] drm_test_framebuffer_cleanup
[07:08:20] =============== drm_test_framebuffer_create ===============
[07:08:20] [PASSED] ABGR8888 normal sizes
[07:08:20] [PASSED] ABGR8888 max sizes
[07:08:20] [PASSED] ABGR8888 pitch greater than min required
[07:08:20] [PASSED] ABGR8888 pitch less than min required
[07:08:20] [PASSED] ABGR8888 Invalid width
[07:08:20] [PASSED] ABGR8888 Invalid buffer handle
[07:08:20] [PASSED] No pixel format
[07:08:20] [PASSED] ABGR8888 Width 0
[07:08:20] [PASSED] ABGR8888 Height 0
[07:08:20] [PASSED] ABGR8888 Out of bound height * pitch combination
[07:08:20] [PASSED] ABGR8888 Large buffer offset
[07:08:20] [PASSED] ABGR8888 Buffer offset for inexistent plane
[07:08:20] [PASSED] ABGR8888 Invalid flag
[07:08:20] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[07:08:20] [PASSED] ABGR8888 Valid buffer modifier
[07:08:20] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[07:08:20] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[07:08:20] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[07:08:20] [PASSED] NV12 Normal sizes
[07:08:20] [PASSED] NV12 Max sizes
[07:08:20] [PASSED] NV12 Invalid pitch
[07:08:20] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[07:08:20] [PASSED] NV12 different modifier per-plane
[07:08:20] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[07:08:20] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[07:08:20] [PASSED] NV12 Modifier for inexistent plane
[07:08:20] [PASSED] NV12 Handle for inexistent plane
[07:08:20] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[07:08:20] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[07:08:20] [PASSED] YVU420 Normal sizes
[07:08:20] [PASSED] YVU420 Max sizes
[07:08:20] [PASSED] YVU420 Invalid pitch
[07:08:20] [PASSED] YVU420 Different pitches
[07:08:20] [PASSED] YVU420 Different buffer offsets/pitches
[07:08:20] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[07:08:20] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[07:08:20] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[07:08:20] [PASSED] YVU420 Valid modifier
[07:08:20] [PASSED] YVU420 Different modifiers per plane
[07:08:20] [PASSED] YVU420 Modifier for inexistent plane
[07:08:20] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[07:08:20] [PASSED] X0L2 Normal sizes
[07:08:20] [PASSED] X0L2 Max sizes
[07:08:20] [PASSED] X0L2 Invalid pitch
[07:08:20] [PASSED] X0L2 Pitch greater than minimum required
[07:08:20] [PASSED] X0L2 Handle for inexistent plane
[07:08:20] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[07:08:20] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[07:08:20] [PASSED] X0L2 Valid modifier
[07:08:20] [PASSED] X0L2 Modifier for inexistent plane
[07:08:20] =========== [PASSED] drm_test_framebuffer_create ===========
[07:08:20] [PASSED] drm_test_framebuffer_free
[07:08:20] [PASSED] drm_test_framebuffer_init
[07:08:20] [PASSED] drm_test_framebuffer_init_bad_format
[07:08:20] [PASSED] drm_test_framebuffer_init_dev_mismatch
[07:08:20] [PASSED] drm_test_framebuffer_lookup
[07:08:20] [PASSED] drm_test_framebuffer_lookup_inexistent
[07:08:20] [PASSED] drm_test_framebuffer_modifiers_not_supported
[07:08:20] ================= [PASSED] drm_framebuffer =================
[07:08:20] ================ drm_gem_shmem (8 subtests) ================
[07:08:20] [PASSED] drm_gem_shmem_test_obj_create
[07:08:20] [PASSED] drm_gem_shmem_test_obj_create_private
[07:08:20] [PASSED] drm_gem_shmem_test_pin_pages
[07:08:20] [PASSED] drm_gem_shmem_test_vmap
[07:08:20] [PASSED] drm_gem_shmem_test_get_sg_table
[07:08:20] [PASSED] drm_gem_shmem_test_get_pages_sgt
[07:08:20] [PASSED] drm_gem_shmem_test_madvise
[07:08:20] [PASSED] drm_gem_shmem_test_purge
[07:08:20] ================== [PASSED] drm_gem_shmem ==================
[07:08:20] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[07:08:20] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[07:08:20] [PASSED] Automatic
[07:08:20] [PASSED] Full
[07:08:20] [PASSED] Limited 16:235
[07:08:20] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[07:08:20] [PASSED] drm_test_check_disable_connector
[07:08:20] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[07:08:20] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[07:08:20] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[07:08:20] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[07:08:20] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[07:08:20] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[07:08:20] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[07:08:20] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[07:08:20] [PASSED] drm_test_check_output_bpc_dvi
[07:08:20] [PASSED] drm_test_check_output_bpc_format_vic_1
[07:08:20] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[07:08:20] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[07:08:20] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[07:08:20] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[07:08:20] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[07:08:20] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[07:08:20] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[07:08:20] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[07:08:20] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[07:08:20] [PASSED] drm_test_check_broadcast_rgb_value
[07:08:20] [PASSED] drm_test_check_bpc_8_value
[07:08:20] [PASSED] drm_test_check_bpc_10_value
[07:08:20] [PASSED] drm_test_check_bpc_12_value
[07:08:20] [PASSED] drm_test_check_format_value
[07:08:20] [PASSED] drm_test_check_tmds_char_value
[07:08:20] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[07:08:20] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[07:08:20] [PASSED] drm_test_check_mode_valid
[07:08:20] [PASSED] drm_test_check_mode_valid_reject
[07:08:20] [PASSED] drm_test_check_mode_valid_reject_rate
[07:08:20] [PASSED] drm_test_check_mode_valid_reject_max_clock
[07:08:20] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[07:08:20] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[07:08:20] [PASSED] drm_test_check_infoframes
[07:08:20] [PASSED] drm_test_check_reject_avi_infoframe
[07:08:20] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[07:08:20] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[07:08:20] [PASSED] drm_test_check_reject_audio_infoframe
[07:08:20] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[07:08:20] ================= drm_managed (2 subtests) =================
[07:08:20] [PASSED] drm_test_managed_release_action
[07:08:20] [PASSED] drm_test_managed_run_action
[07:08:20] =================== [PASSED] drm_managed ===================
[07:08:20] =================== drm_mm (6 subtests) ====================
[07:08:20] [PASSED] drm_test_mm_init
[07:08:20] [PASSED] drm_test_mm_debug
[07:08:20] [PASSED] drm_test_mm_align32
[07:08:20] [PASSED] drm_test_mm_align64
[07:08:20] [PASSED] drm_test_mm_lowest
[07:08:20] [PASSED] drm_test_mm_highest
[07:08:20] ===================== [PASSED] drm_mm ======================
[07:08:20] ============= drm_modes_analog_tv (5 subtests) =============
[07:08:20] [PASSED] drm_test_modes_analog_tv_mono_576i
[07:08:20] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[07:08:20] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[07:08:20] [PASSED] drm_test_modes_analog_tv_pal_576i
[07:08:20] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[07:08:20] =============== [PASSED] drm_modes_analog_tv ===============
[07:08:20] ============== drm_plane_helper (2 subtests) ===============
[07:08:20] =============== drm_test_check_plane_state ================
[07:08:20] [PASSED] clipping_simple
[07:08:20] [PASSED] clipping_rotate_reflect
[07:08:20] [PASSED] positioning_simple
[07:08:20] [PASSED] upscaling
[07:08:20] [PASSED] downscaling
[07:08:20] [PASSED] rounding1
[07:08:20] [PASSED] rounding2
[07:08:20] [PASSED] rounding3
[07:08:20] [PASSED] rounding4
[07:08:20] =========== [PASSED] drm_test_check_plane_state ============
[07:08:20] =========== drm_test_check_invalid_plane_state ============
[07:08:20] [PASSED] positioning_invalid
[07:08:20] [PASSED] upscaling_invalid
[07:08:20] [PASSED] downscaling_invalid
[07:08:20] ======= [PASSED] drm_test_check_invalid_plane_state ========
[07:08:20] ================ [PASSED] drm_plane_helper =================
[07:08:20] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[07:08:20] ====== drm_test_connector_helper_tv_get_modes_check =======
[07:08:20] [PASSED] None
[07:08:20] [PASSED] PAL
[07:08:20] [PASSED] NTSC
[07:08:20] [PASSED] Both, NTSC Default
[07:08:20] [PASSED] Both, PAL Default
[07:08:20] [PASSED] Both, NTSC Default, with PAL on command-line
[07:08:20] [PASSED] Both, PAL Default, with NTSC on command-line
[07:08:20] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[07:08:20] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[07:08:20] ================== drm_rect (9 subtests) ===================
[07:08:20] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[07:08:20] [PASSED] drm_test_rect_clip_scaled_not_clipped
[07:08:20] [PASSED] drm_test_rect_clip_scaled_clipped
[07:08:20] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[07:08:20] ================= drm_test_rect_intersect =================
[07:08:20] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[07:08:20] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[07:08:20] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[07:08:20] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[07:08:20] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[07:08:20] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[07:08:20] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[07:08:20] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[07:08:20] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[07:08:20] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[07:08:20] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[07:08:20] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[07:08:20] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[07:08:20] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[07:08:20] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[07:08:20] ============= [PASSED] drm_test_rect_intersect =============
[07:08:20] ================ drm_test_rect_calc_hscale ================
[07:08:20] [PASSED] normal use
[07:08:20] [PASSED] out of max range
[07:08:20] [PASSED] out of min range
[07:08:20] [PASSED] zero dst
[07:08:20] [PASSED] negative src
[07:08:20] [PASSED] negative dst
[07:08:20] ============ [PASSED] drm_test_rect_calc_hscale ============
[07:08:20] ================ drm_test_rect_calc_vscale ================
[07:08:20] [PASSED] normal use
[07:08:20] [PASSED] out of max range
[07:08:20] [PASSED] out of min range
[07:08:20] [PASSED] zero dst
[07:08:20] [PASSED] negative src
[07:08:20] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[07:08:20] ============ [PASSED] drm_test_rect_calc_vscale ============
[07:08:20] ================== drm_test_rect_rotate ===================
[07:08:20] [PASSED] reflect-x
[07:08:20] [PASSED] reflect-y
[07:08:20] [PASSED] rotate-0
[07:08:20] [PASSED] rotate-90
[07:08:20] [PASSED] rotate-180
[07:08:20] [PASSED] rotate-270
[07:08:20] ============== [PASSED] drm_test_rect_rotate ===============
[07:08:20] ================ drm_test_rect_rotate_inv =================
[07:08:20] [PASSED] reflect-x
[07:08:20] [PASSED] reflect-y
[07:08:20] [PASSED] rotate-0
[07:08:20] [PASSED] rotate-90
[07:08:20] [PASSED] rotate-180
[07:08:20] [PASSED] rotate-270
[07:08:20] ============ [PASSED] drm_test_rect_rotate_inv =============
[07:08:20] ==================== [PASSED] drm_rect =====================
[07:08:20] ============ drm_sysfb_modeset_test (1 subtest) ============
[07:08:20] ============ drm_test_sysfb_build_fourcc_list =============
[07:08:20] [PASSED] no native formats
[07:08:20] [PASSED] XRGB8888 as native format
[07:08:20] [PASSED] remove duplicates
[07:08:20] [PASSED] convert alpha formats
[07:08:20] [PASSED] random formats
[07:08:20] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[07:08:20] ============= [PASSED] drm_sysfb_modeset_test ==============
[07:08:20] ================== drm_fixp (2 subtests) ===================
[07:08:20] [PASSED] drm_test_int2fixp
[07:08:20] [PASSED] drm_test_sm2fixp
[07:08:20] ==================== [PASSED] drm_fixp =====================
[07:08:20] ============================================================
[07:08:20] Testing complete. Ran 621 tests: passed: 621
[07:08:20] Elapsed time: 26.584s total, 1.705s configuring, 24.711s building, 0.165s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
stty: 'standard input': Inappropriate ioctl for device
[07:08:20] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[07:08:21] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[07:08:31] Starting KUnit Kernel (1/1)...
[07:08:31] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[07:08:31] ================= ttm_device (5 subtests) ==================
[07:08:31] [PASSED] ttm_device_init_basic
[07:08:31] [PASSED] ttm_device_init_multiple
[07:08:31] [PASSED] ttm_device_fini_basic
[07:08:31] [PASSED] ttm_device_init_no_vma_man
[07:08:31] ================== ttm_device_init_pools ==================
[07:08:31] [PASSED] No DMA allocations, no DMA32 required
[07:08:31] # ttm_device_init_pools: ASSERTION FAILED at drivers/gpu/drm/ttm/tests/ttm_device_test.c:178
[07:08:31] Expected !list_lru_count(&pt.pages) to be false, but is true
[07:08:31] [FAILED] DMA allocations, DMA32 required
[07:08:31] [PASSED] No DMA allocations, DMA32 required
[07:08:31] # ttm_device_init_pools: ASSERTION FAILED at drivers/gpu/drm/ttm/tests/ttm_device_test.c:178
[07:08:31] Expected !list_lru_count(&pt.pages) to be false, but is true
[07:08:31] ------------[ cut here ]------------
[07:08:31] WARNING: lib/refcount.c:28 at devres_release_all+0xaa/0x100, CPU#0: kunit_try_catch/46
[07:08:31] refcount_t: underflow; use-after-free.
[07:08:31] CPU: 0 UID: 0 PID: 46 Comm: kunit_try_catch Tainted: G W N 7.0.0-rc7-g6d9a11f9d7dd #3 VOLUNTARY
[07:08:31] Tainted: [W]=WARN, [N]=TEST
[07:08:31] Stack:
[07:08:31] 6044ed8b 00000000 00000000 00000001
[07:08:31] ffffff00 6044ed8b 6032367a 00000009
[07:08:31] 0000001c 60043e88 6002381c b38cbd40
[07:08:31] Call Trace:
[07:08:31] [<6032367a>] ? devres_release_all+0xaa/0x100
[07:08:31] [<60043e88>] ? dump_stack_lvl+0x5e/0x7a
[07:08:31] [<6002381c>] ? _printk+0x0/0x65
[07:08:31] [<6001f09f>] ? __warn.cold+0x79/0x11f
[07:08:31] [<6001f1d9>] ? warn_slowpath_fmt+0x94/0xa1
[07:08:31] [<601ef1a0>] ? kernfs_free_rcu+0x0/0x70
[07:08:31] [<60052e36>] ? um_set_signals+0x36/0x60
[07:08:31] [<600c5a42>] ? call_rcu+0x52/0x90
[07:08:31] [<6001f145>] ? warn_slowpath_fmt+0x0/0xa1
[07:08:31] [<60147f50>] ? kfree+0x0/0x250
[07:08:31] [<6032367a>] ? devres_release_all+0xaa/0x100
[07:08:31] [<60396bb0>] ? mutex_unlock+0x0/0x30
[07:08:31] [<6031c3c0>] ? bus_notify+0x0/0x60
[07:08:31] [<60396bb0>] ? mutex_unlock+0x0/0x30
[07:08:31] [<60398620>] ? mutex_lock+0x0/0x40
[07:08:31] [<6031ca24>] ? device_unbind_cleanup+0x14/0xb0
[07:08:31] [<6031e1f6>] ? device_release_driver_internal+0x256/0x2b0
[07:08:31] [<60372210>] ? kobject_put+0x0/0x150
[07:08:31] [<601f3d40>] ? sysfs_remove_file_ns+0x0/0x20
[07:08:31] [<6031c00f>] ? bus_remove_device+0x10f/0x1a0
[07:08:31] [<601f3d40>] ? sysfs_remove_file_ns+0x0/0x20
[07:08:31] [<601f17b8>] ? kernfs_remove_by_name_ns+0x98/0x130
[07:08:31] [<60315a8c>] ? device_del+0x1bc/0x600
[07:08:31] [<60052e00>] ? um_set_signals+0x0/0x60
[07:08:31] [<6025b2a0>] ? device_unregister_wrapper+0x0/0x10
[07:08:31] [<60052e00>] ? um_set_signals+0x0/0x60
[07:08:31] [<60315ee4>] ? device_unregister+0x14/0x40
[07:08:31] [<60257e66>] ? kunit_release_action+0xf6/0x170
[07:08:31] [<60257d70>] ? kunit_release_action+0x0/0x170
[07:08:31] [<6025b2e2>] ? kunit_device_unregister+0x32/0x80
[07:08:31] [<60259890>] ? kunit_generic_run_threadfn_adapter+0x0/0x30
[07:08:31] [<6025748e>] ? kunit_try_run_case_cleanup+0x2e/0x40
[07:08:31] [<602598a6>] ? kunit_generic_run_threadfn_adapter+0x16/0x30
[07:08:31] [<60081e36>] ? kthread+0xe6/0x150
[07:08:31] [<60046435>] ? new_thread_handler+0x45/0x60
[07:08:31] ---[ end trace 0000000000000000 ]---
[07:08:31] [FAILED] DMA allocations, no DMA32 required
[07:08:31] # ttm_device_init_pools: pass:2 fail:2 skip:0 total:4
[07:08:31] ============== [FAILED] ttm_device_init_pools ==============
[07:08:31] # module: ttm_device_test
[07:08:31] # ttm_device: pass:4 fail:1 skip:0 total:5
[07:08:31] # Totals: pass:6 fail:2 skip:0 total:8
[07:08:31] =================== [FAILED] ttm_device ====================
[07:08:31] ================== ttm_pool (8 subtests) ===================
[07:08:31] ================== ttm_pool_alloc_basic ===================
[07:08:31] [PASSED] One page
[07:08:31] [PASSED] More than one page
[07:08:31] [PASSED] Above the allocation limit
[07:08:31] [PASSED] One page, with coherent DMA mappings enabled
[07:08:31] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[07:08:31] ============== [PASSED] ttm_pool_alloc_basic ===============
[07:08:31] ============== ttm_pool_alloc_basic_dma_addr ==============
[07:08:31] [PASSED] One page
[07:08:31] [PASSED] More than one page
[07:08:31] [PASSED] Above the allocation limit
[07:08:31] [PASSED] One page, with coherent DMA mappings enabled
[07:08:31] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[07:08:31] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[07:08:31] [PASSED] ttm_pool_alloc_order_caching_match
[07:08:31] [PASSED] ttm_pool_alloc_caching_mismatch
[07:08:31] [PASSED] ttm_pool_alloc_order_mismatch
[07:08:31] [PASSED] ttm_pool_free_dma_alloc
[07:08:31] [ERROR] Test: ttm_pool: missing expected subtest!
[07:08:31]
[07:08:31] Pid: 75, comm: kunit_try_catch Tainted: G W N 7.0.0-rc7-g6d9a11f9d7dd
[07:08:31] RIP: 0033:list_lru_count_node+0xe/0x20
[07:08:31] RSP: 00000000b38cbed8 EFLAGS: 00010246
[07:08:31] RAX: 0000000000000000 RBX: 00000000b3803c90 RCX: 000000007424c7d8
[07:08:31] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000074086880
[07:08:31] RBP: 0000000074086800 R08: 00000000b2884c28 R09: 0000000074050c80
[07:08:31] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000074050c80
[07:08:31] R13: 0000000060440770 R14: 000000006010eb50 R15: 0000000074086880
[07:08:31] Kernel panic - not syncing: Segfault with no mm
[07:08:31] [CRASHED]
[07:08:31] [ERROR] Test: ttm_pool: missing expected subtest!
[07:08:31] [CRASHED]
[07:08:31] [ERROR] Test: ttm_pool: missing subtest result line!
[07:08:31] # module: ttm_pool_test
[07:08:31] ==================== [CRASHED] ttm_pool ====================
[07:08:31] [ERROR] Test: main: missing expected subtest!
[07:08:31] [CRASHED]
[07:08:31] [ERROR] Test: main: missing expected subtest!
[07:08:31] [CRASHED]
[07:08:31] [ERROR] Test: main: missing expected subtest!
[07:08:31] [CRASHED]
[07:08:31] [ERROR] Test: main: missing expected subtest!
[07:08:31] [CRASHED]
[07:08:31] ============================================================
[07:08:31] Testing complete. Ran 28 tests: passed: 20, failed: 2, crashed: 6, errors: 7
The kernel seems to have crashed; you can decode the stack traces with:
$ scripts/decode_stacktrace.sh .kunit/vmlinux .kunit < .kunit/test.log | tee .kunit/decoded.log | /kernel/tools/testing/kunit/kunit.py parse
[07:08:31] Elapsed time: 11.497s total, 1.639s configuring, 9.591s building, 0.267s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink command to drm_ras
2026-04-09 7:33 ` [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink " Riana Tauro
@ 2026-04-09 7:21 ` Tauro, Riana
2026-04-09 13:37 ` Rodrigo Vivi
2026-04-09 23:01 ` Zack McKevitt
0 siblings, 2 replies; 10+ messages in thread
From: Tauro, Riana @ 2026-04-09 7:21 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev, rodrigo.vivi, Zack McKevitt,
joonas.lahtinen, aravind.iddamsetty
Cc: anshuman.gupta, simona.vetter, airlied, pratik.bari,
joshua.santosh.ranjan, ashwin.kumar.kulkarni, shubham.kumar,
ravi.kishore.koppuravuri, raag.jadav, anvesh.bakwad,
maarten.lankhorst, Jakub Kicinski, Lijo Lazar, Hawking Zhang,
David S. Miller, Paolo Abeni, Eric Dumazet
Hi Zack
Could you please take a look at this patch if applicable to your
usecase. Please let me know if any
changes are required
@Rodrigo This is already reviewed by Jakub and Raag.
If there are no opens, can this be merged via drm_misc
Thanks
Riana
On 4/9/2026 1:03 PM, Riana Tauro wrote:
> Introduce a new 'clear-error-counter' drm_ras command to reset the counter
> value for a specific error counter of a given node.
>
> The command is a 'do' netlink request with 'node-id' and 'error-id'
> as parameters with no response payload.
>
> Usage:
>
> $ sudo ynl --family drm_ras --do clear-error-counter --json \
> '{"node-id":1, "error-id":1}'
> None
>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Zack McKevitt <zachary.mckevitt@oss.qualcomm.com>
> Cc: Lijo Lazar <lijo.lazar@amd.com>
> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> Cc: David S. Miller <davem@davemloft.net>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Eric Dumazet <edumazet@google.com>
> Signed-off-by: Riana Tauro <riana.tauro@intel.com>
> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
> Reviewed-by: Raag Jadav <raag.jadav@intel.com>
> ---
> Documentation/gpu/drm-ras.rst | 8 +++++
> Documentation/netlink/specs/drm_ras.yaml | 13 ++++++-
> drivers/gpu/drm/drm_ras.c | 43 +++++++++++++++++++++++-
> drivers/gpu/drm/drm_ras_nl.c | 13 +++++++
> drivers/gpu/drm/drm_ras_nl.h | 2 ++
> include/drm/drm_ras.h | 11 ++++++
> include/uapi/drm/drm_ras.h | 1 +
> 7 files changed, 89 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
> index 70b246a78fc8..4636e68f5678 100644
> --- a/Documentation/gpu/drm-ras.rst
> +++ b/Documentation/gpu/drm-ras.rst
> @@ -52,6 +52,8 @@ User space tools can:
> as a parameter.
> * Query specific error counter values with the ``get-error-counter`` command, using both
> ``node-id`` and ``error-id`` as parameters.
> +* Clear specific error counters with the ``clear-error-counter`` command, using both
> + ``node-id`` and ``error-id`` as parameters.
>
> YAML-based Interface
> --------------------
> @@ -101,3 +103,9 @@ Example: Query an error counter for a given node
> sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}'
> {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
>
> +Example: Clear an error counter for a given node
> +
> +.. code-block:: bash
> +
> + sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}'
> + None
> diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
> index 79af25dac3c5..e113056f8c01 100644
> --- a/Documentation/netlink/specs/drm_ras.yaml
> +++ b/Documentation/netlink/specs/drm_ras.yaml
> @@ -99,7 +99,7 @@ operations:
> flags: [admin-perm]
> do:
> request:
> - attributes:
> + attributes: &id-attrs
> - node-id
> - error-id
> reply:
> @@ -113,3 +113,14 @@ operations:
> - node-id
> reply:
> attributes: *errorinfo
> + -
> + name: clear-error-counter
> + doc: >-
> + Clear error counter for a given node.
> + The request includes the error-id and node-id of the
> + counter to be cleared.
> + attribute-set: error-counter-attrs
> + flags: [admin-perm]
> + do:
> + request:
> + attributes: *id-attrs
> diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
> index b2fa5ab86d87..d6eab29a1394 100644
> --- a/drivers/gpu/drm/drm_ras.c
> +++ b/drivers/gpu/drm/drm_ras.c
> @@ -26,7 +26,7 @@
> * efficient lookup by ID. Nodes can be registered or unregistered
> * dynamically at runtime.
> *
> - * A Generic Netlink family `drm_ras` exposes two main operations to
> + * A Generic Netlink family `drm_ras` exposes the below operations to
> * userspace:
> *
> * 1. LIST_NODES: Dump all currently registered RAS nodes.
> @@ -37,6 +37,10 @@
> * Returns all counters of a node if only Node ID is provided or specific
> * error counters.
> *
> + * 3. CLEAR_ERROR_COUNTER: Clear error counter of a given node.
> + * Userspace must provide Node ID, Error ID.
> + * Clears specific error counter of a node if supported.
> + *
> * Node registration:
> *
> * - drm_ras_node_register(): Registers a new node and assigns
> @@ -66,6 +70,8 @@
> * operation, fetching all counters from a specific node.
> * - drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit
> * operation, fetching a counter value from a specific node.
> + * - drm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit
> + * operation, clearing a counter value from a specific node.
> */
>
> static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> @@ -314,6 +320,41 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
> return doit_reply_value(info, node_id, error_id);
> }
>
> +/**
> + * drm_ras_nl_clear_error_counter_doit() - Clear an error counter of a node
> + * @skb: Netlink message buffer
> + * @info: Generic Netlink info containing attributes of the request
> + *
> + * Extracts the node ID and error ID from the netlink attributes and
> + * clears the current value.
> + *
> + * Return: 0 on success, or negative errno on failure.
> + */
> +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
> + struct genl_info *info)
> +{
> + struct drm_ras_node *node;
> + u32 node_id, error_id;
> +
> + if (!info->attrs ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID))
> + return -EINVAL;
> +
> + node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
> + error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
> +
> + node = xa_load(&drm_ras_xa, node_id);
> + if (!node || !node->clear_error_counter)
> + return -ENOENT;
> +
> + if (error_id < node->error_counter_range.first ||
> + error_id > node->error_counter_range.last)
> + return -EINVAL;
> +
> + return node->clear_error_counter(node, error_id);
> +}
> +
> /**
> * drm_ras_node_register() - Register a new RAS node
> * @node: Node structure to register
> diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
> index 16803d0c4a44..dea1c1b2494e 100644
> --- a/drivers/gpu/drm/drm_ras_nl.c
> +++ b/drivers/gpu/drm/drm_ras_nl.c
> @@ -22,6 +22,12 @@ static const struct nla_policy drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
> [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
> };
>
> +/* DRM_RAS_CMD_CLEAR_ERROR_COUNTER - do */
> +static const struct nla_policy drm_ras_clear_error_counter_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
> + [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
> + [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
> +};
> +
> /* Ops table for drm_ras */
> static const struct genl_split_ops drm_ras_nl_ops[] = {
> {
> @@ -43,6 +49,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
> .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
> .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
> },
> + {
> + .cmd = DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
> + .doit = drm_ras_nl_clear_error_counter_doit,
> + .policy = drm_ras_clear_error_counter_nl_policy,
> + .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
> + .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
> + },
> };
>
> struct genl_family drm_ras_nl_family __ro_after_init = {
> diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
> index 06ccd9342773..a398643572a5 100644
> --- a/drivers/gpu/drm/drm_ras_nl.h
> +++ b/drivers/gpu/drm/drm_ras_nl.h
> @@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
> struct genl_info *info);
> int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
> struct netlink_callback *cb);
> +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
> + struct genl_info *info);
>
> extern struct genl_family drm_ras_nl_family;
>
> diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
> index 5d50209e51db..f2a787bc4f64 100644
> --- a/include/drm/drm_ras.h
> +++ b/include/drm/drm_ras.h
> @@ -58,6 +58,17 @@ struct drm_ras_node {
> int (*query_error_counter)(struct drm_ras_node *node, u32 error_id,
> const char **name, u32 *val);
>
> + /**
> + * @clear_error_counter:
> + *
> + * This callback is used by drm_ras to clear a specific error counter.
> + * Driver should implement this callback to support clearing error counters
> + * of a node.
> + *
> + * Returns: 0 on success, negative error code on failure.
> + */
> + int (*clear_error_counter)(struct drm_ras_node *node, u32 error_id);
> +
> /** @priv: Driver private data */
> void *priv;
> };
> diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
> index 5f40fa5b869d..218a3ee86805 100644
> --- a/include/uapi/drm/drm_ras.h
> +++ b/include/uapi/drm/drm_ras.h
> @@ -41,6 +41,7 @@ enum {
> enum {
> DRM_RAS_CMD_LIST_NODES = 1,
> DRM_RAS_CMD_GET_ERROR_COUNTER,
> + DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
>
> __DRM_RAS_CMD_MAX,
> DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 0/2] Add clear-error-counter command to drm_ras
@ 2026-04-09 7:33 Riana Tauro
2026-04-09 7:07 ` ✗ CI.checkpatch: warning for " Patchwork
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Riana Tauro @ 2026-04-09 7:33 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: aravind.iddamsetty, anshuman.gupta, rodrigo.vivi, joonas.lahtinen,
simona.vetter, airlied, pratik.bari, joshua.santosh.ranjan,
ashwin.kumar.kulkarni, shubham.kumar, ravi.kishore.koppuravuri,
raag.jadav, anvesh.bakwad, maarten.lankhorst, Riana Tauro
Add clear-error-counter command to drm_ras to clear a specific error
counter of a node. The request parameters for this command are
node-id and error-id and no response payload.
Implement the callback in XE driver to demonstrate usage.
Usage:
$ sudo ynl --family drm_ras --dump get-error-counter --json '{"node-id":1}'
[{'error-id': 1, 'error-name': 'core-compute', 'error-value': 0},
{'error-id': 2, 'error-name': 'soc-internal', 'error-value': 3}]
$ sudo ynl --family drm_ras --do clear-error-counter --json \
'{"node-id":1, "error-id":2}'
None
$ sudo ynl --family drm_ras --dump get-error-counter --json '{"node-id":1}'
[{'error-id': 1, 'error-name': 'core-compute', 'error-value': 0},
{'error-id': 2, 'error-name': 'soc-internal', 'error-value': 0}]
Rev2: Split patches
Riana Tauro (2):
drm/drm_ras: Add clear-error-counter netlink command to drm_ras
drm/xe/xe_drm_ras: Add support for clear-error-counter in XE drm_ras
Documentation/gpu/drm-ras.rst | 8 +++++
Documentation/netlink/specs/drm_ras.yaml | 13 ++++++-
drivers/gpu/drm/drm_ras.c | 43 +++++++++++++++++++++++-
drivers/gpu/drm/drm_ras_nl.c | 13 +++++++
drivers/gpu/drm/drm_ras_nl.h | 2 ++
drivers/gpu/drm/xe/xe_drm_ras.c | 35 +++++++++++++++++--
include/drm/drm_ras.h | 11 ++++++
include/uapi/drm/drm_ras.h | 1 +
8 files changed, 122 insertions(+), 4 deletions(-)
--
2.47.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink command to drm_ras
2026-04-09 7:33 [PATCH v2 0/2] Add clear-error-counter command to drm_ras Riana Tauro
2026-04-09 7:07 ` ✗ CI.checkpatch: warning for " Patchwork
2026-04-09 7:08 ` ✗ CI.KUnit: failure " Patchwork
@ 2026-04-09 7:33 ` Riana Tauro
2026-04-09 7:21 ` Tauro, Riana
2026-04-09 7:33 ` [PATCH v2 2/2] drm/xe/xe_drm_ras: Add support for clear-error-counter in XE drm_ras Riana Tauro
3 siblings, 1 reply; 10+ messages in thread
From: Riana Tauro @ 2026-04-09 7:33 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: aravind.iddamsetty, anshuman.gupta, rodrigo.vivi, joonas.lahtinen,
simona.vetter, airlied, pratik.bari, joshua.santosh.ranjan,
ashwin.kumar.kulkarni, shubham.kumar, ravi.kishore.koppuravuri,
raag.jadav, anvesh.bakwad, maarten.lankhorst, Riana Tauro,
Jakub Kicinski, Zack McKevitt, Lijo Lazar, Hawking Zhang,
David S. Miller, Paolo Abeni, Eric Dumazet
Introduce a new 'clear-error-counter' drm_ras command to reset the counter
value for a specific error counter of a given node.
The command is a 'do' netlink request with 'node-id' and 'error-id'
as parameters with no response payload.
Usage:
$ sudo ynl --family drm_ras --do clear-error-counter --json \
'{"node-id":1, "error-id":1}'
None
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Zack McKevitt <zachary.mckevitt@oss.qualcomm.com>
Cc: Lijo Lazar <lijo.lazar@amd.com>
Cc: Hawking Zhang <Hawking.Zhang@amd.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: Riana Tauro <riana.tauro@intel.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Raag Jadav <raag.jadav@intel.com>
---
Documentation/gpu/drm-ras.rst | 8 +++++
Documentation/netlink/specs/drm_ras.yaml | 13 ++++++-
drivers/gpu/drm/drm_ras.c | 43 +++++++++++++++++++++++-
drivers/gpu/drm/drm_ras_nl.c | 13 +++++++
drivers/gpu/drm/drm_ras_nl.h | 2 ++
include/drm/drm_ras.h | 11 ++++++
include/uapi/drm/drm_ras.h | 1 +
7 files changed, 89 insertions(+), 2 deletions(-)
diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
index 70b246a78fc8..4636e68f5678 100644
--- a/Documentation/gpu/drm-ras.rst
+++ b/Documentation/gpu/drm-ras.rst
@@ -52,6 +52,8 @@ User space tools can:
as a parameter.
* Query specific error counter values with the ``get-error-counter`` command, using both
``node-id`` and ``error-id`` as parameters.
+* Clear specific error counters with the ``clear-error-counter`` command, using both
+ ``node-id`` and ``error-id`` as parameters.
YAML-based Interface
--------------------
@@ -101,3 +103,9 @@ Example: Query an error counter for a given node
sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}'
{'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
+Example: Clear an error counter for a given node
+
+.. code-block:: bash
+
+ sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}'
+ None
diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
index 79af25dac3c5..e113056f8c01 100644
--- a/Documentation/netlink/specs/drm_ras.yaml
+++ b/Documentation/netlink/specs/drm_ras.yaml
@@ -99,7 +99,7 @@ operations:
flags: [admin-perm]
do:
request:
- attributes:
+ attributes: &id-attrs
- node-id
- error-id
reply:
@@ -113,3 +113,14 @@ operations:
- node-id
reply:
attributes: *errorinfo
+ -
+ name: clear-error-counter
+ doc: >-
+ Clear error counter for a given node.
+ The request includes the error-id and node-id of the
+ counter to be cleared.
+ attribute-set: error-counter-attrs
+ flags: [admin-perm]
+ do:
+ request:
+ attributes: *id-attrs
diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
index b2fa5ab86d87..d6eab29a1394 100644
--- a/drivers/gpu/drm/drm_ras.c
+++ b/drivers/gpu/drm/drm_ras.c
@@ -26,7 +26,7 @@
* efficient lookup by ID. Nodes can be registered or unregistered
* dynamically at runtime.
*
- * A Generic Netlink family `drm_ras` exposes two main operations to
+ * A Generic Netlink family `drm_ras` exposes the below operations to
* userspace:
*
* 1. LIST_NODES: Dump all currently registered RAS nodes.
@@ -37,6 +37,10 @@
* Returns all counters of a node if only Node ID is provided or specific
* error counters.
*
+ * 3. CLEAR_ERROR_COUNTER: Clear error counter of a given node.
+ * Userspace must provide Node ID, Error ID.
+ * Clears specific error counter of a node if supported.
+ *
* Node registration:
*
* - drm_ras_node_register(): Registers a new node and assigns
@@ -66,6 +70,8 @@
* operation, fetching all counters from a specific node.
* - drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit
* operation, fetching a counter value from a specific node.
+ * - drm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit
+ * operation, clearing a counter value from a specific node.
*/
static DEFINE_XARRAY_ALLOC(drm_ras_xa);
@@ -314,6 +320,41 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
return doit_reply_value(info, node_id, error_id);
}
+/**
+ * drm_ras_nl_clear_error_counter_doit() - Clear an error counter of a node
+ * @skb: Netlink message buffer
+ * @info: Generic Netlink info containing attributes of the request
+ *
+ * Extracts the node ID and error ID from the netlink attributes and
+ * clears the current value.
+ *
+ * Return: 0 on success, or negative errno on failure.
+ */
+int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
+ struct genl_info *info)
+{
+ struct drm_ras_node *node;
+ u32 node_id, error_id;
+
+ if (!info->attrs ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID))
+ return -EINVAL;
+
+ node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
+ error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
+
+ node = xa_load(&drm_ras_xa, node_id);
+ if (!node || !node->clear_error_counter)
+ return -ENOENT;
+
+ if (error_id < node->error_counter_range.first ||
+ error_id > node->error_counter_range.last)
+ return -EINVAL;
+
+ return node->clear_error_counter(node, error_id);
+}
+
/**
* drm_ras_node_register() - Register a new RAS node
* @node: Node structure to register
diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
index 16803d0c4a44..dea1c1b2494e 100644
--- a/drivers/gpu/drm/drm_ras_nl.c
+++ b/drivers/gpu/drm/drm_ras_nl.c
@@ -22,6 +22,12 @@ static const struct nla_policy drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
};
+/* DRM_RAS_CMD_CLEAR_ERROR_COUNTER - do */
+static const struct nla_policy drm_ras_clear_error_counter_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
+ [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
+ [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
+};
+
/* Ops table for drm_ras */
static const struct genl_split_ops drm_ras_nl_ops[] = {
{
@@ -43,6 +49,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
.maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
},
+ {
+ .cmd = DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
+ .doit = drm_ras_nl_clear_error_counter_doit,
+ .policy = drm_ras_clear_error_counter_nl_policy,
+ .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
+ .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
+ },
};
struct genl_family drm_ras_nl_family __ro_after_init = {
diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
index 06ccd9342773..a398643572a5 100644
--- a/drivers/gpu/drm/drm_ras_nl.h
+++ b/drivers/gpu/drm/drm_ras_nl.h
@@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
struct genl_info *info);
int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
struct netlink_callback *cb);
+int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
+ struct genl_info *info);
extern struct genl_family drm_ras_nl_family;
diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
index 5d50209e51db..f2a787bc4f64 100644
--- a/include/drm/drm_ras.h
+++ b/include/drm/drm_ras.h
@@ -58,6 +58,17 @@ struct drm_ras_node {
int (*query_error_counter)(struct drm_ras_node *node, u32 error_id,
const char **name, u32 *val);
+ /**
+ * @clear_error_counter:
+ *
+ * This callback is used by drm_ras to clear a specific error counter.
+ * Driver should implement this callback to support clearing error counters
+ * of a node.
+ *
+ * Returns: 0 on success, negative error code on failure.
+ */
+ int (*clear_error_counter)(struct drm_ras_node *node, u32 error_id);
+
/** @priv: Driver private data */
void *priv;
};
diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
index 5f40fa5b869d..218a3ee86805 100644
--- a/include/uapi/drm/drm_ras.h
+++ b/include/uapi/drm/drm_ras.h
@@ -41,6 +41,7 @@ enum {
enum {
DRM_RAS_CMD_LIST_NODES = 1,
DRM_RAS_CMD_GET_ERROR_COUNTER,
+ DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
__DRM_RAS_CMD_MAX,
DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
--
2.47.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/2] drm/xe/xe_drm_ras: Add support for clear-error-counter in XE drm_ras
2026-04-09 7:33 [PATCH v2 0/2] Add clear-error-counter command to drm_ras Riana Tauro
` (2 preceding siblings ...)
2026-04-09 7:33 ` [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink " Riana Tauro
@ 2026-04-09 7:33 ` Riana Tauro
3 siblings, 0 replies; 10+ messages in thread
From: Riana Tauro @ 2026-04-09 7:33 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: aravind.iddamsetty, anshuman.gupta, rodrigo.vivi, joonas.lahtinen,
simona.vetter, airlied, pratik.bari, joshua.santosh.ranjan,
ashwin.kumar.kulkarni, shubham.kumar, ravi.kishore.koppuravuri,
raag.jadav, anvesh.bakwad, maarten.lankhorst, Riana Tauro
Add support for clear-error-counter command in XE drm_ras
This resets the counter value.
Usage:
$ sudo ynl --family drm_ras --do clear-error-counter --json \
'{"node-id":1, "error-id":1}'
None
Signed-off-by: Riana Tauro <riana.tauro@intel.com>
Reviewed-by: Raag Jadav <raag.jadav@intel.com>
---
drivers/gpu/drm/xe/xe_drm_ras.c | 35 +++++++++++++++++++++++++++++++--
1 file changed, 33 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_drm_ras.c b/drivers/gpu/drm/xe/xe_drm_ras.c
index e07dc23a155e..c21c8b428de6 100644
--- a/drivers/gpu/drm/xe/xe_drm_ras.c
+++ b/drivers/gpu/drm/xe/xe_drm_ras.c
@@ -27,6 +27,16 @@ static int hw_query_error_counter(struct xe_drm_ras_counter *info,
return 0;
}
+static int hw_clear_error_counter(struct xe_drm_ras_counter *info, u32 error_id)
+{
+ if (!info || !info[error_id].name)
+ return -ENOENT;
+
+ atomic_set(&info[error_id].counter, 0);
+
+ return 0;
+}
+
static int query_uncorrectable_error_counter(struct drm_ras_node *ep, u32 error_id,
const char **name, u32 *val)
{
@@ -37,6 +47,15 @@ static int query_uncorrectable_error_counter(struct drm_ras_node *ep, u32 error_
return hw_query_error_counter(info, error_id, name, val);
}
+static int clear_uncorrectable_error_counter(struct drm_ras_node *node, u32 error_id)
+{
+ struct xe_device *xe = node->priv;
+ struct xe_drm_ras *ras = &xe->ras;
+ struct xe_drm_ras_counter *info = ras->info[DRM_XE_RAS_ERR_SEV_UNCORRECTABLE];
+
+ return hw_clear_error_counter(info, error_id);
+}
+
static int query_correctable_error_counter(struct drm_ras_node *ep, u32 error_id,
const char **name, u32 *val)
{
@@ -47,6 +66,15 @@ static int query_correctable_error_counter(struct drm_ras_node *ep, u32 error_id
return hw_query_error_counter(info, error_id, name, val);
}
+static int clear_correctable_error_counter(struct drm_ras_node *node, u32 error_id)
+{
+ struct xe_device *xe = node->priv;
+ struct xe_drm_ras *ras = &xe->ras;
+ struct xe_drm_ras_counter *info = ras->info[DRM_XE_RAS_ERR_SEV_CORRECTABLE];
+
+ return hw_clear_error_counter(info, error_id);
+}
+
static struct xe_drm_ras_counter *allocate_and_copy_counters(struct xe_device *xe)
{
struct xe_drm_ras_counter *counter;
@@ -92,10 +120,13 @@ static int assign_node_params(struct xe_device *xe, struct drm_ras_node *node,
if (IS_ERR(ras->info[severity]))
return PTR_ERR(ras->info[severity]);
- if (severity == DRM_XE_RAS_ERR_SEV_CORRECTABLE)
+ if (severity == DRM_XE_RAS_ERR_SEV_CORRECTABLE) {
node->query_error_counter = query_correctable_error_counter;
- else
+ node->clear_error_counter = clear_correctable_error_counter;
+ } else {
node->query_error_counter = query_uncorrectable_error_counter;
+ node->clear_error_counter = clear_uncorrectable_error_counter;
+ }
return 0;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink command to drm_ras
2026-04-09 7:21 ` Tauro, Riana
@ 2026-04-09 13:37 ` Rodrigo Vivi
2026-04-10 5:21 ` Tauro, Riana
2026-04-09 23:01 ` Zack McKevitt
1 sibling, 1 reply; 10+ messages in thread
From: Rodrigo Vivi @ 2026-04-09 13:37 UTC (permalink / raw)
To: Tauro, Riana
Cc: intel-xe, dri-devel, netdev, Zack McKevitt, joonas.lahtinen,
aravind.iddamsetty, anshuman.gupta, simona.vetter, airlied,
pratik.bari, joshua.santosh.ranjan, ashwin.kumar.kulkarni,
shubham.kumar, ravi.kishore.koppuravuri, raag.jadav,
anvesh.bakwad, maarten.lankhorst, Jakub Kicinski, Lijo Lazar,
Hawking Zhang, David S. Miller, Paolo Abeni, Eric Dumazet
On Thu, Apr 09, 2026 at 12:51:44PM +0530, Tauro, Riana wrote:
> Hi Zack
>
> Could you please take a look at this patch if applicable to your usecase.
> Please let me know if any
> changes are required
>
> @Rodrigo This is already reviewed by Jakub and Raag.
> If there are no opens, can this be merged via drm_misc
if we push this to drm-misc-next, it might take a few weeks to propagate
back to drm-xe-next. With other work from you and Raag going fast pace
on drm-xe-next around this area, I'm afraid it could cause some conflicts.
It is definitely fine by me, but another option is to get ack from
drm-misc maintainers to get this through drm-xe-next.
so, really okay with drm-misc-next?
>
> Thanks
> Riana
>
> On 4/9/2026 1:03 PM, Riana Tauro wrote:
> > Introduce a new 'clear-error-counter' drm_ras command to reset the counter
> > value for a specific error counter of a given node.
> >
> > The command is a 'do' netlink request with 'node-id' and 'error-id'
> > as parameters with no response payload.
> >
> > Usage:
> >
> > $ sudo ynl --family drm_ras --do clear-error-counter --json \
> > '{"node-id":1, "error-id":1}'
> > None
> >
> > Cc: Jakub Kicinski <kuba@kernel.org>
> > Cc: Zack McKevitt <zachary.mckevitt@oss.qualcomm.com>
> > Cc: Lijo Lazar <lijo.lazar@amd.com>
> > Cc: Hawking Zhang <Hawking.Zhang@amd.com>
> > Cc: David S. Miller <davem@davemloft.net>
> > Cc: Paolo Abeni <pabeni@redhat.com>
> > Cc: Eric Dumazet <edumazet@google.com>
> > Signed-off-by: Riana Tauro <riana.tauro@intel.com>
> > Reviewed-by: Jakub Kicinski <kuba@kernel.org>
> > Reviewed-by: Raag Jadav <raag.jadav@intel.com>
> > ---
> > Documentation/gpu/drm-ras.rst | 8 +++++
> > Documentation/netlink/specs/drm_ras.yaml | 13 ++++++-
> > drivers/gpu/drm/drm_ras.c | 43 +++++++++++++++++++++++-
> > drivers/gpu/drm/drm_ras_nl.c | 13 +++++++
> > drivers/gpu/drm/drm_ras_nl.h | 2 ++
> > include/drm/drm_ras.h | 11 ++++++
> > include/uapi/drm/drm_ras.h | 1 +
> > 7 files changed, 89 insertions(+), 2 deletions(-)
> >
> > diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
> > index 70b246a78fc8..4636e68f5678 100644
> > --- a/Documentation/gpu/drm-ras.rst
> > +++ b/Documentation/gpu/drm-ras.rst
> > @@ -52,6 +52,8 @@ User space tools can:
> > as a parameter.
> > * Query specific error counter values with the ``get-error-counter`` command, using both
> > ``node-id`` and ``error-id`` as parameters.
> > +* Clear specific error counters with the ``clear-error-counter`` command, using both
> > + ``node-id`` and ``error-id`` as parameters.
> > YAML-based Interface
> > --------------------
> > @@ -101,3 +103,9 @@ Example: Query an error counter for a given node
> > sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}'
> > {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
> > +Example: Clear an error counter for a given node
> > +
> > +.. code-block:: bash
> > +
> > + sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}'
> > + None
> > diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
> > index 79af25dac3c5..e113056f8c01 100644
> > --- a/Documentation/netlink/specs/drm_ras.yaml
> > +++ b/Documentation/netlink/specs/drm_ras.yaml
> > @@ -99,7 +99,7 @@ operations:
> > flags: [admin-perm]
> > do:
> > request:
> > - attributes:
> > + attributes: &id-attrs
> > - node-id
> > - error-id
> > reply:
> > @@ -113,3 +113,14 @@ operations:
> > - node-id
> > reply:
> > attributes: *errorinfo
> > + -
> > + name: clear-error-counter
> > + doc: >-
> > + Clear error counter for a given node.
> > + The request includes the error-id and node-id of the
> > + counter to be cleared.
> > + attribute-set: error-counter-attrs
> > + flags: [admin-perm]
> > + do:
> > + request:
> > + attributes: *id-attrs
> > diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
> > index b2fa5ab86d87..d6eab29a1394 100644
> > --- a/drivers/gpu/drm/drm_ras.c
> > +++ b/drivers/gpu/drm/drm_ras.c
> > @@ -26,7 +26,7 @@
> > * efficient lookup by ID. Nodes can be registered or unregistered
> > * dynamically at runtime.
> > *
> > - * A Generic Netlink family `drm_ras` exposes two main operations to
> > + * A Generic Netlink family `drm_ras` exposes the below operations to
> > * userspace:
> > *
> > * 1. LIST_NODES: Dump all currently registered RAS nodes.
> > @@ -37,6 +37,10 @@
> > * Returns all counters of a node if only Node ID is provided or specific
> > * error counters.
> > *
> > + * 3. CLEAR_ERROR_COUNTER: Clear error counter of a given node.
> > + * Userspace must provide Node ID, Error ID.
> > + * Clears specific error counter of a node if supported.
> > + *
> > * Node registration:
> > *
> > * - drm_ras_node_register(): Registers a new node and assigns
> > @@ -66,6 +70,8 @@
> > * operation, fetching all counters from a specific node.
> > * - drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit
> > * operation, fetching a counter value from a specific node.
> > + * - drm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit
> > + * operation, clearing a counter value from a specific node.
> > */
> > static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> > @@ -314,6 +320,41 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
> > return doit_reply_value(info, node_id, error_id);
> > }
> > +/**
> > + * drm_ras_nl_clear_error_counter_doit() - Clear an error counter of a node
> > + * @skb: Netlink message buffer
> > + * @info: Generic Netlink info containing attributes of the request
> > + *
> > + * Extracts the node ID and error ID from the netlink attributes and
> > + * clears the current value.
> > + *
> > + * Return: 0 on success, or negative errno on failure.
> > + */
> > +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
> > + struct genl_info *info)
> > +{
> > + struct drm_ras_node *node;
> > + u32 node_id, error_id;
> > +
> > + if (!info->attrs ||
> > + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
> > + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID))
> > + return -EINVAL;
> > +
> > + node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
> > + error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
> > +
> > + node = xa_load(&drm_ras_xa, node_id);
> > + if (!node || !node->clear_error_counter)
> > + return -ENOENT;
> > +
> > + if (error_id < node->error_counter_range.first ||
> > + error_id > node->error_counter_range.last)
> > + return -EINVAL;
> > +
> > + return node->clear_error_counter(node, error_id);
> > +}
> > +
> > /**
> > * drm_ras_node_register() - Register a new RAS node
> > * @node: Node structure to register
> > diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
> > index 16803d0c4a44..dea1c1b2494e 100644
> > --- a/drivers/gpu/drm/drm_ras_nl.c
> > +++ b/drivers/gpu/drm/drm_ras_nl.c
> > @@ -22,6 +22,12 @@ static const struct nla_policy drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
> > [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
> > };
> > +/* DRM_RAS_CMD_CLEAR_ERROR_COUNTER - do */
> > +static const struct nla_policy drm_ras_clear_error_counter_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
> > + [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
> > + [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
> > +};
> > +
> > /* Ops table for drm_ras */
> > static const struct genl_split_ops drm_ras_nl_ops[] = {
> > {
> > @@ -43,6 +49,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
> > .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
> > .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
> > },
> > + {
> > + .cmd = DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
> > + .doit = drm_ras_nl_clear_error_counter_doit,
> > + .policy = drm_ras_clear_error_counter_nl_policy,
> > + .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
> > + .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
> > + },
> > };
> > struct genl_family drm_ras_nl_family __ro_after_init = {
> > diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
> > index 06ccd9342773..a398643572a5 100644
> > --- a/drivers/gpu/drm/drm_ras_nl.h
> > +++ b/drivers/gpu/drm/drm_ras_nl.h
> > @@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
> > struct genl_info *info);
> > int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
> > struct netlink_callback *cb);
> > +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
> > + struct genl_info *info);
> > extern struct genl_family drm_ras_nl_family;
> > diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
> > index 5d50209e51db..f2a787bc4f64 100644
> > --- a/include/drm/drm_ras.h
> > +++ b/include/drm/drm_ras.h
> > @@ -58,6 +58,17 @@ struct drm_ras_node {
> > int (*query_error_counter)(struct drm_ras_node *node, u32 error_id,
> > const char **name, u32 *val);
> > + /**
> > + * @clear_error_counter:
> > + *
> > + * This callback is used by drm_ras to clear a specific error counter.
> > + * Driver should implement this callback to support clearing error counters
> > + * of a node.
> > + *
> > + * Returns: 0 on success, negative error code on failure.
> > + */
> > + int (*clear_error_counter)(struct drm_ras_node *node, u32 error_id);
> > +
> > /** @priv: Driver private data */
> > void *priv;
> > };
> > diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
> > index 5f40fa5b869d..218a3ee86805 100644
> > --- a/include/uapi/drm/drm_ras.h
> > +++ b/include/uapi/drm/drm_ras.h
> > @@ -41,6 +41,7 @@ enum {
> > enum {
> > DRM_RAS_CMD_LIST_NODES = 1,
> > DRM_RAS_CMD_GET_ERROR_COUNTER,
> > + DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
> > __DRM_RAS_CMD_MAX,
> > DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink command to drm_ras
2026-04-09 7:21 ` Tauro, Riana
2026-04-09 13:37 ` Rodrigo Vivi
@ 2026-04-09 23:01 ` Zack McKevitt
2026-04-10 5:25 ` Tauro, Riana
1 sibling, 1 reply; 10+ messages in thread
From: Zack McKevitt @ 2026-04-09 23:01 UTC (permalink / raw)
To: Tauro, Riana, intel-xe, dri-devel, netdev, rodrigo.vivi,
joonas.lahtinen, aravind.iddamsetty
Cc: anshuman.gupta, simona.vetter, airlied, pratik.bari,
joshua.santosh.ranjan, ashwin.kumar.kulkarni, shubham.kumar,
ravi.kishore.koppuravuri, raag.jadav, anvesh.bakwad,
maarten.lankhorst, Jakub Kicinski, Lijo Lazar, Hawking Zhang,
David S. Miller, Paolo Abeni, Eric Dumazet
On 4/9/2026 1:21 AM, Tauro, Riana wrote:
> Hi Zack
>
> Could you please take a look at this patch if applicable to your
> usecase. Please let me know if any
> changes are required
>
From a quick glance, I think this looks good from our end.
Thanks,
Zack
> @Rodrigo This is already reviewed by Jakub and Raag.
> If there are no opens, can this be merged via drm_misc
>
> Thanks
> Riana
>
> On 4/9/2026 1:03 PM, Riana Tauro wrote:
>> Introduce a new 'clear-error-counter' drm_ras command to reset the
>> counter
>> value for a specific error counter of a given node.
>>
>> The command is a 'do' netlink request with 'node-id' and 'error-id'
>> as parameters with no response payload.
>>
>> Usage:
>>
>> $ sudo ynl --family drm_ras --do clear-error-counter --json \
>> '{"node-id":1, "error-id":1}'
>> None
>>
>> Cc: Jakub Kicinski <kuba@kernel.org>
>> Cc: Zack McKevitt <zachary.mckevitt@oss.qualcomm.com>
>> Cc: Lijo Lazar <lijo.lazar@amd.com>
>> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
>> Cc: David S. Miller <davem@davemloft.net>
>> Cc: Paolo Abeni <pabeni@redhat.com>
>> Cc: Eric Dumazet <edumazet@google.com>
>> Signed-off-by: Riana Tauro <riana.tauro@intel.com>
>> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
>> Reviewed-by: Raag Jadav <raag.jadav@intel.com>
>> ---
>> Documentation/gpu/drm-ras.rst | 8 +++++
>> Documentation/netlink/specs/drm_ras.yaml | 13 ++++++-
>> drivers/gpu/drm/drm_ras.c | 43 +++++++++++++++++++++++-
>> drivers/gpu/drm/drm_ras_nl.c | 13 +++++++
>> drivers/gpu/drm/drm_ras_nl.h | 2 ++
>> include/drm/drm_ras.h | 11 ++++++
>> include/uapi/drm/drm_ras.h | 1 +
>> 7 files changed, 89 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-
>> ras.rst
>> index 70b246a78fc8..4636e68f5678 100644
>> --- a/Documentation/gpu/drm-ras.rst
>> +++ b/Documentation/gpu/drm-ras.rst
>> @@ -52,6 +52,8 @@ User space tools can:
>> as a parameter.
>> * Query specific error counter values with the ``get-error-counter``
>> command, using both
>> ``node-id`` and ``error-id`` as parameters.
>> +* Clear specific error counters with the ``clear-error-counter``
>> command, using both
>> + ``node-id`` and ``error-id`` as parameters.
>> YAML-based Interface
>> --------------------
>> @@ -101,3 +103,9 @@ Example: Query an error counter for a given node
>> sudo ynl --family drm_ras --do get-error-counter --json '{"node-
>> id":0, "error-id":1}'
>> {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
>> +Example: Clear an error counter for a given node
>> +
>> +.. code-block:: bash
>> +
>> + sudo ynl --family drm_ras --do clear-error-counter --json
>> '{"node-id":0, "error-id":1}'
>> + None
>> diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/
>> netlink/specs/drm_ras.yaml
>> index 79af25dac3c5..e113056f8c01 100644
>> --- a/Documentation/netlink/specs/drm_ras.yaml
>> +++ b/Documentation/netlink/specs/drm_ras.yaml
>> @@ -99,7 +99,7 @@ operations:
>> flags: [admin-perm]
>> do:
>> request:
>> - attributes:
>> + attributes: &id-attrs
>> - node-id
>> - error-id
>> reply:
>> @@ -113,3 +113,14 @@ operations:
>> - node-id
>> reply:
>> attributes: *errorinfo
>> + -
>> + name: clear-error-counter
>> + doc: >-
>> + Clear error counter for a given node.
>> + The request includes the error-id and node-id of the
>> + counter to be cleared.
>> + attribute-set: error-counter-attrs
>> + flags: [admin-perm]
>> + do:
>> + request:
>> + attributes: *id-attrs
>> diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
>> index b2fa5ab86d87..d6eab29a1394 100644
>> --- a/drivers/gpu/drm/drm_ras.c
>> +++ b/drivers/gpu/drm/drm_ras.c
>> @@ -26,7 +26,7 @@
>> * efficient lookup by ID. Nodes can be registered or unregistered
>> * dynamically at runtime.
>> *
>> - * A Generic Netlink family `drm_ras` exposes two main operations to
>> + * A Generic Netlink family `drm_ras` exposes the below operations to
>> * userspace:
>> *
>> * 1. LIST_NODES: Dump all currently registered RAS nodes.
>> @@ -37,6 +37,10 @@
>> * Returns all counters of a node if only Node ID is provided or
>> specific
>> * error counters.
>> *
>> + * 3. CLEAR_ERROR_COUNTER: Clear error counter of a given node.
>> + * Userspace must provide Node ID, Error ID.
>> + * Clears specific error counter of a node if supported.
>> + *
>> * Node registration:
>> *
>> * - drm_ras_node_register(): Registers a new node and assigns
>> @@ -66,6 +70,8 @@
>> * operation, fetching all counters from a specific node.
>> * - drm_ras_nl_get_error_counter_doit(): Implements the
>> GET_ERROR_COUNTER doit
>> * operation, fetching a counter value from a specific node.
>> + * - drm_ras_nl_clear_error_counter_doit(): Implements the
>> CLEAR_ERROR_COUNTER doit
>> + * operation, clearing a counter value from a specific node.
>> */
>> static DEFINE_XARRAY_ALLOC(drm_ras_xa);
>> @@ -314,6 +320,41 @@ int drm_ras_nl_get_error_counter_doit(struct
>> sk_buff *skb,
>> return doit_reply_value(info, node_id, error_id);
>> }
>> +/**
>> + * drm_ras_nl_clear_error_counter_doit() - Clear an error counter of
>> a node
>> + * @skb: Netlink message buffer
>> + * @info: Generic Netlink info containing attributes of the request
>> + *
>> + * Extracts the node ID and error ID from the netlink attributes and
>> + * clears the current value.
>> + *
>> + * Return: 0 on success, or negative errno on failure.
>> + */
>> +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
>> + struct genl_info *info)
>> +{
>> + struct drm_ras_node *node;
>> + u32 node_id, error_id;
>> +
>> + if (!info->attrs ||
>> + GENL_REQ_ATTR_CHECK(info,
>> DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
>> + GENL_REQ_ATTR_CHECK(info,
>> DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID))
>> + return -EINVAL;
>> +
>> + node_id = nla_get_u32(info-
>> >attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
>> + error_id = nla_get_u32(info-
>> >attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
>> +
>> + node = xa_load(&drm_ras_xa, node_id);
>> + if (!node || !node->clear_error_counter)
>> + return -ENOENT;
>> +
>> + if (error_id < node->error_counter_range.first ||
>> + error_id > node->error_counter_range.last)
>> + return -EINVAL;
>> +
>> + return node->clear_error_counter(node, error_id);
>> +}
>> +
>> /**
>> * drm_ras_node_register() - Register a new RAS node
>> * @node: Node structure to register
>> diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
>> index 16803d0c4a44..dea1c1b2494e 100644
>> --- a/drivers/gpu/drm/drm_ras_nl.c
>> +++ b/drivers/gpu/drm/drm_ras_nl.c
>> @@ -22,6 +22,12 @@ static const struct nla_policy
>> drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
>> [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
>> };
>> +/* DRM_RAS_CMD_CLEAR_ERROR_COUNTER - do */
>> +static const struct nla_policy
>> drm_ras_clear_error_counter_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
>> + [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
>> + [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
>> +};
>> +
>> /* Ops table for drm_ras */
>> static const struct genl_split_ops drm_ras_nl_ops[] = {
>> {
>> @@ -43,6 +49,13 @@ static const struct genl_split_ops drm_ras_nl_ops[]
>> = {
>> .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
>> .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
>> },
>> + {
>> + .cmd = DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
>> + .doit = drm_ras_nl_clear_error_counter_doit,
>> + .policy = drm_ras_clear_error_counter_nl_policy,
>> + .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
>> + .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
>> + },
>> };
>> struct genl_family drm_ras_nl_family __ro_after_init = {
>> diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
>> index 06ccd9342773..a398643572a5 100644
>> --- a/drivers/gpu/drm/drm_ras_nl.h
>> +++ b/drivers/gpu/drm/drm_ras_nl.h
>> @@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff
>> *skb,
>> struct genl_info *info);
>> int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
>> struct netlink_callback *cb);
>> +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
>> + struct genl_info *info);
>> extern struct genl_family drm_ras_nl_family;
>> diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
>> index 5d50209e51db..f2a787bc4f64 100644
>> --- a/include/drm/drm_ras.h
>> +++ b/include/drm/drm_ras.h
>> @@ -58,6 +58,17 @@ struct drm_ras_node {
>> int (*query_error_counter)(struct drm_ras_node *node, u32 error_id,
>> const char **name, u32 *val);
>> + /**
>> + * @clear_error_counter:
>> + *
>> + * This callback is used by drm_ras to clear a specific error
>> counter.
>> + * Driver should implement this callback to support clearing
>> error counters
>> + * of a node.
>> + *
>> + * Returns: 0 on success, negative error code on failure.
>> + */
>> + int (*clear_error_counter)(struct drm_ras_node *node, u32 error_id);
>> +
>> /** @priv: Driver private data */
>> void *priv;
>> };
>> diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
>> index 5f40fa5b869d..218a3ee86805 100644
>> --- a/include/uapi/drm/drm_ras.h
>> +++ b/include/uapi/drm/drm_ras.h
>> @@ -41,6 +41,7 @@ enum {
>> enum {
>> DRM_RAS_CMD_LIST_NODES = 1,
>> DRM_RAS_CMD_GET_ERROR_COUNTER,
>> + DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
>> __DRM_RAS_CMD_MAX,
>> DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink command to drm_ras
2026-04-09 13:37 ` Rodrigo Vivi
@ 2026-04-10 5:21 ` Tauro, Riana
0 siblings, 0 replies; 10+ messages in thread
From: Tauro, Riana @ 2026-04-10 5:21 UTC (permalink / raw)
To: Rodrigo Vivi, maarten.lankhorst
Cc: intel-xe, dri-devel, netdev, Zack McKevitt, joonas.lahtinen,
aravind.iddamsetty, anshuman.gupta, simona.vetter, airlied,
pratik.bari, joshua.santosh.ranjan, ashwin.kumar.kulkarni,
shubham.kumar, ravi.kishore.koppuravuri, raag.jadav,
anvesh.bakwad, Jakub Kicinski, Lijo Lazar, Hawking Zhang,
David S. Miller, Paolo Abeni, Eric Dumazet
Hi Rodrigo
On 4/9/2026 7:07 PM, Rodrigo Vivi wrote:
> On Thu, Apr 09, 2026 at 12:51:44PM +0530, Tauro, Riana wrote:
>> Hi Zack
>>
>> Could you please take a look at this patch if applicable to your usecase.
>> Please let me know if any
>> changes are required
>>
>> @Rodrigo This is already reviewed by Jakub and Raag.
>> If there are no opens, can this be merged via drm_misc
> if we push this to drm-misc-next, it might take a few weeks to propagate
> back to drm-xe-next. With other work from you and Raag going fast pace
> on drm-xe-next around this area, I'm afraid it could cause some conflicts.
>
> It is definitely fine by me, but another option is to get ack from
> drm-misc maintainers to get this through drm-xe-next.
>
Yeah this would be better with the other RAS patches close to merge.
@Maarten Can you please help with an ack if this patch looks good to you?
This has been reviewed by Jakub from netdev and Raag from intel-xe
There are no other opens.
Thanks
Riana
>
> so, really okay with drm-misc-next?
>
>> Thanks
>> Riana
>>
>> On 4/9/2026 1:03 PM, Riana Tauro wrote:
>>> Introduce a new 'clear-error-counter' drm_ras command to reset the counter
>>> value for a specific error counter of a given node.
>>>
>>> The command is a 'do' netlink request with 'node-id' and 'error-id'
>>> as parameters with no response payload.
>>>
>>> Usage:
>>>
>>> $ sudo ynl --family drm_ras --do clear-error-counter --json \
>>> '{"node-id":1, "error-id":1}'
>>> None
>>>
>>> Cc: Jakub Kicinski <kuba@kernel.org>
>>> Cc: Zack McKevitt <zachary.mckevitt@oss.qualcomm.com>
>>> Cc: Lijo Lazar <lijo.lazar@amd.com>
>>> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
>>> Cc: David S. Miller <davem@davemloft.net>
>>> Cc: Paolo Abeni <pabeni@redhat.com>
>>> Cc: Eric Dumazet <edumazet@google.com>
>>> Signed-off-by: Riana Tauro <riana.tauro@intel.com>
>>> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
>>> Reviewed-by: Raag Jadav <raag.jadav@intel.com>
>>> ---
>>> Documentation/gpu/drm-ras.rst | 8 +++++
>>> Documentation/netlink/specs/drm_ras.yaml | 13 ++++++-
>>> drivers/gpu/drm/drm_ras.c | 43 +++++++++++++++++++++++-
>>> drivers/gpu/drm/drm_ras_nl.c | 13 +++++++
>>> drivers/gpu/drm/drm_ras_nl.h | 2 ++
>>> include/drm/drm_ras.h | 11 ++++++
>>> include/uapi/drm/drm_ras.h | 1 +
>>> 7 files changed, 89 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
>>> index 70b246a78fc8..4636e68f5678 100644
>>> --- a/Documentation/gpu/drm-ras.rst
>>> +++ b/Documentation/gpu/drm-ras.rst
>>> @@ -52,6 +52,8 @@ User space tools can:
>>> as a parameter.
>>> * Query specific error counter values with the ``get-error-counter`` command, using both
>>> ``node-id`` and ``error-id`` as parameters.
>>> +* Clear specific error counters with the ``clear-error-counter`` command, using both
>>> + ``node-id`` and ``error-id`` as parameters.
>>> YAML-based Interface
>>> --------------------
>>> @@ -101,3 +103,9 @@ Example: Query an error counter for a given node
>>> sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}'
>>> {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
>>> +Example: Clear an error counter for a given node
>>> +
>>> +.. code-block:: bash
>>> +
>>> + sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}'
>>> + None
>>> diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
>>> index 79af25dac3c5..e113056f8c01 100644
>>> --- a/Documentation/netlink/specs/drm_ras.yaml
>>> +++ b/Documentation/netlink/specs/drm_ras.yaml
>>> @@ -99,7 +99,7 @@ operations:
>>> flags: [admin-perm]
>>> do:
>>> request:
>>> - attributes:
>>> + attributes: &id-attrs
>>> - node-id
>>> - error-id
>>> reply:
>>> @@ -113,3 +113,14 @@ operations:
>>> - node-id
>>> reply:
>>> attributes: *errorinfo
>>> + -
>>> + name: clear-error-counter
>>> + doc: >-
>>> + Clear error counter for a given node.
>>> + The request includes the error-id and node-id of the
>>> + counter to be cleared.
>>> + attribute-set: error-counter-attrs
>>> + flags: [admin-perm]
>>> + do:
>>> + request:
>>> + attributes: *id-attrs
>>> diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
>>> index b2fa5ab86d87..d6eab29a1394 100644
>>> --- a/drivers/gpu/drm/drm_ras.c
>>> +++ b/drivers/gpu/drm/drm_ras.c
>>> @@ -26,7 +26,7 @@
>>> * efficient lookup by ID. Nodes can be registered or unregistered
>>> * dynamically at runtime.
>>> *
>>> - * A Generic Netlink family `drm_ras` exposes two main operations to
>>> + * A Generic Netlink family `drm_ras` exposes the below operations to
>>> * userspace:
>>> *
>>> * 1. LIST_NODES: Dump all currently registered RAS nodes.
>>> @@ -37,6 +37,10 @@
>>> * Returns all counters of a node if only Node ID is provided or specific
>>> * error counters.
>>> *
>>> + * 3. CLEAR_ERROR_COUNTER: Clear error counter of a given node.
>>> + * Userspace must provide Node ID, Error ID.
>>> + * Clears specific error counter of a node if supported.
>>> + *
>>> * Node registration:
>>> *
>>> * - drm_ras_node_register(): Registers a new node and assigns
>>> @@ -66,6 +70,8 @@
>>> * operation, fetching all counters from a specific node.
>>> * - drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit
>>> * operation, fetching a counter value from a specific node.
>>> + * - drm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit
>>> + * operation, clearing a counter value from a specific node.
>>> */
>>> static DEFINE_XARRAY_ALLOC(drm_ras_xa);
>>> @@ -314,6 +320,41 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
>>> return doit_reply_value(info, node_id, error_id);
>>> }
>>> +/**
>>> + * drm_ras_nl_clear_error_counter_doit() - Clear an error counter of a node
>>> + * @skb: Netlink message buffer
>>> + * @info: Generic Netlink info containing attributes of the request
>>> + *
>>> + * Extracts the node ID and error ID from the netlink attributes and
>>> + * clears the current value.
>>> + *
>>> + * Return: 0 on success, or negative errno on failure.
>>> + */
>>> +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
>>> + struct genl_info *info)
>>> +{
>>> + struct drm_ras_node *node;
>>> + u32 node_id, error_id;
>>> +
>>> + if (!info->attrs ||
>>> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
>>> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID))
>>> + return -EINVAL;
>>> +
>>> + node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
>>> + error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
>>> +
>>> + node = xa_load(&drm_ras_xa, node_id);
>>> + if (!node || !node->clear_error_counter)
>>> + return -ENOENT;
>>> +
>>> + if (error_id < node->error_counter_range.first ||
>>> + error_id > node->error_counter_range.last)
>>> + return -EINVAL;
>>> +
>>> + return node->clear_error_counter(node, error_id);
>>> +}
>>> +
>>> /**
>>> * drm_ras_node_register() - Register a new RAS node
>>> * @node: Node structure to register
>>> diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
>>> index 16803d0c4a44..dea1c1b2494e 100644
>>> --- a/drivers/gpu/drm/drm_ras_nl.c
>>> +++ b/drivers/gpu/drm/drm_ras_nl.c
>>> @@ -22,6 +22,12 @@ static const struct nla_policy drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
>>> [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
>>> };
>>> +/* DRM_RAS_CMD_CLEAR_ERROR_COUNTER - do */
>>> +static const struct nla_policy drm_ras_clear_error_counter_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
>>> + [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
>>> + [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
>>> +};
>>> +
>>> /* Ops table for drm_ras */
>>> static const struct genl_split_ops drm_ras_nl_ops[] = {
>>> {
>>> @@ -43,6 +49,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
>>> .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
>>> .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
>>> },
>>> + {
>>> + .cmd = DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
>>> + .doit = drm_ras_nl_clear_error_counter_doit,
>>> + .policy = drm_ras_clear_error_counter_nl_policy,
>>> + .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
>>> + .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
>>> + },
>>> };
>>> struct genl_family drm_ras_nl_family __ro_after_init = {
>>> diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
>>> index 06ccd9342773..a398643572a5 100644
>>> --- a/drivers/gpu/drm/drm_ras_nl.h
>>> +++ b/drivers/gpu/drm/drm_ras_nl.h
>>> @@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
>>> struct genl_info *info);
>>> int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
>>> struct netlink_callback *cb);
>>> +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
>>> + struct genl_info *info);
>>> extern struct genl_family drm_ras_nl_family;
>>> diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
>>> index 5d50209e51db..f2a787bc4f64 100644
>>> --- a/include/drm/drm_ras.h
>>> +++ b/include/drm/drm_ras.h
>>> @@ -58,6 +58,17 @@ struct drm_ras_node {
>>> int (*query_error_counter)(struct drm_ras_node *node, u32 error_id,
>>> const char **name, u32 *val);
>>> + /**
>>> + * @clear_error_counter:
>>> + *
>>> + * This callback is used by drm_ras to clear a specific error counter.
>>> + * Driver should implement this callback to support clearing error counters
>>> + * of a node.
>>> + *
>>> + * Returns: 0 on success, negative error code on failure.
>>> + */
>>> + int (*clear_error_counter)(struct drm_ras_node *node, u32 error_id);
>>> +
>>> /** @priv: Driver private data */
>>> void *priv;
>>> };
>>> diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
>>> index 5f40fa5b869d..218a3ee86805 100644
>>> --- a/include/uapi/drm/drm_ras.h
>>> +++ b/include/uapi/drm/drm_ras.h
>>> @@ -41,6 +41,7 @@ enum {
>>> enum {
>>> DRM_RAS_CMD_LIST_NODES = 1,
>>> DRM_RAS_CMD_GET_ERROR_COUNTER,
>>> + DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
>>> __DRM_RAS_CMD_MAX,
>>> DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink command to drm_ras
2026-04-09 23:01 ` Zack McKevitt
@ 2026-04-10 5:25 ` Tauro, Riana
0 siblings, 0 replies; 10+ messages in thread
From: Tauro, Riana @ 2026-04-10 5:25 UTC (permalink / raw)
To: Zack McKevitt, intel-xe, dri-devel, netdev, rodrigo.vivi,
joonas.lahtinen, aravind.iddamsetty
Cc: anshuman.gupta, simona.vetter, airlied, pratik.bari,
joshua.santosh.ranjan, ashwin.kumar.kulkarni, shubham.kumar,
ravi.kishore.koppuravuri, raag.jadav, anvesh.bakwad,
maarten.lankhorst, Jakub Kicinski, Lijo Lazar, Hawking Zhang,
David S. Miller, Paolo Abeni, Eric Dumazet
On 4/10/2026 4:31 AM, Zack McKevitt wrote:
>
> On 4/9/2026 1:21 AM, Tauro, Riana wrote:
>> Hi Zack
>>
>> Could you please take a look at this patch if applicable to your
>> usecase. Please let me know if any
>> changes are required
>>
>
> From a quick glance, I think this looks good from our end.
Thank you Zack for taking a look.
>
> Thanks,
> Zack
>
>> @Rodrigo This is already reviewed by Jakub and Raag.
>> If there are no opens, can this be merged via drm_misc
>>
>> Thanks
>> Riana
>>
>> On 4/9/2026 1:03 PM, Riana Tauro wrote:
>>> Introduce a new 'clear-error-counter' drm_ras command to reset the
>>> counter
>>> value for a specific error counter of a given node.
>>>
>>> The command is a 'do' netlink request with 'node-id' and 'error-id'
>>> as parameters with no response payload.
>>>
>>> Usage:
>>>
>>> $ sudo ynl --family drm_ras --do clear-error-counter --json \
>>> '{"node-id":1, "error-id":1}'
>>> None
>>>
>>> Cc: Jakub Kicinski <kuba@kernel.org>
>>> Cc: Zack McKevitt <zachary.mckevitt@oss.qualcomm.com>
>>> Cc: Lijo Lazar <lijo.lazar@amd.com>
>>> Cc: Hawking Zhang <Hawking.Zhang@amd.com>
>>> Cc: David S. Miller <davem@davemloft.net>
>>> Cc: Paolo Abeni <pabeni@redhat.com>
>>> Cc: Eric Dumazet <edumazet@google.com>
>>> Signed-off-by: Riana Tauro <riana.tauro@intel.com>
>>> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
>>> Reviewed-by: Raag Jadav <raag.jadav@intel.com>
>>> ---
>>> Documentation/gpu/drm-ras.rst | 8 +++++
>>> Documentation/netlink/specs/drm_ras.yaml | 13 ++++++-
>>> drivers/gpu/drm/drm_ras.c | 43
>>> +++++++++++++++++++++++-
>>> drivers/gpu/drm/drm_ras_nl.c | 13 +++++++
>>> drivers/gpu/drm/drm_ras_nl.h | 2 ++
>>> include/drm/drm_ras.h | 11 ++++++
>>> include/uapi/drm/drm_ras.h | 1 +
>>> 7 files changed, 89 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-
>>> ras.rst
>>> index 70b246a78fc8..4636e68f5678 100644
>>> --- a/Documentation/gpu/drm-ras.rst
>>> +++ b/Documentation/gpu/drm-ras.rst
>>> @@ -52,6 +52,8 @@ User space tools can:
>>> as a parameter.
>>> * Query specific error counter values with the
>>> ``get-error-counter`` command, using both
>>> ``node-id`` and ``error-id`` as parameters.
>>> +* Clear specific error counters with the ``clear-error-counter``
>>> command, using both
>>> + ``node-id`` and ``error-id`` as parameters.
>>> YAML-based Interface
>>> --------------------
>>> @@ -101,3 +103,9 @@ Example: Query an error counter for a given node
>>> sudo ynl --family drm_ras --do get-error-counter --json
>>> '{"node- id":0, "error-id":1}'
>>> {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
>>> +Example: Clear an error counter for a given node
>>> +
>>> +.. code-block:: bash
>>> +
>>> + sudo ynl --family drm_ras --do clear-error-counter --json
>>> '{"node-id":0, "error-id":1}'
>>> + None
>>> diff --git a/Documentation/netlink/specs/drm_ras.yaml
>>> b/Documentation/ netlink/specs/drm_ras.yaml
>>> index 79af25dac3c5..e113056f8c01 100644
>>> --- a/Documentation/netlink/specs/drm_ras.yaml
>>> +++ b/Documentation/netlink/specs/drm_ras.yaml
>>> @@ -99,7 +99,7 @@ operations:
>>> flags: [admin-perm]
>>> do:
>>> request:
>>> - attributes:
>>> + attributes: &id-attrs
>>> - node-id
>>> - error-id
>>> reply:
>>> @@ -113,3 +113,14 @@ operations:
>>> - node-id
>>> reply:
>>> attributes: *errorinfo
>>> + -
>>> + name: clear-error-counter
>>> + doc: >-
>>> + Clear error counter for a given node.
>>> + The request includes the error-id and node-id of the
>>> + counter to be cleared.
>>> + attribute-set: error-counter-attrs
>>> + flags: [admin-perm]
>>> + do:
>>> + request:
>>> + attributes: *id-attrs
>>> diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
>>> index b2fa5ab86d87..d6eab29a1394 100644
>>> --- a/drivers/gpu/drm/drm_ras.c
>>> +++ b/drivers/gpu/drm/drm_ras.c
>>> @@ -26,7 +26,7 @@
>>> * efficient lookup by ID. Nodes can be registered or unregistered
>>> * dynamically at runtime.
>>> *
>>> - * A Generic Netlink family `drm_ras` exposes two main operations to
>>> + * A Generic Netlink family `drm_ras` exposes the below operations to
>>> * userspace:
>>> *
>>> * 1. LIST_NODES: Dump all currently registered RAS nodes.
>>> @@ -37,6 +37,10 @@
>>> * Returns all counters of a node if only Node ID is provided
>>> or specific
>>> * error counters.
>>> *
>>> + * 3. CLEAR_ERROR_COUNTER: Clear error counter of a given node.
>>> + * Userspace must provide Node ID, Error ID.
>>> + * Clears specific error counter of a node if supported.
>>> + *
>>> * Node registration:
>>> *
>>> * - drm_ras_node_register(): Registers a new node and assigns
>>> @@ -66,6 +70,8 @@
>>> * operation, fetching all counters from a specific node.
>>> * - drm_ras_nl_get_error_counter_doit(): Implements the
>>> GET_ERROR_COUNTER doit
>>> * operation, fetching a counter value from a specific node.
>>> + * - drm_ras_nl_clear_error_counter_doit(): Implements the
>>> CLEAR_ERROR_COUNTER doit
>>> + * operation, clearing a counter value from a specific node.
>>> */
>>> static DEFINE_XARRAY_ALLOC(drm_ras_xa);
>>> @@ -314,6 +320,41 @@ int drm_ras_nl_get_error_counter_doit(struct
>>> sk_buff *skb,
>>> return doit_reply_value(info, node_id, error_id);
>>> }
>>> +/**
>>> + * drm_ras_nl_clear_error_counter_doit() - Clear an error counter
>>> of a node
>>> + * @skb: Netlink message buffer
>>> + * @info: Generic Netlink info containing attributes of the request
>>> + *
>>> + * Extracts the node ID and error ID from the netlink attributes and
>>> + * clears the current value.
>>> + *
>>> + * Return: 0 on success, or negative errno on failure.
>>> + */
>>> +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
>>> + struct genl_info *info)
>>> +{
>>> + struct drm_ras_node *node;
>>> + u32 node_id, error_id;
>>> +
>>> + if (!info->attrs ||
>>> + GENL_REQ_ATTR_CHECK(info,
>>> DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
>>> + GENL_REQ_ATTR_CHECK(info,
>>> DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID))
>>> + return -EINVAL;
>>> +
>>> + node_id = nla_get_u32(info-
>>> >attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
>>> + error_id = nla_get_u32(info-
>>> >attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
>>> +
>>> + node = xa_load(&drm_ras_xa, node_id);
>>> + if (!node || !node->clear_error_counter)
>>> + return -ENOENT;
>>> +
>>> + if (error_id < node->error_counter_range.first ||
>>> + error_id > node->error_counter_range.last)
>>> + return -EINVAL;
>>> +
>>> + return node->clear_error_counter(node, error_id);
>>> +}
>>> +
>>> /**
>>> * drm_ras_node_register() - Register a new RAS node
>>> * @node: Node structure to register
>>> diff --git a/drivers/gpu/drm/drm_ras_nl.c
>>> b/drivers/gpu/drm/drm_ras_nl.c
>>> index 16803d0c4a44..dea1c1b2494e 100644
>>> --- a/drivers/gpu/drm/drm_ras_nl.c
>>> +++ b/drivers/gpu/drm/drm_ras_nl.c
>>> @@ -22,6 +22,12 @@ static const struct nla_policy
>>> drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
>>> [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
>>> };
>>> +/* DRM_RAS_CMD_CLEAR_ERROR_COUNTER - do */
>>> +static const struct nla_policy
>>> drm_ras_clear_error_counter_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID
>>> + 1] = {
>>> + [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
>>> + [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
>>> +};
>>> +
>>> /* Ops table for drm_ras */
>>> static const struct genl_split_ops drm_ras_nl_ops[] = {
>>> {
>>> @@ -43,6 +49,13 @@ static const struct genl_split_ops
>>> drm_ras_nl_ops[] = {
>>> .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
>>> .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
>>> },
>>> + {
>>> + .cmd = DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
>>> + .doit = drm_ras_nl_clear_error_counter_doit,
>>> + .policy = drm_ras_clear_error_counter_nl_policy,
>>> + .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
>>> + .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
>>> + },
>>> };
>>> struct genl_family drm_ras_nl_family __ro_after_init = {
>>> diff --git a/drivers/gpu/drm/drm_ras_nl.h
>>> b/drivers/gpu/drm/drm_ras_nl.h
>>> index 06ccd9342773..a398643572a5 100644
>>> --- a/drivers/gpu/drm/drm_ras_nl.h
>>> +++ b/drivers/gpu/drm/drm_ras_nl.h
>>> @@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct
>>> sk_buff *skb,
>>> struct genl_info *info);
>>> int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
>>> struct netlink_callback *cb);
>>> +int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
>>> + struct genl_info *info);
>>> extern struct genl_family drm_ras_nl_family;
>>> diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
>>> index 5d50209e51db..f2a787bc4f64 100644
>>> --- a/include/drm/drm_ras.h
>>> +++ b/include/drm/drm_ras.h
>>> @@ -58,6 +58,17 @@ struct drm_ras_node {
>>> int (*query_error_counter)(struct drm_ras_node *node, u32
>>> error_id,
>>> const char **name, u32 *val);
>>> + /**
>>> + * @clear_error_counter:
>>> + *
>>> + * This callback is used by drm_ras to clear a specific error
>>> counter.
>>> + * Driver should implement this callback to support clearing
>>> error counters
>>> + * of a node.
>>> + *
>>> + * Returns: 0 on success, negative error code on failure.
>>> + */
>>> + int (*clear_error_counter)(struct drm_ras_node *node, u32
>>> error_id);
>>> +
>>> /** @priv: Driver private data */
>>> void *priv;
>>> };
>>> diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
>>> index 5f40fa5b869d..218a3ee86805 100644
>>> --- a/include/uapi/drm/drm_ras.h
>>> +++ b/include/uapi/drm/drm_ras.h
>>> @@ -41,6 +41,7 @@ enum {
>>> enum {
>>> DRM_RAS_CMD_LIST_NODES = 1,
>>> DRM_RAS_CMD_GET_ERROR_COUNTER,
>>> + DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
>>> __DRM_RAS_CMD_MAX,
>>> DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-04-10 5:26 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-09 7:33 [PATCH v2 0/2] Add clear-error-counter command to drm_ras Riana Tauro
2026-04-09 7:07 ` ✗ CI.checkpatch: warning for " Patchwork
2026-04-09 7:08 ` ✗ CI.KUnit: failure " Patchwork
2026-04-09 7:33 ` [PATCH v2 1/2] drm/drm_ras: Add clear-error-counter netlink " Riana Tauro
2026-04-09 7:21 ` Tauro, Riana
2026-04-09 13:37 ` Rodrigo Vivi
2026-04-10 5:21 ` Tauro, Riana
2026-04-09 23:01 ` Zack McKevitt
2026-04-10 5:25 ` Tauro, Riana
2026-04-09 7:33 ` [PATCH v2 2/2] drm/xe/xe_drm_ras: Add support for clear-error-counter in XE drm_ras Riana Tauro
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox