diff options
| author | Srivatsa Vaddagiri <vatsa@codeaurora.org> | 2014-12-17 14:04:26 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:01:26 -0700 |
| commit | 5b45dc56e548280bd2a29ed7caf7fac8ad5a0c93 (patch) | |
| tree | 4c3ade29fe7f2795f3a0eb5e25dfebd0c8ecd310 /drivers/base | |
| parent | ee87e1d7c4da8b805a896003e9fede85b2b4074f (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.c | 39 |
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 }; |
