aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTejas Upadhyay <[email protected]>2023-08-03 18:14:04 +0530
committerRodrigo Vivi <[email protected]>2023-12-21 11:39:25 -0500
commitbc3a06ead1cd49d3a5e0f707cbd6c8e173307388 (patch)
tree15607ddc8a52b12d043884be70b003ca655ee9a8
parente91a989ce151f022a7977c1ae4f21ac6d814d632 (diff)
drm/xe: Add timeslice duration engine property to sysfs
Timeslices between multiple context is supported via guc scheduling. Add sysfs entry to provide user defined timeslice duration to guc scheduling. The timeslice duration can be adjusted per-engine class using, /sys/class/drm/cardX/device/tileN/gtN/engines/ccs/timeslice_duration_us V8: - Rebase V7: - Rebase to use s/xe_engine/xe_hw_engine/ - Matt V6: - Remove duration validation, not relevant - Niranjana V5: - Rebase to replace hw engine with eclass interface V4: - Rebase to per class engine props interface V3: - Rebase - Update commit messge to add tile V2: - Rebase Reviewed-by: Niranjana Vishwanathapura <[email protected]> Reviewed-by: Matthew Brost <[email protected]> Signed-off-by: Tejas Upadhyay <[email protected]> Signed-off-by: Rodrigo Vivi <[email protected]>
-rw-r--r--drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c b/drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c
index 03e0c29445b7..01d5282d2b24 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c
@@ -63,6 +63,35 @@ static ssize_t job_timeout_default(struct kobject *kobj,
static struct kobj_attribute job_timeout_def =
__ATTR(job_timeout_ms, 0444, job_timeout_default, NULL);
+static ssize_t timeslice_duration_store(struct kobject *kobj,
+ struct kobj_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct xe_hw_engine_class_intf *eclass = kobj_to_eclass(kobj);
+ u32 duration;
+ int err;
+
+ err = kstrtou32(buf, 0, &duration);
+ if (err)
+ return err;
+
+ WRITE_ONCE(eclass->sched_props.timeslice_us, duration);
+
+ return count;
+}
+
+static ssize_t timeslice_duration_show(struct kobject *kobj,
+ struct kobj_attribute *attr, char *buf)
+{
+ struct xe_hw_engine_class_intf *eclass = kobj_to_eclass(kobj);
+
+ return sprintf(buf, "%u\n", eclass->sched_props.timeslice_us);
+}
+
+static struct kobj_attribute timeslice_duration_attr =
+ __ATTR(timeslice_duration_us, 0644, timeslice_duration_show,
+ timeslice_duration_store);
+
static ssize_t timeslice_default(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
@@ -95,6 +124,7 @@ static const struct attribute *defaults[] = {
static const struct attribute *files[] = {
&job_timeout_attr.attr,
+ &timeslice_duration_attr.attr,
NULL
};