~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/kernel/sched/cpufreq.c

Version: ~ [ linux-4.15-rc3 ] ~ [ linux-4.14.5 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.68 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.105 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.47 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.87 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.51 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.96 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.27.62 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Scheduler code and data structures related to cpufreq.
  3  *
  4  * Copyright (C) 2016, Intel Corporation
  5  * Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  6  *
  7  * This program is free software; you can redistribute it and/or modify
  8  * it under the terms of the GNU General Public License version 2 as
  9  * published by the Free Software Foundation.
 10  */
 11 
 12 #include "sched.h"
 13 
 14 DEFINE_PER_CPU(struct update_util_data *, cpufreq_update_util_data);
 15 
 16 /**
 17  * cpufreq_add_update_util_hook - Populate the CPU's update_util_data pointer.
 18  * @cpu: The CPU to set the pointer for.
 19  * @data: New pointer value.
 20  * @func: Callback function to set for the CPU.
 21  *
 22  * Set and publish the update_util_data pointer for the given CPU.
 23  *
 24  * The update_util_data pointer of @cpu is set to @data and the callback
 25  * function pointer in the target struct update_util_data is set to @func.
 26  * That function will be called by cpufreq_update_util() from RCU-sched
 27  * read-side critical sections, so it must not sleep.  @data will always be
 28  * passed to it as the first argument which allows the function to get to the
 29  * target update_util_data structure and its container.
 30  *
 31  * The update_util_data pointer of @cpu must be NULL when this function is
 32  * called or it will WARN() and return with no effect.
 33  */
 34 void cpufreq_add_update_util_hook(int cpu, struct update_util_data *data,
 35                         void (*func)(struct update_util_data *data, u64 time,
 36                                      unsigned int flags))
 37 {
 38         if (WARN_ON(!data || !func))
 39                 return;
 40 
 41         if (WARN_ON(per_cpu(cpufreq_update_util_data, cpu)))
 42                 return;
 43 
 44         data->func = func;
 45         rcu_assign_pointer(per_cpu(cpufreq_update_util_data, cpu), data);
 46 }
 47 EXPORT_SYMBOL_GPL(cpufreq_add_update_util_hook);
 48 
 49 /**
 50  * cpufreq_remove_update_util_hook - Clear the CPU's update_util_data pointer.
 51  * @cpu: The CPU to clear the pointer for.
 52  *
 53  * Clear the update_util_data pointer for the given CPU.
 54  *
 55  * Callers must use RCU-sched callbacks to free any memory that might be
 56  * accessed via the old update_util_data pointer or invoke synchronize_sched()
 57  * right after this function to avoid use-after-free.
 58  */
 59 void cpufreq_remove_update_util_hook(int cpu)
 60 {
 61         rcu_assign_pointer(per_cpu(cpufreq_update_util_data, cpu), NULL);
 62 }
 63 EXPORT_SYMBOL_GPL(cpufreq_remove_update_util_hook);
 64 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp