• xinhui pan's avatar
    drm/amdgpu: Fix a redundant kfree · 3d7248d7
    xinhui pan authored
    drm_dev_alloc() alloc *dev* and set managed.final_kfree to dev to free
    itself.
    Now from commit 5cdd68498918("drm/amdgpu: Embed drm_device into
    amdgpu_device (v3)") we alloc *adev* and ddev is just a member of it.
    So drm_dev_release try to free a wrong pointer then.
    
    Also driver's release trys to free adev, but drm_dev_release will
    access dev after call drvier's release.
    
    To fix it, remove driver's release and set managed.final_kfree to adev.
    
    [   36.269348] BUG: unable to handle page fault for address: ffffa0c279940028
    [   36.276841] #PF: supervisor read access in kernel mode
    [   36.282434] #PF: error_code(0x0000) - not-present page
    [   36.288053] PGD 676601067 P4D 676601067 PUD 86a414067 PMD 86a247067 PTE 800ffff8066bf060
    [   36.296868] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC NOPTI
    [   36.302409] CPU: 4 PID: 1375 Comm: bash Tainted: G           O      5.9.0-rc2+ #46
    [   36.310670] Hardware name: System manufacturer System Product Name/PRIME Z390-A, BIOS 1401 11/26/2019
    [   36.320725] RIP: 0010:drm_managed_release+0x25/0x110 [drm]
    [   36.326741] Code: 80 00 00 00 00 0f 1f 44 00 00 55 48 c7 c2 5a 9f 41 c0 be 00 02 00 00 48 89 e5 41 57 41 56 41 55 41 54 49 89 fc 53 48 83 ec 08 <48> 8b 7f 18 e8 c2 10 ff ff 4d 8b 74 24 20 49 8d 44 24 5
    [   36.347217] RSP: 0018:ffffb9424141fce0 EFLAGS: 00010282
    [   36.352931] RAX: 0000000000000006 RBX: ffffa0c279940010 RCX: 0000000000000006
    [   36.360718] RDX: ffffffffc0419f5a RSI: 0000000000000200 RDI: ffffa0c279940010
    [   36.368503] RBP: ffffb9424141fd10 R08: 0000000000000001 R09: 0000000000000001
    [   36.376304] R10: 0000000000000000 R11: 0000000000000000 R12: ffffa0c279940010
    [   36.384070] R13: ffffffffc0e2a000 R14: ffffa0c26924e220 R15: fffffffffffffff2
    [   36.391845] FS:  00007fc4a277b740(0000) GS:ffffa0c288e00000(0000) knlGS:0000000000000000
    [   36.400669] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   36.406937] CR2: ffffa0c279940028 CR3: 0000000792304006 CR4: 00000000003706e0
    [   36.414732] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [   36.422550] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [   36.430354] Call Trace:
    [   36.433044]  drm_dev_put.part.0+0x40/0x60 [drm]
    [   36.438017]  drm_dev_put+0x13/0x20 [drm]
    [   36.442398]  amdgpu_pci_remove+0x56/0x60 [amdgpu]
    [   36.447528]  pci_device_remove+0x3e/0xb0
    [   36.451807]  device_release_driver_internal+0xff/0x1d0
    [   36.457416]  device_release_driver+0x12/0x20
    [   36.462094]  pci_stop_bus_device+0x70/0xa0
    [   36.466588]  pci_stop_and_remove_bus_device_locked+0x1b/0x30
    [   36.472786]  remove_store+0x7b/0x90
    [   36.476614]  dev_attr_store+0x17/0x30
    [   36.480646]  sysfs_kf_write+0x4b/0x60
    [   36.484655]  kernfs_fop_write+0xe8/0x1d0
    [   36.488952]  vfs_write+0xf5/0x230
    [   36.492562]  ksys_write+0x70/0xf0
    [   36.496206]  __x64_sys_write+0x1a/0x20
    [   36.500292]  do_syscall_64+0x38/0x90
    [   36.504219]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
    Signed-off-by: default avatarxinhui pan <xinhui.pan@amd.com>
    Acked-by: default avatarAlex Deucher <alexancer.deucher@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    3d7248d7
amdgpu_drv.c 61.4 KB