Re: [PATCH] drm/amdkfd: handle duplicate BOs in reserve_bo_and_cond_vms

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday, June 12, 2024 2:06:37 PM CEST, Greg KH wrote:
> On Mon, Jun 03, 2024 at 02:31:27PM +0000, Deucher, Alexander wrote:
> > [Public]
> > 
> > > -----Original Message-----
> > > From: Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>
> > > Sent: Saturday, June 1, 2024 1:24 AM
> > > To: Deucher, Alexander <Alexander.Deucher@xxxxxxx>
> > > Cc: stable@xxxxxxxxxxxxxxx; sashal@xxxxxxxxxx; Yu, Lang
> > > <Lang.Yu@xxxxxxx>;
> > > Tomáš Trnka <trnka@xxxxxxx>; Kuehling, Felix <Felix.Kuehling@xxxxxxx>
> > > Subject: Re: [PATCH] drm/amdkfd: handle duplicate BOs in
> > > reserve_bo_and_cond_vms
> > > 
> > > On Fri, May 31, 2024 at 10:18:07AM -0400, Alex Deucher wrote:
> > > > From: Lang Yu <Lang.Yu@xxxxxxx>
> > > > 
> > > > Observed on gfx8 ASIC where
> > > 
> > > KFD_IOC_ALLOC_MEM_FLAGS_AQL_QUEUE_MEM is used.
> > > 
> > > > Two attachments use the same VM, root PD would be locked twice.
> > > > 
> > > > [   57.910418] Call Trace:
> > > > [   57.793726]  ? reserve_bo_and_cond_vms+0x111/0x1c0 [amdgpu]
> > > > [   57.793820]
> > > 
> > > amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu+0x6c/0x1c0 [amdgpu]
> > > 
> > > > [   57.793923]  ? idr_get_next_ul+0xbe/0x100
> > > > [   57.793933]  kfd_process_device_free_bos+0x7e/0xf0 [amdgpu]
> > > > [   57.794041]  kfd_process_wq_release+0x2ae/0x3c0 [amdgpu]
> > > > [   57.794141]  ? process_scheduled_works+0x29c/0x580
> > > > [   57.794147]  process_scheduled_works+0x303/0x580
> > > > [   57.794157]  ? __pfx_worker_thread+0x10/0x10
> > > > [   57.794160]  worker_thread+0x1a2/0x370
> > > > [   57.794165]  ? __pfx_worker_thread+0x10/0x10
> > > > [   57.794167]  kthread+0x11b/0x150
> > > > [   57.794172]  ? __pfx_kthread+0x10/0x10
> > > > [   57.794177]  ret_from_fork+0x3d/0x60
> > > > [   57.794181]  ? __pfx_kthread+0x10/0x10
> > > > [   57.794184]  ret_from_fork_asm+0x1b/0x30
> > > > 
> > > > Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3007
> > > > Tested-by: Tomáš Trnka <trnka@xxxxxxx>
> > > > Signed-off-by: Lang Yu <Lang.Yu@xxxxxxx>
> > > > Reviewed-by: Felix Kuehling <felix.kuehling@xxxxxxx>
> > > > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
> > > > Cc: stable@xxxxxxxxxxxxxxx
> > > > (cherry picked from commit
> > > 
> > > 2a705f3e49d20b59cd9e5cc3061b2d92ebe1e5f0)
> > > 
> > > > ---
> > > > 
> > > >  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 3 ++-
> > > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > What kernel release(s) is this backport for?
> > 
> > 6.6.x and newer.
> 
> Does not apply to 6.6.y, sorry, how was this tested?  Can you submit a
> patch that does work?
> 
> thanks,
> 
> greg k-h

Sorry about that. 6.6 does not have commit 
05d249352f1ae909230c230767ca8f4e9fdf8e7b "drm/exec: Pass in initial # of 
objects" which adds the trailing 0 argument. Just removing that zero makes the 
patch apply and work. Such a modified version is attached below.

Tested on 6.6.32 (version below), 6.8.12 and 6.9.3 (version sent by Alex 
above).

2T

From: Lang Yu <Lang.Yu@xxxxxxx>

Observed on gfx8 ASIC where KFD_IOC_ALLOC_MEM_FLAGS_AQL_QUEUE_MEM is used.
Two attachments use the same VM, root PD would be locked twice.

[   57.910418] Call Trace:
[   57.793726]  ? reserve_bo_and_cond_vms+0x111/0x1c0 [amdgpu]
[   57.793820]  amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu+0x6c/0x1c0 [amdgpu]
[   57.793923]  ? idr_get_next_ul+0xbe/0x100
[   57.793933]  kfd_process_device_free_bos+0x7e/0xf0 [amdgpu]
[   57.794041]  kfd_process_wq_release+0x2ae/0x3c0 [amdgpu]
[   57.794141]  ? process_scheduled_works+0x29c/0x580
[   57.794147]  process_scheduled_works+0x303/0x580
[   57.794157]  ? __pfx_worker_thread+0x10/0x10
[   57.794160]  worker_thread+0x1a2/0x370
[   57.794165]  ? __pfx_worker_thread+0x10/0x10
[   57.794167]  kthread+0x11b/0x150
[   57.794172]  ? __pfx_kthread+0x10/0x10
[   57.794177]  ret_from_fork+0x3d/0x60
[   57.794181]  ? __pfx_kthread+0x10/0x10
[   57.794184]  ret_from_fork_asm+0x1b/0x30

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3007
Tested-by: Tomáš Trnka <trnka@xxxxxxx>
Signed-off-by: Lang Yu <Lang.Yu@xxxxxxx>
Reviewed-by: Felix Kuehling <felix.kuehling@xxxxxxx>
Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx
(cherry picked from commit 2a705f3e49d20b59cd9e5cc3061b2d92ebe1e5f0)
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/
drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 15c5a2533ba6..9115fc8c96ba 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -1135,7 +1135,8 @@ static int reserve_bo_and_cond_vms(struct kgd_mem *mem,
 	int ret;
 
 	ctx->sync = &mem->sync;
-	drm_exec_init(&ctx->exec, DRM_EXEC_INTERRUPTIBLE_WAIT);
+	drm_exec_init(&ctx->exec, DRM_EXEC_INTERRUPTIBLE_WAIT |
+		      DRM_EXEC_IGNORE_DUPLICATES);
 	drm_exec_until_all_locked(&ctx->exec) {
 		ctx->n_vms = 0;
 		list_for_each_entry(entry, &mem->attachments, list) {
-- 
2.45.1










[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux