Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
8f578bfe
Commit
8f578bfe
authored
Apr 27, 2013
by
Zhang Rui
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'cpu_cooling-doc-comments-update' of .git into next
parents
09681dfa
d44ada51
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
29 deletions
+37
-29
drivers/thermal/cpu_cooling.c
drivers/thermal/cpu_cooling.c
+29
-21
include/linux/cpu_cooling.h
include/linux/cpu_cooling.h
+8
-8
No files found.
drivers/thermal/cpu_cooling.c
View file @
8f578bfe
...
@@ -64,6 +64,11 @@ static struct cpufreq_cooling_device *notify_device;
...
@@ -64,6 +64,11 @@ static struct cpufreq_cooling_device *notify_device;
* get_idr - function to get a unique id.
* get_idr - function to get a unique id.
* @idr: struct idr * handle used to create a id.
* @idr: struct idr * handle used to create a id.
* @id: int * value generated by this function.
* @id: int * value generated by this function.
*
* This function will populate @id with an unique
* id, using the idr API.
*
* Return: 0 on success, an error code on failure.
*/
*/
static
int
get_idr
(
struct
idr
*
idr
,
int
*
id
)
static
int
get_idr
(
struct
idr
*
idr
,
int
*
id
)
{
{
...
@@ -75,6 +80,7 @@ static int get_idr(struct idr *idr, int *id)
...
@@ -75,6 +80,7 @@ static int get_idr(struct idr *idr, int *id)
if
(
unlikely
(
ret
<
0
))
if
(
unlikely
(
ret
<
0
))
return
ret
;
return
ret
;
*
id
=
ret
;
*
id
=
ret
;
return
0
;
return
0
;
}
}
...
@@ -105,6 +111,7 @@ static void release_idr(struct idr *idr, int id)
...
@@ -105,6 +111,7 @@ static void release_idr(struct idr *idr, int id)
static
int
is_cpufreq_valid
(
int
cpu
)
static
int
is_cpufreq_valid
(
int
cpu
)
{
{
struct
cpufreq_policy
policy
;
struct
cpufreq_policy
policy
;
return
!
cpufreq_get_policy
(
&
policy
,
cpu
);
return
!
cpufreq_get_policy
(
&
policy
,
cpu
);
}
}
...
@@ -134,7 +141,8 @@ enum cpufreq_cooling_property {
...
@@ -134,7 +141,8 @@ enum cpufreq_cooling_property {
* Return: 0 on success, -EINVAL when invalid parameters are passed.
* Return: 0 on success, -EINVAL when invalid parameters are passed.
*/
*/
static
int
get_property
(
unsigned
int
cpu
,
unsigned
long
input
,
static
int
get_property
(
unsigned
int
cpu
,
unsigned
long
input
,
unsigned
int
*
output
,
enum
cpufreq_cooling_property
property
)
unsigned
int
*
output
,
enum
cpufreq_cooling_property
property
)
{
{
int
i
,
j
;
int
i
,
j
;
unsigned
long
max_level
=
0
,
level
=
0
;
unsigned
long
max_level
=
0
,
level
=
0
;
...
@@ -142,14 +150,13 @@ static int get_property(unsigned int cpu, unsigned long input,
...
@@ -142,14 +150,13 @@ static int get_property(unsigned int cpu, unsigned long input,
int
descend
=
-
1
;
int
descend
=
-
1
;
struct
cpufreq_frequency_table
*
table
=
struct
cpufreq_frequency_table
*
table
=
cpufreq_frequency_get_table
(
cpu
);
cpufreq_frequency_get_table
(
cpu
);
if
(
!
output
)
if
(
!
output
)
return
-
EINVAL
;
return
-
EINVAL
;
if
(
!
table
)
if
(
!
table
)
return
-
EINVAL
;
return
-
EINVAL
;
for
(
i
=
0
;
table
[
i
].
frequency
!=
CPUFREQ_TABLE_END
;
i
++
)
{
for
(
i
=
0
;
table
[
i
].
frequency
!=
CPUFREQ_TABLE_END
;
i
++
)
{
/* ignore invalid entries */
/* ignore invalid entries */
if
(
table
[
i
].
frequency
==
CPUFREQ_ENTRY_INVALID
)
if
(
table
[
i
].
frequency
==
CPUFREQ_ENTRY_INVALID
)
...
@@ -174,8 +181,7 @@ static int get_property(unsigned int cpu, unsigned long input,
...
@@ -174,8 +181,7 @@ static int get_property(unsigned int cpu, unsigned long input,
}
}
if
(
property
==
GET_FREQ
)
if
(
property
==
GET_FREQ
)
level
=
descend
?
input
:
(
max_level
-
input
-
1
);
level
=
descend
?
input
:
(
max_level
-
input
-
1
);
for
(
i
=
0
,
j
=
0
;
table
[
i
].
frequency
!=
CPUFREQ_TABLE_END
;
i
++
)
{
for
(
i
=
0
,
j
=
0
;
table
[
i
].
frequency
!=
CPUFREQ_TABLE_END
;
i
++
)
{
/* ignore invalid entry */
/* ignore invalid entry */
...
@@ -201,6 +207,7 @@ static int get_property(unsigned int cpu, unsigned long input,
...
@@ -201,6 +207,7 @@ static int get_property(unsigned int cpu, unsigned long input,
}
}
j
++
;
j
++
;
}
}
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
@@ -221,6 +228,7 @@ unsigned long cpufreq_cooling_get_level(unsigned int cpu, unsigned int freq)
...
@@ -221,6 +228,7 @@ unsigned long cpufreq_cooling_get_level(unsigned int cpu, unsigned int freq)
if
(
get_property
(
cpu
,
(
unsigned
long
)
freq
,
&
val
,
GET_LEVEL
))
if
(
get_property
(
cpu
,
(
unsigned
long
)
freq
,
&
val
,
GET_LEVEL
))
return
THERMAL_CSTATE_INVALID
;
return
THERMAL_CSTATE_INVALID
;
return
(
unsigned
long
)
val
;
return
(
unsigned
long
)
val
;
}
}
EXPORT_SYMBOL_GPL
(
cpufreq_cooling_get_level
);
EXPORT_SYMBOL_GPL
(
cpufreq_cooling_get_level
);
...
@@ -245,6 +253,7 @@ static unsigned int get_cpu_frequency(unsigned int cpu, unsigned long level)
...
@@ -245,6 +253,7 @@ static unsigned int get_cpu_frequency(unsigned int cpu, unsigned long level)
ret
=
get_property
(
cpu
,
level
,
&
freq
,
GET_FREQ
);
ret
=
get_property
(
cpu
,
level
,
&
freq
,
GET_FREQ
);
if
(
ret
)
if
(
ret
)
return
0
;
return
0
;
return
freq
;
return
freq
;
}
}
...
@@ -261,7 +270,7 @@ static unsigned int get_cpu_frequency(unsigned int cpu, unsigned long level)
...
@@ -261,7 +270,7 @@ static unsigned int get_cpu_frequency(unsigned int cpu, unsigned long level)
* cooling state).
* cooling state).
*/
*/
static
int
cpufreq_apply_cooling
(
struct
cpufreq_cooling_device
*
cpufreq_device
,
static
int
cpufreq_apply_cooling
(
struct
cpufreq_cooling_device
*
cpufreq_device
,
unsigned
long
cooling_state
)
unsigned
long
cooling_state
)
{
{
unsigned
int
cpuid
,
clip_freq
;
unsigned
int
cpuid
,
clip_freq
;
struct
cpumask
*
mask
=
&
cpufreq_device
->
allowed_cpus
;
struct
cpumask
*
mask
=
&
cpufreq_device
->
allowed_cpus
;
...
@@ -303,7 +312,7 @@ static int cpufreq_apply_cooling(struct cpufreq_cooling_device *cpufreq_device,
...
@@ -303,7 +312,7 @@ static int cpufreq_apply_cooling(struct cpufreq_cooling_device *cpufreq_device,
* Return: 0 (success)
* Return: 0 (success)
*/
*/
static
int
cpufreq_thermal_notifier
(
struct
notifier_block
*
nb
,
static
int
cpufreq_thermal_notifier
(
struct
notifier_block
*
nb
,
unsigned
long
event
,
void
*
data
)
unsigned
long
event
,
void
*
data
)
{
{
struct
cpufreq_policy
*
policy
=
data
;
struct
cpufreq_policy
*
policy
=
data
;
unsigned
long
max_freq
=
0
;
unsigned
long
max_freq
=
0
;
...
@@ -314,7 +323,7 @@ static int cpufreq_thermal_notifier(struct notifier_block *nb,
...
@@ -314,7 +323,7 @@ static int cpufreq_thermal_notifier(struct notifier_block *nb,
if
(
cpumask_test_cpu
(
policy
->
cpu
,
&
notify_device
->
allowed_cpus
))
if
(
cpumask_test_cpu
(
policy
->
cpu
,
&
notify_device
->
allowed_cpus
))
max_freq
=
notify_device
->
cpufreq_val
;
max_freq
=
notify_device
->
cpufreq_val
;
/* Never exceed user_policy.max*/
/* Never exceed user_policy.max
*/
if
(
max_freq
>
policy
->
user_policy
.
max
)
if
(
max_freq
>
policy
->
user_policy
.
max
)
max_freq
=
policy
->
user_policy
.
max
;
max_freq
=
policy
->
user_policy
.
max
;
...
@@ -324,9 +333,7 @@ static int cpufreq_thermal_notifier(struct notifier_block *nb,
...
@@ -324,9 +333,7 @@ static int cpufreq_thermal_notifier(struct notifier_block *nb,
return
0
;
return
0
;
}
}
/*
/* cpufreq cooling device callback functions are defined below */
* cpufreq cooling device callback functions are defined below
*/
/**
/**
* cpufreq_get_max_state - callback function to get the max cooling state.
* cpufreq_get_max_state - callback function to get the max cooling state.
...
@@ -373,6 +380,7 @@ static int cpufreq_get_cur_state(struct thermal_cooling_device *cdev,
...
@@ -373,6 +380,7 @@ static int cpufreq_get_cur_state(struct thermal_cooling_device *cdev,
struct
cpufreq_cooling_device
*
cpufreq_device
=
cdev
->
devdata
;
struct
cpufreq_cooling_device
*
cpufreq_device
=
cdev
->
devdata
;
*
state
=
cpufreq_device
->
cpufreq_state
;
*
state
=
cpufreq_device
->
cpufreq_state
;
return
0
;
return
0
;
}
}
...
@@ -417,8 +425,8 @@ static struct notifier_block thermal_cpufreq_notifier_block = {
...
@@ -417,8 +425,8 @@ static struct notifier_block thermal_cpufreq_notifier_block = {
* Return: a valid struct thermal_cooling_device pointer on success,
* Return: a valid struct thermal_cooling_device pointer on success,
* on failure, it returns a corresponding ERR_PTR().
* on failure, it returns a corresponding ERR_PTR().
*/
*/
struct
thermal_cooling_device
*
cpufreq_cooling_register
(
struct
thermal_cooling_device
*
const
struct
cpumask
*
clip_cpus
)
cpufreq_cooling_register
(
const
struct
cpumask
*
clip_cpus
)
{
{
struct
thermal_cooling_device
*
cool_dev
;
struct
thermal_cooling_device
*
cool_dev
;
struct
cpufreq_cooling_device
*
cpufreq_dev
=
NULL
;
struct
cpufreq_cooling_device
*
cpufreq_dev
=
NULL
;
...
@@ -427,9 +435,9 @@ struct thermal_cooling_device *cpufreq_cooling_register(
...
@@ -427,9 +435,9 @@ struct thermal_cooling_device *cpufreq_cooling_register(
int
ret
=
0
,
i
;
int
ret
=
0
,
i
;
struct
cpufreq_policy
policy
;
struct
cpufreq_policy
policy
;
/*
Verify that all the clip cpus have same freq_min, freq_max limit
*/
/*
Verify that all the clip cpus have same freq_min, freq_max limit
*/
for_each_cpu
(
i
,
clip_cpus
)
{
for_each_cpu
(
i
,
clip_cpus
)
{
/*
continue if cpufreq policy not found and not return error
*/
/*
continue if cpufreq policy not found and not return error
*/
if
(
!
cpufreq_get_policy
(
&
policy
,
i
))
if
(
!
cpufreq_get_policy
(
&
policy
,
i
))
continue
;
continue
;
if
(
min
==
0
&&
max
==
0
)
{
if
(
min
==
0
&&
max
==
0
)
{
...
@@ -437,12 +445,12 @@ struct thermal_cooling_device *cpufreq_cooling_register(
...
@@ -437,12 +445,12 @@ struct thermal_cooling_device *cpufreq_cooling_register(
max
=
policy
.
cpuinfo
.
max_freq
;
max
=
policy
.
cpuinfo
.
max_freq
;
}
else
{
}
else
{
if
(
min
!=
policy
.
cpuinfo
.
min_freq
||
if
(
min
!=
policy
.
cpuinfo
.
min_freq
||
max
!=
policy
.
cpuinfo
.
max_freq
)
max
!=
policy
.
cpuinfo
.
max_freq
)
return
ERR_PTR
(
-
EINVAL
);
return
ERR_PTR
(
-
EINVAL
);
}
}
}
}
cpufreq_dev
=
kzalloc
(
sizeof
(
struct
cpufreq_cooling_device
),
cpufreq_dev
=
kzalloc
(
sizeof
(
struct
cpufreq_cooling_device
),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
cpufreq_dev
)
if
(
!
cpufreq_dev
)
return
ERR_PTR
(
-
ENOMEM
);
return
ERR_PTR
(
-
ENOMEM
);
...
@@ -458,7 +466,7 @@ struct thermal_cooling_device *cpufreq_cooling_register(
...
@@ -458,7 +466,7 @@ struct thermal_cooling_device *cpufreq_cooling_register(
cpufreq_dev
->
id
);
cpufreq_dev
->
id
);
cool_dev
=
thermal_cooling_device_register
(
dev_name
,
cpufreq_dev
,
cool_dev
=
thermal_cooling_device_register
(
dev_name
,
cpufreq_dev
,
&
cpufreq_cooling_ops
);
&
cpufreq_cooling_ops
);
if
(
!
cool_dev
)
{
if
(
!
cool_dev
)
{
release_idr
(
&
cpufreq_idr
,
cpufreq_dev
->
id
);
release_idr
(
&
cpufreq_idr
,
cpufreq_dev
->
id
);
kfree
(
cpufreq_dev
);
kfree
(
cpufreq_dev
);
...
@@ -471,10 +479,11 @@ struct thermal_cooling_device *cpufreq_cooling_register(
...
@@ -471,10 +479,11 @@ struct thermal_cooling_device *cpufreq_cooling_register(
/* Register the notifier for first cpufreq cooling device */
/* Register the notifier for first cpufreq cooling device */
if
(
cpufreq_dev_count
==
0
)
if
(
cpufreq_dev_count
==
0
)
cpufreq_register_notifier
(
&
thermal_cpufreq_notifier_block
,
cpufreq_register_notifier
(
&
thermal_cpufreq_notifier_block
,
CPUFREQ_POLICY_NOTIFIER
);
CPUFREQ_POLICY_NOTIFIER
);
cpufreq_dev_count
++
;
cpufreq_dev_count
++
;
mutex_unlock
(
&
cooling_cpufreq_lock
);
mutex_unlock
(
&
cooling_cpufreq_lock
);
return
cool_dev
;
return
cool_dev
;
}
}
EXPORT_SYMBOL_GPL
(
cpufreq_cooling_register
);
EXPORT_SYMBOL_GPL
(
cpufreq_cooling_register
);
...
@@ -495,8 +504,7 @@ void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev)
...
@@ -495,8 +504,7 @@ void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev)
/* Unregister the notifier for the last cpufreq cooling device */
/* Unregister the notifier for the last cpufreq cooling device */
if
(
cpufreq_dev_count
==
0
)
if
(
cpufreq_dev_count
==
0
)
cpufreq_unregister_notifier
(
&
thermal_cpufreq_notifier_block
,
cpufreq_unregister_notifier
(
&
thermal_cpufreq_notifier_block
,
CPUFREQ_POLICY_NOTIFIER
);
CPUFREQ_POLICY_NOTIFIER
);
mutex_unlock
(
&
cooling_cpufreq_lock
);
mutex_unlock
(
&
cooling_cpufreq_lock
);
thermal_cooling_device_unregister
(
cpufreq_dev
->
cool_dev
);
thermal_cooling_device_unregister
(
cpufreq_dev
->
cool_dev
);
...
...
include/linux/cpu_cooling.h
View file @
8f578bfe
...
@@ -32,8 +32,8 @@
...
@@ -32,8 +32,8 @@
* cpufreq_cooling_register - function to create cpufreq cooling device.
* cpufreq_cooling_register - function to create cpufreq cooling device.
* @clip_cpus: cpumask of cpus where the frequency constraints will happen
* @clip_cpus: cpumask of cpus where the frequency constraints will happen
*/
*/
struct
thermal_cooling_device
*
cpufreq_cooling_register
(
struct
thermal_cooling_device
*
const
struct
cpumask
*
clip_cpus
);
cpufreq_cooling_register
(
const
struct
cpumask
*
clip_cpus
);
/**
/**
* cpufreq_cooling_unregister - function to remove cpufreq cooling device.
* cpufreq_cooling_unregister - function to remove cpufreq cooling device.
...
@@ -43,18 +43,18 @@ void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev);
...
@@ -43,18 +43,18 @@ void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev);
unsigned
long
cpufreq_cooling_get_level
(
unsigned
int
,
unsigned
int
);
unsigned
long
cpufreq_cooling_get_level
(
unsigned
int
,
unsigned
int
);
#else
/* !CONFIG_CPU_THERMAL */
#else
/* !CONFIG_CPU_THERMAL */
static
inline
struct
thermal_cooling_device
*
cpufreq_cooling_register
(
static
inline
struct
thermal_cooling_device
*
const
struct
cpumask
*
clip_cpus
)
cpufreq_cooling_register
(
const
struct
cpumask
*
clip_cpus
)
{
{
return
NULL
;
return
NULL
;
}
}
static
inline
void
cpufreq_cooling_unregister
(
static
inline
struct
thermal_cooling_device
*
cdev
)
void
cpufreq_cooling_unregister
(
struct
thermal_cooling_device
*
cdev
)
{
{
return
;
return
;
}
}
static
inline
unsigned
long
cpufreq_cooling_get_level
(
unsigned
int
,
static
inline
unsigned
int
)
unsigned
long
cpufreq_cooling_get_level
(
unsigned
int
,
unsigned
int
)
{
{
return
THERMAL_CSTATE_INVALID
;
return
THERMAL_CSTATE_INVALID
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment