lkml.org 
[lkml]   [2007]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[Patch 4/5] sched: introduce a mutex and corresponding API to serialize access to doms_cur[] array
    doms_cur[] array represents various scheduling domains which are mutually
    exclusive. Currently cpusets code can modify this array (by calling
    partition_sched_domains()) as a result of user modifying sched_load_balance
    flag for various cpusets.

    This patch introduces a mutex and corresponding API (only when
    CONFIG_FAIR_GROUP_SCHED is defined) which allows a reader to safely read the
    doms_cur[] array w/o worrying abt concurrent modifications to the array.

    The fair group scheduler code (introduced in next patch of this series)
    makes use of this mutex to walk thr' doms_cur[] array while rebalancing
    shares of task groups across cpus.

    Signed-off-by: Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>

    ---
    kernel/sched.c | 19 +++++++++++++++++++
    1 files changed, 19 insertions(+)

    Index: current/kernel/sched.c
    ===================================================================
    --- current.orig/kernel/sched.c
    +++ current/kernel/sched.c
    @@ -186,6 +186,9 @@ static struct cfs_rq *init_cfs_rq_p[NR_C
    */
    static DEFINE_MUTEX(task_group_mutex);

    +/* doms_cur_mutex serializes access to doms_cur[] array */
    +static DEFINE_MUTEX(doms_cur_mutex);
    +
    /* Default task group.
    * Every task in system belong to this group at bootup.
    */
    @@ -236,11 +239,23 @@ static inline void unlock_task_group_lis
    mutex_unlock(&task_group_mutex);
    }

    +static inline void lock_doms_cur(void)
    +{
    + mutex_lock(&doms_cur_mutex);
    +}
    +
    +static inline void unlock_doms_cur(void)
    +{
    + mutex_unlock(&doms_cur_mutex);
    +}
    +
    #else

    static inline void set_task_cfs_rq(struct task_struct *p, unsigned int cpu) { }
    static inline void lock_task_group_list(void) { }
    static inline void unlock_task_group_list(void) { }
    +static inline void lock_doms_cur(void) { }
    +static inline void unlock_doms_cur(void) { }

    #endif /* CONFIG_FAIR_GROUP_SCHED */

    @@ -6547,6 +6562,8 @@ void partition_sched_domains(int ndoms_n
    {
    int i, j;

    + lock_doms_cur();
    +
    /* always unregister in case we don't destroy any domains */
    unregister_sched_domain_sysctl();

    @@ -6587,6 +6604,8 @@ match2:
    ndoms_cur = ndoms_new;

    register_sched_domain_sysctl();
    +
    + unlock_doms_cur();
    }

    #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)

    --
    Regards,
    vatsa
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-11-27 06:11    [W:0.025 / U:0.044 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site