Commit 1333f723 authored by Jammy Zhou's avatar Jammy Zhou Committed by Alex Deucher

drm/amdgpu: add amdgpu.sched_jobs option

This option can be used to specify the max job number in the job queue,
and it is 16 by default.
Signed-off-by: default avatarJammy Zhou <Jammy.Zhou@amd.com>
Reviewed-by: default avatarChunming Zhou <david1.zhou@amd.com>
parent c0044bc2
...@@ -80,6 +80,7 @@ extern int amdgpu_deep_color; ...@@ -80,6 +80,7 @@ extern int amdgpu_deep_color;
extern int amdgpu_vm_size; extern int amdgpu_vm_size;
extern int amdgpu_vm_block_size; extern int amdgpu_vm_block_size;
extern int amdgpu_enable_scheduler; extern int amdgpu_enable_scheduler;
extern int amdgpu_sched_jobs;
#define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000
#define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */
......
...@@ -105,7 +105,8 @@ int amdgpu_ctx_alloc(struct amdgpu_device *adev, struct amdgpu_fpriv *fpriv, ...@@ -105,7 +105,8 @@ int amdgpu_ctx_alloc(struct amdgpu_device *adev, struct amdgpu_fpriv *fpriv,
rq = &adev->rings[i]->scheduler->kernel_rq; rq = &adev->rings[i]->scheduler->kernel_rq;
r = amd_context_entity_init(adev->rings[i]->scheduler, r = amd_context_entity_init(adev->rings[i]->scheduler,
&ctx->rings[i].c_entity, &ctx->rings[i].c_entity,
NULL, rq, *id); NULL, rq, *id,
amdgpu_sched_jobs);
if (r) if (r)
break; break;
} }
......
...@@ -76,6 +76,7 @@ int amdgpu_vm_size = 8; ...@@ -76,6 +76,7 @@ int amdgpu_vm_size = 8;
int amdgpu_vm_block_size = -1; int amdgpu_vm_block_size = -1;
int amdgpu_exp_hw_support = 0; int amdgpu_exp_hw_support = 0;
int amdgpu_enable_scheduler = 0; int amdgpu_enable_scheduler = 0;
int amdgpu_sched_jobs = 16;
MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes"); MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes");
module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
...@@ -143,6 +144,9 @@ module_param_named(exp_hw_support, amdgpu_exp_hw_support, int, 0444); ...@@ -143,6 +144,9 @@ module_param_named(exp_hw_support, amdgpu_exp_hw_support, int, 0444);
MODULE_PARM_DESC(enable_scheduler, "enable SW GPU scheduler (1 = enable, 0 = disable ((default))"); MODULE_PARM_DESC(enable_scheduler, "enable SW GPU scheduler (1 = enable, 0 = disable ((default))");
module_param_named(enable_scheduler, amdgpu_enable_scheduler, int, 0444); module_param_named(enable_scheduler, amdgpu_enable_scheduler, int, 0444);
MODULE_PARM_DESC(sched_jobs, "the max number of jobs supported in the sw queue (default 16)");
module_param_named(sched_jobs, amdgpu_sched_jobs, int, 0444);
static struct pci_device_id pciidlist[] = { static struct pci_device_id pciidlist[] = {
#ifdef CONFIG_DRM_AMDGPU_CIK #ifdef CONFIG_DRM_AMDGPU_CIK
/* Kaveri */ /* Kaveri */
......
...@@ -173,6 +173,7 @@ static struct amd_context_entity *select_context( ...@@ -173,6 +173,7 @@ static struct amd_context_entity *select_context(
* @parent The parent entity of this amd_context_entity * @parent The parent entity of this amd_context_entity
* @rq The run queue this entity belongs * @rq The run queue this entity belongs
* @context_id The context id for this entity * @context_id The context id for this entity
* @jobs The max number of jobs in the job queue
* *
* return 0 if succeed. negative error code on failure * return 0 if succeed. negative error code on failure
*/ */
...@@ -180,7 +181,8 @@ int amd_context_entity_init(struct amd_gpu_scheduler *sched, ...@@ -180,7 +181,8 @@ int amd_context_entity_init(struct amd_gpu_scheduler *sched,
struct amd_context_entity *entity, struct amd_context_entity *entity,
struct amd_sched_entity *parent, struct amd_sched_entity *parent,
struct amd_run_queue *rq, struct amd_run_queue *rq,
uint32_t context_id) uint32_t context_id,
uint32_t jobs)
{ {
uint64_t seq_ring = 0; uint64_t seq_ring = 0;
...@@ -196,7 +198,7 @@ int amd_context_entity_init(struct amd_gpu_scheduler *sched, ...@@ -196,7 +198,7 @@ int amd_context_entity_init(struct amd_gpu_scheduler *sched,
init_waitqueue_head(&entity->wait_queue); init_waitqueue_head(&entity->wait_queue);
init_waitqueue_head(&entity->wait_emit); init_waitqueue_head(&entity->wait_emit);
if(kfifo_alloc(&entity->job_queue, if(kfifo_alloc(&entity->job_queue,
AMD_MAX_JOB_ENTRY_PER_CONTEXT * sizeof(void *), jobs * sizeof(void *),
GFP_KERNEL)) GFP_KERNEL))
return -EINVAL; return -EINVAL;
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <linux/kfifo.h> #include <linux/kfifo.h>
#define AMD_MAX_ACTIVE_HW_SUBMISSION 2 #define AMD_MAX_ACTIVE_HW_SUBMISSION 2
#define AMD_MAX_JOB_ENTRY_PER_CONTEXT 16
#define AMD_KERNEL_CONTEXT_ID 0 #define AMD_KERNEL_CONTEXT_ID 0
#define AMD_KERNEL_PROCESS_ID 0 #define AMD_KERNEL_PROCESS_ID 0
...@@ -155,6 +154,7 @@ int amd_context_entity_init(struct amd_gpu_scheduler *sched, ...@@ -155,6 +154,7 @@ int amd_context_entity_init(struct amd_gpu_scheduler *sched,
struct amd_context_entity *entity, struct amd_context_entity *entity,
struct amd_sched_entity *parent, struct amd_sched_entity *parent,
struct amd_run_queue *rq, struct amd_run_queue *rq,
uint32_t context_id); uint32_t context_id,
uint32_t jobs);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment