Merge branches 'pm-cpufreq' and 'pm-sleep'

* pm-cpufreq:
  cpufreq: ti-cpufreq: Only register platform_device when supported

* pm-sleep:
  exec: make de_thread() freezable
This commit is contained in:
Rafael J. Wysocki 2018-11-23 10:32:49 +01:00
Родитель bec00cb5e9 d98ccfc394 c22397888f
Коммит 1d50088ca3
2 изменённых файлов: 24 добавлений и 7 удалений

Просмотреть файл

@ -201,19 +201,28 @@ static const struct of_device_id ti_cpufreq_of_match[] = {
{}, {},
}; };
static const struct of_device_id *ti_cpufreq_match_node(void)
{
struct device_node *np;
const struct of_device_id *match;
np = of_find_node_by_path("/");
match = of_match_node(ti_cpufreq_of_match, np);
of_node_put(np);
return match;
}
static int ti_cpufreq_probe(struct platform_device *pdev) static int ti_cpufreq_probe(struct platform_device *pdev)
{ {
u32 version[VERSION_COUNT]; u32 version[VERSION_COUNT];
struct device_node *np;
const struct of_device_id *match; const struct of_device_id *match;
struct opp_table *ti_opp_table; struct opp_table *ti_opp_table;
struct ti_cpufreq_data *opp_data; struct ti_cpufreq_data *opp_data;
const char * const reg_names[] = {"vdd", "vbb"}; const char * const reg_names[] = {"vdd", "vbb"};
int ret; int ret;
np = of_find_node_by_path("/"); match = dev_get_platdata(&pdev->dev);
match = of_match_node(ti_cpufreq_of_match, np);
of_node_put(np);
if (!match) if (!match)
return -ENODEV; return -ENODEV;
@ -290,7 +299,14 @@ fail_put_node:
static int ti_cpufreq_init(void) static int ti_cpufreq_init(void)
{ {
platform_device_register_simple("ti-cpufreq", -1, NULL, 0); const struct of_device_id *match;
/* Check to ensure we are on a compatible platform */
match = ti_cpufreq_match_node();
if (match)
platform_device_register_data(NULL, "ti-cpufreq", -1, match,
sizeof(*match));
return 0; return 0;
} }
module_init(ti_cpufreq_init); module_init(ti_cpufreq_init);

Просмотреть файл

@ -62,6 +62,7 @@
#include <linux/oom.h> #include <linux/oom.h>
#include <linux/compat.h> #include <linux/compat.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/freezer.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
@ -1083,7 +1084,7 @@ static int de_thread(struct task_struct *tsk)
while (sig->notify_count) { while (sig->notify_count) {
__set_current_state(TASK_KILLABLE); __set_current_state(TASK_KILLABLE);
spin_unlock_irq(lock); spin_unlock_irq(lock);
schedule(); freezable_schedule();
if (unlikely(__fatal_signal_pending(tsk))) if (unlikely(__fatal_signal_pending(tsk)))
goto killed; goto killed;
spin_lock_irq(lock); spin_lock_irq(lock);
@ -1111,7 +1112,7 @@ static int de_thread(struct task_struct *tsk)
__set_current_state(TASK_KILLABLE); __set_current_state(TASK_KILLABLE);
write_unlock_irq(&tasklist_lock); write_unlock_irq(&tasklist_lock);
cgroup_threadgroup_change_end(tsk); cgroup_threadgroup_change_end(tsk);
schedule(); freezable_schedule();
if (unlikely(__fatal_signal_pending(tsk))) if (unlikely(__fatal_signal_pending(tsk)))
goto killed; goto killed;
} }