From 5b45dc56e548280bd2a29ed7caf7fac8ad5a0c93 Mon Sep 17 00:00:00 2001 From: Srivatsa Vaddagiri Date: Wed, 17 Dec 2014 14:04:26 +0530 Subject: 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 --- drivers/base/cpu.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'drivers') 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 }; -- cgit v1.2.3