31
31
32
32
#define CSD_TYPE (_csd ) ((_csd)->node.u_flags & CSD_FLAG_TYPE_MASK)
33
33
34
+ struct cfd_percpu {
35
+ call_single_data_t csd ;
36
+ };
37
+
34
38
struct call_function_data {
35
- call_single_data_t __percpu * csd ;
39
+ struct cfd_percpu __percpu * pcpu ;
36
40
cpumask_var_t cpumask ;
37
41
cpumask_var_t cpumask_ipi ;
38
42
};
@@ -55,8 +59,8 @@ int smpcfd_prepare_cpu(unsigned int cpu)
55
59
free_cpumask_var (cfd -> cpumask );
56
60
return - ENOMEM ;
57
61
}
58
- cfd -> csd = alloc_percpu (call_single_data_t );
59
- if (!cfd -> csd ) {
62
+ cfd -> pcpu = alloc_percpu (struct cfd_percpu );
63
+ if (!cfd -> pcpu ) {
60
64
free_cpumask_var (cfd -> cpumask );
61
65
free_cpumask_var (cfd -> cpumask_ipi );
62
66
return - ENOMEM ;
@@ -71,7 +75,7 @@ int smpcfd_dead_cpu(unsigned int cpu)
71
75
72
76
free_cpumask_var (cfd -> cpumask );
73
77
free_cpumask_var (cfd -> cpumask_ipi );
74
- free_percpu (cfd -> csd );
78
+ free_percpu (cfd -> pcpu );
75
79
return 0 ;
76
80
}
77
81
@@ -694,7 +698,7 @@ static void smp_call_function_many_cond(const struct cpumask *mask,
694
698
695
699
cpumask_clear (cfd -> cpumask_ipi );
696
700
for_each_cpu (cpu , cfd -> cpumask ) {
697
- call_single_data_t * csd = per_cpu_ptr (cfd -> csd , cpu );
701
+ call_single_data_t * csd = & per_cpu_ptr (cfd -> pcpu , cpu )-> csd ;
698
702
699
703
if (cond_func && !cond_func (cpu , info ))
700
704
continue ;
@@ -719,7 +723,7 @@ static void smp_call_function_many_cond(const struct cpumask *mask,
719
723
for_each_cpu (cpu , cfd -> cpumask ) {
720
724
call_single_data_t * csd ;
721
725
722
- csd = per_cpu_ptr (cfd -> csd , cpu );
726
+ csd = & per_cpu_ptr (cfd -> pcpu , cpu )-> csd ;
723
727
csd_lock_wait (csd );
724
728
}
725
729
}
0 commit comments