mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 04:56:13 +02:00
drm/panthor: Evict groups before VM termination
Ensure all related groups are evicted and suspended before VM
destruction takes place.
This fixes an issue where panthor_vm_destroy() destroys and unmaps the
heap context while there are still on slot groups using this.
The FW will do a write out to the heap context when a CSG (group) is
suspended, so a premature unmap of the heap context will cause a
GPU page fault.
This page fault is quite harmless, and do not affect the continued
operation of the GPU.
Fixes: 647810ec24 ("drm/panthor: Add the MMU/VM logical block")
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Ketil Johnsen <ketil.johnsen@arm.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Reviewed-by: Steven Price <steven.price@arm.com>
Link: https://patch.msgid.link/20251219093546.1227697-1-ketil.johnsen@arm.com
Co-developed-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
This commit is contained in:
parent
332070795b
commit
565ed40b5f
|
|
@ -1504,6 +1504,10 @@ static void panthor_vm_destroy(struct panthor_vm *vm)
|
|||
|
||||
vm->destroyed = true;
|
||||
|
||||
/* Tell scheduler to stop all GPU work related to this VM */
|
||||
if (refcount_read(&vm->as.active_cnt) > 0)
|
||||
panthor_sched_prepare_for_vm_destruction(vm->ptdev);
|
||||
|
||||
mutex_lock(&vm->heaps.lock);
|
||||
panthor_heap_pool_destroy(vm->heaps.pool);
|
||||
vm->heaps.pool = NULL;
|
||||
|
|
|
|||
|
|
@ -2786,6 +2786,20 @@ void panthor_sched_report_mmu_fault(struct panthor_device *ptdev)
|
|||
sched_queue_delayed_work(ptdev->scheduler, tick, 0);
|
||||
}
|
||||
|
||||
void panthor_sched_prepare_for_vm_destruction(struct panthor_device *ptdev)
|
||||
{
|
||||
/* FW can write out internal state, like the heap context, during CSG
|
||||
* suspend. It is therefore important that the scheduler has fully
|
||||
* evicted any pending and related groups before VM destruction can
|
||||
* safely continue. Failure to do so can lead to GPU page faults.
|
||||
* A controlled termination of a Panthor instance involves destroying
|
||||
* the group(s) before the VM. This means any relevant group eviction
|
||||
* has already been initiated by this point, and we just need to
|
||||
* ensure that any pending tick_work() has been completed.
|
||||
*/
|
||||
flush_work(&ptdev->scheduler->tick_work.work);
|
||||
}
|
||||
|
||||
void panthor_sched_resume(struct panthor_device *ptdev)
|
||||
{
|
||||
/* Force a tick to re-evaluate after a resume. */
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ void panthor_sched_suspend(struct panthor_device *ptdev);
|
|||
void panthor_sched_resume(struct panthor_device *ptdev);
|
||||
|
||||
void panthor_sched_report_mmu_fault(struct panthor_device *ptdev);
|
||||
void panthor_sched_prepare_for_vm_destruction(struct panthor_device *ptdev);
|
||||
void panthor_sched_report_fw_events(struct panthor_device *ptdev, u32 events);
|
||||
|
||||
void panthor_fdinfo_gather_group_samples(struct panthor_file *pfile);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user