|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/cpupool: Allow cpupool0 to use different scheduler
commit 0badfb110fa33ca9ffd3bdc3a5200cded03e6106
Author: Luca Fancellu <luca.fancellu@xxxxxxx>
AuthorDate: Fri May 6 13:00:12 2022 +0100
Commit: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
CommitDate: Mon May 9 13:33:03 2022 -0700
xen/cpupool: Allow cpupool0 to use different scheduler
Currently cpupool0 can use only the default scheduler, and
cpupool_create has an hardcoded behavior when creating the pool 0
that doesn't allocate new memory for the scheduler, but uses the
default scheduler structure in memory.
With this commit it is possible to allocate a different scheduler for
the cpupool0 when using the boot time cpupool.
To achieve this the hardcoded behavior in cpupool_create is removed
and the cpupool0 creation is moved.
When compiling without boot time cpupools enabled, the current
behavior is maintained (except that cpupool0 scheduler memory will be
allocated).
Signed-off-by: Luca Fancellu <luca.fancellu@xxxxxxx>
Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
---
xen/common/sched/boot-cpupool.c | 5 ++++-
xen/common/sched/cpupool.c | 8 +-------
xen/include/xen/sched.h | 5 ++++-
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/xen/common/sched/boot-cpupool.c b/xen/common/sched/boot-cpupool.c
index 240bae4ceb..5955e6f9a9 100644
--- a/xen/common/sched/boot-cpupool.c
+++ b/xen/common/sched/boot-cpupool.c
@@ -205,8 +205,11 @@ void __init btcpupools_allocate_pools(void)
if ( add_extra_cpupool )
next_pool_id++;
+ /* Keep track of cpupool id 0 with the global cpupool0 */
+ cpupool0 = cpupool_create_pool(0, pool_sched_map[0]);
+
/* Create cpupools with selected schedulers */
- for ( i = 0; i < next_pool_id; i++ )
+ for ( i = 1; i < next_pool_id; i++ )
cpupool_create_pool(i, pool_sched_map[i]);
}
diff --git a/xen/common/sched/cpupool.c b/xen/common/sched/cpupool.c
index 0a93bcc631..f6e3d97e52 100644
--- a/xen/common/sched/cpupool.c
+++ b/xen/common/sched/cpupool.c
@@ -312,10 +312,7 @@ static struct cpupool *cpupool_create(unsigned int poolid,
c->cpupool_id = q->cpupool_id + 1;
}
- if ( poolid == 0 )
- c->sched = scheduler_get_default();
- else
- c->sched = scheduler_alloc(sched_id);
+ c->sched = scheduler_alloc(sched_id);
if ( IS_ERR(c->sched) )
{
ret = PTR_ERR(c->sched);
@@ -1248,9 +1245,6 @@ static int __init cf_check cpupool_init(void)
cpupool_hypfs_init();
- cpupool0 = cpupool_create(0, 0);
- BUG_ON(IS_ERR(cpupool0));
- cpupool_put(cpupool0);
register_cpu_notifier(&cpu_nfb);
btcpupools_dtb_parse();
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 653317cf4d..463d41ffb6 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -1196,7 +1196,10 @@ void btcpupools_dtb_parse(void);
int btcpupools_get_domain_pool_id(const struct dt_device_node *node);
#else /* !CONFIG_BOOT_TIME_CPUPOOLS */
-static inline void btcpupools_allocate_pools(void) {}
+static inline void btcpupools_allocate_pools(void)
+{
+ cpupool0 = cpupool_create_pool(0, -1);
+}
static inline void btcpupools_dtb_parse(void) {}
static inline unsigned int btcpupools_get_cpupool_id(unsigned int cpu)
{
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |