Hi,
在 2025-04-15 15:51:31,"Thomas Zimmermann" <tzimmerm...@suse.de> 写道: >Hi > >Am 15.04.25 um 09:15 schrieb Andy Yan: >> Hi Thomas, >> >> 在 2025-04-15 14:54:21,"Thomas Zimmermann" <tzimmerm...@suse.de> 写道: >>> Hi >>> >>> Am 15.04.25 um 06:00 schrieb Andy Yan: >>>> Hi Thomas, >>>> >>>> At 2025-04-14 21:48:12, "Thomas Zimmermann" <tzimmerm...@suse.de> wrote: >>>>> Instead of testing import_attach for imported GEM buffers, invoke >>>>> drm_gem_is_imported() to do the test. The helper tests the dma_buf >>>>> itself while import_attach is just an artifact of the import. Prepares >>>>> to make import_attach optional. >>>>> >>>>> Signed-off-by: Thomas Zimmermann <tzimmerm...@suse.de> >>>>> Cc: Sandy Huang <h...@rock-chips.com> >>>>> Cc: "Heiko Stübner" <he...@sntech.de> >>>>> Cc: Andy Yan <andy....@rock-chips.com> >>>>> --- >>>>> drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 2 +- >>>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>>> >>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c >>>>> b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c >>>>> index 6330b883efc3..e44396d46dc1 100644 >>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c >>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c >>>>> @@ -332,7 +332,7 @@ void rockchip_gem_free_object(struct drm_gem_object >>>>> *obj) >>>>> struct rockchip_drm_private *private = drm->dev_private; >>>>> struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj); >>>>> >>>>> - if (obj->import_attach) { >>>>> + if (drm_gem_is_imported(obj)) { >>>> After applying this patch, when I tested glmark2-es2-wayland under Weston, >>>> the weston would freeze. >>>> It seems it goto the else path. >>>> >>>> I'm still conducting further analysis to figure out the exact cause. >>> Thanks for testing. We test if obj->dma_buf is set and refers back to >>> obj. One of these fields has likely been cleared already to NULL during >>> the object cleanup. Other drivers also call drm_gem_is_imported() in >>> their object cleanup and I've not heard about any regressions. >> From my test, it seems that a dumb buffer may export then import: >> and the obj->dma_buf will be cleared at >> drm_mode_destroy_dumb_ioctl-->drm_gem_handle_delete >> >> then test with obj->dma_buf && (obj->dma_buf->priv != obj) will be false. > >Here's a patch for the problem. Could you please test and report back >with the results? Thanks a lot. Yes, this patch can make patch 05/11 work right. > >Best regards >Thomas > > > >> >> >> >> >> >> [ 12.028941] [drm] Initialized panthor 1.3.0 for fb000000.gpu on minor 1 >> [ 14.606114] rockchip_gem_dumb_create weston obj: ffff00010149b000 handle: >> 1 >> [ 14.606170] drm_gem_prime_handle_to_dmabuf weston obj: ffff00010149b000 >> dma_buf: 0xffff000101454800 handle: 1 >> [ 14.606217] drm_gem_prime_fd_to_handle weston obj: ffff0001023cdc00 >> dma_buf: 0xffff000101454800 dma_buf->priv ffff00010149b000 >> [ 14.685517] rockchip_gem_dumb_create weston obj: ffff00010149b400 handle: >> 2 >> [ 14.685569] drm_gem_prime_handle_to_dmabuf weston obj: ffff00010149b400 >> dma_buf: 0xffff000101454400 handle: 2 >> [ 14.685691] drm_gem_prime_fd_to_handle weston obj: ffff0001023ce600 >> dma_buf: 0xffff000101454400 dma_buf->priv ffff00010149b400 >> [ 15.255277] rockchip_gem_dumb_create weston obj: ffff00010759f800 handle: >> 3 >> [ 15.255298] drm_gem_prime_handle_to_dmabuf weston obj: ffff00010759f800 >> dma_buf: 0xffff0001030cbc00 handle: 3 >> [ 15.255317] drm_gem_prime_fd_to_handle weston obj: ffff0001037a3200 >> dma_buf: 0xffff0001030cbc00 dma_buf->priv ffff00010759f800 >> [ 15.316336] rockchip_gem_dumb_create weston obj: ffff00010759f000 handle: >> 4 >> [ 15.316360] drm_gem_prime_handle_to_dmabuf weston obj: ffff00010759f000 >> dma_buf: 0xffff0001030cba00 handle: 4 >> [ 15.316404] drm_gem_prime_fd_to_handle weston obj: ffff0001037a1000 >> dma_buf: 0xffff0001030cba00 dma_buf->priv ffff00010759f000 >> [ 20.209006] rockchip_gem_dumb_create weston obj: ffff000106584000 handle: >> 1 >> [ 20.209031] drm_gem_prime_handle_to_dmabuf weston obj: ffff000106584000 >> dma_buf: 0xffff0001017a7600 handle: 1 >> [ 20.209049] drm_gem_prime_fd_to_handle weston obj: ffff00010182fc00 >> dma_buf: 0xffff0001017a7600 dma_buf->priv ffff000106584000 >> [ 20.228008] rockchip_gem_dumb_create weston obj: ffff000106584c00 handle: >> 2 >> [ 20.228029] drm_gem_prime_handle_to_dmabuf weston obj: ffff000106584c00 >> dma_buf: 0xffff0001017a7a00 handle: 2 >> [ 20.228081] drm_gem_prime_fd_to_handle weston obj: ffff000105eec000 >> dma_buf: 0xffff0001017a7a00 dma_buf->priv ffff000106584c00 >> >> [ 27.073265] drm_gem_prime_handle_to_dmabuf glmark2-es2-way obj: >> ffff0001035f0a00 dma_buf: 0xffff00010a24d500 handle: 10 >> [ 27.073377] drm_gem_prime_fd_to_handle weston obj: ffff0001035f0a00 >> dma_buf: 0xffff00010a24d500 dma_buf->priv ffff0001035f0a00 >> [ 27.073718] drm_gem_prime_fd_to_handle weston obj: ffff00010759e000 >> dma_buf: 0xffff00010a24d500 dma_buf->priv ffff0001035f0a00 >> >> [ 27.075363] drm_gem_handle_delete glmark2-es2-way obj: ffff0001035f0a00 >> handle: 10 >> [ 27.075718] drm_gem_prime_handle_to_dmabuf glmark2-es2-way obj: >> ffff00012946e000 dma_buf: 0xffff00010a24d100 handle: 25 >> [ 27.075799] drm_gem_prime_fd_to_handle weston obj: ffff00012946e000 >> dma_buf: 0xffff00010a24d100 dma_buf->priv ffff00012946e000 >> [ 27.076613] drm_gem_prime_fd_to_handle weston obj: ffff00010759dc00 >> dma_buf: 0xffff00010a24d100 dma_buf->priv ffff00012946e000 >> [ 27.079195] drm_gem_prime_handle_to_dmabuf glmark2-es2-way obj: >> ffff00012946e400 dma_buf: 0xffff00010a24d000 handle: 10 >> [ 27.079262] drm_gem_handle_delete weston obj: ffff00010759e000 handle: 5 >> [ 27.079271] CPU: 7 UID: 0 PID: 308 Comm: weston Not tainted 6.15.0-rc1+ >> #613 PREEMPT >> [ 27.079276] Hardware name: Radxa ROCK 5B (DT) >> [ 27.079278] Call trace: >> [ 27.079280] show_stack+0x18/0x24 (C) >> [ 27.079289] dump_stack_lvl+0x74/0x8c >> [ 27.079296] dump_stack+0x18/0x24 >> [ 27.079301] drm_gem_object_handle_put_unlocked+0x58/0x128 >> [ 27.079309] drm_gem_handle_delete+0xbc/0x110 >> [ 27.079314] drm_mode_destroy_dumb_ioctl+0x24/0x3c >> [ 27.079318] drm_ioctl_kernel+0xc0/0x12c >> [ 27.079324] drm_ioctl+0x25c/0x55c >> [ 27.079330] __arm64_sys_ioctl+0xb4/0xe8 >> [ 27.079335] invoke_syscall+0x48/0x10c >> [ 27.079340] el0_svc_common.constprop.0+0x40/0xe0 >> [ 27.079346] do_el0_svc+0x1c/0x28 >> [ 27.079351] el0_svc+0x30/0xcc >> [ 27.079355] el0t_64_sync_handler+0x10c/0x138 >> [ 27.079358] el0t_64_sync+0x198/0x19c >> [ 27.079362] drm_gem_object_exported_dma_buf_free weston obj: >> ffff00010759e000 dma_buf: 0xffff00010a24d500 dma_buf->priv: ffff0001035f0a00 >> [ 27.085797] rockchip_gem_free_object weston obj: ffff00010759e000 import >> dma_buf: 0x0000000000000000 dma_buf->priv: 0000000000000000 >> [ 27.086093] drm_gem_handle_delete weston obj: ffff0001035f0a00 handle: 35 >> [ 27.086099] CPU: 7 UID: 0 PID: 308 Comm: weston Not tainted 6.15.0-rc1+ >> #613 PREEMPT >> [ 27.086102] Hardware name: Radxa ROCK 5B (DT) >>> Best regards >>> Thomas >>> >>>>> if (private->domain) { >>>>> rockchip_gem_iommu_unmap(rk_obj); >>>>> } else { >>>>> -- >>>>> 2.49.0 >>> -- >>> -- >>> Thomas Zimmermann >>> Graphics Driver Developer >>> SUSE Software Solutions Germany GmbH >>> Frankenstrasse 146, 90461 Nuernberg, Germany >>> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman >>> HRB 36809 (AG Nuernberg) > >-- >-- >Thomas Zimmermann >Graphics Driver Developer >SUSE Software Solutions Germany GmbH >Frankenstrasse 146, 90461 Nuernberg, Germany >GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman >HRB 36809 (AG Nuernberg)