From patchwork Tue Feb 21 02:35:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: JeeHeng Sia X-Patchwork-Id: 5655 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1633220wrn; Mon, 20 Feb 2023 18:37:22 -0800 (PST) X-Google-Smtp-Source: AK7set9PlEyHdi1BYDJnHg3p4wGjN2xYIOirocyoxYaB2VO96eJm94jeRlzgagLVv7qB14j51yRj X-Received: by 2002:a05:6a20:6990:b0:be:d368:5c63 with SMTP id t16-20020a056a20699000b000bed3685c63mr3339787pzk.38.1676947041717; Mon, 20 Feb 2023 18:37:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676947041; cv=none; d=google.com; s=arc-20160816; b=WfDGsUYs5JlZXDeh132aXf+B0/Z0tWRNGgsx9lchx9YgUXHBvuchQ2DXPcJlhImlI1 nBb4Iz8HGogp8t7VR+UmWqCRJgkE/phNmjfd4Xw47Vg+NbVhSrOiy2AL1IyNI08Euyjk 59qkRG7h5pJv7ecW11RFYcq9vtBUu8XgcocIRAQFPVd0DmfGSt7znFg6Kf6cjMmdupm9 m6BQpkavpV5+Fb7OuFYAGRx3los6kvxVXxPBuxQbfJ7P9+q/DWgnwCase4sAtRvaKIr2 1LrPZKykhI0ksSkSZPQtGJFg63T7gcH04gVtST+AMBJ/9eyno3SCvUOZuyKCwG+fQUss 43WA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=zQ+AyB6j0u/Ld0pjNOnQM0VpzFHVZcq1xYtx/0HNe3k=; b=nlaNFMY53uJujcy8OTnzMW0xJoK9w6c1qlwMY2WNtWlzUF32cS9Cnr3V7rDiYdaZxh wS0X3BRK5+6oxjJxRse4AeSul9KZzTTUf+oDFTZWvcweRulEJlmdy8ur22lZKguUYTPL V4bdl9w6UC4Xy5Pkdlma9OXLi/L8V7UMk+xB/HK7VBPO3YiBLk7pEshCNNRBk5RWC9hu RyFCGin9xjmIc+Bgw4p7Zrs4sK6DjJrTK9v20X5NkaOKohH48IiBgmT4M0vBL1b34yBM UK0zNKKajY8TbHaaRMgepO1u5X1cqETAU9LgIQpETLuZy21vb+6GRfYsBc1EQJy7AeLc JYEQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i69-20020a638748000000b004fbc985a0d1si4171147pge.661.2023.02.20.18.37.08; Mon, 20 Feb 2023 18:37:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232642AbjBUCgK convert rfc822-to-8bit (ORCPT + 99 others); Mon, 20 Feb 2023 21:36:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38070 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232333AbjBUCgJ (ORCPT ); Mon, 20 Feb 2023 21:36:09 -0500 Received: from ex01.ufhost.com (ex01.ufhost.com [61.152.239.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 206A4234E0 for ; Mon, 20 Feb 2023 18:35:35 -0800 (PST) Received: from EXMBX165.cuchost.com (unknown [175.102.18.54]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "EXMBX165", Issuer "EXMBX165" (not verified)) by ex01.ufhost.com (Postfix) with ESMTP id 7B48D24E1E1; Tue, 21 Feb 2023 10:35:30 +0800 (CST) Received: from EXMBX066.cuchost.com (172.16.7.66) by EXMBX165.cuchost.com (172.16.6.75) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Tue, 21 Feb 2023 10:35:30 +0800 Received: from jsia-virtual-machine.localdomain (202.188.176.82) by EXMBX066.cuchost.com (172.16.6.66) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Tue, 21 Feb 2023 10:35:27 +0800 From: Sia Jee Heng To: , , CC: , , , , Subject: [PATCH v4 0/4] RISC-V Hibernation Support Date: Tue, 21 Feb 2023 10:35:19 +0800 Message-ID: <20230221023523.1498500-1-jeeheng.sia@starfivetech.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Originating-IP: [202.188.176.82] X-ClientProxiedBy: EXCAS066.cuchost.com (172.16.6.26) To EXMBX066.cuchost.com (172.16.6.66) X-YovoleRuleAgent: yovoleflag X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758406421126156004?= X-GMAIL-MSGID: =?utf-8?q?1758406421126156004?= This series adds RISC-V Hibernation/suspend to disk support. Low level Arch functions were created to support hibernation. swsusp_arch_suspend() relies code from __cpu_suspend_enter() to write cpu state onto the stack, then calling swsusp_save() to save the memory image. Arch specific hibernation header is implemented and is utilized by the arch_hibernation_header_restore() and arch_hibernation_header_save() functions. The arch specific hibernation header consists of satp, hartid, and the cpu_resume address. The kernel built version is also need to be saved into the hibernation image header to making sure only the same kernel is restore when resume. swsusp_arch_resume() creates a temporary page table that covering only the linear map. It copies the restore code to a 'safe' page, then start to restore the memory image. Once completed, it restores the original kernel's page table. It then calls into __hibernate_cpu_resume() to restore the CPU context. Finally, it follows the normal hibernation path back to the hibernation core. To enable hibernation/suspend to disk into RISCV, the below config need to be enabled: - CONFIG_ARCH_HIBERNATION_HEADER - CONFIG_ARCH_HIBERNATION_POSSIBLE At high-level, this series includes the following changes: 1) Change suspend_save_csrs() and suspend_restore_csrs() to public function as these functions are common to suspend/hibernation. (patch 1) 2) Refactor the common code in the __cpu_resume_enter() function and __hibernate_cpu_resume() function. The common code are used by hibernation and suspend. (patch 2) 3) Enhance kernel_page_present() function to support huge page. (patch 3) 4) Add arch/riscv low level functions to support hibernation/suspend to disk. (patch 4) The above patches are based on kernel v6.2 and are tested on StarFive VF2 SBC board and Qemu. ACPI platform mode is not supported in this series. Changes since v3: - Rebased to kernel v6.2 - Temporary page table code refactoring by reference to ARM64 - Resolved typo(s) and grammars - Resolved documentation errors - Resolved clang build issue - Removed unnecessary comments - Used kzalloc instead of kcalloc Changes since v2: - Rebased to kernel v6.2-rc5 - Refactor the common code used by hibernation and suspend - Create copy_page macro - Solved other comments from Andrew and Conor Changes since v1: - Rebased to kernel v6.2-rc3 - Fixed bot's compilation error Sia Jee Heng (4): RISC-V: Change suspend_save_csrs and suspend_restore_csrs to public function RISC-V: Factor out common code of __cpu_resume_enter() RISC-V: mm: Enable huge page support to kernel_page_present() function RISC-V: Add arch functions to support hibernation/suspend-to-disk arch/riscv/Kconfig | 7 + arch/riscv/include/asm/assembler.h | 82 ++++++ arch/riscv/include/asm/suspend.h | 22 ++ arch/riscv/kernel/Makefile | 1 + arch/riscv/kernel/asm-offsets.c | 5 + arch/riscv/kernel/hibernate-asm.S | 77 +++++ arch/riscv/kernel/hibernate.c | 447 +++++++++++++++++++++++++++++ arch/riscv/kernel/suspend.c | 4 +- arch/riscv/kernel/suspend_entry.S | 34 +-- arch/riscv/mm/pageattr.c | 8 + 10 files changed, 654 insertions(+), 33 deletions(-) create mode 100644 arch/riscv/include/asm/assembler.h create mode 100644 arch/riscv/kernel/hibernate-asm.S create mode 100644 arch/riscv/kernel/hibernate.c base-commit: db77b8502a4071a59c9424d95f87fe20bdb52c3a