]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
amdkfd: Add module parameter of scheduling policy
authorBen Goz <ben.goz@amd.com>
Wed, 16 Jul 2014 21:48:28 +0000 (00:48 +0300)
committerOded Gabbay <oded.gabbay@amd.com>
Wed, 16 Jul 2014 21:48:28 +0000 (00:48 +0300)
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>
drivers/gpu/drm/amd/amdkfd/kfd_module.c
drivers/gpu/drm/amd/amdkfd/kfd_priv.h

index a05116b0a07d5648787714b3a87b4ac7fd12ef15..95d5af138e6e7f2bcbd8d76351f7e12827031189 100644 (file)
@@ -45,6 +45,11 @@ static const struct kgd2kfd_calls kgd2kfd = {
        .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;
 module_param(max_num_of_processes, int, 0444);
 MODULE_PARM_DESC(max_num_of_processes,
@@ -87,6 +92,13 @@ static int __init kfd_module_init(void)
 
        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 */
        if ((max_num_of_processes < 0) ||
                (max_num_of_processes > KFD_MAX_NUM_OF_PROCESSES)) {
index bba3c2ada261110ebec8bb2ef3bd6d67c457301f..32bca8a674235bc472de47ab34760039253acc37 100644 (file)
@@ -69,6 +69,36 @@ extern int max_num_of_queues_per_process;
 
 #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 {
        cache_policy_coherent,
        cache_policy_noncoherent