amdkfd: Add module parameter of scheduling policy
This patch adds a new parameter to the amdkfd driver. This parameter enables the user to select the scheduling policy of the CP. The choices are: * CP Scheduling with support for over-subscription * CP Scheduling without support for over-subscription * Without CP Scheduling Note that the third option (Without CP scheduling) is only for debug purposes and bringup of new H/W. As such, it is _not_ guaranteed to work at all times on all H/W versions. v3: Fixed description of parameter, changed the permissions to read_only, added a verification of the value and added documentation v5: Set default sched_policy to HWS as it is now supported by firmware Signed-off-by: Ben Goz <ben.goz@amd.com> Signed-off-by: Oded Gabbay <oded.gabbay@amd.com>
This commit is contained in:
parent
ed6e6a3487
commit
31c21fece7
|
@ -45,6 +45,11 @@ static const struct kgd2kfd_calls kgd2kfd = {
|
||||||
.resume = kgd2kfd_resume,
|
.resume = kgd2kfd_resume,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int sched_policy = KFD_SCHED_POLICY_HWS;
|
||||||
|
module_param(sched_policy, int, 0444);
|
||||||
|
MODULE_PARM_DESC(sched_policy,
|
||||||
|
"Kernel cmdline parameter that defines the amdkfd scheduling policy");
|
||||||
|
|
||||||
int max_num_of_processes = KFD_MAX_NUM_OF_PROCESSES_DEFAULT;
|
int max_num_of_processes = KFD_MAX_NUM_OF_PROCESSES_DEFAULT;
|
||||||
module_param(max_num_of_processes, int, 0444);
|
module_param(max_num_of_processes, int, 0444);
|
||||||
MODULE_PARM_DESC(max_num_of_processes,
|
MODULE_PARM_DESC(max_num_of_processes,
|
||||||
|
@ -87,6 +92,13 @@ static int __init kfd_module_init(void)
|
||||||
|
|
||||||
kfd2kgd = NULL;
|
kfd2kgd = NULL;
|
||||||
|
|
||||||
|
/* Verify module parameters */
|
||||||
|
if ((sched_policy < KFD_SCHED_POLICY_HWS) ||
|
||||||
|
(sched_policy > KFD_SCHED_POLICY_NO_HWS)) {
|
||||||
|
pr_err("kfd: sched_policy has invalid value\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Verify module parameters */
|
/* Verify module parameters */
|
||||||
if ((max_num_of_processes < 0) ||
|
if ((max_num_of_processes < 0) ||
|
||||||
(max_num_of_processes > KFD_MAX_NUM_OF_PROCESSES)) {
|
(max_num_of_processes > KFD_MAX_NUM_OF_PROCESSES)) {
|
||||||
|
|
|
@ -69,6 +69,36 @@ extern int max_num_of_queues_per_process;
|
||||||
|
|
||||||
#define KFD_KERNEL_QUEUE_SIZE 2048
|
#define KFD_KERNEL_QUEUE_SIZE 2048
|
||||||
|
|
||||||
|
/* Kernel module parameter to specify the scheduling policy */
|
||||||
|
extern int sched_policy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 {
|
enum cache_policy {
|
||||||
cache_policy_coherent,
|
cache_policy_coherent,
|
||||||
cache_policy_noncoherent
|
cache_policy_noncoherent
|
||||||
|
|
Loading…
Reference in New Issue