mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
zipl/boot: Fix progress_print to correctly display 'Dump file size'
- Adjust progress_print() calls to pass updated address after the set of blocks has been written to disk. - Currently total_dump_size value is updated only after the entire dump segment is written to disk what leads to ambiguos Dump file size values displayed by progress_print(). Change write_addr_range() to re-calculate total_dump_size after each set of blocks has been written to disk thus printing the correct value at the end of each log entry. - Avoid final log entry duplication. Signed-off-by: Mikhail Zaslonko <zaslonko@linux.ibm.com> Acked-by: Alexander Egorenkov <egorenar@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
committed by
Jan Höppner
parent
e35d05a5e3
commit
f1db473d11
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user