summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '0035-xen-sched-setup-dom0-vCPUs-affinity-only-once.patch')
-rw-r--r--0035-xen-sched-setup-dom0-vCPUs-affinity-only-once.patch123
1 files changed, 0 insertions, 123 deletions
diff --git a/0035-xen-sched-setup-dom0-vCPUs-affinity-only-once.patch b/0035-xen-sched-setup-dom0-vCPUs-affinity-only-once.patch
deleted file mode 100644
index 150de40..0000000
--- a/0035-xen-sched-setup-dom0-vCPUs-affinity-only-once.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From 1e31848cdd8d2ff3cb76f364f04f9771f9b3a8b1 Mon Sep 17 00:00:00 2001
-From: Dario Faggioli <dfaggioli@suse.com>
-Date: Mon, 15 Aug 2022 15:41:25 +0200
-Subject: [PATCH 035/126] xen/sched: setup dom0 vCPUs affinity only once
-
-Right now, affinity for dom0 vCPUs is setup in two steps. This is a
-problem as, at least in Credit2, unit_insert() sees and uses the
-"intermediate" affinity, and place the vCPUs on CPUs where they cannot
-be run. And this in turn results in boot hangs, if the "dom0_nodes"
-parameter is used.
-
-Fix this by setting up the affinity properly once and for all, in
-sched_init_vcpu() called by create_vcpu().
-
-Note that, unless a soft-affinity is explicitly specified for dom0 (by
-using the relaxed mode of "dom0_nodes") we set it to the default, which
-is all CPUs, instead of computing it basing on hard affinity (if any).
-This is because hard and soft affinity should be considered as
-independent user controlled properties. In fact, if we dor derive dom0's
-soft-affinity from its boot-time hard-affinity, such computed value will
-continue to be used even if later the user changes the hard-affinity.
-And this could result in the vCPUs behaving differently than what the
-user wanted and expects.
-
-Fixes: dafd936dddbd ("Make credit2 the default scheduler")
-Reported-by: Olaf Hering <ohering@suse.de>
-Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
-Reviewed-by: Jan Beulich <jbeulich@suse.com>
-master commit: c79e4d209be3ed2a6b8e97c35944786ed2a66b94
-master date: 2022-08-11 11:46:22 +0200
----
- xen/common/sched/core.c | 63 +++++++++++++++++++++++++----------------
- 1 file changed, 39 insertions(+), 24 deletions(-)
-
-diff --git a/xen/common/sched/core.c b/xen/common/sched/core.c
-index 8f4b1ca10d1c..f07bd2681fcb 100644
---- a/xen/common/sched/core.c
-+++ b/xen/common/sched/core.c
-@@ -571,12 +571,46 @@ int sched_init_vcpu(struct vcpu *v)
- return 1;
- }
-
-- /*
-- * Initialize affinity settings. The idler, and potentially
-- * domain-0 VCPUs, are pinned onto their respective physical CPUs.
-- */
-- if ( is_idle_domain(d) || (is_hardware_domain(d) && opt_dom0_vcpus_pin) )
-+ if ( is_idle_domain(d) )
-+ {
-+ /* Idle vCPUs are always pinned onto their respective pCPUs */
- sched_set_affinity(unit, cpumask_of(processor), &cpumask_all);
-+ }
-+ else if ( pv_shim && v->vcpu_id == 0 )
-+ {
-+ /*
-+ * PV-shim: vcpus are pinned 1:1. Initially only 1 cpu is online,
-+ * others will be dealt with when onlining them. This avoids pinning
-+ * a vcpu to a not yet online cpu here.
-+ */
-+ sched_set_affinity(unit, cpumask_of(0), cpumask_of(0));
-+ }
-+ else if ( is_hardware_domain(d) && opt_dom0_vcpus_pin )
-+ {
-+ /*
-+ * If dom0_vcpus_pin is specified, dom0 vCPUs are pinned 1:1 to
-+ * their respective pCPUs too.
-+ */
-+ sched_set_affinity(unit, cpumask_of(processor), &cpumask_all);
-+ }
-+#ifdef CONFIG_X86
-+ else if ( d->domain_id == 0 )
-+ {
-+ /*
-+ * In absence of dom0_vcpus_pin instead, the hard and soft affinity of
-+ * dom0 is controlled by the (x86 only) dom0_nodes parameter. At this
-+ * point it has been parsed and decoded into the dom0_cpus mask.
-+ *
-+ * Note that we always honor what user explicitly requested, for both
-+ * hard and soft affinity, without doing any dynamic computation of
-+ * either of them.
-+ */
-+ if ( !dom0_affinity_relaxed )
-+ sched_set_affinity(unit, &dom0_cpus, &cpumask_all);
-+ else
-+ sched_set_affinity(unit, &cpumask_all, &dom0_cpus);
-+ }
-+#endif
- else
- sched_set_affinity(unit, &cpumask_all, &cpumask_all);
-
-@@ -3386,29 +3420,10 @@ void wait(void)
- void __init sched_setup_dom0_vcpus(struct domain *d)
- {
- unsigned int i;
-- struct sched_unit *unit;
-
- for ( i = 1; i < d->max_vcpus; i++ )
- vcpu_create(d, i);
-
-- /*
-- * PV-shim: vcpus are pinned 1:1.
-- * Initially only 1 cpu is online, others will be dealt with when
-- * onlining them. This avoids pinning a vcpu to a not yet online cpu here.
-- */
-- if ( pv_shim )
-- sched_set_affinity(d->vcpu[0]->sched_unit,
-- cpumask_of(0), cpumask_of(0));
-- else
-- {
-- for_each_sched_unit ( d, unit )
-- {
-- if ( !opt_dom0_vcpus_pin && !dom0_affinity_relaxed )
-- sched_set_affinity(unit, &dom0_cpus, NULL);
-- sched_set_affinity(unit, NULL, &dom0_cpus);
-- }
-- }
--
- domain_update_node_affinity(d);
- }
- #endif
---
-2.37.4
-