AMD-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu: conditionally compile amdgpu's amdkfd files
@ 2018-05-16 10:09 Oded Gabbay
       [not found] ` <20180516100948.38299-1-oded.gabbay-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Oded Gabbay @ 2018-05-16 10:09 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	felix.kuehling-5C7GfCeVMHo

In case CONFIG_HSA_AMD is not chosen, there is no need to compile amdkfd
files that reside inside amdgpu dirver. In addition, because amdkfd
depends on x86_64 architecture and amdgpu is not, compiling amdkfd files
under i386 architecture can cause compiler errors and warnings.

This patch modifies amdgpu's makefile to build amdkfd files only if
CONFIG_HSA_AMD is chosen. The only file to be compiled unconditionally
is amdgpu_amdkfd.c

Direct calls from amdgpu driver proper to functions in other
amdgpu_amdkfd_*.c files were changed to calls to functions inside
amdgpu_amdkfd.c. These functions call the original functions using a
function pointer to allow compilation without the original functions.

Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
---
 drivers/gpu/drm/amd/amdgpu/Makefile              | 13 +++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c       | 66 ++++++++++++++++++++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h       | 48 ++++++++++++-----
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c |  8 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c         |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c          |  2 +-
 6 files changed, 112 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile
index f3002020df6c..1464dff1b151 100644
--- a/drivers/gpu/drm/amd/amdgpu/Makefile
+++ b/drivers/gpu/drm/amd/amdgpu/Makefile
@@ -56,8 +56,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
 
 # add asic specific block
 amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o kv_smc.o kv_dpm.o \
-	ci_smc.o ci_dpm.o dce_v8_0.o gfx_v7_0.o cik_sdma.o uvd_v4_2.o vce_v2_0.o \
-	amdgpu_amdkfd_gfx_v7.o
+	ci_smc.o ci_dpm.o dce_v8_0.o gfx_v7_0.o cik_sdma.o uvd_v4_2.o vce_v2_0.o
 
 amdgpu-$(CONFIG_DRM_AMDGPU_SI)+= si.o gmc_v6_0.o gfx_v6_0.o si_ih.o si_dma.o dce_v6_0.o si_dpm.o si_smc.o
 
@@ -126,13 +125,21 @@ amdgpu-y += \
 	vcn_v1_0.o
 
 # add amdkfd interfaces
+amdgpu-y += amdgpu_amdkfd.o
+
+ifneq ($(CONFIG_HSA_AMD),)
 amdgpu-y += \
-	 amdgpu_amdkfd.o \
 	 amdgpu_amdkfd_fence.o \
 	 amdgpu_amdkfd_gpuvm.o \
 	 amdgpu_amdkfd_gfx_v8.o \
 	 amdgpu_amdkfd_gfx_v9.o
 
+ifneq ($(CONFIG_DRM_AMDGPU_CIK),)
+amdgpu-y += amdgpu_amdkfd_gfx_v7.o
+endif
+
+endif
+
 # add cgs
 amdgpu-y += amdgpu_cgs.o
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index cd0e8f192e6a..930d27dd6e27 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -27,7 +27,21 @@
 #include "amdgpu_gfx.h"
 #include <linux/module.h>
 
+#if defined(CONFIG_HSA_AMD_MODULE) || defined(CONFIG_HSA_AMD)
+static const struct amdgpu_amdkfd_if amdkfd_if = {
+	.fence_check_mm = amdkfd_fence_check_mm,
+	.unreserve_system_memory_limit = amdkfd_unreserve_system_memory_limit,
+	.gpuvm_destroy_cb = amdkfd_gpuvm_destroy_cb,
+	.to_kfd_fence = to_amdgpu_amdkfd_fence,
+	.evict_userptr = amdkfd_evict_userptr,
+	.gfx_7_get_functions = amdgpu_amdkfd_gfx_7_get_functions,
+	.gfx_8_0_get_functions = amdgpu_amdkfd_gfx_8_0_get_functions,
+	.gfx_9_0_get_functions = amdgpu_amdkfd_gfx_9_0_get_functions
+};
+#endif
+
 const struct kgd2kfd_calls *kgd2kfd;
+const struct amdgpu_amdkfd_if *amdgpu_amdkfd_if;
 bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**);
 
 static const unsigned int compute_vmid_bitmap = 0xFF00;
@@ -50,15 +64,22 @@ int amdgpu_amdkfd_init(void)
 		kgd2kfd = NULL;
 	}
 
+
 #elif defined(CONFIG_HSA_AMD)
+
 	ret = kgd2kfd_init(KFD_INTERFACE_VERSION, &kgd2kfd);
 	if (ret)
 		kgd2kfd = NULL;
 
 #else
+	amdgpu_amdkfd_if = NULL;
 	ret = -ENOENT;
 #endif
+
+#if defined(CONFIG_HSA_AMD_MODULE) || defined(CONFIG_HSA_AMD)
+	amdgpu_amdkfd_if = &amdkfd_if;
 	amdgpu_amdkfd_gpuvm_init_mem_limits();
+#endif
 
 	return ret;
 }
@@ -75,14 +96,14 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
 {
 	const struct kfd2kgd_calls *kfd2kgd;
 
-	if (!kgd2kfd)
+	if ((!kgd2kfd) || (!amdgpu_amdkfd_if))
 		return;
 
 	switch (adev->asic_type) {
 #ifdef CONFIG_DRM_AMDGPU_CIK
 	case CHIP_KAVERI:
 	case CHIP_HAWAII:
-		kfd2kgd = amdgpu_amdkfd_gfx_7_get_functions();
+		kfd2kgd = amdgpu_amdkfd_if->gfx_7_get_functions();
 		break;
 #endif
 	case CHIP_CARRIZO:
@@ -90,11 +111,11 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
 	case CHIP_FIJI:
 	case CHIP_POLARIS10:
 	case CHIP_POLARIS11:
-		kfd2kgd = amdgpu_amdkfd_gfx_8_0_get_functions();
+		kfd2kgd = amdgpu_amdkfd_if->gfx_8_0_get_functions();
 		break;
 	case CHIP_VEGA10:
 	case CHIP_RAVEN:
-		kfd2kgd = amdgpu_amdkfd_gfx_9_0_get_functions();
+		kfd2kgd = amdgpu_amdkfd_if->gfx_9_0_get_functions();
 		break;
 	default:
 		dev_dbg(adev->dev, "kfd not supported on this ASIC\n");
@@ -458,3 +479,40 @@ bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
 
 	return false;
 }
+
+bool amdgpu_amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm)
+{
+	if (!amdgpu_amdkfd_if)
+		return false;
+
+	return amdgpu_amdkfd_if->fence_check_mm(f, mm);
+}
+
+void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
+{
+	if (amdgpu_amdkfd_if)
+		amdgpu_amdkfd_if->unreserve_system_memory_limit(bo);
+}
+
+void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
+					struct amdgpu_vm *vm)
+{
+	if (amdgpu_amdkfd_if)
+		amdgpu_amdkfd_if->gpuvm_destroy_cb(adev, vm);
+}
+
+struct amdgpu_amdkfd_fence *amdgpu_amdkfd_to_kfd_fence(struct dma_fence *f)
+{
+	if (!amdgpu_amdkfd_if)
+		return NULL;
+
+	return amdgpu_amdkfd_if->to_kfd_fence(f);
+}
+
+int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm)
+{
+	if (!amdgpu_amdkfd_if)
+		return 0;
+
+	return amdgpu_amdkfd_if->evict_userptr(mem, mm);
+}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index 12367a9951e8..d40480887d49 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -79,8 +79,8 @@ struct amdgpu_amdkfd_fence {
 
 struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
 						       struct mm_struct *mm);
-bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
-struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
+bool amdgpu_amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
+struct amdgpu_amdkfd_fence *amdgpu_amdkfd_to_kfd_fence(struct dma_fence *f);
 
 struct amdkfd_process_info {
 	/* List head of all VMs that belong to a KFD process */
@@ -120,10 +120,6 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
 				uint32_t vmid, uint64_t gpu_addr,
 				uint32_t *ib_cmd, uint32_t ib_len);
 
-struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
-struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
-struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
-
 bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
 
 /* Shared API */
@@ -156,14 +152,14 @@ uint64_t amdgpu_amdkfd_get_vram_usage(struct kgd_dev *kgd);
 
 /* GPUVM API */
 int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
-					  void **process_info,
-					  struct dma_fence **ef);
+					void **process_info,
+					struct dma_fence **ef);
 int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
-					   struct file *filp,
-					   void **vm, void **process_info,
-					   struct dma_fence **ef);
+					struct file *filp,
+					void **vm, void **process_info,
+					struct dma_fence **ef);
 void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
-				    struct amdgpu_vm *vm);
+				struct amdgpu_vm *vm);
 void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm);
 uint32_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *vm);
 int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
@@ -181,9 +177,35 @@ int amdgpu_amdkfd_gpuvm_sync_memory(
 int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd,
 		struct kgd_mem *mem, void **kptr, uint64_t *size);
 int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info,
-					    struct dma_fence **ef);
+					struct dma_fence **ef);
 
 void amdgpu_amdkfd_gpuvm_init_mem_limits(void);
 void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo);
 
+/* Function pointers interface between files inside amdgpu, to allow exclusion
+ * of amdkfd files from compilation of amdgpu when amdkfd driver is not
+ * enabled
+ */
+
+bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
+void amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo);
+void amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, struct amdgpu_vm *vm);
+struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
+int amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm);
+struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
+struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
+struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
+
+struct amdgpu_amdkfd_if {
+	bool (*fence_check_mm)(struct dma_fence *f, struct mm_struct *mm);
+	void (*unreserve_system_memory_limit)(struct amdgpu_bo *bo);
+	void (*gpuvm_destroy_cb)(struct amdgpu_device *adev,
+					struct amdgpu_vm *vm);
+	struct amdgpu_amdkfd_fence* (*to_kfd_fence)(struct dma_fence *f);
+	int (*evict_userptr)(struct kgd_mem *mem, struct mm_struct *mm);
+	struct kfd2kgd_calls* (*gfx_7_get_functions)(void);
+	struct kfd2kgd_calls* (*gfx_8_0_get_functions)(void);
+	struct kfd2kgd_calls* (*gfx_9_0_get_functions)(void);
+};
+
 #endif /* AMDGPU_AMDKFD_H_INCLUDED */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 4a6515ad94f8..c1b9865a240a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -166,7 +166,7 @@ static void unreserve_system_mem_limit(struct amdgpu_device *adev,
 	spin_unlock(&kfd_mem_limit.mem_limit_lock);
 }
 
-void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
+void amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
 {
 	spin_lock(&kfd_mem_limit.mem_limit_lock);
 
@@ -1079,8 +1079,7 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
 	return 0;
 }
 
-void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
-				    struct amdgpu_vm *vm)
+void amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 {
 	struct amdkfd_process_info *process_info = vm->process_info;
 	struct amdgpu_bo *pd = vm->root.base.bo;
@@ -1625,8 +1624,7 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd,
  * restore, where we get updated page addresses. This function only
  * ensures that GPU access to the BO is stopped.
  */
-int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem,
-				struct mm_struct *mm)
+int amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm)
 {
 	struct amdkfd_process_info *process_info = mem->process_info;
 	int invalid, evicted_bos;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
index 2d6f5ec77a68..82472f080a32 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
@@ -96,7 +96,7 @@ static void *amdgpu_sync_get_owner(struct dma_fence *f)
 	if (s_fence)
 		return s_fence->owner;
 
-	kfd_fence = to_amdgpu_amdkfd_fence(f);
+	kfd_fence = amdgpu_amdkfd_to_kfd_fence(f);
 	if (kfd_fence)
 		return AMDGPU_FENCE_OWNER_KFD;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index c713d30cba86..256497940a6b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1219,7 +1219,7 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
 		for (i = 0; i < flist->shared_count; ++i) {
 			f = rcu_dereference_protected(flist->shared[i],
 				reservation_object_held(bo->resv));
-			if (amdkfd_fence_check_mm(f, current->mm))
+			if (amdgpu_amdkfd_fence_check_mm(f, current->mm))
 				return false;
 		}
 	}
-- 
2.14.3

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] drm/amdgpu: conditionally compile amdgpu's amdkfd files
       [not found] ` <20180516100948.38299-1-oded.gabbay-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2018-05-16 21:09   ` Felix Kuehling
       [not found]     ` <3595e696-9983-2372-c4c6-2c117f0160fa-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Felix Kuehling @ 2018-05-16 21:09 UTC (permalink / raw)
  To: Oded Gabbay, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Hi Oded,

Thanks for working on this! The Makefile changes look good.

Instead of checking and calling function pointers in amdgpu_amdkfd_...
functions at runtime, couldn't you just define empty stub functions in
amdgpu_amdkfd.h if KFD is not enabled? I think that would make the code
shorter and remove the runtime overhead.

Regards,
  Felix


On 2018-05-16 06:09 AM, Oded Gabbay wrote:
> In case CONFIG_HSA_AMD is not chosen, there is no need to compile amdkfd
> files that reside inside amdgpu dirver. In addition, because amdkfd
> depends on x86_64 architecture and amdgpu is not, compiling amdkfd files
> under i386 architecture can cause compiler errors and warnings.
>
> This patch modifies amdgpu's makefile to build amdkfd files only if
> CONFIG_HSA_AMD is chosen. The only file to be compiled unconditionally
> is amdgpu_amdkfd.c
>
> Direct calls from amdgpu driver proper to functions in other
> amdgpu_amdkfd_*.c files were changed to calls to functions inside
> amdgpu_amdkfd.c. These functions call the original functions using a
> function pointer to allow compilation without the original functions.
>
> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/Makefile              | 13 +++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c       | 66 ++++++++++++++++++++++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h       | 48 ++++++++++++-----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c |  8 ++-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c         |  2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c          |  2 +-
>  6 files changed, 112 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile
> index f3002020df6c..1464dff1b151 100644
> --- a/drivers/gpu/drm/amd/amdgpu/Makefile
> +++ b/drivers/gpu/drm/amd/amdgpu/Makefile
> @@ -56,8 +56,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
>  
>  # add asic specific block
>  amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o kv_smc.o kv_dpm.o \
> -	ci_smc.o ci_dpm.o dce_v8_0.o gfx_v7_0.o cik_sdma.o uvd_v4_2.o vce_v2_0.o \
> -	amdgpu_amdkfd_gfx_v7.o
> +	ci_smc.o ci_dpm.o dce_v8_0.o gfx_v7_0.o cik_sdma.o uvd_v4_2.o vce_v2_0.o
>  
>  amdgpu-$(CONFIG_DRM_AMDGPU_SI)+= si.o gmc_v6_0.o gfx_v6_0.o si_ih.o si_dma.o dce_v6_0.o si_dpm.o si_smc.o
>  
> @@ -126,13 +125,21 @@ amdgpu-y += \
>  	vcn_v1_0.o
>  
>  # add amdkfd interfaces
> +amdgpu-y += amdgpu_amdkfd.o
> +
> +ifneq ($(CONFIG_HSA_AMD),)
>  amdgpu-y += \
> -	 amdgpu_amdkfd.o \
>  	 amdgpu_amdkfd_fence.o \
>  	 amdgpu_amdkfd_gpuvm.o \
>  	 amdgpu_amdkfd_gfx_v8.o \
>  	 amdgpu_amdkfd_gfx_v9.o
>  
> +ifneq ($(CONFIG_DRM_AMDGPU_CIK),)
> +amdgpu-y += amdgpu_amdkfd_gfx_v7.o
> +endif
> +
> +endif
> +
>  # add cgs
>  amdgpu-y += amdgpu_cgs.o
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> index cd0e8f192e6a..930d27dd6e27 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -27,7 +27,21 @@
>  #include "amdgpu_gfx.h"
>  #include <linux/module.h>
>  
> +#if defined(CONFIG_HSA_AMD_MODULE) || defined(CONFIG_HSA_AMD)
> +static const struct amdgpu_amdkfd_if amdkfd_if = {
> +	.fence_check_mm = amdkfd_fence_check_mm,
> +	.unreserve_system_memory_limit = amdkfd_unreserve_system_memory_limit,
> +	.gpuvm_destroy_cb = amdkfd_gpuvm_destroy_cb,
> +	.to_kfd_fence = to_amdgpu_amdkfd_fence,
> +	.evict_userptr = amdkfd_evict_userptr,
> +	.gfx_7_get_functions = amdgpu_amdkfd_gfx_7_get_functions,
> +	.gfx_8_0_get_functions = amdgpu_amdkfd_gfx_8_0_get_functions,
> +	.gfx_9_0_get_functions = amdgpu_amdkfd_gfx_9_0_get_functions
> +};
> +#endif
> +
>  const struct kgd2kfd_calls *kgd2kfd;
> +const struct amdgpu_amdkfd_if *amdgpu_amdkfd_if;
>  bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**);
>  
>  static const unsigned int compute_vmid_bitmap = 0xFF00;
> @@ -50,15 +64,22 @@ int amdgpu_amdkfd_init(void)
>  		kgd2kfd = NULL;
>  	}
>  
> +
>  #elif defined(CONFIG_HSA_AMD)
> +
>  	ret = kgd2kfd_init(KFD_INTERFACE_VERSION, &kgd2kfd);
>  	if (ret)
>  		kgd2kfd = NULL;
>  
>  #else
> +	amdgpu_amdkfd_if = NULL;
>  	ret = -ENOENT;
>  #endif
> +
> +#if defined(CONFIG_HSA_AMD_MODULE) || defined(CONFIG_HSA_AMD)
> +	amdgpu_amdkfd_if = &amdkfd_if;
>  	amdgpu_amdkfd_gpuvm_init_mem_limits();
> +#endif
>  
>  	return ret;
>  }
> @@ -75,14 +96,14 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
>  {
>  	const struct kfd2kgd_calls *kfd2kgd;
>  
> -	if (!kgd2kfd)
> +	if ((!kgd2kfd) || (!amdgpu_amdkfd_if))
>  		return;
>  
>  	switch (adev->asic_type) {
>  #ifdef CONFIG_DRM_AMDGPU_CIK
>  	case CHIP_KAVERI:
>  	case CHIP_HAWAII:
> -		kfd2kgd = amdgpu_amdkfd_gfx_7_get_functions();
> +		kfd2kgd = amdgpu_amdkfd_if->gfx_7_get_functions();
>  		break;
>  #endif
>  	case CHIP_CARRIZO:
> @@ -90,11 +111,11 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
>  	case CHIP_FIJI:
>  	case CHIP_POLARIS10:
>  	case CHIP_POLARIS11:
> -		kfd2kgd = amdgpu_amdkfd_gfx_8_0_get_functions();
> +		kfd2kgd = amdgpu_amdkfd_if->gfx_8_0_get_functions();
>  		break;
>  	case CHIP_VEGA10:
>  	case CHIP_RAVEN:
> -		kfd2kgd = amdgpu_amdkfd_gfx_9_0_get_functions();
> +		kfd2kgd = amdgpu_amdkfd_if->gfx_9_0_get_functions();
>  		break;
>  	default:
>  		dev_dbg(adev->dev, "kfd not supported on this ASIC\n");
> @@ -458,3 +479,40 @@ bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
>  
>  	return false;
>  }
> +
> +bool amdgpu_amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm)
> +{
> +	if (!amdgpu_amdkfd_if)
> +		return false;
> +
> +	return amdgpu_amdkfd_if->fence_check_mm(f, mm);
> +}
> +
> +void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
> +{
> +	if (amdgpu_amdkfd_if)
> +		amdgpu_amdkfd_if->unreserve_system_memory_limit(bo);
> +}
> +
> +void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
> +					struct amdgpu_vm *vm)
> +{
> +	if (amdgpu_amdkfd_if)
> +		amdgpu_amdkfd_if->gpuvm_destroy_cb(adev, vm);
> +}
> +
> +struct amdgpu_amdkfd_fence *amdgpu_amdkfd_to_kfd_fence(struct dma_fence *f)
> +{
> +	if (!amdgpu_amdkfd_if)
> +		return NULL;
> +
> +	return amdgpu_amdkfd_if->to_kfd_fence(f);
> +}
> +
> +int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm)
> +{
> +	if (!amdgpu_amdkfd_if)
> +		return 0;
> +
> +	return amdgpu_amdkfd_if->evict_userptr(mem, mm);
> +}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> index 12367a9951e8..d40480887d49 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -79,8 +79,8 @@ struct amdgpu_amdkfd_fence {
>  
>  struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
>  						       struct mm_struct *mm);
> -bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
> -struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
> +bool amdgpu_amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
> +struct amdgpu_amdkfd_fence *amdgpu_amdkfd_to_kfd_fence(struct dma_fence *f);
>  
>  struct amdkfd_process_info {
>  	/* List head of all VMs that belong to a KFD process */
> @@ -120,10 +120,6 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
>  				uint32_t vmid, uint64_t gpu_addr,
>  				uint32_t *ib_cmd, uint32_t ib_len);
>  
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
> -
>  bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
>  
>  /* Shared API */
> @@ -156,14 +152,14 @@ uint64_t amdgpu_amdkfd_get_vram_usage(struct kgd_dev *kgd);
>  
>  /* GPUVM API */
>  int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
> -					  void **process_info,
> -					  struct dma_fence **ef);
> +					void **process_info,
> +					struct dma_fence **ef);
>  int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
> -					   struct file *filp,
> -					   void **vm, void **process_info,
> -					   struct dma_fence **ef);
> +					struct file *filp,
> +					void **vm, void **process_info,
> +					struct dma_fence **ef);
>  void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
> -				    struct amdgpu_vm *vm);
> +				struct amdgpu_vm *vm);
>  void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm);
>  uint32_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *vm);
>  int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
> @@ -181,9 +177,35 @@ int amdgpu_amdkfd_gpuvm_sync_memory(
>  int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd,
>  		struct kgd_mem *mem, void **kptr, uint64_t *size);
>  int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info,
> -					    struct dma_fence **ef);
> +					struct dma_fence **ef);
>  
>  void amdgpu_amdkfd_gpuvm_init_mem_limits(void);
>  void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo);
>  
> +/* Function pointers interface between files inside amdgpu, to allow exclusion
> + * of amdkfd files from compilation of amdgpu when amdkfd driver is not
> + * enabled
> + */
> +
> +bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
> +void amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo);
> +void amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, struct amdgpu_vm *vm);
> +struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
> +int amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm);
> +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
> +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
> +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
> +
> +struct amdgpu_amdkfd_if {
> +	bool (*fence_check_mm)(struct dma_fence *f, struct mm_struct *mm);
> +	void (*unreserve_system_memory_limit)(struct amdgpu_bo *bo);
> +	void (*gpuvm_destroy_cb)(struct amdgpu_device *adev,
> +					struct amdgpu_vm *vm);
> +	struct amdgpu_amdkfd_fence* (*to_kfd_fence)(struct dma_fence *f);
> +	int (*evict_userptr)(struct kgd_mem *mem, struct mm_struct *mm);
> +	struct kfd2kgd_calls* (*gfx_7_get_functions)(void);
> +	struct kfd2kgd_calls* (*gfx_8_0_get_functions)(void);
> +	struct kfd2kgd_calls* (*gfx_9_0_get_functions)(void);
> +};
> +
>  #endif /* AMDGPU_AMDKFD_H_INCLUDED */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index 4a6515ad94f8..c1b9865a240a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -166,7 +166,7 @@ static void unreserve_system_mem_limit(struct amdgpu_device *adev,
>  	spin_unlock(&kfd_mem_limit.mem_limit_lock);
>  }
>  
> -void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
> +void amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
>  {
>  	spin_lock(&kfd_mem_limit.mem_limit_lock);
>  
> @@ -1079,8 +1079,7 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
>  	return 0;
>  }
>  
> -void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
> -				    struct amdgpu_vm *vm)
> +void amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>  {
>  	struct amdkfd_process_info *process_info = vm->process_info;
>  	struct amdgpu_bo *pd = vm->root.base.bo;
> @@ -1625,8 +1624,7 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd,
>   * restore, where we get updated page addresses. This function only
>   * ensures that GPU access to the BO is stopped.
>   */
> -int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem,
> -				struct mm_struct *mm)
> +int amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm)
>  {
>  	struct amdkfd_process_info *process_info = mem->process_info;
>  	int invalid, evicted_bos;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> index 2d6f5ec77a68..82472f080a32 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> @@ -96,7 +96,7 @@ static void *amdgpu_sync_get_owner(struct dma_fence *f)
>  	if (s_fence)
>  		return s_fence->owner;
>  
> -	kfd_fence = to_amdgpu_amdkfd_fence(f);
> +	kfd_fence = amdgpu_amdkfd_to_kfd_fence(f);
>  	if (kfd_fence)
>  		return AMDGPU_FENCE_OWNER_KFD;
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index c713d30cba86..256497940a6b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1219,7 +1219,7 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
>  		for (i = 0; i < flist->shared_count; ++i) {
>  			f = rcu_dereference_protected(flist->shared[i],
>  				reservation_object_held(bo->resv));
> -			if (amdkfd_fence_check_mm(f, current->mm))
> +			if (amdgpu_amdkfd_fence_check_mm(f, current->mm))
>  				return false;
>  		}
>  	}

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] drm/amdgpu: conditionally compile amdgpu's amdkfd files
       [not found]     ` <3595e696-9983-2372-c4c6-2c117f0160fa-5C7GfCeVMHo@public.gmane.org>
@ 2018-05-18 18:40       ` Oded Gabbay
  0 siblings, 0 replies; 3+ messages in thread
From: Oded Gabbay @ 2018-05-18 18:40 UTC (permalink / raw)
  To: Felix Kuehling; +Cc: amd-gfx list

On Thu, May 17, 2018 at 12:09 AM, Felix Kuehling <felix.kuehling@amd.com> wrote:
> Hi Oded,
>
> Thanks for working on this! The Makefile changes look good.
>
> Instead of checking and calling function pointers in amdgpu_amdkfd_...
> functions at runtime, couldn't you just define empty stub functions in
> amdgpu_amdkfd.h if KFD is not enabled? I think that would make the code
> shorter and remove the runtime overhead.
>
> Regards,
>   Felix

Yes, I can definitely do that. I agree it would be better.

Oded

>
>
> On 2018-05-16 06:09 AM, Oded Gabbay wrote:
>> In case CONFIG_HSA_AMD is not chosen, there is no need to compile amdkfd
>> files that reside inside amdgpu dirver. In addition, because amdkfd
>> depends on x86_64 architecture and amdgpu is not, compiling amdkfd files
>> under i386 architecture can cause compiler errors and warnings.
>>
>> This patch modifies amdgpu's makefile to build amdkfd files only if
>> CONFIG_HSA_AMD is chosen. The only file to be compiled unconditionally
>> is amdgpu_amdkfd.c
>>
>> Direct calls from amdgpu driver proper to functions in other
>> amdgpu_amdkfd_*.c files were changed to calls to functions inside
>> amdgpu_amdkfd.c. These functions call the original functions using a
>> function pointer to allow compilation without the original functions.
>>
>> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
>> ---
>>  drivers/gpu/drm/amd/amdgpu/Makefile              | 13 +++--
>>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c       | 66 ++++++++++++++++++++++--
>>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h       | 48 ++++++++++++-----
>>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c |  8 ++-
>>  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c         |  2 +-
>>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c          |  2 +-
>>  6 files changed, 112 insertions(+), 27 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile
>> index f3002020df6c..1464dff1b151 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/Makefile
>> +++ b/drivers/gpu/drm/amd/amdgpu/Makefile
>> @@ -56,8 +56,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
>>
>>  # add asic specific block
>>  amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o kv_smc.o kv_dpm.o \
>> -     ci_smc.o ci_dpm.o dce_v8_0.o gfx_v7_0.o cik_sdma.o uvd_v4_2.o vce_v2_0.o \
>> -     amdgpu_amdkfd_gfx_v7.o
>> +     ci_smc.o ci_dpm.o dce_v8_0.o gfx_v7_0.o cik_sdma.o uvd_v4_2.o vce_v2_0.o
>>
>>  amdgpu-$(CONFIG_DRM_AMDGPU_SI)+= si.o gmc_v6_0.o gfx_v6_0.o si_ih.o si_dma.o dce_v6_0.o si_dpm.o si_smc.o
>>
>> @@ -126,13 +125,21 @@ amdgpu-y += \
>>       vcn_v1_0.o
>>
>>  # add amdkfd interfaces
>> +amdgpu-y += amdgpu_amdkfd.o
>> +
>> +ifneq ($(CONFIG_HSA_AMD),)
>>  amdgpu-y += \
>> -      amdgpu_amdkfd.o \
>>        amdgpu_amdkfd_fence.o \
>>        amdgpu_amdkfd_gpuvm.o \
>>        amdgpu_amdkfd_gfx_v8.o \
>>        amdgpu_amdkfd_gfx_v9.o
>>
>> +ifneq ($(CONFIG_DRM_AMDGPU_CIK),)
>> +amdgpu-y += amdgpu_amdkfd_gfx_v7.o
>> +endif
>> +
>> +endif
>> +
>>  # add cgs
>>  amdgpu-y += amdgpu_cgs.o
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> index cd0e8f192e6a..930d27dd6e27 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> @@ -27,7 +27,21 @@
>>  #include "amdgpu_gfx.h"
>>  #include <linux/module.h>
>>
>> +#if defined(CONFIG_HSA_AMD_MODULE) || defined(CONFIG_HSA_AMD)
>> +static const struct amdgpu_amdkfd_if amdkfd_if = {
>> +     .fence_check_mm = amdkfd_fence_check_mm,
>> +     .unreserve_system_memory_limit = amdkfd_unreserve_system_memory_limit,
>> +     .gpuvm_destroy_cb = amdkfd_gpuvm_destroy_cb,
>> +     .to_kfd_fence = to_amdgpu_amdkfd_fence,
>> +     .evict_userptr = amdkfd_evict_userptr,
>> +     .gfx_7_get_functions = amdgpu_amdkfd_gfx_7_get_functions,
>> +     .gfx_8_0_get_functions = amdgpu_amdkfd_gfx_8_0_get_functions,
>> +     .gfx_9_0_get_functions = amdgpu_amdkfd_gfx_9_0_get_functions
>> +};
>> +#endif
>> +
>>  const struct kgd2kfd_calls *kgd2kfd;
>> +const struct amdgpu_amdkfd_if *amdgpu_amdkfd_if;
>>  bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**);
>>
>>  static const unsigned int compute_vmid_bitmap = 0xFF00;
>> @@ -50,15 +64,22 @@ int amdgpu_amdkfd_init(void)
>>               kgd2kfd = NULL;
>>       }
>>
>> +
>>  #elif defined(CONFIG_HSA_AMD)
>> +
>>       ret = kgd2kfd_init(KFD_INTERFACE_VERSION, &kgd2kfd);
>>       if (ret)
>>               kgd2kfd = NULL;
>>
>>  #else
>> +     amdgpu_amdkfd_if = NULL;
>>       ret = -ENOENT;
>>  #endif
>> +
>> +#if defined(CONFIG_HSA_AMD_MODULE) || defined(CONFIG_HSA_AMD)
>> +     amdgpu_amdkfd_if = &amdkfd_if;
>>       amdgpu_amdkfd_gpuvm_init_mem_limits();
>> +#endif
>>
>>       return ret;
>>  }
>> @@ -75,14 +96,14 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
>>  {
>>       const struct kfd2kgd_calls *kfd2kgd;
>>
>> -     if (!kgd2kfd)
>> +     if ((!kgd2kfd) || (!amdgpu_amdkfd_if))
>>               return;
>>
>>       switch (adev->asic_type) {
>>  #ifdef CONFIG_DRM_AMDGPU_CIK
>>       case CHIP_KAVERI:
>>       case CHIP_HAWAII:
>> -             kfd2kgd = amdgpu_amdkfd_gfx_7_get_functions();
>> +             kfd2kgd = amdgpu_amdkfd_if->gfx_7_get_functions();
>>               break;
>>  #endif
>>       case CHIP_CARRIZO:
>> @@ -90,11 +111,11 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
>>       case CHIP_FIJI:
>>       case CHIP_POLARIS10:
>>       case CHIP_POLARIS11:
>> -             kfd2kgd = amdgpu_amdkfd_gfx_8_0_get_functions();
>> +             kfd2kgd = amdgpu_amdkfd_if->gfx_8_0_get_functions();
>>               break;
>>       case CHIP_VEGA10:
>>       case CHIP_RAVEN:
>> -             kfd2kgd = amdgpu_amdkfd_gfx_9_0_get_functions();
>> +             kfd2kgd = amdgpu_amdkfd_if->gfx_9_0_get_functions();
>>               break;
>>       default:
>>               dev_dbg(adev->dev, "kfd not supported on this ASIC\n");
>> @@ -458,3 +479,40 @@ bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
>>
>>       return false;
>>  }
>> +
>> +bool amdgpu_amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm)
>> +{
>> +     if (!amdgpu_amdkfd_if)
>> +             return false;
>> +
>> +     return amdgpu_amdkfd_if->fence_check_mm(f, mm);
>> +}
>> +
>> +void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
>> +{
>> +     if (amdgpu_amdkfd_if)
>> +             amdgpu_amdkfd_if->unreserve_system_memory_limit(bo);
>> +}
>> +
>> +void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
>> +                                     struct amdgpu_vm *vm)
>> +{
>> +     if (amdgpu_amdkfd_if)
>> +             amdgpu_amdkfd_if->gpuvm_destroy_cb(adev, vm);
>> +}
>> +
>> +struct amdgpu_amdkfd_fence *amdgpu_amdkfd_to_kfd_fence(struct dma_fence *f)
>> +{
>> +     if (!amdgpu_amdkfd_if)
>> +             return NULL;
>> +
>> +     return amdgpu_amdkfd_if->to_kfd_fence(f);
>> +}
>> +
>> +int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm)
>> +{
>> +     if (!amdgpu_amdkfd_if)
>> +             return 0;
>> +
>> +     return amdgpu_amdkfd_if->evict_userptr(mem, mm);
>> +}
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
>> index 12367a9951e8..d40480887d49 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
>> @@ -79,8 +79,8 @@ struct amdgpu_amdkfd_fence {
>>
>>  struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
>>                                                      struct mm_struct *mm);
>> -bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
>> -struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
>> +bool amdgpu_amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
>> +struct amdgpu_amdkfd_fence *amdgpu_amdkfd_to_kfd_fence(struct dma_fence *f);
>>
>>  struct amdkfd_process_info {
>>       /* List head of all VMs that belong to a KFD process */
>> @@ -120,10 +120,6 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
>>                               uint32_t vmid, uint64_t gpu_addr,
>>                               uint32_t *ib_cmd, uint32_t ib_len);
>>
>> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
>> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
>> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
>> -
>>  bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
>>
>>  /* Shared API */
>> @@ -156,14 +152,14 @@ uint64_t amdgpu_amdkfd_get_vram_usage(struct kgd_dev *kgd);
>>
>>  /* GPUVM API */
>>  int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, void **vm,
>> -                                       void **process_info,
>> -                                       struct dma_fence **ef);
>> +                                     void **process_info,
>> +                                     struct dma_fence **ef);
>>  int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
>> -                                        struct file *filp,
>> -                                        void **vm, void **process_info,
>> -                                        struct dma_fence **ef);
>> +                                     struct file *filp,
>> +                                     void **vm, void **process_info,
>> +                                     struct dma_fence **ef);
>>  void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
>> -                                 struct amdgpu_vm *vm);
>> +                             struct amdgpu_vm *vm);
>>  void amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm);
>>  uint32_t amdgpu_amdkfd_gpuvm_get_process_page_dir(void *vm);
>>  int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>> @@ -181,9 +177,35 @@ int amdgpu_amdkfd_gpuvm_sync_memory(
>>  int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd,
>>               struct kgd_mem *mem, void **kptr, uint64_t *size);
>>  int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info,
>> -                                         struct dma_fence **ef);
>> +                                     struct dma_fence **ef);
>>
>>  void amdgpu_amdkfd_gpuvm_init_mem_limits(void);
>>  void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo);
>>
>> +/* Function pointers interface between files inside amdgpu, to allow exclusion
>> + * of amdkfd files from compilation of amdgpu when amdkfd driver is not
>> + * enabled
>> + */
>> +
>> +bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
>> +void amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo);
>> +void amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, struct amdgpu_vm *vm);
>> +struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
>> +int amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm);
>> +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
>> +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
>> +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
>> +
>> +struct amdgpu_amdkfd_if {
>> +     bool (*fence_check_mm)(struct dma_fence *f, struct mm_struct *mm);
>> +     void (*unreserve_system_memory_limit)(struct amdgpu_bo *bo);
>> +     void (*gpuvm_destroy_cb)(struct amdgpu_device *adev,
>> +                                     struct amdgpu_vm *vm);
>> +     struct amdgpu_amdkfd_fence* (*to_kfd_fence)(struct dma_fence *f);
>> +     int (*evict_userptr)(struct kgd_mem *mem, struct mm_struct *mm);
>> +     struct kfd2kgd_calls* (*gfx_7_get_functions)(void);
>> +     struct kfd2kgd_calls* (*gfx_8_0_get_functions)(void);
>> +     struct kfd2kgd_calls* (*gfx_9_0_get_functions)(void);
>> +};
>> +
>>  #endif /* AMDGPU_AMDKFD_H_INCLUDED */
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> index 4a6515ad94f8..c1b9865a240a 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> @@ -166,7 +166,7 @@ static void unreserve_system_mem_limit(struct amdgpu_device *adev,
>>       spin_unlock(&kfd_mem_limit.mem_limit_lock);
>>  }
>>
>> -void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
>> +void amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo)
>>  {
>>       spin_lock(&kfd_mem_limit.mem_limit_lock);
>>
>> @@ -1079,8 +1079,7 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
>>       return 0;
>>  }
>>
>> -void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
>> -                                 struct amdgpu_vm *vm)
>> +void amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>>  {
>>       struct amdkfd_process_info *process_info = vm->process_info;
>>       struct amdgpu_bo *pd = vm->root.base.bo;
>> @@ -1625,8 +1624,7 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd,
>>   * restore, where we get updated page addresses. This function only
>>   * ensures that GPU access to the BO is stopped.
>>   */
>> -int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem,
>> -                             struct mm_struct *mm)
>> +int amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm)
>>  {
>>       struct amdkfd_process_info *process_info = mem->process_info;
>>       int invalid, evicted_bos;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
>> index 2d6f5ec77a68..82472f080a32 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
>> @@ -96,7 +96,7 @@ static void *amdgpu_sync_get_owner(struct dma_fence *f)
>>       if (s_fence)
>>               return s_fence->owner;
>>
>> -     kfd_fence = to_amdgpu_amdkfd_fence(f);
>> +     kfd_fence = amdgpu_amdkfd_to_kfd_fence(f);
>>       if (kfd_fence)
>>               return AMDGPU_FENCE_OWNER_KFD;
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> index c713d30cba86..256497940a6b 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> @@ -1219,7 +1219,7 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
>>               for (i = 0; i < flist->shared_count; ++i) {
>>                       f = rcu_dereference_protected(flist->shared[i],
>>                               reservation_object_held(bo->resv));
>> -                     if (amdkfd_fence_check_mm(f, current->mm))
>> +                     if (amdgpu_amdkfd_fence_check_mm(f, current->mm))
>>                               return false;
>>               }
>>       }
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-05-18 18:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-16 10:09 [PATCH] drm/amdgpu: conditionally compile amdgpu's amdkfd files Oded Gabbay
     [not found] ` <20180516100948.38299-1-oded.gabbay-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-05-16 21:09   ` Felix Kuehling
     [not found]     ` <3595e696-9983-2372-c4c6-2c117f0160fa-5C7GfCeVMHo@public.gmane.org>
2018-05-18 18:40       ` Oded Gabbay

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox