[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