mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
Merge tag 'drm-xe-fixes-2025-11-27' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes
Driver Changes: - Fix resource leak in xe_guc_ct_init_noalloc()'s error path (Shuicheng Lin) - Fix stack_depot usage without STACKDEPOT_ALWAYS_INIT (Lucas) - Fix overflow in conversion from clock tics to msec (Harish Chegondi) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://patch.msgid.link/7ejiqjgthpqybg5svmkind2pszk4fqadxuq7rngchaaw76iept@5pn6sngqj6lk
This commit is contained in:
@@ -93,11 +93,6 @@ int xe_gt_clock_init(struct xe_gt *gt)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 div_u64_roundup(u64 n, u32 d)
|
|
||||||
{
|
|
||||||
return div_u64(n + d - 1, d);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xe_gt_clock_interval_to_ms - Convert sampled GT clock ticks to msec
|
* xe_gt_clock_interval_to_ms - Convert sampled GT clock ticks to msec
|
||||||
*
|
*
|
||||||
@@ -108,5 +103,5 @@ static u64 div_u64_roundup(u64 n, u32 d)
|
|||||||
*/
|
*/
|
||||||
u64 xe_gt_clock_interval_to_ms(struct xe_gt *gt, u64 count)
|
u64 xe_gt_clock_interval_to_ms(struct xe_gt *gt, u64 count)
|
||||||
{
|
{
|
||||||
return div_u64_roundup(count * MSEC_PER_SEC, gt->info.reference_clock);
|
return mul_u64_u32_div(count, MSEC_PER_SEC, gt->info.reference_clock);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -226,6 +226,12 @@ int xe_guc_ct_init_noalloc(struct xe_guc_ct *ct)
|
|||||||
|
|
||||||
xe_gt_assert(gt, !(guc_ct_size() % PAGE_SIZE));
|
xe_gt_assert(gt, !(guc_ct_size() % PAGE_SIZE));
|
||||||
|
|
||||||
|
err = drmm_mutex_init(&xe->drm, &ct->lock);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
primelockdep(ct);
|
||||||
|
|
||||||
ct->g2h_wq = alloc_ordered_workqueue("xe-g2h-wq", WQ_MEM_RECLAIM);
|
ct->g2h_wq = alloc_ordered_workqueue("xe-g2h-wq", WQ_MEM_RECLAIM);
|
||||||
if (!ct->g2h_wq)
|
if (!ct->g2h_wq)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -237,16 +243,13 @@ int xe_guc_ct_init_noalloc(struct xe_guc_ct *ct)
|
|||||||
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
|
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
|
||||||
spin_lock_init(&ct->dead.lock);
|
spin_lock_init(&ct->dead.lock);
|
||||||
INIT_WORK(&ct->dead.worker, ct_dead_worker_func);
|
INIT_WORK(&ct->dead.worker, ct_dead_worker_func);
|
||||||
|
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG_GUC)
|
||||||
|
stack_depot_init();
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
init_waitqueue_head(&ct->wq);
|
init_waitqueue_head(&ct->wq);
|
||||||
init_waitqueue_head(&ct->g2h_fence_wq);
|
init_waitqueue_head(&ct->g2h_fence_wq);
|
||||||
|
|
||||||
err = drmm_mutex_init(&xe->drm, &ct->lock);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
primelockdep(ct);
|
|
||||||
|
|
||||||
err = drmm_add_action_or_reset(&xe->drm, guc_ct_fini, ct);
|
err = drmm_add_action_or_reset(&xe->drm, guc_ct_fini, ct);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|||||||
Reference in New Issue
Block a user