lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 2/3] kernel/smp: prepare more CSD lock debugging
    Date
    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>
    ---
    kernel/smp.c | 16 ++++++++++------
    1 file changed, 10 insertions(+), 6 deletions(-)

    diff --git a/kernel/smp.c b/kernel/smp.c
    index d5f0b21ab55e..6d7e6dbe33dc 100644
    --- a/kernel/smp.c
    +++ b/kernel/smp.c
    @@ -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;
    };
    @@ -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;
    @@ -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;
    }

    @@ -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;
    @@ -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);
    }
    }
    --
    2.26.2
    \
     
     \ /
      Last update: 2021-03-01 11:15    [W:7.230 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site