lkml.org 
[lkml]   [2016]   [Feb]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC][PATCH 3/4] sched: Move sched_domain_debug into debug.c
    From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>

    The sched_domain_debug code only gets compiled if SCHED_DEBUG is configured,
    and debug.c only gets compiled if SCHED_DEBUG is also configured. Move the
    code into debug.c and remove the #ifdefs in core.c. Some functions and
    variables need to not be static anymore, but everything is still local
    within the kernel/sched directory.

    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/sched/core.c | 123 +--------------------------------------------------
    kernel/sched/debug.c | 107 ++++++++++++++++++++++++++++++++++++++++++++
    kernel/sched/sched.h | 17 +++++++
    3 files changed, 125 insertions(+), 122 deletions(-)

    diff --git a/kernel/sched/core.c b/kernel/sched/core.c
    index 9c6d976d94f0..d0810e997db3 100644
    --- a/kernel/sched/core.c
    +++ b/kernel/sched/core.c
    @@ -5431,128 +5431,7 @@ static int __init migration_init(void)
    }
    early_initcall(migration_init);

    -static cpumask_var_t sched_domains_tmpmask; /* sched_domains_mutex */
    -
    -#ifdef CONFIG_SCHED_DEBUG
    -
    -static __read_mostly int sched_debug_enabled;
    -
    -static int __init sched_debug_setup(char *str)
    -{
    - sched_debug_enabled = 1;
    -
    - return 0;
    -}
    -early_param("sched_debug", sched_debug_setup);
    -
    -static inline bool sched_debug(void)
    -{
    - return sched_debug_enabled;
    -}
    -
    -static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level,
    - struct cpumask *groupmask)
    -{
    - struct sched_group *group = sd->groups;
    -
    - cpumask_clear(groupmask);
    -
    - printk(KERN_DEBUG "%*s domain %d: ", level, "", level);
    -
    - if (!(sd->flags & SD_LOAD_BALANCE)) {
    - printk("does not load-balance\n");
    - if (sd->parent)
    - printk(KERN_ERR "ERROR: !SD_LOAD_BALANCE domain"
    - " has parent");
    - return -1;
    - }
    -
    - printk(KERN_CONT "span %*pbl level %s\n",
    - cpumask_pr_args(sched_domain_span(sd)), sd->name);
    -
    - if (!cpumask_test_cpu(cpu, sched_domain_span(sd))) {
    - printk(KERN_ERR "ERROR: domain->span does not contain "
    - "CPU%d\n", cpu);
    - }
    - if (!cpumask_test_cpu(cpu, sched_group_cpus(group))) {
    - printk(KERN_ERR "ERROR: domain->groups does not contain"
    - " CPU%d\n", cpu);
    - }
    -
    - printk(KERN_DEBUG "%*s groups:", level + 1, "");
    - do {
    - if (!group) {
    - printk("\n");
    - printk(KERN_ERR "ERROR: group is NULL\n");
    - break;
    - }
    -
    - if (!cpumask_weight(sched_group_cpus(group))) {
    - printk(KERN_CONT "\n");
    - printk(KERN_ERR "ERROR: empty group\n");
    - break;
    - }
    -
    - if (!(sd->flags & SD_OVERLAP) &&
    - cpumask_intersects(groupmask, sched_group_cpus(group))) {
    - printk(KERN_CONT "\n");
    - printk(KERN_ERR "ERROR: repeated CPUs\n");
    - break;
    - }
    -
    - cpumask_or(groupmask, groupmask, sched_group_cpus(group));
    -
    - printk(KERN_CONT " %*pbl",
    - cpumask_pr_args(sched_group_cpus(group)));
    - if (group->sgc->capacity != SCHED_CAPACITY_SCALE) {
    - printk(KERN_CONT " (cpu_capacity = %d)",
    - group->sgc->capacity);
    - }
    -
    - group = group->next;
    - } while (group != sd->groups);
    - printk(KERN_CONT "\n");
    -
    - if (!cpumask_equal(sched_domain_span(sd), groupmask))
    - printk(KERN_ERR "ERROR: groups don't span domain->span\n");
    -
    - if (sd->parent &&
    - !cpumask_subset(groupmask, sched_domain_span(sd->parent)))
    - printk(KERN_ERR "ERROR: parent span is not a superset "
    - "of domain->span\n");
    - return 0;
    -}
    -
    -static void sched_domain_debug(struct sched_domain *sd, int cpu)
    -{
    - int level = 0;
    -
    - if (!sched_debug_enabled)
    - return;
    -
    - if (!sd) {
    - printk(KERN_DEBUG "CPU%d attaching NULL sched-domain.\n", cpu);
    - return;
    - }
    -
    - printk(KERN_DEBUG "CPU%d attaching sched-domain:\n", cpu);
    -
    - for (;;) {
    - if (sched_domain_debug_one(sd, cpu, level, sched_domains_tmpmask))
    - break;
    - level++;
    - sd = sd->parent;
    - if (!sd)
    - break;
    - }
    -}
    -#else /* !CONFIG_SCHED_DEBUG */
    -# define sched_domain_debug(sd, cpu) do { } while (0)
    -static inline bool sched_debug(void)
    -{
    - return false;
    -}
    -#endif /* CONFIG_SCHED_DEBUG */
    +cpumask_var_t sched_domains_tmpmask; /* sched_domains_mutex */

    static int sd_degenerate(struct sched_domain *sd)
    {
    diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
    index a5625e793d15..68838495624f 100644
    --- a/kernel/sched/debug.c
    +++ b/kernel/sched/debug.c
    @@ -360,6 +360,113 @@ void unregister_sched_domain_sysctl(void)
    sd_free_ctl_entry(&sd_ctl_dir[0].child);
    }
    #endif /* CONFIG_SYSCTL */
    +
    +int sched_debug_enabled __read_mostly;
    +
    +static int __init sched_debug_setup(char *str)
    +{
    + sched_debug_enabled = 1;
    +
    + return 0;
    +}
    +early_param("sched_debug", sched_debug_setup);
    +
    +int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level,
    + struct cpumask *groupmask)
    +{
    + struct sched_group *group = sd->groups;
    +
    + cpumask_clear(groupmask);
    +
    + printk(KERN_DEBUG "%*s domain %d: ", level, "", level);
    +
    + if (!(sd->flags & SD_LOAD_BALANCE)) {
    + printk("does not load-balance\n");
    + if (sd->parent)
    + printk(KERN_ERR "ERROR: !SD_LOAD_BALANCE domain"
    + " has parent");
    + return -1;
    + }
    +
    + printk(KERN_CONT "span %*pbl level %s\n",
    + cpumask_pr_args(sched_domain_span(sd)), sd->name);
    +
    + if (!cpumask_test_cpu(cpu, sched_domain_span(sd))) {
    + printk(KERN_ERR "ERROR: domain->span does not contain "
    + "CPU%d\n", cpu);
    + }
    + if (!cpumask_test_cpu(cpu, sched_group_cpus(group))) {
    + printk(KERN_ERR "ERROR: domain->groups does not contain"
    + " CPU%d\n", cpu);
    + }
    +
    + printk(KERN_DEBUG "%*s groups:", level + 1, "");
    + do {
    + if (!group) {
    + printk("\n");
    + printk(KERN_ERR "ERROR: group is NULL\n");
    + break;
    + }
    +
    + if (!cpumask_weight(sched_group_cpus(group))) {
    + printk(KERN_CONT "\n");
    + printk(KERN_ERR "ERROR: empty group\n");
    + break;
    + }
    +
    + if (!(sd->flags & SD_OVERLAP) &&
    + cpumask_intersects(groupmask, sched_group_cpus(group))) {
    + printk(KERN_CONT "\n");
    + printk(KERN_ERR "ERROR: repeated CPUs\n");
    + break;
    + }
    +
    + cpumask_or(groupmask, groupmask, sched_group_cpus(group));
    +
    + printk(KERN_CONT " %*pbl",
    + cpumask_pr_args(sched_group_cpus(group)));
    + if (group->sgc->capacity != SCHED_CAPACITY_SCALE) {
    + printk(KERN_CONT " (cpu_capacity = %d)",
    + group->sgc->capacity);
    + }
    +
    + group = group->next;
    + } while (group != sd->groups);
    + printk(KERN_CONT "\n");
    +
    + if (!cpumask_equal(sched_domain_span(sd), groupmask))
    + printk(KERN_ERR "ERROR: groups don't span domain->span\n");
    +
    + if (sd->parent &&
    + !cpumask_subset(groupmask, sched_domain_span(sd->parent)))
    + printk(KERN_ERR "ERROR: parent span is not a superset "
    + "of domain->span\n");
    + return 0;
    +}
    +
    +void sched_domain_debug(struct sched_domain *sd, int cpu)
    +{
    + int level = 0;
    +
    + if (!sched_debug_enabled)
    + return;
    +
    + if (!sd) {
    + printk(KERN_DEBUG "CPU%d attaching NULL sched-domain.\n", cpu);
    + return;
    + }
    +
    + printk(KERN_DEBUG "CPU%d attaching sched-domain:\n", cpu);
    +
    + for (;;) {
    + if (sched_domain_debug_one(sd, cpu, level, sched_domains_tmpmask))
    + break;
    + level++;
    + sd = sd->parent;
    + if (!sd)
    + break;
    + }
    +}
    #endif /* CONFIG_SMP */

    #ifdef CONFIG_FAIR_GROUP_SCHED
    diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
    index b146f5298cb1..bfa2dd97fe0b 100644
    --- a/kernel/sched/sched.h
    +++ b/kernel/sched/sched.h
    @@ -922,6 +922,23 @@ static inline void unregister_sched_domain_sysctl(void)
    }
    #endif

    +extern cpumask_var_t sched_domains_tmpmask; /* sched_domains_mutex */
    +
    +#ifdef CONFIG_SCHED_DEBUG
    +extern int sched_debug_enabled;
    +void sched_domain_debug(struct sched_domain *sd, int cpu);
    +static inline bool sched_debug(void)
    +{
    + return sched_debug_enabled;
    +}
    +#else
    +# define sched_domain_debug(sd, cpu) do { } while (0)
    +static inline bool sched_debug(void)
    +{
    + return false;
    +}
    +#endif
    +
    #else

    static inline void sched_ttwu_pending(void) { }
    --
    2.6.4

    \
     
     \ /
      Last update: 2016-02-01 21:41    [W:5.094 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site