From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 265D0CA0EF8 for ; Thu, 21 Aug 2025 08:49:07 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1up0xU-0005mS-Ob; Thu, 21 Aug 2025 04:47:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1up0wD-0003g0-4m for qemu-devel@nongnu.org; Thu, 21 Aug 2025 04:46:28 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1up0w6-00017w-SF for qemu-devel@nongnu.org; Thu, 21 Aug 2025 04:46:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1755765975; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HvGqbnJX7rqX4eWZeXjnwlaKL6UBCsUGn2+S5tLqjys=; b=gSfPRyDOzt9+zpxQD2c/W8rTvlM9GS2uJfyWpyWNepGCEuRxTNIVjhzRV2IFPb4qF+Eomj SwL+1S4l8ZN6gR7LhYqlWo+ASsLMiCllv96fTgq2lbjltbnI5WroQabXuvQqc1QW/8g5ZL bVFZa2vSbTm9azS7Zg4O39O9d3Z8JGc= Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-255-aaoVcU2jN3aZ8gRvkF1cEQ-1; Thu, 21 Aug 2025 04:46:13 -0400 X-MC-Unique: aaoVcU2jN3aZ8gRvkF1cEQ-1 X-Mimecast-MFC-AGG-ID: aaoVcU2jN3aZ8gRvkF1cEQ_1755765973 Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-b47174b2582so1315287a12.2 for ; Thu, 21 Aug 2025 01:46:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755765972; x=1756370772; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HvGqbnJX7rqX4eWZeXjnwlaKL6UBCsUGn2+S5tLqjys=; b=qWdfXestopXsjNzVmCCy3ikKkaoQ+QaAht2RRo1DN/PD6Ww5NnROK2F9yQ4pjerpAo uWkM0628/iYEsMdmydgBtg9c8X6XRjKl1mPhwDveE3ECv7y+KzohcmzQZktPkAlZ6UX0 obG3HLLMXATKXIxOOc69n9TnefBELULIWQwtSRELyQmARmzFch8LJlLG1FjREvsnL6wl WqWlSLEFW6+NAoXSRpd/y8ShncQgLTS+v2HNt/wjKzD+zkPZL6l7oE8dQ+4ou2u/IAMB OIt5CuYgb4lbFNWp1QLMN6UYD0Ba5MJw3NjBJ1C0gPltshia0HF2Vl7tVxXdJARHOg04 TRAw== X-Gm-Message-State: AOJu0Yybar0KHj6wP8XMxBlSnLVQXUqHZJ/EFHXLotMwKCmaLbTForZe xJMjhVY49s76BfDXLd/+bLN+ape06eRo4qT4E/7ek7fI24jjwIFAd85RTrLC/7z9nPq+XrSo+Ce h52dEKJP8TwmrmQzP0g62MnnC40a35tZiKDncCejRVzl+MwGmfC2BTBq9 X-Gm-Gg: ASbGncsU4neycQITGVG8oCXqoW6q9g0zKuSBrdCox5pqRIJc/W/JsaZeFSGwf5WJlKK /4i0Qv2v/bP6Krp++7MGA1fj4tMuYRvkQl3Y5FZ7vTOB7oEQl2L9yhdOvKUS1i91CyEKnR8S3Nm wD5H43DAHmBTBzMDoiOPNwlw1Gqb8VmLuCvp8ulnMBsY5MDFmyj2OA8uoH5EdJSR848h8xGdj14 O6WWaZhhGKP8WKY5gtTPqmwlDLSGASn+sqBsAhUx/x6qXNQD6Vtk3x3dQVeoR7g4u0I4fC/EWC/ 7dZmzCtlAGLJw3PVtVeCQbJE9WjdiKo1fsvIxVAZ2pf5fLVjgud/ X-Received: by 2002:a17:903:2f10:b0:245:f002:d67c with SMTP id d9443c01a7336-245fedb0aa1mr21998885ad.30.1755765972464; Thu, 21 Aug 2025 01:46:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFXCuuC5pq+CEC/b4f9yLBVaSZLF8vNHn26Ikk4zOEqoNVSfLYExE1xySgNJHBc3JAAhlV9Eg== X-Received: by 2002:a17:903:2f10:b0:245:f002:d67c with SMTP id d9443c01a7336-245fedb0aa1mr21998555ad.30.1755765972059; Thu, 21 Aug 2025 01:46:12 -0700 (PDT) Received: from armenon-kvm.bengluru.csb ([49.47.192.65]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-245ed33e05dsm48789985ad.3.2025.08.21.01.46.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Aug 2025 01:46:11 -0700 (PDT) From: Arun Menon Date: Thu, 21 Aug 2025 14:14:03 +0530 Subject: [PATCH v12 09/27] migration: push Error **errp into qemu_loadvm_state_main() MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Message-Id: <20250821-propagate_tpm_error-v12-9-72b803e707dc@redhat.com> References: <20250821-propagate_tpm_error-v12-0-72b803e707dc@redhat.com> In-Reply-To: <20250821-propagate_tpm_error-v12-0-72b803e707dc@redhat.com> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , =?utf-8?q?Alex_Benn=C3=A9e?= , Akihiko Odaki , Dmitry Osipenko , "Michael S. Tsirkin" , Marcel Apfelbaum , Cornelia Huck , Halil Pasic , Eric Farman , Thomas Huth , Christian Borntraeger , Matthew Rosato , Richard Henderson , David Hildenbrand , Ilya Leoshkevich , Nicholas Piggin , Harsh Prateek Bora , Paolo Bonzini , Fam Zheng , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Steve Sistare , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , qemu-s390x@nongnu.org, qemu-ppc@nongnu.org, Hailiang Zhang , Stefan Berger , Peter Maydell , qemu-arm@nongnu.org, Arun Menon , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6279; i=armenon@redhat.com; h=from:subject:message-id; bh=Ko1zbLmZ1uvG5ie4sSUsKKEoJfQSRT9lJs4gvuHhZvQ=; b=owGbwMvMwCWWVaVqcZPfqI/xtFoSQ8ayO8kuTu4qH8oF/RSdlC4Yrli5ZkpjjwqzUZXA7W27S lYoyOl1lLIwiHExyIopsjR8DZBtCiiMiLR9eR1mDisTyBAGLk4BmEjYKkaG3U/T47sO/+bibu/4 XbGFrdTi3M4u69ZlTD+mWT49xGV7kuG/v2LR90Pmi+/pPPu7LnLd6w+rqkW2XHPMvBaW1ffcMuE ANwA= X-Developer-Key: i=armenon@redhat.com; a=openpgp; fpr=80F5501D82507158593DE9D76A7A2538D90F328E Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org 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_state_main() must report an error in errp, in case of failure. Set errp explicitly if it is NULL in case of failure in the out section. This will be removed in the subsequent patch when all of the calls are converted to passing errp. The error message in the default case of qemu_loadvm_state_main() has the word "savevm". This is removed because it can confuse the user while reading destination side error logs. Reviewed-by: Daniel P. Berrangé Signed-off-by: Arun Menon --- migration/colo.c | 3 +-- migration/savevm.c | 36 +++++++++++++++++------------------- migration/savevm.h | 3 ++- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/migration/colo.c b/migration/colo.c index 2f524b19e6a79dcfe3861f1dfb768222f65a718a..642d17487d92c0a9508e599ca3bf524e80b6fd46 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -686,11 +686,10 @@ static void colo_incoming_process_checkpoint(MigrationIncomingState *mis, bql_lock(); cpu_synchronize_all_states(); - ret = qemu_loadvm_state_main(mis->from_src_file, mis); + ret = qemu_loadvm_state_main(mis->from_src_file, mis, errp); bql_unlock(); if (ret < 0) { - error_setg(errp, "Load VM's live state (ram) error"); return; } diff --git a/migration/savevm.c b/migration/savevm.c index b46658b62ae5c27dbe9c02f6adde2d4900b182b7..69222339e17a5320b64de2709504b2ad2cd584ba 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2105,7 +2105,7 @@ static void *postcopy_ram_listen_thread(void *opaque) qemu_file_set_blocking(f, true); /* TODO: sanity check that only postcopiable data will be loaded here */ - load_res = qemu_loadvm_state_main(f, mis); + load_res = qemu_loadvm_state_main(f, mis, &error_fatal); /* * This is tricky, but, mis->from_src_file can change after it @@ -2456,10 +2456,7 @@ static int loadvm_handle_cmd_packaged(MigrationIncomingState *mis, Error **errp) qemu_coroutine_yield(); } while (1); - ret = qemu_loadvm_state_main(packf, mis); - if (ret < 0) { - error_setg(errp, "VM state load failed: %d", ret); - } + ret = qemu_loadvm_state_main(packf, mis, errp); trace_loadvm_handle_cmd_packaged_main(ret); qemu_fclose(packf); object_unref(OBJECT(bioc)); @@ -3082,18 +3079,22 @@ static bool postcopy_pause_incoming(MigrationIncomingState *mis) return true; } -int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis) +int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis, + Error **errp) { + ERRP_GUARD(); uint8_t section_type; int ret = 0; - Error *local_err = NULL; retry: while (true) { section_type = qemu_get_byte(f); - ret = qemu_file_get_error_obj_any(f, mis->postcopy_qemufile_dst, NULL); + ret = qemu_file_get_error_obj_any(f, mis->postcopy_qemufile_dst, errp); if (ret) { + error_prepend(errp, + "Failed to load section ID: stream error: %d: ", + ret); break; } @@ -3114,10 +3115,7 @@ retry: } break; case QEMU_VM_COMMAND: - ret = loadvm_process_command(f, &local_err); - if (ret < 0) { - warn_report_err(local_err); - } + ret = loadvm_process_command(f, errp); trace_qemu_loadvm_state_section_command(ret); if ((ret < 0) || (ret == LOADVM_QUIT)) { goto out; @@ -3127,7 +3125,7 @@ retry: /* This is the end of migration */ goto out; default: - error_report("Unknown savevm section type %d", section_type); + error_setg(errp, "Unknown section type %d", section_type); ret = -EINVAL; goto out; } @@ -3135,6 +3133,9 @@ 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 */ @@ -3155,6 +3156,7 @@ out: migrate_postcopy_ram() && postcopy_pause_incoming(mis)) { /* Reset f to point to the newly created channel */ f = mis->from_src_file; + error_free_or_abort(errp); goto retry; } } @@ -3188,10 +3190,7 @@ int qemu_loadvm_state(QEMUFile *f, Error **errp) cpu_synchronize_all_pre_loadvm(); - ret = qemu_loadvm_state_main(f, mis); - if (ret < 0) { - error_setg(errp, "Load VM state failed: %d", ret); - } + ret = qemu_loadvm_state_main(f, mis, errp); qemu_event_set(&mis->main_thread_load_event); trace_qemu_loadvm_state_post_main(ret); @@ -3272,9 +3271,8 @@ int qemu_load_device_state(QEMUFile *f, Error **errp) int ret; /* Load QEMU_VM_SECTION_FULL section */ - ret = qemu_loadvm_state_main(f, mis); + ret = qemu_loadvm_state_main(f, mis, errp); if (ret < 0) { - error_setg(errp, "Failed to load device state: %d", ret); return ret; } diff --git a/migration/savevm.h b/migration/savevm.h index b12681839f0b1afa3255e45215d99c13a224b19f..c337e3e3d111a7f28a57b90f61e8f70b71803d4e 100644 --- a/migration/savevm.h +++ b/migration/savevm.h @@ -66,7 +66,8 @@ int qemu_save_device_state(QEMUFile *f); int qemu_loadvm_state(QEMUFile *f, Error **errp); void qemu_loadvm_state_cleanup(MigrationIncomingState *mis); -int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis); +int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis, + Error **errp); int qemu_load_device_state(QEMUFile *f, Error **errp); int qemu_loadvm_approve_switchover(void); int qemu_savevm_state_complete_precopy_non_iterable(QEMUFile *f, -- 2.50.1