Skip to content

Commit

Permalink
Add "xen/balloon: add late_initcall_sync() for initial ballooning" patch
Browse files Browse the repository at this point in the history
Another fix for thread-based balloon driver

Fixes QubesOS/qubes-issues#7023

(cherry picked from commit c7f2b45)
  • Loading branch information
marmarek committed Oct 28, 2021
1 parent 627250b commit 046ff60
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
57 changes: 57 additions & 0 deletions 0001-xen-balloon-add-late_initcall_sync-for-initial-ballo.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
From 30dc0817d3982c77b4eb4d03889eabb49e182371 Mon Sep 17 00:00:00 2001
From: Juergen Gross <[email protected]>
Date: Thu, 28 Oct 2021 12:59:52 +0200
Subject: [PATCH] xen/balloon: add late_initcall_sync() for initial ballooning
done

When running as PVH or HVM guest with actual memory < max memory the
hypervisor is using "populate on demand" in order to allow the guest
to balloon down from its maximum memory size. For this to work
correctly the guest must not touch more memory pages than its target
memory size as otherwise the PoD cache will be exhausted and the guest
is crashed as a result of that.

In extreme cases ballooning down might not be finished today before
the init process is started, which can consume lots of memory.

In order to avoid random boot crashes in such cases, add a late init
call to wait for ballooning down having finished for PVH/HVM guests.

Cc: <[email protected]>
Reported-by: Marek Marczykowski-Górecki <[email protected]>
Signed-off-by: Juergen Gross <[email protected]>
---
drivers/xen/balloon.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)

diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index 1911a62a6d9c..60314e69f7fa 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -765,3 +765,23 @@ static int __init balloon_init(void)
return 0;
}
subsys_initcall(balloon_init);
+
+static int __init balloon_wait_finish(void)
+{
+ if (!xen_domain())
+ return -ENODEV;
+
+ /* PV guests don't need to wait. */
+ if (xen_pv_domain() || !current_credit())
+ return 0;
+
+ pr_info("Waiting for initial ballooning down having finished.\n");
+
+ while (current_credit())
+ schedule_timeout_interruptible(HZ / 10);
+
+ pr_info("Initial ballooning down finished.\n");
+
+ return 0;
+}
+late_initcall_sync(balloon_wait_finish);
--
2.31.1

1 change: 1 addition & 0 deletions kernel.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ Patch11: 0012-xen-blkfront-prepare-request-locally-only-then-put-i.patch
Patch12: 0013-xen-pcifront-pciback-Update-pciif.h-with-err-and-res.patch
Patch13: 0014-xen-pciback-add-attribute-to-allow-MSI-enable-flag-w.patch
Patch14: 0001-Revert-xen-netback-Check-for-hotplug-status-existenc.patch
Patch16: 0001-xen-balloon-add-late_initcall_sync-for-initial-ballo.patch

%description
Qubes Dom0 kernel.
Expand Down

0 comments on commit 046ff60

Please sign in to comment.