drm/amdgpu: add option to disable semaphores
Provide module parameter to enable/disable them. Still enabled by default. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
9fbcc7c007
commit
3daea9e3d3
@@ -82,6 +82,7 @@ extern int amdgpu_vm_block_size;
|
|||||||
extern int amdgpu_enable_scheduler;
|
extern int amdgpu_enable_scheduler;
|
||||||
extern int amdgpu_sched_jobs;
|
extern int amdgpu_sched_jobs;
|
||||||
extern int amdgpu_sched_hw_submission;
|
extern int amdgpu_sched_hw_submission;
|
||||||
|
extern int amdgpu_enable_semaphores;
|
||||||
|
|
||||||
#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 */
|
||||||
|
@@ -79,6 +79,7 @@ int amdgpu_exp_hw_support = 0;
|
|||||||
int amdgpu_enable_scheduler = 0;
|
int amdgpu_enable_scheduler = 0;
|
||||||
int amdgpu_sched_jobs = 16;
|
int amdgpu_sched_jobs = 16;
|
||||||
int amdgpu_sched_hw_submission = 2;
|
int amdgpu_sched_hw_submission = 2;
|
||||||
|
int amdgpu_enable_semaphores = 1;
|
||||||
|
|
||||||
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);
|
||||||
@@ -152,6 +153,9 @@ module_param_named(sched_jobs, amdgpu_sched_jobs, int, 0444);
|
|||||||
MODULE_PARM_DESC(sched_hw_submission, "the max number of HW submissions (default 2)");
|
MODULE_PARM_DESC(sched_hw_submission, "the max number of HW submissions (default 2)");
|
||||||
module_param_named(sched_hw_submission, amdgpu_sched_hw_submission, int, 0444);
|
module_param_named(sched_hw_submission, amdgpu_sched_hw_submission, int, 0444);
|
||||||
|
|
||||||
|
MODULE_PARM_DESC(enable_semaphores, "Enable semaphores (1 = enable (default), 0 = disable)");
|
||||||
|
module_param_named(enable_semaphores, amdgpu_enable_semaphores, int, 0644);
|
||||||
|
|
||||||
static struct pci_device_id pciidlist[] = {
|
static struct pci_device_id pciidlist[] = {
|
||||||
#ifdef CONFIG_DRM_AMDGPU_CIK
|
#ifdef CONFIG_DRM_AMDGPU_CIK
|
||||||
/* Kaveri */
|
/* Kaveri */
|
||||||
|
@@ -251,6 +251,20 @@ int amdgpu_sync_wait(struct amdgpu_sync *sync)
|
|||||||
fence_put(e->fence);
|
fence_put(e->fence);
|
||||||
kfree(e);
|
kfree(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (amdgpu_enable_semaphores)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
|
||||||
|
struct amdgpu_fence *fence = sync->sync_to[i];
|
||||||
|
if (!fence)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
r = fence_wait(&fence->base, false);
|
||||||
|
if (r)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -285,7 +299,8 @@ int amdgpu_sync_rings(struct amdgpu_sync *sync,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amdgpu_enable_scheduler || (count >= AMDGPU_NUM_SYNCS)) {
|
if (amdgpu_enable_scheduler || !amdgpu_enable_semaphores ||
|
||||||
|
(count >= AMDGPU_NUM_SYNCS)) {
|
||||||
/* not enough room, wait manually */
|
/* not enough room, wait manually */
|
||||||
r = fence_wait(&fence->base, false);
|
r = fence_wait(&fence->base, false);
|
||||||
if (r)
|
if (r)
|
||||||
|
Reference in New Issue
Block a user