Skip to content

Commit aecba2e

Browse files
committed
Merge tag 'pm-6.18-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull power management fixes from Rafael Wysocki: "These fix issues related to the handling of compressed hibernation images and a recent intel_pstate driver regression: - Fix issues related to using inadequate data types and incorrect use of atomic variables in the compressed hibernation images handling code that were introduced during the 6.9 development cycle (Mario Limonciello) - Move a X86_FEATURE_IDA check from turbo_is_disabled() to the places where a new value for MSR_IA32_PERF_CTL is computed in intel_pstate to address a regression preventing users from enabling turbo frequencies post-boot (Srinivas Pandruvada)" * tag 'pm-6.18-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: cpufreq: intel_pstate: Check IDA only before MSR_IA32_PERF_CTL writes PM: hibernate: Fix style issues in save_compressed_image() PM: hibernate: Use atomic64_t for compressed_size variable PM: hibernate: Emit an error when image writing fails
2 parents 6a3cc1b + 161284b commit aecba2e

2 files changed

Lines changed: 17 additions & 14 deletions

File tree

drivers/cpufreq/intel_pstate.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -603,9 +603,6 @@ static bool turbo_is_disabled(void)
603603
{
604604
u64 misc_en;
605605

606-
if (!cpu_feature_enabled(X86_FEATURE_IDA))
607-
return true;
608-
609606
rdmsrq(MSR_IA32_MISC_ENABLE, misc_en);
610607

611608
return !!(misc_en & MSR_IA32_MISC_ENABLE_TURBO_DISABLE);
@@ -2106,7 +2103,8 @@ static u64 atom_get_val(struct cpudata *cpudata, int pstate)
21062103
u32 vid;
21072104

21082105
val = (u64)pstate << 8;
2109-
if (READ_ONCE(global.no_turbo) && !READ_ONCE(global.turbo_disabled))
2106+
if (READ_ONCE(global.no_turbo) && !READ_ONCE(global.turbo_disabled) &&
2107+
cpu_feature_enabled(X86_FEATURE_IDA))
21102108
val |= (u64)1 << 32;
21112109

21122110
vid_fp = cpudata->vid.min + mul_fp(
@@ -2271,7 +2269,8 @@ static u64 core_get_val(struct cpudata *cpudata, int pstate)
22712269
u64 val;
22722270

22732271
val = (u64)pstate << 8;
2274-
if (READ_ONCE(global.no_turbo) && !READ_ONCE(global.turbo_disabled))
2272+
if (READ_ONCE(global.no_turbo) && !READ_ONCE(global.turbo_disabled) &&
2273+
cpu_feature_enabled(X86_FEATURE_IDA))
22752274
val |= (u64)1 << 32;
22762275

22772276
return val;

kernel/power/swap.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ struct cmp_data {
635635
};
636636

637637
/* Indicates the image size after compression */
638-
static atomic_t compressed_size = ATOMIC_INIT(0);
638+
static atomic64_t compressed_size = ATOMIC_INIT(0);
639639

640640
/*
641641
* Compression function that runs in its own thread.
@@ -664,7 +664,7 @@ static int compress_threadfn(void *data)
664664
d->ret = crypto_acomp_compress(d->cr);
665665
d->cmp_len = d->cr->dlen;
666666

667-
atomic_set(&compressed_size, atomic_read(&compressed_size) + d->cmp_len);
667+
atomic64_add(d->cmp_len, &compressed_size);
668668
atomic_set_release(&d->stop, 1);
669669
wake_up(&d->done);
670670
}
@@ -689,14 +689,14 @@ static int save_compressed_image(struct swap_map_handle *handle,
689689
ktime_t start;
690690
ktime_t stop;
691691
size_t off;
692-
unsigned thr, run_threads, nr_threads;
692+
unsigned int thr, run_threads, nr_threads;
693693
unsigned char *page = NULL;
694694
struct cmp_data *data = NULL;
695695
struct crc_data *crc = NULL;
696696

697697
hib_init_batch(&hb);
698698

699-
atomic_set(&compressed_size, 0);
699+
atomic64_set(&compressed_size, 0);
700700

701701
/*
702702
* We'll limit the number of threads for compression to limit memory
@@ -877,11 +877,14 @@ static int save_compressed_image(struct swap_map_handle *handle,
877877
stop = ktime_get();
878878
if (!ret)
879879
ret = err2;
880-
if (!ret)
880+
if (!ret) {
881+
swsusp_show_speed(start, stop, nr_to_write, "Wrote");
882+
pr_info("Image size after compression: %lld kbytes\n",
883+
(atomic64_read(&compressed_size) / 1024));
881884
pr_info("Image saving done\n");
882-
swsusp_show_speed(start, stop, nr_to_write, "Wrote");
883-
pr_info("Image size after compression: %d kbytes\n",
884-
(atomic_read(&compressed_size) / 1024));
885+
} else {
886+
pr_err("Image saving failed: %d\n", ret);
887+
}
885888

886889
out_clean:
887890
hib_finish_batch(&hb);
@@ -899,7 +902,8 @@ static int save_compressed_image(struct swap_map_handle *handle,
899902
}
900903
vfree(data);
901904
}
902-
if (page) free_page((unsigned long)page);
905+
if (page)
906+
free_page((unsigned long)page);
903907

904908
return ret;
905909
}

0 commit comments

Comments
 (0)