Skip to content

Commit

Permalink
drm: xlnx: drv: add gem_free_object_unlocked callback xlnx_drm_driver
Browse files Browse the repository at this point in the history
When reboot or shutdown system, the function drm_mm_takedown will check
if there is any gem_obj->vma_node.vm_node in mm->head_node.node_list.
And if so, it will report a warning as below:

Memory manager not clean during takedown.
WARNING: CPU: 3 PID: 1 at drivers/gpu/drm/drm_mm.c:998 drm_mm_takedown+0x30/0x40
Modules linked in:
CPU: 3 PID: 1 Comm: systemd-shutdow Not tainted 5.10.2-yoctodev-standard+ torvalds#93
Hardware name: ZynqMP ZCU102 Rev1.0 (DT)
pstate: 60000005 (nZCv daif -PAN -UAO -TCO BTYPE=--)
pc : drm_mm_takedown+0x30/0x40
lr : drm_mm_takedown+0x30/0x40
sp : ffffffc011ddbb10
x29: ffffffc011ddbb10 x28: ffffff8800850000
x27: 0000000000000000 x26: ffffffc0110c1060
x25: dead000000000100 x24: dead000000000122
x23: ffffffc0110bd5f8 x22: ffffff8803bf0820
x21: ffffff8803bf0800 x20: ffffff8803be2c00
x19: ffffff8803b44980 x18: 000000000000000e
x17: 0000000000000001 x16: 0000000000000019
x15: 0000000000000004 x14: 000000000000004c
x13: 0000000000000000 x12: ffffff88004633d8
x11: ffffffc0116c8430 x10: ffffffc0116b03f0
x9 : ffffffc0100a64d8 x8 : 0000000000017fe8
x7 : c0000000ffffefff x6 : 0000000000000001
x5 : 0000000000000000 x4 : 0000000000000000
x3 : 00000000ffffffff x2 : 0000000000000001
x1 : 0000000000000000 x0 : 0000000000000000
Call trace:
 drm_mm_takedown+0x30/0x40
 drm_vma_offset_manager_destroy+0x1c/0x28
 drm_gem_init_release+0x1c/0x28
 drm_managed_release+0xa0/0x100
 drm_dev_release+0x38/0x50
 drm_dev_put+0x5c/0x78
 xlnx_unbind+0x68/0x78
 take_down_master.part.0+0x28/0x48
 component_master_del+0xa8/0xb0
 xlnx_platform_shutdown+0x24/0x30
 platform_drv_shutdown+0x28/0x38
 device_shutdown+0x164/0x250
 kernel_restart_prepare+0x40/0x50
 kernel_restart+0x20/0x70
 __do_sys_reboot+0x104/0x230
 __arm64_sys_reboot+0x2c/0x38
 el0_svc_common.constprop.0+0xa4/0x1e8
 do_el0_svc+0x78/0x98
 el0_svc+0x20/0x30
 el0_sync_handler+0xb0/0xb8
 el0_sync+0x174/0x180
---[ end trace 58a1f24e09bc49c3 ]---

This is because that when gem_free_object_unlocked callback is NULL in
struct drm_driver, the gem_objects which allocated by drm_gem_cma_create
won't be freed by drm_gem_object_free anymore. So let's make the
function drm_gem_cma_free_object to be the gem_free_object_unlocked
callback.

Signed-off-by: Quanyang Wang <[email protected]>
Reviewed-by: Hyun Kwon <[email protected]>
State: pending
  • Loading branch information
wqyoung authored and Michal Simek committed Mar 22, 2021
1 parent 68be99b commit 515296a
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions drivers/gpu/drm/xlnx/xlnx_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ static struct drm_driver xlnx_drm_driver = {
.gem_prime_vunmap = drm_gem_cma_prime_vunmap,
.gem_prime_mmap = drm_gem_cma_prime_mmap,
.gem_vm_ops = &drm_gem_cma_vm_ops,
.gem_free_object_unlocked = drm_gem_cma_free_object,
.dumb_create = xlnx_gem_cma_dumb_create,
.dumb_destroy = drm_gem_dumb_destroy,

Expand Down

0 comments on commit 515296a

Please sign in to comment.