Message ID | 20230106060535.104321-1-jeeheng.sia@starfivetech.com (mailing list archive) |
---|---|
Headers | show |
Series | RISC-V Hibernation Support | expand |
Hey folks, Just passing on some issues that automation picked up. On 6 January 2023 06:05:32 GMT, Sia Jee Heng <jeeheng.sia@starfivetech.com> wrote: >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_hibernation_header_restore() and arch_hibernation_header_save() >functions are implemented to prevent kernel crash when resume, >the kernel built version is 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, 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) Enhance kernel_page_present() function to support huge page. (patch 2) >3) Add arch/riscv low level functions to support > hibernation/suspend to disk. (patch 3) > >The above patches are based on kernel v6.2-rc2 and are tested on >Starfive VF2 SBC board. > >Sia Jee Heng (3): > RISC-V: Change suspend_save_csrs and suspend_restore_csrs to public > function > RISC-V: mm: Enable huge page support to kernel_page_present() function Unfortunately this breaks rv32_defconfig https://patchwork.kernel.org/project/linux-riscv/patch/20230106060535.104321-3-jeeheng.sia@starfivetech.com/ > RISC-V: Add arch functions to support hibernation/suspend-to-disk This one then breaks rv64 allmodconfig too :/ https://patchwork.kernel.org/project/linux-riscv/patch/20230106060535.104321-4-jeeheng.sia@starfivetech.com/ Thanks, Conor. > > arch/riscv/Kconfig | 7 + > arch/riscv/include/asm/suspend.h | 23 ++ > arch/riscv/kernel/Makefile | 2 +- > arch/riscv/kernel/asm-offsets.c | 5 + > arch/riscv/kernel/hibernate-asm.S | 123 +++++++++++ > arch/riscv/kernel/hibernate.c | 353 ++++++++++++++++++++++++++++++ > arch/riscv/kernel/suspend.c | 4 +- > arch/riscv/mm/pageattr.c | 6 + > 8 files changed, 520 insertions(+), 3 deletions(-) > create mode 100644 arch/riscv/kernel/hibernate-asm.S > create mode 100644 arch/riscv/kernel/hibernate.c > > >base-commit: 1f5abbd77e2c1787e74b7c2caffac97def78ba52
> -----Original Message----- > From: Conor Dooley <conor@kernel.org> > Sent: Friday, 6 January, 2023 5:38 PM > To: JeeHeng Sia <jeeheng.sia@starfivetech.com>; paul.walmsley@sifive.com; > palmer@dabbelt.com; aou@eecs.berkeley.edu > Cc: linux-riscv@lists.infradead.org; linux-kernel@vger.kernel.org; JeeHeng Sia > <jeeheng.sia@starfivetech.com>; Leyfoon Tan > <leyfoon.tan@starfivetech.com>; Mason Huo > <mason.huo@starfivetech.com> > Subject: Re: [PATCH 0/3] RISC-V Hibernation Support > > Hey folks, > Just passing on some issues that automation picked up. Thanks. Will submit a new patches series to address the issues. > > > On 6 January 2023 06:05:32 GMT, Sia Jee Heng > <jeeheng.sia@starfivetech.com> wrote: > >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_hibernation_header_restore() and arch_hibernation_header_save() > >functions are implemented to prevent kernel crash when resume, > >the kernel built version is 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, 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) Enhance kernel_page_present() function to support huge page. (patch 2) > >3) Add arch/riscv low level functions to support > > hibernation/suspend to disk. (patch 3) > > > >The above patches are based on kernel v6.2-rc2 and are tested on > >Starfive VF2 SBC board. > > > >Sia Jee Heng (3): > > RISC-V: Change suspend_save_csrs and suspend_restore_csrs to public > > function > > RISC-V: mm: Enable huge page support to kernel_page_present() function > > Unfortunately this breaks rv32_defconfig > https://patchwork.kernel.org/project/linux- > riscv/patch/20230106060535.104321-3-jeeheng.sia@starfivetech.com/ > > > RISC-V: Add arch functions to support hibernation/suspend-to-disk > > This one then breaks rv64 allmodconfig too :/ > > https://patchwork.kernel.org/project/linux- > riscv/patch/20230106060535.104321-4-jeeheng.sia@starfivetech.com/ > > Thanks, > Conor. > > > > > arch/riscv/Kconfig | 7 + > > arch/riscv/include/asm/suspend.h | 23 ++ > > arch/riscv/kernel/Makefile | 2 +- > > arch/riscv/kernel/asm-offsets.c | 5 + > > arch/riscv/kernel/hibernate-asm.S | 123 +++++++++++ > > arch/riscv/kernel/hibernate.c | 353 ++++++++++++++++++++++++++++++ > > arch/riscv/kernel/suspend.c | 4 +- > > arch/riscv/mm/pageattr.c | 6 + > > 8 files changed, 520 insertions(+), 3 deletions(-) > > create mode 100644 arch/riscv/kernel/hibernate-asm.S > > create mode 100644 arch/riscv/kernel/hibernate.c > > > > > >base-commit: 1f5abbd77e2c1787e74b7c2caffac97def78ba52