[PATCH v4 10/13] firmware: arm_sdei: Add support for CPU and system power states

Will Deacon will.deacon at arm.com
Wed Oct 18 10:17:47 PDT 2017


On Tue, Oct 17, 2017 at 06:44:29PM +0100, James Morse wrote:
> When a CPU enters an idle lower-power state or is powering off, we
> need to mask SDE events so that no events can be delivered while we
> are messing with the MMU as the registered entry points won't be valid.
> 
> If the system reboots, we want to unregister all events and mask the CPUs.
> For kexec this allows us to hand a clean slate to the next kernel
> instead of relying on it to call sdei_{private,system}_data_reset().
> 
> For hibernate we unregister all events and re-register them on restore,
> in case we restored with the SDE code loaded at a different address.
> (e.g. KASLR).
> 
> Add all the notifiers necessary to do this. We only support shared events
> so all events are left registered and enabled over CPU hotplug.
> 
> Signed-off-by: James Morse <james.morse at arm.com>
> 
> ---
> Changes since v3:
>  * Renamed CPUHP enum entry to have an ARM_ prefix.
> 
>  drivers/firmware/arm_sdei.c | 228 +++++++++++++++++++++++++++++++++++++++++++-
>  include/linux/arm_sdei.h    |   3 +
>  include/linux/cpuhotplug.h  |   1 +
>  3 files changed, 231 insertions(+), 1 deletion(-)

[...]

>  static void sdei_smccc_smc(unsigned long function_id,
>  			   unsigned long arg0, unsigned long arg1,
>  			   unsigned long arg2, unsigned long arg3,
> @@ -544,9 +742,36 @@ static int sdei_probe(struct platform_device *pdev)
>  		return 0;
>  	}
>  
> +	err = cpuhp_setup_state_nocalls(CPUHP_AP_ARM_SDEI_STARTING, "SDEI",
> +				&sdei_cpuhp_up, &sdei_cpuhp_down);
> +	if (err) {
> +		pr_warn("Failed to register CPU hotplug notifier...\n");
> +		return err;
> +	}

What prevents CPU hotplug events coming in here?

Will



More information about the linux-arm-kernel mailing list