[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/5] xen/sched: create public function for cpupools creation
Create new public function to create cpupools, it checks for pool id uniqueness before creating the pool and can take a scheduler id or a negative value that means the default Xen scheduler will be used. Signed-off-by: Luca Fancellu <luca.fancellu@xxxxxxx> --- xen/common/sched/cpupool.c | 26 ++++++++++++++++++++++++++ xen/include/xen/sched.h | 17 +++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/xen/common/sched/cpupool.c b/xen/common/sched/cpupool.c index 8c6e6eb9ccd5..4da12528d6b9 100644 --- a/xen/common/sched/cpupool.c +++ b/xen/common/sched/cpupool.c @@ -1218,6 +1218,32 @@ static void cpupool_hypfs_init(void) #endif /* CONFIG_HYPFS */ +struct cpupool *__init cpupool_create_pool(unsigned int pool_id, int sched_id) +{ + struct cpupool *pool; + + ASSERT(!spin_is_locked(&cpupool_lock)); + + spin_lock(&cpupool_lock); + /* Check if a cpupool with pool_id exists */ + pool = __cpupool_find_by_id(pool_id, true); + spin_unlock(&cpupool_lock); + + /* Pool exists, return an error */ + if ( pool ) + return NULL; + + if ( sched_id < 0 ) + sched_id = scheduler_get_default()->sched_id; + + pool = cpupool_create(pool_id, sched_id); + + BUG_ON(IS_ERR(pool)); + cpupool_put(pool); + + return pool; +} + static int __init cpupool_init(void) { unsigned int cpu; diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 37f78cc4c4c9..a50df1bccdc0 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -1145,6 +1145,23 @@ int cpupool_move_domain(struct domain *d, struct cpupool *c); int cpupool_do_sysctl(struct xen_sysctl_cpupool_op *op); unsigned int cpupool_get_id(const struct domain *d); const cpumask_t *cpupool_valid_cpus(const struct cpupool *pool); + +/* + * cpupool_create_pool - Creates a cpupool + * @pool_id: id of the pool to be created + * @sched_id: id of the scheduler to be used for the pool + * + * Creates a cpupool with pool_id id, the id must be unique and the function + * will return an error if the pool id exists. + * The sched_id parameter identifies the scheduler to be used, if it is + * negative, the default scheduler of Xen will be used. + * + * returns: + * pointer to the struct cpupool just created, on success + * NULL, on cpupool creation error + */ +struct cpupool *cpupool_create_pool(unsigned int pool_id, int sched_id); + extern void dump_runq(unsigned char key); void arch_do_physinfo(struct xen_sysctl_physinfo *pi); -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |