CC: [email protected]
CC: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: Ravi Bangoria <[email protected]>

Hi Ravi,

[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on tip/perf/core]
[also build test WARNING on powerpc/next tip/sched/core v5.16 next-20220114]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Ravi-Bangoria/perf-Rewrite-core-context-handling/20220113-215022
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 
a9f4a6e92b3b319296fb078da2615f618f6cd80c
:::::: branch date: 32 hours ago
:::::: commit date: 32 hours ago
config: arm-randconfig-c002-20220113 
(https://download.01.org/0day-ci/archive/20220115/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
d1021978b8e7e35dcc30201ca1731d64b5a602a8)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # 
https://github.com/0day-ci/linux/commit/f7cf7134e405062bf0f22c3ba5637241c4c4d06a
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Ravi-Bangoria/perf-Rewrite-core-context-handling/20220113-215022
        git checkout f7cf7134e405062bf0f22c3ba5637241c4c4d06a
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/events/core.c:3752:2: note: Loop condition is true.  Entering loop 
body
           while (event_heap.nr) {
           ^
   kernel/events/core.c:3753:9: note: Calling 'merge_sched_in'
                   ret = func(*evt, data);
                         ^~~~~~~~~~~~~~~~
   kernel/events/core.c:3792:35: note: Assuming pointer value is null
           struct perf_event_context *ctx = event->ctx;
                                            ^~~~~~~~~~
   kernel/events/core.c:3795:6: note: Assuming field 'state' is > 
PERF_EVENT_STATE_OFF
           if (event->state <= PERF_EVENT_STATE_OFF)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/events/core.c:3795:2: note: Taking false branch
           if (event->state <= PERF_EVENT_STATE_OFF)
           ^
   kernel/events/core.c:3798:6: note: Assuming the condition is true
           if (!event_filter_match(event))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/events/core.c:3798:2: note: Taking true branch
           if (!event_filter_match(event))
           ^
   kernel/events/core.c:3799:3: note: Returning zero, which participates in a 
condition later
                   return 0;
                   ^~~~~~~~
   kernel/events/core.c:3753:9: note: Returning from 'merge_sched_in'
                   ret = func(*evt, data);
                         ^~~~~~~~~~~~~~~~
   kernel/events/core.c:3754:7: note: 'ret' is 0
                   if (ret)
                       ^~~
   kernel/events/core.c:3754:3: note: Taking false branch
                   if (ret)
                   ^
   kernel/events/core.c:3758:3: note: Taking false branch
                   if (*evt)
                   ^
   kernel/events/core.c:3761:4: note: Calling 'min_heap_pop'
                           min_heap_pop(&event_heap, &perf_min_heap);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/min_heap.h:84:16: note: Assuming field 'nr' is > 0
           if (WARN_ONCE(heap->nr <= 0, "Popping an empty heap"))
                         ^
   include/asm-generic/bug.h:150:18: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
                           ^~~~~~~~~
   include/linux/once_lite.h:15:27: note: expanded from macro 'DO_ONCE_LITE_IF'
                   bool __ret_do_once = !!(condition);                     \
                                           ^~~~~~~~~
   include/linux/min_heap.h:84:6: note: '__ret_do_once' is false
           if (WARN_ONCE(heap->nr <= 0, "Popping an empty heap"))
               ^
   include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/once_lite.h:17:16: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                                ^~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   include/linux/min_heap.h:84:6: note: Left side of '&&' is false
           if (WARN_ONCE(heap->nr <= 0, "Popping an empty heap"))
               ^
   include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
           ^
   include/linux/once_lite.h:17:30: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                                              ^
   include/linux/min_heap.h:84:6: note: Taking false branch
           if (WARN_ONCE(heap->nr <= 0, "Popping an empty heap"))
               ^
   include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
           ^
   include/linux/once_lite.h:17:3: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                   ^
   include/linux/min_heap.h:84:2: note: Taking false branch
           if (WARN_ONCE(heap->nr <= 0, "Popping an empty heap"))
           ^
   include/linux/min_heap.h:90:2: note: Value assigned to 'event_heap.nr', 
which participates in a condition later
           min_heapify(heap, 0, func);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/events/core.c:3761:4: note: Returning from 'min_heap_pop'
                           min_heap_pop(&event_heap, &perf_min_heap);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/events/core.c:3752:2: note: Loop condition is true.  Entering loop 
body
           while (event_heap.nr) {
           ^
   kernel/events/core.c:3753:14: note: Passing null pointer value via 1st 
parameter 'event'
                   ret = func(*evt, data);
                              ^~~~
   kernel/events/core.c:3753:9: note: Calling 'merge_sched_in'
                   ret = func(*evt, data);
                         ^~~~~~~~~~~~~~~~
   kernel/events/core.c:3792:35: note: Access to field 'ctx' results in a 
dereference of a null pointer (loaded from variable 'event')
           struct perf_event_context *ctx = event->ctx;
                                            ^~~~~
>> kernel/events/core.c:4277:2: warning: Value stored to 'task_ctx' is never 
>> read [clang-analyzer-deadcode.DeadStores]
           task_ctx = cpuctx->task_ctx;
           ^          ~~~~~~~~~~~~~~~~
   kernel/events/core.c:4277:2: note: Value stored to 'task_ctx' is never read
           task_ctx = cpuctx->task_ctx;
           ^          ~~~~~~~~~~~~~~~~
   kernel/events/core.c:4777:2: warning: Value stored to 'err' is never read 
[clang-analyzer-deadcode.DeadStores]
           err = -EINVAL;
           ^     ~~~~~~~
   kernel/events/core.c:4777:2: note: Value stored to 'err' is never read
           err = -EINVAL;
           ^     ~~~~~~~
   kernel/events/core.c:10439:13: warning: Dereference of null pointer 
[clang-analyzer-core.NullDereference]
           for (vma = mm->mmap; vma; vma = vma->vm_next) {
                      ^
   kernel/events/core.c:10454:39: note: Calling 'perf_event_addr_filters'
           struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/perf_event.h:1475:6: note: Assuming field 'parent' is null
           if (event->parent)
               ^~~~~~~~~~~~~
   include/linux/perf_event.h:1475:2: note: Taking false branch
           if (event->parent)
           ^
   include/linux/perf_event.h:1478:2: note: Returning without writing to 
'event->addr_filters.nr_file_filters', which participates in a condition later
           return ifh;
           ^
   kernel/events/core.c:10454:39: note: Returning from 'perf_event_addr_filters'
           struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/events/core.c:10455:29: note: Left side of '||' is false
           struct task_struct *task = READ_ONCE(event->ctx->task);
                                      ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 
'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long 
long),  \
                              ^
   include/linux/compiler_types.h:302:3: note: expanded from macro 
'__native_word'
           (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
            ^
   kernel/events/core.c:10455:29: note: Left side of '||' is false
           struct task_struct *task = READ_ONCE(event->ctx->task);
                                      ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 
'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long 
long),  \
                              ^
   include/linux/compiler_types.h:302:3: note: expanded from macro 
'__native_word'
           (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
            ^
   kernel/events/core.c:10455:29: note: Left side of '||' is true
           struct task_struct *task = READ_ONCE(event->ctx->task);
                                      ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 
'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long 
long),  \
                              ^
   include/linux/compiler_types.h:303:28: note: expanded from macro 
'__native_word'
            sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
                                     ^
   kernel/events/core.c:10455:29: note: Taking false branch
           struct task_struct *task = READ_ONCE(event->ctx->task);
                                      ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:2: note: expanded from macro 
'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long 
long),  \
           ^
   include/linux/compiler_types.h:335:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:323:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:315:3: note: expanded from macro 
'__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   kernel/events/core.c:10455:29: note: Loop condition is false.  Exiting loop
           struct task_struct *task = READ_ONCE(event->ctx->task);
                                      ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:2: note: expanded from macro 
'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long 
long),  \
           ^
   include/linux/compiler_types.h:335:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:323:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:307:2: note: expanded from macro 
'__compiletime_assert'
           do {                                                            \

vim +/task_ctx +4277 kernel/events/core.c

8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4257  
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4258  static 
bool perf_rotate_context(struct perf_cpu_pmu_context *cpc)
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4259  {
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4260          
struct perf_cpu_context *cpuctx = this_cpu_ptr(&cpu_context);
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4261          
struct perf_event_pmu_context *cpu_epc, *task_epc = NULL;
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4262          
struct perf_event *cpu_event = NULL, *task_event = NULL;
fd7d55172d1e2e kernel/events/core.c  Ian Rogers       2019-06-01  4263          
struct perf_event_context *task_ctx = NULL;
fd7d55172d1e2e kernel/events/core.c  Ian Rogers       2019-06-01  4264          
int cpu_rotate, task_rotate;
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4265          
struct pmu *pmu;
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4266  
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4267          
/*
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4268          
 * Since we run this from IRQ context, nobody can install new
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4269          
 * events, thus the event count values are stable.
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4270          
 */
7fc23a53807970 kernel/perf_counter.c Peter Zijlstra   2009-05-08  4271  
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4272          
cpu_epc = &cpc->epc;
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4273          
pmu = cpu_epc->pmu;
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4274          
task_epc = cpc->task_epc;
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4275  
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4276          
cpu_rotate = cpu_epc->rotate_necessary;
fd7d55172d1e2e kernel/events/core.c  Ian Rogers       2019-06-01 @4277          
task_ctx = cpuctx->task_ctx;
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4278          
task_rotate = task_epc ? task_epc->rotate_necessary : 0;
9717e6cd3db22e kernel/perf_event.c   Peter Zijlstra   2010-01-28  4279  
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4280          
if (!(cpu_rotate || task_rotate))
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4281          
        return false;
0f5a2601284237 kernel/events/core.c  Peter Zijlstra   2011-11-16  4282  
facc43071cc0d4 kernel/events/core.c  Peter Zijlstra   2011-04-09  4283          
perf_ctx_lock(cpuctx, cpuctx->task_ctx);
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4284          
perf_pmu_disable(pmu);
0f5a2601284237 kernel/events/core.c  Peter Zijlstra   2011-11-16  4285  
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4286          
if (task_rotate)
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4287          
        task_event = ctx_event_to_rotate(task_epc);
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4288          
if (cpu_rotate)
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4289          
        cpu_event = ctx_event_to_rotate(cpu_epc);
8703a7cfe148f7 kernel/events/core.c  Peter Zijlstra   2017-11-13  4290  
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4291          
/*
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4292          
 * As per the order given at ctx_resched() first 'pop' task flexible
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4293          
 * and then, if needed CPU flexible.
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4294          
 */
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4295          
if (task_event || (task_epc && cpu_event)) {
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4296          
        update_context_time(task_epc->ctx);
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4297          
        __pmu_ctx_sched_out(task_epc, EVENT_FLEXIBLE);
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4298          
}
235c7fc7c500e4 kernel/perf_counter.c Ingo Molnar      2008-12-21  4299  
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4300          
if (cpu_event) {
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4301          
        update_context_time(&cpuctx->ctx);
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4302          
        __pmu_ctx_sched_out(cpu_epc, EVENT_FLEXIBLE);
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4303          
        rotate_ctx(&cpuctx->ctx, cpu_event);
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4304          
        __pmu_ctx_sched_in(&cpuctx->ctx, pmu);
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4305          
}
0793a61d4df8da kernel/perf_counter.c Thomas Gleixner  2008-12-04  4306  
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4307          
if (task_event)
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4308          
        rotate_ctx(task_epc->ctx, task_event);
0f5a2601284237 kernel/events/core.c  Peter Zijlstra   2011-11-16  4309  
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4310          
if (task_event || (task_epc && cpu_event))
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4311          
        __pmu_ctx_sched_in(task_epc->ctx, pmu);
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4312  
f7cf7134e40506 kernel/events/core.c  Peter Zijlstra   2022-01-13  4313          
perf_pmu_enable(pmu);
0f5a2601284237 kernel/events/core.c  Peter Zijlstra   2011-11-16  4314          
perf_ctx_unlock(cpuctx, cpuctx->task_ctx);
9e6302056f8029 kernel/events/core.c  Stephane Eranian 2013-04-03  4315  
8d5bce0c37fa10 kernel/events/core.c  Peter Zijlstra   2018-03-09  4316          
return true;
e9d2b064149ff7 kernel/perf_event.c   Peter Zijlstra   2010-09-17  4317  }
e9d2b064149ff7 kernel/perf_event.c   Peter Zijlstra   2010-09-17  4318  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to