The test robot reported a wrong assignment of a per-CPU variable which it detected by using sparse and sent a report. The assignment itself is correct. The annotation for sparse was wrong and hence the report. The first pointer is a "normal" pointer and points to the per-CPU memory area. That means that the __percpu annotation has to be moved. Move the __percpu annotation to pointer which points to the per-CPU area. This change affects only the sparse tool (and is ignored by the compiler).
Unified · Split
| @@ -29,7 +29,7 @@ struct smpboot_thread_data; · 28 unmodified lines | |||
| 29 | * @thread_comm: The base name of the thread | 29 | * @thread_comm: The base name of the thread |
| 30 | */ | 30 | */ |
| 31 | struct smp_hotplug_thread { | 31 | struct smp_hotplug_thread { |
| 32 | struct task_struct __percpu **store; | 32 | struct task_struct * __percpu *store; |
| 33 | struct list_head list; | 33 | struct list_head list; |
| 34 | int (*thread_should_run)(unsigned int cpu); | 34 | int (*thread_should_run)(unsigned int cpu); |
| 35 | void (*thread_fn)(unsigned int cpu); | 35 | void (*thread_fn)(unsigned int cpu); |