lkml.org 
[lkml]   [2016]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/5] cputime: allow irq time accounting to be selected as an option
    Hi,

    [auto build test WARNING on tip/sched/core]
    [also build test WARNING on next-20160624]
    [cannot apply to v4.7-rc4]
    [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

    url: https://github.com/0day-ci/linux/commits/riel-redhat-com/sched-time-fix-irq-time-accounting-with-nohz_idle/20160623-102923
    config: x86_64-randconfig-a0-06260951 (attached as .config)
    compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430
    reproduce:
    # save the attached .config to linux build tree
    make ARCH=x86_64

    All warnings (new ones prefixed by >>):

    In file included from include/linux/sched.h:17:0,
    from kernel/sched/cputime.c:2:
    kernel/sched/cputime.c: In function 'irqtime_account_hi_update':
    include/linux/kernel.h:742:17: warning: comparison of distinct pointer types lacks a cast
    (void) (&_min1 == &_min2); \
    ^
    >> kernel/sched/cputime.c:92:17: note: in expansion of macro 'min'
    irq_jiffies = min(max_jiffies, cputime_to_jiffies(irq));
    ^~~
    kernel/sched/cputime.c: In function 'irqtime_account_si_update':
    include/linux/kernel.h:742:17: warning: comparison of distinct pointer types lacks a cast
    (void) (&_min1 == &_min2); \
    ^
    kernel/sched/cputime.c:109:16: note: in expansion of macro 'min'
    si_jiffies = min(max_jiffies, cputime_to_jiffies(softirq));
    ^~~

    vim +/min +92 kernel/sched/cputime.c

    73fbec604 Frederic Weisbecker 2012-06-16 1 #include <linux/export.h>
    73fbec604 Frederic Weisbecker 2012-06-16 @2 #include <linux/sched.h>
    73fbec604 Frederic Weisbecker 2012-06-16 3 #include <linux/tsacct_kern.h>
    73fbec604 Frederic Weisbecker 2012-06-16 4 #include <linux/kernel_stat.h>
    73fbec604 Frederic Weisbecker 2012-06-16 5 #include <linux/static_key.h>
    abf917cd9 Frederic Weisbecker 2012-07-25 6 #include <linux/context_tracking.h>
    73fbec604 Frederic Weisbecker 2012-06-16 7 #include "sched.h"
    1fe7c4ef8 Stefano Stabellini 2015-11-10 8 #ifdef CONFIG_PARAVIRT
    1fe7c4ef8 Stefano Stabellini 2015-11-10 9 #include <asm/paravirt.h>
    1fe7c4ef8 Stefano Stabellini 2015-11-10 10 #endif
    73fbec604 Frederic Weisbecker 2012-06-16 11
    73fbec604 Frederic Weisbecker 2012-06-16 12
    73fbec604 Frederic Weisbecker 2012-06-16 13 #ifdef CONFIG_IRQ_TIME_ACCOUNTING
    73fbec604 Frederic Weisbecker 2012-06-16 14
    73fbec604 Frederic Weisbecker 2012-06-16 15 /*
    73fbec604 Frederic Weisbecker 2012-06-16 16 * There are no locks covering percpu hardirq/softirq time.
    bf9fae9f5 Frederic Weisbecker 2012-09-08 17 * They are only modified in vtime_account, on corresponding CPU
    73fbec604 Frederic Weisbecker 2012-06-16 18 * with interrupts disabled. So, writes are safe.
    73fbec604 Frederic Weisbecker 2012-06-16 19 * They are read and saved off onto struct rq in update_rq_clock().
    73fbec604 Frederic Weisbecker 2012-06-16 20 * This may result in other CPU reading this CPU's irq time and can
    bf9fae9f5 Frederic Weisbecker 2012-09-08 21 * race with irq/vtime_account on this CPU. We would either get old
    73fbec604 Frederic Weisbecker 2012-06-16 22 * or new value with a side effect of accounting a slice of irq time to wrong
    73fbec604 Frederic Weisbecker 2012-06-16 23 * task when irq is in progress while we read rq->clock. That is a worthy
    73fbec604 Frederic Weisbecker 2012-06-16 24 * compromise in place of having locks on each irq in account_system_time.
    73fbec604 Frederic Weisbecker 2012-06-16 25 */
    73fbec604 Frederic Weisbecker 2012-06-16 26 DEFINE_PER_CPU(u64, cpu_hardirq_time);
    73fbec604 Frederic Weisbecker 2012-06-16 27 DEFINE_PER_CPU(u64, cpu_softirq_time);
    73fbec604 Frederic Weisbecker 2012-06-16 28
    73fbec604 Frederic Weisbecker 2012-06-16 29 static DEFINE_PER_CPU(u64, irq_start_time);
    73fbec604 Frederic Weisbecker 2012-06-16 30 static int sched_clock_irqtime;
    73fbec604 Frederic Weisbecker 2012-06-16 31
    73fbec604 Frederic Weisbecker 2012-06-16 32 void enable_sched_clock_irqtime(void)
    73fbec604 Frederic Weisbecker 2012-06-16 33 {
    73fbec604 Frederic Weisbecker 2012-06-16 34 sched_clock_irqtime = 1;
    73fbec604 Frederic Weisbecker 2012-06-16 35 }
    73fbec604 Frederic Weisbecker 2012-06-16 36
    73fbec604 Frederic Weisbecker 2012-06-16 37 void disable_sched_clock_irqtime(void)
    73fbec604 Frederic Weisbecker 2012-06-16 38 {
    73fbec604 Frederic Weisbecker 2012-06-16 39 sched_clock_irqtime = 0;
    73fbec604 Frederic Weisbecker 2012-06-16 40 }
    73fbec604 Frederic Weisbecker 2012-06-16 41
    73fbec604 Frederic Weisbecker 2012-06-16 42 #ifndef CONFIG_64BIT
    73fbec604 Frederic Weisbecker 2012-06-16 43 DEFINE_PER_CPU(seqcount_t, irq_time_seq);
    73fbec604 Frederic Weisbecker 2012-06-16 44 #endif /* CONFIG_64BIT */
    73fbec604 Frederic Weisbecker 2012-06-16 45
    73fbec604 Frederic Weisbecker 2012-06-16 46 /*
    73fbec604 Frederic Weisbecker 2012-06-16 47 * Called before incrementing preempt_count on {soft,}irq_enter
    73fbec604 Frederic Weisbecker 2012-06-16 48 * and before decrementing preempt_count on {soft,}irq_exit.
    73fbec604 Frederic Weisbecker 2012-06-16 49 */
    3e1df4f50 Frederic Weisbecker 2012-10-06 50 void irqtime_account_irq(struct task_struct *curr)
    73fbec604 Frederic Weisbecker 2012-06-16 51 {
    73fbec604 Frederic Weisbecker 2012-06-16 52 unsigned long flags;
    73fbec604 Frederic Weisbecker 2012-06-16 53 s64 delta;
    73fbec604 Frederic Weisbecker 2012-06-16 54 int cpu;
    73fbec604 Frederic Weisbecker 2012-06-16 55
    73fbec604 Frederic Weisbecker 2012-06-16 56 if (!sched_clock_irqtime)
    73fbec604 Frederic Weisbecker 2012-06-16 57 return;
    73fbec604 Frederic Weisbecker 2012-06-16 58
    73fbec604 Frederic Weisbecker 2012-06-16 59 local_irq_save(flags);
    73fbec604 Frederic Weisbecker 2012-06-16 60
    73fbec604 Frederic Weisbecker 2012-06-16 61 cpu = smp_processor_id();
    73fbec604 Frederic Weisbecker 2012-06-16 62 delta = sched_clock_cpu(cpu) - __this_cpu_read(irq_start_time);
    73fbec604 Frederic Weisbecker 2012-06-16 63 __this_cpu_add(irq_start_time, delta);
    73fbec604 Frederic Weisbecker 2012-06-16 64
    73fbec604 Frederic Weisbecker 2012-06-16 65 irq_time_write_begin();
    73fbec604 Frederic Weisbecker 2012-06-16 66 /*
    73fbec604 Frederic Weisbecker 2012-06-16 67 * We do not account for softirq time from ksoftirqd here.
    73fbec604 Frederic Weisbecker 2012-06-16 68 * We want to continue accounting softirq time to ksoftirqd thread
    73fbec604 Frederic Weisbecker 2012-06-16 69 * in that case, so as not to confuse scheduler with a special task
    73fbec604 Frederic Weisbecker 2012-06-16 70 * that do not consume any time, but still wants to run.
    73fbec604 Frederic Weisbecker 2012-06-16 71 */
    73fbec604 Frederic Weisbecker 2012-06-16 72 if (hardirq_count())
    73fbec604 Frederic Weisbecker 2012-06-16 73 __this_cpu_add(cpu_hardirq_time, delta);
    73fbec604 Frederic Weisbecker 2012-06-16 74 else if (in_serving_softirq() && curr != this_cpu_ksoftirqd())
    73fbec604 Frederic Weisbecker 2012-06-16 75 __this_cpu_add(cpu_softirq_time, delta);
    73fbec604 Frederic Weisbecker 2012-06-16 76
    73fbec604 Frederic Weisbecker 2012-06-16 77 irq_time_write_end();
    73fbec604 Frederic Weisbecker 2012-06-16 78 local_irq_restore(flags);
    73fbec604 Frederic Weisbecker 2012-06-16 79 }
    3e1df4f50 Frederic Weisbecker 2012-10-06 80 EXPORT_SYMBOL_GPL(irqtime_account_irq);
    73fbec604 Frederic Weisbecker 2012-06-16 81
    ad7578c31 Rik van Riel 2016-06-22 82 static unsigned long irqtime_account_hi_update(unsigned long max_jiffies)
    73fbec604 Frederic Weisbecker 2012-06-16 83 {
    73fbec604 Frederic Weisbecker 2012-06-16 84 u64 *cpustat = kcpustat_this_cpu->cpustat;
    ad7578c31 Rik van Riel 2016-06-22 85 unsigned long irq_jiffies = 0;
    73fbec604 Frederic Weisbecker 2012-06-16 86 unsigned long flags;
    ad7578c31 Rik van Riel 2016-06-22 87 u64 irq;
    73fbec604 Frederic Weisbecker 2012-06-16 88
    73fbec604 Frederic Weisbecker 2012-06-16 89 local_irq_save(flags);
    ad7578c31 Rik van Riel 2016-06-22 90 irq = this_cpu_read(cpu_hardirq_time) - cpustat[CPUTIME_IRQ];
    ad7578c31 Rik van Riel 2016-06-22 91 if (irq > cputime_one_jiffy) {
    ad7578c31 Rik van Riel 2016-06-22 @92 irq_jiffies = min(max_jiffies, cputime_to_jiffies(irq));
    ad7578c31 Rik van Riel 2016-06-22 93 cpustat[CPUTIME_IRQ] += jiffies_to_cputime(irq_jiffies);
    ad7578c31 Rik van Riel 2016-06-22 94 }
    73fbec604 Frederic Weisbecker 2012-06-16 95 local_irq_restore(flags);

    :::::: The code at line 92 was first introduced by commit
    :::::: ad7578c312973ca898de22b799774bd08ffe819f sched,time: count actually elapsed irq & softirq time

    :::::: TO: Rik van Riel <riel@redhat.com>
    :::::: CC: 0day robot <fengguang.wu@intel.com>

    ---
    0-DAY kernel test infrastructure Open Source Technology Center
    https://lists.01.org/pipermail/kbuild-all Intel Corporation
    [unhandled content-type:application/octet-stream]
    \
     
     \ /
      Last update: 2016-06-26 05:41    [W:5.811 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site