All of lore.kernel.org
 help / color / mirror / Atom feed
* arch/powerpc/perf/vpa-dtl.c:151:40-50: ERROR: function vpa_dtl_mem_alloc called on line 208 inside lock on line 190 but uses GFP_KERNEL
@ 2026-10-04  7:28 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2026-10-04  7:28 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Julia Lawall

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Kajol Jain <kjain@linux.ibm.com>
CC: Madhavan Srinivasan <maddy@linux.ibm.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   6addb4f385570ebc11c4eb499a4f1c149f313e84
commit: 4708fba19adee9ba14ef28af6face4ab043d9cd6 powerpc/vpa_dtl: Add interface to expose vpa dtl counters via perf
date:   1 year ago
:::::: branch date: 3 hours ago
:::::: commit date: 1 year ago
config: powerpc64-randconfig-r2103-20261004 (https://download.01.org/0day-ci/archive/20261004/202610040941.syatldib-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project d7e4505dd447d115d85fdea45cd71030ac1d86ee)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: 4708fba19ade ("powerpc/vpa_dtl: Add interface to expose vpa dtl counters via perf")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202610040941.syatldib-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> arch/powerpc/perf/vpa-dtl.c:151:40-50: ERROR: function vpa_dtl_mem_alloc called on line 208 inside lock on line 190 but uses GFP_KERNEL

vim +151 arch/powerpc/perf/vpa-dtl.c

4708fba19adee9b Kajol Jain 2025-09-15  141  
4708fba19adee9b Kajol Jain 2025-09-15  142  static int vpa_dtl_mem_alloc(int cpu)
4708fba19adee9b Kajol Jain 2025-09-15  143  {
4708fba19adee9b Kajol Jain 2025-09-15  144  	struct vpa_dtl *dtl = &per_cpu(vpa_dtl_cpu, cpu);
4708fba19adee9b Kajol Jain 2025-09-15  145  	struct dtl_entry *buf = NULL;
4708fba19adee9b Kajol Jain 2025-09-15  146  
4708fba19adee9b Kajol Jain 2025-09-15  147  	/* Check for dispatch trace log buffer cache */
4708fba19adee9b Kajol Jain 2025-09-15  148  	if (!dtl_cache)
4708fba19adee9b Kajol Jain 2025-09-15  149  		return -ENOMEM;
4708fba19adee9b Kajol Jain 2025-09-15  150  
4708fba19adee9b Kajol Jain 2025-09-15 @151  	buf = kmem_cache_alloc_node(dtl_cache, GFP_KERNEL | GFP_ATOMIC, cpu_to_node(cpu));
4708fba19adee9b Kajol Jain 2025-09-15  152  	if (!buf) {
4708fba19adee9b Kajol Jain 2025-09-15  153  		pr_warn("buffer allocation failed for cpu %d\n", cpu);
4708fba19adee9b Kajol Jain 2025-09-15  154  		return -ENOMEM;
4708fba19adee9b Kajol Jain 2025-09-15  155  	}
4708fba19adee9b Kajol Jain 2025-09-15  156  	dtl->buf = buf;
4708fba19adee9b Kajol Jain 2025-09-15  157  	return 0;
4708fba19adee9b Kajol Jain 2025-09-15  158  }
4708fba19adee9b Kajol Jain 2025-09-15  159  
4708fba19adee9b Kajol Jain 2025-09-15  160  static int vpa_dtl_event_init(struct perf_event *event)
4708fba19adee9b Kajol Jain 2025-09-15  161  {
4708fba19adee9b Kajol Jain 2025-09-15  162  	struct hw_perf_event *hwc = &event->hw;
4708fba19adee9b Kajol Jain 2025-09-15  163  
4708fba19adee9b Kajol Jain 2025-09-15  164  	/* test the event attr type for PMU enumeration */
4708fba19adee9b Kajol Jain 2025-09-15  165  	if (event->attr.type != event->pmu->type)
4708fba19adee9b Kajol Jain 2025-09-15  166  		return -ENOENT;
4708fba19adee9b Kajol Jain 2025-09-15  167  
4708fba19adee9b Kajol Jain 2025-09-15  168  	if (!perfmon_capable())
4708fba19adee9b Kajol Jain 2025-09-15  169  		return -EACCES;
4708fba19adee9b Kajol Jain 2025-09-15  170  
4708fba19adee9b Kajol Jain 2025-09-15  171  	/* Return if this is a counting event */
4708fba19adee9b Kajol Jain 2025-09-15  172  	if (!is_sampling_event(event))
4708fba19adee9b Kajol Jain 2025-09-15  173  		return -EOPNOTSUPP;
4708fba19adee9b Kajol Jain 2025-09-15  174  
4708fba19adee9b Kajol Jain 2025-09-15  175  	/* no branch sampling */
4708fba19adee9b Kajol Jain 2025-09-15  176  	if (has_branch_stack(event))
4708fba19adee9b Kajol Jain 2025-09-15  177  		return -EOPNOTSUPP;
4708fba19adee9b Kajol Jain 2025-09-15  178  
4708fba19adee9b Kajol Jain 2025-09-15  179  	/* Invalid eventcode */
4708fba19adee9b Kajol Jain 2025-09-15  180  	switch (event->attr.config) {
4708fba19adee9b Kajol Jain 2025-09-15  181  	case DTL_LOG_CEDE:
4708fba19adee9b Kajol Jain 2025-09-15  182  	case DTL_LOG_PREEMPT:
4708fba19adee9b Kajol Jain 2025-09-15  183  	case DTL_LOG_FAULT:
4708fba19adee9b Kajol Jain 2025-09-15  184  	case DTL_LOG_ALL:
4708fba19adee9b Kajol Jain 2025-09-15  185  		break;
4708fba19adee9b Kajol Jain 2025-09-15  186  	default:
4708fba19adee9b Kajol Jain 2025-09-15  187  		return -EINVAL;
4708fba19adee9b Kajol Jain 2025-09-15  188  	}
4708fba19adee9b Kajol Jain 2025-09-15  189  
4708fba19adee9b Kajol Jain 2025-09-15 @190  	spin_lock(&dtl_global_lock);
4708fba19adee9b Kajol Jain 2025-09-15  191  
4708fba19adee9b Kajol Jain 2025-09-15  192  	/*
4708fba19adee9b Kajol Jain 2025-09-15  193  	 * To ensure there are no other conflicting dtl users
4708fba19adee9b Kajol Jain 2025-09-15  194  	 * (example: /proc/powerpc/vcpudispatch_stats or debugfs dtl),
4708fba19adee9b Kajol Jain 2025-09-15  195  	 * below code try to take the dtl_access_lock.
4708fba19adee9b Kajol Jain 2025-09-15  196  	 * The dtl_access_lock is a rwlock defined in dtl.h, which is used
4708fba19adee9b Kajol Jain 2025-09-15  197  	 * to unsure there is no conflicting dtl users.
4708fba19adee9b Kajol Jain 2025-09-15  198  	 * Based on below code, vpa_dtl pmu tries to take write access lock
4708fba19adee9b Kajol Jain 2025-09-15  199  	 * and also checks for dtl_global_refc, to make sure that the
4708fba19adee9b Kajol Jain 2025-09-15  200  	 * dtl_access_lock is taken by vpa_dtl pmu interface.
4708fba19adee9b Kajol Jain 2025-09-15  201  	 */
4708fba19adee9b Kajol Jain 2025-09-15  202  	if (dtl_global_refc == 0 && !down_write_trylock(&dtl_access_lock)) {
4708fba19adee9b Kajol Jain 2025-09-15  203  		spin_unlock(&dtl_global_lock);
4708fba19adee9b Kajol Jain 2025-09-15  204  		return -EBUSY;
4708fba19adee9b Kajol Jain 2025-09-15  205  	}
4708fba19adee9b Kajol Jain 2025-09-15  206  
4708fba19adee9b Kajol Jain 2025-09-15  207  	/* Allocate dtl buffer memory */
4708fba19adee9b Kajol Jain 2025-09-15 @208  	if (vpa_dtl_mem_alloc(event->cpu)) {
4708fba19adee9b Kajol Jain 2025-09-15  209  		spin_unlock(&dtl_global_lock);
4708fba19adee9b Kajol Jain 2025-09-15  210  		return -ENOMEM;
4708fba19adee9b Kajol Jain 2025-09-15  211  	}
4708fba19adee9b Kajol Jain 2025-09-15  212  
4708fba19adee9b Kajol Jain 2025-09-15  213  	/*
4708fba19adee9b Kajol Jain 2025-09-15  214  	 * Increment the number of active vpa_dtl pmu threads. The
4708fba19adee9b Kajol Jain 2025-09-15  215  	 * dtl_global_refc is used to keep count of cpu threads that
4708fba19adee9b Kajol Jain 2025-09-15  216  	 * currently capturing dtl data using vpa_dtl pmu interface.
4708fba19adee9b Kajol Jain 2025-09-15  217  	 */
4708fba19adee9b Kajol Jain 2025-09-15  218  	dtl_global_refc++;
4708fba19adee9b Kajol Jain 2025-09-15  219  
4708fba19adee9b Kajol Jain 2025-09-15  220  	spin_unlock(&dtl_global_lock);
4708fba19adee9b Kajol Jain 2025-09-15  221  
4708fba19adee9b Kajol Jain 2025-09-15  222  	hrtimer_setup(&hwc->hrtimer, vpa_dtl_hrtimer_handle, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
4708fba19adee9b Kajol Jain 2025-09-15  223  
4708fba19adee9b Kajol Jain 2025-09-15  224  	/*
4708fba19adee9b Kajol Jain 2025-09-15  225  	 * Since hrtimers have a fixed rate, we can do a static freq->period
4708fba19adee9b Kajol Jain 2025-09-15  226  	 * mapping and avoid the whole period adjust feedback stuff.
4708fba19adee9b Kajol Jain 2025-09-15  227  	 */
4708fba19adee9b Kajol Jain 2025-09-15  228  	if (event->attr.freq) {
4708fba19adee9b Kajol Jain 2025-09-15  229  		long freq = event->attr.sample_freq;
4708fba19adee9b Kajol Jain 2025-09-15  230  
4708fba19adee9b Kajol Jain 2025-09-15  231  		event->attr.sample_period = NSEC_PER_SEC / freq;
4708fba19adee9b Kajol Jain 2025-09-15  232  		hwc->sample_period = event->attr.sample_period;
4708fba19adee9b Kajol Jain 2025-09-15  233  		local64_set(&hwc->period_left, hwc->sample_period);
4708fba19adee9b Kajol Jain 2025-09-15  234  		hwc->last_period = hwc->sample_period;
4708fba19adee9b Kajol Jain 2025-09-15  235  		event->attr.freq = 0;
4708fba19adee9b Kajol Jain 2025-09-15  236  	}
4708fba19adee9b Kajol Jain 2025-09-15  237  
4708fba19adee9b Kajol Jain 2025-09-15  238  	event->destroy = vpa_dtl_reset_global_refc;
4708fba19adee9b Kajol Jain 2025-09-15  239  	return 0;
4708fba19adee9b Kajol Jain 2025-09-15  240  }
4708fba19adee9b Kajol Jain 2025-09-15  241  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread
* arch/powerpc/perf/vpa-dtl.c:151:40-50: ERROR: function vpa_dtl_mem_alloc called on line 208 inside lock on line 190 but uses GFP_KERNEL
@ 2026-02-23  2:24 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2026-02-23  2:24 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Julia Lawall

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Kajol Jain <kjain@linux.ibm.com>
CC: Madhavan Srinivasan <maddy@linux.ibm.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
commit: 4708fba19adee9ba14ef28af6face4ab043d9cd6 powerpc/vpa_dtl: Add interface to expose vpa dtl counters via perf
date:   5 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 5 months ago
config: powerpc64-randconfig-r053-20260223 (https://download.01.org/0day-ci/archive/20260223/202602231055.em7T0D4w-lkp@intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 13.4.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202602231055.em7T0D4w-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> arch/powerpc/perf/vpa-dtl.c:151:40-50: ERROR: function vpa_dtl_mem_alloc called on line 208 inside lock on line 190 but uses GFP_KERNEL

vim +151 arch/powerpc/perf/vpa-dtl.c

4708fba19adee9b Kajol Jain 2025-09-15  141  
4708fba19adee9b Kajol Jain 2025-09-15  142  static int vpa_dtl_mem_alloc(int cpu)
4708fba19adee9b Kajol Jain 2025-09-15  143  {
4708fba19adee9b Kajol Jain 2025-09-15  144  	struct vpa_dtl *dtl = &per_cpu(vpa_dtl_cpu, cpu);
4708fba19adee9b Kajol Jain 2025-09-15  145  	struct dtl_entry *buf = NULL;
4708fba19adee9b Kajol Jain 2025-09-15  146  
4708fba19adee9b Kajol Jain 2025-09-15  147  	/* Check for dispatch trace log buffer cache */
4708fba19adee9b Kajol Jain 2025-09-15  148  	if (!dtl_cache)
4708fba19adee9b Kajol Jain 2025-09-15  149  		return -ENOMEM;
4708fba19adee9b Kajol Jain 2025-09-15  150  
4708fba19adee9b Kajol Jain 2025-09-15 @151  	buf = kmem_cache_alloc_node(dtl_cache, GFP_KERNEL | GFP_ATOMIC, cpu_to_node(cpu));
4708fba19adee9b Kajol Jain 2025-09-15  152  	if (!buf) {
4708fba19adee9b Kajol Jain 2025-09-15  153  		pr_warn("buffer allocation failed for cpu %d\n", cpu);
4708fba19adee9b Kajol Jain 2025-09-15  154  		return -ENOMEM;
4708fba19adee9b Kajol Jain 2025-09-15  155  	}
4708fba19adee9b Kajol Jain 2025-09-15  156  	dtl->buf = buf;
4708fba19adee9b Kajol Jain 2025-09-15  157  	return 0;
4708fba19adee9b Kajol Jain 2025-09-15  158  }
4708fba19adee9b Kajol Jain 2025-09-15  159  
4708fba19adee9b Kajol Jain 2025-09-15  160  static int vpa_dtl_event_init(struct perf_event *event)
4708fba19adee9b Kajol Jain 2025-09-15  161  {
4708fba19adee9b Kajol Jain 2025-09-15  162  	struct hw_perf_event *hwc = &event->hw;
4708fba19adee9b Kajol Jain 2025-09-15  163  
4708fba19adee9b Kajol Jain 2025-09-15  164  	/* test the event attr type for PMU enumeration */
4708fba19adee9b Kajol Jain 2025-09-15  165  	if (event->attr.type != event->pmu->type)
4708fba19adee9b Kajol Jain 2025-09-15  166  		return -ENOENT;
4708fba19adee9b Kajol Jain 2025-09-15  167  
4708fba19adee9b Kajol Jain 2025-09-15  168  	if (!perfmon_capable())
4708fba19adee9b Kajol Jain 2025-09-15  169  		return -EACCES;
4708fba19adee9b Kajol Jain 2025-09-15  170  
4708fba19adee9b Kajol Jain 2025-09-15  171  	/* Return if this is a counting event */
4708fba19adee9b Kajol Jain 2025-09-15  172  	if (!is_sampling_event(event))
4708fba19adee9b Kajol Jain 2025-09-15  173  		return -EOPNOTSUPP;
4708fba19adee9b Kajol Jain 2025-09-15  174  
4708fba19adee9b Kajol Jain 2025-09-15  175  	/* no branch sampling */
4708fba19adee9b Kajol Jain 2025-09-15  176  	if (has_branch_stack(event))
4708fba19adee9b Kajol Jain 2025-09-15  177  		return -EOPNOTSUPP;
4708fba19adee9b Kajol Jain 2025-09-15  178  
4708fba19adee9b Kajol Jain 2025-09-15  179  	/* Invalid eventcode */
4708fba19adee9b Kajol Jain 2025-09-15  180  	switch (event->attr.config) {
4708fba19adee9b Kajol Jain 2025-09-15  181  	case DTL_LOG_CEDE:
4708fba19adee9b Kajol Jain 2025-09-15  182  	case DTL_LOG_PREEMPT:
4708fba19adee9b Kajol Jain 2025-09-15  183  	case DTL_LOG_FAULT:
4708fba19adee9b Kajol Jain 2025-09-15  184  	case DTL_LOG_ALL:
4708fba19adee9b Kajol Jain 2025-09-15  185  		break;
4708fba19adee9b Kajol Jain 2025-09-15  186  	default:
4708fba19adee9b Kajol Jain 2025-09-15  187  		return -EINVAL;
4708fba19adee9b Kajol Jain 2025-09-15  188  	}
4708fba19adee9b Kajol Jain 2025-09-15  189  
4708fba19adee9b Kajol Jain 2025-09-15 @190  	spin_lock(&dtl_global_lock);
4708fba19adee9b Kajol Jain 2025-09-15  191  
4708fba19adee9b Kajol Jain 2025-09-15  192  	/*
4708fba19adee9b Kajol Jain 2025-09-15  193  	 * To ensure there are no other conflicting dtl users
4708fba19adee9b Kajol Jain 2025-09-15  194  	 * (example: /proc/powerpc/vcpudispatch_stats or debugfs dtl),
4708fba19adee9b Kajol Jain 2025-09-15  195  	 * below code try to take the dtl_access_lock.
4708fba19adee9b Kajol Jain 2025-09-15  196  	 * The dtl_access_lock is a rwlock defined in dtl.h, which is used
4708fba19adee9b Kajol Jain 2025-09-15  197  	 * to unsure there is no conflicting dtl users.
4708fba19adee9b Kajol Jain 2025-09-15  198  	 * Based on below code, vpa_dtl pmu tries to take write access lock
4708fba19adee9b Kajol Jain 2025-09-15  199  	 * and also checks for dtl_global_refc, to make sure that the
4708fba19adee9b Kajol Jain 2025-09-15  200  	 * dtl_access_lock is taken by vpa_dtl pmu interface.
4708fba19adee9b Kajol Jain 2025-09-15  201  	 */
4708fba19adee9b Kajol Jain 2025-09-15  202  	if (dtl_global_refc == 0 && !down_write_trylock(&dtl_access_lock)) {
4708fba19adee9b Kajol Jain 2025-09-15  203  		spin_unlock(&dtl_global_lock);
4708fba19adee9b Kajol Jain 2025-09-15  204  		return -EBUSY;
4708fba19adee9b Kajol Jain 2025-09-15  205  	}
4708fba19adee9b Kajol Jain 2025-09-15  206  
4708fba19adee9b Kajol Jain 2025-09-15  207  	/* Allocate dtl buffer memory */
4708fba19adee9b Kajol Jain 2025-09-15 @208  	if (vpa_dtl_mem_alloc(event->cpu)) {
4708fba19adee9b Kajol Jain 2025-09-15  209  		spin_unlock(&dtl_global_lock);
4708fba19adee9b Kajol Jain 2025-09-15  210  		return -ENOMEM;
4708fba19adee9b Kajol Jain 2025-09-15  211  	}
4708fba19adee9b Kajol Jain 2025-09-15  212  
4708fba19adee9b Kajol Jain 2025-09-15  213  	/*
4708fba19adee9b Kajol Jain 2025-09-15  214  	 * Increment the number of active vpa_dtl pmu threads. The
4708fba19adee9b Kajol Jain 2025-09-15  215  	 * dtl_global_refc is used to keep count of cpu threads that
4708fba19adee9b Kajol Jain 2025-09-15  216  	 * currently capturing dtl data using vpa_dtl pmu interface.
4708fba19adee9b Kajol Jain 2025-09-15  217  	 */
4708fba19adee9b Kajol Jain 2025-09-15  218  	dtl_global_refc++;
4708fba19adee9b Kajol Jain 2025-09-15  219  
4708fba19adee9b Kajol Jain 2025-09-15  220  	spin_unlock(&dtl_global_lock);
4708fba19adee9b Kajol Jain 2025-09-15  221  
4708fba19adee9b Kajol Jain 2025-09-15  222  	hrtimer_setup(&hwc->hrtimer, vpa_dtl_hrtimer_handle, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
4708fba19adee9b Kajol Jain 2025-09-15  223  
4708fba19adee9b Kajol Jain 2025-09-15  224  	/*
4708fba19adee9b Kajol Jain 2025-09-15  225  	 * Since hrtimers have a fixed rate, we can do a static freq->period
4708fba19adee9b Kajol Jain 2025-09-15  226  	 * mapping and avoid the whole period adjust feedback stuff.
4708fba19adee9b Kajol Jain 2025-09-15  227  	 */
4708fba19adee9b Kajol Jain 2025-09-15  228  	if (event->attr.freq) {
4708fba19adee9b Kajol Jain 2025-09-15  229  		long freq = event->attr.sample_freq;
4708fba19adee9b Kajol Jain 2025-09-15  230  
4708fba19adee9b Kajol Jain 2025-09-15  231  		event->attr.sample_period = NSEC_PER_SEC / freq;
4708fba19adee9b Kajol Jain 2025-09-15  232  		hwc->sample_period = event->attr.sample_period;
4708fba19adee9b Kajol Jain 2025-09-15  233  		local64_set(&hwc->period_left, hwc->sample_period);
4708fba19adee9b Kajol Jain 2025-09-15  234  		hwc->last_period = hwc->sample_period;
4708fba19adee9b Kajol Jain 2025-09-15  235  		event->attr.freq = 0;
4708fba19adee9b Kajol Jain 2025-09-15  236  	}
4708fba19adee9b Kajol Jain 2025-09-15  237  
4708fba19adee9b Kajol Jain 2025-09-15  238  	event->destroy = vpa_dtl_reset_global_refc;
4708fba19adee9b Kajol Jain 2025-09-15  239  	return 0;
4708fba19adee9b Kajol Jain 2025-09-15  240  }
4708fba19adee9b Kajol Jain 2025-09-15  241  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-10-04  7:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-04  7:28 arch/powerpc/perf/vpa-dtl.c:151:40-50: ERROR: function vpa_dtl_mem_alloc called on line 208 inside lock on line 190 but uses GFP_KERNEL kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2026-02-23  2:24 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.