On 2018-05-18 05:57 PM, 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 > > There are stub functions that are compiled only if amdkfd is not > compiled. In that case, calls from amdgpu driver proper will go to those > functions instead of the real functions. > > v2: instead of using function pointers, use stub functions > > v3: initialize kgd2kfd to NULL in case amdkfd is not compiled > > Signed-off-by: Oded Gabbay <oded.gabbay at gmail.com> Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com> Thanks, Â Felix > --- > drivers/gpu/drm/amd/amdgpu/Makefile | 13 +++++++-- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 47 ++++++++++++++++++++++++++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 12 ++++---- > 3 files changed, 63 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile > index 68e9f584c570..e03ee41cedcb 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 > > @@ -130,13 +129,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 bd36ee9f7e6d..95fcbd8a4bf3 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > @@ -50,15 +50,21 @@ int amdgpu_amdkfd_init(void) > kgd2kfd = NULL; > } > > + > #elif defined(CONFIG_HSA_AMD) > + > ret = kgd2kfd_init(KFD_INTERFACE_VERSION, &kgd2kfd); > if (ret) > kgd2kfd = NULL; > > #else > + kgd2kfd = NULL; > ret = -ENOENT; > #endif > + > +#if defined(CONFIG_HSA_AMD_MODULE) || defined(CONFIG_HSA_AMD) > amdgpu_amdkfd_gpuvm_init_mem_limits(); > +#endif > > return ret; > } > @@ -464,3 +470,44 @@ bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid) > > return false; > } > + > +#if !defined(CONFIG_HSA_AMD_MODULE) && !defined(CONFIG_HSA_AMD) > +bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm) > +{ > + return false; > +} > + > +void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo) > +{ > +} > + > +void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, > + struct amdgpu_vm *vm) > +{ > +} > + > +struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f) > +{ > + return NULL; > +} > + > +int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm) > +{ > + return 0; > +} > + > +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void) > +{ > + return NULL; > +} > + > +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void) > +{ > + return NULL; > +} > + > +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void) > +{ > + return NULL; > +} > +#endif > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h > index 12367a9951e8..a8418a3f4e9d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h > @@ -156,14 +156,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(