mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
drm/amdkfd: new range accessible by all GPUs
If xnack is on, new range is created to recover retry vm fault or created by SVM API calls, set all GPUs have access to the range. Signed-off-by: Philip Yang <Philip.Yang@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
6e6fe7c928
commit
a9a76beed2
|
|
@ -258,6 +258,7 @@ svm_range *svm_range_new(struct svm_range_list *svms, uint64_t start,
|
|||
{
|
||||
uint64_t size = last - start + 1;
|
||||
struct svm_range *prange;
|
||||
struct kfd_process *p;
|
||||
|
||||
prange = kzalloc(sizeof(*prange), GFP_KERNEL);
|
||||
if (!prange)
|
||||
|
|
@ -277,6 +278,11 @@ svm_range *svm_range_new(struct svm_range_list *svms, uint64_t start,
|
|||
prange->validate_timestamp = 0;
|
||||
mutex_init(&prange->migrate_mutex);
|
||||
mutex_init(&prange->lock);
|
||||
|
||||
p = container_of(svms, struct kfd_process, svms);
|
||||
if (p->xnack_enabled)
|
||||
bitmap_fill(prange->bitmap_access, MAX_GPU_INSTANCE);
|
||||
|
||||
svm_range_set_default_attributes(&prange->preferred_loc,
|
||||
&prange->prefetch_loc,
|
||||
&prange->granularity, &prange->flags);
|
||||
|
|
@ -2246,7 +2252,7 @@ svm_range *svm_range_create_unregistered_range(struct amdgpu_device *adev,
|
|||
|
||||
prange = svm_range_new(&p->svms, start, last);
|
||||
if (!prange) {
|
||||
pr_debug("Failed to create prange in address [0x%llx]\\n", addr);
|
||||
pr_debug("Failed to create prange in address [0x%llx]\n", addr);
|
||||
return NULL;
|
||||
}
|
||||
if (kfd_process_gpuid_from_kgd(p, adev, &gpuid, &gpuidx)) {
|
||||
|
|
@ -2254,9 +2260,7 @@ svm_range *svm_range_create_unregistered_range(struct amdgpu_device *adev,
|
|||
svm_range_free(prange);
|
||||
return NULL;
|
||||
}
|
||||
prange->preferred_loc = gpuid;
|
||||
prange->actual_loc = 0;
|
||||
/* Gurantee prange is migrate it */
|
||||
|
||||
svm_range_add_to_svms(prange);
|
||||
svm_range_add_notifier_locked(mm, prange);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user