From nobody Wed Nov 19 01:54:31 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1763480413; cv=none; d=zohomail.com; s=zohoarc; b=FzcU7rBu2eCz4qGK3gHNBG5A0WxV4AhwBaKJAAZ9AQgbhsi5w6JwgG9LghiTPFVhkW18sDOm72wUtUT1FN/F0pCOZ82IM7CqwnHMrcFk8YZb9yTmpxENl+Gp7XvZqmocZ0VJ1DY6xpJzZJ2XDhyUMYen73DQWmrXOdDNfeUmSpE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763480413; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HqRM5TfHvvqePEb+D+O5+fVBIHkXyRVzinuX7cgVNQA=; b=E+vWIyee/6r5+sMQNN2XZq+qKf3oLLPZHIwvGibl+A7KR9hwX9EeY6cj5rjakEH9Iq6/RmL6bare+cROqDlvneTa0MqFA0RKJvS2kGbZ5O89UyJFxSBT+haWkOU/ry0jlU/MIE2ztEgZOltyRD72DeQbLFUIgYhGM6X1VPG97lw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1763480413469604.1558712705242; Tue, 18 Nov 2025 07:40:13 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1165056.1491885 (Exim 4.92) (envelope-from ) id 1vLNo7-0004qM-JG; Tue, 18 Nov 2025 15:39:51 +0000 Received: by outflank-mailman (output) from mailman id 1165056.1491885; Tue, 18 Nov 2025 15:39:51 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vLNo7-0004qF-FW; Tue, 18 Nov 2025 15:39:51 +0000 Received: by outflank-mailman (input) for mailman id 1165056; Tue, 18 Nov 2025 15:39:50 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vLNo6-0004pf-G7 for xen-devel@lists.xenproject.org; Tue, 18 Nov 2025 15:39:50 +0000 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [2a00:1450:4864:20::634]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d0344571-c494-11f0-980a-7dc792cee155; Tue, 18 Nov 2025 16:39:47 +0100 (CET) Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-b727f452fffso1097231666b.1 for ; Tue, 18 Nov 2025 07:39:47 -0800 (PST) Received: from EPUAKYIW02F7.. (pool185-5-253-54.as6723.net. [185.5.253.54]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b734fd80d27sm1391385266b.40.2025.11.18.07.39.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Nov 2025 07:39:45 -0800 (PST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d0344571-c494-11f0-980a-7dc792cee155 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763480387; x=1764085187; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HqRM5TfHvvqePEb+D+O5+fVBIHkXyRVzinuX7cgVNQA=; b=i23hrXfll+fbxmr5jVp5Gmg5ak4fpxuJ9jyu058vUuYjKJno6ammc2exEXYGTxlTMp gsUDDrj3oP9i1sZZfeCATBWJejlHBU9cj2Q6FTm+IWcqhLt3uUsMFdpxzxFT7tyO1ZeL t0euUV8aok79CNkeTP7/jBmUG+e5owbGzWPHfFOG7b/nBzGataTBfVQ3lJcPMBUcb7DG kr6m+ALmqGMekLbHavMJCK9KQ1woi2ZbT4sAnnvMp2X6mLJM28dZ+J9ZXsVV7oVx4T0k AHlU1qmfjJG2dShU5WpVg/Ds1CB+7i2tffq/kTpVBTxbAr9B2jNMn14K2hyTu4APdn08 LvQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763480387; x=1764085187; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=HqRM5TfHvvqePEb+D+O5+fVBIHkXyRVzinuX7cgVNQA=; b=gEQ+jY48nMRgiuoyJXyQGCJN1FFBzvZuLAcyj6VUQmCpNCaN6vv4ajycp2AqEMShg5 M1doO447jaSayvxq3hNnylFO4feApeAZH+RKfuCXeAeNnCvFKAMcYm+F3FVTGbQ5CnPN Hd8F4HZLwIqehRjqkyRHB38MFdTHEx53BXjb7cuDT2y8DWWDc35tZuVQEazjNoz8DfOs 11VV08qPWzlAtqIWGLp8qFImnwZLq3OdrfXc1tWyz5TgjBoYEyiVUulXgQoDZ6XPZsI0 1VNSXWJ8Lm3uh7aA1AVM7bC7SKvwvSO9qt6/YQ8tTVLvUSCVcQXAWqpD+vMGEv0ZdFHM GygA== X-Gm-Message-State: AOJu0YyC9om3ZwbWRC2xkPyGynf+0Xb8SjHZdYJQN7ro+BvL21klaF1Y HA4o0IPadO+Sa/JNhh6tpSAJV8z5T9ifpBo0P6hGqM+wNM0/k8TYBARqZluoZZ7bPPg= X-Gm-Gg: ASbGncs3l3Jh4/q+nO5a792BhpqWPXFTto7iw65XJEennJwgi+jVqlcS3Vq3J4jZp51 kQ3oMJF2z6oYZOr+9NlY2rUV4W6QhibPbozDySm2hh9ocnymHwMdQPQ0gQ/N++fV6D94l8ZfJLY g+Y3QKQHDtrmXlBQJW1VN6THYHEOrpVrli5lJhmAbX7GNJT9Jb+GoUD7spFZTlZDFjTqDoCQbcO YI20kruYX/SMj4A8pjkH7Z7TVW0a2wUQT+pHePv6i8k5skleH6DzoV9bPriQUZ4sB6HcT6txPUp DjjUkKbgeQqsD1WGWYFqqqR07BUvks7I5rKeQfWWWhKm0ebOpU2gMU2N2dLfb3ukdES0RMonYRG 4FFW7o9apPGITJj21GsvLcLXq1IhnaUx13lLqdmh0Ez7kiJDuRgFY/DmGZA0FaOmiIkMAsr1uir Zfz6kZmbkyo6rT7fh0XLp1s/sXceECIyK/b/DC5+auMmI= X-Google-Smtp-Source: AGHT+IEXF6JBmsC/ldlQ8X1jSWRbybTeO9zAY1ZsvRhhiAoI/qEINaqJ+7ttI3DgYIz0k9jQ7byPkg== X-Received: by 2002:a17:907:2da9:b0:afe:159:14b1 with SMTP id a640c23a62f3a-b758bb5461cmr420613866b.9.1763480386414; Tue, 18 Nov 2025 07:39:46 -0800 (PST) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Andrew Cooper , Anthony PERARD , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v14 1/4] xen/arm: Implement PSCI SYSTEM_SUSPEND call for guests Date: Tue, 18 Nov 2025 17:37:28 +0200 Message-ID: <3786204d034ae4461aa0fde77771b8e14256314a.1763479083.git.xakep.amatop@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1763480414785153000 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach Add support for the PSCI SYSTEM_SUSPEND function in the vPSCI interface, allowing guests to request suspend via the PSCI v1.0+ SYSTEM_SUSPEND call (both 32-bit and 64-bit variants). Implementation details: - Add SYSTEM_SUSPEND function IDs to PSCI definitions - Trap and handle SYSTEM_SUSPEND in vPSCI - Allow only non-hardware domains to invoke SYSTEM_SUSPEND; return PSCI_NOT_SUPPORTED for the hardware domain to avoid halting the system in hwdom_shutdown() via domain_shutdown - Require all secondary VCPUs of the calling domain to be offline before suspend, as mandated by the PSCI specification The arch_domain_resume() function is an architecture-specific hook that is invoked during domain resume to perform any necessary setup or restoration steps required by the platform. The new vpsci_vcpu_up_prepare() helper is called on the resume path to set = up the vCPU context (such as entry point, some system regs and context ID) bef= ore resuming a suspended guest. This keeps ARM/vPSCI-specific logic out of comm= on code and avoids intrusive changes to the generic resume flow. Usage: For Linux-based guests, suspend can be initiated with: echo mem > /sys/power/state or via: systemctl suspend Resuming the guest is performed from control domain using: xl resume Signed-off-by: Mykola Kvach --- Changes in V14: - move arch_domain_resume to a separate header - avoid usage of typeof for context struct - moved error printing from domain_resume to arch_domain_resume in order to simplify common parts of code - minor changes after review --- xen/arch/arm/domain.c | 41 +++++++++ xen/arch/arm/include/asm/domain.h | 2 + xen/arch/arm/include/asm/perfc_defn.h | 1 + xen/arch/arm/include/asm/psci.h | 2 + xen/arch/arm/include/asm/suspend.h | 24 ++++++ xen/arch/arm/include/asm/vpsci.h | 5 +- xen/arch/arm/vpsci.c | 116 +++++++++++++++++++++----- xen/common/domain.c | 5 ++ xen/include/xen/suspend.h | 15 ++++ 9 files changed, 189 insertions(+), 22 deletions(-) create mode 100644 xen/arch/arm/include/asm/suspend.h create mode 100644 xen/include/xen/suspend.h diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index e36719bce4..3c0170480b 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -12,6 +12,8 @@ #include #include =20 +#include + #include #include #include @@ -24,10 +26,12 @@ #include #include #include +#include #include #include #include #include +#include #include =20 #include "vpci.h" @@ -885,6 +889,43 @@ void arch_domain_creation_finished(struct domain *d) p2m_domain_creation_finished(d); } =20 +int arch_domain_resume(struct domain *d) +{ + int rc; + struct resume_info *ctx =3D &d->arch.resume_ctx; + + if ( !d->is_shutting_down || d->shutdown_code !=3D SHUTDOWN_suspend ) + { + dprintk(XENLOG_WARNING, + "%pd: Invalid domain state for resume: is_shutting_down=3D= %d, shutdown_code=3D%d\n", + d, d->is_shutting_down, d->shutdown_code); + return -EINVAL; + } + + /* + * It is still possible to call domain_shutdown() with a suspend reason + * via some hypercalls, such as SCHEDOP_shutdown or SCHEDOP_remote_shu= tdown. + * In these cases, the resume context will be empty. + * This is not expected to cause any issues, so we just warn about the + * situation and return without error, allowing the existing logic to + * proceed as expected. + */ + if ( !ctx->wake_cpu ) + { + dprintk(XENLOG_INFO, "%pd: Wake CPU pointer context was not provid= ed\n", + d); + return 0; + } + + rc =3D vpsci_vcpu_up_prepare(ctx->wake_cpu , ctx->ep, ctx->cid); + if ( rc ) + printk("%pd: Failed to resume domain (ret %d)\n", d, rc); + + memset(ctx, 0, sizeof(*ctx)); + + return rc; +} + static int is_guest_pv32_psr(uint32_t psr) { switch (psr & PSR_MODE_MASK) diff --git a/xen/arch/arm/include/asm/domain.h b/xen/arch/arm/include/asm/d= omain.h index af3e168374..e637cb4de0 100644 --- a/xen/arch/arm/include/asm/domain.h +++ b/xen/arch/arm/include/asm/domain.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -126,6 +127,7 @@ struct arch_domain void *sci_data; #endif =20 + struct resume_info resume_ctx; } __cacheline_aligned; =20 struct arch_vcpu diff --git a/xen/arch/arm/include/asm/perfc_defn.h b/xen/arch/arm/include/a= sm/perfc_defn.h index effd25b69e..8dfcac7e3b 100644 --- a/xen/arch/arm/include/asm/perfc_defn.h +++ b/xen/arch/arm/include/asm/perfc_defn.h @@ -33,6 +33,7 @@ PERFCOUNTER(vpsci_system_reset, "vpsci: system_res= et") PERFCOUNTER(vpsci_cpu_suspend, "vpsci: cpu_suspend") PERFCOUNTER(vpsci_cpu_affinity_info, "vpsci: cpu_affinity_info") PERFCOUNTER(vpsci_features, "vpsci: features") +PERFCOUNTER(vpsci_system_suspend, "vpsci: system_suspend") =20 PERFCOUNTER(vcpu_kick, "vcpu: notify other vcpu") =20 diff --git a/xen/arch/arm/include/asm/psci.h b/xen/arch/arm/include/asm/psc= i.h index 4780972621..48a93e6b79 100644 --- a/xen/arch/arm/include/asm/psci.h +++ b/xen/arch/arm/include/asm/psci.h @@ -47,10 +47,12 @@ void call_psci_system_reset(void); #define PSCI_0_2_FN32_SYSTEM_OFF PSCI_0_2_FN32(8) #define PSCI_0_2_FN32_SYSTEM_RESET PSCI_0_2_FN32(9) #define PSCI_1_0_FN32_PSCI_FEATURES PSCI_0_2_FN32(10) +#define PSCI_1_0_FN32_SYSTEM_SUSPEND PSCI_0_2_FN32(14) =20 #define PSCI_0_2_FN64_CPU_SUSPEND PSCI_0_2_FN64(1) #define PSCI_0_2_FN64_CPU_ON PSCI_0_2_FN64(3) #define PSCI_0_2_FN64_AFFINITY_INFO PSCI_0_2_FN64(4) +#define PSCI_1_0_FN64_SYSTEM_SUSPEND PSCI_0_2_FN64(14) =20 /* PSCI v0.2 affinity level state returned by AFFINITY_INFO */ #define PSCI_0_2_AFFINITY_LEVEL_ON 0 diff --git a/xen/arch/arm/include/asm/suspend.h b/xen/arch/arm/include/asm/= suspend.h new file mode 100644 index 0000000000..b991a94d5a --- /dev/null +++ b/xen/arch/arm/include/asm/suspend.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __ARM_SUSPEND_H__ +#define __ARM_SUSPEND_H__ + +struct resume_info { + register_t ep; + register_t cid; + struct vcpu *wake_cpu; +}; + +int arch_domain_resume(struct domain *d); + +#endif /* __ARM_SUSPEND_H__ */ + + /* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/arch/arm/include/asm/vpsci.h b/xen/arch/arm/include/asm/vp= sci.h index 0cca5e6830..d790ab3715 100644 --- a/xen/arch/arm/include/asm/vpsci.h +++ b/xen/arch/arm/include/asm/vpsci.h @@ -23,12 +23,15 @@ #include =20 /* Number of function implemented by virtual PSCI (only 0.2 or later) */ -#define VPSCI_NR_FUNCS 12 +#define VPSCI_NR_FUNCS 14 =20 /* Functions handle PSCI calls from the guests */ bool do_vpsci_0_1_call(struct cpu_user_regs *regs, uint32_t fid); bool do_vpsci_0_2_call(struct cpu_user_regs *regs, uint32_t fid); =20 +int vpsci_vcpu_up_prepare(struct vcpu *v, register_t entry_point, + register_t context_id); + #endif /* __ASM_VPSCI_H__ */ =20 /* diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c index 7ba9ccd94b..22c3a5f544 100644 --- a/xen/arch/arm/vpsci.c +++ b/xen/arch/arm/vpsci.c @@ -10,32 +10,16 @@ =20 #include =20 -static int do_common_cpu_on(register_t target_cpu, register_t entry_point, - register_t context_id) +int vpsci_vcpu_up_prepare(struct vcpu *v, register_t entry_point, + register_t context_id) { - struct vcpu *v; - struct domain *d =3D current->domain; - struct vcpu_guest_context *ctxt; int rc; + struct domain *d =3D v->domain; bool is_thumb =3D entry_point & 1; - register_t vcpuid; - - vcpuid =3D vaffinity_to_vcpuid(target_cpu); - - if ( (v =3D domain_vcpu(d, vcpuid)) =3D=3D NULL ) - return PSCI_INVALID_PARAMETERS; - - /* THUMB set is not allowed with 64-bit domain */ - if ( is_64bit_domain(d) && is_thumb ) - return PSCI_INVALID_ADDRESS; - - if ( !test_bit(_VPF_down, &v->pause_flags) ) - return PSCI_ALREADY_ON; + struct vcpu_guest_context *ctxt; =20 if ( (ctxt =3D alloc_vcpu_guest_context()) =3D=3D NULL ) - return PSCI_DENIED; - - vgic_clear_pending_irqs(v); + return -ENOMEM; =20 memset(ctxt, 0, sizeof(*ctxt)); ctxt->user_regs.pc64 =3D (u64) entry_point; @@ -76,8 +60,37 @@ static int do_common_cpu_on(register_t target_cpu, regis= ter_t entry_point, free_vcpu_guest_context(ctxt); =20 if ( rc < 0 ) + return rc; + + return 0; +} + +static int do_common_cpu_on(register_t target_cpu, register_t entry_point, + register_t context_id) +{ + struct vcpu *v; + struct domain *d =3D current->domain; + int rc; + bool is_thumb =3D entry_point & 1; + register_t vcpuid; + + vcpuid =3D vaffinity_to_vcpuid(target_cpu); + + if ( (v =3D domain_vcpu(d, vcpuid)) =3D=3D NULL ) + return PSCI_INVALID_PARAMETERS; + + /* THUMB set is not allowed with 64-bit domain */ + if ( is_64bit_domain(d) && is_thumb ) + return PSCI_INVALID_ADDRESS; + + if ( !test_bit(_VPF_down, &v->pause_flags) ) + return PSCI_ALREADY_ON; + + rc =3D vpsci_vcpu_up_prepare(v, entry_point, context_id); + if ( rc ) return PSCI_DENIED; =20 + vgic_clear_pending_irqs(v); vcpu_wake(v); =20 return PSCI_SUCCESS; @@ -197,6 +210,48 @@ static void do_psci_0_2_system_reset(void) domain_shutdown(d,SHUTDOWN_reboot); } =20 +static int32_t do_psci_1_0_system_suspend(register_t epoint, register_t ci= d) +{ + int32_t rc; + struct vcpu *v; + struct domain *d =3D current->domain; + bool is_thumb =3D epoint & 1; + + /* THUMB set is not allowed with 64-bit domain */ + if ( is_64bit_domain(d) && is_thumb ) + return PSCI_INVALID_ADDRESS; + + /* SYSTEM_SUSPEND is not supported for the hardware domain yet */ + if ( is_hardware_domain(d) ) + return PSCI_NOT_SUPPORTED; + + /* Ensure that all CPUs other than the calling one are offline */ + domain_lock(d); + for_each_vcpu ( d, v ) + { + if ( v !=3D current && is_vcpu_online(v) ) + { + domain_unlock(d); + return PSCI_DENIED; + } + } + domain_unlock(d); + + rc =3D domain_shutdown(d, SHUTDOWN_suspend); + if ( rc ) + return PSCI_DENIED; + + d->arch.resume_ctx.ep =3D epoint; + d->arch.resume_ctx.cid =3D cid; + d->arch.resume_ctx.wake_cpu =3D current; + + gprintk(XENLOG_DEBUG, + "SYSTEM_SUSPEND requested, epoint=3D0x%"PRIregister", cid=3D0x= %"PRIregister"\n", + epoint, cid); + + return rc; +} + static int32_t do_psci_1_0_features(uint32_t psci_func_id) { /* /!\ Ordered by function ID and not name */ @@ -214,6 +269,8 @@ static int32_t do_psci_1_0_features(uint32_t psci_func_= id) case PSCI_0_2_FN32_SYSTEM_OFF: case PSCI_0_2_FN32_SYSTEM_RESET: case PSCI_1_0_FN32_PSCI_FEATURES: + case PSCI_1_0_FN32_SYSTEM_SUSPEND: + case PSCI_1_0_FN64_SYSTEM_SUSPEND: case ARM_SMCCC_VERSION_FID: return 0; default: @@ -344,6 +401,23 @@ bool do_vpsci_0_2_call(struct cpu_user_regs *regs, uin= t32_t fid) return true; } =20 + case PSCI_1_0_FN32_SYSTEM_SUSPEND: + case PSCI_1_0_FN64_SYSTEM_SUSPEND: + { + register_t epoint =3D PSCI_ARG(regs, 1); + register_t cid =3D PSCI_ARG(regs, 2); + + if ( fid =3D=3D PSCI_1_0_FN32_SYSTEM_SUSPEND ) + { + epoint &=3D GENMASK(31, 0); + cid &=3D GENMASK(31, 0); + } + + perfc_incr(vpsci_system_suspend); + PSCI_SET_RESULT(regs, do_psci_1_0_system_suspend(epoint, cid)); + return true; + } + default: return false; } diff --git a/xen/common/domain.c b/xen/common/domain.c index 775c339285..6410d32970 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -1363,6 +1364,9 @@ void domain_resume(struct domain *d) =20 spin_lock(&d->shutdown_lock); =20 + if ( arch_domain_resume(d) ) + goto fail; + d->is_shutting_down =3D d->is_shut_down =3D 0; d->shutdown_code =3D SHUTDOWN_CODE_INVALID; =20 @@ -1373,6 +1377,7 @@ void domain_resume(struct domain *d) v->paused_for_shutdown =3D 0; } =20 + fail: spin_unlock(&d->shutdown_lock); =20 domain_unpause(d); diff --git a/xen/include/xen/suspend.h b/xen/include/xen/suspend.h new file mode 100644 index 0000000000..53f75fd6ad --- /dev/null +++ b/xen/include/xen/suspend.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __XEN_SUSPEND_H__ +#define __XEN_SUSPEND_H__ + +#if __has_include() +#include +#else +static inline int arch_domain_resume(struct domain *d) +{ + return 0; +} +#endif + + +#endif /* __XEN_SUSPEND_H__ */ --=20 2.43.0 From nobody Wed Nov 19 01:54:31 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1763480412; cv=none; d=zohomail.com; s=zohoarc; b=C7R/TJDGLa/ZdxNz2wJ/cwxI31/3VTgkcLW9jFa02edH/Pz7C6BKZpN2kjDwgz+tW9+0kMAYE08ihCq3oInsVnUxpSaewzg46cVQ5yxFgTOnmtZhfcL5BbHhsh+vyk6h1ZMBu6GVSBpLwhhhzNm8q4rEKv9+6D4vV+kfcKJpvAI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763480412; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WtJsp+Y7Ad5QPg8ye5d7pLJWb0PeKCJcdGH4glFeQow=; b=ayy/1mnv+dHgkl1tZR9XYVq1/5LtEEF5b0UQJF5mOFLOKAnuCyxFlkSxoFFy5m6LTk0/LB8/+uUjuTnKMLqxfP9sh5Nw8MyvU+ByvubcrYK4CTn+m4IxFtwFvxZcnZOOC0/KYOpNsWExS2mWvcbe1VBq86PTCFxbInX9s2tm6ZI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1763480412971992.1836181420471; Tue, 18 Nov 2025 07:40:12 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1165057.1491889 (Exim 4.92) (envelope-from ) id 1vLNo7-0004sy-RR; Tue, 18 Nov 2025 15:39:51 +0000 Received: by outflank-mailman (output) from mailman id 1165057.1491889; Tue, 18 Nov 2025 15:39:51 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vLNo7-0004sR-N2; Tue, 18 Nov 2025 15:39:51 +0000 Received: by outflank-mailman (input) for mailman id 1165057; Tue, 18 Nov 2025 15:39:51 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vLNo7-0004pf-5y for xen-devel@lists.xenproject.org; Tue, 18 Nov 2025 15:39:51 +0000 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [2a00:1450:4864:20::62a]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d0f0c1a9-c494-11f0-980a-7dc792cee155; Tue, 18 Nov 2025 16:39:48 +0100 (CET) Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b737cd03d46so474861266b.0 for ; Tue, 18 Nov 2025 07:39:48 -0800 (PST) Received: from EPUAKYIW02F7.. (pool185-5-253-54.as6723.net. [185.5.253.54]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b734fd80d27sm1391385266b.40.2025.11.18.07.39.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Nov 2025 07:39:47 -0800 (PST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d0f0c1a9-c494-11f0-980a-7dc792cee155 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763480388; x=1764085188; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WtJsp+Y7Ad5QPg8ye5d7pLJWb0PeKCJcdGH4glFeQow=; b=MrlxMqFr13zKyf25Us093sbrZ3A0US66KoR0Ga8XCFAFz2X3zivbM2wuoDV9eU6cz5 BhfxrZbIxny8as+RF7U+jOYK8t+vI7TsMwoTtH+MBkz94UiXfjQdImtwRfWeMC5VbFbt ouTQzvbOGHaj3dK6c29fYTx/Vsb3tsxnOVo/mzw6JMOEmzAglUZsnk30jD37C/dRiLDD x+itJz+/DMXLCe0LLmeIlgsN0ZAZSaDBi0HeKJObUrNNq4MiGx5idcnVmJjeIii0ePUd MApIEEEYMRMNyPeEwY6y4RVSo8VmEKIC74UAj1h76ICe5guDxPJgSCKV7IkOQmUkSK8u hWbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763480388; x=1764085188; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WtJsp+Y7Ad5QPg8ye5d7pLJWb0PeKCJcdGH4glFeQow=; b=nNB0WKrvYokoekFsga5Y9pV4KTa9PCRCEtkPDe+k7OUpMfuwVb+wV/nbAqViSC3Rfe PQIg3eoDCq6Pk7mQ7Wk9GIuhpoCykAr/Iw5CS5K/ULJ2ihBxZ8Kc5859Y1HB6zW2DVPM YzRGvKzxTICZFiGlxd8gBi6lydu7SzKi/dW6bIv3O0oOj9Vsg+Qw3ZxXBRK1KUar3pTY wnmfYG1ErNXo8PXziwYY7lwepVt9SiX9/y32uNVWPqmjbZQlsf7n1w3A6KpZhrSzOx/u u9fj3MvmRn6rovAGaabGv0pcNL+/n3PrR+Ve2CyNcJmwDFmpObsX/6iBPTiRSKPiqmL9 AAJQ== X-Gm-Message-State: AOJu0Yzuhx9Fcj4kaAUOPc5lzrhi/zCXX9DytLChZGpJ12WEn3uzt3Hr ljbICLKwRxNPGSJbjeL+b2Qe9Ed99NXSxHOW7ZXRaidclZTEsY1VsjUx69U7X+Y3kHI= X-Gm-Gg: ASbGncsHkNt5MCDrqcVI2TvPqxRNEO2HoBlMQNP+R+pWklD6eh0fqj2cTth6mgYPDQS wmc6Dulym75KMiW7aWeQqQeC/f/LxM+3f7dVXA8AU+EUheMRWBQ+IeHrULfGeo7ganeeufmFZ/u kRjFh9NZkiRGs5Htk+fXfQtsMv/vIlUJTW+xPtoGE2KVfieAxxjHZ+94KWQxoajpEObkerRwaeX 9VfbhgUIIUTEB+pgxJfQ03xo6dRzSkmt081yurOlrwvLXvqKzPibVDC314WGjR8OzhMo/9IddW+ EHWqSbqUCL7P+3IflVuuXnBn7iw1YikHjt6PBuWGhHF7nkB01Uxro8ul+/F0x3esDrNzcmerXBK vk9bf/MwFrLpMUESrB+B5J3vrhbAEO6APm/y68hVIM/pVlgJha0gP3FZu6gjF+OBzcE9jXmlm0+ 4iEd+0S6QOAORI7sFGTB0M8NGgVOKaIgTr99Yciif2o78= X-Google-Smtp-Source: AGHT+IHN7q6Juj4WaqvIxtRIkp31ytolu4qwoxqjU7orr59NszcHd7IzkMLpwOP27ZHwRVXKLZuiLQ== X-Received: by 2002:a17:907:3fa0:b0:b70:b13c:3634 with SMTP id a640c23a62f3a-b73678dd5c0mr1785833666b.25.1763480388000; Tue, 18 Nov 2025 07:39:48 -0800 (PST) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Anthony PERARD , Juergen Gross Subject: [PATCH v14 2/4] tools/xl: Allow compilation of 'xl resume' command on Arm Date: Tue, 18 Nov 2025 17:37:29 +0200 Message-ID: <78e37e1b1d2ea50568a372d8950f4fc9e86567eb.1763479083.git.xakep.amatop@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1763480414876158500 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach The "xl resume" command was previously excluded from Arm builds because system suspend/resume (e.g., SYSTEM_SUSPEND via vPSCI) was not implemented. On x86, this command is used for resume. This change enables compilation of `xl resume` on Arm regardless of the underlying implementation status, making the tool available for testing and future feature support. The relevant libxl infrastructure and handler functions are already present and usable. Note: This does not imply full system suspend/resume support on Arm. The `xl suspend` command still does not work on Arm platforms. Signed-off-by: Mykola Kvach Acked-by: Anthony PERARD --- Changes in v14: - no chnages --- tools/include/libxl.h | 1 - tools/xl/xl.h | 4 ++-- tools/xl/xl_cmdtable.c | 4 ++-- tools/xl/xl_migrate.c | 2 +- tools/xl/xl_saverestore.c | 2 +- tools/xl/xl_vmcontrol.c | 12 ++++++------ 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/include/libxl.h b/tools/include/libxl.h index bc35e412da..14b9e4a859 100644 --- a/tools/include/libxl.h +++ b/tools/include/libxl.h @@ -1145,7 +1145,6 @@ typedef struct libxl__ctx libxl_ctx; * restoring or migrating a domain. In this case the related functions * should be expected to return failure. That is: * - libxl_domain_suspend - * - libxl_domain_resume * - libxl_domain_remus_start */ #if defined(__arm__) || defined(__aarch64__) diff --git a/tools/xl/xl.h b/tools/xl/xl.h index 9000df00de..63db30a6eb 100644 --- a/tools/xl/xl.h +++ b/tools/xl/xl.h @@ -65,7 +65,7 @@ static const char migrate_permission_to_go[]=3D "domain is yours, you are cleared to unpause"; static const char migrate_report[]=3D "my copy unpause results are as follows"; -#endif +#endif /* !LIBXL_HAVE_NO_SUSPEND_RESUME */ =20 /* followed by one byte: * 0: everything went well, domain is running @@ -130,8 +130,8 @@ int main_migrate_receive(int argc, char **argv); int main_save(int argc, char **argv); int main_migrate(int argc, char **argv); int main_suspend(int argc, char **argv); +#endif /* !LIBXL_HAVE_NO_SUSPEND_RESUME */ int main_resume(int argc, char **argv); -#endif int main_dump_core(int argc, char **argv); int main_pause(int argc, char **argv); int main_unpause(int argc, char **argv); diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c index 06a0039718..bcb2d233cc 100644 --- a/tools/xl/xl_cmdtable.c +++ b/tools/xl/xl_cmdtable.c @@ -198,12 +198,12 @@ const struct cmd_spec cmd_table[] =3D { "Suspend a domain to RAM", "", }, +#endif /* !LIBXL_HAVE_NO_SUSPEND_RESUME */ { "resume", &main_resume, 0, 1, "Resume a domain from RAM", "", }, -#endif { "dump-core", &main_dump_core, 0, 1, "Core dump a domain", @@ -548,7 +548,7 @@ const struct cmd_spec cmd_table[] =3D { " checkpoint must be disabled.\n" "-p Use COLO userspace proxy." }, -#endif +#endif /* !LIBXL_HAVE_NO_SUSPEND_RESUME */ { "devd", &main_devd, 0, 1, "Daemon that listens for devices and launches backends", diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c index b8594f44a5..4b4a379aa1 100644 --- a/tools/xl/xl_migrate.c +++ b/tools/xl/xl_migrate.c @@ -767,7 +767,7 @@ int main_remus(int argc, char **argv) close(send_fd); return EXIT_FAILURE; } -#endif +#endif /* !LIBXL_HAVE_NO_SUSPEND_RESUME */ =20 =20 /* diff --git a/tools/xl/xl_saverestore.c b/tools/xl/xl_saverestore.c index 953d791d1a..747094ec7b 100644 --- a/tools/xl/xl_saverestore.c +++ b/tools/xl/xl_saverestore.c @@ -270,7 +270,7 @@ int main_save(int argc, char **argv) return EXIT_SUCCESS; } =20 -#endif /* LIBXL_HAVE_NO_SUSPEND_RESUME */ +#endif /* !LIBXL_HAVE_NO_SUSPEND_RESUME */ =20 =20 =20 diff --git a/tools/xl/xl_vmcontrol.c b/tools/xl/xl_vmcontrol.c index c813732838..93766f631b 100644 --- a/tools/xl/xl_vmcontrol.c +++ b/tools/xl/xl_vmcontrol.c @@ -38,11 +38,6 @@ static void suspend_domain(uint32_t domid) libxl_domain_suspend_only(ctx, domid, NULL); } =20 -static void resume_domain(uint32_t domid) -{ - libxl_domain_resume(ctx, domid, 1, NULL); -} - int main_suspend(int argc, char **argv) { int opt; @@ -55,6 +50,12 @@ int main_suspend(int argc, char **argv) =20 return EXIT_SUCCESS; } +#endif /* !LIBXL_HAVE_NO_SUSPEND_RESUME */ + +static void resume_domain(uint32_t domid) +{ + libxl_domain_resume(ctx, domid, 1, NULL); +} =20 int main_resume(int argc, char **argv) { @@ -68,7 +69,6 @@ int main_resume(int argc, char **argv) =20 return EXIT_SUCCESS; } -#endif =20 static void pause_domain(uint32_t domid) { --=20 2.43.0 From nobody Wed Nov 19 01:54:31 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1763480409; cv=none; d=zohomail.com; s=zohoarc; b=VOzUZhv5K1LUVQLBxpdXfdqJ11rrPnQlfbzP3NaubIvo4Cg95qMaoGHvUShkHKCxYswZ+IK8pY1L6b2LtgUc/czN3I1saKnqDs2t8ngEvbpeUuc3V06Zp2HhSmI96uihEuxZYxhaiNh8GB/soTxwNOZ8WSqU/u8qcsDln2M8EZM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763480409; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+IE/6U2/jxx06UiTUo+lX1PbDac7ac5Ki4u3TKrSREY=; b=js0cxrpeNyMmTiUrjAXRETHwPvODAhIIDJN++pDja7VfInKO4FzM0zPHMqpFm1aOZZ/UHMNvHIJl+NswJlTd6uK6Hk7As5KDbFpzOkB66fwzVcGdHCo7v9yhWNsQzVMJVmGnCwNVP3WeB5hIuSlmGLH23zmZcujEJ+MIow1Eb2M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 176348040915988.49597663964778; Tue, 18 Nov 2025 07:40:09 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1165058.1491905 (Exim 4.92) (envelope-from ) id 1vLNo9-0005Hu-4B; Tue, 18 Nov 2025 15:39:53 +0000 Received: by outflank-mailman (output) from mailman id 1165058.1491905; Tue, 18 Nov 2025 15:39:53 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vLNo8-0005H8-VG; Tue, 18 Nov 2025 15:39:52 +0000 Received: by outflank-mailman (input) for mailman id 1165058; Tue, 18 Nov 2025 15:39:52 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vLNo8-0004pf-7K for xen-devel@lists.xenproject.org; Tue, 18 Nov 2025 15:39:52 +0000 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [2a00:1450:4864:20::52d]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d1fbea06-c494-11f0-980a-7dc792cee155; Tue, 18 Nov 2025 16:39:50 +0100 (CET) Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-644f90587e5so2210502a12.0 for ; Tue, 18 Nov 2025 07:39:50 -0800 (PST) Received: from EPUAKYIW02F7.. (pool185-5-253-54.as6723.net. [185.5.253.54]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b734fd80d27sm1391385266b.40.2025.11.18.07.39.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Nov 2025 07:39:49 -0800 (PST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d1fbea06-c494-11f0-980a-7dc792cee155 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763480390; x=1764085190; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+IE/6U2/jxx06UiTUo+lX1PbDac7ac5Ki4u3TKrSREY=; b=ae5z4BfSyT1L7yg6+zC2NbkvzxbnuhyPg2NEfeTy4cPv9XOF8HfUbnskMJhujoWobI T7ZCi3Lz+uxW8a8A1e1gALMflkNk94TinDMkQgiBybUZf86d67oOc2EywKJ2xMf7ylE2 fRARnOomheo524Rj55F/jDb8cu6nBSwlNrP0JeVPte0190FX/lh28t510p7sMxLp42/d /Qj9xh4fPOElwaRg08KiPEM1YkXrVZvmP+V00zn0DQB4K6lrdRMW0FLgdIVYlSm7H493 lxM39GO7QbWE5wBue8DkkV1V6U/4mowMGXAhH/Wrv2XT0a8R+vHKiRnqyXnwtFlomCic spoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763480390; x=1764085190; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+IE/6U2/jxx06UiTUo+lX1PbDac7ac5Ki4u3TKrSREY=; b=SjqHuuDraT9xm7tc0S46pmB9smjxzOFujicPkljOZkS9CReC3fzXQX4JG5iUZTeYeI xh6wSfI1b71zjS+FI0QpGQSyCL4InSq3moaes7e3JK3/33vfnDUb3HK6QZQdaZHZdmzI JjtZxYGjc2kGYcA+EJ/K4WTXrMFzsC9p5zpvZGW+BH+WkKtIU0zL04oLfmKhNRYhcABh dTTvo0K0nP3leJSbBx6aaY/+cOPPZiOtqONLrhtj6yH82Z6cATnAc3FfNQzB8DTndfzX 0e1uWS5fOIdu4BJevZzs6efN4HlJp92XrKmAHSYinQC5RbbmWJ+e9ww0/jwmTucBCjNM V57Q== X-Gm-Message-State: AOJu0Yw3uQ5Hc8IxciCSLtaXSyiU1hJQdBHGtEcSMjmuIVONotcbCvvk 4HNB/x/kuQ776URgwVRekMdUCIrfaJNyT7hXmyxg3IQ6XxSwo/+I5W9hQvU+OSsss5g= X-Gm-Gg: ASbGncvEiCzeOt3q3x7cMxsLEpIp+WquGJLtMKdc5B8gO728rs+qXCZ6K92rLXI7IvQ 6AwW2U7Us0iF7ZArBCAoo/ppSPWssIxEjl6NqodmiUNYW+iQ1cklYChPWjWabzSuIJ/Fu7LwvBy 8HgVgWjbvMu6NbZtNTHIcJaB70GIU38svM01rznb4mnVLqDD+luWpM1Iw0bdwBoxyWSoJFzQhRV ONc78Ivh943UQvZOs3zaA3EeZxiKhbifnGhj7noghBBFX1UPl/9FNPY2Epl2RAcf8XTch04j6S+ WrH0HJDY3WRIuPKJCfuPSSudXkRCuVqmsX5ohIOOXzflChxnLZkxXhJnY/bxrMTrElp/lZzrs/G WKapJprI6+5WMae0pz+b2t7pRL6V6qhAKvSUd9GkzNmV6TtmC4Ln7gfuUY7QOLra4l7kU/bTUnS IYP20u0mp0nqg4gSmyH0ZQ7bHlmGupAhzK6EokACoODeA= X-Google-Smtp-Source: AGHT+IGspqpLQVqJEfAtmfmsTcS7G26/37S4TaDKtxuqTB51rg7iKd6MO9sAN/Y4UCS40Wfj9i9PUg== X-Received: by 2002:a17:907:1c01:b0:b0e:d477:4972 with SMTP id a640c23a62f3a-b736780c3b1mr1466748066b.25.1763480389685; Tue, 18 Nov 2025 07:39:49 -0800 (PST) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini , Julien Grall Subject: [PATCH v14 3/4] SUPPORT.md: Document PSCI SYSTEM_SUSPEND support for guests Date: Tue, 18 Nov 2025 17:37:30 +0200 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1763480411152158500 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach Add a new entry under the "Virtual Hardware, Hypervisor" section documenting support for the optional PSCI SYSTEM_SUSPEND function exposed to guests. This function is available via the virtual PSCI interface and allows guest domains (domUs) to initiate system suspend operations. The feature is currently marked as "Tech Preview". Signed-off-by: Mykola Kvach Acked-by: Julien Grall --- Changes in V14: - fixes in commit message. --- SUPPORT.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SUPPORT.md b/SUPPORT.md index d441bccf37..8e7ab7cb3e 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -962,8 +962,9 @@ Emulated PSCI interface exposed to guests. We support a= ll mandatory functions of PSCI 1.1. See below for the list of optional PSCI call implemented and their status. =20 - Status, Mandatory: Supported - Status, MIGRATE_INFO_TYPE: Supported + Status, Mandatory: Supported + Status, MIGRATE_INFO_TYPE: Supported + Status, SYSTEM_SUSPEND: Tech Preview =20 ## Virtual Hardware, QEMU =20 --=20 2.43.0 From nobody Wed Nov 19 01:54:31 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1763480415; cv=none; d=zohomail.com; s=zohoarc; b=ALIfDYcMTGvGkcVyD9DX6tC2lKkdaAe87CSzyjoYtdbsStmYo080InZTtiTcEkSKKbL4cohqfEil7HuPYKpdv3FjY8HZFn/GspsYT09zoeyoKIp0E9a8Fl2JW5vW1V3AJ5HBCxTUfWqckWg8dfsXBLASvy7QOwOHaeVAI8rcWVo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763480415; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5IRZHY2U62t3jJH8sNLFrWyIhFyWb8Ge0US4ibpnjnE=; b=XtNC62WpJYpGAHW5VS5UkP3hwXT2d64/z16dWY1gb3zZNQI1Qq7q6hdrPTx0CiWfm30NIPQfFwtHXyOCb6oEQww5Ygcp4S/1sZhLq+Cki9RbmTSm1CdwftzAXS//RJwod+BoLWAn+CH02vlhVwhzNEnJeDIfZR+5aVsUfHGuHk4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1763480415076500.95794209837425; Tue, 18 Nov 2025 07:40:15 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1165059.1491915 (Exim 4.92) (envelope-from ) id 1vLNoA-0005Yj-Dt; Tue, 18 Nov 2025 15:39:54 +0000 Received: by outflank-mailman (output) from mailman id 1165059.1491915; Tue, 18 Nov 2025 15:39:54 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vLNoA-0005YW-9j; Tue, 18 Nov 2025 15:39:54 +0000 Received: by outflank-mailman (input) for mailman id 1165059; Tue, 18 Nov 2025 15:39:52 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vLNo8-0004bv-CJ for xen-devel@lists.xenproject.org; Tue, 18 Nov 2025 15:39:52 +0000 Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [2a00:1450:4864:20::532]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id d2a07829-c494-11f0-9d18-b5c5bf9af7f9; Tue, 18 Nov 2025 16:39:51 +0100 (CET) Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-6419b7b4b80so8422762a12.2 for ; Tue, 18 Nov 2025 07:39:51 -0800 (PST) Received: from EPUAKYIW02F7.. (pool185-5-253-54.as6723.net. [185.5.253.54]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b734fd80d27sm1391385266b.40.2025.11.18.07.39.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Nov 2025 07:39:50 -0800 (PST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d2a07829-c494-11f0-9d18-b5c5bf9af7f9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763480391; x=1764085191; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5IRZHY2U62t3jJH8sNLFrWyIhFyWb8Ge0US4ibpnjnE=; b=LWRITPWh5gTFs20m/0PFieZwbbjZZyjFJ/JhTtbo64K/NvXUcL/9keHy/0G49j54uJ wMe7lQ4PFIRe709S7DDwwnRO+SIqm6Ma4o+c7tb+SQfHQQ2DkuSK23yJnM1ehQlw2R8M XgdVnue3uBjTM59NTG2viVEafHmlVvrbVNPYLAtQY/YuwpxISKv466yLZVf3m2ck2xqJ 0/xQVHNaOll0PalrVuNfIvymB6YtIL7FQuGQoZmdFAGTAWFjdLFnPPZMP+reCiVySguu BI+1dtjR2/5ORHUv6Czeah+ZuY5+9+cx/kGYMzPtYnd0UiJUip1mzEzBTkTKLPCQ4I2x ApIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763480391; x=1764085191; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=5IRZHY2U62t3jJH8sNLFrWyIhFyWb8Ge0US4ibpnjnE=; b=XlqchoFdaG5rqWxTdFrNp6XAWdWAHSgOORhV97FFgeL1f4ZfkBCnOZJSE+D4WB0p2w QyYv0k8Dm4wC+JpVV22sLyphspLu3DExBYZCL8hC0ehnVmeMZcUMKGndQxwXUN1zr55q T0MhGSbCyRg5+UgrjdP56a+OdwzaGOMCUtoqPfwLcUxHrMh4TGTHpv5q30UGjigH+54/ T/eQ7Zx00UfAvzTUDCgIRt3C0Iq+WzVw7mmsVfuvnE4t+kuJcAUWEcRy1wOiBsoRx8pj IMGo4zNpOm7FKOiWgRuKimb6B6HtdD2ULDvUhyDuRnipyzE7b48u4GlN7vKhuUgceQhW KKzg== X-Gm-Message-State: AOJu0YyKwq7csbaKF1CRjbZ5pwoGgeQdTAYAHaOQ2KbKet2M03gHrC0v HsS8p9nKN0A3mjS222eCJ+9WJ0ijDSk40nazNvvFV9yNh5VJpVCN41/qBt0VYZ74HUE= X-Gm-Gg: ASbGncsAgN8oWy9siWl4c9v5MhfcVYMnYsbF7I44u0UdxZVW+uGjBhOm7MNa+JWirjt H1js2bJyxfqxScilB3tF77Zj056/IiLPpMYckD+tyTJ29UvXp1UnO7S1gvGz/fsPG4AvelixALF +7F9cvSr3EFcT0Xw9umGrw8DfETuFHmAEMHq3v9yqJDUzrPtZNeb6yJFj3bApTxO3sNNOFhFQ02 TjomYSIU8yCYk8HcKuiCoJeRE6jPVll2pIAAR7bi2TH68uLCLoGhzpZrZ6OWgLudVrn0d4aBjdC zO29U5Uto05pFygSWT87mP7uXdYC+XNDzQsb3DksyMcl70R444j5eJPovqVD25vPXb6w7TnNOv7 ZkUF/Fz2lEjHR902OyKe5Shvdu2Wg6AqTZWi3uhPM+XG+qVi/SgKE6aPq40tBqop9wvu/eaPB5z sigy58areHr+Sq6J2XMgDtrKhypOneUl0Q X-Google-Smtp-Source: AGHT+IG0on2rt+kR/hnHKEOXOoOo/qs/TkBN8/J/wlTjHcZFcjGqGEuTJtAJEvsKjtMhnCRCv7HwnA== X-Received: by 2002:a17:907:1b02:b0:b73:8c6e:cf6f with SMTP id a640c23a62f3a-b738c6ef474mr1192116266b.32.1763480391021; Tue, 18 Nov 2025 07:39:51 -0800 (PST) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Oleksii Kurochko , Community Manager Subject: [PATCH v14 4/4] CHANGELOG: Document guest suspend/resume to RAM support on Arm Date: Tue, 18 Nov 2025 17:37:31 +0200 Message-ID: <8ed791c2471a23bf63715c16df519c86e0699157.1763479083.git.xakep.amatop@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1763480416831158500 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach Mention the newly added support for guest suspend and resume to/from RAM via vPSCI on Arm platforms. This support is limited to non-hardware domain guests. Signed-off-by: Mykola Kvach --- Chnages in v14: - moved s2ram changelog to 4.22 release section --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9932a2af0..fd4657ea42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,10 @@ The format is based on [Keep a Changelog](https://keepac= hangelog.com/en/1.0.0/) =20 ### Added =20 + - On Arm: + - Support for guest suspend and resume to/from RAM via vPSCI. + Applies only to non-hardware domain guests. + ### Removed =20 ## [4.21.0 UNRELEASED](https://xenbits.xenproject.org/gitweb/?p=3Dxen.git;= a=3Dshortlog;h=3Dstaging) - TBD --=20 2.43.0