From nobody Wed Nov 5 12:53:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534967050970743.3053201907201; Wed, 22 Aug 2018 12:44:10 -0700 (PDT) Received: from localhost ([::1]:60568 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsZ2t-0000FY-Hu for importer@patchew.org; Wed, 22 Aug 2018 15:43:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsZ1n-000820-CB for qemu-devel@nongnu.org; Wed, 22 Aug 2018 15:42:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsYrj-0003KH-FW for qemu-devel@nongnu.org; Wed, 22 Aug 2018 15:32:31 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:41348 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fsYrj-0003J7-83 for qemu-devel@nongnu.org; Wed, 22 Aug 2018 15:32:27 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 85F84402170A; Wed, 22 Aug 2018 19:32:26 +0000 (UTC) Received: from gimli.home (ovpn-120-10.rdu2.redhat.com [10.10.120.10]) by smtp.corp.redhat.com (Postfix) with ESMTP id 878521134CB7; Wed, 22 Aug 2018 19:32:24 +0000 (UTC) From: Alex Williamson To: qemu-devel@nongnu.org Date: Wed, 22 Aug 2018 13:32:24 -0600 Message-ID: <153496608036.29987.17320139395542439335.stgit@gimli.home> User-Agent: StGit/0.18-136-gffd7-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Wed, 22 Aug 2018 19:32:26 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Wed, 22 Aug 2018 19:32:26 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'alex.williamson@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH] postcopy: Synchronize usage of the balloon inhibitor X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, borntraeger@de.ibm.com, dgilbert@redhat.com, quintela@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 While the qemu_balloon_inhibit() interface appears rather general purpose, postcopy uses it in a last-caller-wins approach with no guarantee of balanc= ed inhibits and de-inhibits. Wrap postcopy's usage of the inhibitor to give it one vote overall, using the same last-caller-wins approach as previously implemented at the balloon level. Reported-by: Christian Borntraeger Fixes: 01ccbec7bdf6 ("balloon: Allow multiple inhibit users") Signed-off-by: Alex Williamson Reviewed-by: Cornelia Huck Reviewed-by: Juan Quintela Tested-by: Christian Borntraeger --- Note that checkpatch.pl doesn't appreciate the initialization of the static variable to false, imo it improves the readability of the code in this instance, so I've left it. Shout if you disagree. If this gets acks I can include it with a pull request for a couple other fixes to the original series. Thanks migration/postcopy-ram.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index 932f18894990..c2e387ed44b4 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -509,6 +509,20 @@ int postcopy_ram_incoming_init(MigrationIncomingState = *mis) return 0; } =20 +/* + * Manage a single vote to the QEMU balloon inhibitor for all postcopy usa= ge, + * last caller wins. + */ +static void postcopy_balloon_inhibit(bool state) +{ + static bool cur_state =3D false; + + if (state !=3D cur_state) { + qemu_balloon_inhibit(state); + cur_state =3D state; + } +} + /* * At the end of a migration where postcopy_ram_incoming_init was called. */ @@ -539,7 +553,7 @@ int postcopy_ram_incoming_cleanup(MigrationIncomingStat= e *mis) mis->have_fault_thread =3D false; } =20 - qemu_balloon_inhibit(false); + postcopy_balloon_inhibit(false); =20 if (enable_mlock) { if (os_mlock() < 0) { @@ -1107,7 +1121,7 @@ int postcopy_ram_enable_notify(MigrationIncomingState= *mis) * Ballooning can mark pages as absent while we're postcopying * that would cause false userfaults. */ - qemu_balloon_inhibit(true); + postcopy_balloon_inhibit(true); =20 trace_postcopy_ram_enable_notify(); =20