2019-11-25 11:39:39

by Qais Yousef

[permalink] [raw]
Subject: [PATCH v2 03/14] arm: arm64: Don't use disable_nonboot_cpus()

disable_nonboot_cpus() is not safe to use when doing machine_down(),
because it relies on freeze_secondary_cpus() which in return is
a suspend/resume related freeze and could abort if the logic detects any
pending activities that can prevent finishing the offlining process.

Beside disable_nonboot_cpus() is dependent on CONFIG_PM_SLEEP_SMP which
is an othogonal config to rely on to ensure this function works
correctly.

Signed-off-by: Qais Yousef <[email protected]>
CC: Russell King <[email protected]>
CC: Catalin Marinas <[email protected]>
CC: Will Deacon <[email protected]>
CC: [email protected]
CC: [email protected]
---
arch/arm/kernel/reboot.c | 4 ++--
arch/arm64/kernel/process.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c
index bb18ed0539f4..58ad1a70f770 100644
--- a/arch/arm/kernel/reboot.c
+++ b/arch/arm/kernel/reboot.c
@@ -88,11 +88,11 @@ void soft_restart(unsigned long addr)
* to execute e.g. a RAM-based pin loop is not sufficient. This allows the
* kexec'd kernel to use any and all RAM as it sees fit, without having to
* avoid any code or data used by any SW CPU pin loop. The CPU hotplug
- * functionality embodied in disable_nonboot_cpus() to achieve this.
+ * functionality embodied in smp_shutdown_nonboot_cpus() to achieve this.
*/
void machine_shutdown(void)
{
- disable_nonboot_cpus();
+ smp_shutdown_nonboot_cpus(0);
}

/*
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 71f788cd2b18..3bcc9bfc581e 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -141,11 +141,11 @@ void arch_cpu_idle_dead(void)
* to execute e.g. a RAM-based pin loop is not sufficient. This allows the
* kexec'd kernel to use any and all RAM as it sees fit, without having to
* avoid any code or data used by any SW CPU pin loop. The CPU hotplug
- * functionality embodied in disable_nonboot_cpus() to achieve this.
+ * functionality embodied in smpt_shutdown_nonboot_cpus() to achieve this.
*/
void machine_shutdown(void)
{
- disable_nonboot_cpus();
+ smp_shutdown_nonboot_cpus(0);
}

/*
--
2.17.1


2020-01-21 16:51:48

by Qais Yousef

[permalink] [raw]
Subject: Re: [PATCH v2 03/14] arm: arm64: Don't use disable_nonboot_cpus()

On 11/25/19 11:27, Qais Yousef wrote:
> disable_nonboot_cpus() is not safe to use when doing machine_down(),
> because it relies on freeze_secondary_cpus() which in return is
> a suspend/resume related freeze and could abort if the logic detects any
> pending activities that can prevent finishing the offlining process.
>
> Beside disable_nonboot_cpus() is dependent on CONFIG_PM_SLEEP_SMP which
> is an othogonal config to rely on to ensure this function works
> correctly.
>
> Signed-off-by: Qais Yousef <[email protected]>
> CC: Russell King <[email protected]>
> CC: Catalin Marinas <[email protected]>
> CC: Will Deacon <[email protected]>
> CC: [email protected]
> CC: [email protected]
> ---

Ping :)

I'm missing ACKs on this patch and patch 4 for arm64. Hopefully none should be
controversial.

Thanks!

--
Qais Yousef

> arch/arm/kernel/reboot.c | 4 ++--
> arch/arm64/kernel/process.c | 4 ++--
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c
> index bb18ed0539f4..58ad1a70f770 100644
> --- a/arch/arm/kernel/reboot.c
> +++ b/arch/arm/kernel/reboot.c
> @@ -88,11 +88,11 @@ void soft_restart(unsigned long addr)
> * to execute e.g. a RAM-based pin loop is not sufficient. This allows the
> * kexec'd kernel to use any and all RAM as it sees fit, without having to
> * avoid any code or data used by any SW CPU pin loop. The CPU hotplug
> - * functionality embodied in disable_nonboot_cpus() to achieve this.
> + * functionality embodied in smp_shutdown_nonboot_cpus() to achieve this.
> */
> void machine_shutdown(void)
> {
> - disable_nonboot_cpus();
> + smp_shutdown_nonboot_cpus(0);
> }
>
> /*
> diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> index 71f788cd2b18..3bcc9bfc581e 100644
> --- a/arch/arm64/kernel/process.c
> +++ b/arch/arm64/kernel/process.c
> @@ -141,11 +141,11 @@ void arch_cpu_idle_dead(void)
> * to execute e.g. a RAM-based pin loop is not sufficient. This allows the
> * kexec'd kernel to use any and all RAM as it sees fit, without having to
> * avoid any code or data used by any SW CPU pin loop. The CPU hotplug
> - * functionality embodied in disable_nonboot_cpus() to achieve this.
> + * functionality embodied in smpt_shutdown_nonboot_cpus() to achieve this.
> */
> void machine_shutdown(void)
> {
> - disable_nonboot_cpus();
> + smp_shutdown_nonboot_cpus(0);
> }
>
> /*
> --
> 2.17.1
>

2020-01-21 16:56:19

by Russell King (Oracle)

[permalink] [raw]
Subject: Re: [PATCH v2 03/14] arm: arm64: Don't use disable_nonboot_cpus()

On Tue, Jan 21, 2020 at 04:50:31PM +0000, Qais Yousef wrote:
> On 11/25/19 11:27, Qais Yousef wrote:
> > disable_nonboot_cpus() is not safe to use when doing machine_down(),
> > because it relies on freeze_secondary_cpus() which in return is
> > a suspend/resume related freeze and could abort if the logic detects any
> > pending activities that can prevent finishing the offlining process.
> >
> > Beside disable_nonboot_cpus() is dependent on CONFIG_PM_SLEEP_SMP which
> > is an othogonal config to rely on to ensure this function works
> > correctly.
> >
> > Signed-off-by: Qais Yousef <[email protected]>
> > CC: Russell King <[email protected]>
> > CC: Catalin Marinas <[email protected]>
> > CC: Will Deacon <[email protected]>
> > CC: [email protected]
> > CC: [email protected]
> > ---
>
> Ping :)
>
> I'm missing ACKs on this patch and patch 4 for arm64. Hopefully none should be
> controversial.

ARM and ARM64 are maintained separately, so you can't submit a single
patch covering both. Sorry.

>
> Thanks!
>
> --
> Qais Yousef
>
> > arch/arm/kernel/reboot.c | 4 ++--
> > arch/arm64/kernel/process.c | 4 ++--
> > 2 files changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c
> > index bb18ed0539f4..58ad1a70f770 100644
> > --- a/arch/arm/kernel/reboot.c
> > +++ b/arch/arm/kernel/reboot.c
> > @@ -88,11 +88,11 @@ void soft_restart(unsigned long addr)
> > * to execute e.g. a RAM-based pin loop is not sufficient. This allows the
> > * kexec'd kernel to use any and all RAM as it sees fit, without having to
> > * avoid any code or data used by any SW CPU pin loop. The CPU hotplug
> > - * functionality embodied in disable_nonboot_cpus() to achieve this.
> > + * functionality embodied in smp_shutdown_nonboot_cpus() to achieve this.
> > */
> > void machine_shutdown(void)
> > {
> > - disable_nonboot_cpus();
> > + smp_shutdown_nonboot_cpus(0);
> > }
> >
> > /*
> > diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> > index 71f788cd2b18..3bcc9bfc581e 100644
> > --- a/arch/arm64/kernel/process.c
> > +++ b/arch/arm64/kernel/process.c
> > @@ -141,11 +141,11 @@ void arch_cpu_idle_dead(void)
> > * to execute e.g. a RAM-based pin loop is not sufficient. This allows the
> > * kexec'd kernel to use any and all RAM as it sees fit, without having to
> > * avoid any code or data used by any SW CPU pin loop. The CPU hotplug
> > - * functionality embodied in disable_nonboot_cpus() to achieve this.
> > + * functionality embodied in smpt_shutdown_nonboot_cpus() to achieve this.
> > */
> > void machine_shutdown(void)
> > {
> > - disable_nonboot_cpus();
> > + smp_shutdown_nonboot_cpus(0);
> > }
> >
> > /*
> > --
> > 2.17.1
> >
>

--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
According to speedtest.net: 11.9Mbps down 500kbps up

2020-01-21 16:59:53

by Qais Yousef

[permalink] [raw]
Subject: Re: [PATCH v2 03/14] arm: arm64: Don't use disable_nonboot_cpus()

On 01/21/20 16:53, Russell King - ARM Linux admin wrote:
> On Tue, Jan 21, 2020 at 04:50:31PM +0000, Qais Yousef wrote:
> > On 11/25/19 11:27, Qais Yousef wrote:
> > > disable_nonboot_cpus() is not safe to use when doing machine_down(),
> > > because it relies on freeze_secondary_cpus() which in return is
> > > a suspend/resume related freeze and could abort if the logic detects any
> > > pending activities that can prevent finishing the offlining process.
> > >
> > > Beside disable_nonboot_cpus() is dependent on CONFIG_PM_SLEEP_SMP which
> > > is an othogonal config to rely on to ensure this function works
> > > correctly.
> > >
> > > Signed-off-by: Qais Yousef <[email protected]>
> > > CC: Russell King <[email protected]>
> > > CC: Catalin Marinas <[email protected]>
> > > CC: Will Deacon <[email protected]>
> > > CC: [email protected]
> > > CC: [email protected]
> > > ---
> >
> > Ping :)
> >
> > I'm missing ACKs on this patch and patch 4 for arm64. Hopefully none should be
> > controversial.
>
> ARM and ARM64 are maintained separately, so you can't submit a single
> patch covering both. Sorry.

Sure I'd be happy to split.

It was just a single line change and I expected Thomas to pick the whole series
up, so I didn't think there'd be an issue in combining them up since they're
identical.

Do I take it you have no objection to the code change itself and just would
like to see this split up?

Thanks

--
Qais Yousef

>
> >
> > Thanks!
> >
> > --
> > Qais Yousef
> >
> > > arch/arm/kernel/reboot.c | 4 ++--
> > > arch/arm64/kernel/process.c | 4 ++--
> > > 2 files changed, 4 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c
> > > index bb18ed0539f4..58ad1a70f770 100644
> > > --- a/arch/arm/kernel/reboot.c
> > > +++ b/arch/arm/kernel/reboot.c
> > > @@ -88,11 +88,11 @@ void soft_restart(unsigned long addr)
> > > * to execute e.g. a RAM-based pin loop is not sufficient. This allows the
> > > * kexec'd kernel to use any and all RAM as it sees fit, without having to
> > > * avoid any code or data used by any SW CPU pin loop. The CPU hotplug
> > > - * functionality embodied in disable_nonboot_cpus() to achieve this.
> > > + * functionality embodied in smp_shutdown_nonboot_cpus() to achieve this.
> > > */
> > > void machine_shutdown(void)
> > > {
> > > - disable_nonboot_cpus();
> > > + smp_shutdown_nonboot_cpus(0);
> > > }
> > >
> > > /*
> > > diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> > > index 71f788cd2b18..3bcc9bfc581e 100644
> > > --- a/arch/arm64/kernel/process.c
> > > +++ b/arch/arm64/kernel/process.c
> > > @@ -141,11 +141,11 @@ void arch_cpu_idle_dead(void)
> > > * to execute e.g. a RAM-based pin loop is not sufficient. This allows the
> > > * kexec'd kernel to use any and all RAM as it sees fit, without having to
> > > * avoid any code or data used by any SW CPU pin loop. The CPU hotplug
> > > - * functionality embodied in disable_nonboot_cpus() to achieve this.
> > > + * functionality embodied in smpt_shutdown_nonboot_cpus() to achieve this.
> > > */
> > > void machine_shutdown(void)
> > > {
> > > - disable_nonboot_cpus();
> > > + smp_shutdown_nonboot_cpus(0);
> > > }
> > >
> > > /*
> > > --
> > > 2.17.1
> > >
> >
>
> --
> RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
> According to speedtest.net: 11.9Mbps down 500kbps up

2020-01-21 17:07:09

by Russell King (Oracle)

[permalink] [raw]
Subject: Re: [PATCH v2 03/14] arm: arm64: Don't use disable_nonboot_cpus()

On Tue, Jan 21, 2020 at 04:58:09PM +0000, Qais Yousef wrote:
> On 01/21/20 16:53, Russell King - ARM Linux admin wrote:
> > On Tue, Jan 21, 2020 at 04:50:31PM +0000, Qais Yousef wrote:
> > > On 11/25/19 11:27, Qais Yousef wrote:
> > > > disable_nonboot_cpus() is not safe to use when doing machine_down(),
> > > > because it relies on freeze_secondary_cpus() which in return is
> > > > a suspend/resume related freeze and could abort if the logic detects any
> > > > pending activities that can prevent finishing the offlining process.
> > > >
> > > > Beside disable_nonboot_cpus() is dependent on CONFIG_PM_SLEEP_SMP which
> > > > is an othogonal config to rely on to ensure this function works
> > > > correctly.
> > > >
> > > > Signed-off-by: Qais Yousef <[email protected]>
> > > > CC: Russell King <[email protected]>
> > > > CC: Catalin Marinas <[email protected]>
> > > > CC: Will Deacon <[email protected]>
> > > > CC: [email protected]
> > > > CC: [email protected]
> > > > ---
> > >
> > > Ping :)
> > >
> > > I'm missing ACKs on this patch and patch 4 for arm64. Hopefully none should be
> > > controversial.
> >
> > ARM and ARM64 are maintained separately, so you can't submit a single
> > patch covering both. Sorry.
>
> Sure I'd be happy to split.
>
> It was just a single line change and I expected Thomas to pick the whole series
> up, so I didn't think there'd be an issue in combining them up since they're
> identical.
>
> Do I take it you have no objection to the code change itself and just would
> like to see this split up?

I do have an objection to the new function you're introducing in patch
1. See my reply to that.

--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
According to speedtest.net: 11.9Mbps down 500kbps up