linux-yocto/drivers/gpu/drm/imagination
Brendan King b04ce1e718
drm/imagination: Break an object reference loop
When remaining resources are being cleaned up on driver close,
outstanding VM mappings may result in resources being leaked, due
to an object reference loop, as shown below, with each object (or
set of objects) referencing the object below it:

    PVR GEM Object
    GPU scheduler "finished" fence
    GPU scheduler “scheduled” fence
    PVR driver “done” fence
    PVR Context
    PVR VM Context
    PVR VM Mappings
    PVR GEM Object

The reference that the PVR VM Context has on the VM mappings is a
soft one, in the sense that the freeing of outstanding VM mappings
is done as part of VM context destruction; no reference counts are
involved, as is the case for all the other references in the loop.

To break the reference loop during cleanup, free the outstanding
VM mappings before destroying the PVR Context associated with the
VM context.

Signed-off-by: Brendan King <brendan.king@imgtec.com>
Signed-off-by: Matt Coster <matt.coster@imgtec.com>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Cc: stable@vger.kernel.org
Link: https://patchwork.freedesktop.org/patch/msgid/8a25924f-1bb7-4d9a-a346-58e871dfb1d1@imgtec.com
2024-11-04 09:41:38 +00:00
..
Kconfig drm/imagination: Implement job submission and scheduling 2023-11-23 09:01:47 +01:00
Makefile kbuild: use $(src) instead of $(srctree)/$(src) for source directory 2024-05-10 04:34:52 +09:00
pvr_ccb.c drm/imagination: Implement free list and HWRT create and destroy ioctls 2023-11-23 09:01:46 +01:00
pvr_ccb.h drm/imagination: Implement firmware infrastructure and META FW support 2023-11-23 09:01:46 +01:00
pvr_cccb.c drm/imagination: Implement context creation/destruction ioctls 2023-11-23 09:01:46 +01:00
pvr_cccb.h drm/imagination: Numerous documentation fixes. 2023-11-28 18:56:03 +01:00
pvr_context.c drm/imagination: Break an object reference loop 2024-11-04 09:41:38 +00:00
pvr_context.h drm/imagination: Break an object reference loop 2024-11-04 09:41:38 +00:00
pvr_debugfs.c drm/imagination: Add firmware trace to debugfs 2023-11-23 09:01:47 +01:00
pvr_debugfs.h drm/imagination: Add firmware trace to debugfs 2023-11-23 09:01:47 +01:00
pvr_device_info.c drm/imagination: Fixed warning due to implicit cast to bool 2023-12-04 09:41:34 +01:00
pvr_device_info.h drm/imagination: Add GPU ID parsing and firmware loading 2023-11-23 09:01:46 +01:00
pvr_device.c drm/imagination: pvr_device_process_active_queues now static 2023-12-04 09:41:59 +01:00
pvr_device.h drm/imagination: Add a per-file PVR context list 2024-11-04 09:41:32 +00:00
pvr_drv.c drm/imagination: Add a per-file PVR context list 2024-11-04 09:41:32 +00:00
pvr_drv.h drm/imagination: Add GPU ID parsing and firmware loading 2023-11-23 09:01:46 +01:00
pvr_free_list.c drm/imagination: Remove unneeded semicolon 2023-11-28 13:55:44 +01:00
pvr_free_list.h drm/imagination: Implement free list and HWRT create and destroy ioctls 2023-11-23 09:01:46 +01:00
pvr_fw_info.h drm/imagination: Numerous documentation fixes. 2023-11-28 18:56:03 +01:00
pvr_fw_meta.c drm/imagination: Fixed missing header in pvr_fw_meta 2023-12-04 09:41:48 +01:00
pvr_fw_meta.h drm/imagination: Implement firmware infrastructure and META FW support 2023-11-23 09:01:46 +01:00
pvr_fw_mips.c drm/imagination: Implement MIPS firmware processor and MMU support 2023-11-23 09:01:46 +01:00
pvr_fw_mips.h drm/imagination: Ensure PVR_MIPS_PT_PAGE_COUNT is never zero 2024-04-29 12:31:28 +01:00
pvr_fw_startstop.c drm/imagination: Implement firmware infrastructure and META FW support 2023-11-23 09:01:46 +01:00
pvr_fw_startstop.h drm/imagination: Implement firmware infrastructure and META FW support 2023-11-23 09:01:46 +01:00
pvr_fw_trace.c drm/print: drop include debugfs.h and include where needed 2024-04-25 17:05:48 +03:00
pvr_fw_trace.h drm/imagination: Implement firmware infrastructure and META FW support 2023-11-23 09:01:46 +01:00
pvr_fw.c drm/imagination: Implement MIPS firmware processor and MMU support 2023-11-23 09:01:46 +01:00
pvr_fw.h drm/imagination: Numerous documentation fixes. 2023-11-28 18:56:03 +01:00
pvr_gem.c drm/imagination: Add GEM and VM related code 2023-11-23 09:01:46 +01:00
pvr_gem.h drm/imagination: Add GEM and VM related code 2023-11-23 09:01:46 +01:00
pvr_hwrt.c drm/imagination: Fixed oops when misusing ioctl CREATE_HWRT_DATASET 2023-12-15 14:04:08 +01:00
pvr_hwrt.h drm/imagination: Numerous documentation fixes. 2023-11-28 18:56:03 +01:00
pvr_job.c drm/exec: Pass in initial # of objects 2023-12-10 10:38:47 -08:00
pvr_job.h drm/imagination: Implement job submission and scheduling 2023-11-23 09:01:47 +01:00
pvr_mmu.c drm/imagination: Move dereference after NULL check in pvr_mmu_backing_page_init() 2023-12-08 10:25:24 +01:00
pvr_mmu.h drm/imagination: Add GEM and VM related code 2023-11-23 09:01:46 +01:00
pvr_params.c drm/imagination: Add firmware trace to debugfs 2023-11-23 09:01:47 +01:00
pvr_params.h drm/imagination: Add firmware trace to debugfs 2023-11-23 09:01:47 +01:00
pvr_power.c drm/imagination: Implement job submission and scheduling 2023-11-23 09:01:47 +01:00
pvr_power.h drm/imagination: Implement firmware infrastructure and META FW support 2023-11-23 09:01:46 +01:00
pvr_queue.c drm/scheduler: remove full_recover from drm_sched_start 2024-07-25 14:05:12 +02:00
pvr_queue.h drm/imagination: Numerous documentation fixes. 2023-11-28 18:56:03 +01:00
pvr_rogue_cr_defs_client.h drm/imagination: Add GPU register headers 2023-11-23 09:01:45 +01:00
pvr_rogue_cr_defs.h drm/imagination: Add GPU register headers 2023-11-23 09:01:45 +01:00
pvr_rogue_defs.h drm/imagination: Add GPU register headers 2023-11-23 09:01:45 +01:00
pvr_rogue_fwif_check.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif_client_check.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif_client.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif_common.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif_dev_info.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif_resetframework.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif_sf.h drm/imagination: Fix a couple of spelling mistakes in literal strings 2023-11-28 13:55:37 +01:00
pvr_rogue_fwif_shared_check.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif_shared.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif_stream.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_fwif.h drm/imagination: Add FWIF headers 2023-11-23 09:01:46 +01:00
pvr_rogue_heap_config.h drm/imagination: Add firmware and MMU related headers 2023-11-23 09:01:45 +01:00
pvr_rogue_meta.h drm/imagination: Add firmware and MMU related headers 2023-11-23 09:01:45 +01:00
pvr_rogue_mips_check.h drm/imagination: Add firmware and MMU related headers 2023-11-23 09:01:45 +01:00
pvr_rogue_mips.h drm/imagination: Add firmware and MMU related headers 2023-11-23 09:01:45 +01:00
pvr_rogue_mmu_defs.h drm/imagination: Add firmware and MMU related headers 2023-11-23 09:01:45 +01:00
pvr_stream_defs.c drm/imagination: Implement job submission and scheduling 2023-11-23 09:01:47 +01:00
pvr_stream_defs.h drm/imagination: Implement context creation/destruction ioctls 2023-11-23 09:01:46 +01:00
pvr_stream.c drm/imagination: Implement context creation/destruction ioctls 2023-11-23 09:01:46 +01:00
pvr_stream.h drm/imagination: Implement context creation/destruction ioctls 2023-11-23 09:01:46 +01:00
pvr_sync.c drm/imagination: Implement job submission and scheduling 2023-11-23 09:01:47 +01:00
pvr_sync.h drm/imagination: Implement job submission and scheduling 2023-11-23 09:01:47 +01:00
pvr_vm_mips.c The usual shower of singleton fixes and minor series all over MM, 2024-05-19 09:21:03 -07:00
pvr_vm_mips.h drm/imagination: Implement MIPS firmware processor and MMU support 2023-11-23 09:01:46 +01:00
pvr_vm.c drm/imagination: Break an object reference loop 2024-11-04 09:41:38 +00:00
pvr_vm.h drm/imagination: Break an object reference loop 2024-11-04 09:41:38 +00:00