Commit 69838d63 authored by Tejas Upadhyay's avatar Tejas Upadhyay Committed by Rodrigo Vivi

drm/xe: Add sysfs for preempt reset timeout

The preemption request and timeout is used for
higher priority context or kill hung context and reset
hardware engine.

The preempt timeout can be adjusted per-engine class using,

/sys/class/drm/cardX/device/tileN/gtN/engines/ccs/preempt_timeout_us

and can be disabled by setting it to 0.

V7:
  - Rebase
V6:
  - Rebase to use s/xe_engine/xe_hw_engine/ - Matt
V5:
  - Remove timeout validation, not relevant - Niranjana
V4:
  - Rebase to replace hw engine with eclass interface
V3:
  - Rebase to per class engine props interface
V2:
  - Rebase
  - Update commit message to add tile
Reviewed-by: default avatarNiranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
Signed-off-by: default avatarTejas Upadhyay <tejas.upadhyay@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent bc3a06ea
...@@ -103,6 +103,34 @@ static ssize_t timeslice_default(struct kobject *kobj, ...@@ -103,6 +103,34 @@ static ssize_t timeslice_default(struct kobject *kobj,
static struct kobj_attribute timeslice_duration_def = static struct kobj_attribute timeslice_duration_def =
__ATTR(timeslice_duration_us, 0444, timeslice_default, NULL); __ATTR(timeslice_duration_us, 0444, timeslice_default, NULL);
static ssize_t preempt_timeout_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 timeout;
int err;
err = kstrtou32(buf, 0, &timeout);
if (err)
return err;
WRITE_ONCE(eclass->sched_props.preempt_timeout_us, timeout);
return count;
}
static ssize_t preempt_timeout_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.preempt_timeout_us);
}
static struct kobj_attribute preempt_timeout_attr =
__ATTR(preempt_timeout_us, 0644, preempt_timeout_show, preempt_timeout_store);
static ssize_t preempt_timeout_default(struct kobject *kobj, static ssize_t preempt_timeout_default(struct kobject *kobj,
struct kobj_attribute *attr, struct kobj_attribute *attr,
char *buf) char *buf)
...@@ -125,6 +153,7 @@ static const struct attribute *defaults[] = { ...@@ -125,6 +153,7 @@ static const struct attribute *defaults[] = {
static const struct attribute *files[] = { static const struct attribute *files[] = {
&job_timeout_attr.attr, &job_timeout_attr.attr,
&timeslice_duration_attr.attr, &timeslice_duration_attr.attr,
&preempt_timeout_attr.attr,
NULL NULL
}; };
......
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