From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 11/13] firmware: arm_sdei: add support for CPU private events
Date: Wed, 18 Oct 2017 18:19:59 +0100 [thread overview]
Message-ID: <20171018171959.GJ21820@arm.com> (raw)
In-Reply-To: <20171017174432.1684-12-james.morse@arm.com>
On Tue, Oct 17, 2017 at 06:44:30PM +0100, James Morse wrote:
> Private SDE events are per-cpu, and need to be registered and enabled
> on each CPU.
>
> Hide this detail from the caller by adapting our {,un}register and
> {en,dis}able calls to send an IPI to each CPU if the event is private.
>
> CPU private events are unregistered when the CPU is powered-off, and
> re-registered when the CPU is brought back online. This saves bringing
> secondary cores back online to call private_reset() on shutdown, kexec
> and resume from hibernate.
>
> Signed-off-by: James Morse <james.morse@arm.com>
> ---
> drivers/firmware/arm_sdei.c | 242 +++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 228 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
> index 28e4c4cbb16d..5598d9ba8b5d 100644
> --- a/drivers/firmware/arm_sdei.c
> +++ b/drivers/firmware/arm_sdei.c
> @@ -21,9 +21,11 @@
> #include <linux/acpi.h>
> #include <linux/arm_sdei.h>
> #include <linux/arm-smccc.h>
> +#include <linux/atomic.h>
> #include <linux/bitops.h>
> #include <linux/compiler.h>
> #include <linux/cpuhotplug.h>
> +#include <linux/cpu.h>
> #include <linux/cpu_pm.h>
> #include <linux/errno.h>
> #include <linux/hardirq.h>
> @@ -64,12 +66,49 @@ struct sdei_event {
> u8 priority;
>
> /* This pointer is handed to firmware as the event argument. */
> - struct sdei_registered_event *registered;
> + union {
> + /* Shared events */
> + struct sdei_registered_event *registered;
> +
> + /* CPU private events */
> + struct sdei_registered_event __percpu *private_registered;
> + };
> };
>
> static LIST_HEAD(sdei_events);
> static DEFINE_SPINLOCK(sdei_events_lock);
>
> +/* When frozen, cpu-hotplug notifiers shouldn't unregister/re-register events */
> +static bool frozen;
It looks like this can be accessed concurrently, so you need at least
READ_ONCE/WRITE_ONCE.
> /* When entering idle, mask/unmask events for this cpu */
> static int sdei_pm_notifier(struct notifier_block *nb, unsigned long action,
> void *data)
> @@ -610,6 +813,7 @@ static int sdei_device_freeze(struct device *dev)
> {
> int err;
>
> + frozen = true;
> err = sdei_event_unregister_all();
Are the release semantics from spin_unlock in sdei_event_unregister_all
sufficient for the ordering guarantees you need?
Will
next prev parent reply other threads:[~2017-10-18 17:19 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-17 17:44 [PATCH v4 00/13] arm64/firmware: Software Delegated Exception Interface James Morse
2017-10-17 17:44 ` [PATCH v4 01/13] KVM: arm64: Store vcpu on the stack during __guest_enter() James Morse
2017-10-17 17:44 ` [PATCH v4 02/13] KVM: arm/arm64: Convert kvm_host_cpu_state to a static per-cpu allocation James Morse
2017-10-17 17:44 ` [PATCH v4 03/13] KVM: arm64: Change hyp_panic()s dependency on tpidr_el2 James Morse
2017-10-17 17:44 ` [PATCH v4 04/13] arm64: alternatives: use tpidr_el2 on VHE hosts James Morse
2017-10-18 11:00 ` Catalin Marinas
2017-10-17 17:44 ` [PATCH v4 05/13] KVM: arm64: Stop save/restoring host tpidr_el1 on VHE James Morse
2017-10-17 17:44 ` [PATCH v4 06/13] Docs: dt: add devicetree binding for describing arm64 SDEI firmware James Morse
2017-10-17 17:44 ` [PATCH v4 07/13] firmware: arm_sdei: Add driver for Software Delegated Exceptions James Morse
2017-10-18 11:09 ` Catalin Marinas
2017-10-17 17:44 ` [PATCH v4 08/13] arm64: Add vmap_stack header file James Morse
2017-10-18 11:10 ` Catalin Marinas
2017-10-17 17:44 ` [PATCH v4 09/13] arm64: kernel: Add arch-specific SDEI entry code and CPU masking James Morse
2017-10-18 11:18 ` Catalin Marinas
2017-10-17 17:44 ` [PATCH v4 10/13] firmware: arm_sdei: Add support for CPU and system power states James Morse
2017-10-18 11:11 ` Catalin Marinas
2017-10-18 17:17 ` Will Deacon
2017-10-24 17:34 ` James Morse
2017-10-25 14:43 ` Will Deacon
2017-10-17 17:44 ` [PATCH v4 11/13] firmware: arm_sdei: add support for CPU private events James Morse
2017-10-18 11:11 ` Catalin Marinas
2017-10-18 17:19 ` Will Deacon [this message]
2017-10-24 17:34 ` James Morse
2017-11-01 15:59 ` James Morse
2017-10-17 17:44 ` [PATCH v4 12/13] arm64: acpi: Remove __init from acpi_psci_use_hvc() for use by SDEI James Morse
2017-10-18 11:11 ` Catalin Marinas
2017-10-17 17:44 ` [PATCH v4 13/13] firmware: arm_sdei: Discover SDEI support via ACPI James Morse
2017-10-18 11:12 ` Catalin Marinas
2017-10-18 17:16 ` [PATCH v4 00/13] arm64/firmware: Software Delegated Exception Interface Will Deacon
2017-10-30 15:58 ` [PATCH v4 14/13] firmware: arm_sdei: Move cpuhotplug registration later James Morse
2017-11-01 15:59 ` [PATCH 15/13] firmware: arm_sdei: move the frozen flag under the spinlock James Morse
2017-11-08 15:11 ` James Morse
2017-11-08 16:06 ` [PATCH v4 15/13] firmware: arm_sdei: be more robust against cpu-hotplug James Morse
2017-11-13 11:01 ` Will Deacon
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=20171018171959.GJ21820@arm.com \
--to=will.deacon@arm.com \
--cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).