summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorPhilip Yang <Philip.Yang@amd.com>2021-04-26 14:25:37 -0400
committerAlex Deucher <alexander.deucher@amd.com>2021-04-28 23:36:04 -0400
commitc0f76fc8ad5f3511bdee37efc130555b39d3f711 (patch)
tree09e510743c990c6f0a01649482439a38ba0ed496 /drivers
parentdd57e65f7c9b1ab4e9b04f2b2bcd28f60abc4b38 (diff)
drm/amdkfd: fix double free device pgmap resource
Use devm_memunmap_pages instead of memunmap_pages to release pgmap and remove pgmap from device action, to avoid double free pgmap when unloading driver module. Release device memory region if failed to create device memory pages structure. 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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_migrate.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
index a66b67083d83..6b810863f6ba 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
@@ -912,6 +912,8 @@ int svm_migrate_init(struct amdgpu_device *adev)
r = devm_memremap_pages(adev->dev, pgmap);
if (IS_ERR(r)) {
pr_err("failed to register HMM device memory\n");
+ devm_release_mem_region(adev->dev, res->start,
+ res->end - res->start + 1);
return PTR_ERR(r);
}
@@ -927,5 +929,9 @@ int svm_migrate_init(struct amdgpu_device *adev)
void svm_migrate_fini(struct amdgpu_device *adev)
{
- memunmap_pages(&adev->kfd.dev->pgmap);
+ struct dev_pagemap *pgmap = &adev->kfd.dev->pgmap;
+
+ devm_memunmap_pages(adev->dev, pgmap);
+ devm_release_mem_region(adev->dev, pgmap->range.start,
+ pgmap->range.end - pgmap->range.start + 1);
}