From: Arun Menon Date: Thu, 18 Sep 2025 15:23:28 +0000 (+0530) Subject: migration: push Error **errp into qemu_loadvm_section_part_end() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b6dad124ba757ba96a3b4456223e53632371bc8;p=thirdparty%2Fqemu.git migration: push Error **errp into qemu_loadvm_section_part_end() This is an incremental step in converting vmstate loading code to report error via Error objects instead of directly printing it to console/monitor. It is ensured that qemu_loadvm_section_part_end() must report an error in errp, in case of failure. This patch also removes the setting of errp when errp is NULL in the out section as it is no longer required in the series. Reviewed-by: Marc-André Lureau Reviewed-by: Fabiano Rosas Signed-off-by: Arun Menon Tested-by: Fabiano Rosas Reviewed-by: Akihiko Odaki Link: https://lore.kernel.org/r/20250918-propagate_tpm_error-v14-11-36f11a6fb9d3@redhat.com Signed-off-by: Peter Xu --- diff --git a/migration/savevm.c b/migration/savevm.c index 83d8fb8f414..c1ae36b50a5 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2803,21 +2803,19 @@ qemu_loadvm_section_start_full(QEMUFile *f, uint8_t type, Error **errp) } static int -qemu_loadvm_section_part_end(QEMUFile *f, uint8_t type) +qemu_loadvm_section_part_end(QEMUFile *f, uint8_t type, Error **errp) { bool trace_downtime = (type == QEMU_VM_SECTION_END); int64_t start_ts, end_ts; uint32_t section_id; SaveStateEntry *se; int ret; - Error *local_err = NULL; section_id = qemu_get_be32(f); ret = qemu_file_get_error(f); if (ret) { - error_report("%s: Failed to read section ID: %d", - __func__, ret); + error_setg(errp, "Failed to read section ID: %d", ret); return ret; } @@ -2828,7 +2826,7 @@ qemu_loadvm_section_part_end(QEMUFile *f, uint8_t type) } } if (se == NULL) { - error_report("Unknown savevm section %d", section_id); + error_setg(errp, "Unknown section %d", section_id); return -EINVAL; } @@ -2836,9 +2834,8 @@ qemu_loadvm_section_part_end(QEMUFile *f, uint8_t type) start_ts = qemu_clock_get_us(QEMU_CLOCK_REALTIME); } - ret = vmstate_load(f, se, &local_err); + ret = vmstate_load(f, se, errp); if (ret < 0) { - error_report_err(local_err); return ret; } @@ -2849,6 +2846,8 @@ qemu_loadvm_section_part_end(QEMUFile *f, uint8_t type) } if (!check_section_footer(f, se)) { + error_setg(errp, "Section footer error, section_id: %d", + section_id); return -EINVAL; } @@ -3108,7 +3107,7 @@ retry: break; case QEMU_VM_SECTION_PART: case QEMU_VM_SECTION_END: - ret = qemu_loadvm_section_part_end(f, section_type); + ret = qemu_loadvm_section_part_end(f, section_type, errp); if (ret < 0) { goto out; } @@ -3132,9 +3131,6 @@ retry: out: if (ret < 0) { - if (*errp == NULL) { - error_setg(errp, "Loading VM state failed: %d", ret); - } qemu_file_set_error(f, ret); /* Cancel bitmaps incoming regardless of recovery */