From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from ns.suse.de ([195.135.220.2] helo=mx1.suse.de) by bombadil.infradead.org with esmtps (Exim 4.68 #1 (Red Hat Linux)) id 1KBsab-0003UO-UO for kexec@lists.infradead.org; Thu, 26 Jun 2008 14:36:46 +0000 Date: Thu, 26 Jun 2008 16:37:21 +0200 Subject: [PATCH] Use progress bar also for bitmap creation Message-ID: <20080626143721.GA12486@suse.de> MIME-Version: 1.0 Content-Disposition: inline From: bwalle@suse.de (Bernhard Walle) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: kexec-bounces@lists.infradead.org Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: oomichi@mxs.nes.nec.co.jp Cc: jlan@sgi.com, kexec@lists.infradead.org On large nodes, bitmap creation takes a serious amount of time. But the progress indicator only starts after the bitmaps has been created, showing only the progress of the copy process. This patch adds a "message" parameter to the print_progress() function. That message is displayed first and gets overwritten by next message. So, the user sees Excluding zero pages : [ 0 %] Excluding zero pages : [... %] Excluding zero pages : [100 %] Copying data : [ 0 %] Copying data : [... %] Copying data : [100 %] in sequence. IMO that's the fastest option to implement such a progress. Signed-off-by: Bernhard Walle --- makedumpfile.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) --- a/makedumpfile.c +++ b/makedumpfile.c @@ -32,6 +32,17 @@ int message_level; /* * Forward declarations */ +void print_progress(const char *msg, + unsigned long current, + unsigned long end); + +/* + * Message texts + */ +#define PROGRESS_COPY "Copying data" +#define PROGRESS_UNN_PAGES "Excluding unnecessary pages" +#define PROGRESS_ZERO_PAGES "Excluding zero pages" +#define PROGRESS_MAXLEN "35" /* * The numbers of the excluded pages @@ -4062,6 +4073,9 @@ exclude_zero_pages() } for (pfn = paddr = 0; pfn < info->max_mapnr; pfn++, paddr += info->page_size) { + + print_progress(PROGRESS_ZERO_PAGES, pfn, info->max_mapnr); + if (!is_in_segs(paddr)) continue; @@ -4100,6 +4114,8 @@ exclude_unnecessary_pages() goto out; } for (mm = 0; mm < info->num_mem_map; mm++) { + print_progress(PROGRESS_UNN_PAGES, mm, info->num_mem_map); + mmd = &info->mem_map_data[mm]; pfn = mmd->pfn_start; paddr = pfn*info->page_size; @@ -4670,7 +4686,7 @@ write_kdump_header() } void -print_progress(unsigned long current, unsigned long end) +print_progress(const char *msg, unsigned long current, unsigned long end) { int progress; time_t tm; @@ -4686,7 +4702,7 @@ print_progress(unsigned long current, un progress = 100; PROGRESS_MSG("\r"); - PROGRESS_MSG("[%3d %%]", progress); + PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%3d %%] ", msg, progress); } int @@ -4912,7 +4928,7 @@ write_elf_pages() while (bufsz_remain > 0) { if ((num_dumped % per) == 0) - print_progress(num_dumped, num_dumpable); + print_progress(PROGRESS_COPY, num_dumped, num_dumpable); if (bufsz_remain >= page_size) bufsz_write = page_size; @@ -5009,7 +5025,7 @@ write_elf_pages() while (bufsz_remain > 0) { if ((num_dumped % per) == 0) - print_progress(num_dumped, num_dumpable); + print_progress(PROGRESS_COPY, num_dumped, num_dumpable); if (bufsz_remain >= page_size) bufsz_write = page_size; @@ -5038,7 +5054,7 @@ write_elf_pages() if (!write_cache_bufsz(&cd_seg)) goto out; - print_progress(num_dumpable, num_dumpable); + print_progress(PROGRESS_COPY, num_dumpable, num_dumpable); PROGRESS_MSG("\n"); ret = TRUE; @@ -5247,7 +5263,7 @@ write_kdump_pages() for (pfn = 0; pfn < info->max_mapnr; pfn++) { if ((num_dumped % per) == 0) - print_progress(num_dumped, num_dumpable); + print_progress(PROGRESS_COPY, num_dumped, num_dumpable); if ((pfn % PFN_BUFBITMAP) == 0) { if (info->len_bitmap - bm2.offset < BUFSIZE_BITMAP) @@ -5325,7 +5341,7 @@ write_kdump_pages() /* * Print the progress of the end. */ - print_progress(num_dumpable, num_dumpable); + print_progress(PROGRESS_COPY, num_dumpable, num_dumpable); PROGRESS_MSG("\n"); ret = TRUE; _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec