[Xen-devel] [PATCH v2] xen/sched: remove sched_init_pdata()

Juergen Gross posted 1 patch 33 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/xen tags/patchew/20200211121530.11665-1-jgross@suse.com
xen/common/sched/core.c    |  9 ++++-----
xen/common/sched/credit.c  | 12 ------------
xen/common/sched/credit2.c | 21 ---------------------
xen/common/sched/null.c    | 10 ----------
xen/common/sched/private.h |  8 --------
xen/common/sched/rt.c      | 31 -------------------------------
6 files changed, 4 insertions(+), 87 deletions(-)

[Xen-devel] [PATCH v2] xen/sched: remove sched_init_pdata()

Posted by Juergen Gross 33 weeks ago
sched_init_pdata() is used nowhere, it can be removed. Same applies to
the .init_pdata hook of the per-scheduler interface. The last caller
has been removed with commit f855dd962523b6cb47a92037bdd28b1485141abe
("sched: add minimalistic idle scheduler for free cpus").

With the idle scheduler introduction the switch_sched hook became the
only place where new cpus get added to a normal scheduler, so the
init_pdata functionality is performed inside that hook.

Adjust some comments as well to reflect reality. While at it correct a
typo in a comment next to a modified comment.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 xen/common/sched/core.c    |  9 ++++-----
 xen/common/sched/credit.c  | 12 ------------
 xen/common/sched/credit2.c | 21 ---------------------
 xen/common/sched/null.c    | 10 ----------
 xen/common/sched/private.h |  8 --------
 xen/common/sched/rt.c      | 31 -------------------------------
 6 files changed, 4 insertions(+), 87 deletions(-)

diff --git a/xen/common/sched/core.c b/xen/common/sched/core.c
index d4e8944e0e..2e43f8029f 100644
--- a/xen/common/sched/core.c
+++ b/xen/common/sched/core.c
@@ -2775,10 +2775,10 @@ static int cpu_schedule_callback(
      * order. If no per-pCPU memory was allocated, there is no need to
      * provide an implementation of free_pdata. deinit_pdata may, however,
      * be necessary/useful in this case too (e.g., it can undo something done
-     * on scheduler wide data structure during init_pdata). Both deinit_pdata
+     * on scheduler wide data structure during switch_sched). Both deinit_pdata
      * and free_pdata are called during CPU_DEAD.
      *
-     * If someting goes wrong during bringup, we go to CPU_UP_CANCELLED.
+     * If something goes wrong during bringup, we go to CPU_UP_CANCELLED.
      */
     switch ( action )
     {
@@ -2968,9 +2968,8 @@ int schedule_cpu_add(unsigned int cpu, struct cpupool *c)
      * To setup the cpu for the new scheduler we need:
      *  - a valid instance of per-CPU scheduler specific data, as it is
      *    allocated by sched_alloc_pdata(). Note that we do not want to
-     *    initialize it yet (i.e., we are not calling sched_init_pdata()).
-     *    That will be done by the target scheduler, in sched_switch_sched(),
-     *    in proper ordering and with locking.
+     *    initialize it yet, as that will be done by the target scheduler,
+     *    in sched_switch_sched(), in proper ordering and with locking.
      *  - a valid instance of per-vCPU scheduler specific data, for the idle
      *    vCPU of cpu. That is what the target scheduler will use for the
      *    sched_priv field of the per-vCPU info of the idle domain.
diff --git a/xen/common/sched/credit.c b/xen/common/sched/credit.c
index 05946eea6e..93d89da278 100644
--- a/xen/common/sched/credit.c
+++ b/xen/common/sched/credit.c
@@ -614,17 +614,6 @@ init_pdata(struct csched_private *prv, struct csched_pcpu *spc, int cpu)
     spc->nr_runnable = 0;
 }
 
-static void
-csched_init_pdata(const struct scheduler *ops, void *pdata, int cpu)
-{
-    unsigned long flags;
-    struct csched_private *prv = CSCHED_PRIV(ops);
-
-    spin_lock_irqsave(&prv->lock, flags);
-    init_pdata(prv, pdata, cpu);
-    spin_unlock_irqrestore(&prv->lock, flags);
-}
-
 /* Change the scheduler of cpu to us (Credit). */
 static spinlock_t *
 csched_switch_sched(struct scheduler *new_ops, unsigned int cpu,
@@ -2273,7 +2262,6 @@ static const struct scheduler sched_credit_def = {
     .alloc_udata    = csched_alloc_udata,
     .free_udata     = csched_free_udata,
     .alloc_pdata    = csched_alloc_pdata,
-    .init_pdata     = csched_init_pdata,
     .deinit_pdata   = csched_deinit_pdata,
     .free_pdata     = csched_free_pdata,
     .switch_sched   = csched_switch_sched,
diff --git a/xen/common/sched/credit2.c b/xen/common/sched/credit2.c
index f2752f27e2..7d104f15d0 100644
--- a/xen/common/sched/credit2.c
+++ b/xen/common/sched/credit2.c
@@ -3816,26 +3816,6 @@ init_pdata(struct csched2_private *prv, struct csched2_pcpu *spc,
     return spc->runq_id;
 }
 
-static void
-csched2_init_pdata(const struct scheduler *ops, void *pdata, int cpu)
-{
-    struct csched2_private *prv = csched2_priv(ops);
-    spinlock_t *old_lock;
-    unsigned long flags;
-    unsigned rqi;
-
-    write_lock_irqsave(&prv->lock, flags);
-    old_lock = pcpu_schedule_lock(cpu);
-
-    rqi = init_pdata(prv, pdata, cpu);
-    /* Move the scheduler lock to the new runq lock. */
-    get_sched_res(cpu)->schedule_lock = &prv->rqd[rqi].lock;
-
-    /* _Not_ pcpu_schedule_unlock(): schedule_lock may have changed! */
-    spin_unlock(old_lock);
-    write_unlock_irqrestore(&prv->lock, flags);
-}
-
 /* Change the scheduler of cpu to us (Credit2). */
 static spinlock_t *
 csched2_switch_sched(struct scheduler *new_ops, unsigned int cpu,
@@ -4083,7 +4063,6 @@ static const struct scheduler sched_credit2_def = {
     .alloc_udata    = csched2_alloc_udata,
     .free_udata     = csched2_free_udata,
     .alloc_pdata    = csched2_alloc_pdata,
-    .init_pdata     = csched2_init_pdata,
     .deinit_pdata   = csched2_deinit_pdata,
     .free_pdata     = csched2_free_pdata,
     .switch_sched   = csched2_switch_sched,
diff --git a/xen/common/sched/null.c b/xen/common/sched/null.c
index 8c3101649d..82d5d1baab 100644
--- a/xen/common/sched/null.c
+++ b/xen/common/sched/null.c
@@ -166,15 +166,6 @@ static void init_pdata(struct null_private *prv, struct null_pcpu *npc,
     npc->unit = NULL;
 }
 
-static void null_init_pdata(const struct scheduler *ops, void *pdata, int cpu)
-{
-    struct null_private *prv = null_priv(ops);
-
-    ASSERT(pdata);
-
-    init_pdata(prv, pdata, cpu);
-}
-
 static void null_deinit_pdata(const struct scheduler *ops, void *pcpu, int cpu)
 {
     struct null_private *prv = null_priv(ops);
@@ -1042,7 +1033,6 @@ static const struct scheduler sched_null_def = {
     .deinit         = null_deinit,
     .alloc_pdata    = null_alloc_pdata,
     .free_pdata     = null_free_pdata,
-    .init_pdata     = null_init_pdata,
     .switch_sched   = null_switch_sched,
     .deinit_pdata   = null_deinit_pdata,
 
diff --git a/xen/common/sched/private.h b/xen/common/sched/private.h
index 2a94179baa..367811a12f 100644
--- a/xen/common/sched/private.h
+++ b/xen/common/sched/private.h
@@ -306,7 +306,6 @@ struct scheduler {
                                     struct sched_unit *, void *);
     void         (*free_pdata)     (const struct scheduler *, void *, int);
     void *       (*alloc_pdata)    (const struct scheduler *, int);
-    void         (*init_pdata)     (const struct scheduler *, void *, int);
     void         (*deinit_pdata)   (const struct scheduler *, void *, int);
 
     /* Returns ERR_PTR(-err) for error, NULL for 'nothing needed'. */
@@ -408,13 +407,6 @@ static inline void sched_free_pdata(const struct scheduler *s, void *data,
         s->free_pdata(s, data, cpu);
 }
 
-static inline void sched_init_pdata(const struct scheduler *s, void *data,
-                                    int cpu)
-{
-    if ( s->init_pdata )
-        s->init_pdata(s, data, cpu);
-}
-
 static inline void sched_deinit_pdata(const struct scheduler *s, void *data,
                                       int cpu)
 {
diff --git a/xen/common/sched/rt.c b/xen/common/sched/rt.c
index 66585ed50a..c24cd2ac32 100644
--- a/xen/common/sched/rt.c
+++ b/xen/common/sched/rt.c
@@ -713,36 +713,6 @@ rt_deinit(struct scheduler *ops)
     xfree(prv);
 }
 
-/*
- * Point per_cpu spinlock to the global system lock;
- * All cpu have same global system lock
- */
-static void
-rt_init_pdata(const struct scheduler *ops, void *pdata, int cpu)
-{
-    struct rt_private *prv = rt_priv(ops);
-    spinlock_t *old_lock;
-    unsigned long flags;
-
-    old_lock = pcpu_schedule_lock_irqsave(cpu, &flags);
-
-    /*
-     * TIMER_STATUS_invalid means we are the first cpu that sees the timer
-     * allocated but not initialized, and so it's up to us to initialize it.
-     */
-    if ( prv->repl_timer.status == TIMER_STATUS_invalid )
-    {
-        init_timer(&prv->repl_timer, repl_timer_handler, (void *)ops, cpu);
-        dprintk(XENLOG_DEBUG, "RTDS: timer initialized on cpu %u\n", cpu);
-    }
-
-    /* Move the scheduler lock to our global runqueue lock.  */
-    get_sched_res(cpu)->schedule_lock = &prv->lock;
-
-    /* _Not_ pcpu_schedule_unlock(): per_cpu().schedule_lock changed! */
-    spin_unlock_irqrestore(old_lock, flags);
-}
-
 /* Change the scheduler of cpu to us (RTDS). */
 static spinlock_t *
 rt_switch_sched(struct scheduler *new_ops, unsigned int cpu,
@@ -1568,7 +1538,6 @@ static const struct scheduler sched_rtds_def = {
     .dump_settings  = rt_dump,
     .init           = rt_init,
     .deinit         = rt_deinit,
-    .init_pdata     = rt_init_pdata,
     .switch_sched   = rt_switch_sched,
     .deinit_pdata   = rt_deinit_pdata,
     .alloc_domdata  = rt_alloc_domdata,
-- 
2.16.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v2] xen/sched: remove sched_init_pdata()

Posted by Dario Faggioli 32 weeks ago
On Tue, 2020-02-11 at 13:15 +0100, Juergen Gross wrote:
> sched_init_pdata() is used nowhere, it can be removed. Same applies
> to
> the .init_pdata hook of the per-scheduler interface. The last caller
> has been removed with commit f855dd962523b6cb47a92037bdd28b1485141abe
> ("sched: add minimalistic idle scheduler for free cpus").
> 
> With the idle scheduler introduction the switch_sched hook became the
> only place where new cpus get added to a normal scheduler, so the
> init_pdata functionality is performed inside that hook.
> 
> Adjust some comments as well to reflect reality. While at it correct
> a
> typo in a comment next to a modified comment.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>
>
Reviewed-by: Dario Faggioli <dfaggioli@suse.com>

Regards
-- 
Dario Faggioli, Ph.D
http://about.me/dario.faggioli
Virtualization Software Engineer
SUSE Labs, SUSE https://www.suse.com/
-------------------------------------------------------------------
<<This happens because _I_ choose it to happen!>> (Raistlin Majere)

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel