Matthew Brost
9fb1f1256e
drm/gpusvm: Limit the number of retries in drm_gpusvm_get_pages
...
drm_gpusvm_get_pages should not be allowed to retry forever, cap the
time spent in the function to HMM_RANGE_DEFAULT_TIMEOUT has this is
essentially a wrapper around hmm_range_fault.
Signed-off-by: Matthew Brost <matthew.brost@intel.com >
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com >
Link: https://patch.msgid.link/20251122012502.382587-1-matthew.brost@intel.com
2025-11-26 10:21:45 -08:00
Zbigniew Kempczyński
dacda0cf75
drm/xe: Add caching pagetable flag
...
Introduce device xe_caching_pt flag to selectively turn it on for
supported platforms. It allows to eliminate version check and enable
this feature for the future platforms.
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com >
Cc: Matthew Auld <matthew.auld@intel.com >
Reviewed-by: Matthew Auld <matthew.auld@intel.com >
Signed-off-by: Matthew Auld <matthew.auld@intel.com >
Link: https://patch.msgid.link/20251125153732.400766-2-zbigniew.kempczynski@intel.com
2025-11-26 10:54:24 +00:00
Himal Prasad Ghimiray
7f08cc5b3c
drm/xe/vm: Skip ufence association for CPU address mirror VMA during MAP
...
The MAP operation for a CPU address mirror VMA does not require ufence
association because such mappings are not GPU-synchronized and do not
participate in GPU job completion signaling.
Remove the unnecessary ufence addition for this case to avoid -EBUSY
failure in check_ufence of unbind ops.
Cc: Matthew Brost <matthew.brost@intel.com >
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com >
Reviewed-by: Matthew Brost <matthew.brost@intel.com >
Link: https://patch.msgid.link/20251125075628.1182481-6-himal.prasad.ghimiray@intel.com
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com >
2025-11-26 15:42:33 +05:30
Himal Prasad Ghimiray
dd62fe512d
drm/xe/svm: Enable UNMAP for VMA merging operations
...
ALLOW UNMAP of VMAs associated with SVM mappings when the MAP operation
is intended to merge adjacent CPU_ADDR_MIRROR VMAs.
v2
- Remove mapping exist check in garbage collector
Cc: Matthew Brost <matthew.brost@intel.com >
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com >
Reviewed-by: Matthew Brost <matthew.brost@intel.com >
Link: https://patch.msgid.link/20251125075628.1182481-5-himal.prasad.ghimiray@intel.com
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com >
2025-11-26 15:42:33 +05:30
Himal Prasad Ghimiray
0ae006dc48
drm/xe/svm: Extend MAP range to reduce vma fragmentation
...
When DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR is set during VM_BIND_OP_MAP,
the mapping logic now checks adjacent cpu_addr_mirror VMAs with default
attributes and expands the mapping range accordingly. This ensures that
bo_unmap operations ideally target the same area and helps reduce
fragmentation by coalescing nearby compatible VMAs into a single mapping.
Cc: Matthew Brost <matthew.brost@intel.com >
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com >
Reviewed-by: Matthew Brost <matthew.brost@intel.com >
Link: https://patch.msgid.link/20251125075628.1182481-4-himal.prasad.ghimiray@intel.com
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com >
2025-11-26 15:42:33 +05:30
Himal Prasad Ghimiray
4a938d3886
drm/xe: Merge adjacent default-attribute VMAs during garbage collection
...
While restoring default memory attributes for VMAs during garbage
collection, extend the target range by checking neighboring VMAs. If
adjacent VMAs are CPU-address-mirrored and have default attributes,
include them in the mergeable range to reduce fragmentation and improve
VMA reuse.
v2
-Rebase
Cc: Matthew Brost <matthew.brost@intel.com >
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com >
Reviewed-by: Matthew Brost <matthew.brost@intel.com >
Link: https://patch.msgid.link/20251125075628.1182481-3-himal.prasad.ghimiray@intel.com
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com >
2025-11-26 15:42:33 +05:30
Himal Prasad Ghimiray
5b12958b1f
drm/xe: Add helper to extend CPU-mirrored VMA range for merge
...
Introduce xe_vm_find_cpu_addr_mirror_vma_range(), which computes an
extended range around a given range by including adjacent VMAs that are
CPU-address-mirrored and have default memory attributes. This helper is
useful for determining mergeable range without performing the actual merge.
v2
- Add assert
- Move unmap check to this patch
v3
- Decrease offset to check by SZ_4K to avoid wrong vma return in fast
lookup path
v4
- *start should be >= SZ_4K (Matt)
Cc: Matthew Brost <matthew.brost@intel.com >
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com >
Reviewed-by: Matthew Brost <matthew.brost@intel.com >
Link: https://patch.msgid.link/20251125075628.1182481-2-himal.prasad.ghimiray@intel.com
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com >
2025-11-26 15:42:33 +05:30
Tomasz Lis
07cf4b864f
drm/xe: Protect against unset LRC when pausing submissions
...
While pausing submissions, it is possible to encouner an exec queue
which is during creation, and therefore doesn't have a valid xe_lrc
struct reference.
Protect agains such situation, by checking for NULL before access.
Reviewed-by: Matthew Brost <matthew.brost@intel.com >
Fixes: c25c1010df ("drm/xe/vf: Replay GuC submission state on pause / unpause")
Signed-off-by: Tomasz Lis <tomasz.lis@intel.com >
Signed-off-by: Matthew Brost <matthew.brost@intel.com >
Link: https://patch.msgid.link/20251124222853.1900800-1-tomasz.lis@intel.com
2025-11-25 10:29:13 -08:00
Matthew Brost
00937fe192
drm/xe/vf: Start re-emission from first unsignaled job during VF migration
...
The LRC software ring tail is reset to the first unsignaled pending
job's head.
Fix the re-emission logic to begin submitting from the first unsignaled
job detected, rather than scanning all pending jobs, which can cause
imbalance.
v2:
- Include missing local changes
v3:
- s/skip_replay/restore_replay (Tomasz)
Fixes: c25c1010df ("drm/xe/vf: Replay GuC submission state on pause / unpause")
Signed-off-by: Matthew Brost <matthew.brost@intel.com >
Reviewed-by: Tomasz Lis <tomasz.lis@intel.com >
Link: https://patch.msgid.link/20251121152750.240557-1-matthew.brost@intel.com
2025-11-25 10:19:52 -08:00
Lukasz Laguna
2e02254ef5
drm/xe/pf: Handle MERT catastrophic errors
...
The MERT block triggers an interrupt when a catastrophic error occurs.
Update the interrupt handler to read the MERT catastrophic error type
and log appropriate debug message.
Signed-off-by: Lukasz Laguna <lukasz.laguna@intel.com >
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com >
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com >
Link: https://patch.msgid.link/20251124190237.20503-5-lukasz.laguna@intel.com
2025-11-25 17:45:28 +01:00
Lukasz Laguna
1fc3096015
drm/xe/pf: Add TLB invalidation support for MERT
...
Add support for triggering and handling MERT TLB invalidation. After
LMTT updates, the MERT TLB invalidation is initiated to ensure memory
translations remain coherent.
Completion of the invalidation is signaled via MERT interrupt (bit 13 in
the GFX master interrupt register). Detect and handle this interrupt to
properly synchronize the invalidation flow.
Signed-off-by: Lukasz Laguna <lukasz.laguna@intel.com >
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com >
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com >
Link: https://patch.msgid.link/20251124190237.20503-4-lukasz.laguna@intel.com
2025-11-25 17:45:25 +01:00
Lukasz Laguna
0e72241a53
drm/xe/pf: Configure LMTT in MERT
...
On platforms with standalone MERT, the PF driver needs to program LMTT
in MERT's LMEM_CFG register.
Signed-off-by: Lukasz Laguna <lukasz.laguna@intel.com >
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com >
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com >
Link: https://patch.msgid.link/20251124190237.20503-3-lukasz.laguna@intel.com
2025-11-25 17:45:23 +01:00
Lukasz Laguna
79cb005c71
drm/xe: Add device flag to indicate standalone MERT
...
The MERT subsystem manages memory accesses between host and device. On
the Crescent Island platform, it requires direct management by the
driver.
Introduce a device flag and corresponding helpers to identify platforms
with standalone MERT, enabling proper initialization and handling.
Signed-off-by: Lukasz Laguna <lukasz.laguna@intel.com >
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com >
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com >
Link: https://patch.msgid.link/20251124190237.20503-2-lukasz.laguna@intel.com
2025-11-25 17:45:22 +01:00
Zhanjun Dong
69ef30d6c9
drm/xe/uc: Change assertion to error on huc authentication failure
...
The fault injection test can cause the xe_huc_auth function to fail.
This is an intentional failure, so in this scenario we don't want to
throw an assert and taint the kernel, because that will impact CI
execution.
Signed-off-by: Zhanjun Dong <zhanjun.dong@intel.com >
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com >
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com >
Link: https://patch.msgid.link/20251027214212.2856903-1-zhanjun.dong@intel.com
2025-11-24 10:50:07 -08:00
Zhanjun Dong
f4c8298cf5
drm/xe/guc: Cleanup GuC log buffer macros and helpers
...
Cleanup GuC log buffer macros and helpers, add Xe style macro prefix.
Update buffer type values to align with the GuC specification
Update buffer offset calculation.
Remove helper functions, replaced with macros.
Signed-off-by: Zhanjun Dong <zhanjun.dong@intel.com >
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com >
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com >
Link: https://patch.msgid.link/20251105233143.1168759-1-zhanjun.dong@intel.com
2025-11-24 10:50:07 -08:00
Michal Wajdeczko
5a062505aa
drm/xe/pf: Fix .bulk_profile/sched_priority description
...
The .bulk_profile/sched_priority file is always write-only, unlike
the profile/sched_priority files which can be either read-write or
read-only (in case of PF or VFs respectively).
Fixes: 6b514ed2d9 ("drm/xe/pf: Add documentation for sriov_admin attributes")
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com >
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com >
Link: https://patch.msgid.link/20251115152659.10853-1-michal.wajdeczko@intel.com
2025-11-24 18:58:45 +01:00
Michal Wajdeczko
0f4435a1f4
drm/xe/pf: Use div_u64 when calculating GGTT profile
...
This will fix the following error seen on some 32-bit config:
"ERROR: modpost: "__udivdi3" [drivers/gpu/drm/xe/xe.ko] undefined!"
Reported-by: kernel test robot <lkp@intel.com >
Closes: https://lore.kernel.org/oe-kbuild-all/202511150929.3vUi6PEJ-lkp@intel.com/
Fixes: e448372e8a ("drm/xe/pf: Use migration-friendly GGTT auto-provisioning")
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com >
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com >
Link: https://patch.msgid.link/20251115151323.10828-1-michal.wajdeczko@intel.com
2025-11-24 18:53:45 +01:00
Harish Chegondi
96b93ac214
drm/xe: Fix conversion from clock ticks to milliseconds
...
When tick counts are large and multiplication by MSEC_PER_SEC is larger
than 64 bits, the conversion from clock ticks to milliseconds can go bad.
Use mul_u64_u32_div() instead.
Cc: Ashutosh Dixit <ashutosh.dixit@intel.com >
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com >
Suggested-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com >
Fixes: 49cc215aad ("drm/xe: Add xe_gt_clock_interval_to_ms helper")
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com >
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com >
Link: https://patch.msgid.link/1562f1b62d5be3fbaee100f09107f3cc49e40dd1.1763408584.git.harish.chegondi@intel.com
2025-11-21 15:19:03 -08:00
Lucas De Marchi
ea944d57ea
drm/xe/guc_ct: Cleanup ifdef'ry
...
Better split CONFIG_DRM_XE_DEBUG and CONFIG_DRM_XE_DEBUG_GUC optional
parts from the main code, creating smaller ct_dead_* and fast_req_*
interfaces.
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com >
Link: https://patch.msgid.link/20251119152157.1675188-2-lucas.demarchi@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com >
2025-11-21 09:20:01 -08:00
Lucas De Marchi
64fdf496a6
drm/xe/guc: Fix stack_depot usage
...
Add missing stack_depot_init() call when CONFIG_DRM_XE_DEBUG_GUC is
enabled to fix the following call stack:
[] BUG: kernel NULL pointer dereference, address: 0000000000000000
[] Workqueue: drm_sched_run_job_work [gpu_sched]
[] RIP: 0010:stack_depot_save_flags+0x172/0x870
[] Call Trace:
[] <TASK>
[] fast_req_track+0x58/0xb0 [xe]
Fixes: 16b7e65d29 ("drm/xe/guc: Track FAST_REQ H2Gs to report where errors came from")
Tested-by: Sagar Ghuge <sagar.ghuge@intel.com >
Cc: stable@vger.kernel.org # v6.17+
Reviewed-by: Stuart Summers <stuart.summers@intel.com >
Link: https://patch.msgid.link/20251118-fix-debug-guc-v1-1-9f780c6bedf8@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com >
2025-11-21 09:19:39 -08:00
Shuicheng Lin
2e4ad5b066
drm/xe/guc: Fix resource leak in xe_guc_ct_init_noalloc()
...
xe_guc_ct_init_noalloc() allocates the CT workqueue and other helpers
before it tries to initialize ct->lock. If drmm_mutex_init() fails
we currently bail out without releasing those resources because the
guc_ct_fini() hasn’t been registered yet.
Since destroy_workqueue() in guc_ct_fini() may flush the workqueue, which
in turn can take the ct lock, the initialization sequence is restructured
to first initialize the ct->lock, then set up all CT state, and finally
register guc_ct_fini().
v2: guc_ct_fini() does take ct lock. (Matt)
v3: move primelockdep() together with drmm_mutex_init(). (Lucas)
Fixes: dd08ebf6c3 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
Cc: Lucas De Marchi <lucas.demarchi@intel.com >
Cc: Matthew Brost <matthew.brost@intel.com >
Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com >
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com >
Link: https://patch.msgid.link/20251110184522.1581001-2-shuicheng.lin@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com >
2025-11-21 08:08:24 -08:00
Mika Kuoppala
62519b77ae
drm/xe: Fix memory leak when handling pagefault vma
...
When the pagefault handling code was moved to a new file, an extra
drm_exec_init() was added to the VMA path. This call is unnecessary because
xe_validation_ctx_init() already performs a drm_exec_init(), resulting in a
memory leak reported by kmemleak.
Remove the redundant drm_exec_init() from the VMA pagefault handling code.
Fixes: fb544b8445 ("drm/xe: Implement xe_pagefault_queue_work")
Cc: Matthew Brost <matthew.brost@intel.com >
Cc: Stuart Summers <stuart.summers@intel.com >
Cc: Lucas De Marchi <lucas.demarchi@intel.com >
Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com >
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com >
Cc: Sumit Semwal <sumit.semwal@linaro.org >
Cc: "Christian König" <christian.koenig@amd.com >
Cc: intel-xe@lists.freedesktop.org
Cc: linux-media@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org
Cc: linaro-mm-sig@lists.linaro.org
Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com >
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com >
Reviewed-by: Matthew Brost <matthew.brost@intel.com >
Signed-off-by: Matthew Brost <matthew.brost@intel.com >
Link: https://patch.msgid.link/20251120161435.3674556-1-mika.kuoppala@linux.intel.com
2025-11-21 07:18:16 -08:00
Sanjay Yadav
28aeaed130
drm/xe/oa: Fix potential UAF in xe_oa_add_config_ioctl()
...
In xe_oa_add_config_ioctl(), we accessed oa_config->id after dropping
metrics_lock. Since this lock protects the lifetime of oa_config, an
attacker could guess the id and call xe_oa_remove_config_ioctl() with
perfect timing, freeing oa_config before we dereference it, leading to
a potential use-after-free.
Fix this by caching the id in a local variable while holding the lock.
v2: (Matt A)
- Dropped mutex_unlock(&oa->metrics_lock) ordering change from
xe_oa_remove_config_ioctl()
Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6614
Fixes: cdf02fe1a9 ("drm/xe/oa/uapi: Add/remove OA config perf ops")
Cc: <stable@vger.kernel.org > # v6.11+
Suggested-by: Matthew Auld <matthew.auld@intel.com >
Signed-off-by: Sanjay Yadav <sanjay.kumar.yadav@intel.com >
Reviewed-by: Matthew Auld <matthew.auld@intel.com >
Signed-off-by: Matthew Auld <matthew.auld@intel.com >
Link: https://patch.msgid.link/20251118114859.3379952-2-sanjay.kumar.yadav@intel.com
2025-11-20 11:27:09 +00:00
Matt Roper
423fb66fac
drm/xe/debugfs: Use scope-based runtime PM
...
Switch the debugfs code to use scope-based runtime PM where possible,
for consistency with other parts of the driver.
v2:
- Drop unnecessary 'ret' variables. (Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-56-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
f50c11ba35
drm/xe/sysfs: Use scope-based runtime power management
...
Switch sysfs to use scope-based runtime power management to slightly
simplify the code.
v2:
- Drop unnecessary local variables. (Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-55-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
3a344ddce2
drm/xe/tests: Use scope-based runtime PM
...
Use scope-based handling of runtime PM in the kunit tests for
consistency with other parts of the driver.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-54-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
fcee6854e6
drm/xe/sriov: Use scope-based runtime PM
...
Use scope-based runtime power management in the SRIOV code for
consistency with other parts of the driver.
v2:
- Drop unnecessary 'ret' variables. (Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-53-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
008f3fcf31
drm/xe/hwmon: Use scope-based runtime PM
...
Use scope-based runtime power management in the hwmon code for
consistency with other parts of the driver.
v2:
- Drop unnecessary 'ret' variables. (Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-52-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
8a579f4b24
drm/xe/ggtt: Use scope-based runtime pm
...
Switch the GGTT code to scope-based runtime PM for consistency with
other parts of the driver.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-51-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
faa4b73bf7
drm/xe/bo: Use scope-based runtime PM
...
Use scope-based runtime power management in the BO code for consistency
with other parts of the driver.
v2:
- Drop unnecessary 'ret' variable. (Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-50-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
60a4661d12
drm/xe/vram: Use scope-based forcewake
...
Switch VRAM code to use scope-based forcewake for consistency with other
parts of the driver.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-49-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
f875dead3e
drm/xe/reg_sr: Use scope-based forcewake
...
Use scope-based forcewake to slightly simplify the reg_sr code.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-48-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
667fc27e81
drm/xe/query: Use scope-based forcewake
...
Use scope-based forcewake handling for consistency with other parts of
the driver.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-47-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
175b9aaba3
drm/xe/huc: Use scope-based forcewake
...
Use scope-based forcewake in the HuC code for a small simplification and
consistency with other parts of the driver.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-46-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
bedad003e8
drm/xe/gt_debugfs: Use scope-based cleanup
...
Use scope-based cleanup for forcewake and runtime PM to simplify the
debugfs code slightly.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-45-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
062a6b83d5
drm/xe/drm_client: Use scope-based cleanup
...
Use scope-based cleanup for forcewake and runtime PM.
v2:
- Use xe_force_wake_release_only rather than a custom one-off class for
"any engine" forcewake. (Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-44-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:58 -08:00
Matt Roper
1fe7ea3287
drm/xe: Return forcewake reference type from force_wake_get_any_engine()
...
Adjust the signature of force_wake_get_any_engine() such that it returns
a 'struct xe_force_wake_ref' rather than a boolean success/failure.
Failure cases are now recognized by inspecting the hardware engine
returned by reference; a NULL hwe indicates that no engine's forcewake
could be obtained.
These changes will make it cleaner and easier to incorporate scope-based
cleanup in force_wake_get_any_engine()'s caller in a future patch.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-43-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
b11f88699b
drm/xe/display: Use scoped-cleanup
...
Eliminate some goto-based cleanup by utilizing scoped cleanup helpers.
v2:
- Eliminate unnecessary 'ret' variable in intel_hdcp_gsc_check_status()
(Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-42-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
7fc616a309
drm/xe/devcoredump: Use scope-based cleanup
...
Use scope-based cleanup for forcewake and runtime PM in the devcoredump
code. This eliminates some goto-based error handling and slightly
simplifies other functions.
v2:
- Move the forcewake acquisition slightly higher in
devcoredump_snapshot() so that we maintain an easy-to-understand LIFO
cleanup order. (Gustavo)
Cc: Gustavo Sousa <gustavo.sousa@intel.com >
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-41-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
89bba8fe92
drm/xe/device: Use scope-based cleanup
...
Convert device code to use scope-based forcewake and runtime PM.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-40-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
be675564cc
drm/xe/gsc: Use scope-based cleanup
...
Use scope-based cleanup for forcewake and runtime PM to eliminate some
goto-based error handling and simplify other functions.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-39-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
62a35753f5
drm/xe/pxp: Use scope-based cleanup
...
Use scope-based cleanup for forcewake and runtime pm. This allows us to
eliminate some goto-based error handling and simplify other functions.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-38-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
ba2562a391
drm/xe/pat: Use scope-based forcewake
...
Use scope-based cleanup for forcewake in the PAT code to slightly
simplify the code.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-37-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
008db7d4e1
drm/xe/mocs: Use scope-based cleanup
...
Using scope-based cleanup for runtime PM and forcewake in the MOCS code
allows us to eliminate some goto-based error handling and simplify some
other functions.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-36-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
e9bc4162bf
drm/xe/guc_pc: Use scope-based cleanup
...
Use scope-based cleanup for forcewake and runtime PM in the GuC PC code.
This allows us to eliminate to goto-based cleanup and simplifies some
other functions.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-35-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
3947e482b5
drm/xe/guc: Use scope-based cleanup
...
Use scope-based cleanup for forcewake and runtime PM.
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-34-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
917714f278
drm/xe/gt_idle: Use scope-based cleanup
...
Use scope-based cleanup for runtime PM and forcewake in the GT idle
code.
v2:
- Use scoped_guard() over guard() in idle_status_show() and
idle_residency_ms_show(). (Gustavo)
- Eliminate unnecessary 'ret' local variable in name_show().
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-33-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
83d2ea17d5
drm/xe/gt: Use scope-based cleanup
...
Using scope-based cleanup for forcewake and runtime PM allows us to
reduce or eliminate some of the goto-based error handling and simplify
several functions.
v2:
- Drop changes to do_gt_restart(). This function still has goto-based
logic, making scope-based cleanup unsafe for now. (Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-32-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
59e7528dbf
drm/xe/pm: Add scope-based cleanup helper for runtime PM
...
Add a scope-based helpers for runtime PM that may be used to simplify
cleanup logic and potentially avoid goto-based cleanup.
For example, using
guard(xe_pm_runtime)(xe);
will get runtime PM and cause a corresponding put to occur automatically
when the current scope is exited. 'xe_pm_runtime_noresume' can be used
as a guard replacement for the corresponding 'noresume' variant.
There's also an xe_pm_runtime_ioctl conditional guard that can be used
as a replacement for xe_runtime_ioctl():
ACQUIRE(xe_pm_runtime_ioctl, pm)(xe);
if ((ret = ACQUIRE_ERR(xe_pm_runtime_ioctl, &pm)) < 0)
/* failed */
In a few rare cases (such as gt_reset_worker()) we need to ensure that
runtime PM is dropped when the function is exited by any means
(including error paths), but the function does not need to acquire
runtime PM because that has already been done earlier by a different
function. For these special cases, an 'xe_pm_runtime_release_only'
guard can be used to handle the release without doing an acquisition.
These guards will be used in future patches to eliminate some of our
goto-based cleanup.
v2:
- Specify success condition for xe_pm runtime_ioctl as _RET >= 0 so
that positive values will be properly identified as success and
trigger destructor cleanup properly.
v3:
- Add comments to the kerneldoc for the existing 'get' functions
indicating that scope-based handling should be preferred where
possible. (Gustavo)
Cc: Gustavo Sousa <gustavo.sousa@intel.com >
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com >
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-31-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:57 -08:00
Matt Roper
074edfbdfb
drm/xe/forcewake: Add scope-based cleanup for forcewake
...
Since forcewake uses a reference counting get/put model, there are many
places where we need to be careful to drop the forcewake reference when
bailing out of a function early on an error path. Add scope-based
cleanup options that can be used in place of explicit get/put to help
prevent mistakes in this area.
Examples:
CLASS(xe_force_wake, fw_ref)(gt_to_fw(gt), XE_FW_GT);
Obtain forcewake on the XE_FW_GT domain and hold it until the
end of the current block. The wakeref will be dropped
automatically when the current scope is exited by any means
(return, break, reaching the end of the block, etc.).
xe_with_force_wake(fw_ref, gt_to_fw(ss->gt), XE_FORCEWAKE_ALL) {
...
}
Hold all forcewake domains for the following block. As with the
CLASS usage, forcewake will be dropped automatically when the
block is exited by any means.
Use of these cleanup helpers should allow us to remove some ugly
goto-based error handling and help avoid mistakes in functions with lots
of early error exits.
An 'xe_force_wake_release_only' class is also added for cases where a
forcewake reference is passed in from another function and the current
function is responsible for releasing it in every flow and error path.
v2:
- Create a separate constructor that just wraps xe_force_wake_get for
use in the class. This eliminates the need to update the signature
of xe_force_wake_get(). (Michal)
v3:
- Wrap xe_with_force_wake's 'done' marker in __UNIQUE_ID. (Gustavo)
- Add a note to xe_force_wake_get()'s kerneldoc explaining that
scope-based cleanup is preferred when possible. (Gustavo)
- Add an xe_force_wake_release_only class. (Gustavo)
v4:
- Add NULL check on fw in release_only variant. (Gustavo)
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com >
Cc: Gustavo Sousa <gustavo.sousa@intel.com >
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com >
Link: https://patch.msgid.link/20251118164338.3572146-30-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com >
2025-11-19 11:58:56 -08:00