[PATCH] drm/ttm: Fix bo_global and mem_global kfree error
Zhang, Jerry(Junwei)
Jerry.Zhang at amd.com
Wed Nov 7 01:32:25 UTC 2018
On 11/6/18 7:59 PM, Christian König wrote:
> Am 06.11.18 um 12:54 schrieb Trigger Huang:
>> ttm_bo_glob and ttm_mem_glob are defined as structure instance, while
>> not allocated by kzalloc, so kfree should not be invoked to release
>> them anymore. Otherwise, it will cause the following kernel BUG when
>> unloading amdgpu module
>>
>> [ 48.419294] kernel BUG at
>> /build/linux-5s7Xkn/linux-4.15.0/mm/slub.c:3894!
>> [ 48.419352] invalid opcode: 0000 [#1] SMP PTI
>> [ 48.419387] Modules linked in: amdgpu(OE-) amdchash(OE) amdttm(OE)
>> amd_sched(OE) amdkcl(OE) amd_iommu_v2 drm_kms_helper drm i2c_algo_bit
>> fb_sys_fops syscopyarea sysfillrect sysimgblt snd_hda_codec_generic
>> snd_hda_intel snd_hda_codec snd_hda_core snd_hwdep kvm_intel kvm
>> irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel snd_pcm
>> snd_seq_midi snd_seq_midi_event snd_rawmidi pcbc snd_seq
>> snd_seq_device snd_timer aesni_intel snd soundcore joydev aes_x86_64
>> crypto_simd glue_helper cryptd input_leds mac_hid serio_raw
>> binfmt_misc nfsd auth_rpcgss nfs_acl lockd grace sunrpc sch_fq_codel
>> parport_pc ppdev lp parport ip_tables x_tables autofs4 8139too
>> psmouse i2c_piix4 8139cp mii floppy pata_acpi
>> [ 48.419782] CPU: 1 PID: 1281 Comm: modprobe Tainted: G
>> OE 4.15.0-20-generic #21-Ubuntu
>> [ 48.419838] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
>> BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
>> [ 48.419901] RIP: 0010:kfree+0x137/0x180
>> [ 48.419934] RSP: 0018:ffffb02101273bf8 EFLAGS: 00010246
>> [ 48.419974] RAX: ffffeee1418ad7e0 RBX: ffffffffc075f100 RCX:
>> ffff8fed7fca7ed0
>> [ 48.420025] RDX: 0000000000000000 RSI: 000000000003440e RDI:
>> 0000000022400000
>> [ 48.420073] RBP: ffffb02101273c10 R08: 0000000000000010 R09:
>> ffff8fed7ffd3680
>> [ 48.420121] R10: ffffeee1418ad7c0 R11: ffff8fed7ffd3000 R12:
>> ffffffffc075e2c0
>> [ 48.420169] R13: ffffffffc074ec10 R14: ffff8fed73063900 R15:
>> ffff8fed737428e8
>> [ 48.420216] FS: 00007fdc912ec540(0000) GS:ffff8fed7fc80000(0000)
>> knlGS:0000000000000000
>> [ 48.420267] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [ 48.420308] CR2: 000055fa40c30060 CR3: 000000023470a006 CR4:
>> 00000000003606e0
>> [ 48.420358] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
>> 0000000000000000
>> [ 48.420405] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
>> 0000000000000400
>> [ 48.420452] Call Trace:
>> [ 48.420485] ttm_bo_global_kobj_release+0x20/0x30 [amdttm]
>> [ 48.420528] kobject_release+0x6a/0x180
>> [ 48.420562] kobject_put+0x28/0x50
>> [ 48.420595] ttm_bo_global_release+0x36/0x50 [amdttm]
>> [ 48.420636] amdttm_bo_device_release+0x119/0x180 [amdttm]
>> [ 48.420678] ? amdttm_bo_clean_mm+0xa6/0xf0 [amdttm]
>> [ 48.420760] amdgpu_ttm_fini+0xc9/0x180 [amdgpu]
>> [ 48.420821] amdgpu_bo_fini+0x12/0x40 [amdgpu]
>> [ 48.420889] gmc_v9_0_sw_fini+0x40/0x50 [amdgpu]
>> [ 48.420947] amdgpu_device_fini+0x36f/0x4c0 [amdgpu]
>> [ 48.421007] amdgpu_driver_unload_kms+0xb4/0x150 [amdgpu]
>> [ 48.421058] drm_dev_unregister+0x46/0xf0 [drm]
>> [ 48.421102] drm_dev_unplug+0x12/0x70 [drm]
>>
>> Signed-off-by: Trigger Huang <Trigger.Huang at amd.com>
>
> Reviewed-by: Christian König <christian.koenig at amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang at amd.com>
>
>> ---
>> drivers/gpu/drm/ttm/ttm_bo.c | 1 -
>> drivers/gpu/drm/ttm/ttm_memory.c | 9 ---------
>> 2 files changed, 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
>> index df02880..01c6d14 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
>> @@ -1527,7 +1527,6 @@ static void ttm_bo_global_kobj_release(struct
>> kobject *kobj)
>> container_of(kobj, struct ttm_bo_global, kobj);
>> __free_page(glob->dummy_read_page);
>> - kfree(glob);
>> }
>> static void ttm_bo_global_release(void)
>> diff --git a/drivers/gpu/drm/ttm/ttm_memory.c
>> b/drivers/gpu/drm/ttm/ttm_memory.c
>> index 7704e17..f1567c3 100644
>> --- a/drivers/gpu/drm/ttm/ttm_memory.c
>> +++ b/drivers/gpu/drm/ttm/ttm_memory.c
>> @@ -219,14 +219,6 @@ static ssize_t ttm_mem_global_store(struct
>> kobject *kobj,
>> return size;
>> }
>> -static void ttm_mem_global_kobj_release(struct kobject *kobj)
>> -{
>> - struct ttm_mem_global *glob =
>> - container_of(kobj, struct ttm_mem_global, kobj);
>> -
>> - kfree(glob);
>> -}
>> -
>> static struct attribute *ttm_mem_global_attrs[] = {
>> &ttm_mem_global_lower_mem_limit,
>> NULL
>> @@ -238,7 +230,6 @@ static const struct sysfs_ops ttm_mem_global_ops = {
>> };
>> static struct kobj_type ttm_mem_glob_kobj_type = {
>> - .release = &ttm_mem_global_kobj_release,
>> .sysfs_ops = &ttm_mem_global_ops,
>> .default_attrs = ttm_mem_global_attrs,
>> };
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list