Skip to content

Commit

Permalink
locking/csd_lock: Prepare more CSD lock debugging
Browse files Browse the repository at this point in the history
In order to be able to easily add more CSD lock debugging data to
struct call_function_data->csd move the call_single_data_t element
into a sub-structure.

Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20210301101336.7797-3-jgross@suse.com
  • Loading branch information
Juergen Gross authored and Ingo Molnar committed Mar 6, 2021
1 parent 8d0968c commit de7b09e
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,12 @@

#define CSD_TYPE(_csd) ((_csd)->node.u_flags & CSD_FLAG_TYPE_MASK)

struct cfd_percpu {
call_single_data_t csd;
};

struct call_function_data {
call_single_data_t __percpu *csd;
struct cfd_percpu __percpu *pcpu;
cpumask_var_t cpumask;
cpumask_var_t cpumask_ipi;
};
Expand All @@ -55,8 +59,8 @@ int smpcfd_prepare_cpu(unsigned int cpu)
free_cpumask_var(cfd->cpumask);
return -ENOMEM;
}
cfd->csd = alloc_percpu(call_single_data_t);
if (!cfd->csd) {
cfd->pcpu = alloc_percpu(struct cfd_percpu);
if (!cfd->pcpu) {
free_cpumask_var(cfd->cpumask);
free_cpumask_var(cfd->cpumask_ipi);
return -ENOMEM;
Expand All @@ -71,7 +75,7 @@ int smpcfd_dead_cpu(unsigned int cpu)

free_cpumask_var(cfd->cpumask);
free_cpumask_var(cfd->cpumask_ipi);
free_percpu(cfd->csd);
free_percpu(cfd->pcpu);
return 0;
}

Expand Down Expand Up @@ -694,7 +698,7 @@ static void smp_call_function_many_cond(const struct cpumask *mask,

cpumask_clear(cfd->cpumask_ipi);
for_each_cpu(cpu, cfd->cpumask) {
call_single_data_t *csd = per_cpu_ptr(cfd->csd, cpu);
call_single_data_t *csd = &per_cpu_ptr(cfd->pcpu, cpu)->csd;

if (cond_func && !cond_func(cpu, info))
continue;
Expand All @@ -719,7 +723,7 @@ static void smp_call_function_many_cond(const struct cpumask *mask,
for_each_cpu(cpu, cfd->cpumask) {
call_single_data_t *csd;

csd = per_cpu_ptr(cfd->csd, cpu);
csd = &per_cpu_ptr(cfd->pcpu, cpu)->csd;
csd_lock_wait(csd);
}
}
Expand Down

0 comments on commit de7b09e

Please sign in to comment.