BCC: l...@intel.com
CC: kbuild-...@lists.01.org
CC: linux-ker...@vger.kernel.org
TO: Dmitry Vyukov <dvyu...@google.com>

tree:   https://github.com/dvyukov/linux dvyukov-perf-debugging
head:   62267cd404c44bbb18a96c108839c99e7ba6f9bd
commit: 62267cd404c44bbb18a96c108839c99e7ba6f9bd [1/1] perf: debugging of 
missed breakpoints
:::::: branch date: 11 hours ago
:::::: commit date: 11 hours ago
config: x86_64-randconfig-m001 
(https://download.01.org/0day-ci/archive/20220923/202209230922.qzcmp68z-...@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-5) 11.3.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <l...@intel.com>
| Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

smatch warnings:
arch/x86/kernel/hw_breakpoint.c:577 hw_breakpoint_handler() error: 
uninitialized symbol 'info'.

vim +/info +577 arch/x86/kernel/hw_breakpoint.c

0067f1297241ea K.Prasad            2009-06-01  500  
0067f1297241ea K.Prasad            2009-06-01  501  /*
0067f1297241ea K.Prasad            2009-06-01  502   * Handle debug exception 
notifications.
0067f1297241ea K.Prasad            2009-06-01  503   *
0067f1297241ea K.Prasad            2009-06-01  504   * Return value is either 
NOTIFY_STOP or NOTIFY_DONE as explained below.
0067f1297241ea K.Prasad            2009-06-01  505   *
0067f1297241ea K.Prasad            2009-06-01  506   * NOTIFY_DONE returned if 
one of the following conditions is true.
0067f1297241ea K.Prasad            2009-06-01  507   * i) When the causative 
address is from user-space and the exception
0067f1297241ea K.Prasad            2009-06-01  508   * is a valid one, i.e. not 
triggered as a result of lazy debug register
0067f1297241ea K.Prasad            2009-06-01  509   * switching
0067f1297241ea K.Prasad            2009-06-01  510   * ii) When there are more 
bits than trap<n> set in DR6 register (such
0067f1297241ea K.Prasad            2009-06-01  511   * as BD, BS or BT) 
indicating that more than one debug condition is
0067f1297241ea K.Prasad            2009-06-01  512   * met and requires some 
more action in do_debug().
0067f1297241ea K.Prasad            2009-06-01  513   *
0067f1297241ea K.Prasad            2009-06-01  514   * NOTIFY_STOP returned for 
all other cases
0067f1297241ea K.Prasad            2009-06-01  515   *
0067f1297241ea K.Prasad            2009-06-01  516   */
9c54b6164eeb29 Masami Hiramatsu    2014-04-17  517  static int 
hw_breakpoint_handler(struct die_args *args)
0067f1297241ea K.Prasad            2009-06-01  518  {
21d44be7b6ff4c Peter Zijlstra      2020-09-02  519      int i, rc = NOTIFY_STOP;
24f1e32c60c45c Frederic Weisbecker 2009-09-09  520      struct perf_event *bp;
62edab9056a6cf K.Prasad            2009-06-01  521      unsigned long *dr6_p;
d53d9bc0cf783e Peter Zijlstra      2020-09-02  522      unsigned long dr6;
9ad22e165994cc Peter Zijlstra      2021-01-28  523      bool bpx;
62267cd404c44b Dmitry Vyukov       2022-09-22  524      struct 
arch_hw_breakpoint *info;
62edab9056a6cf K.Prasad            2009-06-01  525  
62edab9056a6cf K.Prasad            2009-06-01  526      /* The DR6 value is 
pointed by args->err */
62edab9056a6cf K.Prasad            2009-06-01  527      dr6_p = (unsigned long 
*)ERR_PTR(args->err);
62edab9056a6cf K.Prasad            2009-06-01  528      dr6 = *dr6_p;
0067f1297241ea K.Prasad            2009-06-01  529  
0067f1297241ea K.Prasad            2009-06-01  530      /* Do an early return 
if no trap bits are set in DR6 */
62267cd404c44b Dmitry Vyukov       2022-09-22  531      if ((dr6 & 
DR_TRAP_BITS) == 0) {
62267cd404c44b Dmitry Vyukov       2022-09-22  532              LOG("HIT no 
trap bits");
0067f1297241ea K.Prasad            2009-06-01  533              return 
NOTIFY_DONE;
62267cd404c44b Dmitry Vyukov       2022-09-22  534      }
0067f1297241ea K.Prasad            2009-06-01  535  
0067f1297241ea K.Prasad            2009-06-01  536      /* Handle all the 
breakpoints that were triggered */
0067f1297241ea K.Prasad            2009-06-01  537      for (i = 0; i < 
HBP_NUM; ++i) {
0067f1297241ea K.Prasad            2009-06-01  538              if 
(likely(!(dr6 & (DR_TRAP0 << i))))
0067f1297241ea K.Prasad            2009-06-01  539                      
continue;
24f1e32c60c45c Frederic Weisbecker 2009-09-09  540  
9ad22e165994cc Peter Zijlstra      2021-01-28  541              bp = 
this_cpu_read(bp_per_reg[i]);
9ad22e165994cc Peter Zijlstra      2021-01-28  542              if (!bp)
9ad22e165994cc Peter Zijlstra      2021-01-28  543                      
continue;
9ad22e165994cc Peter Zijlstra      2021-01-28  544  
9ad22e165994cc Peter Zijlstra      2021-01-28  545              bpx = 
bp->hw.info.type == X86_BREAKPOINT_EXECUTE;
9ad22e165994cc Peter Zijlstra      2021-01-28  546  
0067f1297241ea K.Prasad            2009-06-01  547              /*
9ad22e165994cc Peter Zijlstra      2021-01-28  548               * TF and data 
breakpoints are traps and can be merged, however
9ad22e165994cc Peter Zijlstra      2021-01-28  549               * instruction 
breakpoints are faults and will be raised
9ad22e165994cc Peter Zijlstra      2021-01-28  550               * separately.
9ad22e165994cc Peter Zijlstra      2021-01-28  551               *
9ad22e165994cc Peter Zijlstra      2021-01-28  552               * However DR6 
can indicate both TF and instruction
9ad22e165994cc Peter Zijlstra      2021-01-28  553               * breakpoints. 
In that case take TF as that has precedence and
9ad22e165994cc Peter Zijlstra      2021-01-28  554               * delay the 
instruction breakpoint for the next exception.
0067f1297241ea K.Prasad            2009-06-01  555               */
9ad22e165994cc Peter Zijlstra      2021-01-28  556              if (bpx && (dr6 
& DR_STEP))
9ad22e165994cc Peter Zijlstra      2021-01-28  557                      
continue;
24f1e32c60c45c Frederic Weisbecker 2009-09-09  558  
62edab9056a6cf K.Prasad            2009-06-01  559              /*
62edab9056a6cf K.Prasad            2009-06-01  560               * Reset the 
'i'th TRAP bit in dr6 to denote completion of
62edab9056a6cf K.Prasad            2009-06-01  561               * exception 
handling
62edab9056a6cf K.Prasad            2009-06-01  562               */
62edab9056a6cf K.Prasad            2009-06-01  563              (*dr6_p) &= 
~(DR_TRAP0 << i);
24f1e32c60c45c Frederic Weisbecker 2009-09-09  564  
62267cd404c44b Dmitry Vyukov       2022-09-22  565              info = 
counter_arch_bp(bp);
62267cd404c44b Dmitry Vyukov       2022-09-22  566              //LOG("HIT on 
0x%lx", info->address);
b326e9560a28fc Frederic Weisbecker 2009-12-05  567              
perf_bp_event(bp, args->regs);
0067f1297241ea K.Prasad            2009-06-01  568  
0c4519e825c9e2 Frederic Weisbecker 2010-06-24  569              /*
0c4519e825c9e2 Frederic Weisbecker 2010-06-24  570               * Set up 
resume flag to avoid breakpoint recursion when
0c4519e825c9e2 Frederic Weisbecker 2010-06-24  571               * returning 
back to origin.
0c4519e825c9e2 Frederic Weisbecker 2010-06-24  572               */
9ad22e165994cc Peter Zijlstra      2021-01-28  573              if (bpx)
0c4519e825c9e2 Frederic Weisbecker 2010-06-24  574                      
args->regs->flags |= X86_EFLAGS_RF;
0067f1297241ea K.Prasad            2009-06-01  575      }
9ad22e165994cc Peter Zijlstra      2021-01-28  576  
62267cd404c44b Dmitry Vyukov       2022-09-22 @577      if (!info)
62267cd404c44b Dmitry Vyukov       2022-09-22  578              LOG("HIT not 
found");
62267cd404c44b Dmitry Vyukov       2022-09-22  579      //LOG("HIT done");
62267cd404c44b Dmitry Vyukov       2022-09-22  580  
e0e53db6133c32 K.Prasad            2010-01-28  581      /*
e0e53db6133c32 K.Prasad            2010-01-28  582       * Further processing 
in do_debug() is needed for a) user-space
e0e53db6133c32 K.Prasad            2010-01-28  583       * breakpoints (to 
generate signals) and b) when the system has
e0e53db6133c32 K.Prasad            2010-01-28  584       * taken exception due 
to multiple causes
e0e53db6133c32 K.Prasad            2010-01-28  585       */
d53d9bc0cf783e Peter Zijlstra      2020-09-02  586      if 
((current->thread.virtual_dr6 & DR_TRAP_BITS) ||
e0e53db6133c32 K.Prasad            2010-01-28  587          (dr6 & 
(~DR_TRAP_BITS)))
0067f1297241ea K.Prasad            2009-06-01  588              rc = 
NOTIFY_DONE;
0067f1297241ea K.Prasad            2009-06-01  589  
0067f1297241ea K.Prasad            2009-06-01  590      return rc;
0067f1297241ea K.Prasad            2009-06-01  591  }
0067f1297241ea K.Prasad            2009-06-01  592  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-le...@lists.01.org

Reply via email to