From nobody Wed Nov 5 00:11:34 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 1531867812476189.0902265943929; Tue, 17 Jul 2018 15:50:12 -0700 (PDT) Received: from localhost ([::1]:33758 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffYmv-0006IN-RA for importer@patchew.org; Tue, 17 Jul 2018 18:49:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49371) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffYkv-0005Qz-FS for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ffYku-0000l5-OI for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:41 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:39674 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 1ffYku-0000kw-Ix for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:40 -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 20087400225D; Tue, 17 Jul 2018 22:47:40 +0000 (UTC) Received: from gimli.home (ovpn-116-29.phx2.redhat.com [10.3.116.29]) by smtp.corp.redhat.com (Postfix) with ESMTP id A585D111C481; Tue, 17 Jul 2018 22:47:37 +0000 (UTC) From: Alex Williamson To: qemu-devel@nongnu.org Date: Tue, 17 Jul 2018 16:47:37 -0600 Message-ID: <20180717224737.14019.3324.stgit@gimli.home> In-Reply-To: <20180717222721.14019.27548.stgit@gimli.home> References: <20180717222721.14019.27548.stgit@gimli.home> User-Agent: StGit/0.18-102-gdf9f 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.7]); Tue, 17 Jul 2018 22:47:40 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Tue, 17 Jul 2018 22:47:40 +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] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [RFC PATCH 1/3] balloon: Allow nested inhibits 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: kvm@vger.kernel.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 A simple true/false internal state does not allow multiple users. Fix this within the existing interface by converting to a counter, so long as the counter is elevated, ballooning is inhibited. Signed-off-by: Alex Williamson --- balloon.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/balloon.c b/balloon.c index 6bf0a9681377..2a6a7e1a22a0 100644 --- a/balloon.c +++ b/balloon.c @@ -37,16 +37,17 @@ static QEMUBalloonEvent *balloon_event_fn; static QEMUBalloonStatus *balloon_stat_fn; static void *balloon_opaque; -static bool balloon_inhibited; +static int balloon_inhibited; =20 bool qemu_balloon_is_inhibited(void) { - return balloon_inhibited; + return balloon_inhibited > 0; } =20 void qemu_balloon_inhibit(bool state) { - balloon_inhibited =3D state; + balloon_inhibited +=3D (state ? 1 : -1); + assert(balloon_inhibited >=3D 0); } =20 static bool have_balloon(Error **errp) From nobody Wed Nov 5 00:11:34 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 1531867812479916.9571254718768; Tue, 17 Jul 2018 15:50:12 -0700 (PDT) Received: from localhost ([::1]:33760 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffYn3-0006PU-5D for importer@patchew.org; Tue, 17 Jul 2018 18:49:53 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffYl6-0005Uf-07 for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ffYl1-0000oU-6e for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:52 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36534) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ffYl0-0000o7-V9 for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:47 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F15275F7A0; Tue, 17 Jul 2018 22:47:45 +0000 (UTC) Received: from gimli.home (ovpn-116-29.phx2.redhat.com [10.3.116.29]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9ABC01992A; Tue, 17 Jul 2018 22:47:45 +0000 (UTC) From: Alex Williamson To: qemu-devel@nongnu.org Date: Tue, 17 Jul 2018 16:47:45 -0600 Message-ID: <20180717224745.14019.33974.stgit@gimli.home> In-Reply-To: <20180717222721.14019.27548.stgit@gimli.home> References: <20180717222721.14019.27548.stgit@gimli.home> User-Agent: StGit/0.18-102-gdf9f MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 17 Jul 2018 22:47:46 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFC PATCH 2/3] kvm: Use inhibit to prevent ballooning without synchronous mmu 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: kvm@vger.kernel.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Remove KVM specific tests in balloon_page(), instead marking ballooning as inhibited without KVM_CAP_SYNC_MMU support. Signed-off-by: Alex Williamson --- accel/kvm/kvm-all.c | 4 ++++ hw/virtio/virtio-balloon.c | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index eb7db92a5e3b..38f468d8e2b1 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -39,6 +39,7 @@ #include "trace.h" #include "hw/irq.h" #include "sysemu/sev.h" +#include "sysemu/balloon.h" =20 #include "hw/boards.h" =20 @@ -1698,6 +1699,9 @@ static int kvm_init(MachineState *ms) s->many_ioeventfds =3D kvm_check_many_ioeventfds(); =20 s->sync_mmu =3D !!kvm_vm_check_extension(kvm_state, KVM_CAP_SYNC_MMU); + if (!s->sync_mmu) { + qemu_balloon_inhibit(true); + } =20 return 0; =20 diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 1f7a87f09429..b5425080c5fb 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -21,7 +21,6 @@ #include "hw/mem/pc-dimm.h" #include "sysemu/balloon.h" #include "hw/virtio/virtio-balloon.h" -#include "sysemu/kvm.h" #include "exec/address-spaces.h" #include "qapi/error.h" #include "qapi/qapi-events-misc.h" @@ -36,8 +35,7 @@ =20 static void balloon_page(void *addr, int deflate) { - if (!qemu_balloon_is_inhibited() && (!kvm_enabled() || - kvm_has_sync_mmu())) { + if (!qemu_balloon_is_inhibited()) { qemu_madvise(addr, BALLOON_PAGE_SIZE, deflate ? QEMU_MADV_WILLNEED : QEMU_MADV_DONTNEED); } From nobody Wed Nov 5 00:11:34 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 1531867915615900.7097848830728; Tue, 17 Jul 2018 15:51:55 -0700 (PDT) Received: from localhost ([::1]:33776 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffYou-00085S-Df for importer@patchew.org; Tue, 17 Jul 2018 18:51:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49443) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ffYl9-0005WI-U1 for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ffYl9-0000sv-1e for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:29272) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ffYl8-0000sJ-K3 for qemu-devel@nongnu.org; Tue, 17 Jul 2018 18:47:54 -0400 Received: from smtp.corp.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CA87B3084040; Tue, 17 Jul 2018 22:47:53 +0000 (UTC) Received: from gimli.home (ovpn-116-29.phx2.redhat.com [10.3.116.29]) by smtp.corp.redhat.com (Postfix) with ESMTP id 97C7BBD216; Tue, 17 Jul 2018 22:47:51 +0000 (UTC) From: Alex Williamson To: qemu-devel@nongnu.org Date: Tue, 17 Jul 2018 16:47:51 -0600 Message-ID: <20180717224751.14019.95362.stgit@gimli.home> In-Reply-To: <20180717222721.14019.27548.stgit@gimli.home> References: <20180717222721.14019.27548.stgit@gimli.home> User-Agent: StGit/0.18-102-gdf9f MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.84 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Tue, 17 Jul 2018 22:47:53 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFC PATCH 3/3] vfio: Inhibit ballooning 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: kvm@vger.kernel.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 For all directly assigned devices and potentially some mdev devices, internal management of pinned pages is incompatible with ballooning. In the case of mdev devices, QEMU cannot know which pages the vendor driver has mapped for the device. It could be only the working set, which should never be a ballooning victim page, or it could be the entire VM address space. Until the vfio IOMMU interface can tell us more about the support for handling ballooning, assume any vfio container inhibits ballooning. Signed-off-by: Alex Williamson --- hw/vfio/common.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index fb396cf00ac4..8124dd8df3c1 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -32,6 +32,7 @@ #include "hw/hw.h" #include "qemu/error-report.h" #include "qemu/range.h" +#include "sysemu/balloon.h" #include "sysemu/kvm.h" #include "trace.h" #include "qapi/error.h" @@ -1218,6 +1219,9 @@ static int vfio_connect_container(VFIOGroup *group, A= ddressSpace *as, =20 container->initialized =3D true; =20 + /* vfio is currently incompatible with ballooning */ + qemu_balloon_inhibit(true); + return 0; listener_release_exit: QLIST_REMOVE(group, container_next); @@ -1276,6 +1280,8 @@ static void vfio_disconnect_container(VFIOGroup *grou= p) g_free(container); =20 vfio_put_address_space(space); + + qemu_balloon_inhibit(false); } } =20