static void do_input_boost(struct work_struct *work) { unsigned int i, ret; struct cpu_sync *i_sync_info; cancel_delayed_work_sync(&input_boost_rem); if (sched_boost_active) { sched_set_boost(0); sched_boost_active = false; } /* Set the input_boost_min for all CPUs in the system */ pr_debug("Setting input boost min for all CPUs\n"); for_each_possible_cpu(i) { i_sync_info = &per_cpu(sync_info, i); i_sync_info->input_boost_min = i_sync_info->input_boost_freq; } /* Update policies for all online CPUs */ update_policy_online(); /* Enable scheduler boost to migrate tasks to big cluster */ if (sched_boost_on_input) { ret = sched_set_boost(1); if (ret) pr_err("cpu-boost: HMP boost enable failed\n"); else sched_boost_active = true; } queue_delayed_work(cpu_boost_wq, &input_boost_rem, msecs_to_jiffies(input_boost_ms)); }
static void set_sched_profile(int mode) { switch(mode) { case 1: /* Balanced */ sched_set_boost(DISABLED); break; case 2: /* Turbo */ sched_set_boost(ENABLED); break; default: pr_info("%s: Invalid mode\n", THUNDERPLUG); break; } }
static ssize_t __ref thunderplug_hp_style_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { int val, last_val; sscanf(buf, "%d", &val); last_val = tplug_hp_style; switch(val) { case HOTPLUG_PERCORE: case HOTPLUG_SCHED: tplug_hp_style = val; break; default: pr_info("%s : invalid choice\n", THUNDERPLUG); break; } if(tplug_hp_style == HOTPLUG_PERCORE && tplug_hp_style != last_val) { pr_info("%s: Switching to Per-core hotplug model\n", THUNDERPLUG); sched_set_boost(DISABLED); queue_delayed_work_on(0, tplug_wq, &tplug_work, msecs_to_jiffies(sampling_time)); } else if(tplug_hp_style==2) { pr_info("%s: Switching to sched based hotplug model\n", THUNDERPLUG); set_sched_profile(tplug_sched_mode); } return count; }
static void do_input_boost_rem(struct work_struct *work) { unsigned int i, ret; struct cpu_sync *i_sync_info; /* Reset the input_boost_min for all CPUs in the system */ pr_debug("Resetting input boost min for all CPUs\n"); for_each_possible_cpu(i) { i_sync_info = &per_cpu(sync_info, i); i_sync_info->input_boost_min = 0; } /* Update policies for all online CPUs */ update_policy_online(); if (sched_boost_active) { ret = sched_set_boost(0); if (ret) pr_err("cpu-boost: HMP boost disable failed\n"); sched_boost_active = false; } }