lkml.org 
[lkml]   [2020]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 14/16] arm64: Remove custom IRQ stat accounting
    Date
    Let's switch the arm64 code to the core accounting, which already
    does everything we need.

    Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    ---
    arch/arm64/include/asm/hardirq.h | 9 ---------
    arch/arm64/kernel/smp.c | 24 ++++++------------------
    2 files changed, 6 insertions(+), 27 deletions(-)

    diff --git a/arch/arm64/include/asm/hardirq.h b/arch/arm64/include/asm/hardirq.h
    index 985493af704b..5ffa4bacdad3 100644
    --- a/arch/arm64/include/asm/hardirq.h
    +++ b/arch/arm64/include/asm/hardirq.h
    @@ -13,21 +13,12 @@
    #include <asm/kvm_arm.h>
    #include <asm/sysreg.h>

    -#define NR_IPI 7
    -
    typedef struct {
    unsigned int __softirq_pending;
    - unsigned int ipi_irqs[NR_IPI];
    } ____cacheline_aligned irq_cpustat_t;

    #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */

    -#define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++
    -#define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member)
    -
    -u64 smp_irq_stat_cpu(unsigned int cpu);
    -#define arch_irq_stat_cpu smp_irq_stat_cpu
    -
    #define __ARCH_IRQ_EXIT_IRQS_DISABLED 1

    struct nmi_ctx {
    diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
    index 58fb155fb0ab..07b45466e0bb 100644
    --- a/arch/arm64/kernel/smp.c
    +++ b/arch/arm64/kernel/smp.c
    @@ -72,7 +72,8 @@ enum ipi_msg_type {
    IPI_CPU_CRASH_STOP,
    IPI_TIMER,
    IPI_IRQ_WORK,
    - IPI_WAKEUP
    + IPI_WAKEUP,
    + NR_IPI
    };

    static int ipi_irq_base __read_mostly;
    @@ -800,26 +801,15 @@ void show_ipi_list(struct seq_file *p, int prec)
    unsigned int cpu, i;

    for (i = 0; i < NR_IPI; i++) {
    + unsigned int irq = irq_desc_get_irq(ipi_desc[i]);
    seq_printf(p, "%*s%u:%s", prec - 1, "IPI", i,
    prec >= 4 ? " " : "");
    for_each_online_cpu(cpu)
    - seq_printf(p, "%10u ",
    - __get_irq_stat(cpu, ipi_irqs[i]));
    + seq_printf(p, "%10u ", kstat_irqs_cpu(irq, cpu));
    seq_printf(p, " %s\n", ipi_types[i]);
    }
    }

    -u64 smp_irq_stat_cpu(unsigned int cpu)
    -{
    - u64 sum = 0;
    - int i;
    -
    - for (i = 0; i < NR_IPI; i++)
    - sum += __get_irq_stat(cpu, ipi_irqs[i]);
    -
    - return sum;
    -}
    -
    void arch_send_call_function_ipi_mask(const struct cpumask *mask)
    {
    smp_cross_call(mask, IPI_CALL_FUNC);
    @@ -892,10 +882,8 @@ static void do_handle_IPI(int ipinr)
    {
    unsigned int cpu = smp_processor_id();

    - if ((unsigned)ipinr < NR_IPI) {
    + if ((unsigned)ipinr < NR_IPI)
    trace_ipi_entry_rcuidle(ipi_types[ipinr]);
    - __inc_irq_stat(cpu, ipi_irqs[ipinr]);
    - }

    switch (ipinr) {
    case IPI_RESCHEDULE:
    @@ -992,7 +980,7 @@ void __init set_smp_ipi_range(int ipi_base, int n)
    int err;

    err = request_percpu_irq(ipi_base + i, ipi_handler,
    - "IPI", &irq_stat);
    + "IPI", &cpu_number);
    WARN_ON(err);

    ipi_desc[i] = irq_to_desc(ipi_base + i);
    --
    2.27.0
    \
     
     \ /
      Last update: 2020-09-01 16:53    [W:7.811 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site