diff --git a/zipl/boot/eckd2dump.c b/zipl/boot/eckd2dump.c index 67d9204a..0f159016 100644 --- a/zipl/boot/eckd2dump.c +++ b/zipl/boot/eckd2dump.c @@ -470,9 +470,10 @@ unsigned long write_addr_range(unsigned long blk, unsigned long start, writeblock(blk, addr, blk_count, zero_page); free_page(zero_page); blk += blk_count; + addr += b2m(blk_count); + total_dump_size += b2m(blk_count); if (print_progress) progress_print(addr); - addr += b2m(blk_count); } return blk; } diff --git a/zipl/boot/eckd2dump_mv.c b/zipl/boot/eckd2dump_mv.c index 4ade82bd..c873fe69 100644 --- a/zipl/boot/eckd2dump_mv.c +++ b/zipl/boot/eckd2dump_mv.c @@ -269,7 +269,6 @@ static unsigned long write_volume(unsigned long addr, /* Reserve one block for the next segment header */ if (free_space) free_space -= b2m(1); - total_dump_size += dump_segm->len; /* Check if no more dump segments follow */ if (dump_segm->stop_marker) { /* Write end marker */ diff --git a/zipl/boot/eckd2dump_sv.c b/zipl/boot/eckd2dump_sv.c index 99c6859f..4b7d1f29 100644 --- a/zipl/boot/eckd2dump_sv.c +++ b/zipl/boot/eckd2dump_sv.c @@ -60,14 +60,14 @@ static unsigned long dt_dump_mem_non_compressed(unsigned long addr, while (addr < end) { addr = find_dump_segment(addr, end, 0, dump_segm); blk = write_dump_segment(blk, dump_segm); - total_dump_size += dump_segm->len; if (dump_segm->stop_marker) { addr = end; + if (dump_segm->start + dump_segm->len < end) + progress_print(addr); break; } } free_page(__pa(dump_segm)); - progress_print(addr); return blk; } @@ -88,7 +88,6 @@ static unsigned long dt_dump_mem_compressed(unsigned long addr, dump_segm->start = addr; dump_segm->len = ZLIB_WORKSPACE_LIMIT; blk = write_dump_segment(blk, dump_segm); - total_dump_size += dump_segm->len; addr += dump_segm->len; /* Initialize zlib workarea, return value 0 is expected */ if (zlib_workarea_init(dump_segm->start, &strm)) { @@ -118,16 +117,15 @@ static unsigned long dt_dump_mem_compressed(unsigned long addr, addr = find_dump_segment(addr, end, DUMP_SEGM_ZLIB_MAXLEN, dump_segm); blk = write_compressed_dump_segment(blk, dump_segm, &strm); - total_dump_size += dump_segm->size_on_disk ? - b2m(dump_segm->size_on_disk) : dump_segm->len; if (dump_segm->stop_marker) { addr = end; + if (dump_segm->start + dump_segm->len < end) + progress_print(addr); break; } } zlib_deflateEnd(&strm); free_page(__pa(dump_segm)); - progress_print(addr); return blk; } @@ -157,5 +155,6 @@ void dt_dump_mem(void) page = get_zeroed_page(); df_s390_em_page_init(page); writeblock(blk, page, 1, 0); + blk++; free_page(page); } diff --git a/zipl/boot/eckd2dump_zlib.c b/zipl/boot/eckd2dump_zlib.c index bb96b774..61b35897 100644 --- a/zipl/boot/eckd2dump_zlib.c +++ b/zipl/boot/eckd2dump_zlib.c @@ -166,7 +166,7 @@ unsigned long write_compressed_dump_segment(unsigned long blk, segm->entry_offset[i] |= DUMP_SEGM_ENTRY_UNCOMPRESSED; offset += blk - start_blk; /* Print progress after each compressed chunk written */ - progress_print(segm->start + i * chunk_size); + progress_print(segm->start + i * chunk_size + len); } /* Compression successful, store compressed size in the segment header */ segm->size_on_disk = (uint32_t)offset; diff --git a/zipl/boot/fba2dump.c b/zipl/boot/fba2dump.c index 0bcd1258..e9a93d4a 100644 --- a/zipl/boot/fba2dump.c +++ b/zipl/boot/fba2dump.c @@ -153,9 +153,10 @@ unsigned long write_dump_segment_fba(unsigned long blk, zero_page = get_zeroed_page(); writeblock_fba(blk, addr, blk_count, zero_page); free_page(zero_page); - progress_print(addr); blk += blk_count; addr += b2m(blk_count); + total_dump_size += b2m(blk_count); + progress_print(addr); } return blk; } @@ -207,7 +208,6 @@ void dt_dump_mem(void) while (addr < end) { addr = find_dump_segment(addr, end, 0, dump_segm); blk = write_dump_segment_fba(blk, dump_segm); - total_dump_size += dump_segm->len; if (dump_segm->stop_marker) { addr = end; break; diff --git a/zipl/boot/stage2dump.c b/zipl/boot/stage2dump.c index c3a16755..41691bce 100644 --- a/zipl/boot/stage2dump.c +++ b/zipl/boot/stage2dump.c @@ -74,7 +74,6 @@ void progress_print(unsigned long addr) } if (time < next && addr != dump_hdr->mem_size) return; - printf("%08lu / %08lu MB (Dump file size %08lu MB)", addr >> 20, dump_hdr->mem_size >> 20, total_dump_size >> 20); next = time + delta; diff --git a/zipl/boot/stage2dump.h b/zipl/boot/stage2dump.h index fb47d2e6..490557b6 100644 --- a/zipl/boot/stage2dump.h +++ b/zipl/boot/stage2dump.h @@ -39,7 +39,6 @@ extern unsigned long total_dump_size; */ void create_ida_list(unsigned long *list, int len, unsigned long addr, unsigned long zero_page); -void init_progress_print(void); void progress_print(unsigned long addr); void df_s390_em_page_init(unsigned long page); void pgm_check_handler(void); diff --git a/zipl/boot/tape2dump.c b/zipl/boot/tape2dump.c index d12ed9f0..371646ee 100644 --- a/zipl/boot/tape2dump.c +++ b/zipl/boot/tape2dump.c @@ -206,13 +206,14 @@ void dt_dump_mem(void) setup_idrc_compression(); ccw_write_tapemark(); + total_dump_size = 0; ccw_write_block((unsigned long) dump_hdr, DF_S390_HDR_SIZE, 0); for (addr = 0; addr < dump_hdr->mem_size; addr += BLK_SIZE) { ccw_write_block(addr, BLK_SIZE, page); - progress_print(addr); - progress_print_disp(addr); + total_dump_size += BLK_SIZE; + progress_print(addr + BLK_SIZE); + progress_print_disp(addr + BLK_SIZE); } - progress_print(addr); df_s390_em_page_init(page); ccw_write_block(page, sizeof(struct df_s390_em), 0); free_page(page);