Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
28ed0573
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
28ed0573
编写于
5月 05, 2016
作者:
R
Rafael J. Wysocki
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'pm-opp' into pm-cpufreq
上级
d9c99acb
411466c5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
112 addition
and
44 deletion
+112
-44
drivers/base/power/opp/core.c
drivers/base/power/opp/core.c
+43
-15
drivers/base/power/opp/cpu.c
drivers/base/power/opp/cpu.c
+49
-19
include/linux/pm_opp.h
include/linux/pm_opp.h
+20
-10
未找到文件。
drivers/base/power/opp/core.c
浏览文件 @
28ed0573
...
...
@@ -1845,21 +1845,11 @@ struct srcu_notifier_head *dev_pm_opp_get_notifier(struct device *dev)
}
EXPORT_SYMBOL_GPL
(
dev_pm_opp_get_notifier
);
#ifdef CONFIG_OF
/**
* dev_pm_opp_of_remove_table() - Free OPP table entries created from static DT
* entries
* @dev: device pointer used to lookup OPP table.
*
* Free OPPs created using static entries present in DT.
*
* Locking: The internal opp_table and opp structures are RCU protected.
* Hence this function indirectly uses RCU updater strategy with mutex locks
* to keep the integrity of the internal data structures. Callers should ensure
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
/*
* Free OPPs either created using static entries present in DT or even the
* dynamically added entries based on remove_all param.
*/
void
dev_pm_opp_of_remove_table
(
struct
device
*
dev
)
static
void
_dev_pm_opp_remove_table
(
struct
device
*
dev
,
bool
remove_all
)
{
struct
opp_table
*
opp_table
;
struct
dev_pm_opp
*
opp
,
*
tmp
;
...
...
@@ -1884,7 +1874,7 @@ void dev_pm_opp_of_remove_table(struct device *dev)
if
(
list_is_singular
(
&
opp_table
->
dev_list
))
{
/* Free static OPPs */
list_for_each_entry_safe
(
opp
,
tmp
,
&
opp_table
->
opp_list
,
node
)
{
if
(
!
opp
->
dynamic
)
if
(
remove_all
||
!
opp
->
dynamic
)
_opp_remove
(
opp_table
,
opp
,
true
);
}
}
else
{
...
...
@@ -1894,6 +1884,44 @@ void dev_pm_opp_of_remove_table(struct device *dev)
unlock:
mutex_unlock
(
&
opp_table_lock
);
}
/**
* dev_pm_opp_remove_table() - Free all OPPs associated with the device
* @dev: device pointer used to lookup OPP table.
*
* Free both OPPs created using static entries present in DT and the
* dynamically added entries.
*
* Locking: The internal opp_table and opp structures are RCU protected.
* Hence this function indirectly uses RCU updater strategy with mutex locks
* to keep the integrity of the internal data structures. Callers should ensure
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
*/
void
dev_pm_opp_remove_table
(
struct
device
*
dev
)
{
_dev_pm_opp_remove_table
(
dev
,
true
);
}
EXPORT_SYMBOL_GPL
(
dev_pm_opp_remove_table
);
#ifdef CONFIG_OF
/**
* dev_pm_opp_of_remove_table() - Free OPP table entries created from static DT
* entries
* @dev: device pointer used to lookup OPP table.
*
* Free OPPs created using static entries present in DT.
*
* Locking: The internal opp_table and opp structures are RCU protected.
* Hence this function indirectly uses RCU updater strategy with mutex locks
* to keep the integrity of the internal data structures. Callers should ensure
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
*/
void
dev_pm_opp_of_remove_table
(
struct
device
*
dev
)
{
_dev_pm_opp_remove_table
(
dev
,
false
);
}
EXPORT_SYMBOL_GPL
(
dev_pm_opp_of_remove_table
);
/* Returns opp descriptor node for a device, caller must do of_node_put() */
...
...
drivers/base/power/opp/cpu.c
浏览文件 @
28ed0573
...
...
@@ -119,20 +119,8 @@ void dev_pm_opp_free_cpufreq_table(struct device *dev,
EXPORT_SYMBOL_GPL
(
dev_pm_opp_free_cpufreq_table
);
#endif
/* CONFIG_CPU_FREQ */
#ifdef CONFIG_OF
/**
* dev_pm_opp_of_cpumask_remove_table() - Removes OPP table for @cpumask
* @cpumask: cpumask for which OPP table needs to be removed
*
* This removes the OPP tables for CPUs present in the @cpumask.
*
* Locking: The internal opp_table and opp structures are RCU protected.
* Hence this function internally uses RCU updater strategy with mutex locks
* to keep the integrity of the internal data structures. Callers should ensure
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
*/
void
dev_pm_opp_of_cpumask_remove_table
(
cpumask_var_t
cpumask
)
static
void
_dev_pm_opp_cpumask_remove_table
(
const
struct
cpumask
*
cpumask
,
bool
of
)
{
struct
device
*
cpu_dev
;
int
cpu
;
...
...
@@ -147,9 +135,51 @@ void dev_pm_opp_of_cpumask_remove_table(cpumask_var_t cpumask)
continue
;
}
dev_pm_opp_of_remove_table
(
cpu_dev
);
if
(
of
)
dev_pm_opp_of_remove_table
(
cpu_dev
);
else
dev_pm_opp_remove_table
(
cpu_dev
);
}
}
/**
* dev_pm_opp_cpumask_remove_table() - Removes OPP table for @cpumask
* @cpumask: cpumask for which OPP table needs to be removed
*
* This removes the OPP tables for CPUs present in the @cpumask.
* This should be used to remove all the OPPs entries associated with
* the cpus in @cpumask.
*
* Locking: The internal opp_table and opp structures are RCU protected.
* Hence this function internally uses RCU updater strategy with mutex locks
* to keep the integrity of the internal data structures. Callers should ensure
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
*/
void
dev_pm_opp_cpumask_remove_table
(
const
struct
cpumask
*
cpumask
)
{
_dev_pm_opp_cpumask_remove_table
(
cpumask
,
false
);
}
EXPORT_SYMBOL_GPL
(
dev_pm_opp_cpumask_remove_table
);
#ifdef CONFIG_OF
/**
* dev_pm_opp_of_cpumask_remove_table() - Removes OPP table for @cpumask
* @cpumask: cpumask for which OPP table needs to be removed
*
* This removes the OPP tables for CPUs present in the @cpumask.
* This should be used only to remove static entries created from DT.
*
* Locking: The internal opp_table and opp structures are RCU protected.
* Hence this function internally uses RCU updater strategy with mutex locks
* to keep the integrity of the internal data structures. Callers should ensure
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
*/
void
dev_pm_opp_of_cpumask_remove_table
(
const
struct
cpumask
*
cpumask
)
{
_dev_pm_opp_cpumask_remove_table
(
cpumask
,
true
);
}
EXPORT_SYMBOL_GPL
(
dev_pm_opp_of_cpumask_remove_table
);
/**
...
...
@@ -164,7 +194,7 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_remove_table);
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
*/
int
dev_pm_opp_of_cpumask_add_table
(
c
pumask_var_t
cpumask
)
int
dev_pm_opp_of_cpumask_add_table
(
c
onst
struct
cpumask
*
cpumask
)
{
struct
device
*
cpu_dev
;
int
cpu
,
ret
=
0
;
...
...
@@ -217,7 +247,7 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_add_table);
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
*/
int
dev_pm_opp_of_get_sharing_cpus
(
struct
device
*
cpu_dev
,
cpumask_var_t
cpumask
)
int
dev_pm_opp_of_get_sharing_cpus
(
struct
device
*
cpu_dev
,
struct
cpumask
*
cpumask
)
{
struct
device_node
*
np
,
*
tmp_np
;
struct
device
*
tcpu_dev
;
...
...
@@ -288,7 +318,7 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_sharing_cpus);
* mutex cannot be locked.
*/
int
dev_pm_opp_set_sharing_cpus
(
struct
device
*
cpu_dev
,
const
cpumask_var_t
cpumask
)
const
struct
cpumask
*
cpumask
)
{
struct
opp_device
*
opp_dev
;
struct
opp_table
*
opp_table
;
...
...
@@ -346,7 +376,7 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_set_sharing_cpus);
* that this function is *NOT* called under RCU protection or in contexts where
* mutex cannot be locked.
*/
int
dev_pm_opp_get_sharing_cpus
(
struct
device
*
cpu_dev
,
cpumask_var_t
cpumask
)
int
dev_pm_opp_get_sharing_cpus
(
struct
device
*
cpu_dev
,
struct
cpumask
*
cpumask
)
{
struct
opp_device
*
opp_dev
;
struct
opp_table
*
opp_table
;
...
...
include/linux/pm_opp.h
浏览文件 @
28ed0573
...
...
@@ -65,8 +65,10 @@ void dev_pm_opp_put_prop_name(struct device *dev);
int
dev_pm_opp_set_regulator
(
struct
device
*
dev
,
const
char
*
name
);
void
dev_pm_opp_put_regulator
(
struct
device
*
dev
);
int
dev_pm_opp_set_rate
(
struct
device
*
dev
,
unsigned
long
target_freq
);
int
dev_pm_opp_set_sharing_cpus
(
struct
device
*
cpu_dev
,
const
cpumask_var_t
cpumask
);
int
dev_pm_opp_get_sharing_cpus
(
struct
device
*
cpu_dev
,
cpumask_var_t
cpumask
);
int
dev_pm_opp_set_sharing_cpus
(
struct
device
*
cpu_dev
,
const
struct
cpumask
*
cpumask
);
int
dev_pm_opp_get_sharing_cpus
(
struct
device
*
cpu_dev
,
struct
cpumask
*
cpumask
);
void
dev_pm_opp_remove_table
(
struct
device
*
dev
);
void
dev_pm_opp_cpumask_remove_table
(
const
struct
cpumask
*
cpumask
);
#else
static
inline
unsigned
long
dev_pm_opp_get_voltage
(
struct
dev_pm_opp
*
opp
)
{
...
...
@@ -180,24 +182,32 @@ static inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_f
return
-
ENOTSUPP
;
}
static
inline
int
dev_pm_opp_set_sharing_cpus
(
struct
device
*
cpu_dev
,
const
cpumask_var_t
cpumask
)
static
inline
int
dev_pm_opp_set_sharing_cpus
(
struct
device
*
cpu_dev
,
const
struct
cpumask
*
cpumask
)
{
return
-
ENOTSUPP
;
}
static
inline
int
dev_pm_opp_get_sharing_cpus
(
struct
device
*
cpu_dev
,
cpumask_var_t
cpumask
)
static
inline
int
dev_pm_opp_get_sharing_cpus
(
struct
device
*
cpu_dev
,
struct
cpumask
*
cpumask
)
{
return
-
EINVAL
;
}
static
inline
void
dev_pm_opp_remove_table
(
struct
device
*
dev
)
{
}
static
inline
void
dev_pm_opp_cpumask_remove_table
(
const
struct
cpumask
*
cpumask
)
{
}
#endif
/* CONFIG_PM_OPP */
#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF)
int
dev_pm_opp_of_add_table
(
struct
device
*
dev
);
void
dev_pm_opp_of_remove_table
(
struct
device
*
dev
);
int
dev_pm_opp_of_cpumask_add_table
(
c
pumask_var_t
cpumask
);
void
dev_pm_opp_of_cpumask_remove_table
(
c
pumask_var_t
cpumask
);
int
dev_pm_opp_of_get_sharing_cpus
(
struct
device
*
cpu_dev
,
cpumask_var_t
cpumask
);
int
dev_pm_opp_of_cpumask_add_table
(
c
onst
struct
cpumask
*
cpumask
);
void
dev_pm_opp_of_cpumask_remove_table
(
c
onst
struct
cpumask
*
cpumask
);
int
dev_pm_opp_of_get_sharing_cpus
(
struct
device
*
cpu_dev
,
struct
cpumask
*
cpumask
);
#else
static
inline
int
dev_pm_opp_of_add_table
(
struct
device
*
dev
)
{
...
...
@@ -208,16 +218,16 @@ static inline void dev_pm_opp_of_remove_table(struct device *dev)
{
}
static
inline
int
dev_pm_opp_of_cpumask_add_table
(
c
pumask_var_t
cpumask
)
static
inline
int
dev_pm_opp_of_cpumask_add_table
(
c
onst
struct
cpumask
*
cpumask
)
{
return
-
ENOTSUPP
;
}
static
inline
void
dev_pm_opp_of_cpumask_remove_table
(
c
pumask_var_t
cpumask
)
static
inline
void
dev_pm_opp_of_cpumask_remove_table
(
c
onst
struct
cpumask
*
cpumask
)
{
}
static
inline
int
dev_pm_opp_of_get_sharing_cpus
(
struct
device
*
cpu_dev
,
cpumask_var_t
cpumask
)
static
inline
int
dev_pm_opp_of_get_sharing_cpus
(
struct
device
*
cpu_dev
,
struct
cpumask
*
cpumask
)
{
return
-
ENOTSUPP
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录