From: Marc Zyngier <maz@kernel.org>
To: Sumit Garg <sumit.garg@linaro.org>
Cc: daniel.thompson@linaro.org, jason@lakedaemon.net,
catalin.marinas@arm.com, dianders@chromium.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, jason.wessel@windriver.com,
kgdb-bugreport@lists.sourceforge.net, tglx@linutronix.de,
will@kernel.org, julien.thierry.kdev@gmail.com
Subject: Re: [PATCH v3 1/4] arm64: smp: Introduce a new IPI as IPI_CALL_NMI_FUNC
Date: Thu, 03 Sep 2020 17:36:49 +0100 [thread overview]
Message-ID: <05a195374cc81008e95e258221fe7d2b@kernel.org> (raw)
In-Reply-To: <1599134712-30923-2-git-send-email-sumit.garg@linaro.org>
On 2020-09-03 13:05, Sumit Garg wrote:
> Introduce a new inter processor interrupt as IPI_CALL_NMI_FUNC that
> can be invoked to run special handlers in NMI context. One such handler
> example is kgdb_nmicallback() which is invoked in order to round up
> CPUs
> to enter kgdb context.
>
> As currently pseudo NMIs are supported on specific arm64 platforms
> which
> incorporates GICv3 or later version of interrupt controller. In case a
> particular platform doesn't support pseudo NMIs, IPI_CALL_NMI_FUNC will
> act as a normal IPI which can still be used to invoke special handlers.
>
> Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
> ---
> arch/arm64/include/asm/smp.h | 1 +
> arch/arm64/kernel/smp.c | 11 +++++++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/arch/arm64/include/asm/smp.h
> b/arch/arm64/include/asm/smp.h
> index 2e7f529..e85f5d5 100644
> --- a/arch/arm64/include/asm/smp.h
> +++ b/arch/arm64/include/asm/smp.h
> @@ -89,6 +89,7 @@ extern void secondary_entry(void);
>
> extern void arch_send_call_function_single_ipi(int cpu);
> extern void arch_send_call_function_ipi_mask(const struct cpumask
> *mask);
> +extern void arch_send_call_nmi_func_ipi_mask(const struct cpumask
> *mask);
>
> #ifdef CONFIG_ARM64_ACPI_PARKING_PROTOCOL
> extern void arch_send_wakeup_ipi_mask(const struct cpumask *mask);
> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
> index b6bde26..1b4c07c 100644
> --- a/arch/arm64/kernel/smp.c
> +++ b/arch/arm64/kernel/smp.c
> @@ -74,6 +74,7 @@ enum ipi_msg_type {
> IPI_TIMER,
> IPI_IRQ_WORK,
> IPI_WAKEUP,
> + IPI_CALL_NMI_FUNC,
> NR_IPI
> };
>
> @@ -793,6 +794,7 @@ static const char *ipi_types[NR_IPI]
> __tracepoint_string = {
> S(IPI_TIMER, "Timer broadcast interrupts"),
> S(IPI_IRQ_WORK, "IRQ work interrupts"),
> S(IPI_WAKEUP, "CPU wake-up interrupts"),
> + S(IPI_CALL_NMI_FUNC, "NMI function call interrupts"),
> };
>
> static void smp_cross_call(const struct cpumask *target, unsigned int
> ipinr);
> @@ -840,6 +842,11 @@ void arch_irq_work_raise(void)
> }
> #endif
>
> +void arch_send_call_nmi_func_ipi_mask(const struct cpumask *mask)
> +{
> + smp_cross_call(mask, IPI_CALL_NMI_FUNC);
> +}
> +
> static void local_cpu_stop(void)
> {
> set_cpu_online(smp_processor_id(), false);
> @@ -932,6 +939,10 @@ static void do_handle_IPI(int ipinr)
> break;
> #endif
>
> + case IPI_CALL_NMI_FUNC:
> + /* nop, IPI handlers for special features can be added here. */
> + break;
> +
> default:
> pr_crit("CPU%u: Unknown IPI message 0x%x\n", cpu, ipinr);
> break;
I'm really not keen on adding more IPIs to the SMP code. One of the
main reasons for using these SGIs as normal IRQs was to make them
"requestable" from non-arch code as if they were standard percpu
interrupts.
What prevents you from moving that all the way to the kgdb code?
M.
--
Jazz is not dead. It just smells funny...
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Sumit Garg <sumit.garg@linaro.org>
Cc: catalin.marinas@arm.com, will@kernel.org,
linux-arm-kernel@lists.infradead.org, tglx@linutronix.de,
jason@lakedaemon.net, julien.thierry.kdev@gmail.com,
dianders@chromium.org, daniel.thompson@linaro.org,
jason.wessel@windriver.com, kgdb-bugreport@lists.sourceforge.net,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/4] arm64: smp: Introduce a new IPI as IPI_CALL_NMI_FUNC
Date: Thu, 03 Sep 2020 17:36:49 +0100 [thread overview]
Message-ID: <05a195374cc81008e95e258221fe7d2b@kernel.org> (raw)
In-Reply-To: <1599134712-30923-2-git-send-email-sumit.garg@linaro.org>
On 2020-09-03 13:05, Sumit Garg wrote:
> Introduce a new inter processor interrupt as IPI_CALL_NMI_FUNC that
> can be invoked to run special handlers in NMI context. One such handler
> example is kgdb_nmicallback() which is invoked in order to round up
> CPUs
> to enter kgdb context.
>
> As currently pseudo NMIs are supported on specific arm64 platforms
> which
> incorporates GICv3 or later version of interrupt controller. In case a
> particular platform doesn't support pseudo NMIs, IPI_CALL_NMI_FUNC will
> act as a normal IPI which can still be used to invoke special handlers.
>
> Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
> ---
> arch/arm64/include/asm/smp.h | 1 +
> arch/arm64/kernel/smp.c | 11 +++++++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/arch/arm64/include/asm/smp.h
> b/arch/arm64/include/asm/smp.h
> index 2e7f529..e85f5d5 100644
> --- a/arch/arm64/include/asm/smp.h
> +++ b/arch/arm64/include/asm/smp.h
> @@ -89,6 +89,7 @@ extern void secondary_entry(void);
>
> extern void arch_send_call_function_single_ipi(int cpu);
> extern void arch_send_call_function_ipi_mask(const struct cpumask
> *mask);
> +extern void arch_send_call_nmi_func_ipi_mask(const struct cpumask
> *mask);
>
> #ifdef CONFIG_ARM64_ACPI_PARKING_PROTOCOL
> extern void arch_send_wakeup_ipi_mask(const struct cpumask *mask);
> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
> index b6bde26..1b4c07c 100644
> --- a/arch/arm64/kernel/smp.c
> +++ b/arch/arm64/kernel/smp.c
> @@ -74,6 +74,7 @@ enum ipi_msg_type {
> IPI_TIMER,
> IPI_IRQ_WORK,
> IPI_WAKEUP,
> + IPI_CALL_NMI_FUNC,
> NR_IPI
> };
>
> @@ -793,6 +794,7 @@ static const char *ipi_types[NR_IPI]
> __tracepoint_string = {
> S(IPI_TIMER, "Timer broadcast interrupts"),
> S(IPI_IRQ_WORK, "IRQ work interrupts"),
> S(IPI_WAKEUP, "CPU wake-up interrupts"),
> + S(IPI_CALL_NMI_FUNC, "NMI function call interrupts"),
> };
>
> static void smp_cross_call(const struct cpumask *target, unsigned int
> ipinr);
> @@ -840,6 +842,11 @@ void arch_irq_work_raise(void)
> }
> #endif
>
> +void arch_send_call_nmi_func_ipi_mask(const struct cpumask *mask)
> +{
> + smp_cross_call(mask, IPI_CALL_NMI_FUNC);
> +}
> +
> static void local_cpu_stop(void)
> {
> set_cpu_online(smp_processor_id(), false);
> @@ -932,6 +939,10 @@ static void do_handle_IPI(int ipinr)
> break;
> #endif
>
> + case IPI_CALL_NMI_FUNC:
> + /* nop, IPI handlers for special features can be added here. */
> + break;
> +
> default:
> pr_crit("CPU%u: Unknown IPI message 0x%x\n", cpu, ipinr);
> break;
I'm really not keen on adding more IPIs to the SMP code. One of the
main reasons for using these SGIs as normal IRQs was to make them
"requestable" from non-arch code as if they were standard percpu
interrupts.
What prevents you from moving that all the way to the kgdb code?
M.
--
Jazz is not dead. It just smells funny...
next prev parent reply other threads:[~2020-09-03 16:38 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-03 12:05 [PATCH v3 0/4] arm64: Introduce new IPI as IPI_CALL_NMI_FUNC Sumit Garg
2020-09-03 12:05 ` Sumit Garg
2020-09-03 12:05 ` [PATCH v3 1/4] arm64: smp: Introduce a " Sumit Garg
2020-09-03 12:05 ` Sumit Garg
2020-09-03 16:36 ` Marc Zyngier [this message]
2020-09-03 16:36 ` Marc Zyngier
2020-09-04 5:30 ` Sumit Garg
2020-09-04 5:30 ` Sumit Garg
2020-09-04 8:00 ` Marc Zyngier
2020-09-04 8:00 ` Marc Zyngier
2020-09-04 11:32 ` Sumit Garg
2020-09-04 11:32 ` Sumit Garg
2020-09-03 12:05 ` [PATCH v3 2/4] irqchip/gic-v3: Enable support for SGIs to act as NMIs Sumit Garg
2020-09-03 12:05 ` Sumit Garg
2020-09-03 12:05 ` [PATCH v3 3/4] arm64: smp: Setup IPI_CALL_NMI_FUNC as a pseudo NMI Sumit Garg
2020-09-03 12:05 ` Sumit Garg
2020-09-03 12:05 ` [PATCH v3 4/4] arm64: kgdb: Round up cpus using IPI_CALL_NMI_FUNC Sumit Garg
2020-09-03 12:05 ` Sumit Garg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=05a195374cc81008e95e258221fe7d2b@kernel.org \
--to=maz@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=daniel.thompson@linaro.org \
--cc=dianders@chromium.org \
--cc=jason.wessel@windriver.com \
--cc=jason@lakedaemon.net \
--cc=julien.thierry.kdev@gmail.com \
--cc=kgdb-bugreport@lists.sourceforge.net \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sumit.garg@linaro.org \
--cc=tglx@linutronix.de \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.