History

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

Linus Torvalds committed 1 year ago

Commit aecba2e2 parents 6a3cc1b 161284b2 files · +17 −14Browse files

Showing the changes to kernel (1 of 2 files). Show all

Unified · Split

kernel/power/swap.c+13−9
@@ -635,7 +635,7 @@ struct cmp_data { · 634 unmodified lines
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) · 22 unmodified lines
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, · 18 unmodified lines
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 @@ out_finish: · 174 unmodified lines
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 @@ out_clean: · 11 unmodified lines
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 }