- Remove duplicate AMDGPU_INTERCONNECT_VRAM/P2P defines from amdgpu_svm.h
- Move devmem_possible() from attr module to amdgpu_svm.c as
  amdgpu_svm_devmem_possible() since it is a device capability check,
  not an attribute-level decision
- Add amdgpu_pagemap_capable() guard in devmem_possible()
- Decouple prefer_vram() from devmem_possible(), caller combines both
- Update all callers to new API signatures

Signed-off-by: Junhua Shen <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_svm.c       | 12 ++++++++++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_svm.h       |  4 +---
 drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.c  | 18 +-----------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.h  |  5 +----
 drivers/gpu/drm/amd/amdgpu/amdgpu_svm_fault.c |  9 +++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_svm_range.c |  8 +++++---
 drivers/gpu/drm/amd/amdgpu/amdgpu_userptr.c   | 13 +++++++------
 7 files changed, 32 insertions(+), 37 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm.c
index 626c5790e4d0..47e10e1401a6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm.c
@@ -33,6 +33,7 @@
 #include "amdgpu_svm_attr.h"
 #include "amdgpu_svm_fault.h"
 #include "amdgpu_svm_range.h"
+#include "amdgpu_svm_range_migrate.h"
 #include "amdgpu_vm.h"
 
 #if IS_ENABLED(CONFIG_DRM_AMDGPU_SVM)
@@ -318,6 +319,17 @@ int amdgpu_svm_apply_attr_change(struct amdgpu_svm *svm,
                                          (last_page + 1) << PAGE_SHIFT);
 }
 
+bool amdgpu_svm_devmem_possible(struct amdgpu_svm *svm)
+{
+       if (!amdgpu_pagemap_capable(svm))
+               return false;
+
+       if (svm->adev->apu_prefer_gtt)
+               return false;
+
+       return true;
+}
+
 static bool amdgpu_svm_default_xnack_enabled(struct amdgpu_device *adev)
 {
        uint32_t gc_ver = amdgpu_ip_version(adev, GC_HWIP, 0);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm.h
index 1ab9c84addf7..0dc04d1383f4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm.h
@@ -47,9 +47,6 @@ struct amdgpu_svm_attrs;
 struct drm_device;
 struct drm_file;
 
-#define AMDGPU_INTERCONNECT_VRAM       DRM_INTERCONNECT_DRIVER
-#define AMDGPU_INTERCONNECT_P2P                (AMDGPU_INTERCONNECT_VRAM + 1)
-
 enum amdgpu_svm_xnack_mode {
        AMDGPU_SVM_XNACK_OFF,
        AMDGPU_SVM_XNACK_ON,
@@ -154,6 +151,7 @@ int amdgpu_svm_apply_attr_change(struct amdgpu_svm *svm,
                                 const struct amdgpu_svm_attrs *new_attrs,
                                 unsigned long start_page,
                                 unsigned long last_page);
+bool amdgpu_svm_devmem_possible(struct amdgpu_svm *svm);
 #else
 static inline int amdgpu_svm_init(struct amdgpu_device *adev,
                                  struct amdgpu_vm *vm)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.c
index 177eb3cd501b..26e33defb8b9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.c
@@ -52,24 +52,8 @@ struct attr_get_ctx {
        bool has_range;
 };
 
-bool amdgpu_svm_attr_devmem_possible(struct amdgpu_svm *svm,
-                                    const struct amdgpu_svm_attrs *attrs)
+bool amdgpu_svm_attr_prefer_vram(const struct amdgpu_svm_attrs *attrs)
 {
-       if (svm->adev->apu_prefer_gtt)
-               return false;
-
-       if (attrs->preferred_loc == AMDGPU_SVM_LOCATION_SYSMEM)
-               return false;
-
-       return true;
-}
-
-bool amdgpu_svm_attr_prefer_vram(struct amdgpu_svm *svm,
-                                const struct amdgpu_svm_attrs *attrs)
-{
-       if (!amdgpu_svm_attr_devmem_possible(svm, attrs))
-               return false;
-
        if (attrs->preferred_loc != AMDGPU_SVM_LOCATION_UNDEFINED &&
            attrs->preferred_loc != AMDGPU_SVM_LOCATION_SYSMEM)
                return true;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.h
index ce7be1bc4ae8..36080405b504 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_attr.h
@@ -162,10 +162,7 @@ amdgpu_svm_attr_range_alloc(unsigned long start_page,
                           const struct amdgpu_svm_attrs *attrs);
 void amdgpu_svm_attr_range_insert_locked(struct amdgpu_svm_attr_tree 
*attr_tree,
                                         struct amdgpu_svm_attr_range *range);
-bool amdgpu_svm_attr_devmem_possible(struct amdgpu_svm *svm,
-                                    const struct amdgpu_svm_attrs *attrs);
-bool amdgpu_svm_attr_prefer_vram(struct amdgpu_svm *svm,
-                                const struct amdgpu_svm_attrs *attrs);
+bool amdgpu_svm_attr_prefer_vram(const struct amdgpu_svm_attrs *attrs);
 struct vm_area_struct *amdgpu_svm_check_vma(struct mm_struct *mm,
                                        unsigned long addr);
 int amdgpu_svm_attr_check_vm_bo(struct amdgpu_svm_attr_tree *attr_tree,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_fault.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_fault.c
index eb0e14439762..3f0c010e4e35 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_fault.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_fault.c
@@ -151,14 +151,15 @@ static int fault_map_range(struct amdgpu_svm *svm,
                               bool write_fault)
 {
        const struct amdgpu_svm_attrs *attrs = &attr_range->attrs;
-       bool devmem_possible = false; /* TODO: add migration */
-       bool need_vram_migration = amdgpu_svm_attr_prefer_vram(svm, attrs);
+       bool devmem_possible = amdgpu_svm_devmem_possible(svm);
+       bool need_vram_migration = devmem_possible &&
+                                  amdgpu_svm_attr_prefer_vram(attrs);
        struct drm_gpusvm_ctx map_ctx = {
                .read_only = !!(attrs->flags & AMDGPU_SVM_ATTR_BIT_GPU_RO),
                .devmem_possible = devmem_possible,
                .check_pages_threshold = devmem_possible ? SZ_64K : 0,
-               .devmem_only = need_vram_migration && devmem_possible,
-               .timeslice_ms = need_vram_migration && devmem_possible ? 5 : 0,
+               .devmem_only = need_vram_migration,
+               .timeslice_ms = need_vram_migration ? 5 : 0,
        };
        struct amdgpu_svm_range *range;
        ktime_t timestamp = ktime_get_boottime();
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_range.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_range.c
index ef913a2363e3..21a2b0c49c53 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_range.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_svm_range.c
@@ -26,6 +26,7 @@
 #include "amdgpu_svm_attr.h"
 #include "amdgpu_svm_range.h"
 #include "amdgpu_svm_fault.h"
+#include "amdgpu_migrate.h"
 #include "amdgpu.h"
 #include "amdgpu_vm.h"
 
@@ -423,11 +424,12 @@ amdgpu_svm_range_map_attrs(struct amdgpu_svm *svm,
 {
        unsigned long addr = start;
        int ret;
-       bool devmem_possible = false; /* TODO: add migration */
-       bool need_vram_migration = amdgpu_svm_attr_prefer_vram(svm, attrs);
+       bool devmem_possible = amdgpu_svm_devmem_possible(svm);
+       bool need_vram_migration = devmem_possible &&
+                                  amdgpu_svm_attr_prefer_vram(attrs);
        struct drm_gpusvm_ctx map_ctx = {
                .devmem_possible = devmem_possible,
-               .devmem_only = need_vram_migration && devmem_possible,
+               .devmem_only = need_vram_migration,
                .check_pages_threshold = devmem_possible ? SZ_64K : 0,
        };
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userptr.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_userptr.c
index 4582fb9453b2..8bf00aed7f15 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userptr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userptr.c
@@ -247,9 +247,10 @@ svm_restore_range(struct amdgpu_svm *svm, struct 
amdgpu_svm_range *range)
        if (!attr_range || !amdgpu_svm_attr_has_access(attrs.access))
                return 0;
 
-       devmem_possible = amdgpu_svm_attr_devmem_possible(svm, &attrs);
-       need_vram_migration = amdgpu_svm_attr_prefer_vram(svm, &attrs);
-       devmem_possible = false; /* TODO: add migration */
+       devmem_possible = amdgpu_svm_devmem_possible(svm);
+       need_vram_migration = devmem_possible &&
+                             amdgpu_svm_attr_prefer_vram(&attrs);
+
        map_ctx = (struct drm_gpusvm_ctx){
                .read_only = !!(attrs.flags & AMDGPU_SVM_ATTR_BIT_GPU_RO),
                .devmem_possible = devmem_possible,
@@ -502,12 +503,12 @@ svm_restore_find_or_insert_by_attrs(struct amdgpu_svm 
*svm,
                          unsigned long start, unsigned long end)
 {
        unsigned long addr = start;
-       bool devmem_possible = amdgpu_svm_attr_devmem_possible(svm, attrs);
-       bool need_vram_migration = amdgpu_svm_attr_prefer_vram(svm, attrs);
+       bool devmem_possible = amdgpu_svm_devmem_possible(svm);
+       bool need_vram_migration = devmem_possible && 
amdgpu_svm_attr_prefer_vram(attrs);
        struct drm_gpusvm_ctx map_ctx = {
                .read_only = !!(attrs->flags & AMDGPU_SVM_ATTR_BIT_GPU_RO),
                .devmem_possible = devmem_possible,
-               .devmem_only = need_vram_migration && devmem_possible,
+               .devmem_only = need_vram_migration,
                .check_pages_threshold = devmem_possible ? SZ_64K : 0,
        };
 
-- 
2.34.1

Reply via email to