drm/amdgpu: Add interface to reserve bad page
Add interface to reserve bad page. Signed-off-by: YiPeng Chai <YiPeng.Chai@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Reviewed-by: Tao Zhou <tao.zhou1@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
60c448439f
commit
af730e0820
@ -2792,6 +2792,7 @@ int amdgpu_ras_recovery_init(struct amdgpu_device *adev)
|
||||
}
|
||||
}
|
||||
|
||||
mutex_init(&con->page_rsv_lock);
|
||||
mutex_init(&con->page_retirement_lock);
|
||||
init_waitqueue_head(&con->page_retirement_wq);
|
||||
atomic_set(&con->page_retirement_req_cnt, 0);
|
||||
@ -2842,6 +2843,8 @@ static int amdgpu_ras_recovery_fini(struct amdgpu_device *adev)
|
||||
|
||||
atomic_set(&con->page_retirement_req_cnt, 0);
|
||||
|
||||
mutex_destroy(&con->page_rsv_lock);
|
||||
|
||||
cancel_work_sync(&con->recovery_work);
|
||||
|
||||
mutex_lock(&con->recovery_lock);
|
||||
@ -4280,3 +4283,19 @@ void amdgpu_ras_query_boot_status(struct amdgpu_device *adev, u32 num_instances)
|
||||
amdgpu_ras_boot_time_error_reporting(adev, i, boot_error);
|
||||
}
|
||||
}
|
||||
|
||||
int amdgpu_ras_reserve_page(struct amdgpu_device *adev, uint64_t pfn)
|
||||
{
|
||||
struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
|
||||
struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
|
||||
uint64_t start = pfn << AMDGPU_GPU_PAGE_SHIFT;
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&con->page_rsv_lock);
|
||||
ret = amdgpu_vram_mgr_query_page_status(mgr, start);
|
||||
if (ret == -ENOENT)
|
||||
ret = amdgpu_vram_mgr_reserve_range(mgr, start, AMDGPU_GPU_PAGE_SIZE);
|
||||
mutex_unlock(&con->page_rsv_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -500,6 +500,7 @@ struct amdgpu_ras {
|
||||
wait_queue_head_t page_retirement_wq;
|
||||
struct mutex page_retirement_lock;
|
||||
atomic_t page_retirement_req_cnt;
|
||||
struct mutex page_rsv_lock;
|
||||
/* Fatal error detected flag */
|
||||
atomic_t fed;
|
||||
|
||||
@ -909,4 +910,7 @@ bool amdgpu_ras_get_fed_status(struct amdgpu_device *adev);
|
||||
|
||||
bool amdgpu_ras_event_id_is_valid(struct amdgpu_device *adev, u64 id);
|
||||
u64 amdgpu_ras_acquire_event_id(struct amdgpu_device *adev, enum ras_event_type type);
|
||||
|
||||
int amdgpu_ras_reserve_page(struct amdgpu_device *adev, uint64_t pfn);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user