From nobody Mon May 20 00:21:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1579189729; cv=none; d=zohomail.com; s=zohoarc; b=a60N+YzdsbHGiye8WeyODYCY719fbntUFPOeeKfaJ2xf5n5d9Ir4HkbTeYZyrjVsvMEmS4o/2dE6YqbkG6OK/NzFAjVTdkCKhZv0Vmd2WQS8OLMasHegGM6m3URnPSux8Vz23TBjnCCeyT/2951nsAFaTS3rweymSzSWifCV5GA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579189729; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=200X3mlNa/rGv52gHPrniHK4ytjGFbbPjb77rNZMFPs=; b=fA+HEm93ESrPOF5vmJsPlNZcnmqrXmk5Kq+Q/7kyshZYHk4RFJTuvt68CN1aJcK7qsOXd+zVTGfXndw+P/kUwTXcqGAF1AYYYid7WUQOZLnvxel8k15plGL8eJqiOB+4W1TgwhmJtKr2zGmO/eXgb19D8c5znZmKFtdSmQcwmhw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579189729508916.8309004737594; Thu, 16 Jan 2020 07:48:49 -0800 (PST) Received: from localhost ([::1]:44092 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7O3-0005LZ-6r for importer@patchew.org; Thu, 16 Jan 2020 10:48:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35616) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7Lt-0003Ld-BF for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1is7Ls-0004NO-82 for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:33 -0500 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:54628 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1is7Ls-0004N8-4v for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:32 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-197-oDXngIpTP5eVr7twbmnmpA-1; Thu, 16 Jan 2020 10:46:29 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CF4298010DE for ; Thu, 16 Jan 2020 15:46:28 +0000 (UTC) Received: from secure.mitica (ovpn-116-207.ams2.redhat.com [10.36.116.207]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3479263148; Thu, 16 Jan 2020 15:46:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579189591; 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=200X3mlNa/rGv52gHPrniHK4ytjGFbbPjb77rNZMFPs=; b=JQ9tJe9mQpj9/08Tt3HafSzoeJToTVcNEmkNqMJYLp6z0f1MDjD+HTfcxJ2B1NM4P6+SaQ Y+AumaQj964vNFNNl3y3dBuPvdh+E53O+F/eDLzBNx5uqYdcA2/01RwhRUxj8LqcHMeAyc TZwOG4nVw1GPlCU8p5AFtmC1N5doZME= From: Juan Quintela To: qemu-devel@nongnu.org Subject: [PATCH v3 1/5] multifd: Make sure that we don't do any IO after an error Date: Thu, 16 Jan 2020 16:46:12 +0100 Message-Id: <20200116154616.11569-2-quintela@redhat.com> In-Reply-To: <20200116154616.11569-1-quintela@redhat.com> References: <20200116154616.11569-1-quintela@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: oDXngIpTP5eVr7twbmnmpA-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 207.211.31.81 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Paolo Bonzini , Thomas Huth , "Dr. David Alan Gilbert" , Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Juan Quintela Reviewed-by: Dr. David Alan Gilbert --- migration/ram.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index ba6e0eea15..8f9f3bba5b 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -3442,7 +3442,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) { RAMState **temp =3D opaque; RAMState *rs =3D *temp; - int ret; + int ret =3D 0; int i; int64_t t0; int done =3D 0; @@ -3521,12 +3521,14 @@ static int ram_save_iterate(QEMUFile *f, void *opaq= ue) ram_control_after_iterate(f, RAM_CONTROL_ROUND); =20 out: - multifd_send_sync_main(rs); - qemu_put_be64(f, RAM_SAVE_FLAG_EOS); - qemu_fflush(f); - ram_counters.transferred +=3D 8; + if (ret >=3D 0) { + multifd_send_sync_main(rs); + qemu_put_be64(f, RAM_SAVE_FLAG_EOS); + qemu_fflush(f); + ram_counters.transferred +=3D 8; =20 - ret =3D qemu_file_get_error(f); + ret =3D qemu_file_get_error(f); + } if (ret < 0) { return ret; } @@ -3578,9 +3580,11 @@ static int ram_save_complete(QEMUFile *f, void *opaq= ue) ram_control_after_iterate(f, RAM_CONTROL_FINISH); } =20 - multifd_send_sync_main(rs); - qemu_put_be64(f, RAM_SAVE_FLAG_EOS); - qemu_fflush(f); + if (ret >=3D 0) { + multifd_send_sync_main(rs); + qemu_put_be64(f, RAM_SAVE_FLAG_EOS); + qemu_fflush(f); + } =20 return ret; } --=20 2.24.1 From nobody Mon May 20 00:21:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1579189764; cv=none; d=zohomail.com; s=zohoarc; b=VyU0GgDKSIaF28aLWeOABgjLppNH2GFyOYIIiXG9rgr41+cIqU1JNBfSoeyxlcJX+hXd2rTnu6dh48PeaUvJaCmdjstUaVGrEwgfea3JvUNzFw56PZ0tOJcdJ2NDZOkogKIdDnmvSXfj/kHFgwY2Uk3wS3+1o5iGABbghjzlUQ0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579189764; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=D7TbmKAO+qFgSmtlxFGIwAxHJL5XNPm1Zu+2yWXyqKA=; b=BWiQBoaEIWWTtw7z81hHkRNG+jwzSww12g3gE/AuU24zTmp4dN7cnzqEHIC31yA3o/zKYrmJngOott9vLttxseGwN/y8spgCT3gtccn4cUFt19RsOD4DglRDaeyjAGfyRk5rQwDAKA8HJCdsYgqa7seIWoOyqnVBr/kCN6vTrjE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579189764217721.0858436535225; Thu, 16 Jan 2020 07:49:24 -0800 (PST) Received: from localhost ([::1]:44094 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7Oc-0005qy-Fp for importer@patchew.org; Thu, 16 Jan 2020 10:49:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35643) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7M0-0003WA-R5 for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1is7Lz-0004Qv-J5 for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:40 -0500 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:29526 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1is7Lz-0004Qd-Fd for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:39 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-315-JO21ZPcOMCOvKh7cskv3DA-1; Thu, 16 Jan 2020 10:46:37 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7EC69190B2D8 for ; Thu, 16 Jan 2020 15:46:36 +0000 (UTC) Received: from secure.mitica (ovpn-116-207.ams2.redhat.com [10.36.116.207]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3015863148; Thu, 16 Jan 2020 15:46:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579189599; 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=D7TbmKAO+qFgSmtlxFGIwAxHJL5XNPm1Zu+2yWXyqKA=; b=T4S2VnK6HT+jAeaebX4CD+Y8arLxTmrlfHDFfr65dPl3TbP51C3GX7ezYmt+BnRcmfeNeX UzH1nnHig6Ai7eB0kf9Dy1ENfbzc1i/+Qrp+0akk4+N9+mgS6QUwu471fIcfM7+7AOLXWj qTuaRt7SE/6k/cbkTHSU7LImN0qVEvc= From: Juan Quintela To: qemu-devel@nongnu.org Subject: [PATCH v3 2/5] migration: Create MigrationState active field Date: Thu, 16 Jan 2020 16:46:13 +0100 Message-Id: <20200116154616.11569-3-quintela@redhat.com> In-Reply-To: <20200116154616.11569-1-quintela@redhat.com> References: <20200116154616.11569-1-quintela@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: JO21ZPcOMCOvKh7cskv3DA-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 207.211.31.120 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Paolo Bonzini , Thomas Huth , "Dr. David Alan Gilbert" , Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Right now, there is no easy way to dectect if we have already cancelled/finished/failed a migration. This field is setup to true when we start a migration, and it is set to false as soon as we stop it. It fixes a real bug, in ram_save_iterate() we call functions that wrote to the channel even if we know that migration has stopped for any reason. This gives problems with multifd because we need to synchronize various semoaphores that we don't want to take. Signed-off-by: Juan Quintela --- migration/migration.c | 5 +++++ migration/migration.h | 5 +++++ migration/ram.c | 2 +- migration/savevm.c | 2 ++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/migration/migration.c b/migration/migration.c index 990bff00c0..60bc8710b6 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1583,6 +1583,8 @@ static void migrate_fd_cancel(MigrationState *s) QEMUFile *f =3D migrate_get_current()->to_dst_file; trace_migrate_fd_cancel(); =20 + s->active =3D false; + if (s->rp_state.from_dst_file) { /* shutdown the rp socket, so causing the rp thread to shutdown */ qemu_file_shutdown(s->rp_state.from_dst_file); @@ -2834,6 +2836,7 @@ static void migration_completion(MigrationState *s) } =20 if (!migrate_colo_enabled()) { + s->active =3D false; migrate_set_state(&s->state, current_active_state, MIGRATION_STATUS_COMPLETED); } @@ -2859,6 +2862,7 @@ fail_invalidate: } =20 fail: + s->active =3D false; migrate_set_state(&s->state, current_active_state, MIGRATION_STATUS_FAILED); } @@ -3289,6 +3293,7 @@ static void *migration_thread(void *opaque) } =20 qemu_savevm_state_setup(s->to_dst_file); + s->active =3D true; =20 if (qemu_savevm_nr_failover_devices()) { migrate_set_state(&s->state, MIGRATION_STATUS_SETUP, diff --git a/migration/migration.h b/migration/migration.h index aa9ff6f27b..e0386efe95 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -169,6 +169,11 @@ struct MigrationState =20 int state; =20 + /* Is the migration channel still open. When migration finish, + * gets an error or is cancelled this becomes false. + */ + + bool active; /* State related to return path */ struct { QEMUFile *from_dst_file; diff --git a/migration/ram.c b/migration/ram.c index 8f9f3bba5b..44ca56e1ea 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -3521,7 +3521,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) ram_control_after_iterate(f, RAM_CONTROL_ROUND); =20 out: - if (ret >=3D 0) { + if (ret >=3D 0 && migrate_get_current()->active) { multifd_send_sync_main(rs); qemu_put_be64(f, RAM_SAVE_FLAG_EOS); qemu_fflush(f); diff --git a/migration/savevm.c b/migration/savevm.c index adfdca26ac..3efde5b3dd 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1550,6 +1550,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **err= p) qemu_mutex_unlock_iothread(); qemu_savevm_state_header(f); qemu_savevm_state_setup(f); + ms->active =3D true; qemu_mutex_lock_iothread(); =20 while (qemu_file_get_error(f) =3D=3D 0) { @@ -1574,6 +1575,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **err= p) status =3D MIGRATION_STATUS_COMPLETED; } migrate_set_state(&ms->state, MIGRATION_STATUS_SETUP, status); + ms->active =3D false; =20 /* f is outer parameter, it should not stay in global migration state = after * this function finished */ --=20 2.24.1 From nobody Mon May 20 00:21:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1579189783; cv=none; d=zohomail.com; s=zohoarc; b=ghchNidQQiVlJZizImLppFi/7zFkwYv3ar7U+cxWn5Zf6nb2BDwW1xY3mKtFQskT+P+RAdlA88+78eWummoZ124eayl2o4L4og8lghp3qxeju0+bsKgqhM1U43VH6o48txMuOFkQmWGXSFd68+yaaK/8oTa4ok6wOVAiS6mfpB8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579189783; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=xDQ2F+CNNWhXYTBTpO6p2YNrFa9rPdWT7aJ/DLw9tE8=; b=koenRUmVGcV8rcr4SHp3BAmKq7ewh7cDbVDiNzvVjqabRX4qYnxja6U6w/E/n+Fo7+Wnr2GhfIRxj8Hf07noR+2R2hFWJ9xhIQDf6CX+GpMtL5K1NVYtFgez+5POxs6UzxBe3iH/QAJgoYSk5AzpcRtuDD9PXZmhHabe6hnnats= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579189783114204.66614895080238; Thu, 16 Jan 2020 07:49:43 -0800 (PST) Received: from localhost ([::1]:44096 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7Ov-0006CR-AW for importer@patchew.org; Thu, 16 Jan 2020 10:49:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35663) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7M9-0003jS-AD for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1is7M7-0004VU-Mj for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:48 -0500 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:22964 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1is7M7-0004VG-Iv for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:47 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-222-RmL64FbqPuqBsCoUernnzQ-1; Thu, 16 Jan 2020 10:46:44 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0861A802B89 for ; Thu, 16 Jan 2020 15:46:44 +0000 (UTC) Received: from secure.mitica (ovpn-116-207.ams2.redhat.com [10.36.116.207]) by smtp.corp.redhat.com (Postfix) with ESMTP id D81165C578; Thu, 16 Jan 2020 15:46:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579189607; 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=xDQ2F+CNNWhXYTBTpO6p2YNrFa9rPdWT7aJ/DLw9tE8=; b=iQ5MbBwLNcZKPe0LRU3+1Ip220bIk7Xn+9TLqvBnEawl49nwHWj/GmmHD86aU9BWpkHuNR nu+0rJqf1u8nLaTcSW4ID4C7F+u6MJCTnmUjApG65C1FteQtRyIjyjCk2Lhy2Pk8/iT+/1 K866hVQeSU2wFK8zxLVBXoMOuPdChwc= From: Juan Quintela To: qemu-devel@nongnu.org Subject: [PATCH v3 3/5] migration: Don't wait in semaphore for thread we know has finished Date: Thu, 16 Jan 2020 16:46:14 +0100 Message-Id: <20200116154616.11569-4-quintela@redhat.com> In-Reply-To: <20200116154616.11569-1-quintela@redhat.com> References: <20200116154616.11569-1-quintela@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: RmL64FbqPuqBsCoUernnzQ-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 205.139.110.120 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Paolo Bonzini , Thomas Huth , "Dr. David Alan Gilbert" , Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" If p->quit is true for any channel, we know that it has finished for any reason. So don't wait for it, just continue. Signed-off-by: Juan Quintela --- I could be convinced that the right thing to do in that case is to just do a break instead of a continue. Each option has its own advantages/disadvantanges. --- migration/ram.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/migration/ram.c b/migration/ram.c index 44ca56e1ea..bc918ef28d 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1118,6 +1118,12 @@ static void multifd_send_sync_main(RAMState *rs) MultiFDSendParams *p =3D &multifd_send_state->params[i]; =20 trace_multifd_send_sync_main_wait(p->id); + qemu_mutex_lock(&p->mutex); + if (p->quit) { + qemu_mutex_unlock(&p->mutex); + continue; + } + qemu_mutex_unlock(&p->mutex); qemu_sem_wait(&p->sem_sync); } trace_multifd_send_sync_main(multifd_send_state->packet_num); --=20 2.24.1 From nobody Mon May 20 00:21:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1579189880; cv=none; d=zohomail.com; s=zohoarc; b=gA60B3v/poXWvv7PN3qmZsVswlhCzzE0OP5t7vI5WcckShr+SHgVqjAG8jeMictzcL/sto/Ron+0Gz0Ah5Eqlg7Xp2Zw2WYe0w7ltB8gMWgyLmI2clKB/mmZMfGsZ8I9doUlPxlVs5JAouoSwxb7QGpe0OyJD85GPLqCcB/7UPg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579189880; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=NT34jybCSxqqhb9E0i6CiN4hh1ID9VIMQpr6EXCYNx4=; b=M2+RgpEjCAqlnFBWplMcbfn4FiVvmGtlH2KeEfa2kYJrY0a6rpsepM2ek9PJMgKi3PH0g053EjGsiukEOj0Cv0YYZDyZx+ab9b0Ve5nF972FtAQ1jVgscpksA8CKTuatDUi4hbrd9Ts9MZPivZjWRChSD1wAjFYcemnFZhJcCbE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579189880069532.3200565736938; Thu, 16 Jan 2020 07:51:20 -0800 (PST) Received: from localhost ([::1]:44128 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7QU-00013m-Ts for importer@patchew.org; Thu, 16 Jan 2020 10:51:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35680) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7MD-0003rr-TX for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1is7MC-0004Y7-BB for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:53 -0500 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:24077 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1is7MC-0004Xt-7u for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:52 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-331-LC64tN2XMmCqmcLC1PuU1g-1; Thu, 16 Jan 2020 10:46:50 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CFF448BF0EF for ; Thu, 16 Jan 2020 15:46:49 +0000 (UTC) Received: from secure.mitica (ovpn-116-207.ams2.redhat.com [10.36.116.207]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5E15A6684B; Thu, 16 Jan 2020 15:46:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579189611; 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=NT34jybCSxqqhb9E0i6CiN4hh1ID9VIMQpr6EXCYNx4=; b=BgBy/5AuZhmYd1yh8JY8NHK274YVyGf5QgQ3eHnXeJoLwoYh9aSItrUtkW2JSbca+Z5/CL 1oUhDwsBA3Yh6P3+e1GCLycFqhCFrusgQXWI36bpiRY7JoplMOHkQd5U3h/Wb7Qpvv5O7w 2m4FCmtuadnnzSiurPyD1psI+72DtI0= From: Juan Quintela To: qemu-devel@nongnu.org Subject: [PATCH v3 4/5] qemu-file: Don't do IO after shutdown Date: Thu, 16 Jan 2020 16:46:15 +0100 Message-Id: <20200116154616.11569-5-quintela@redhat.com> In-Reply-To: <20200116154616.11569-1-quintela@redhat.com> References: <20200116154616.11569-1-quintela@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: LC64tN2XMmCqmcLC1PuU1g-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 207.211.31.81 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Paolo Bonzini , Thomas Huth , "Dr. David Alan Gilbert" , Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Be sure that we are not doing neither read/write after shutdown of the QEMUFile. Signed-off-by: Juan Quintela Reviewed-by: Dr. David Alan Gilbert Signed-off-by: Juan Quintela --- Set error in case that there is none (dave) --- migration/qemu-file.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/migration/qemu-file.c b/migration/qemu-file.c index 26fb25ddc1..bbb2b63927 100644 --- a/migration/qemu-file.c +++ b/migration/qemu-file.c @@ -53,6 +53,8 @@ struct QEMUFile { =20 int last_error; Error *last_error_obj; + /* has the file has been shutdown */ + bool shutdown; }; =20 /* @@ -61,10 +63,18 @@ struct QEMUFile { */ int qemu_file_shutdown(QEMUFile *f) { + int ret; + + f->shutdown =3D true; if (!f->ops->shut_down) { return -ENOSYS; } - return f->ops->shut_down(f->opaque, true, true, NULL); + ret =3D f->ops->shut_down(f->opaque, true, true, NULL); + + if (!f->last_error) { + qemu_file_set_error(f, -EIO); + } + return ret; } =20 /* @@ -214,6 +224,9 @@ void qemu_fflush(QEMUFile *f) return; } =20 + if (f->shutdown) { + return; + } if (f->iovcnt > 0) { expect =3D iov_size(f->iov, f->iovcnt); ret =3D f->ops->writev_buffer(f->opaque, f->iov, f->iovcnt, f->pos, @@ -328,6 +341,10 @@ static ssize_t qemu_fill_buffer(QEMUFile *f) f->buf_index =3D 0; f->buf_size =3D pending; =20 + if (f->shutdown) { + return 0; + } + len =3D f->ops->get_buffer(f->opaque, f->buf + pending, f->pos, IO_BUF_SIZE - pending, &local_error); if (len > 0) { @@ -642,6 +659,9 @@ int64_t qemu_ftell(QEMUFile *f) =20 int qemu_file_rate_limit(QEMUFile *f) { + if (f->shutdown) { + return 1; + } if (qemu_file_get_error(f)) { return 1; } --=20 2.24.1 From nobody Mon May 20 00:21:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1579189947; cv=none; d=zohomail.com; s=zohoarc; b=RIWFuRh3O7ai1odN6BNSKv/oJeETMnBwUILEzuKdSPKnXgIJUvunfGS+UtgTibz3+iCaO3+qHWXxHf69F6asADEbZpm5QnOVR4E8JQ8uF6nUlYG25BVllO4XZOt+4FTJEN/qcBnTaM7bGi2aXV6s39o+ASQfLEkT/zBZrYWXAik= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579189947; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=x81oKoBNemPIgSNaiA9yfIbpfegvWNrEes2MbA9OUGw=; b=btaaLl6KbICFglZvY1UNh1qet0Tyhd9y/2KWGsI/cfNlceZbju86HEeUmSZNSSJdnuNHuZqlGLLVd4nIuz3i8UvyThBvS2kJecKzF6xLUZ4sv19aMUITV167y7k5qUx9/hlzRMOMlYIXRsU74VTHAnDoywSmlZtXrpf818M/pGY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 157918994735252.02571192800349; Thu, 16 Jan 2020 07:52:27 -0800 (PST) Received: from localhost ([::1]:44148 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7Ra-0002qa-1w for importer@patchew.org; Thu, 16 Jan 2020 10:52:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35696) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1is7MJ-0003wU-AL for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:47:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1is7MH-0004as-U5 for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:59 -0500 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:23523 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1is7MH-0004ae-Qf for qemu-devel@nongnu.org; Thu, 16 Jan 2020 10:46:57 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-32-J9Q12a_wN36suQUvEazP9Q-1; Thu, 16 Jan 2020 10:46:54 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 95A88801E6C for ; Thu, 16 Jan 2020 15:46:53 +0000 (UTC) Received: from secure.mitica (ovpn-116-207.ams2.redhat.com [10.36.116.207]) by smtp.corp.redhat.com (Postfix) with ESMTP id 18E156684B; Thu, 16 Jan 2020 15:46:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579189617; 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=x81oKoBNemPIgSNaiA9yfIbpfegvWNrEes2MbA9OUGw=; b=gELo/ltYvjtm0dfipi+aVUjwjfJd/QuajQAYSNVLue8azeRSRFy2TsHM5HI2oMPG6uHonT IWtuaJbHIPi+XOx6s4PT7a8jNKRN59Vwy5blwXpIEcoFrCmmOmhJHZTsq/qnyyi4RK51RW FkgzMxeOB43Ziwja5cX4XBsyLBCfg+Q= From: Juan Quintela To: qemu-devel@nongnu.org Subject: [PATCH v3 5/5] migration-test: Make sure that multifd and cancel works Date: Thu, 16 Jan 2020 16:46:16 +0100 Message-Id: <20200116154616.11569-6-quintela@redhat.com> In-Reply-To: <20200116154616.11569-1-quintela@redhat.com> References: <20200116154616.11569-1-quintela@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: J9Q12a_wN36suQUvEazP9Q-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 205.139.110.61 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Paolo Bonzini , Thomas Huth , "Dr. David Alan Gilbert" , Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Test that this sequerce works: - launch source - launch target - start migration - cancel migration - relaunch target - do migration again Signed-off-by: Juan Quintela Reviewed-by: Dr. David Alan Gilbert --- - Wait for 1st trhead to move to cancelled before launching second migration - Add 'to2' parameter to diferentiate 1st and second target. --- tests/qtest/migration-test.c | 112 ++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c index 26e2e77289..4bf4901970 100644 --- a/tests/qtest/migration-test.c +++ b/tests/qtest/migration-test.c @@ -424,6 +424,14 @@ static void migrate_recover(QTestState *who, const cha= r *uri) qobject_unref(rsp); } =20 +static void migrate_cancel(QTestState *who) +{ + QDict *rsp; + + rsp =3D wait_command(who, "{ 'execute': 'migrate_cancel' }"); + qobject_unref(rsp); +} + static void migrate_set_capability(QTestState *who, const char *capability, bool value) { @@ -456,6 +464,8 @@ static void migrate_postcopy_start(QTestState *from, QT= estState *to) typedef struct { bool hide_stderr; bool use_shmem; + /* only launch the target process */ + bool only_target; char *opts_source; char *opts_target; } MigrateStart; @@ -571,7 +581,9 @@ static int test_migrate_start(QTestState **from, QTestS= tate **to, arch_source, shmem_opts, args->opts_sourc= e, ignore_stderr); g_free(arch_source); - *from =3D qtest_init(cmd_source); + if (!args->only_target) { + *from =3D qtest_init(cmd_source); + } g_free(cmd_source); =20 cmd_target =3D g_strdup_printf("-accel kvm -accel tcg%s%s " @@ -1294,6 +1306,103 @@ static void test_multifd_tcp(void) free(uri); } =20 +/* + * This test does: + * source target + * migrate_incoming + * migrate + * migrate_cancel + * launch another target + * migrate + * + * And see that it works + */ + +static void test_multifd_tcp_cancel(void) +{ + MigrateStart *args =3D migrate_start_new(); + QTestState *from, *to, *to2; + QDict *rsp; + char *uri; + + args->hide_stderr =3D true; + + if (test_migrate_start(&from, &to, "defer", args)) { + return; + } + + /* + * We want to pick a speed slow enough that the test completes + * quickly, but that it doesn't complete precopy even on a slow + * machine, so also set the downtime. + */ + /* 1 ms should make it not converge*/ + migrate_set_parameter_int(from, "downtime-limit", 1); + /* 300MB/s */ + migrate_set_parameter_int(from, "max-bandwidth", 30000000); + + migrate_set_parameter_int(from, "multifd-channels", 16); + migrate_set_parameter_int(to, "multifd-channels", 16); + + migrate_set_capability(from, "multifd", "true"); + migrate_set_capability(to, "multifd", "true"); + + /* Start incoming migration from the 1st socket */ + rsp =3D wait_command(to, "{ 'execute': 'migrate-incoming'," + " 'arguments': { 'uri': 'tcp:127.0.0.1:0' }}"); + qobject_unref(rsp); + + /* Wait for the first serial output from the source */ + wait_for_serial("src_serial"); + + uri =3D migrate_get_socket_address(to, "socket-address"); + + migrate_qmp(from, uri, "{}"); + + wait_for_migration_pass(from); + + migrate_cancel(from); + + args =3D migrate_start_new(); + args->only_target =3D true; + + if (test_migrate_start(&from, &to2, "defer", args)) { + return; + } + + migrate_set_parameter_int(to2, "multifd-channels", 16); + + migrate_set_capability(to2, "multifd", "true"); + + /* Start incoming migration from the 1st socket */ + rsp =3D wait_command(to2, "{ 'execute': 'migrate-incoming'," + " 'arguments': { 'uri': 'tcp:127.0.0.1:0' }}"= ); + qobject_unref(rsp); + + uri =3D migrate_get_socket_address(to2, "socket-address"); + + wait_for_migration_status(from, "cancelled", NULL); + + /* 300ms it should converge */ + migrate_set_parameter_int(from, "downtime-limit", 300); + /* 1GB/s */ + migrate_set_parameter_int(from, "max-bandwidth", 1000000000); + + migrate_qmp(from, uri, "{}"); + + wait_for_migration_pass(from); + + if (!got_stop) { + qtest_qmp_eventwait(from, "STOP"); + } + qtest_qmp_eventwait(to2, "RESUME"); + + wait_for_serial("dest_serial"); + wait_for_migration_complete(from); + test_migrate_end(from, to2, true); + free(uri); +} + int main(int argc, char **argv) { char template[] =3D "/tmp/migration-test-XXXXXX"; @@ -1359,6 +1468,7 @@ int main(int argc, char **argv) =20 qtest_add_func("/migration/auto_converge", test_migrate_auto_converge); qtest_add_func("/migration/multifd/tcp", test_multifd_tcp); + qtest_add_func("/migration/multifd/tcp/cancel", test_multifd_tcp_cance= l); =20 ret =3D g_test_run(); =20 --=20 2.24.1