From 8390e2846683049dfb3df6d25195c866f8fd173c Mon Sep 17 00:00:00 2001 From: HW42 Date: Mon, 2 Oct 2017 22:29:35 +0200 Subject: [PATCH] Revert patch which breaks memory ballooning for HVM/PVH --- ...on-don-t-online-new-memory-initially.patch | 99 +++++++++++++++++++ series.conf | 2 + 2 files changed, 101 insertions(+) create mode 100644 patches.xen/Revert-xen-balloon-don-t-online-new-memory-initially.patch diff --git a/patches.xen/Revert-xen-balloon-don-t-online-new-memory-initially.patch b/patches.xen/Revert-xen-balloon-don-t-online-new-memory-initially.patch new file mode 100644 index 0000000..6ef698f --- /dev/null +++ b/patches.xen/Revert-xen-balloon-don-t-online-new-memory-initially.patch @@ -0,0 +1,99 @@ +From ae10fc424982b3c841c77dc9b1fa3ec96d8f5851 Mon Sep 17 00:00:00 2001 +From: HW42 +Date: Fri, 29 Sep 2017 17:59:14 +0200 +Subject: [PATCH] Revert "xen/balloon: don't online new memory initially" + +This reverts commit 96edd61dcf44362d3ef0bed1a5361e0ac7886a63. +--- + drivers/xen/balloon.c | 3 --- + drivers/xen/xen-balloon.c | 22 ++++++++++------------ + include/xen/balloon.h | 8 -------- + 3 files changed, 10 insertions(+), 23 deletions(-) + +diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c +index ab609255a0f3..50dcb68d8070 100644 +--- a/drivers/xen/balloon.c ++++ b/drivers/xen/balloon.c +@@ -780,9 +780,6 @@ static int __init balloon_init(void) + } + #endif + +- /* Init the xen-balloon driver. */ +- xen_balloon_init(); +- + return 0; + } + subsys_initcall(balloon_init); +diff --git a/drivers/xen/xen-balloon.c b/drivers/xen/xen-balloon.c +index e89136ab851e..e7715cb62eef 100644 +--- a/drivers/xen/xen-balloon.c ++++ b/drivers/xen/xen-balloon.c +@@ -59,8 +59,6 @@ static void watch_target(struct xenbus_watch *watch, + { + unsigned long long new_target; + int err; +- static bool watch_fired; +- static long target_diff; + + err = xenbus_scanf(XBT_NIL, "memory", "target", "%llu", &new_target); + if (err != 1) { +@@ -71,14 +69,7 @@ static void watch_target(struct xenbus_watch *watch, + /* The given memory/target value is in KiB, so it needs converting to + * pages. PAGE_SHIFT converts bytes to pages, hence PAGE_SHIFT - 10. + */ +- new_target >>= PAGE_SHIFT - 10; +- if (watch_fired) { +- balloon_set_new_target(new_target - target_diff); +- return; +- } +- +- watch_fired = true; +- target_diff = new_target - balloon_stats.target_pages; ++ balloon_set_new_target(new_target >> (PAGE_SHIFT - 10)); + } + static struct xenbus_watch target_watch = { + .node = "memory/target", +@@ -103,15 +94,22 @@ static struct notifier_block xenstore_notifier = { + .notifier_call = balloon_init_watcher, + }; + +-void xen_balloon_init(void) ++static int __init balloon_init(void) + { ++ if (!xen_domain()) ++ return -ENODEV; ++ ++ pr_info("Initialising balloon driver\n"); ++ + register_balloon(&balloon_dev); + + register_xen_selfballooning(&balloon_dev); + + register_xenstore_notifier(&xenstore_notifier); ++ ++ return 0; + } +-EXPORT_SYMBOL_GPL(xen_balloon_init); ++subsys_initcall(balloon_init); + + #define BALLOON_SHOW(name, format, args...) \ + static ssize_t show_##name(struct device *dev, \ +diff --git a/include/xen/balloon.h b/include/xen/balloon.h +index 8906361bb50c..d1767dfb0d95 100644 +--- a/include/xen/balloon.h ++++ b/include/xen/balloon.h +@@ -35,11 +35,3 @@ static inline int register_xen_selfballooning(struct device *dev) + return -ENOSYS; + } + #endif +- +-#ifdef CONFIG_XEN_BALLOON +-void xen_balloon_init(void); +-#else +-static inline void xen_balloon_init(void) +-{ +-} +-#endif +-- +2.14.2 + diff --git a/series.conf b/series.conf index 0950b46..74d8e79 100644 --- a/series.conf +++ b/series.conf @@ -22,3 +22,5 @@ patches.xen/xsa155-linux44-0013-xen-blkfront-prepare-request-locally-only-then-p # MSI-X enabled device passthrough fix (#1734) patches.xen/pci_op-cleanup.patch + +patches.xen/Revert-xen-balloon-don-t-online-new-memory-initially.patch