Message ID | 20191125112754.25223-4-qais.yousef@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,01/14] smp: Create a new function to shutdown nonboot cpus | expand |
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 <qais.yousef@arm.com> > CC: Russell King <linux@armlinux.org.uk> > CC: Catalin Marinas <catalin.marinas@arm.com> > CC: Will Deacon <will@kernel.org> > CC: linux-arm-kernel@lists.infradead.org > CC: linux-kernel@vger.kernel.org > --- 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 >
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 <qais.yousef@arm.com> > > CC: Russell King <linux@armlinux.org.uk> > > CC: Catalin Marinas <catalin.marinas@arm.com> > > CC: Will Deacon <will@kernel.org> > > CC: linux-arm-kernel@lists.infradead.org > > CC: linux-kernel@vger.kernel.org > > --- > > 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 > > >
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 <qais.yousef@arm.com> > > > CC: Russell King <linux@armlinux.org.uk> > > > CC: Catalin Marinas <catalin.marinas@arm.com> > > > CC: Will Deacon <will@kernel.org> > > > CC: linux-arm-kernel@lists.infradead.org > > > CC: linux-kernel@vger.kernel.org > > > --- > > > > 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
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 <qais.yousef@arm.com> > > > > CC: Russell King <linux@armlinux.org.uk> > > > > CC: Catalin Marinas <catalin.marinas@arm.com> > > > > CC: Will Deacon <will@kernel.org> > > > > CC: linux-arm-kernel@lists.infradead.org > > > > CC: linux-kernel@vger.kernel.org > > > > --- > > > > > > 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.
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); } /*
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 <qais.yousef@arm.com> CC: Russell King <linux@armlinux.org.uk> CC: Catalin Marinas <catalin.marinas@arm.com> CC: Will Deacon <will@kernel.org> CC: linux-arm-kernel@lists.infradead.org CC: linux-kernel@vger.kernel.org --- arch/arm/kernel/reboot.c | 4 ++-- arch/arm64/kernel/process.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)