On 2018-08-29 10:42 AM, Amber Lin wrote: > Move some KFD-related (but used in amdgpu_drv.c) definitions from > kfd_priv.h to kgd_kfd_interface.h so we don't need to include kfd_priv.h > in amdgpu_drv.c. This fixes a build failure when AMDGPU is enabled but > MMU_NOTIFIER is not. > This patch also disables KFD-related module options when HSA_AMD is not > enabled. > > Signed-off-by: Amber Lin <Amber.Lin at amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 20 +++++++++--------- > drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 28 ------------------------- > drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 28 +++++++++++++++++++++++++ > 3 files changed, 38 insertions(+), 38 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > index dd6d8b1..e4d0d72 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > @@ -39,7 +39,6 @@ > #include "amdgpu_gem.h" > > #include "amdgpu_amdkfd.h" > -#include "kfd_priv.h" > > /* > * KMS wrapper. > @@ -128,15 +127,6 @@ int amdgpu_compute_multipipe = -1; > int amdgpu_gpu_recovery = -1; /* auto */ > int amdgpu_emu_mode = 0; > uint amdgpu_smu_memory_pool_size = 0; > -/* KFD parameters */ > -int sched_policy = KFD_SCHED_POLICY_HWS; > -int hws_max_conc_proc = 8; > -int cwsr_enable = 1; > -int max_num_of_queues_per_device = KFD_MAX_NUM_OF_QUEUES_PER_DEVICE_DEFAULT; > -int send_sigterm; > -int debug_largebar; > -int ignore_crat; > -int vega10_noretry; > > /** > * DOC: vramlimit (int) > @@ -542,12 +532,14 @@ MODULE_PARM_DESC(smu_memory_pool_size, > "0x1 = 256Mbyte, 0x2 = 512Mbyte, 0x4 = 1 Gbyte, 0x8 = 2GByte"); > module_param_named(smu_memory_pool_size, amdgpu_smu_memory_pool_size, uint, 0444); > > +#ifdef CONFIG_HSA_AMD > /** > * DOC: sched_policy (int) > * Set scheduling policy. Default is HWS(hardware scheduling) with over-subscription. > * Setting 1 disables over-subscription. Setting 2 disables HWS and statically > * assigns queues to HQDs. > */ > +int sched_policy = KFD_SCHED_POLICY_HWS; > module_param(sched_policy, int, 0444); > MODULE_PARM_DESC(sched_policy, > "Scheduling policy (0 = HWS (Default), 1 = HWS without over-subscription, 2 = Non-HWS (Used for debugging only)"); > @@ -557,6 +549,7 @@ MODULE_PARM_DESC(sched_policy, > * Maximum number of processes that HWS can schedule concurrently. The maximum is the > * number of VMIDs assigned to the HWS, which is also the default. > */ > +int hws_max_conc_proc = 8; > module_param(hws_max_conc_proc, int, 0444); > MODULE_PARM_DESC(hws_max_conc_proc, > "Max # processes HWS can execute concurrently when sched_policy=0 (0 = no concurrency, #VMIDs for KFD = Maximum(default))"); > @@ -567,6 +560,7 @@ MODULE_PARM_DESC(hws_max_conc_proc, > * the middle of a compute wave. Default is 1 to enable this feature. Setting 0 > * disables it. > */ > +int cwsr_enable = 1; > module_param(cwsr_enable, int, 0444); > MODULE_PARM_DESC(cwsr_enable, "CWSR enable (0 = Off, 1 = On (Default))"); > > @@ -575,6 +569,7 @@ MODULE_PARM_DESC(cwsr_enable, "CWSR enable (0 = Off, 1 = On (Default))"); > * Maximum number of queues per device. Valid setting is between 1 and 4096. Default > * is 4096. > */ > +int max_num_of_queues_per_device = KFD_MAX_NUM_OF_QUEUES_PER_DEVICE_DEFAULT; > module_param(max_num_of_queues_per_device, int, 0444); > MODULE_PARM_DESC(max_num_of_queues_per_device, > "Maximum number of supported queues per device (1 = Minimum, 4096 = default)"); > @@ -584,6 +579,7 @@ MODULE_PARM_DESC(max_num_of_queues_per_device, > * Send sigterm to HSA process on unhandled exceptions. Default is not to send sigterm > * but just print errors on dmesg. Setting 1 enables sending sigterm. > */ > +int send_sigterm; > module_param(send_sigterm, int, 0444); > MODULE_PARM_DESC(send_sigterm, > "Send sigterm to HSA process on unhandled exception (0 = disable, 1 = enable)"); > @@ -595,6 +591,7 @@ MODULE_PARM_DESC(send_sigterm, > * size, usually 256MB. > * Default value is 0, diabled. > */ > +int debug_largebar; > module_param(debug_largebar, int, 0444); > MODULE_PARM_DESC(debug_largebar, > "Debug large-bar flag used to simulate large-bar capability on non-large bar machine (0 = disable, 1 = enable)"); > @@ -605,6 +602,7 @@ MODULE_PARM_DESC(debug_largebar, > * table to get information about AMD APUs. This option can serve as a workaround on > * systems with a broken CRAT table. > */ > +int ignore_crat; > module_param(ignore_crat, int, 0444); > MODULE_PARM_DESC(ignore_crat, > "Ignore CRAT table during KFD initialization (0 = use CRAT (default), 1 = ignore CRAT)"); > @@ -615,9 +613,11 @@ MODULE_PARM_DESC(ignore_crat, > * Setting 1 disables retry. > * Retry is needed for recoverable page faults. > */ > +int vega10_noretry; > module_param_named(noretry, vega10_noretry, int, 0644); > MODULE_PARM_DESC(noretry, > "Set sh_mem_config.retry_disable on Vega10 (0 = retry enabled (default), 1 = retry disabled)"); > +#endif > > static const struct pci_device_id pciidlist[] = { > #ifdef CONFIG_DRM_AMDGPU_SI > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h > index 5e3990b..2df3ed4 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h > @@ -103,7 +103,6 @@ > */ > extern int max_num_of_queues_per_device; > > -#define KFD_MAX_NUM_OF_QUEUES_PER_DEVICE_DEFAULT 4096 > #define KFD_MAX_NUM_OF_QUEUES_PER_DEVICE \ > (KFD_MAX_NUM_OF_PROCESSES * \ > KFD_MAX_NUM_OF_QUEUES_PER_PROCESS) > @@ -144,33 +143,6 @@ extern int ignore_crat; > */ > extern int vega10_noretry; > > -/** > - * enum kfd_sched_policy > - * > - * @KFD_SCHED_POLICY_HWS: H/W scheduling policy known as command processor (cp) > - * scheduling. In this scheduling mode we're using the firmware code to > - * schedule the user mode queues and kernel queues such as HIQ and DIQ. > - * the HIQ queue is used as a special queue that dispatches the configuration > - * to the cp and the user mode queues list that are currently running. > - * the DIQ queue is a debugging queue that dispatches debugging commands to the > - * firmware. > - * in this scheduling mode user mode queues over subscription feature is > - * enabled. > - * > - * @KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION: The same as above but the over > - * subscription feature disabled. > - * > - * @KFD_SCHED_POLICY_NO_HWS: no H/W scheduling policy is a mode which directly > - * set the command processor registers and sets the queues "manually". This > - * mode is used *ONLY* for debugging proposes. > - * > - */ > -enum kfd_sched_policy { > - KFD_SCHED_POLICY_HWS = 0, > - KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION, > - KFD_SCHED_POLICY_NO_HWS > -}; > - > enum cache_policy { > cache_policy_coherent, > cache_policy_noncoherent > diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h > index 8fdd032..c145193 100644 > --- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h > +++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h > @@ -87,6 +87,33 @@ enum kgd_engine_type { > KGD_ENGINE_MAX > }; > > +/** > + * enum kfd_sched_policy > + * > + * @KFD_SCHED_POLICY_HWS: H/W scheduling policy known as command processor (cp) > + * scheduling. In this scheduling mode we're using the firmware code to > + * schedule the user mode queues and kernel queues such as HIQ and DIQ. > + * the HIQ queue is used as a special queue that dispatches the configuration > + * to the cp and the user mode queues list that are currently running. > + * the DIQ queue is a debugging queue that dispatches debugging commands to the > + * firmware. > + * in this scheduling mode user mode queues over subscription feature is > + * enabled. > + * > + * @KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION: The same as above but the over > + * subscription feature disabled. > + * > + * @KFD_SCHED_POLICY_NO_HWS: no H/W scheduling policy is a mode which directly > + * set the command processor registers and sets the queues "manually". This > + * mode is used *ONLY* for debugging proposes. > + * > + */ > +enum kfd_sched_policy { > + KFD_SCHED_POLICY_HWS = 0, > + KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION, > + KFD_SCHED_POLICY_NO_HWS > +}; > + > struct kgd2kfd_shared_resources { > /* Bit n == 1 means VMID n is available for KFD. */ > unsigned int compute_vmid_bitmap; > @@ -142,6 +169,7 @@ struct tile_config { > uint32_t num_ranks; > }; > > +#define KFD_MAX_NUM_OF_QUEUES_PER_DEVICE_DEFAULT 4096 > > /* > * Allocation flag domains