From: Dmitry Osipenko <digetx@gmail.com>
To: Thierry Reding <thierry.reding@gmail.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Russell King <linux@armlinux.org.uk>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Guo Ren <guoren@kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Greg Ungerer <gerg@linux-m68k.org>,
Joshua Thompson <funaho@jurai.org>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Nick Hu <nickhu@andestech.com>, Greentime Hu <green.hu@gmail.com>,
Vincent Chen <deanbo422@gmail.com>,
"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
Helge Deller <deller@gmx.de>,
Michael Ellerman <mpe@ellerman.id.au>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
Rich Felker <dalias@libc.org>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Juergen Gross <jgross@suse.com>,
Stefano Stabellini <sstabellini@kernel.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Len Brown <lenb@kernel.org>,
Santosh Shilimkar <ssantosh@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>,
Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>, Pavel Machek <pavel@ucw.cz>,
Lee Jones <lee.jones@linaro.org>,
Andrew Morton <akpm@linux-foundation.org>,
Guenter Roeck <linux@roeck-us.net>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
Sebastian Reichel <sre@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Philipp Zabel <p.zabel@pengutronix.de>
Cc: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-csky@vger.kernel.org,
linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org,
linux-sh@vger.kernel.org, xen-devel@lists.xenproject.org,
linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org,
linux-tegra@vger.kernel.org
Subject: Re: [PATCH v3 00/25] Introduce power-off+restart call chain API
Date: Mon, 8 Nov 2021 04:14:30 +0300 [thread overview]
Message-ID: <a4cf1410-564b-ced5-1209-fa55ba672431@gmail.com> (raw)
In-Reply-To: <20211108004524.29465-1-digetx@gmail.com>
08.11.2021 03:44, Dmitry Osipenko пишет:
> Problem
> -------
>
> SoC devices require power-off call chaining functionality from kernel.
> We have a widely used restart chaining provided by restart notifier API,
> but nothing for power-off.
>
> Solution
> --------
>
> Introduce new API that provides both restart and power-off call chains.
>
> Why combine restart with power-off? Because drivers often do both.
> More practical to have API that provides both under the same roof.
>
> The new API is designed with simplicity and extensibility in mind.
> It's built upon the existing restart and reboot APIs. The simplicity
> is in new helper functions that are convenient for drivers. The
> extensibility is in the design that doesn't hardcode callback
> arguments, making easy to add new parameters and remove old.
>
> This is a third attempt to introduce the new API. First was made by
> Guenter Roeck back in 2014, second was made by Thierry Reding in 2017.
> In fact the work didn't stop and recently arm_pm_restart() was removed
> from v5.14 kernel, which was a part of preparatory work started by
> Guenter Roeck. I took into account experience and ideas from the
> previous attempts, extended and polished them.
>
> Adoption plan
> -------------
>
> This patchset introduces the new API. It also converts multiple drivers
> and arch code to the new API to demonstrate how it all looks in practice.
>
> The plan is:
>
> 1. Merge new API (patches 1-8). This API will co-exist with the old APIs.
>
> 2. Convert arch code to do_kernel_power_off() (patches 9-21).
>
> 3. Convert drivers and platform code to the new API.
>
> 4. Remove obsolete pm_power_off and pm_power_off_prepare variables.
>
> 5. Make restart-notifier API private to kernel/reboot.c once no users left.
>
> It's fully implemented here:
>
> [1] https://github.com/grate-driver/linux/commits/sys-off-handler
>
> For now I'm sending only the first 25 base patches out of ~180. It's
> preferable to squash 1-2, partially 3 and 4 points of the plan into a
> single patchset to ease and speed up applying of the rest of the patches.
> Majority of drivers and platform patches depend on the base, hence they
> will come later (and per subsystem), once base will land.
>
> All [1] patches are compile-tested. Tegra and x86 ACPI patches are tested
> on hardware. The remaining should be covered by unit tests (unpublished).
>
> Results
> -------
>
> 1. Devices can be powered off properly.
>
> 2. Global variables are removed from drivers.
>
> 3. Global pm_power_off and pm_power_off_prepare callback variables are
> removed once all users are converted to the new API. The latter callback
> is removed by patch #25 of this series.
>
> 4. Ambiguous call chain ordering is prohibited. See patch #5 which adds
> verification of restart handlers priorities, ensuring that they are unique.
>
> Changelog:
>
> v3: - Renamed power_handler to sys_off_handler as was suggested by
> Rafael Wysocki.
>
> - Improved doc-comments as was suggested by Rafael Wysocki. Added more
> doc-comments.
>
> - Implemented full set of 180 patches which convert whole kernel in
> accordance to the plan, see link [1] above. Slightly adjusted API to
> better suit for the remaining converted drivers.
>
> * Added unregister_sys_off_handler() that is handy for a couple old
> platform drivers.
>
> * Dropped devm_register_trivial_restart_handler(), 'simple' variant
> is enough to have.
>
> - Improved "Add atomic/blocking_notifier_has_unique_priority()" patch,
> as was suggested by Andy Shevchenko. Also replaced down_write() with
> down_read() and factored out common notifier_has_unique_priority().
>
> - Added stop_chain field to struct restart_data and reboot_prep_data
> after discovering couple drivers wanting that feature.
>
> - Added acks that were given to v2.
>
> v2: - Replaced standalone power-off call chain demo-API with the combined
> power-off+restart API because this is what drivers want. It's a more
> comprehensive solution.
>
> - Converted multiple drivers and arch code to the new API. Suggested by
> Andy Shevchenko. I skimmed through the rest of drivers, verifying that
> new API suits them. The rest of the drivers will be converted once we
> will settle on the new API, otherwise will be too many patches here.
>
> - v2 API doesn't expose notifier to users and require handlers to
> have unique priority. Suggested by Guenter Roeck.
>
> - v2 API has power-off chaining disabled by default and require
> drivers to explicitly opt-in to the chaining. This preserves old
> behaviour for existing drivers once they are converted to the new
> API.
>
> Dmitry Osipenko (25):
> notifier: Remove extern annotation from function prototypes
> notifier: Add blocking_notifier_call_chain_is_empty()
> notifier: Add atomic/blocking_notifier_has_unique_priority()
> reboot: Correct typo in a comment
> reboot: Warn if restart handler has duplicated priority
> reboot: Warn if unregister_restart_handler() fails
> reboot: Remove extern annotation from function prototypes
> kernel: Add combined power-off+restart handler call chain API
> ARM: Use do_kernel_power_off()
> csky: Use do_kernel_power_off()
> riscv: Use do_kernel_power_off()
> arm64: Use do_kernel_power_off()
> parisc: Use do_kernel_power_off()
> xen/x86: Use do_kernel_power_off()
> sh: Use do_kernel_power_off()
> x86: Use do_kernel_power_off()
> ia64: Use do_kernel_power_off()
> mips: Use do_kernel_power_off()
> nds32: Use do_kernel_power_off()
> powerpc: Use do_kernel_power_off()
> m68k: Switch to new sys-off handler API
> memory: emif: Use kernel_can_power_off()
> ACPI: power: Switch to sys-off handler API
> regulator: pfuze100: Use devm_register_sys_off_handler()
> reboot: Remove pm_power_off_prepare()
>
> arch/arm/kernel/reboot.c | 4 +-
> arch/arm64/kernel/process.c | 3 +-
> arch/csky/kernel/power.c | 6 +-
> arch/ia64/kernel/process.c | 4 +-
> arch/m68k/emu/natfeat.c | 3 +-
> arch/m68k/include/asm/machdep.h | 1 -
> arch/m68k/kernel/process.c | 5 +-
> arch/m68k/kernel/setup_mm.c | 1 -
> arch/m68k/kernel/setup_no.c | 1 -
> arch/m68k/mac/config.c | 4 +-
> arch/mips/kernel/reset.c | 3 +-
> arch/nds32/kernel/process.c | 3 +-
> arch/parisc/kernel/process.c | 4 +-
> arch/powerpc/kernel/setup-common.c | 4 +-
> arch/powerpc/xmon/xmon.c | 3 +-
> arch/riscv/kernel/reset.c | 12 +-
> arch/sh/kernel/reboot.c | 3 +-
> arch/x86/kernel/reboot.c | 4 +-
> arch/x86/xen/enlighten_pv.c | 4 +-
> drivers/acpi/sleep.c | 25 +-
> drivers/memory/emif.c | 2 +-
> drivers/regulator/pfuze100-regulator.c | 38 +-
> include/linux/notifier.h | 37 +-
> include/linux/pm.h | 1 -
> include/linux/reboot.h | 305 ++++++++++++--
> kernel/notifier.c | 83 ++++
> kernel/power/hibernate.c | 2 +-
> kernel/reboot.c | 556 ++++++++++++++++++++++++-
> 28 files changed, 985 insertions(+), 136 deletions(-)
>
+CC Linus Walleij, Sebastian Reichel and Philipp Zabel; whom I missed to
include by accident.
https://lore.kernel.org/all/20211108004524.29465-1-digetx@gmail.com/T/#t
prev parent reply other threads:[~2021-11-08 1:14 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-08 0:44 [PATCH v3 00/25] Introduce power-off+restart call chain API Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 01/25] notifier: Remove extern annotation from function prototypes Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 02/25] notifier: Add blocking_notifier_call_chain_is_empty() Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 03/25] notifier: Add atomic/blocking_notifier_has_unique_priority() Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 04/25] reboot: Correct typo in a comment Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 05/25] reboot: Warn if restart handler has duplicated priority Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 06/25] reboot: Warn if unregister_restart_handler() fails Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 07/25] reboot: Remove extern annotation from function prototypes Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 08/25] kernel: Add combined power-off+restart handler call chain API Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 09/25] ARM: Use do_kernel_power_off() Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 10/25] csky: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 11/25] riscv: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 12/25] arm64: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 13/25] parisc: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 14/25] xen/x86: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 15/25] sh: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 16/25] x86: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 17/25] ia64: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 18/25] mips: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 19/25] nds32: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 20/25] powerpc: " Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 21/25] m68k: Switch to new sys-off handler API Dmitry Osipenko
2021-11-08 7:47 ` Geert Uytterhoeven
2021-11-08 0:45 ` [PATCH v3 22/25] memory: emif: Use kernel_can_power_off() Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 23/25] ACPI: power: Switch to sys-off handler API Dmitry Osipenko
2021-11-08 0:45 ` [PATCH v3 24/25] regulator: pfuze100: Use devm_register_sys_off_handler() Dmitry Osipenko
2021-11-08 1:14 ` Dmitry Osipenko [this message]
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=a4cf1410-564b-ced5-1209-fa55ba672431@gmail.com \
--to=digetx@gmail.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=akpm@linux-foundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=aou@eecs.berkeley.edu \
--cc=benh@kernel.crashing.org \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=dalias@libc.org \
--cc=daniel.lezcano@linaro.org \
--cc=dave.hansen@linux.intel.com \
--cc=deanbo422@gmail.com \
--cc=deller@gmx.de \
--cc=funaho@jurai.org \
--cc=geert@linux-m68k.org \
--cc=gerg@linux-m68k.org \
--cc=green.hu@gmail.com \
--cc=guoren@kernel.org \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=jonathanh@nvidia.com \
--cc=krzysztof.kozlowski@canonical.com \
--cc=lee.jones@linaro.org \
--cc=lenb@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linus.walleij@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-csky@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linux@roeck-us.net \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=nickhu@andestech.com \
--cc=p.zabel@pengutronix.de \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=paulus@samba.org \
--cc=pavel@ucw.cz \
--cc=rafael@kernel.org \
--cc=sre@kernel.org \
--cc=ssantosh@kernel.org \
--cc=sstabellini@kernel.org \
--cc=tglx@linutronix.de \
--cc=thierry.reding@gmail.com \
--cc=tsbogend@alpha.franken.de \
--cc=ulf.hansson@linaro.org \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
--cc=ysato@users.sourceforge.jp \
/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).