cregit-Linux how code gets into the kernel

Release 4.9 drivers/cpufreq/cpufreq_userspace.c

Directory: drivers/cpufreq
/*
 *  linux/drivers/cpufreq/cpufreq_userspace.c
 *
 *  Copyright (C)  2001 Russell King
 *            (C)  2002 - 2004 Dominik Brodowski <linux@brodo.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 */


#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/cpufreq.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/slab.h>

static DEFINE_PER_CPU(unsigned int, cpu_is_managed);
static DEFINE_MUTEX(userspace_mutex);

/**
 * cpufreq_set - set the CPU frequency
 * @policy: pointer to policy struct where freq is being set
 * @freq: target frequency in kHz
 *
 * Sets the CPU frequency to freq.
 */

static int cpufreq_set(struct cpufreq_policy *policy, unsigned int freq) { int ret = -EINVAL; unsigned int *setspeed = policy->governor_data; pr_debug("cpufreq_set for cpu %u, freq %u kHz\n", policy->cpu, freq); mutex_lock(&userspace_mutex); if (!per_cpu(cpu_is_managed, policy->cpu)) goto err; *setspeed = freq; ret = __cpufreq_driver_target(policy, freq, CPUFREQ_RELATION_L); err: mutex_unlock(&userspace_mutex); return ret; }

Contributors

PersonTokensPropCommitsCommitProp
dave jonesdave jones4550.56%112.50%
sai gurrappadisai gurrappadi1415.73%112.50%
dominik brodowskidominik brodowski910.11%225.00%
thomas renningerthomas renninger910.11%112.50%
mike travismike travis44.49%112.50%
andrew mortonandrew morton44.49%112.50%
venkatesh pallipadivenkatesh pallipadi44.49%112.50%
Total89100.00%8100.00%


static ssize_t show_speed(struct cpufreq_policy *policy, char *buf) { return sprintf(buf, "%u\n", policy->cur); }

Contributors

PersonTokensPropCommitsCommitProp
dominik brodowskidominik brodowski2281.48%133.33%
dave jonesdave jones414.81%133.33%
viresh kumarviresh kumar13.70%133.33%
Total27100.00%3100.00%


static int cpufreq_userspace_policy_init(struct cpufreq_policy *policy) { unsigned int *setspeed; setspeed = kzalloc(sizeof(*setspeed), GFP_KERNEL); if (!setspeed) return -ENOMEM; policy->governor_data = setspeed; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
sai gurrappadisai gurrappadi47100.00%1100.00%
Total47100.00%1100.00%


static void cpufreq_userspace_policy_exit(struct cpufreq_policy *policy) { mutex_lock(&userspace_mutex); kfree(policy->governor_data); policy->governor_data = NULL; mutex_unlock(&userspace_mutex); }

Contributors

PersonTokensPropCommitsCommitProp
sai gurrappadisai gurrappadi1850.00%133.33%
rafael j. wysockirafael j. wysocki1027.78%133.33%
dominik brodowskidominik brodowski822.22%133.33%
Total36100.00%3100.00%


static int cpufreq_userspace_policy_start(struct cpufreq_policy *policy) { unsigned int *setspeed = policy->governor_data; BUG_ON(!policy->cur); pr_debug("started managing cpu %u\n", policy->cpu); mutex_lock(&userspace_mutex); per_cpu(cpu_is_managed, policy->cpu) = 1; *setspeed = policy->cur; mutex_unlock(&userspace_mutex); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
rafael j. wysockirafael j. wysocki2738.57%112.50%
dominik brodowskidominik brodowski1217.14%112.50%
dave jonesdave jones811.43%112.50%
sai gurrappadisai gurrappadi710.00%112.50%
viresh kumarviresh kumar68.57%112.50%
venkatesh pallipadivenkatesh pallipadi45.71%112.50%
mike travismike travis45.71%112.50%
andrew mortonandrew morton22.86%112.50%
Total70100.00%8100.00%


static void cpufreq_userspace_policy_stop(struct cpufreq_policy *policy) { unsigned int *setspeed = policy->governor_data; pr_debug("managing cpu %u stopped\n", policy->cpu); mutex_lock(&userspace_mutex); per_cpu(cpu_is_managed, policy->cpu) = 0; *setspeed = 0; mutex_unlock(&userspace_mutex); }

Contributors

PersonTokensPropCommitsCommitProp
rafael j. wysockirafael j. wysocki2442.11%114.29%
mike travismike travis915.79%114.29%
dominik brodowskidominik brodowski712.28%114.29%
viresh kumarviresh kumar610.53%114.29%
sai gurrappadisai gurrappadi58.77%114.29%
dave jonesdave jones47.02%114.29%
andrew mortonandrew morton23.51%114.29%
Total57100.00%7100.00%


static void cpufreq_userspace_policy_limits(struct cpufreq_policy *policy) { unsigned int *setspeed = policy->governor_data; mutex_lock(&userspace_mutex); pr_debug("limit event for cpu %u: %u - %u kHz, currently %u kHz, last set to %u kHz\n", policy->cpu, policy->min, policy->max, policy->cur, *setspeed); if (policy->max < *setspeed) __cpufreq_driver_target(policy, policy->max, CPUFREQ_RELATION_H); else if (policy->min > *setspeed) __cpufreq_driver_target(policy, policy->min, CPUFREQ_RELATION_L); else __cpufreq_driver_target(policy, *setspeed, CPUFREQ_RELATION_L); mutex_unlock(&userspace_mutex); }

Contributors

PersonTokensPropCommitsCommitProp
dominik brodowskidominik brodowski4238.89%218.18%
rafael j. wysockirafael j. wysocki2119.44%19.09%
sai gurrappadisai gurrappadi1917.59%19.09%
thomas renningerthomas renninger87.41%19.09%
dave jonesdave jones76.48%327.27%
viresh kumarviresh kumar54.63%19.09%
andrew mortonandrew morton43.70%19.09%
mike travismike travis21.85%19.09%
Total108100.00%11100.00%

static struct cpufreq_governor cpufreq_gov_userspace = { .name = "userspace", .init = cpufreq_userspace_policy_init, .exit = cpufreq_userspace_policy_exit, .start = cpufreq_userspace_policy_start, .stop = cpufreq_userspace_policy_stop, .limits = cpufreq_userspace_policy_limits, .store_setspeed = cpufreq_set, .show_setspeed = show_speed, .owner = THIS_MODULE, };
static int __init cpufreq_gov_userspace_init(void) { return cpufreq_register_governor(&cpufreq_gov_userspace); }

Contributors

PersonTokensPropCommitsCommitProp
dominik brodowskidominik brodowski1487.50%150.00%
dave jonesdave jones212.50%150.00%
Total16100.00%2100.00%


static void __exit cpufreq_gov_userspace_exit(void) { cpufreq_unregister_governor(&cpufreq_gov_userspace); }

Contributors

PersonTokensPropCommitsCommitProp
dominik brodowskidominik brodowski15100.00%1100.00%
Total15100.00%1100.00%

MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>, " "Russell King <rmk@arm.linux.org.uk>"); MODULE_DESCRIPTION("CPUfreq policy governor 'userspace'"); MODULE_LICENSE("GPL"); #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE
struct cpufreq_governor *cpufreq_default_governor(void) { return &cpufreq_gov_userspace; }

Contributors

PersonTokensPropCommitsCommitProp
rafael j. wysockirafael j. wysocki13100.00%1100.00%
Total13100.00%1100.00%

fs_initcall(cpufreq_gov_userspace_init); #else module_init(cpufreq_gov_userspace_init); #endif module_exit(cpufreq_gov_userspace_exit);

Overall Contributors

PersonTokensPropCommitsCommitProp
dominik brodowskidominik brodowski17929.54%28.70%
rafael j. wysockirafael j. wysocki11819.47%28.70%
sai gurrappadisai gurrappadi11318.65%14.35%
dave jonesdave jones8013.20%1043.48%
viresh kumarviresh kumar274.46%28.70%
mike travismike travis264.29%14.35%
venkatesh pallipadivenkatesh pallipadi193.14%28.70%
thomas renningerthomas renninger172.81%14.35%
andrew mortonandrew morton152.48%14.35%
johannes weinerjohannes weiner121.98%14.35%
Total606100.00%23100.00%
Directory: drivers/cpufreq