Hi Mykola,

Mykola Kvach <xakep.ama...@gmail.com> writes:

> From: Mykola Kvach <mykola_kv...@epam.com>
>
> This is part 2 of version 5 of the ARM Xen system suspend/resume patch
> series, based on earlier work by Mirela Simonovic and Mykyta Poturai.
>
> The first part is here:
> https://marc.info/?l=xen-devel&m=175659181415965&w=2
>
> This version is ported to Xen master (4.21-unstable) and includes
> extensive improvements based on reviewer feedback. The patch series
> restructures code to improve robustness, maintainability, and implements
> system Suspend-to-RAM support on ARM64 hardware domains.
>
> At a high-level, this patch series provides:
>  - Support for Host system suspend/resume via PSCI SYSTEM_SUSPEND
> (ARM64)

I am wondering if you had to split this into 3 patches. Looks like patches
8 and 9 are useless without patch 10. They just add bunch of dead
code. Maybe it is better to squash them into one patch? I may be wrong
here, so maybe other reviewers/maintainers will correct me.


>  - Suspend/resume infrastructure for CPU context, timers, GICv2/GICv3 and 
> IPMMU-VMSA
>  - Proper error propagation and recovery throughout the suspend/resume flow
>
> Key updates in this series:
>  - Introduced architecture-specific suspend/resume infrastructure (new 
> `suspend.c`, `suspend.h`, low-level context save/restore in `head.S`)
>  - Integrated GICv2/GICv3 suspend and resume, including memory-backed context 
> save/restore with error handling
>  - Added time and IRQ suspend/resume hooks, ensuring correct timer/interrupt 
> state across suspend cycles
>  - Implemented proper PSCI SYSTEM_SUSPEND invocation and version checks
>  - Improved state management and recovery in error cases during suspend/resume
>  - Added support for IPMMU-VMSA context save/restore
>  - Added support for GICv3 eSPI registers context save/restore
>
> ---
> TODOs:
>  - Test system suspend with llc_coloring_enabled set and verify functionality
>  - Implement SMMUv3 suspend/resume handlers
>  - Enable "xl suspend" support on ARM
>  - Properly disable Xen timer watchdog from relevant services (only init.d 
> left)
>  - Add suspend/resume CI test for ARM (QEMU if feasible)
>  - Investigate feasibility and need for implementing system suspend on ARM32
> ---
>
> Changelog for v6:
>  - Add suspend/resume support for GICv3 eSPI registers (to be applied after 
> the
>    main eSPI series).
>  - Drop redundant iommu_enabled check from host system suspend.
>  - Switch from continue_hypercall_on_cpu to a dedicated tasklet for system
>    suspend, avoiding user register modification and decoupling guest/system
>    suspend status.
>  - Refactor IOMMU register context code.
>  - Improve IRQ handling: call handler->disable(), move system state checks, 
> and
>    skip IRQ release during suspend inside release_irq().
>  - Remove redundant GICv3 save/restore state logic now handled during vCPU
>    context switch.
>  - Clarify and unify error/warning messages, comments, and documentation.
>  - Correct loops for saving/restoring priorities and merge loops where 
> possible.
>  - Add explicit error for unimplemented ITS suspend support.
>  - Add missing GICD_CTLR_DS bit definition and clarify GICR_WAKER comments.
>  - Cleanup active and enable registers before restoring.
>  - Minor comment improvements and code cleanups.
>
> Changes introduced in V5:
>  - Add support for IPMMU-VMSA context save/restore
>  - Add support for GICv3 context save/restore
>  - Select HAS_SYSTEM_SUSPEND in ARM_64 instead of ARM
>  - Check llc_coloring_enabled instead of LLC_COLORING during the selection
>    of HAS_SYSTEM_SUSPEND config
>  - Call host_system_suspend from guest PSCI system suspend instead of
>    arch_domain_shutdown, reducing the complexity of the new code
>
> Changes introduced in V4:
>  - Remove the prior tasklet-based workaround in favor of a more
>    straightforward and safer solution.
>  - Rework the approach by adding explicit system state checks around
>    request_irq and release_irq calls; skip these calls during suspend
>    and resume states to avoid unsafe memory operations when IRQs are
>    disabled.
>  - Prevent reinitialization of local IRQ descriptors on system resume.
>  - Restore the state of local IRQs during system resume for secondary CPUs.
>  - Drop code for saving and restoring VCPU context (see part 1 of the patch
>    series for details).
>  - Remove IOMMU suspend and resume calls until these features are implemented.
>  - Move system suspend logic to arch_domain_shutdown, invoked from
>    domain_shutdown.
>  - Add console_end_sync to the resume path after system suspend.
>  - Drop unnecessary DAIF masking; interrupts are already masked on resume.
>  - Remove leftover TLB flush instructions; flushing is handled in enable_mmu.
>  - Avoid setting x19 in hyp_resume as it is not required.
>  - Replace prepare_secondary_mm with set_init_ttbr, and call it from 
> system_suspend.
>  - Produce a build-time error for ARM32 when CONFIG_SYSTEM_SUSPEND is enabled.
>  - Use register_t instead of uint64_t in the cpu_context structure.
>  - Apply minor fixes such as renaming functions, updating comments, and
>    modifying commit messages to accurately reflect the changes introduced
>    by this patch series.
>
> For earlier changelogs, please refer to the previous cover letters.
>
> Previous versions:
>   V1: https://marc.info/?l=xen-devel&m=154202231501850&w=2
>   V2: https://marc.info/?l=xen-devel&m=166514782207736&w=2
>   V3: https://lists.xen.org/archives/html/xen-devel/2025-03/msg00168.html
>
> Mirela Simonovic (6):
>   xen/arm: Add suspend and resume timer helpers
>   xen/arm: gic-v2: Implement GIC suspend/resume functions
>   xen/arm: Implement PSCI SYSTEM_SUSPEND call (host interface)
>   xen/arm: Resume memory management on Xen resume
>   xen/arm: Save/restore context on suspend/resume
>   xen/arm: Add support for system suspend triggered by hardware domain
>
> Mykola Kvach (5):
>   xen/arm: gic-v3: Implement GICv3 suspend/resume functions
>   xen/arm: Don't release IRQs on suspend
>   xen/arm: irq: avoid local IRQ descriptors reinit on system resume
>   xen/arm: irq: Restore state of local IRQs during system resume
>   xen/arm: gic-v3: Add suspend/resume support for eSPI registers
>
> Oleksandr Tyshchenko (2):
>   iommu/ipmmu-vmsa: Implement suspend/resume callbacks
>   xen/arm: Suspend/resume IOMMU on Xen suspend/resume
>
>  xen/arch/arm/Kconfig                     |   1 +
>  xen/arch/arm/Makefile                    |   1 +
>  xen/arch/arm/arm64/head.S                | 112 +++++++++
>  xen/arch/arm/gic-v2.c                    | 143 +++++++++++
>  xen/arch/arm/gic-v3-lpi.c                |   3 +
>  xen/arch/arm/gic-v3.c                    | 288 +++++++++++++++++++++++
>  xen/arch/arm/gic.c                       |  32 +++
>  xen/arch/arm/include/asm/gic.h           |  12 +
>  xen/arch/arm/include/asm/gic_v3_defs.h   |   1 +
>  xen/arch/arm/include/asm/mm.h            |   2 +
>  xen/arch/arm/include/asm/psci.h          |   1 +
>  xen/arch/arm/include/asm/suspend.h       |  46 ++++
>  xen/arch/arm/include/asm/time.h          |   5 +
>  xen/arch/arm/irq.c                       |  46 ++++
>  xen/arch/arm/mmu/smpboot.c               |   2 +-
>  xen/arch/arm/psci.c                      |  23 +-
>  xen/arch/arm/suspend.c                   | 175 ++++++++++++++
>  xen/arch/arm/tee/ffa_notif.c             |   2 +-
>  xen/arch/arm/time.c                      |  49 +++-
>  xen/arch/arm/vpsci.c                     |   9 +-
>  xen/common/domain.c                      |   4 +
>  xen/drivers/passthrough/arm/ipmmu-vmsa.c | 257 ++++++++++++++++++++
>  xen/drivers/passthrough/arm/smmu-v3.c    |  10 +
>  xen/drivers/passthrough/arm/smmu.c       |  10 +
>  24 files changed, 1220 insertions(+), 14 deletions(-)
>  create mode 100644 xen/arch/arm/include/asm/suspend.h
>  create mode 100644 xen/arch/arm/suspend.c

-- 
WBR, Volodymyr

Reply via email to