Skip to content

Commit f04b87f

Browse files
committed
drm/v3d: Add job timeout module param
The previous default is 500 ms which is too short for some workloads including Piglit. Adding this parameter will help users to run heavier tasks. Signed-off-by: Yukimasa Sugizaki <[email protected]>
1 parent 2e20e54 commit f04b87f

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

drivers/gpu/drm/v3d/v3d_sched.c

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,17 @@
1919
*/
2020

2121
#include <linux/kthread.h>
22+
#include <linux/moduleparam.h>
2223

2324
#include "v3d_drv.h"
2425
#include "v3d_regs.h"
2526
#include "v3d_trace.h"
2627

28+
uint v3d_hang_limit = 5000;
29+
MODULE_PARM_DESC(hang_limit,
30+
"Timeout for a job in ms (0 means infinity and default is 5000 ms)");
31+
module_param_named(hang_limit, v3d_hang_limit, uint, 0664);
32+
2733
static struct v3d_job *
2834
to_v3d_job(struct drm_sched_job *sched_job)
2935
{
@@ -346,13 +352,13 @@ v3d_sched_init(struct v3d_dev *v3d)
346352
{
347353
int hw_jobs_limit = 1;
348354
int job_hang_limit = 0;
349-
int hang_limit_ms = 500;
355+
uint hang_limit = v3d_hang_limit ?
356+
msecs_to_jiffies(v3d_hang_limit) : MAX_SCHEDULE_TIMEOUT;
350357
int ret;
351358

352359
ret = drm_sched_init(&v3d->queue[V3D_BIN].sched,
353360
&v3d_bin_sched_ops,
354-
hw_jobs_limit, job_hang_limit,
355-
msecs_to_jiffies(hang_limit_ms),
361+
hw_jobs_limit, job_hang_limit, hang_limit,
356362
"v3d_bin");
357363
if (ret) {
358364
dev_err(v3d->dev, "Failed to create bin scheduler: %d.", ret);
@@ -361,8 +367,7 @@ v3d_sched_init(struct v3d_dev *v3d)
361367

362368
ret = drm_sched_init(&v3d->queue[V3D_RENDER].sched,
363369
&v3d_render_sched_ops,
364-
hw_jobs_limit, job_hang_limit,
365-
msecs_to_jiffies(hang_limit_ms),
370+
hw_jobs_limit, job_hang_limit, hang_limit,
366371
"v3d_render");
367372
if (ret) {
368373
dev_err(v3d->dev, "Failed to create render scheduler: %d.",
@@ -373,8 +378,7 @@ v3d_sched_init(struct v3d_dev *v3d)
373378

374379
ret = drm_sched_init(&v3d->queue[V3D_TFU].sched,
375380
&v3d_tfu_sched_ops,
376-
hw_jobs_limit, job_hang_limit,
377-
msecs_to_jiffies(hang_limit_ms),
381+
hw_jobs_limit, job_hang_limit, hang_limit,
378382
"v3d_tfu");
379383
if (ret) {
380384
dev_err(v3d->dev, "Failed to create TFU scheduler: %d.",
@@ -386,8 +390,7 @@ v3d_sched_init(struct v3d_dev *v3d)
386390
if (v3d_has_csd(v3d)) {
387391
ret = drm_sched_init(&v3d->queue[V3D_CSD].sched,
388392
&v3d_csd_sched_ops,
389-
hw_jobs_limit, job_hang_limit,
390-
msecs_to_jiffies(hang_limit_ms),
393+
hw_jobs_limit, job_hang_limit, hang_limit,
391394
"v3d_csd");
392395
if (ret) {
393396
dev_err(v3d->dev, "Failed to create CSD scheduler: %d.",
@@ -398,8 +401,7 @@ v3d_sched_init(struct v3d_dev *v3d)
398401

399402
ret = drm_sched_init(&v3d->queue[V3D_CACHE_CLEAN].sched,
400403
&v3d_cache_clean_sched_ops,
401-
hw_jobs_limit, job_hang_limit,
402-
msecs_to_jiffies(hang_limit_ms),
404+
hw_jobs_limit, job_hang_limit, hang_limit,
403405
"v3d_cache_clean");
404406
if (ret) {
405407
dev_err(v3d->dev, "Failed to create CACHE_CLEAN scheduler: %d.",

0 commit comments

Comments
 (0)