mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
drm/amdgpu: add common gmc_ras_fini function
gmc_ras_fini can be shared among all generations of gmc Signed-off-by: Tao Zhou <tao.zhou1@amd.com> Reviewed-by: Guchun Chen <guchun.chen@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
65bc47a659
commit
2adf13440a
@ -306,3 +306,29 @@ bool amdgpu_gmc_filter_faults(struct amdgpu_device *adev, uint64_t addr,
|
|||||||
gmc->fault_hash[hash].idx = gmc->last_fault++;
|
gmc->fault_hash[hash].idx = gmc->last_fault++;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void amdgpu_gmc_ras_fini(struct amdgpu_device *adev)
|
||||||
|
{
|
||||||
|
if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__UMC) &&
|
||||||
|
adev->umc.ras_if) {
|
||||||
|
struct ras_common_if *ras_if = adev->umc.ras_if;
|
||||||
|
struct ras_ih_if ih_info = {
|
||||||
|
.head = *ras_if,
|
||||||
|
.cb = amdgpu_umc_process_ras_data_cb,
|
||||||
|
};
|
||||||
|
|
||||||
|
amdgpu_ras_late_fini(adev, ras_if, &ih_info);
|
||||||
|
kfree(ras_if);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__MMHUB) &&
|
||||||
|
adev->mmhub.ras_if) {
|
||||||
|
struct ras_common_if *ras_if = adev->mmhub.ras_if;
|
||||||
|
struct ras_ih_if ih_info = {
|
||||||
|
.cb = NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
amdgpu_ras_late_fini(adev, ras_if, &ih_info);
|
||||||
|
kfree(ras_if);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -233,5 +233,6 @@ void amdgpu_gmc_agp_location(struct amdgpu_device *adev,
|
|||||||
struct amdgpu_gmc *mc);
|
struct amdgpu_gmc *mc);
|
||||||
bool amdgpu_gmc_filter_faults(struct amdgpu_device *adev, uint64_t addr,
|
bool amdgpu_gmc_filter_faults(struct amdgpu_device *adev, uint64_t addr,
|
||||||
uint16_t pasid, uint64_t timestamp);
|
uint16_t pasid, uint64_t timestamp);
|
||||||
|
void amdgpu_gmc_ras_fini(struct amdgpu_device *adev);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1108,33 +1108,7 @@ static int gmc_v9_0_sw_fini(void *handle)
|
|||||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||||
void *stolen_vga_buf;
|
void *stolen_vga_buf;
|
||||||
|
|
||||||
if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__UMC) &&
|
amdgpu_gmc_ras_fini(adev);
|
||||||
adev->umc.ras_if) {
|
|
||||||
struct ras_common_if *ras_if = adev->umc.ras_if;
|
|
||||||
struct ras_ih_if ih_info = {
|
|
||||||
.head = *ras_if,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* remove fs first */
|
|
||||||
amdgpu_ras_debugfs_remove(adev, ras_if);
|
|
||||||
amdgpu_ras_sysfs_remove(adev, ras_if);
|
|
||||||
/* remove the IH */
|
|
||||||
amdgpu_ras_interrupt_remove_handler(adev, &ih_info);
|
|
||||||
amdgpu_ras_feature_enable(adev, ras_if, 0);
|
|
||||||
kfree(ras_if);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__MMHUB) &&
|
|
||||||
adev->mmhub.ras_if) {
|
|
||||||
struct ras_common_if *ras_if = adev->mmhub.ras_if;
|
|
||||||
|
|
||||||
/* remove fs and disable ras feature */
|
|
||||||
amdgpu_ras_debugfs_remove(adev, ras_if);
|
|
||||||
amdgpu_ras_sysfs_remove(adev, ras_if);
|
|
||||||
amdgpu_ras_feature_enable(adev, ras_if, 0);
|
|
||||||
kfree(ras_if);
|
|
||||||
}
|
|
||||||
|
|
||||||
amdgpu_gem_force_release(adev);
|
amdgpu_gem_force_release(adev);
|
||||||
amdgpu_vm_manager_fini(adev);
|
amdgpu_vm_manager_fini(adev);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user