lkml.org 
[lkml]   [2013]   [Nov]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [RFC][PATCH v5 01/14] sched: add a new arch_sd_local_flags for sched_domain init
    On Tue, Nov 05, 2013 at 03:57:23PM +0100, Vincent Guittot wrote:
    > Your proposal looks fine for me. It's clearly better to move in one
    > place the configuration of sched_domain fields. Have you already got
    > an idea about how to let architecture override the topology?

    Maybe something like the below -- completely untested (my s390 compiler
    is on a machine that's currently powered off).

    > My primary need comes from the fact that the topology configuration is
    > not the same for all cores

    Do expand.. the various cpu masks used in the topology list are per cpu,
    is that sufficient room to wriggle or do you need more?

    ---
    --- a/arch/s390/kernel/smp.c
    +++ b/arch/s390/kernel/smp.c
    @@ -1070,3 +1070,23 @@ static int __init s390_smp_init(void)
    return 0;
    }
    subsys_initcall(s390_smp_init);
    +
    +static struct sched_domain_topology_level s390_topology[] = {
    +#ifdef CONFIG_SCHED_SMT
    + { cpu_smt_mask, SD_SHARE_CPUPOWER | SD_SHARE_PKG_RESOURCES },
    +#endif
    +#ifdef CONFIG_SCHED_MC
    + { cpu_coregroup_mask, SD_SHARE_PKG_RESOURCES },
    +#endif
    +#ifdef CONFIG_SCHED_BOOK
    + { cpu_book_mask, },
    +#endif
    + { cpu_cpu_mask, },
    + { NULL, },
    +};
    +
    +static int __init s390_sched_topology(void)
    +{
    + sched_domain_topology = s390_topology;
    +}
    +early_initcall(s390_sched_topology);
    --- a/include/linux/sched.h
    +++ b/include/linux/sched.h
    @@ -889,6 +889,20 @@ void free_sched_domains(cpumask_var_t do

    bool cpus_share_cache(int this_cpu, int that_cpu);

    +typedef const struct cpumask *(*sched_domain_mask_f)(int cpu);
    +
    +#define SDTL_OVERLAP 0x01
    +
    +struct sched_domain_topology_level {
    + sched_domain_mask_f mask;
    + int sd_flags;
    + int flags;
    + int numa_level;
    + struct sd_data data;
    +};
    +
    +extern struct sched_domain_topology_level *sched_domain_topology;
    +
    #else /* CONFIG_SMP */

    struct sched_domain_attr;
    --- a/kernel/sched/core.c
    +++ b/kernel/sched/core.c
    @@ -5377,20 +5377,6 @@ enum s_alloc {
    sa_none,
    };

    -struct sched_domain_topology_level;
    -
    -typedef const struct cpumask *(*sched_domain_mask_f)(int cpu);
    -
    -#define SDTL_OVERLAP 0x01
    -
    -struct sched_domain_topology_level {
    - sched_domain_mask_f mask;
    - int sd_flags;
    - int flags;
    - int numa_level;
    - struct sd_data data;
    -};
    -
    /*
    * Build an iteration mask that can exclude certain CPUs from the upwards
    * domain traversal.
    @@ -5841,6 +5827,7 @@ sd_init(struct sched_domain_topology_lev

    return sd;
    }
    +
    /*
    * Topology list, bottom-up.
    */
    @@ -5851,14 +5838,11 @@ static struct sched_domain_topology_leve
    #ifdef CONFIG_SCHED_MC
    { cpu_coregroup_mask, SD_SHARE_PKG_RESOURCES },
    #endif
    -#ifdef CONFIG_SCHED_BOOK
    - { cpu_book_mask, },
    -#endif
    { cpu_cpu_mask, },
    { NULL, },
    };

    -static struct sched_domain_topology_level *sched_domain_topology = default_topology;
    +struct sched_domain_topology_level *sched_domain_topology = default_topology;

    #define for_each_sd_topology(tl) \
    for (tl = sched_domain_topology; tl->mask; tl++)

    \
     
     \ /
      Last update: 2013-11-05 23:41    [W:0.047 / U:94.108 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site