mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 12:35:52 +02:00
Driver Changes:
- Update xe2 graphics name string (Matt Roper) - Fix a couple of guc submit races (Matt Auld) - Fix pat index usage in migrate (Matt Auld) - Ensure non-cached migrate pagetable bo mappings (Matt Auld) - Take a PM ref in the delayed snapshot capture worker (Matt Brost) -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRskUM7w1oG5rx2IZO4FpNVCsYGvwUCZ0iOGQAKCRC4FpNVCsYG vzSmAP9w9xMhtf4SmQFrCXctd7iGm6cGuBg9ZMbJ/CY5dt/awgEAk+wVFr2SvbXl wg1bGl8x4wPov3f6ro7tq2VO4Uaysg8= =1ZRO -----END PGP SIGNATURE----- Merge tag 'drm-xe-next-fixes-2024-11-28' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next Driver Changes: - Update xe2 graphics name string (Matt Roper) - Fix a couple of guc submit races (Matt Auld) - Fix pat index usage in migrate (Matt Auld) - Ensure non-cached migrate pagetable bo mappings (Matt Auld) - Take a PM ref in the delayed snapshot capture worker (Matt Brost) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/Z0iOjKwEGVo_DmgY@fedora
This commit is contained in:
commit
9794b89c50
|
|
@ -23,6 +23,7 @@
|
|||
#include "xe_guc_submit.h"
|
||||
#include "xe_hw_engine.h"
|
||||
#include "xe_module.h"
|
||||
#include "xe_pm.h"
|
||||
#include "xe_sched_job.h"
|
||||
#include "xe_vm.h"
|
||||
|
||||
|
|
@ -158,8 +159,11 @@ static void xe_devcoredump_deferred_snap_work(struct work_struct *work)
|
|||
{
|
||||
struct xe_devcoredump_snapshot *ss = container_of(work, typeof(*ss), work);
|
||||
struct xe_devcoredump *coredump = container_of(ss, typeof(*coredump), snapshot);
|
||||
struct xe_device *xe = coredump_to_xe(coredump);
|
||||
unsigned int fw_ref;
|
||||
|
||||
xe_pm_runtime_get(xe);
|
||||
|
||||
/* keep going if fw fails as we still want to save the memory and SW data */
|
||||
fw_ref = xe_force_wake_get(gt_to_fw(ss->gt), XE_FORCEWAKE_ALL);
|
||||
if (!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL))
|
||||
|
|
@ -168,6 +172,8 @@ static void xe_devcoredump_deferred_snap_work(struct work_struct *work)
|
|||
xe_guc_exec_queue_snapshot_capture_delayed(ss->ge);
|
||||
xe_force_wake_put(gt_to_fw(ss->gt), fw_ref);
|
||||
|
||||
xe_pm_runtime_put(xe);
|
||||
|
||||
/* Calculate devcoredump size */
|
||||
ss->read.size = __xe_devcoredump_read(NULL, INT_MAX, coredump);
|
||||
|
||||
|
|
|
|||
|
|
@ -769,17 +769,19 @@ static void disable_scheduling_deregister(struct xe_guc *guc,
|
|||
struct xe_exec_queue *q)
|
||||
{
|
||||
MAKE_SCHED_CONTEXT_ACTION(q, DISABLE);
|
||||
struct xe_device *xe = guc_to_xe(guc);
|
||||
int ret;
|
||||
|
||||
set_min_preemption_timeout(guc, q);
|
||||
smp_rmb();
|
||||
ret = wait_event_timeout(guc->ct.wq, !exec_queue_pending_enable(q) ||
|
||||
xe_guc_read_stopped(guc), HZ * 5);
|
||||
ret = wait_event_timeout(guc->ct.wq,
|
||||
(!exec_queue_pending_enable(q) &&
|
||||
!exec_queue_pending_disable(q)) ||
|
||||
xe_guc_read_stopped(guc),
|
||||
HZ * 5);
|
||||
if (!ret) {
|
||||
struct xe_gpu_scheduler *sched = &q->guc->sched;
|
||||
|
||||
drm_warn(&xe->drm, "Pending enable failed to respond");
|
||||
xe_gt_warn(q->gt, "Pending enable/disable failed to respond\n");
|
||||
xe_sched_submission_start(sched);
|
||||
xe_gt_reset_async(q->gt);
|
||||
xe_sched_tdr_queue_imm(sched);
|
||||
|
|
@ -1101,7 +1103,8 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
|
|||
* modifying state
|
||||
*/
|
||||
ret = wait_event_timeout(guc->ct.wq,
|
||||
!exec_queue_pending_enable(q) ||
|
||||
(!exec_queue_pending_enable(q) &&
|
||||
!exec_queue_pending_disable(q)) ||
|
||||
xe_guc_read_stopped(guc), HZ * 5);
|
||||
if (!ret || xe_guc_read_stopped(guc))
|
||||
goto trigger_reset;
|
||||
|
|
@ -1330,8 +1333,8 @@ static void __guc_exec_queue_process_msg_suspend(struct xe_sched_msg *msg)
|
|||
|
||||
if (guc_exec_queue_allowed_to_change_state(q) && !exec_queue_suspended(q) &&
|
||||
exec_queue_enabled(q)) {
|
||||
wait_event(guc->ct.wq, q->guc->resume_time != RESUME_PENDING ||
|
||||
xe_guc_read_stopped(guc));
|
||||
wait_event(guc->ct.wq, (q->guc->resume_time != RESUME_PENDING ||
|
||||
xe_guc_read_stopped(guc)) && !exec_queue_pending_disable(q));
|
||||
|
||||
if (!xe_guc_read_stopped(guc)) {
|
||||
s64 since_resume_ms =
|
||||
|
|
@ -1868,16 +1871,29 @@ static void handle_sched_done(struct xe_guc *guc, struct xe_exec_queue *q,
|
|||
xe_gt_assert(guc_to_gt(guc), runnable_state == 0);
|
||||
xe_gt_assert(guc_to_gt(guc), exec_queue_pending_disable(q));
|
||||
|
||||
clear_exec_queue_pending_disable(q);
|
||||
if (q->guc->suspend_pending) {
|
||||
suspend_fence_signal(q);
|
||||
clear_exec_queue_pending_disable(q);
|
||||
} else {
|
||||
if (exec_queue_banned(q) || check_timeout) {
|
||||
smp_wmb();
|
||||
wake_up_all(&guc->ct.wq);
|
||||
}
|
||||
if (!check_timeout)
|
||||
if (!check_timeout && exec_queue_destroyed(q)) {
|
||||
/*
|
||||
* Make sure to clear the pending_disable only
|
||||
* after sampling the destroyed state. We want
|
||||
* to ensure we don't trigger the unregister too
|
||||
* early with something intending to only
|
||||
* disable scheduling. The caller doing the
|
||||
* destroy must wait for an ongoing
|
||||
* pending_disable before marking as destroyed.
|
||||
*/
|
||||
clear_exec_queue_pending_disable(q);
|
||||
deregister_exec_queue(guc, q);
|
||||
} else {
|
||||
clear_exec_queue_pending_disable(q);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -209,7 +209,8 @@ static int xe_migrate_prepare_vm(struct xe_tile *tile, struct xe_migrate *m,
|
|||
num_entries * XE_PAGE_SIZE,
|
||||
ttm_bo_type_kernel,
|
||||
XE_BO_FLAG_VRAM_IF_DGFX(tile) |
|
||||
XE_BO_FLAG_PINNED);
|
||||
XE_BO_FLAG_PINNED |
|
||||
XE_BO_FLAG_PAGETABLE);
|
||||
if (IS_ERR(bo))
|
||||
return PTR_ERR(bo);
|
||||
|
||||
|
|
@ -1350,6 +1351,7 @@ __xe_migrate_update_pgtables(struct xe_migrate *m,
|
|||
|
||||
/* For sysmem PTE's, need to map them in our hole.. */
|
||||
if (!IS_DGFX(xe)) {
|
||||
u16 pat_index = xe->pat.idx[XE_CACHE_WB];
|
||||
u32 ptes, ofs;
|
||||
|
||||
ppgtt_ofs = NUM_KERNEL_PDE - 1;
|
||||
|
|
@ -1409,7 +1411,7 @@ __xe_migrate_update_pgtables(struct xe_migrate *m,
|
|||
pt_bo->update_index = current_update;
|
||||
|
||||
addr = vm->pt_ops->pte_encode_bo(pt_bo, 0,
|
||||
XE_CACHE_WB, 0);
|
||||
pat_index, 0);
|
||||
bb->cs[bb->len++] = lower_32_bits(addr);
|
||||
bb->cs[bb->len++] = upper_32_bits(addr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ static const struct xe_graphics_desc graphics_xelpg = {
|
|||
GENMASK(XE_HW_ENGINE_CCS3, XE_HW_ENGINE_CCS0)
|
||||
|
||||
static const struct xe_graphics_desc graphics_xe2 = {
|
||||
.name = "Xe2_LPG / Xe2_HPG",
|
||||
.name = "Xe2_LPG / Xe2_HPG / Xe3_LPG",
|
||||
|
||||
XE2_GFX_FEATURES,
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user