diff options
author | Bojan Smojver <bojan@rexursive.com> | 2012-06-21 16:27:24 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rjw@sisk.pl> | 2012-07-01 07:31:23 -0400 |
commit | d8150d350408de6fb2b9ee7b7625ae8e2bb7aa4a (patch) | |
tree | 4bc399c1850a08b8b2573f01a23146e2fa2adeea /kernel/power | |
parent | b2df1d4f8b95d9d1e3f064cef02fc5c5116b05cf (diff) |
PM / Hibernate: Print hibernation/thaw progress indicator one line at a time.
With the introduction of suspend to both into in-kernel hibernation
code, dmesg was getting polluted with backspace characters printed as
part of image saving progress indicator. This patch introduces printing
of progress indicator on image save/load every 10% and one line at a
time. As an additional benefit, all other messages emitted by the kernel
during hibernation/thaw should now print cleanly as well.
Signed-off-by: Bojan Smojver <bojan@rexursive.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'kernel/power')
-rw-r--r-- | kernel/power/swap.c | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/kernel/power/swap.c b/kernel/power/swap.c index 83d505142b00..3c9d764eb0d8 100644 --- a/kernel/power/swap.c +++ b/kernel/power/swap.c | |||
@@ -448,9 +448,9 @@ static int save_image(struct swap_map_handle *handle, | |||
448 | struct timeval start; | 448 | struct timeval start; |
449 | struct timeval stop; | 449 | struct timeval stop; |
450 | 450 | ||
451 | printk(KERN_INFO "PM: Saving image data pages (%u pages) ... ", | 451 | printk(KERN_INFO "PM: Saving image data pages (%u pages)...\n", |
452 | nr_to_write); | 452 | nr_to_write); |
453 | m = nr_to_write / 100; | 453 | m = nr_to_write / 10; |
454 | if (!m) | 454 | if (!m) |
455 | m = 1; | 455 | m = 1; |
456 | nr_pages = 0; | 456 | nr_pages = 0; |
@@ -464,7 +464,8 @@ static int save_image(struct swap_map_handle *handle, | |||
464 | if (ret) | 464 | if (ret) |
465 | break; | 465 | break; |
466 | if (!(nr_pages % m)) | 466 | if (!(nr_pages % m)) |
467 | printk(KERN_CONT "\b\b\b\b%3d%%", nr_pages / m); | 467 | printk(KERN_INFO "PM: Image saving progress: %3d%%\n", |
468 | nr_pages / m * 10); | ||
468 | nr_pages++; | 469 | nr_pages++; |
469 | } | 470 | } |
470 | err2 = hib_wait_on_bio_chain(&bio); | 471 | err2 = hib_wait_on_bio_chain(&bio); |
@@ -472,9 +473,7 @@ static int save_image(struct swap_map_handle *handle, | |||
472 | if (!ret) | 473 | if (!ret) |
473 | ret = err2; | 474 | ret = err2; |
474 | if (!ret) | 475 | if (!ret) |
475 | printk(KERN_CONT "\b\b\b\bdone\n"); | 476 | printk(KERN_INFO "PM: Image saving done.\n"); |
476 | else | ||
477 | printk(KERN_CONT "\n"); | ||
478 | swsusp_show_speed(&start, &stop, nr_to_write, "Wrote"); | 477 | swsusp_show_speed(&start, &stop, nr_to_write, "Wrote"); |
479 | return ret; | 478 | return ret; |
480 | } | 479 | } |
@@ -668,9 +667,9 @@ static int save_image_lzo(struct swap_map_handle *handle, | |||
668 | 667 | ||
669 | printk(KERN_INFO | 668 | printk(KERN_INFO |
670 | "PM: Using %u thread(s) for compression.\n" | 669 | "PM: Using %u thread(s) for compression.\n" |
671 | "PM: Compressing and saving image data (%u pages) ... ", | 670 | "PM: Compressing and saving image data (%u pages)...\n", |
672 | nr_threads, nr_to_write); | 671 | nr_threads, nr_to_write); |
673 | m = nr_to_write / 100; | 672 | m = nr_to_write / 10; |
674 | if (!m) | 673 | if (!m) |
675 | m = 1; | 674 | m = 1; |
676 | nr_pages = 0; | 675 | nr_pages = 0; |
@@ -690,8 +689,10 @@ static int save_image_lzo(struct swap_map_handle *handle, | |||
690 | data_of(*snapshot), PAGE_SIZE); | 689 | data_of(*snapshot), PAGE_SIZE); |
691 | 690 | ||
692 | if (!(nr_pages % m)) | 691 | if (!(nr_pages % m)) |
693 | printk(KERN_CONT "\b\b\b\b%3d%%", | 692 | printk(KERN_INFO |
694 | nr_pages / m); | 693 | "PM: Image saving progress: " |
694 | "%3d%%\n", | ||
695 | nr_pages / m * 10); | ||
695 | nr_pages++; | 696 | nr_pages++; |
696 | } | 697 | } |
697 | if (!off) | 698 | if (!off) |
@@ -761,11 +762,8 @@ out_finish: | |||
761 | do_gettimeofday(&stop); | 762 | do_gettimeofday(&stop); |
762 | if (!ret) | 763 | if (!ret) |
763 | ret = err2; | 764 | ret = err2; |
764 | if (!ret) { | 765 | if (!ret) |
765 | printk(KERN_CONT "\b\b\b\bdone\n"); | 766 | printk(KERN_INFO "PM: Image saving done.\n"); |
766 | } else { | ||
767 | printk(KERN_CONT "\n"); | ||
768 | } | ||
769 | swsusp_show_speed(&start, &stop, nr_to_write, "Wrote"); | 767 | swsusp_show_speed(&start, &stop, nr_to_write, "Wrote"); |
770 | out_clean: | 768 | out_clean: |
771 | if (crc) { | 769 | if (crc) { |
@@ -973,9 +971,9 @@ static int load_image(struct swap_map_handle *handle, | |||
973 | int err2; | 971 | int err2; |
974 | unsigned nr_pages; | 972 | unsigned nr_pages; |
975 | 973 | ||
976 | printk(KERN_INFO "PM: Loading image data pages (%u pages) ... ", | 974 | printk(KERN_INFO "PM: Loading image data pages (%u pages)...\n", |
977 | nr_to_read); | 975 | nr_to_read); |
978 | m = nr_to_read / 100; | 976 | m = nr_to_read / 10; |
979 | if (!m) | 977 | if (!m) |
980 | m = 1; | 978 | m = 1; |
981 | nr_pages = 0; | 979 | nr_pages = 0; |
@@ -993,7 +991,8 @@ static int load_image(struct swap_map_handle *handle, | |||
993 | if (ret) | 991 | if (ret) |
994 | break; | 992 | break; |
995 | if (!(nr_pages % m)) | 993 | if (!(nr_pages % m)) |
996 | printk("\b\b\b\b%3d%%", nr_pages / m); | 994 | printk(KERN_INFO "PM: Image loading progress: %3d%%\n", |
995 | nr_pages / m * 10); | ||
997 | nr_pages++; | 996 | nr_pages++; |
998 | } | 997 | } |
999 | err2 = hib_wait_on_bio_chain(&bio); | 998 | err2 = hib_wait_on_bio_chain(&bio); |
@@ -1001,12 +1000,11 @@ static int load_image(struct swap_map_handle *handle, | |||
1001 | if (!ret) | 1000 | if (!ret) |
1002 | ret = err2; | 1001 | ret = err2; |
1003 | if (!ret) { | 1002 | if (!ret) { |
1004 | printk("\b\b\b\bdone\n"); | 1003 | printk(KERN_INFO "PM: Image loading done.\n"); |
1005 | snapshot_write_finalize(snapshot); | 1004 | snapshot_write_finalize(snapshot); |
1006 | if (!snapshot_image_loaded(snapshot)) | 1005 | if (!snapshot_image_loaded(snapshot)) |
1007 | ret = -ENODATA; | 1006 | ret = -ENODATA; |
1008 | } else | 1007 | } |
1009 | printk("\n"); | ||
1010 | swsusp_show_speed(&start, &stop, nr_to_read, "Read"); | 1008 | swsusp_show_speed(&start, &stop, nr_to_read, "Read"); |
1011 | return ret; | 1009 | return ret; |
1012 | } | 1010 | } |
@@ -1185,9 +1183,9 @@ static int load_image_lzo(struct swap_map_handle *handle, | |||
1185 | 1183 | ||
1186 | printk(KERN_INFO | 1184 | printk(KERN_INFO |
1187 | "PM: Using %u thread(s) for decompression.\n" | 1185 | "PM: Using %u thread(s) for decompression.\n" |
1188 | "PM: Loading and decompressing image data (%u pages) ... ", | 1186 | "PM: Loading and decompressing image data (%u pages)...\n", |
1189 | nr_threads, nr_to_read); | 1187 | nr_threads, nr_to_read); |
1190 | m = nr_to_read / 100; | 1188 | m = nr_to_read / 10; |
1191 | if (!m) | 1189 | if (!m) |
1192 | m = 1; | 1190 | m = 1; |
1193 | nr_pages = 0; | 1191 | nr_pages = 0; |
@@ -1319,7 +1317,10 @@ static int load_image_lzo(struct swap_map_handle *handle, | |||
1319 | data[thr].unc + off, PAGE_SIZE); | 1317 | data[thr].unc + off, PAGE_SIZE); |
1320 | 1318 | ||
1321 | if (!(nr_pages % m)) | 1319 | if (!(nr_pages % m)) |
1322 | printk("\b\b\b\b%3d%%", nr_pages / m); | 1320 | printk(KERN_INFO |
1321 | "PM: Image loading progress: " | ||
1322 | "%3d%%\n", | ||
1323 | nr_pages / m * 10); | ||
1323 | nr_pages++; | 1324 | nr_pages++; |
1324 | 1325 | ||
1325 | ret = snapshot_write_next(snapshot); | 1326 | ret = snapshot_write_next(snapshot); |
@@ -1344,7 +1345,7 @@ out_finish: | |||
1344 | } | 1345 | } |
1345 | do_gettimeofday(&stop); | 1346 | do_gettimeofday(&stop); |
1346 | if (!ret) { | 1347 | if (!ret) { |
1347 | printk("\b\b\b\bdone\n"); | 1348 | printk(KERN_INFO "PM: Image loading done.\n"); |
1348 | snapshot_write_finalize(snapshot); | 1349 | snapshot_write_finalize(snapshot); |
1349 | if (!snapshot_image_loaded(snapshot)) | 1350 | if (!snapshot_image_loaded(snapshot)) |
1350 | ret = -ENODATA; | 1351 | ret = -ENODATA; |
@@ -1357,8 +1358,7 @@ out_finish: | |||
1357 | } | 1358 | } |
1358 | } | 1359 | } |
1359 | } | 1360 | } |
1360 | } else | 1361 | } |
1361 | printk("\n"); | ||
1362 | swsusp_show_speed(&start, &stop, nr_to_read, "Read"); | 1362 | swsusp_show_speed(&start, &stop, nr_to_read, "Read"); |
1363 | out_clean: | 1363 | out_clean: |
1364 | for (i = 0; i < ring_size; i++) | 1364 | for (i = 0; i < ring_size; i++) |