[PATCH] drm/ttm: Fix bo_global and mem_global kfree error
Christian König
ckoenig.leichtzumerken at gmail.com
Tue Nov 6 11:59:32 UTC 2018
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>
> ---
> 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,
> };
More information about the amd-gfx
mailing list