mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
drm/amdkfd: fix some race conditions in vram buffer alloc/free of svm code
[ Upstream commit 7bfaa160ca ]
This patch fixes:
1: ref number of prange's svm_bo got decreased by an async call from hmm. When
wait svm_bo of prange got released we shoul also wait prang->svm_bo become NULL,
otherwise prange->svm_bo may be set to null after allocate new vram buffer.
2: During waiting svm_bo of prange got released in a while loop should reschedule
current task to give other tasks oppotunity to run, specially the the workque
task that handles svm_bo ref release, otherwise we may enter to softlock.
Signed-off-by: Xiaogang.Chen <xiaogang.chen@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
03b98d789a
commit
da27d73ec9
|
|
@ -495,11 +495,11 @@ svm_range_validate_svm_bo(struct kfd_node *node, struct svm_range *prange)
|
|||
|
||||
/* We need a new svm_bo. Spin-loop to wait for concurrent
|
||||
* svm_range_bo_release to finish removing this range from
|
||||
* its range list. After this, it is safe to reuse the
|
||||
* svm_bo pointer and svm_bo_list head.
|
||||
* its range list and set prange->svm_bo to null. After this,
|
||||
* it is safe to reuse the svm_bo pointer and svm_bo_list head.
|
||||
*/
|
||||
while (!list_empty_careful(&prange->svm_bo_list))
|
||||
;
|
||||
while (!list_empty_careful(&prange->svm_bo_list) || prange->svm_bo)
|
||||
cond_resched();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user