From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A0AF4C433F5 for ; Sun, 12 Dec 2021 21:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=BKvOIL9397Iu1oxd+eu3/FA2LViqvgLXN0mn35HDlb0=; b=wiSzlY/d3X/sjc 6hfOX0x5oFQI8xs4+ckqL6VRlYC8jiHNmUUrUj8H2+sM/drqZ8L+X5JQa6Dm9lzHgtgY9mBQXTQXp WS+Vi/kikRBzbu9MmlgHT7eAdlUXNpHhuzDq30PUHEbvQY2hblrqAV9ptFtd1TssnfNDXu1HM+VcK yU14u4vjXZXdZiDDUzFYv6n/lyW5vQhGpHq7lwl261hINBQoiOAhy+DPrQUTo5h2X16Cg7JdL5Sse 1bVnuhqKhAIz2xcBUpbfylL5GkN8iczlJWRDlGuqq8szSpQqm/oZZ4PJin65Gs9hr5hlNSQHfqXux xUIiDey6w8S6PQJZLxXQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mwW0R-007FvZ-LA; Sun, 12 Dec 2021 21:03:39 +0000 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mwW0N-007FuQ-TM for linux-riscv@lists.infradead.org; Sun, 12 Dec 2021 21:03:38 +0000 Received: by mail-lf1-x136.google.com with SMTP id c32so27521849lfv.4 for ; Sun, 12 Dec 2021 13:03:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hjwuoJXbPZqya2Ql77uhrL181Upp/BNSFK3UGdZout4=; b=ZTR2gUvyc9Jk5H+625D+27T8YU6HUrFsdK+BZyYfXpdNoXxUtwpTyTDUwQwSoWyAeA QFmZHgZvzJL+TIWFKVztnITYG7r69wY54DReamkmJrNyC5F8V31YP9UAb7aS604CvcWC PpYufCxFX9cI9tGhmFev8cFbV2bIWnqyJ3SdeFqNZY07YSxk3vIjdtuuA8o/q/24/aii aobWphT0H7EQjwcoYgFJLbNeNvNuu0lmYffu98yb9vV5FJtExOgOE1T9n9aV4v6f/Z6B +Yc6S5rcBcvJ1Z1VB0qAHH/b2xLT7iNMzwo+545QUrJKoxXAoBFxsoFyCoGb5v5oQmAB Ozhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hjwuoJXbPZqya2Ql77uhrL181Upp/BNSFK3UGdZout4=; b=vpAbb+tbgjQYipwJKyDFFtrNg7mgihDSLTh3RRzp7To5tGL7WSYnM9o1mZEACDE6vO ZEIXQasT/CYMbhHWxEg35LG+e5TxWotpPa+v8kWzDZLkd0lfWHGPEO3bhUWzcRI7LSbP L6kBlAcRPZELF7iZuzPTHkj6x0pC1l9iiRSlsKcKKlU75Z/ZElo5XtkOPWlM5lkeI9DK c+KCDwovpiF33o/efV8nkbMbnF3BXh3/xe+yQaA5yuTa10YxN5HiQyLuI1FA/xQe+Wbo sWmTniDrRGb/o6a6SAxcynclfxaFBNj/DI/gDi+uE3zltw7pOB6K9HkR2aC7P9Ti6Yxy jqSA== X-Gm-Message-State: AOAM533JunFmCDInh2dbDYP5RuDVxsKUfzI/byTVRIBIWVYK+8rY9Dj7 OCfte7zfI9dsPrX0u+y/WB4= X-Google-Smtp-Source: ABdhPJzOMSp2mVNpJZWWIsHm+nM6vM9pY+/hpJjTOTmBtHA3G5sqnYRTvIv9wdStJAAqzYHraxEm1w== X-Received: by 2002:a05:6512:1094:: with SMTP id j20mr24065288lfg.237.1639343014350; Sun, 12 Dec 2021 13:03:34 -0800 (PST) Received: from localhost.localdomain (94-29-46-111.dynamic.spd-mgts.ru. [94.29.46.111]) by smtp.gmail.com with ESMTPSA id y4sm1197172ljp.16.2021.12.12.13.03.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Dec 2021 13:03:33 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Russell King , Catalin Marinas , Will Deacon , Guo Ren , Geert Uytterhoeven , Greg Ungerer , Joshua Thompson , Thomas Bogendoerfer , Sebastian Reichel , Linus Walleij , Philipp Zabel , Greentime Hu , Vincent Chen , "James E.J. Bottomley" , Helge Deller , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Paul Walmsley , Palmer Dabbelt , Albert Ou , Yoshinori Sato , Rich Felker , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Boris Ostrovsky , Juergen Gross , Stefano Stabellini , "Rafael J. Wysocki" , Len Brown , Santosh Shilimkar , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , Pavel Machek , Lee Jones , Andrew Morton , Guenter Roeck , Daniel Lezcano , Andy Shevchenko , Ulf Hansson , alankao@andestech.com, "K . C . Kuen-Chern Lin" , =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Cc: 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: [PATCH v5 00/21] Introduce power-off+restart call chain API Date: Mon, 13 Dec 2021 00:02:48 +0300 Message-Id: <20211212210309.9851-1-digetx@gmail.com> X-Mailer: git-send-email 2.33.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211212_130336_003294_04EBA316 X-CRM114-Status: GOOD ( 25.84 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org UHJvYmxlbQotLS0tLS0tCgpTb0MgZGV2aWNlcyByZXF1aXJlIHBvd2VyLW9mZiBjYWxsIGNoYWlu aW5nIGZ1bmN0aW9uYWxpdHkgZnJvbSBrZXJuZWwuCldlIGhhdmUgYSB3aWRlbHkgdXNlZCByZXN0 YXJ0IGNoYWluaW5nIHByb3ZpZGVkIGJ5IHJlc3RhcnQgbm90aWZpZXIgQVBJLApidXQgbm90aGlu ZyBmb3IgcG93ZXItb2ZmLgoKU29sdXRpb24KLS0tLS0tLS0KCkludHJvZHVjZSBuZXcgQVBJIHRo YXQgcHJvdmlkZXMgYm90aCByZXN0YXJ0IGFuZCBwb3dlci1vZmYgY2FsbCBjaGFpbnMuCgpXaHkg Y29tYmluZSByZXN0YXJ0IHdpdGggcG93ZXItb2ZmPyBCZWNhdXNlIGRyaXZlcnMgb2Z0ZW4gZG8g Ym90aC4KTW9yZSBwcmFjdGljYWwgdG8gaGF2ZSBBUEkgdGhhdCBwcm92aWRlcyBib3RoIHVuZGVy IHRoZSBzYW1lIHJvb2YuCgpUaGUgbmV3IEFQSSBpcyBkZXNpZ25lZCB3aXRoIHNpbXBsaWNpdHkg YW5kIGV4dGVuc2liaWxpdHkgaW4gbWluZC4KSXQncyBidWlsdCB1cG9uIHRoZSBleGlzdGluZyBy ZXN0YXJ0IGFuZCByZWJvb3QgQVBJcy4gVGhlIHNpbXBsaWNpdHkKaXMgaW4gbmV3IGhlbHBlciBm dW5jdGlvbnMgdGhhdCBhcmUgY29udmVuaWVudCBmb3IgZHJpdmVycy4gVGhlCmV4dGVuc2liaWxp dHkgaXMgaW4gdGhlIGRlc2lnbiB0aGF0IGRvZXNuJ3QgaGFyZGNvZGUgY2FsbGJhY2sKYXJndW1l bnRzLCBtYWtpbmcgZWFzeSB0byBhZGQgbmV3IHBhcmFtZXRlcnMgYW5kIHJlbW92ZSBvbGQuCgpU aGlzIGlzIGEgdGhpcmQgYXR0ZW1wdCB0byBpbnRyb2R1Y2UgdGhlIG5ldyBBUEkuIEZpcnN0IHdh cyBtYWRlIGJ5Ckd1ZW50ZXIgUm9lY2sgYmFjayBpbiAyMDE0LCBzZWNvbmQgd2FzIG1hZGUgYnkg VGhpZXJyeSBSZWRpbmcgaW4gMjAxNy4KSW4gZmFjdCB0aGUgd29yayBkaWRuJ3Qgc3RvcCBhbmQg cmVjZW50bHkgYXJtX3BtX3Jlc3RhcnQoKSB3YXMgcmVtb3ZlZApmcm9tIHY1LjE0IGtlcm5lbCwg d2hpY2ggd2FzIGEgcGFydCBvZiBwcmVwYXJhdG9yeSB3b3JrIHN0YXJ0ZWQgYnkKR3VlbnRlciBS b2Vjay4gSSB0b29rIGludG8gYWNjb3VudCBleHBlcmllbmNlIGFuZCBpZGVhcyBmcm9tIHRoZQpw cmV2aW91cyBhdHRlbXB0cywgZXh0ZW5kZWQgYW5kIHBvbGlzaGVkIHRoZW0uCgpBZG9wdGlvbiBw bGFuCi0tLS0tLS0tLS0tLS0KClRoaXMgcGF0Y2hzZXQgaW50cm9kdWNlcyB0aGUgbmV3IEFQSS4g SXQgYWxzbyBjb252ZXJ0cyBtdWx0aXBsZSBkcml2ZXJzCmFuZCBhcmNoIGNvZGUgdG8gdGhlIG5l dyBBUEkgdG8gZGVtb25zdHJhdGUgaG93IGl0IGFsbCBsb29rcyBpbiBwcmFjdGljZS4KClRoZSBw bGFuIGlzOgoKMS4gTWVyZ2UgbmV3IEFQSSAocGF0Y2hlcyAxLTgpLiBUaGlzIEFQSSB3aWxsIGNv LWV4aXN0IHdpdGggdGhlIG9sZCBBUElzLgoKMi4gQ29udmVydCBhcmNoIGNvZGUgdG8gZG9fa2Vy bmVsX3Bvd2VyX29mZigpIChwYXRjaGVzIDktMjEpLgoKMy4gQ29udmVydCBkcml2ZXJzIGFuZCBw bGF0Zm9ybSBjb2RlIHRvIHRoZSBuZXcgQVBJLgoKNC4gUmVtb3ZlIG9ic29sZXRlIHBtX3Bvd2Vy X29mZiBhbmQgcG1fcG93ZXJfb2ZmX3ByZXBhcmUgdmFyaWFibGVzLgoKNS4gTWFrZSByZXN0YXJ0 LW5vdGlmaWVyIEFQSSBwcml2YXRlIHRvIGtlcm5lbC9yZWJvb3QuYyBvbmNlIG5vIHVzZXJzIGxl ZnQuCgo2LiBNYWtlIHVuaXF1ZW5lc3Mgb2YgdGhlIGhhbmRsZXJzJyBwcmlvcml0eSBhIG1hbmRh dG9yeSByZXF1aXJlbWVudC4KCkl0J3MgZnVsbHkgaW1wbGVtZW50ZWQgaGVyZToKClsxXSBodHRw czovL2dpdGh1Yi5jb20vZ3JhdGUtZHJpdmVyL2xpbnV4L2NvbW1pdHMvc3lzLW9mZi1oYW5kbGVy CgpGb3Igbm93IEknbSBzZW5kaW5nIG9ubHkgdGhlIGZpcnN0IDI1IGJhc2UgcGF0Y2hlcyBvdXQg b2YgfjE4MC4gSXQncwpwcmVmZXJhYmxlIHRvIHNxdWFzaCAxLTIsIHBhcnRpYWxseSAzIGFuZCA0 IHBvaW50cyBvZiB0aGUgcGxhbiBpbnRvIGEKc2luZ2xlIHBhdGNoc2V0IHRvIGVhc2UgYW5kIHNw ZWVkIHVwIGFwcGx5aW5nIG9mIHRoZSByZXN0IG9mIHRoZSBwYXRjaGVzLgpNYWpvcml0eSBvZiBk cml2ZXJzIGFuZCBwbGF0Zm9ybSBwYXRjaGVzIGRlcGVuZCBvbiB0aGUgYmFzZSwgaGVuY2UgdGhl eQp3aWxsIGNvbWUgbGF0ZXIgKGFuZCBwZXIgc3Vic3lzdGVtKSwgb25jZSBiYXNlIHdpbGwgbGFu ZC4KCkFsbCBbMV0gcGF0Y2hlcyBhcmUgY29tcGlsZS10ZXN0ZWQuIFRlZ3JhIGFuZCB4ODYgQUNQ SSBwYXRjaGVzIGFyZSB0ZXN0ZWQKb24gaGFyZHdhcmUuIFRoZSByZW1haW5pbmcgc2hvdWxkIGJl IGNvdmVyZWQgYnkgdW5pdCB0ZXN0cyAodW5wdWJsaXNoZWQpLgoKUmVzdWx0cwotLS0tLS0tCgox LiBEZXZpY2VzIGNhbiBiZSBwb3dlcmVkIG9mZiBwcm9wZXJseS4KCjIuIEdsb2JhbCB2YXJpYWJs ZXMgYXJlIHJlbW92ZWQgZnJvbSBkcml2ZXJzLgoKMy4gR2xvYmFsIHBtX3Bvd2VyX29mZiBhbmQg cG1fcG93ZXJfb2ZmX3ByZXBhcmUgY2FsbGJhY2sgdmFyaWFibGVzIGFyZQpyZW1vdmVkIG9uY2Ug YWxsIHVzZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdGhlIG5ldyBBUEkuIFRoZSBsYXR0ZXIgY2FsbGJh Y2sKaXMgcmVtb3ZlZCBieSBwYXRjaCAjMjUgb2YgdGhpcyBzZXJpZXMuCgo0LiBBbWJpZ3VvdXMg Y2FsbCBjaGFpbiBvcmRlcmluZyBpcyBwcm9oaWJpdGVkLiBTZWUgcGF0Y2ggIzUgd2hpY2ggYWRk cwp2ZXJpZmljYXRpb24gb2YgcmVzdGFydCBoYW5kbGVycyBwcmlvcml0aWVzLCBlbnN1cmluZyB0 aGF0IHRoZXkgYXJlIHVuaXF1ZS4KCkNoYW5nZWxvZzoKCnY1OiAtIERyb3BwZWQgcGF0Y2hlcyB3 aGljaCBjbGVhbmVkIHVwIG5vdGlmaWVyL3JlYm9vdCBoZWFkZXJzLCBhcyB3YXMKICAgICAgcmVx dWVzdGVkIGJ5IFJhZmFlbCBXeXNvY2tpLgoKICAgIC0gRHJvcHBlZCBXQVJOX09OKCkgZnJvbSB0 aGUgY29kZSwgYXMgd2FzIHJlcXVlc3RlZCBieSBSYWZhZWwgV3lzb2NraS4KICAgICAgUmVwbGFj ZWQgaXQgd2l0aCBwcl9lcnIoKSBhcHByb3ByaWF0ZWx5LgoKICAgIC0gRHJvcHBlZCAqX25vdGlm aWVyX2hhc191bmlxdWVfcHJpb3JpdHkoKSBmdW5jdGlvbnMgYW5kIGFkZGVkCiAgICAgICpfbm90 aWZpZXJfY2hhaW5fcmVnaXN0ZXJfdW5pcXVlX3ByaW8oKSBpbnN0ZWFkLCBhcyB3YXMgc3VnZ2Vz dGVkCiAgICAgIGJ5IE1pY2hhxYIgTWlyb3PFgmF3IGFuZCBSYWZhZWwgV3lzb2NraS4KCiAgICAt IERyb3BwZWQgZXhwb3J0IG9mIGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW5faXNfZW1wdHko KSBzeW1ib2wsCiAgICAgIGFzIHdhcyBzdWdnZXN0ZWQgYnkgUmFmYWVsIFd5c29ja2kuCgogICAg LSBNaWNoYcWCIE1pcm9zxYJhdyBzdWdnZXN0ZWQgdGhhdCB3aWxsIGJlIGJldHRlciB0byBzcGxp dCB1cCBwYXRjaAogICAgICB0aGF0IGFkZHMgdGhlIG5ldyBBUEkgdG8gZWFzZSByZXZpZXdpbmcs IGJ1dCBSYWZhZWwgV3lzb2NraSBhc2tlZAogICAgICBub3QgYWRkIG1vcmUgcGF0Y2hlcywgc28g SSBrZXB0IGl0IGFzIGEgc2luZ2xlIHBhdGNoLgoKICAgIC0gQWRkZWQgdGVtcG9yYXJ5ICJ3ZWFr IiBzdHViIGZvciBwbV9wb3dlcl9vZmYoKSB3aGljaCBmaXhlcyBsaW5rYWdlCiAgICAgIGZhaWx1 cmUgb25jZSBzeW1ib2wgaXMgcmVtb3ZlZCBmcm9tIGFyY2gvKiBjb2RlLiBQcmV2aW91c2x5IEkg bWlzc2VkCiAgICAgIHRoaXMgcHJvYmxlbSBiZWNhdXNlIHdhcyBvbmx5IGNvbXBpbGUtdGVzdGlu ZyBvYmplY3QgZmlsZXMuCgp2NDogLSBNYWRlIGEgdmVyeSBtaW5vciBpbXByb3ZlbWVudCB0byBk b2MgY29tbWVudHMsIGNsYXJpZnlpbmcgY291cGxlCiAgICAgIGRlZmF1bHQgdmFsdWVzLgoKICAg IC0gQ29ycmVjdGVkIGxpc3Qgb2YgZW1haWxzIHJlY2lwaWVudCBieSBhZGRpbmcgTGludXMsIFNl YmFzdGlhbiwKICAgICAgUGhpbGlwcCBhbmQgbW9yZSBORFMgcGVvcGxlLiBSZW1vdmVkIGJvdW5j aW5nIGVtYWlscy4KCiAgICAtIEFkZGVkIGFja3MgdGhhdCB3ZXJlIGdpdmVuIHRvIHYzLgoKdjM6 IC0gUmVuYW1lZCBwb3dlcl9oYW5kbGVyIHRvIHN5c19vZmZfaGFuZGxlciBhcyB3YXMgc3VnZ2Vz dGVkIGJ5CiAgICAgIFJhZmFlbCBXeXNvY2tpLgoKICAgIC0gSW1wcm92ZWQgZG9jLWNvbW1lbnRz IGFzIHdhcyBzdWdnZXN0ZWQgYnkgUmFmYWVsIFd5c29ja2kuIEFkZGVkIG1vcmUKICAgICAgZG9j LWNvbW1lbnRzLgoKICAgIC0gSW1wbGVtZW50ZWQgZnVsbCBzZXQgb2YgMTgwIHBhdGNoZXMgd2hp Y2ggY29udmVydCB3aG9sZSBrZXJuZWwgaW4KICAgICAgYWNjb3JkYW5jZSB0byB0aGUgcGxhbiwg c2VlIGxpbmsgWzFdIGFib3ZlLiBTbGlnaHRseSBhZGp1c3RlZCBBUEkgdG8KICAgICAgYmV0dGVy IHN1aXQgZm9yIHRoZSByZW1haW5pbmcgY29udmVydGVkIGRyaXZlcnMuCgogICAgICAqIEFkZGVk IHVucmVnaXN0ZXJfc3lzX29mZl9oYW5kbGVyKCkgdGhhdCBpcyBoYW5keSBmb3IgYSBjb3VwbGUg b2xkCiAgICAgICAgcGxhdGZvcm0gZHJpdmVycy4KCiAgICAgICogRHJvcHBlZCBkZXZtX3JlZ2lz dGVyX3RyaXZpYWxfcmVzdGFydF9oYW5kbGVyKCksICdzaW1wbGUnIHZhcmlhbnQKICAgICAgICBp cyBlbm91Z2ggdG8gaGF2ZS4KCiAgICAtIEltcHJvdmVkICJBZGQgYXRvbWljL2Jsb2NraW5nX25v dGlmaWVyX2hhc191bmlxdWVfcHJpb3JpdHkoKSIgcGF0Y2gsCiAgICAgIGFzIHdhcyBzdWdnZXN0 ZWQgYnkgQW5keSBTaGV2Y2hlbmtvLiBBbHNvIHJlcGxhY2VkIGRvd25fd3JpdGUoKSB3aXRoCiAg ICAgIGRvd25fcmVhZCgpIGFuZCBmYWN0b3JlZCBvdXQgY29tbW9uIG5vdGlmaWVyX2hhc191bmlx dWVfcHJpb3JpdHkoKS4KCiAgICAtIEFkZGVkIHN0b3BfY2hhaW4gZmllbGQgdG8gc3RydWN0IHJl c3RhcnRfZGF0YSBhbmQgcmVib290X3ByZXBfZGF0YQogICAgICBhZnRlciBkaXNjb3ZlcmluZyBj b3VwbGUgZHJpdmVycyB3YW50aW5nIHRoYXQgZmVhdHVyZS4KCiAgICAtIEFkZGVkIGFja3MgdGhh dCB3ZXJlIGdpdmVuIHRvIHYyLgoKdjI6IC0gUmVwbGFjZWQgc3RhbmRhbG9uZSBwb3dlci1vZmYg Y2FsbCBjaGFpbiBkZW1vLUFQSSB3aXRoIHRoZSBjb21iaW5lZAogICAgICBwb3dlci1vZmYrcmVz dGFydCBBUEkgYmVjYXVzZSB0aGlzIGlzIHdoYXQgZHJpdmVycyB3YW50LiBJdCdzIGEgbW9yZQog ICAgICBjb21wcmVoZW5zaXZlIHNvbHV0aW9uLgoKICAgIC0gQ29udmVydGVkIG11bHRpcGxlIGRy aXZlcnMgYW5kIGFyY2ggY29kZSB0byB0aGUgbmV3IEFQSS4gU3VnZ2VzdGVkIGJ5CiAgICAgIEFu ZHkgU2hldmNoZW5rby4gSSBza2ltbWVkIHRocm91Z2ggdGhlIHJlc3Qgb2YgZHJpdmVycywgdmVy aWZ5aW5nIHRoYXQKICAgICAgbmV3IEFQSSBzdWl0cyB0aGVtLiBUaGUgcmVzdCBvZiB0aGUgZHJp dmVycyB3aWxsIGJlIGNvbnZlcnRlZCBvbmNlIHdlCiAgICAgIHdpbGwgc2V0dGxlIG9uIHRoZSBu ZXcgQVBJLCBvdGhlcndpc2Ugd2lsbCBiZSB0b28gbWFueSBwYXRjaGVzIGhlcmUuCgogICAgLSB2 MiBBUEkgZG9lc24ndCBleHBvc2Ugbm90aWZpZXIgdG8gdXNlcnMgYW5kIHJlcXVpcmUgaGFuZGxl cnMgdG8KICAgICAgaGF2ZSB1bmlxdWUgcHJpb3JpdHkuIFN1Z2dlc3RlZCBieSBHdWVudGVyIFJv ZWNrLgoKICAgIC0gdjIgQVBJIGhhcyBwb3dlci1vZmYgY2hhaW5pbmcgZGlzYWJsZWQgYnkgZGVm YXVsdCBhbmQgcmVxdWlyZQogICAgICBkcml2ZXJzIHRvIGV4cGxpY2l0bHkgb3B0LWluIHRvIHRo ZSBjaGFpbmluZy4gVGhpcyBwcmVzZXJ2ZXMgb2xkCiAgICAgIGJlaGF2aW91ciBmb3IgZXhpc3Rp bmcgZHJpdmVycyBvbmNlIHRoZXkgYXJlIGNvbnZlcnRlZCB0byB0aGUgbmV3CiAgICAgIEFQSS4K CkRtaXRyeSBPc2lwZW5rbyAoMjEpOgogIG5vdGlmaWVyOiBBZGQgYmxvY2tpbmdfbm90aWZpZXJf Y2FsbF9jaGFpbl9pc19lbXB0eSgpCiAgbm90aWZpZXI6IEFkZCBhdG9taWMvYmxvY2tpbmdfbm90 aWZpZXJfY2hhaW5fcmVnaXN0ZXJfdW5pcXVlX3ByaW8oKQogIHJlYm9vdDogUHJpbnQgZXJyb3Ig bWVzc2FnZSBpZiByZXN0YXJ0IGhhbmRsZXIgaGFzIGR1cGxpY2F0ZWQgcHJpb3JpdHkKICBrZXJu ZWw6IEFkZCBjb21iaW5lZCBwb3dlci1vZmYrcmVzdGFydCBoYW5kbGVyIGNhbGwgY2hhaW4gQVBJ CiAgQVJNOiBVc2UgZG9fa2VybmVsX3Bvd2VyX29mZigpCiAgY3NreTogVXNlIGRvX2tlcm5lbF9w b3dlcl9vZmYoKQogIHJpc2N2OiBVc2UgZG9fa2VybmVsX3Bvd2VyX29mZigpCiAgYXJtNjQ6IFVz ZSBkb19rZXJuZWxfcG93ZXJfb2ZmKCkKICBwYXJpc2M6IFVzZSBkb19rZXJuZWxfcG93ZXJfb2Zm KCkKICB4ZW4veDg2OiBVc2UgZG9fa2VybmVsX3Bvd2VyX29mZigpCiAgcG93ZXJwYzogVXNlIGRv X2tlcm5lbF9wb3dlcl9vZmYoKQogIG02OGs6IFN3aXRjaCB0byBuZXcgc3lzLW9mZiBoYW5kbGVy IEFQSQogIHNoOiBVc2UgZG9fa2VybmVsX3Bvd2VyX29mZigpCiAgeDg2OiBVc2UgZG9fa2VybmVs X3Bvd2VyX29mZigpCiAgaWE2NDogVXNlIGRvX2tlcm5lbF9wb3dlcl9vZmYoKQogIG1pcHM6IFVz ZSBkb19rZXJuZWxfcG93ZXJfb2ZmKCkKICBuZHMzMjogVXNlIGRvX2tlcm5lbF9wb3dlcl9vZmYo KQogIG1lbW9yeTogZW1pZjogVXNlIGtlcm5lbF9jYW5fcG93ZXJfb2ZmKCkKICBBQ1BJOiBwb3dl cjogU3dpdGNoIHRvIHN5cy1vZmYgaGFuZGxlciBBUEkKICByZWd1bGF0b3I6IHBmdXplMTAwOiBV c2UgZGV2bV9yZWdpc3Rlcl9zeXNfb2ZmX2hhbmRsZXIoKQogIHJlYm9vdDogUmVtb3ZlIHBtX3Bv d2VyX29mZl9wcmVwYXJlKCkKCiBhcmNoL2FybS9rZXJuZWwvcmVib290LmMgICAgICAgICAgICAg ICB8ICAgNCArLQogYXJjaC9hcm02NC9rZXJuZWwvcHJvY2Vzcy5jICAgICAgICAgICAgfCAgIDMg Ky0KIGFyY2gvY3NreS9rZXJuZWwvcG93ZXIuYyAgICAgICAgICAgICAgIHwgICA2ICstCiBhcmNo L2lhNjQva2VybmVsL3Byb2Nlc3MuYyAgICAgICAgICAgICB8ICAgNCArLQogYXJjaC9tNjhrL2Vt dS9uYXRmZWF0LmMgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGFyY2gvbTY4ay9pbmNsdWRlL2Fz bS9tYWNoZGVwLmggICAgICAgIHwgICAxIC0KIGFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jICAg ICAgICAgICAgIHwgICA1ICstCiBhcmNoL202OGsva2VybmVsL3NldHVwX21tLmMgICAgICAgICAg ICB8ICAgMSAtCiBhcmNoL202OGsva2VybmVsL3NldHVwX25vLmMgICAgICAgICAgICB8ICAgMSAt CiBhcmNoL202OGsvbWFjL2NvbmZpZy5jICAgICAgICAgICAgICAgICB8ICAgNCArLQogYXJjaC9t aXBzL2tlcm5lbC9yZXNldC5jICAgICAgICAgICAgICAgfCAgIDMgKy0KIGFyY2gvbmRzMzIva2Vy bmVsL3Byb2Nlc3MuYyAgICAgICAgICAgIHwgICAzICstCiBhcmNoL3BhcmlzYy9rZXJuZWwvcHJv Y2Vzcy5jICAgICAgICAgICB8ICAgNCArLQogYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21t b24uYyAgICAgfCAgIDQgKy0KIGFyY2gvcG93ZXJwYy94bW9uL3htb24uYyAgICAgICAgICAgICAg IHwgICAzICstCiBhcmNoL3Jpc2N2L2tlcm5lbC9yZXNldC5jICAgICAgICAgICAgICB8ICAxMiAr LQogYXJjaC9zaC9rZXJuZWwvcmVib290LmMgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGFyY2gv eDg2L2tlcm5lbC9yZWJvb3QuYyAgICAgICAgICAgICAgIHwgICA0ICstCiBhcmNoL3g4Ni94ZW4v ZW5saWdodGVuX3B2LmMgICAgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9hY3BpL3NsZWVwLmMg ICAgICAgICAgICAgICAgICAgfCAgMjUgKy0KIGRyaXZlcnMvbWVtb3J5L2VtaWYuYyAgICAgICAg ICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL3JlZ3VsYXRvci9wZnV6ZTEwMC1yZWd1bGF0b3Iu YyB8ICAzOCArLQogaW5jbHVkZS9saW51eC9ub3RpZmllci5oICAgICAgICAgICAgICAgfCAgIDcg KwogaW5jbHVkZS9saW51eC9wbS5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgLQogaW5jbHVk ZS9saW51eC9yZWJvb3QuaCAgICAgICAgICAgICAgICAgfCAyNjUgKysrKysrKysrKystCiBrZXJu ZWwvbm90aWZpZXIuYyAgICAgICAgICAgICAgICAgICAgICB8IDEwMCArKysrLQoga2VybmVsL3Bv d2VyL2hpYmVybmF0ZS5jICAgICAgICAgICAgICAgfCAgIDIgKy0KIGtlcm5lbC9yZWJvb3QuYyAg ICAgICAgICAgICAgICAgICAgICAgIHwgNTc0ICsrKysrKysrKysrKysrKysrKysrKysrKy0KIDI4 IGZpbGVzIGNoYW5nZWQsIDk2OCBpbnNlcnRpb25zKCspLCAxMTggZGVsZXRpb25zKC0pCgotLSAK Mi4zMy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30BCFC4332F for ; Sun, 12 Dec 2021 21:21:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229761AbhLLVVD (ORCPT ); Sun, 12 Dec 2021 16:21:03 -0500 Received: from mail-wr1-f44.google.com ([209.85.221.44]:36783 "EHLO mail-wr1-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229848AbhLLVU5 (ORCPT ); Sun, 12 Dec 2021 16:20:57 -0500 Received: by mail-wr1-f44.google.com with SMTP id u17so24040551wrt.3; Sun, 12 Dec 2021 13:20:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hjwuoJXbPZqya2Ql77uhrL181Upp/BNSFK3UGdZout4=; b=ZTR2gUvyc9Jk5H+625D+27T8YU6HUrFsdK+BZyYfXpdNoXxUtwpTyTDUwQwSoWyAeA QFmZHgZvzJL+TIWFKVztnITYG7r69wY54DReamkmJrNyC5F8V31YP9UAb7aS604CvcWC PpYufCxFX9cI9tGhmFev8cFbV2bIWnqyJ3SdeFqNZY07YSxk3vIjdtuuA8o/q/24/aii aobWphT0H7EQjwcoYgFJLbNeNvNuu0lmYffu98yb9vV5FJtExOgOE1T9n9aV4v6f/Z6B +Yc6S5rcBcvJ1Z1VB0qAHH/b2xLT7iNMzwo+545QUrJKoxXAoBFxsoFyCoGb5v5oQmAB Ozhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hjwuoJXbPZqya2Ql77uhrL181Upp/BNSFK3UGdZout4=; b=I4rUfWxO+26sB42l8wwftlvG5piCor4tMoJuL20JpA4ygvJ+t6q1jB7Q7KGuwMuvuF rur0k/8hv544G+821orf2uPtwC4UgMp8j+ioIYc/el/hGKbGkYdzWQzHbu/aaJC+mqc9 gTLKTuAQg2FJHzenft+nmUWS3e541fhnv91pu7ah6mQcfIVDcyxfDQhzxFe28t4F771v iYnJl1fr4nZcKNc1joyDcPyeD+QXZQTg8MaZuccIvtBkyDkNu008zKRrEfI3IQyLmwdl rqmya6zVprTnlxEJawkiIfeFAx6P1eL3JiHdrPUlAMTWG5GbYKa3MRjfqX9m1GD9hEYe jJJQ== X-Gm-Message-State: AOAM5325eqAkaumtiPNvwTMtCW3HuWqseDAkfmgHxitzi2eSYPAiMW3d L+ppYKgAM6opsgM+lDPGV761XAxpE/I= X-Google-Smtp-Source: ABdhPJzOMSp2mVNpJZWWIsHm+nM6vM9pY+/hpJjTOTmBtHA3G5sqnYRTvIv9wdStJAAqzYHraxEm1w== X-Received: by 2002:a05:6512:1094:: with SMTP id j20mr24065288lfg.237.1639343014350; Sun, 12 Dec 2021 13:03:34 -0800 (PST) Received: from localhost.localdomain (94-29-46-111.dynamic.spd-mgts.ru. [94.29.46.111]) by smtp.gmail.com with ESMTPSA id y4sm1197172ljp.16.2021.12.12.13.03.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Dec 2021 13:03:33 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Russell King , Catalin Marinas , Will Deacon , Guo Ren , Geert Uytterhoeven , Greg Ungerer , Joshua Thompson , Thomas Bogendoerfer , Sebastian Reichel , Linus Walleij , Philipp Zabel , Greentime Hu , Vincent Chen , "James E.J. Bottomley" , Helge Deller , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Paul Walmsley , Palmer Dabbelt , Albert Ou , Yoshinori Sato , Rich Felker , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Boris Ostrovsky , Juergen Gross , Stefano Stabellini , "Rafael J. Wysocki" , Len Brown , Santosh Shilimkar , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , Pavel Machek , Lee Jones , Andrew Morton , Guenter Roeck , Daniel Lezcano , Andy Shevchenko , Ulf Hansson , alankao@andestech.com, "K . C . Kuen-Chern Lin" , =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Cc: 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: [PATCH v5 00/21] Introduce power-off+restart call chain API Date: Mon, 13 Dec 2021 00:02:48 +0300 Message-Id: <20211212210309.9851-1-digetx@gmail.com> X-Mailer: git-send-email 2.33.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org 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. 6. Make uniqueness of the handlers' priority a mandatory requirement. 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: v5: - Dropped patches which cleaned up notifier/reboot headers, as was requested by Rafael Wysocki. - Dropped WARN_ON() from the code, as was requested by Rafael Wysocki. Replaced it with pr_err() appropriately. - Dropped *_notifier_has_unique_priority() functions and added *_notifier_chain_register_unique_prio() instead, as was suggested by Michał Mirosław and Rafael Wysocki. - Dropped export of blocking_notifier_call_chain_is_empty() symbol, as was suggested by Rafael Wysocki. - Michał Mirosław suggested that will be better to split up patch that adds the new API to ease reviewing, but Rafael Wysocki asked not add more patches, so I kept it as a single patch. - Added temporary "weak" stub for pm_power_off() which fixes linkage failure once symbol is removed from arch/* code. Previously I missed this problem because was only compile-testing object files. v4: - Made a very minor improvement to doc comments, clarifying couple default values. - Corrected list of emails recipient by adding Linus, Sebastian, Philipp and more NDS people. Removed bouncing emails. - Added acks that were given to v3. 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 (21): notifier: Add blocking_notifier_call_chain_is_empty() notifier: Add atomic/blocking_notifier_chain_register_unique_prio() reboot: Print error message if restart handler has duplicated priority 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() powerpc: Use do_kernel_power_off() m68k: Switch to new sys-off handler API 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() 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 | 7 + include/linux/pm.h | 1 - include/linux/reboot.h | 265 +++++++++++- kernel/notifier.c | 100 ++++- kernel/power/hibernate.c | 2 +- kernel/reboot.c | 574 ++++++++++++++++++++++++- 28 files changed, 968 insertions(+), 118 deletions(-) -- 2.33.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5A717C433EF for ; Sun, 12 Dec 2021 23:05:01 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4JC0bJ0bN1z3cnd for ; Mon, 13 Dec 2021 10:05:00 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=ZTR2gUvy; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2a00:1450:4864:20::132; helo=mail-lf1-x132.google.com; envelope-from=digetx@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=ZTR2gUvy; dkim-atps=neutral Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4JBxvH6wrzz2x9S for ; Mon, 13 Dec 2021 08:03:38 +1100 (AEDT) Received: by mail-lf1-x132.google.com with SMTP id b1so27367701lfs.13 for ; Sun, 12 Dec 2021 13:03:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hjwuoJXbPZqya2Ql77uhrL181Upp/BNSFK3UGdZout4=; b=ZTR2gUvyc9Jk5H+625D+27T8YU6HUrFsdK+BZyYfXpdNoXxUtwpTyTDUwQwSoWyAeA QFmZHgZvzJL+TIWFKVztnITYG7r69wY54DReamkmJrNyC5F8V31YP9UAb7aS604CvcWC PpYufCxFX9cI9tGhmFev8cFbV2bIWnqyJ3SdeFqNZY07YSxk3vIjdtuuA8o/q/24/aii aobWphT0H7EQjwcoYgFJLbNeNvNuu0lmYffu98yb9vV5FJtExOgOE1T9n9aV4v6f/Z6B +Yc6S5rcBcvJ1Z1VB0qAHH/b2xLT7iNMzwo+545QUrJKoxXAoBFxsoFyCoGb5v5oQmAB Ozhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hjwuoJXbPZqya2Ql77uhrL181Upp/BNSFK3UGdZout4=; b=loIpcCunfwRjoXP/fgoavei07TCsHkmpxgKyoIoQFenKq0FnfZdDQ/9CkpB6QidLad ISF6tYcibwohyooaDaQiCq9OvdK5ihnAk71X/zlBf+mLuJGsZoCQKIMl62xiR0AsEkVs tof6+C5IkNiHy5nbwQXfRTXLRGoJhRvPVHs0gVaxtaSMEisNW6JYY5vUwXTCNvr9Wu1U 3RWLG5j2j21ssfz6+CPZZoq5mUmB5hBrWvXrtK4AGkqfJfW8/smVMXJxcMuXc1z8nB8+ QmXzDREI/4VTRZopqyTHn8L3Zkr1uTXGWVfO7lZ4s6vjM/kaQgdEob6u/1F5USMn2xQc pk5A== X-Gm-Message-State: AOAM533EN/HT3kv+BmtrZgIXVkeaG6yiZ+sw/+DSe4mgvv1JGpys4auR jSWyexLELHZGxL056Y8Ebqw= X-Google-Smtp-Source: ABdhPJzOMSp2mVNpJZWWIsHm+nM6vM9pY+/hpJjTOTmBtHA3G5sqnYRTvIv9wdStJAAqzYHraxEm1w== X-Received: by 2002:a05:6512:1094:: with SMTP id j20mr24065288lfg.237.1639343014350; Sun, 12 Dec 2021 13:03:34 -0800 (PST) Received: from localhost.localdomain (94-29-46-111.dynamic.spd-mgts.ru. [94.29.46.111]) by smtp.gmail.com with ESMTPSA id y4sm1197172ljp.16.2021.12.12.13.03.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Dec 2021 13:03:33 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Russell King , Catalin Marinas , Will Deacon , Guo Ren , Geert Uytterhoeven , Greg Ungerer , Joshua Thompson , Thomas Bogendoerfer , Sebastian Reichel , Linus Walleij , Philipp Zabel , Greentime Hu , Vincent Chen , "James E.J. Bottomley" , Helge Deller , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Paul Walmsley , Palmer Dabbelt , Albert Ou , Yoshinori Sato , Rich Felker , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Boris Ostrovsky , Juergen Gross , Stefano Stabellini , "Rafael J. Wysocki" , Len Brown , Santosh Shilimkar , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , Pavel Machek , Lee Jones , Andrew Morton , Guenter Roeck , Daniel Lezcano , Andy Shevchenko , Ulf Hansson , alankao@andestech.com, "K . C . Kuen-Chern Lin" , =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Subject: [PATCH v5 00/21] Introduce power-off+restart call chain API Date: Mon, 13 Dec 2021 00:02:48 +0300 Message-Id: <20211212210309.9851-1-digetx@gmail.com> X-Mailer: git-send-email 2.33.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Mon, 13 Dec 2021 09:47:48 +1100 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-ia64@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-csky@vger.kernel.org, linux-mips@vger.kernel.org, linux-acpi@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-tegra@vger.kernel.org, xen-devel@lists.xenproject.org, linux-riscv@lists.infradead.org, linuxppc-dev@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" 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. 6. Make uniqueness of the handlers' priority a mandatory requirement. 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: v5: - Dropped patches which cleaned up notifier/reboot headers, as was requested by Rafael Wysocki. - Dropped WARN_ON() from the code, as was requested by Rafael Wysocki. Replaced it with pr_err() appropriately. - Dropped *_notifier_has_unique_priority() functions and added *_notifier_chain_register_unique_prio() instead, as was suggested by Michał Mirosław and Rafael Wysocki. - Dropped export of blocking_notifier_call_chain_is_empty() symbol, as was suggested by Rafael Wysocki. - Michał Mirosław suggested that will be better to split up patch that adds the new API to ease reviewing, but Rafael Wysocki asked not add more patches, so I kept it as a single patch. - Added temporary "weak" stub for pm_power_off() which fixes linkage failure once symbol is removed from arch/* code. Previously I missed this problem because was only compile-testing object files. v4: - Made a very minor improvement to doc comments, clarifying couple default values. - Corrected list of emails recipient by adding Linus, Sebastian, Philipp and more NDS people. Removed bouncing emails. - Added acks that were given to v3. 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 (21): notifier: Add blocking_notifier_call_chain_is_empty() notifier: Add atomic/blocking_notifier_chain_register_unique_prio() reboot: Print error message if restart handler has duplicated priority 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() powerpc: Use do_kernel_power_off() m68k: Switch to new sys-off handler API 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() 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 | 7 + include/linux/pm.h | 1 - include/linux/reboot.h | 265 +++++++++++- kernel/notifier.c | 100 ++++- kernel/power/hibernate.c | 2 +- kernel/reboot.c | 574 ++++++++++++++++++++++++- 28 files changed, 968 insertions(+), 118 deletions(-) -- 2.33.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Osipenko Date: Sun, 12 Dec 2021 21:02:48 +0000 Subject: [PATCH v5 00/21] Introduce power-off+restart call chain API Message-Id: <20211212210309.9851-1-digetx@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: Thierry Reding , Jonathan Hunter , Russell King , Catalin Marinas , Will Deacon , Guo Ren , Geert Uytterhoeven , Greg Ungerer , Joshua Thompson , Thomas Bogendoerfer , Sebastian Reichel , Linus Walleij , Philipp Zabel , Greentime Hu , Vincent Chen , "James E.J. Bottomley" , Helge Deller , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Paul Walmsley , Palmer Dabbelt , Albert Ou , Yoshinori Sato , Rich Felker , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Boris Ostrovsky , Juergen Gross , Stefano Stabellini , "Rafael J. Wysocki" , Len Brown , Santosh Shilimkar , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , Pavel Machek , Lee Jones , Andrew Morton , Guenter Roeck , Daniel Lezcano , Andy Shevchenko , Ulf Hansson , alankao@andestech.com, "K . C . Kuen-Chern Lin" , =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Cc: 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 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. 6. Make uniqueness of the handlers' priority a mandatory requirement. 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: v5: - Dropped patches which cleaned up notifier/reboot headers, as was requested by Rafael Wysocki. - Dropped WARN_ON() from the code, as was requested by Rafael Wysocki. Replaced it with pr_err() appropriately. - Dropped *_notifier_has_unique_priority() functions and added *_notifier_chain_register_unique_prio() instead, as was suggested by Michał Mirosław and Rafael Wysocki. - Dropped export of blocking_notifier_call_chain_is_empty() symbol, as was suggested by Rafael Wysocki. - Michał Mirosław suggested that will be better to split up patch that adds the new API to ease reviewing, but Rafael Wysocki asked not add more patches, so I kept it as a single patch. - Added temporary "weak" stub for pm_power_off() which fixes linkage failure once symbol is removed from arch/* code. Previously I missed this problem because was only compile-testing object files. v4: - Made a very minor improvement to doc comments, clarifying couple default values. - Corrected list of emails recipient by adding Linus, Sebastian, Philipp and more NDS people. Removed bouncing emails. - Added acks that were given to v3. 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 (21): notifier: Add blocking_notifier_call_chain_is_empty() notifier: Add atomic/blocking_notifier_chain_register_unique_prio() reboot: Print error message if restart handler has duplicated priority 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() powerpc: Use do_kernel_power_off() m68k: Switch to new sys-off handler API 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() 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 | 7 + include/linux/pm.h | 1 - include/linux/reboot.h | 265 +++++++++++- kernel/notifier.c | 100 ++++- kernel/power/hibernate.c | 2 +- kernel/reboot.c | 574 ++++++++++++++++++++++++- 28 files changed, 968 insertions(+), 118 deletions(-) -- 2.33.1