Message ID | 20220405085741.18336-7-luca.fancellu@arm.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Boot time cpupools | expand |
On 05.04.22 10:57, Luca Fancellu wrote: > 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@arm.com> Reviewed-by: Juergen Gross <jgross@suse.com> Juergen
diff --git a/xen/common/boot_cpupools.c b/xen/common/boot_cpupools.c index 1f940330a62d..a56baf3329a9 100644 --- a/xen/common/boot_cpupools.c +++ b/xen/common/boot_cpupools.c @@ -201,8 +201,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 86a175f99cd5..83112f5f04d3 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); @@ -1242,9 +1239,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 b62315ad5e5d..e8f31758c058 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -1185,7 +1185,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) {
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@arm.com> --- Changes in v5: - no changes Changes in v4: - no changes Changes in v3: - fix typo in commit message (Juergen) - rebase changes Changes in v2: - new patch --- xen/common/boot_cpupools.c | 5 ++++- xen/common/sched/cpupool.c | 8 +------- xen/include/xen/sched.h | 5 ++++- 3 files changed, 9 insertions(+), 9 deletions(-)