mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 19:45:06 +08:00
drm/amdkfd: handle fault counters on invalid address
prange is NULL if vm fault retry on invalid address, for this case, can not use prange to get pdd, use adev to get gpuidx and then get pdd instead, then increase pdd vm fault counter. 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
9604b74bff
commit
4818545a1d
@ -2375,21 +2375,27 @@ static bool svm_range_skip_recover(struct svm_range *prange)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
svm_range_count_fault(struct amdgpu_device *adev, struct kfd_process *p,
|
svm_range_count_fault(struct amdgpu_device *adev, struct kfd_process *p,
|
||||||
struct svm_range *prange, int32_t gpuidx)
|
int32_t gpuidx)
|
||||||
{
|
{
|
||||||
struct kfd_process_device *pdd;
|
struct kfd_process_device *pdd;
|
||||||
|
|
||||||
if (gpuidx == MAX_GPU_INSTANCE)
|
/* fault is on different page of same range
|
||||||
/* fault is on different page of same range
|
* or fault is skipped to recover later
|
||||||
* or fault is skipped to recover later
|
* or fault is on invalid virtual address
|
||||||
*/
|
*/
|
||||||
pdd = svm_range_get_pdd_by_adev(prange, adev);
|
if (gpuidx == MAX_GPU_INSTANCE) {
|
||||||
else
|
uint32_t gpuid;
|
||||||
/* fault recovered
|
int r;
|
||||||
* or fault cannot recover because GPU no access on the range
|
|
||||||
*/
|
|
||||||
pdd = kfd_process_device_from_gpuidx(p, gpuidx);
|
|
||||||
|
|
||||||
|
r = kfd_process_gpuid_from_kgd(p, adev, &gpuid, &gpuidx);
|
||||||
|
if (r < 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fault is recovered
|
||||||
|
* or fault cannot recover because GPU no access on the range
|
||||||
|
*/
|
||||||
|
pdd = kfd_process_device_from_gpuidx(p, gpuidx);
|
||||||
if (pdd)
|
if (pdd)
|
||||||
WRITE_ONCE(pdd->faults, pdd->faults + 1);
|
WRITE_ONCE(pdd->faults, pdd->faults + 1);
|
||||||
}
|
}
|
||||||
@ -2525,7 +2531,7 @@ out_unlock_svms:
|
|||||||
mutex_unlock(&svms->lock);
|
mutex_unlock(&svms->lock);
|
||||||
mmap_read_unlock(mm);
|
mmap_read_unlock(mm);
|
||||||
|
|
||||||
svm_range_count_fault(adev, p, prange, gpuidx);
|
svm_range_count_fault(adev, p, gpuidx);
|
||||||
|
|
||||||
mmput(mm);
|
mmput(mm);
|
||||||
out:
|
out:
|
||||||
|
Loading…
Reference in New Issue
Block a user