summaryrefslogtreecommitdiff
path: root/drivers/base
diff options
context:
space:
mode:
authorSrivatsa Vaddagiri <vatsa@codeaurora.org>2014-12-17 14:04:26 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:01:26 -0700
commit5b45dc56e548280bd2a29ed7caf7fac8ad5a0c93 (patch)
tree4c3ade29fe7f2795f3a0eb5e25dfebd0c8ecd310 /drivers/base
parentee87e1d7c4da8b805a896003e9fede85b2b4074f (diff)
sched: Per-cpu prefer_idle flag
Remove the global sysctl_sched_prefer_idle flag and replace it with a per-cpu prefer_idle flag. The per-cpu flag is expected to same for all cpus in a cluster. It thus provides convenient means to disable packing in one cluster while allowing packing in another cluster. Change-Id: Ie4cc73bb1a55b4eac5697be38e558546161faca1 Signed-off-by: Srivatsa Vaddagiri <vatsa@codeaurora.org>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/cpu.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
index a59fa57ef42e..d84a4d646975 100644
--- a/drivers/base/cpu.c
+++ b/drivers/base/cpu.c
@@ -289,17 +289,56 @@ static ssize_t __ref store_sched_mostly_idle_nr_run(struct device *dev,
return err;
}
+static ssize_t show_sched_prefer_idle(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct cpu *cpu = container_of(dev, struct cpu, dev);
+ ssize_t rc;
+ int cpunum;
+ int prefer_idle;
+
+ cpunum = cpu->dev.id;
+
+ prefer_idle = sched_get_cpu_prefer_idle(cpunum);
+
+ rc = snprintf(buf, PAGE_SIZE-2, "%d\n", prefer_idle);
+
+ return rc;
+}
+
+static ssize_t __ref store_sched_prefer_idle(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct cpu *cpu = container_of(dev, struct cpu, dev);
+ int cpuid = cpu->dev.id;
+ int prefer_idle, err;
+
+ err = kstrtoint(strstrip((char *)buf), 0, &prefer_idle);
+ if (err)
+ return err;
+
+ err = sched_set_cpu_prefer_idle(cpuid, prefer_idle);
+ if (err >= 0)
+ err = count;
+
+ return err;
+}
+
static DEVICE_ATTR(sched_mostly_idle_freq, 0664, show_sched_mostly_idle_freq,
store_sched_mostly_idle_freq);
static DEVICE_ATTR(sched_mostly_idle_load, 0664, show_sched_mostly_idle_load,
store_sched_mostly_idle_load);
static DEVICE_ATTR(sched_mostly_idle_nr_run, 0664,
show_sched_mostly_idle_nr_run, store_sched_mostly_idle_nr_run);
+static DEVICE_ATTR(sched_prefer_idle, 0664,
+ show_sched_prefer_idle, store_sched_prefer_idle);
static struct attribute *hmp_sched_cpu_attrs[] = {
&dev_attr_sched_mostly_idle_load.attr,
&dev_attr_sched_mostly_idle_nr_run.attr,
&dev_attr_sched_mostly_idle_freq.attr,
+ &dev_attr_sched_prefer_idle.attr,
NULL
};