Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] arm64: hibernate: dust off the suspend/cleanup rework
@ 2026-08-25 20:58 Bradley Morgan
  2026-08-25 20:58 ` [PATCH 1/7] arm64: hibernate: pass HVC_SET_VECTORS args to the resume hvc Bradley Morgan
                   ` (7 more replies)
  0 siblings, 8 replies; 10+ messages in thread
From: Bradley Morgan @ 2026-08-25 20:58 UTC (permalink / raw)
  To: Will Deacon
  Cc: Catalin Marinas, Mark Rutland, James Morse, Marc Zyngier,
	Ard Biesheuvel, linux-arm-kernel, linux-kernel, brads

This comes out of the hibernate resume discussion where Will asked if
the restored kernel's hyp vectors are reinstalled before we come back
from swsusp_arch_suspend() and free the reserved pages. Rather than
answer with a one off fix, this series reworks resume to look like a
resume from idle, which makes the answer fall out on its own.

The series leans on Mark Rutland's old work for inspiration, he had the
same end goal in a branch from back then:

  https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/log/?h=arm64/suspend/cleanup

The short answer to the question: yes, but only because the rework makes
resume look like a resume from idle. We enter cpu_resume() at the highest
available EL with the MMU off, and the resumed kernel installs its own
hyp stub vectors into VBAR_EL2 through init_kernel_el() before anything
else runs, so by the time swsusp_free() releases the trans_pgd copies
nothing points at them anymore.

The series is structured so the first patch stands alone as a stable
worthy fix for the missing hvc arguments. The rest is the cleanup: the
stale init_kernel_el() comment gets corrected, MTE tag pages get freed
after save instead of leaking on failed hibernates, the fragile
_cpu_resume() calling convention gets split, and the last patch reworks
hibernate to use the regular cpu_resume() logic end to end.

Everything object compiles and passes checkpatch and sparse. I could not
boot or run a hibernate cycle on real hardware here, so that still wants
doing before anyone gets excited.

Bradley Morgan (7):
  arm64: hibernate: pass HVC_SET_VECTORS args to the resume hvc
  arm64: head: correct comment for init_kernel_el()
  arm64: hibernate: free MTE tag pages after saving
  arm64: hibernate: fix _cpu_resume() calling convention
  arm64: hibernate: use dcache_by_myline_op
  arm64: hibernate: only clean to PoC
  arm64: hibernate: use regular cpu_resume() logic

 arch/arm64/include/asm/suspend.h  |  1 -
 arch/arm64/kernel/head.S          |  6 +--
 arch/arm64/kernel/hibernate-asm.S | 87 +++++++++++++++++++------------
 arch/arm64/kernel/hibernate.c     | 66 +++++++++++------------
 arch/arm64/kernel/sleep.S         |  6 +--
 5 files changed, 88 insertions(+), 78 deletions(-)

-- 
2.47.3


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2026-08-28 11:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-25 20:58 [PATCH 0/7] arm64: hibernate: dust off the suspend/cleanup rework Bradley Morgan
2026-08-25 20:58 ` [PATCH 1/7] arm64: hibernate: pass HVC_SET_VECTORS args to the resume hvc Bradley Morgan
2026-08-25 20:58 ` [PATCH 2/7] arm64: head: correct comment for init_kernel_el() Bradley Morgan
2026-08-25 20:58 ` [PATCH 3/7] arm64: hibernate: free MTE tag pages after saving Bradley Morgan
2026-08-25 20:58 ` [PATCH 4/7] arm64: hibernate: fix _cpu_resume() calling convention Bradley Morgan
2026-08-25 20:58 ` [PATCH 5/7] arm64: hibernate: use dcache_by_myline_op Bradley Morgan
2026-08-25 20:58 ` [PATCH 6/7] arm64: hibernate: only clean to PoC Bradley Morgan
2026-08-25 20:58 ` [PATCH 7/7] arm64: hibernate: use regular cpu_resume() logic Bradley Morgan
2026-08-28 10:32 ` [PATCH 0/7] arm64: hibernate: dust off the suspend/cleanup rework Ard Biesheuvel
2026-08-28 11:31   ` Bradley Morgan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox