From nobody Fri Oct 31 03:42:49 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=1756392877; cv=none; d=zohomail.com; s=zohoarc; b=MiMqwUXlaSegoz3DSNOmxAqUSaoOhSTfcyPXqrkRyOa1tDqPavaHbIGvhti2opFS0UirGDMt1TwMyGo5FdbyR4MFQHzDzuW+CRwXc3r+KPwY0r8ZjFdyTi0AQUToQbEJyDCkzASRKoq/vxBydeYfpOuGdNis1S6FM46T+IbbtNQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756392877; 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=S4lER6DNHsySwTielX62U8g1kuJabDKfu70gF2FH154=; b=VVKi2jQUxWqQq2u97pyQJwS1W1T1FUzEDlEhpuYzF4t3otylt/eHF1HRGJxVDEj7zCFesebHZqRwQq2dIWyS6+CLvSI1EiwKoWP0pZexPb+ImayOf6p/LEqv/N9rsxyUaESPi+y0jvEw6wELVUB1Uekeq2MQ0zbeShS0H3wXgnw= 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 1756392877897853.3553567604202; Thu, 28 Aug 2025 07:54:37 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1099032.1452952 (Exim 4.92) (envelope-from ) id 1ure1A-00077v-Rd; Thu, 28 Aug 2025 14:54:24 +0000 Received: by outflank-mailman (output) from mailman id 1099032.1452952; Thu, 28 Aug 2025 14:54:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ure1A-00077C-MI; Thu, 28 Aug 2025 14:54:24 +0000 Received: by outflank-mailman (input) for mailman id 1099032; Thu, 28 Aug 2025 14:54:23 +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 1ure18-00074Y-V8 for xen-devel@lists.xenproject.org; Thu, 28 Aug 2025 14:54:23 +0000 Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [2a00:1450:4864:20::129]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id e0ef5779-841e-11f0-8dd7-1b34d833f44b; Thu, 28 Aug 2025 16:54:20 +0200 (CEST) Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-55f53efe803so1299038e87.2 for ; Thu, 28 Aug 2025 07:54:20 -0700 (PDT) Received: from yp-VivoBook-ASUSLaptop-M1503QA-M1503QA.. ([95.67.15.120]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55f42101509sm2635661e87.106.2025.08.28.07.54.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Aug 2025 07:54:18 -0700 (PDT) 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: e0ef5779-841e-11f0-8dd7-1b34d833f44b DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756392860; x=1756997660; 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=S4lER6DNHsySwTielX62U8g1kuJabDKfu70gF2FH154=; b=QxshJCM6sEhi2A17ECx8ZlkdQeqoV/P2rR5vhvimhvfvozs5lSIsUh2v9ea/MsBUb4 pCZw3PVJch27ZdZ0y6EEImz0CFbgrNLxBQr+ByXCUDbte+T5TA1qyl0pps1YWe+8SQOZ 2BPL2lvYD63sP2poooEkozLdfhG2KCGxiugRBaZryqWdH9Cm7j2Ue2o8sN0Fld7qA7qp WHGKCg3H0AGxUdrccjmtSXB9qtjbGRVNs79gIe1VKPyGR3LZf7gf5/NbWz11lzSP4ygm GVM5PPYReoaxlFtFtiRrNYh/KsZCB/EixHvwxqZj2hnqgI5xZ8TX5knBzQ6c8oZOj53V GvBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756392860; x=1756997660; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S4lER6DNHsySwTielX62U8g1kuJabDKfu70gF2FH154=; b=LQcq+hiICcIC6xkHJEV3D/cuRdEAL28TmOZb1MwIxswEJ6wdhk66wXXvfiyp5n3aBX K8vP6bIelRgL/rS3PO895mtt8nDLIKmyg5q2FA7DW9hEomOa9fdUviVkXOY70zRQvHEH bbfKkqORa80Me7MYmTKiuRdwRwIHkyGQEXZCgJI8JnulLAt3jTWGbxkTbL1nmZHO2hM6 SibLGSfuOcN2iYz1hHnmi3Tqcp/D8WALvJR4FarIis1XL5kYbOB7CHLMTfa8+ZPfAPBg inOJhWiM7EZbwWHxmMOzyAbvMxonFJdXBOIbiGfWAgxikJQiuJ2Vbw1qQbxsr98xvwEN A7Vg== X-Gm-Message-State: AOJu0YwBjWFgtk6oV+PSDhUZ1gcCM0cEwtQRgulLH2pVjHl8fRvRK31N XI7Ypmo8oH/iOxAsjaQBAcCAXrDILuwgq7EhdifO07pzGshZfXEoxtk3nrvIoA== X-Gm-Gg: ASbGncuCG0Pl/zcPzy+ZfPIcz1uvP2XjrrHBkBdTL94pz4US9gp9ofHS4+cjhUaFvIM rI2UV22wfQ3XpxS2JmwB232CSr4fS02+VGRDBvfJ41h0uSXSU+pTdk1XPBX1Ytkrw6cGdUjH2rh Juv7Xp9EkKJz5NZLFj/BjkU1ilViyXs8mm4n63LlNxTxstWwRrTThH4ujjPshY78pyso2S0/GlV nzgf3NLYLDJmQgn6tO0fiTMcBndQDe/yunqMszYCPCzEcPfuRhfw3jqfHHZfCM4EEcKXjXKzHfQ vrDnRK77NyvQGUGe6RZ0LhzHqqu3kLNJBjBT0obzaDWSVSzaySZ8RelvsAVovjH0offt2HQZwOs zrG1LDHOw2Gu+8oojQ1SmbS+kMyXv40NKQzIqe+wJF1vp6IV8IPx9vpRQLLCbjOEcFGdJcxox X-Google-Smtp-Source: AGHT+IHtUeIVd/8Nbo5GH96HIPV40RpO2yd2qVsB7lrX/xGBFur/Av92L5jW1fRdTQ/fydSa8/ibPA== X-Received: by 2002:a05:6512:3d87:b0:55f:3d7c:387b with SMTP id 2adb3069b0e04-55f3d7c3badmr5706905e87.12.1756392859434; Thu, 28 Aug 2025 07:54:19 -0700 (PDT) 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?= , Shawn Anastasio , Alistair Francis , Bob Eshleman , Connor Davis , Oleksii Kurochko Subject: [PATCH v11 1/4] xen/arm: Implement PSCI SYSTEM_SUSPEND call for guests Date: Thu, 28 Aug 2025 17:54:04 +0300 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1756392879364124100 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 Reviewed-by: Volodymyr Babchuk --- Changes in V11: - introduce arch_domain_resume() and vpsci_vcpu_up_prepare(), which are now called on the resume path to avoid extra modifications to common code. The vCPU context is now updated during domain resume. Changes in V10: - small changes to the commit message reflect updates introduced in this version of the patch. - Comments are improved, clarified, and expanded, especially regarding PSCI requirements and context handling. - An ARM-specific helper (domain_resume_nopause_helper) - gprintk() and PRIregister are used for logging in vPSCI code. - An isb() is added before p2m_save_state - The is_64bit_domain check is dropped when masking the upper part of entry point and cid for SMC32 SYSTEM_SUSPEND PSCI calls Changes in V9: - no functional changes - cosmetic chnages after review - enhance commit message and add extra comment to the code after review Changes in V8: - GIC and virtual timer context must be saved when the domain suspends - rework locking - minor changes after code review Changes in V7: - add proper locking - minor changes after code review Changes in V6: - skip execution of ctxt_switch_from for vcpu that is in paused domain - add implementation of domain_resume without domain_pause - add helper function to determine if vcpu is suspended or not - ignore upper 32 bits of argument values when the domain is 64-bit and calls the SMC32 SYSTEM_SUSPEND function - cosmetic changes after review Changes in V5: - don't use standby mode, restore execution in a provided by guest point - move checking that all CPUs, except current one, are offline to after pausing the vCPUs - provide ret status from arch_domain_shutdown and handle it in domain_shutdown - adjust VPSCI_NR_FUNCS to reflect the number of newly added PSCI functions Changes in V4: Dropped all changes related to watchdog, domain is marked as shutting down in domain_shutdown and watchdog timeout handler won't trigger because of it. Previous versions included code to manage Xen watchdog timers during suspen= d, but this was removed. When a guest OS starts the Xen watchdog (either via t= he kernel driver or xenwatchdogd), it is responsible for managing that state across suspend/resume. On Linux, the Xen kernel driver properly stops the watchdog during suspend. However, when xenwatchdogd is used instead, suspend handling is incomplete, potentially leading to watchdog-triggered resets on resume. Xen leaves watchdog handling to the guest OS and its services. Dropped all changes related to VCPU context, because instead domain_shutdown is used, so we don't need any extra changes for suspending domain. Changes in V3: Dropped all domain flags and related code (which touched common functions l= ike vcpu_unblock), keeping only the necessary changes for Xen suspend/resume, i= .e. suspend/resume is now fully supported only for the hardware domain. Proper support for domU suspend/resume will be added in a future patch. This patch does not yet include VCPU context reset or domain context restoration in VCPU. --- xen/arch/arm/domain.c | 22 +++++ xen/arch/arm/include/asm/domain.h | 6 ++ xen/arch/arm/include/asm/perfc_defn.h | 1 + xen/arch/arm/include/asm/psci.h | 2 + xen/arch/arm/include/asm/vpsci.h | 5 +- xen/arch/arm/vpsci.c | 114 +++++++++++++++++++++----- xen/arch/ppc/stubs.c | 5 ++ xen/arch/riscv/stubs.c | 5 ++ xen/arch/x86/domain.c | 5 ++ xen/common/domain.c | 9 ++ xen/include/xen/domain.h | 2 + 11 files changed, 156 insertions(+), 20 deletions(-) diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index 863ae18157..6fd73eedde 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -12,6 +12,8 @@ #include #include =20 +#include + #include #include #include @@ -27,6 +29,7 @@ #include #include #include +#include #include =20 #include "vpci.h" @@ -880,6 +883,25 @@ void arch_domain_creation_finished(struct domain *d) p2m_domain_creation_finished(d); } =20 +int arch_domain_resume(struct domain *d) +{ + int rc; + typeof(d->arch.resume_ctx) *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; + } + + rc =3D vpsci_vcpu_up_prepare(ctx->wake_cpu , ctx->ep, ctx->cid); + 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 a3487ca713..68185fc4d6 100644 --- a/xen/arch/arm/include/asm/domain.h +++ b/xen/arch/arm/include/asm/domain.h @@ -121,6 +121,12 @@ struct arch_domain void *tee; #endif =20 + struct resume_info { + register_t ep; + register_t cid; + struct vcpu *wake_cpu; + } 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/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..50cf5fd96c 100644 --- a/xen/arch/arm/vpsci.c +++ b/xen/arch/arm/vpsci.c @@ -10,30 +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 current->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; + return -ENOMEM; =20 vgic_clear_pending_irqs(v); =20 @@ -76,8 +62,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 +212,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, + 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 +271,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 +403,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/arch/ppc/stubs.c b/xen/arch/ppc/stubs.c index bdaf474c5c..0db0627b5c 100644 --- a/xen/arch/ppc/stubs.c +++ b/xen/arch/ppc/stubs.c @@ -224,6 +224,11 @@ void arch_domain_creation_finished(struct domain *d) BUG_ON("unimplemented"); } =20 +int arch_domain_resume(struct domain *d) +{ + return 0; +} + int arch_set_info_guest(struct vcpu *v, vcpu_guest_context_u c) { BUG_ON("unimplemented"); diff --git a/xen/arch/riscv/stubs.c b/xen/arch/riscv/stubs.c index 1a8c86cd8d..52532ae14d 100644 --- a/xen/arch/riscv/stubs.c +++ b/xen/arch/riscv/stubs.c @@ -198,6 +198,11 @@ void arch_domain_creation_finished(struct domain *d) BUG_ON("unimplemented"); } =20 +int arch_domain_resume(struct domain *d) +{ + return 0; +} + int arch_set_info_guest(struct vcpu *v, vcpu_guest_context_u c) { BUG_ON("unimplemented"); diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 19fd86ce88..94a06bc697 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1138,6 +1138,11 @@ void arch_domain_creation_finished(struct domain *d) hvm_domain_creation_finished(d); } =20 +int arch_domain_resume(struct domain *d) +{ + return 0; +} + #ifdef CONFIG_COMPAT #define xen_vcpu_guest_context vcpu_guest_context #define fpu_ctxt fpu_ctxt.x diff --git a/xen/common/domain.c b/xen/common/domain.c index 104e917f07..d73a88ced5 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1352,6 +1352,7 @@ int domain_shutdown(struct domain *d, u8 reason) void domain_resume(struct domain *d) { struct vcpu *v; + int rc; =20 /* * Some code paths assume that shutdown status does not get reset under @@ -1359,6 +1360,14 @@ void domain_resume(struct domain *d) */ domain_pause(d); =20 + rc =3D arch_domain_resume(d); + if ( rc ) + { + domain_unpause(d); + printk("%pd: Failed to resume domain (ret %d)\n", d, rc); + return; + } + spin_lock(&d->shutdown_lock); =20 d->is_shutting_down =3D d->is_shut_down =3D 0; diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h index e10baf2615..5f77ffadf1 100644 --- a/xen/include/xen/domain.h +++ b/xen/include/xen/domain.h @@ -109,6 +109,8 @@ int arch_domain_soft_reset(struct domain *d); =20 void arch_domain_creation_finished(struct domain *d); =20 +int arch_domain_resume(struct domain *d); + void arch_p2m_set_access_required(struct domain *d, bool access_required); =20 int arch_set_info_guest(struct vcpu *v, vcpu_guest_context_u c); --=20 2.48.1 From nobody Fri Oct 31 03:42:49 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=1756392886; cv=none; d=zohomail.com; s=zohoarc; b=HeskR9DEpZuo61NVvzVLP0i7NeFoM/EP3u55EIUb+RKaHFsNHaHQC/PtsM1QLq6BSE4rmvmxbFrKXt3NzUurDgOWiTSnwc/2KZUgUs+fzq9RUcW82ryxLTq/kb7FmVCfEHtYkpLwfg/wkj8YbEC/EY25NvNd7LbCnMeb7cxQIyo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756392886; 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=iKQtb2yDXXgVIM20M/9ZKDqMqVSaENj70H3OApwPWOA=; b=TAbTFeY9ZeIzW6ExV8pL8oOPZPWrwlr2taWoWxRe0hTUAY5RDWH6ma8za0YPKRzpyXdAEyWO5SVnv1Xr+5HTh5xkPQSboAjw3G+DeyVoQmE92IyrDGog7htDd4mjdGUWrNqU5xZ3Pgj8YC3mRBgjj9PEzJmSVd3V5tsp0JgTGcM= 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 1756392886575823.7568158546652; Thu, 28 Aug 2025 07:54:46 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1099033.1452962 (Exim 4.92) (envelope-from ) id 1ure1B-0007Ex-9j; Thu, 28 Aug 2025 14:54:25 +0000 Received: by outflank-mailman (output) from mailman id 1099033.1452962; Thu, 28 Aug 2025 14:54:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ure1B-0007DZ-0u; Thu, 28 Aug 2025 14:54:25 +0000 Received: by outflank-mailman (input) for mailman id 1099033; Thu, 28 Aug 2025 14:54:23 +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 1ure19-00074Y-KN for xen-devel@lists.xenproject.org; Thu, 28 Aug 2025 14:54:23 +0000 Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [2a00:1450:4864:20::131]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id e14836fd-841e-11f0-8dd7-1b34d833f44b; Thu, 28 Aug 2025 16:54:21 +0200 (CEST) Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-55f3fc15e09so1120092e87.3 for ; Thu, 28 Aug 2025 07:54:21 -0700 (PDT) Received: from yp-VivoBook-ASUSLaptop-M1503QA-M1503QA.. ([95.67.15.120]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55f42101509sm2635661e87.106.2025.08.28.07.54.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Aug 2025 07:54:19 -0700 (PDT) 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: e14836fd-841e-11f0-8dd7-1b34d833f44b DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756392860; x=1756997660; 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=iKQtb2yDXXgVIM20M/9ZKDqMqVSaENj70H3OApwPWOA=; b=DlfdhW2hY/jl+/E7YN1CemCzvKyI8PiPPZT8Iy4tc6IE6SZKmf/KgfqECreNHr6OE9 daInHWuqgH8ozXF21JWu7T3ACmUiT2sz8U9EzHUrWUdlHuw333hVxVIkaF5hZuMbZjRr ED7NZyPWIfukpco9rnPiyKWFeBBgP7nu4/V+E48BSbAQtt+de5TUGfgcPZDbpjIQVWIs cw3dGnqB9ggIUy9RPlXto4P+mgNdSQfU5KXhFDnv2wBQnviXZLTSyjixp/oa97DuF+6p yTMVDQhQ20tR63psAaChrqrq7mosYWMyThEUyKHOtXmYagIhnjQLhRpMnjYc5+XHZtqs ZuRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756392860; x=1756997660; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iKQtb2yDXXgVIM20M/9ZKDqMqVSaENj70H3OApwPWOA=; b=m/8Ovwv89IZrY6Ky7yk9uXlEU1Q6yO0FyHYNsRjQheEBXgzrvUbPyRm0DaKYORT1NQ Rv6PdE45w4vjGaR3+1n8as1hRJUrSj6/Va5Sdo/k5hFbKb99Vozs5OjHR7GaochDhA+S sUSofTkk8zULQnTv262zfvAiHJaBtR7sKTN1R8xGdBvujg/IFrP8ukavBcLLtujHa7vO ZzvgGfLH+JKnafmFtsrkr9+LU8+9fMVnhyKXVnHhMWGtOZmeAguanp7+cGvGWSB0ML+i sIUiofSK8dYAIywAtsox7/rWG0OCuQ2bL+VqEWCwUMmrPf6Uw6hDR4z2i8EiOcGuYEEk mdYg== X-Gm-Message-State: AOJu0YwWyIAnTsgOzbvfAE7p17LBb7KpU6bsERzqWL4O0klk9VgDCoqt CZ8e/FZxeDVYpkdFfyPBUjLGQGkod33gwnn0NQlf1geuMjqySPUSz6UMmjYYgw== X-Gm-Gg: ASbGncuPFwV4zxrtG7U9Dk+2xXLb7d6DulQoqtc01BOwVV19fAumPMDhtTQDO3pg2aO C0y/+C7Z83y+JVwpMgqrQZFe8HulMMW1gfAetkkfvPtEB5BDnyRxdbHrVYmapq5pPA8ZeX9CFT1 PmFEZA1bHVNMt6gkVM5lu1+5Q6aDGQBGGNW4MdftIsu3+LbL2RZDlZr5WbS5sTGhVDlsK27H7iE SaOcZA9fG2jQp9mQMTJ6gaAkz04/3CGbbo1czXoTPnhySkhVIMgPXJ5GhEdmLHV+8Jp6A+GVcHf SKqADCEiiOwlclRbsjwM1u5wsKorerjfJsNUJmBf3OMVIAebwbQu3b4FI9064B2hn7bw4axDnrh nTPuDA8DPQsoCalB7DuL37qxuJMzSHO723MIdXMOKjDqqX5NDuU0lKlc/1sPnhQ== X-Google-Smtp-Source: AGHT+IF0KzeE8Ug4viy9lY6uK85pKNO5bQ1smWxObDJalZkHecuTFyErGv1hdcu99okAdQfuqdIvwQ== X-Received: by 2002:a05:6512:438b:b0:55f:4bf6:efeb with SMTP id 2adb3069b0e04-55f4bf6f674mr4119534e87.43.1756392860229; Thu, 28 Aug 2025 07:54:20 -0700 (PDT) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Anthony PERARD , Juergen Gross Subject: [PATCH v11 2/4] tools/xl: Allow compilation of 'xl resume' command on Arm Date: Thu, 28 Aug 2025 17:54:05 +0300 Message-ID: <71189bf8f220b678829b8d58f4aa9a4877156eb4.1756392094.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1756392888423116600 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 v7: - dropped renaming of LIBXL_HAVE_NO_SUSPEND_RESUME macro Changes in v6: - Renamed macro from LIBXL_HAVE_NO_SUSPEND_RESUME to LIBXL_HAVE_NO_SUSPEND to better reflect the scope of this change - Applied cosmetic changes based on review feedback --- 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 185f74d8a8..b204fc5e2e 100644 --- a/tools/include/libxl.h +++ b/tools/include/libxl.h @@ -1140,7 +1140,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 45745f0dbb..9233b73f85 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.48.1 From nobody Fri Oct 31 03:42:49 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=1756392886; cv=none; d=zohomail.com; s=zohoarc; b=mGM4+pqHioyBzTel+WAgYHE4aOd+FzOtwYI+VV0AacXTpitKbtXqJMgv1FhuGUgLDR6P4StPsaBxJNLVMrWC3RB9ML3lXZ1vupnCkRFv6O1Ik0oyO/LTbShPZ8qX5TePKn7nZ+I8N4757zroH0FQznSS7quH3LV9n2eiQLDr/y0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756392886; 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=Xe9xi3DaBptNnLW1VEAJiUhAp27nm19FtXNKIdaX+1M=; b=chkSFdXRJGxdXmNLUIu+tBzz1YnWtP2MUUZFH/WKPc68YyD1Gtzlg1UcKvB1L0Ld8/kYB5kw4jdTlfWK8lujxyXjGMD8rMKUL/H49JOkf/GiENyEnIiBaOotXe6UxM3Cu+2MChvnE7G0aSH39DENbYvIBw6r1266QML+w58zz68= 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 1756392886759627.8980091149574; Thu, 28 Aug 2025 07:54:46 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1099031.1452948 (Exim 4.92) (envelope-from ) id 1ure1A-00075W-Hz; Thu, 28 Aug 2025 14:54:24 +0000 Received: by outflank-mailman (output) from mailman id 1099031.1452948; Thu, 28 Aug 2025 14:54:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ure1A-00075P-Et; Thu, 28 Aug 2025 14:54:24 +0000 Received: by outflank-mailman (input) for mailman id 1099031; Thu, 28 Aug 2025 14:54:22 +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 1ure18-0006qt-SH for xen-devel@lists.xenproject.org; Thu, 28 Aug 2025 14:54:22 +0000 Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [2a00:1450:4864:20::12a]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id e1fc3c3f-841e-11f0-8adc-4578a1afcccb; Thu, 28 Aug 2025 16:54:22 +0200 (CEST) Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-55f39c0a22dso1183868e87.1 for ; Thu, 28 Aug 2025 07:54:22 -0700 (PDT) Received: from yp-VivoBook-ASUSLaptop-M1503QA-M1503QA.. ([95.67.15.120]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55f42101509sm2635661e87.106.2025.08.28.07.54.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Aug 2025 07:54:20 -0700 (PDT) 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: e1fc3c3f-841e-11f0-8adc-4578a1afcccb DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756392862; x=1756997662; 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=Xe9xi3DaBptNnLW1VEAJiUhAp27nm19FtXNKIdaX+1M=; b=anHfLvhzUkFp3Cyr9/EWhwPzi65yWCNhY/jcHNq8MRsY9Ae5kaD0L4oUaOBa3jX7vU IQTqbF/80Pu632oirdHBje2301NF9cxipf5MV/pZFWjnb6RRPL5QVvdg/Vn5BupiU1HG zEznJjw5HyVC5OSZm1gzgiLo1XdfTMiJWs7V1Sw0LDaHE5NIBhiofE5k2zs4d0jWKJ8X +/g2PcUFrTbnKkpbj3pU1VeKtrLD4pW9SeoCpnsQXNF8hkLTEBxJP7gUrBb6B2MBcOsB kis/e6IRK2R7/Hg4B4JDaZ5w/QG/WqZkDyasgQhg9La2PBWUAKBSiEZR8a72vmmmmDq4 wf/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756392862; x=1756997662; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Xe9xi3DaBptNnLW1VEAJiUhAp27nm19FtXNKIdaX+1M=; b=W1zU+C1rtP8W4h3cO+D1vYNsmMeh0uyFnaV55aVWn2SOiuyYcnx0MnbbicExaTQ34z rlPD+WwN6X9fwLtYzotsOsFO9ZeMZhhRJYc8ygfjn/fe2EQT42YQ9/tR8cox3lZknuwt uJMzoOZBPakVx/AzsuooOttHbcAeYlbuBWn41ouyydiR2+i/qMosauF66coHumzNzoSZ avpWWBxAnsUEU6YnBfsGIqVEEqVoIBgOLd25c93Jqgg40ml6Y3g0dpyxwIdD3djk5au/ XEJGQ9CG3D3IiDAMeBpW2GMqswwc0Bb0RXauFEhH6dzGogyfHM1GTUtCJrnK+AETxohc SNww== X-Gm-Message-State: AOJu0Yzqa+CKhIDiextRmfKRB1OegZAAMiiDNP7TSCCvzMs2yiZmeGYe sckLDhEanqHnCZLZISlqrEFPOVZVW5yg5IWA1p/j4FUEoiEgCJzWDw3MNiAc1w== X-Gm-Gg: ASbGnctbXsS9V+P4qM5nVkIaHTSMkMoiFV53KuLCuFWbG4jM5yFTdKsTOTsfaaacgzL RPNNihcKPCAwHuPosEANWnbo0zvhUmr9EwFfFsGKm8JTEt4s8pTitHNC9yE4iLrWecwRM1wLRAK tsPpwtpnlosXnUQ9vau0cHrfF6RqtQrm9UgRL1gDfysnVC1T7UA7hJ/XOp2mQ/PUKdHHA8Xj5SA 6je3ivx9DjTHW9UDC1xlUR1aCYgm8jkYglD228JU8t7Wo4oZXy1nheMUcXymSs9HIomYUu6vLJv NKo9cwwLqvnuvn233fvgRWDBimsnQ22zqHuVC2jAcFU++pfSPRBnyCXKqEqpo2QaEMTEmaT3RDU PhOOkqmzOpg0BHKP0mU0c1S31RntLD4C96mysNvE68a9z8N5wqlB/aKOLe4ZX0Q== X-Google-Smtp-Source: AGHT+IGVn3t8FI8KDXGmDy918ObNgpZToIWSeInq3sskv+8OmyDF6huIydUyHV112csuE+SHQHdo6w== X-Received: by 2002:ac2:4c53:0:b0:55f:595f:9a37 with SMTP id 2adb3069b0e04-55f595f9c84mr1409346e87.27.1756392861379; Thu, 28 Aug 2025 07:54:21 -0700 (PDT) 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 Subject: [PATCH v11 3/4] SUPPORT.md: Document PSCI SYSTEM_SUSPEND support for guests Date: Thu, 28 Aug 2025 17:54:06 +0300 Message-ID: <9173ec351b88ad04e6ea13053dd785eb7f0e9b53.1756392094.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1756392888297116600 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach Add a new entry under the "Virtual Hardware, QEMU" section documenting support for the optional PSCI SYSTEM_SUSPEND function exposed to guests. This function is available via the virtual PSCI (vPSCI) interface and allows guest domains (domUs) to initiate system suspend operations. The feature is currently marked as "Tech Preview". Signed-off-by: Mykola Kvach --- Changes in V10: - Status of vPSCI SYSTEM_SUSPEND changed from "Experimental" to "Tech Preview" Changes in v6: - Dropped the generic guest PSCI support entry (merged in a separate patch) - This patch now documents only the SYSTEM_SUSPEND optional function - Reworded commit message to match the final form after rebase Changes in v5: - Dropped ARM/PSCI entry: this refers to internal use of PSCI SMC calls, which is not relevant for SUPPORT.md - Added a dedicated entry for PSCI SYSTEM_SUSPEND instead of generic guest PSCI info; guest PSCI support was documented in a separate patch --- SUPPORT.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SUPPORT.md b/SUPPORT.md index 6a82a92189..0ce0903cb1 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.48.1 From nobody Fri Oct 31 03:42:49 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=1756392880; cv=none; d=zohomail.com; s=zohoarc; b=MusGXZ8aB+N8fIeKguoKhRAwu4g3LC2LcF26D0Vmh/znCNGgPKEsgR5UD3rHCYNa26DBcWPaQ5alu4h1nRfYMRRO/Y9I2oTd1zROLNQHb1TiUnoC1IIJ9ENkVG+LEvH4c8QfFPhRSEw7FCp9g2BuReM7h3U2fjWDcEMVfcjtyzU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756392880; 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=hngrpYued6VRjNdXSCXsejFnZ9+NvVTFmNBYrfCV2Ms=; b=EksGEZApffLUGG7WGY9Wyn0eAIyiFH/lvNz8yjHkkkahhWWs9OAMtBOThf2mIaouLVio+6aZs8a/mqvTFGJybR4dHQ3lD7Et+u7qrk0Q04wj1ikkhBIhE0hPyI40urxGmhnRuBR11HS7nCvzNPN2SbWvK5F1ugZgTpezDrXgA+w= 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 1756392880871949.5723785871751; Thu, 28 Aug 2025 07:54:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1099034.1452977 (Exim 4.92) (envelope-from ) id 1ure1C-0007nI-MR; Thu, 28 Aug 2025 14:54:26 +0000 Received: by outflank-mailman (output) from mailman id 1099034.1452977; Thu, 28 Aug 2025 14:54:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ure1C-0007mi-J9; Thu, 28 Aug 2025 14:54:26 +0000 Received: by outflank-mailman (input) for mailman id 1099034; Thu, 28 Aug 2025 14:54:25 +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 1ure1B-00074Y-Bu for xen-devel@lists.xenproject.org; Thu, 28 Aug 2025 14:54:25 +0000 Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [2a00:1450:4864:20::12e]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id e2b3d3d1-841e-11f0-8dd7-1b34d833f44b; Thu, 28 Aug 2025 16:54:23 +0200 (CEST) Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-55f42e4c3ebso1107934e87.3 for ; Thu, 28 Aug 2025 07:54:23 -0700 (PDT) Received: from yp-VivoBook-ASUSLaptop-M1503QA-M1503QA.. ([95.67.15.120]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55f42101509sm2635661e87.106.2025.08.28.07.54.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Aug 2025 07:54:21 -0700 (PDT) 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: e2b3d3d1-841e-11f0-8dd7-1b34d833f44b DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756392863; x=1756997663; 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=hngrpYued6VRjNdXSCXsejFnZ9+NvVTFmNBYrfCV2Ms=; b=ceYJLsAzje1QUHsMJBeLXUVxlnPLL2nAjl9WRViQIiT0J0ARGHuObrtoM7kPVJ1+9+ j+4agPiW/xrRrOh27GF9mDN9OFnauv/Qztc1Mxc1or8aksPABAz3w4uAh/5dp8iUSXgG fumj72DjkiXxJu3Ns5L4fmRRXSuwhwUA6IykIFicvdYfoxnbueSr7MkPnr1IZ+kBZo9u fKTocmjXcHW3sp/21sPe4XKxG3IobJs0zLfr1MQtRI0gWDGVtPjB6RfQOSpsd7gU0ZT8 WNkbARGcIfGK1ToBt4xJYuQcGV3vxGQZmKuVxvTwN6zo/5ErfHIYSIm95X2xiP7O55On wxOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756392863; x=1756997663; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hngrpYued6VRjNdXSCXsejFnZ9+NvVTFmNBYrfCV2Ms=; b=V/RY2uQQzo4tBpmZVz8PPJeew0EjDMJLXz+g/1rY8MgOTlO3DM0aCbo7wuNTsz/EpP 3rfh+OpQehHvwZlOrVhDmlrLJL3ezC1Y3ezLZlpvQj7l2gHFvQ7kkietVccSo+z1StRt LEritl385qeiFVLc1vfYees+dvFM3AtAOzN0USL+APDEuv5HeT11x4eQV8rLxpCjJurR ArWK3VGLVz28dKC+1HyoXEJgLbom6C1kZH8v2TDikpGf28qr2mv5kItQi1AVwtTYqSXV cPV4Xv0dMHVy9FCHFeXEx/KfxnKN/dO0z5Zxbp0GD+Yk8f9tW/zI26VGhbZafc3xYZsK PaKg== X-Gm-Message-State: AOJu0YxkxpWVi0Ev57fYKWQ8PsH+hWRMjtZ0Z+BXEEKVfwpIVXmLEKJR Yd2Eg0RT4DqwJKjHJTG5dBw8UfUcXUzcfW+sKtfdQhvop/m2EgazCmhkZ4bjbg== X-Gm-Gg: ASbGncuabFKOajMQEbSbGcYU+h8yoX8UKaJ19KjhtrvpWJ0YIWtqwSjvQs5FablphIM UCE6qCLE9No8OmIVSd+/kjX6xfxhcElF5DcKVfz/ueQZc0L6Zn4F7FpHw1wBNmoc+lZNQwbNN9K 1ZeuUxIZLIvf7XOdQ70SLZq++a7mcaet26Kpin08ox4X3gnQ4dZPbF2+awmmjrfwe0CG0kgeiKp yj24kyJ33I4cYbnorVT3BhcAum5B3KF22mTxXpQv5yhoD+pb0P1RBc+rtbJm/A/HNj3Rrww8y95 Fh8mY5Ph34CjSrwGnogD+wf2IZ5Er230N1NLA+uZd0JTgtbOEiYRbx/t/PfRGER5/J3iMyuykMl I3R2nbbhEojp34j6AL3MOrk7EDofgsP2ky3cXCrvB++SLtUoGSpgQDS1EJx02sBSUwmiC3YbG X-Google-Smtp-Source: AGHT+IF1HeaKj2cz2cnnr0EE+aGs2CLKOQzVrtI+RGDtiy5IgEELvtKlOaKXC3CZjCTvrGIn+BQwWQ== X-Received: by 2002:a05:6512:3181:b0:553:2c58:f96f with SMTP id 2adb3069b0e04-55f0c6a0f73mr6639899e87.1.1756392862710; Thu, 28 Aug 2025 07:54:22 -0700 (PDT) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Oleksii Kurochko , Community Manager Subject: [PATCH v11 4/4] CHANGELOG: Document guest suspend/resume to RAM support on Arm Date: Thu, 28 Aug 2025 17:54:07 +0300 Message-ID: <6fa6038c90109a2e9990a691fbcf2aceb5aa9694.1756392094.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1756392882481116600 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 Acked-by: Oleksii Kurochko --- Chnages in v6: - removed reduntand explanation that thi support added for both arm32 and arm64. Changes in v5: - adjustments to the commit title and message - expanded the changelog entry to include more context about suspend/resume support introduced in this patch series --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd34ea87b8..7a75bd37cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,8 @@ The format is based on [Keep a Changelog](https://keepach= angelog.com/en/1.0.0/) =20 - On Arm: - Ability to enable stack protector + - Support for guest suspend and resume to/from RAM via vPSCI. + Applies only to non-hardware domain guests. =20 ### Removed - On x86: --=20 2.48.1