Messages in this thread | | | Date | Sun, 26 Jun 2016 11:03:31 +0800 | From | kbuild test robot <> | Subject | Re: [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] | |