From d38e10e58becaf7023e6009002cbdb0feb469e42 Mon Sep 17 00:00:00 2001 From: Diego Sueiro Date: Thu, 18 Feb 2021 16:10:36 +0000 Subject: [PATCH] arm-autonomy: Fix xenbus probe for guest kernels < 5.10.17 The arm64-autonomy-guest kernel from commit 3499ba8198ca ("xen: Fix event channel callback via INTX/GSI") are hanging at `xen:balloon: Initialising balloon driver`. The arm-autonomy-guest kernels older than 5.10.17 need to backport the 0001-arm-xen-Don-t-probe-xenbus-as-part-of-an-early-initc.patch in order to be able to boot. Issue-Id: SCM-2151 Signed-off-by: Diego Sueiro Change-Id: I74f58366f42733be4f67ab3841584efa1636abbb Signed-off-by: Jon Mason --- ...obe-xenbus-as-part-of-an-early-initc.patch | 95 +++++++++++++++++++ .../linux/linux-arm-autonomy.inc | 5 + 2 files changed, 100 insertions(+) create mode 100644 meta-arm-autonomy/recipes-kernel/linux/files/0001-arm-xen-Don-t-probe-xenbus-as-part-of-an-early-initc.patch diff --git a/meta-arm-autonomy/recipes-kernel/linux/files/0001-arm-xen-Don-t-probe-xenbus-as-part-of-an-early-initc.patch b/meta-arm-autonomy/recipes-kernel/linux/files/0001-arm-xen-Don-t-probe-xenbus-as-part-of-an-early-initc.patch new file mode 100644 index 00000000..3ec7fa79 --- /dev/null +++ b/meta-arm-autonomy/recipes-kernel/linux/files/0001-arm-xen-Don-t-probe-xenbus-as-part-of-an-early-initc.patch @@ -0,0 +1,95 @@ +From 89b0c20d80a1ab8aa155af287ff4af378862964f Mon Sep 17 00:00:00 2001 +Message-Id: <89b0c20d80a1ab8aa155af287ff4af378862964f.1613583742.git.diego.sueiro@arm.com> +From: Julien Grall +Date: Wed, 10 Feb 2021 17:06:54 +0000 +Subject: [PATCH] arm/xen: Don't probe xenbus as part of an early initcall + +commit c4295ab0b485b8bc50d2264bcae2acd06f25caaf upstream. + +After Commit 3499ba8198cad ("xen: Fix event channel callback via +INTX/GSI"), xenbus_probe() will be called too early on Arm. This will +recent to a guest hang during boot. + +If the hang wasn't there, we would have ended up to call +xenbus_probe() twice (the second time is in xenbus_probe_initcall()). + +We don't need to initialize xenbus_probe() early for Arm guest. +Therefore, the call in xen_guest_init() is now removed. + +After this change, there is no more external caller for xenbus_probe(). +So the function is turned to a static one. Interestingly there were two +prototypes for it. + +Cc: stable@vger.kernel.org +Fixes: 3499ba8198cad ("xen: Fix event channel callback via INTX/GSI") +Reported-by: Ian Jackson +Signed-off-by: Julien Grall +Reviewed-by: David Woodhouse +Reviewed-by: Stefano Stabellini +Link: https://lore.kernel.org/r/20210210170654.5377-1-julien@xen.org +Signed-off-by: Juergen Gross +Signed-off-by: Greg Kroah-Hartman + +Upstream-Status: Backport +Signed-off-by: Diego Sueiro +--- + arch/arm/xen/enlighten.c | 2 -- + drivers/xen/xenbus/xenbus.h | 1 - + drivers/xen/xenbus/xenbus_probe.c | 2 +- + include/xen/xenbus.h | 2 -- + 4 files changed, 1 insertion(+), 6 deletions(-) + +diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c +index 5a957a9a0984..8ad576ecd0f1 100644 +--- a/arch/arm/xen/enlighten.c ++++ b/arch/arm/xen/enlighten.c +@@ -370,8 +370,6 @@ static int __init xen_guest_init(void) + return -ENOMEM; + } + gnttab_init(); +- if (!xen_initial_domain()) +- xenbus_probe(); + + /* + * Making sure board specific code will not set up ops for +diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h +index dc1537335414..2a93b7c9c159 100644 +--- a/drivers/xen/xenbus/xenbus.h ++++ b/drivers/xen/xenbus/xenbus.h +@@ -115,7 +115,6 @@ int xenbus_probe_node(struct xen_bus_type *bus, + const char *type, + const char *nodename); + int xenbus_probe_devices(struct xen_bus_type *bus); +-void xenbus_probe(void); + + void xenbus_dev_changed(const char *node, struct xen_bus_type *bus); + +diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c +index 18ffd0551b54..8a75092bb148 100644 +--- a/drivers/xen/xenbus/xenbus_probe.c ++++ b/drivers/xen/xenbus/xenbus_probe.c +@@ -683,7 +683,7 @@ void unregister_xenstore_notifier(struct notifier_block *nb) + } + EXPORT_SYMBOL_GPL(unregister_xenstore_notifier); + +-void xenbus_probe(void) ++static void xenbus_probe(void) + { + xenstored_ready = 1; + +diff --git a/include/xen/xenbus.h b/include/xen/xenbus.h +index 2c43b0ef1e4d..bf3cfc7c35d0 100644 +--- a/include/xen/xenbus.h ++++ b/include/xen/xenbus.h +@@ -192,8 +192,6 @@ void xs_suspend_cancel(void); + + struct work_struct; + +-void xenbus_probe(void); +- + #define XENBUS_IS_ERR_READ(str) ({ \ + if (!IS_ERR(str) && strlen(str) == 0) { \ + kfree(str); \ +-- +2.17.1 + diff --git a/meta-arm-autonomy/recipes-kernel/linux/linux-arm-autonomy.inc b/meta-arm-autonomy/recipes-kernel/linux/linux-arm-autonomy.inc index e14ea96e..644f5639 100644 --- a/meta-arm-autonomy/recipes-kernel/linux/linux-arm-autonomy.inc +++ b/meta-arm-autonomy/recipes-kernel/linux/linux-arm-autonomy.inc @@ -49,4 +49,9 @@ python() { and not pn.startswith('linux-linaro-arm') \ and oe.utils.any_distro_features(d, "arm-autonomy-host"): d.appendVar('SRC_URI', ' file://files/0001-xen-Fix-XenStore-initialisation-for-XS_LOCAL.patch' ) + + if kernelVersion and LooseVersion(kernelVersion) < '5.10.17' \ + and pn != 'linux-libc-headers' \ + and oe.utils.any_distro_features(d, "arm-autonomy-guest"): + d.appendVar('SRC_URI', ' file://files/0001-arm-xen-Don-t-probe-xenbus-as-part-of-an-early-initc.patch' ) }