Skip to content

Commit

Permalink
Merge branches 'pm-sleep', 'pm-cpufreq' and 'pm-cpuidle'
Browse files Browse the repository at this point in the history
* pm-sleep:
  Revert "PM / hibernate: avoid unsafe pages in e820 reserved regions"

* pm-cpufreq:
  cpufreq: Schedule work for the first-online CPU on resume

* pm-cpuidle:
  cpuidle: ACPI: do not overwrite name and description of C0
  cpuidle: remove state_count field from struct cpuidle_device
  • Loading branch information
rafaeljw committed Apr 9, 2015
4 parents f22e6e8 + f82daee + c75de0a + c7e8bdf commit b2d5fb9
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 35 deletions.
2 changes: 1 addition & 1 deletion drivers/acpi/processor_idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -922,7 +922,7 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
return -EINVAL;

drv->safe_state_index = -1;
for (i = 0; i < CPUIDLE_STATE_MAX; i++) {
for (i = CPUIDLE_DRIVER_STATE_START; i < CPUIDLE_STATE_MAX; i++) {
drv->states[i].name[0] = '\0';
drv->states[i].desc[0] = '\0';
}
Expand Down
19 changes: 11 additions & 8 deletions drivers/cpufreq/cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -1698,15 +1698,18 @@ void cpufreq_resume(void)
|| __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS))
pr_err("%s: Failed to start governor for policy: %p\n",
__func__, policy);

/*
* schedule call cpufreq_update_policy() for boot CPU, i.e. last
* policy in list. It will verify that the current freq is in
* sync with what we believe it to be.
*/
if (list_is_last(&policy->policy_list, &cpufreq_policy_list))
schedule_work(&policy->update);
}

/*
* schedule call cpufreq_update_policy() for first-online CPU, as that
* wouldn't be hotplugged-out on suspend. It will verify that the
* current freq is in sync with what we believe it to be.
*/
policy = cpufreq_cpu_get_raw(cpumask_first(cpu_online_mask));
if (WARN_ON(!policy))
return;

schedule_work(&policy->update);
}

/**
Expand Down
3 changes: 0 additions & 3 deletions drivers/cpuidle/cpuidle.c
Original file line number Diff line number Diff line change
Expand Up @@ -330,9 +330,6 @@ int cpuidle_enable_device(struct cpuidle_device *dev)
if (!dev->registered)
return -EINVAL;

if (!dev->state_count)
dev->state_count = drv->state_count;

ret = cpuidle_add_device_sysfs(dev);
if (ret)
return ret;
Expand Down
5 changes: 3 additions & 2 deletions drivers/cpuidle/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device *device)
struct cpuidle_driver *drv = cpuidle_get_cpu_driver(device);

/* state statistics */
for (i = 0; i < device->state_count; i++) {
for (i = 0; i < drv->state_count; i++) {
kobj = kzalloc(sizeof(struct cpuidle_state_kobj), GFP_KERNEL);
if (!kobj)
goto error_state;
Expand Down Expand Up @@ -433,9 +433,10 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device *device)
*/
static void cpuidle_remove_state_sysfs(struct cpuidle_device *device)
{
struct cpuidle_driver *drv = cpuidle_get_cpu_driver(device);
int i;

for (i = 0; i < device->state_count; i++)
for (i = 0; i < drv->state_count; i++)
cpuidle_free_state_kobj(device, i);
}

Expand Down
1 change: 0 additions & 1 deletion include/linux/cpuidle.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ struct cpuidle_device {
unsigned int cpu;

int last_residency;
int state_count;
struct cpuidle_state_usage states_usage[CPUIDLE_STATE_MAX];
struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX];
struct cpuidle_driver_kobj *kobj_driver;
Expand Down
21 changes: 1 addition & 20 deletions kernel/power/snapshot.c
Original file line number Diff line number Diff line change
Expand Up @@ -955,25 +955,6 @@ static void mark_nosave_pages(struct memory_bitmap *bm)
}
}

static bool is_nosave_page(unsigned long pfn)
{
struct nosave_region *region;

list_for_each_entry(region, &nosave_regions, list) {
if (pfn >= region->start_pfn && pfn < region->end_pfn) {
pr_err("PM: %#010llx in e820 nosave region: "
"[mem %#010llx-%#010llx]\n",
(unsigned long long) pfn << PAGE_SHIFT,
(unsigned long long) region->start_pfn << PAGE_SHIFT,
((unsigned long long) region->end_pfn << PAGE_SHIFT)
- 1);
return true;
}
}

return false;
}

/**
* create_basic_memory_bitmaps - create bitmaps needed for marking page
* frames that should not be saved and free page frames. The pointers
Expand Down Expand Up @@ -2042,7 +2023,7 @@ static int mark_unsafe_pages(struct memory_bitmap *bm)
do {
pfn = memory_bm_next_pfn(bm);
if (likely(pfn != BM_END_OF_MAP)) {
if (likely(pfn_valid(pfn)) && !is_nosave_page(pfn))
if (likely(pfn_valid(pfn)))
swsusp_set_page_free(pfn_to_page(pfn));
else
return -EFAULT;
Expand Down

0 comments on commit b2d5fb9

Please sign in to comment.