[arm-platforms:hack/ppi 24/25] drivers/perf/arm_pmu.c:39:34: sparse: sparse: incorrect type in initializer (different address spaces)

kernel test robot lkp at intel.com
Wed May 7 05:04:54 PDT 2025


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git hack/ppi
head:   2017a5b657d38d470385b73ae1704eefe13bf2a5
commit: 460c9a4ca1d6db353ba1b4a628697afda752da04 [24/25] perf: arm_pmu: Use a PMU-specific pointer for percpu interrupt request
config: arm64-randconfig-r133-20250426 (https://download.01.org/0day-ci/archive/20250507/202505072050.1SVaHUnk-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 9.5.0
reproduce: (https://download.01.org/0day-ci/archive/20250507/202505072050.1SVaHUnk-lkp@intel.com/reproduce)

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 at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505072050.1SVaHUnk-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/perf/arm_pmu.c:39:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got struct arm_pmu [noderef] __percpu ** @@
   drivers/perf/arm_pmu.c:39:34: sparse:     expected void const [noderef] __percpu *__vpp_verify
   drivers/perf/arm_pmu.c:39:34: sparse:     got struct arm_pmu [noderef] __percpu **
>> drivers/perf/arm_pmu.c:39:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct arm_pmu *armpmu @@     got struct arm_pmu [noderef] __percpu * @@
   drivers/perf/arm_pmu.c:39:34: sparse:     expected struct arm_pmu *armpmu
   drivers/perf/arm_pmu.c:39:34: sparse:     got struct arm_pmu [noderef] __percpu *
>> drivers/perf/arm_pmu.c:41:23: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got struct pmu_hw_events [noderef] __percpu ** @@
   drivers/perf/arm_pmu.c:41:23: sparse:     expected void const [noderef] __percpu *__vpp_verify
   drivers/perf/arm_pmu.c:41:23: sparse:     got struct pmu_hw_events [noderef] __percpu **
>> drivers/perf/arm_pmu.c:41:23: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void * @@     got struct pmu_hw_events [noderef] __percpu * @@
   drivers/perf/arm_pmu.c:41:23: sparse:     expected void *
   drivers/perf/arm_pmu.c:41:23: sparse:     got struct pmu_hw_events [noderef] __percpu *
   drivers/perf/arm_pmu.c:52:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got struct arm_pmu [noderef] __percpu ** @@
   drivers/perf/arm_pmu.c:52:34: sparse:     expected void const [noderef] __percpu *__vpp_verify
   drivers/perf/arm_pmu.c:52:34: sparse:     got struct arm_pmu [noderef] __percpu **
   drivers/perf/arm_pmu.c:52:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct arm_pmu *armpmu @@     got struct arm_pmu [noderef] __percpu * @@
   drivers/perf/arm_pmu.c:52:34: sparse:     expected struct arm_pmu *armpmu
   drivers/perf/arm_pmu.c:52:34: sparse:     got struct arm_pmu [noderef] __percpu *
   drivers/perf/arm_pmu.c:54:23: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got struct pmu_hw_events [noderef] __percpu ** @@
   drivers/perf/arm_pmu.c:54:23: sparse:     expected void const [noderef] __percpu *__vpp_verify
   drivers/perf/arm_pmu.c:54:23: sparse:     got struct pmu_hw_events [noderef] __percpu **
>> drivers/perf/arm_pmu.c:54:23: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void *dev_id @@     got struct pmu_hw_events [noderef] __percpu * @@
   drivers/perf/arm_pmu.c:54:23: sparse:     expected void *dev_id
   drivers/perf/arm_pmu.c:54:23: sparse:     got struct pmu_hw_events [noderef] __percpu *
   drivers/perf/arm_pmu.c:71:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got struct arm_pmu [noderef] __percpu ** @@
   drivers/perf/arm_pmu.c:71:34: sparse:     expected void const [noderef] __percpu *__vpp_verify
   drivers/perf/arm_pmu.c:71:34: sparse:     got struct arm_pmu [noderef] __percpu **
   drivers/perf/arm_pmu.c:71:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct arm_pmu *armpmu @@     got struct arm_pmu [noderef] __percpu * @@
   drivers/perf/arm_pmu.c:71:34: sparse:     expected struct arm_pmu *armpmu
   drivers/perf/arm_pmu.c:71:34: sparse:     got struct arm_pmu [noderef] __percpu *
   drivers/perf/arm_pmu.c:98:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got struct arm_pmu [noderef] __percpu ** @@
   drivers/perf/arm_pmu.c:98:34: sparse:     expected void const [noderef] __percpu *__vpp_verify
   drivers/perf/arm_pmu.c:98:34: sparse:     got struct arm_pmu [noderef] __percpu **
   drivers/perf/arm_pmu.c:98:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct arm_pmu *armpmu @@     got struct arm_pmu [noderef] __percpu * @@
   drivers/perf/arm_pmu.c:98:34: sparse:     expected struct arm_pmu *armpmu
   drivers/perf/arm_pmu.c:98:34: sparse:     got struct arm_pmu [noderef] __percpu *
>> drivers/perf/arm_pmu.c:633:58: sparse: sparse: incorrect type in argument 3 (different address spaces) @@     expected struct arm_pmu [noderef] __percpu *devid @@     got struct arm_pmu *static [noderef] [toplevel] __percpu cpu_armpmu @@
   drivers/perf/arm_pmu.c:633:58: sparse:     expected struct arm_pmu [noderef] __percpu *devid
   drivers/perf/arm_pmu.c:633:58: sparse:     got struct arm_pmu *static [noderef] [toplevel] __percpu cpu_armpmu
   drivers/perf/arm_pmu.c:665:35: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got struct pmu_hw_events [noderef] __percpu ** @@
   drivers/perf/arm_pmu.c:665:35: sparse:     expected void const [noderef] __percpu *__vpp_verify
   drivers/perf/arm_pmu.c:665:35: sparse:     got struct pmu_hw_events [noderef] __percpu **
>> drivers/perf/arm_pmu.c:665:35: sparse: sparse: incorrect type in argument 5 (different address spaces) @@     expected void *dev @@     got struct pmu_hw_events [noderef] __percpu * @@
   drivers/perf/arm_pmu.c:665:35: sparse:     expected void *dev
   drivers/perf/arm_pmu.c:665:35: sparse:     got struct pmu_hw_events [noderef] __percpu *
   drivers/perf/arm_pmu.c:670:43: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got struct pmu_hw_events [noderef] __percpu ** @@
   drivers/perf/arm_pmu.c:670:43: sparse:     expected void const [noderef] __percpu *__vpp_verify
   drivers/perf/arm_pmu.c:670:43: sparse:     got struct pmu_hw_events [noderef] __percpu **
   drivers/perf/arm_pmu.c:670:43: sparse: sparse: incorrect type in argument 5 (different address spaces) @@     expected void *dev @@     got struct pmu_hw_events [noderef] __percpu * @@
   drivers/perf/arm_pmu.c:670:43: sparse:     expected void *dev
   drivers/perf/arm_pmu.c:670:43: sparse:     got struct pmu_hw_events [noderef] __percpu *
>> drivers/perf/arm_pmu.c:633:58: sparse: sparse: dereference of noderef expression

vim +39 drivers/perf/arm_pmu.c

    36	
    37	static void armpmu_free_pmuirq(unsigned int irq, int cpu, struct arm_pmu __percpu *devid)
    38	{
  > 39		struct arm_pmu *armpmu = per_cpu(devid, cpu);
    40	
  > 41		free_irq(irq, per_cpu(armpmu->hw_events, cpu));
    42	}
    43	
    44	static const struct pmu_irq_ops pmuirq_ops = {
    45		.enable_pmuirq = enable_irq,
    46		.disable_pmuirq = disable_irq_nosync,
    47		.free_pmuirq = armpmu_free_pmuirq
    48	};
    49	
    50	static void armpmu_free_pmunmi(unsigned int irq, int cpu, struct arm_pmu __percpu *devid)
    51	{
  > 52		struct arm_pmu *armpmu = per_cpu(devid, cpu);
    53	
  > 54		free_nmi(irq, per_cpu(armpmu->hw_events, cpu));
    55	}
    56	
    57	static const struct pmu_irq_ops pmunmi_ops = {
    58		.enable_pmuirq = enable_nmi,
    59		.disable_pmuirq = disable_nmi_nosync,
    60		.free_pmuirq = armpmu_free_pmunmi
    61	};
    62	
    63	static void armpmu_enable_percpu_pmuirq(unsigned int irq)
    64	{
    65		enable_percpu_irq(irq, IRQ_TYPE_NONE);
    66	}
    67	
    68	static void armpmu_free_percpu_pmuirq(unsigned int irq, int cpu,
    69					      struct arm_pmu __percpu *devid)
    70	{
  > 71		struct arm_pmu *armpmu = per_cpu(devid, cpu);
    72	
    73		if (armpmu_count_irq_users(cpu, irq) == 1)
    74			free_percpu_irq(irq, armpmu->hw_events);
    75	}
    76	
    77	static const struct pmu_irq_ops percpu_pmuirq_ops = {
    78		.enable_pmuirq = armpmu_enable_percpu_pmuirq,
    79		.disable_pmuirq = disable_percpu_irq,
    80		.free_pmuirq = armpmu_free_percpu_pmuirq
    81	};
    82	
    83	static void armpmu_enable_percpu_pmunmi(unsigned int irq)
    84	{
    85		if (!prepare_percpu_nmi(irq))
    86			enable_percpu_nmi(irq, IRQ_TYPE_NONE);
    87	}
    88	
    89	static void armpmu_disable_percpu_pmunmi(unsigned int irq)
    90	{
    91		disable_percpu_nmi(irq);
    92		teardown_percpu_nmi(irq);
    93	}
    94	
    95	static void armpmu_free_percpu_pmunmi(unsigned int irq, int cpu,
    96					      struct arm_pmu __percpu *devid)
    97	{
  > 98		struct arm_pmu *armpmu = per_cpu(devid, cpu);
    99	
   100		if (armpmu_count_irq_users(cpu, irq) == 1)
   101			free_percpu_nmi(irq, armpmu->hw_events);
   102	}
   103	

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



More information about the linux-arm-kernel mailing list