OSDN Git Service

drm/amdkfd: device pgmap owner at the svm migrate init
authorAlex Sierra <alex.sierra@amd.com>
Wed, 5 May 2021 17:43:10 +0000 (12:43 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 1 Jul 2021 04:05:41 +0000 (00:05 -0400)
GPUs in the same XGMI hive have direct access to all
members'VRAM. When mapping memory to a GPU, we don't need
hmm_range_fault to fault device-private pages in the same
hive back to the host. Identifying the page owner as the hive,
rather than the individual GPU, accomplishes this.

Signed-off-by: Alex Sierra <alex.sierra@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
drivers/gpu/drm/amd/amdkfd/kfd_svm.h

index d8092a8..f1be090 100644 (file)
@@ -379,7 +379,7 @@ svm_migrate_vma_to_vram(struct amdgpu_device *adev, struct svm_range *prange,
        migrate.start = start;
        migrate.end = end;
        migrate.flags = MIGRATE_VMA_SELECT_SYSTEM;
-       migrate.pgmap_owner = adev;
+       migrate.pgmap_owner = SVM_ADEV_PGMAP_OWNER(adev);
 
        size = 2 * sizeof(*migrate.src) + sizeof(uint64_t) + sizeof(dma_addr_t);
        size *= npages;
@@ -601,7 +601,7 @@ svm_migrate_vma_to_ram(struct amdgpu_device *adev, struct svm_range *prange,
        migrate.start = start;
        migrate.end = end;
        migrate.flags = MIGRATE_VMA_SELECT_DEVICE_PRIVATE;
-       migrate.pgmap_owner = adev;
+       migrate.pgmap_owner = SVM_ADEV_PGMAP_OWNER(adev);
 
        size = 2 * sizeof(*migrate.src) + sizeof(uint64_t) + sizeof(dma_addr_t);
        size *= npages;
@@ -873,7 +873,7 @@ int svm_migrate_init(struct amdgpu_device *adev)
        pgmap->range.start = res->start;
        pgmap->range.end = res->end;
        pgmap->ops = &svm_migrate_pgmap_ops;
-       pgmap->owner = adev;
+       pgmap->owner = SVM_ADEV_PGMAP_OWNER(adev);
        pgmap->flags = MIGRATE_VMA_SELECT_DEVICE_PRIVATE;
        r = devm_memremap_pages(adev->dev, pgmap);
        if (IS_ERR(r)) {
index a9af039..1f88bdf 100644 (file)
@@ -35,6 +35,9 @@
 #include "amdgpu.h"
 #include "kfd_priv.h"
 
+#define SVM_ADEV_PGMAP_OWNER(adev)\
+                       ((adev)->hive ? (void *)(adev)->hive : (void *)(adev))
+
 struct svm_range_bo {
        struct amdgpu_bo                *bo;
        struct kref                     kref;