From nobody Thu Oct 30 22:54:56 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=1755507022; cv=none; d=zohomail.com; s=zohoarc; b=HTR7+jLyvkiIRUjHKd+VAdwvOMlXaKecezgCiTADwK3/r+K+KC1rQivxJKCURqXn4Ciw6n2W0RKG+FdXlgmdiw1uaw+zlohGqQt9DF3aFgJ9i0f958a4DDgjrUefMzQ0UiUkUvfYo3h0ouK3Z6VrS/EM3GoYL+fxzQTWR2sJaDs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755507022; 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=5+ft2nxvGpA3g1oU8oVhQcdEX9Ksnti8I9PxrIQBz08=; b=TvLOoD4SyC4Y1G5ODgRfQ0wkOk4njyGQ4tHBROQvtyehXHy4GNyZhMxf4ifNSpwt4bGv/9K75HH57PTEuKqbCLtjL+vRD3Ngv0bCyvmLdO899fPo0BLDAS8ilSpzzpFPB/sjlfFjGmjWLOsddrPT9sQKJFzr8cNs3sQOxSnfqDw= 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 1755507022846613.1881001525935; Mon, 18 Aug 2025 01:50:22 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1085663.1443970 (Exim 4.92) (envelope-from ) id 1unvZ7-0006Hx-LI; Mon, 18 Aug 2025 08:50:05 +0000 Received: by outflank-mailman (output) from mailman id 1085663.1443970; Mon, 18 Aug 2025 08:50:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1unvZ7-0006Hi-IS; Mon, 18 Aug 2025 08:50:05 +0000 Received: by outflank-mailman (input) for mailman id 1085663; Mon, 18 Aug 2025 08:50:04 +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 1unvZ6-0005gf-Be for xen-devel@lists.xenproject.org; Mon, 18 Aug 2025 08:50:04 +0000 Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [2a00:1450:4864:20::12c]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 53403469-7c10-11f0-b898-0df219b8e170; Mon, 18 Aug 2025 10:50:00 +0200 (CEST) Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-55ce526ac04so3694222e87.2 for ; Mon, 18 Aug 2025 01:50:00 -0700 (PDT) Received: from yp-VivoBook-ASUSLaptop-M1503QA-M1503QA.. ([95.67.15.120]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55cef351579sm1571950e87.4.2025.08.18.01.49.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 01:49:58 -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: 53403469-7c10-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755506999; x=1756111799; 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=5+ft2nxvGpA3g1oU8oVhQcdEX9Ksnti8I9PxrIQBz08=; b=O7D4Snm7XdLNJLm43Rx+PfkfUfsxvhFlzobm2E3qnVnmmAcvzGIdeLmmdrlEGShAo6 Dw4+kAsYULjuYD02ZFQ800URwXQUSE/fGPmWs/XIf7GajWJEnwKJP6tVkG3LSGJdf4IN YjyKNbDkKve6nZddaM5dsg1tFdEBQPn+afx7HcUim4m0eGtX7at/C4j3BEyYrCPTs5uz 2in1nrlWZa+ZumDfvqQsQRo2UvP5VTQNDmJnQHEAdIcOZR9orRXzxTfAF2a9rsJtTBwv w1WA5T017M5pq8xLka01RNTyTrmeUkO2rgETZs3ocxtxfkl2VYzY5yfgoSbfsAXj/gcn HFMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755506999; x=1756111799; 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=5+ft2nxvGpA3g1oU8oVhQcdEX9Ksnti8I9PxrIQBz08=; b=QsKLfDG31MRLVP/77AQUd4teLcIb8Z0QQ+y9nnFMuv2V6ZDdQ/p4tFc/piZjfeBREM uVGg7+nquz1K4y0yRRJnuuOiI01izdCQ1/HGaaWXuouYfLfPWMMx2R+wPBoCMpYIYrEM 7SGQRbxUYw3JvjKa4dKds7tcAD2iwcLc5BMFpiuMffv7ed86h6J/e4zF+Oms8vr766pT e/tPcfbjDP1mQWDIrCoh5XsMyMyaOBbn/PIrGbr816++wkX43jA0ZXXlUCa2I+olsPYZ MylZX5Gl5hAHJNKMHv0b5lK2v8Sp39+URNtsAlKnhuE2mwqn1JN0nv7ZQs++0fXMo1uW paEQ== X-Gm-Message-State: AOJu0YyMRr89Hd1jFYJ5qFGLi7bum6kWot8aBWAgwiQcaU3StcUsFJY7 cKUXmBFVTuT6kQYlE4rEBUUuzkG6N3DwnjhGvaBRYDCtFLRXzRz0cldWKWY0Qg== X-Gm-Gg: ASbGncssSTFyoKa0RBcOW2LL/GUBFyLlxzfmiK/AmnNLHdQhbTlnVPIcUa8+ld4qzKX ZodrAtMpCcPVZJS4XADiTD/ziKPYD9h28k9lycw3BAGhwb+z6U6MoqoRo4vatXhjonTiQcg3Awb oSotYcI/vU8efo8qn8h4xtW5l1ocZJNVLv0zvGGoTeL75OJwtqXf6CMeB0o0hDcO9NUjHAnpMyE W8T0/ndK/hCdtHYluayBzGPzmA7kuZQ/Q3RQlB+dXkWDcrOQtfr4m1PqOucZYnTShulD4jVzKF3 wk6tcmP1Gm/yozepIhyUNe/ZX1YWwcCD052VyEQxq6tbgczUQrhL5mLPbfw93pabIqLp4YJ9BTA gpvjUUfjWObyrjZDvn/j+1XZTD6PpMOIMmYZt5qbyN0cz3n94fsH5XJ8NnkcNkNTTOYDcIwe5 X-Google-Smtp-Source: AGHT+IGUx6XOIBYD5ycm/HXQM2uAsBpbGVlHochHRwE0PTieq30Kt7jzpASz4BQxPcKunyTUBtZx1Q== X-Received: by 2002:a05:6512:1512:10b0:55b:975b:98a with SMTP id 2adb3069b0e04-55ceeba2f0bmr1738395e87.41.1755506999295; Mon, 18 Aug 2025 01:49:59 -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?= Subject: [PATCH v9 1/4] xen/arm: Implement PSCI SYSTEM_SUSPEND call for guests Date: Mon, 18 Aug 2025 11:49:24 +0300 Message-ID: <205b2b354ff1d34d0e9ec4777ca3c94492f6d9d1.1755506449.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: 1755507025688124100 Content-Type: text/plain; charset="utf-8" From: Mykola Kvach This patch adds support for the PSCI SYSTEM_SUSPEND function in the vPSCI (virtual PSCI) interface, allowing guests to request suspend via the PSCI v1.0 SYSTEM_SUSPEND call (both 32-bit and 64-bit variants). The implementation: - Adds SYSTEM_SUSPEND function IDs to PSCI definitions - Implements trapping and handling of SYSTEM_SUSPEND in vPSCI - Allows only non-hardware domains to invoke SYSTEM_SUSPEND; for the hardware domain, PSCI_NOT_SUPPORTED is returned to avoid halting the system in hwdom_shutdown() called from domain_shutdown - Ensures all secondary VCPUs of the calling domain are offline before allowing suspend due to PSCI spec GIC and virtual timer context must be saved when the domain suspends. This is done by moving the respective code in ctxt_switch_from before the return that happens if the domain suspended. domain_resume_nopause() is introduced to allow resuming a domain from SYSTEM_SUSPEND without pausing it first. This avoids problematic domain_pause() calls when resuming from suspend on Arm, particularly in error paths. The function is only used on Arm; other architectures continue to use the original domain_resume(). 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 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 | 17 +++-- xen/arch/arm/include/asm/perfc_defn.h | 1 + xen/arch/arm/include/asm/psci.h | 2 + xen/arch/arm/include/asm/vpsci.h | 2 +- xen/arch/arm/vpsci.c | 101 ++++++++++++++++++++++---- xen/common/domain.c | 31 ++++++-- xen/include/xen/sched.h | 6 ++ 7 files changed, 131 insertions(+), 29 deletions(-) diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index 310c578909..9e9649c4e2 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -90,6 +90,16 @@ static void ctxt_switch_from(struct vcpu *p) if ( is_idle_vcpu(p) ) return; =20 + /* Arch timer */ + p->arch.cntkctl =3D READ_SYSREG(CNTKCTL_EL1); + virt_timer_save(p); + + /* VGIC */ + gic_save_state(p); + + if ( test_bit(_VPF_suspended, &p->pause_flags) ) + return; + p2m_save_state(p); =20 /* CP 15 */ @@ -106,10 +116,6 @@ static void ctxt_switch_from(struct vcpu *p) p->arch.tpidrro_el0 =3D READ_SYSREG(TPIDRRO_EL0); p->arch.tpidr_el1 =3D READ_SYSREG(TPIDR_EL1); =20 - /* Arch timer */ - p->arch.cntkctl =3D READ_SYSREG(CNTKCTL_EL1); - virt_timer_save(p); - if ( is_32bit_domain(p->domain) && cpu_has_thumbee ) { p->arch.teecr =3D READ_SYSREG(TEECR32_EL1); @@ -158,9 +164,6 @@ static void ctxt_switch_from(struct vcpu *p) =20 /* XXX MPU */ =20 - /* VGIC */ - gic_save_state(p); - isb(); } =20 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..69d40f9d7f 100644 --- a/xen/arch/arm/include/asm/vpsci.h +++ b/xen/arch/arm/include/asm/vpsci.h @@ -23,7 +23,7 @@ #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); diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c index 7ba9ccd94b..67d369a8a2 100644 --- a/xen/arch/arm/vpsci.c +++ b/xen/arch/arm/vpsci.c @@ -10,28 +10,18 @@ =20 #include =20 -static int do_common_cpu_on(register_t target_cpu, register_t entry_point, - register_t context_id) +static int do_setup_vcpu_ctx(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; 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; =20 /* THUMB set is not allowed with 64-bit domain */ if ( is_64bit_domain(d) && is_thumb ) return PSCI_INVALID_ADDRESS; =20 - if ( !test_bit(_VPF_down, &v->pause_flags) ) - return PSCI_ALREADY_ON; - if ( (ctxt =3D alloc_vcpu_guest_context()) =3D=3D NULL ) return PSCI_DENIED; =20 @@ -78,11 +68,32 @@ static int do_common_cpu_on(register_t target_cpu, regi= ster_t entry_point, if ( rc < 0 ) return PSCI_DENIED; =20 - vcpu_wake(v); - return PSCI_SUCCESS; } =20 +static int do_common_cpu_on(register_t target_cpu, register_t entry_point, + register_t context_id) +{ + int rc; + struct vcpu *v; + struct domain *d =3D current->domain; + register_t vcpuid; + + vcpuid =3D vaffinity_to_vcpuid(target_cpu); + + if ( (v =3D domain_vcpu(d, vcpuid)) =3D=3D NULL ) + return PSCI_INVALID_PARAMETERS; + + if ( !test_bit(_VPF_down, &v->pause_flags) ) + return PSCI_ALREADY_ON; + + rc =3D do_setup_vcpu_ctx(v, entry_point, context_id); + if ( rc =3D=3D PSCI_SUCCESS ) + vcpu_wake(v); + + return rc; +} + static int32_t do_psci_cpu_on(uint32_t vcpuid, register_t entry_point) { int32_t ret; @@ -197,6 +208,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; + + /* 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; + + rc =3D do_setup_vcpu_ctx(current, epoint, cid); + if ( rc !=3D PSCI_SUCCESS ) + { + domain_resume_nopause(d); + return rc; + } + + set_bit(_VPF_suspended, ¤t->pause_flags); + + dprintk(XENLOG_DEBUG, + "Dom %u: SYSTEM_SUSPEND requested, epoint=3D%#lx, cid=3D%#lx\n= ", + d->domain_id, 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 +267,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 +399,24 @@ 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 ( is_64bit_domain(current->domain) && + 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 5241a1629e..624c3e2c27 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1343,16 +1343,13 @@ int domain_shutdown(struct domain *d, u8 reason) return 0; } =20 -void domain_resume(struct domain *d) +#ifndef CONFIG_ARM +static +#endif +void domain_resume_nopause(struct domain *d) { struct vcpu *v; =20 - /* - * Some code paths assume that shutdown status does not get reset under - * their feet (e.g., some assertions make this assumption). - */ - domain_pause(d); - spin_lock(&d->shutdown_lock); =20 d->is_shutting_down =3D d->is_shut_down =3D 0; @@ -1360,13 +1357,33 @@ void domain_resume(struct domain *d) =20 for_each_vcpu ( d, v ) { + /* + * No need to conditionally clear _VPF_suspended here: + * - This bit is only set on Arm64, and only after a successful su= spend. + * - domain_resume_nopause() may also be called from paths other t= han + * the suspend/resume flow, such as "soft-reset" actions (e.g., + * on_poweroff), as part of the Xenstore control/shutdown protoc= ol. + * These require guest acknowledgement to complete the operation. + * So clearing the bit unconditionally is safe. + */ + clear_bit(_VPF_suspended, &v->pause_flags); + if ( v->paused_for_shutdown ) vcpu_unpause(v); v->paused_for_shutdown =3D 0; } =20 spin_unlock(&d->shutdown_lock); +} =20 +void domain_resume(struct domain *d) +{ + /* + * Some code paths assume that shutdown status does not get reset under + * their feet (e.g., some assertions make this assumption). + */ + domain_pause(d); + domain_resume_nopause(d); domain_unpause(d); } =20 diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index fd5c9f9333..c1848d8ea6 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -814,6 +814,9 @@ void domain_destroy(struct domain *d); int domain_kill(struct domain *d); int domain_shutdown(struct domain *d, u8 reason); void domain_resume(struct domain *d); +#ifdef CONFIG_ARM +void domain_resume_nopause(struct domain *d); +#endif =20 int domain_soft_reset(struct domain *d, bool resuming); =20 @@ -1010,6 +1013,9 @@ static inline struct domain *next_domain_in_cpupool( /* VCPU is parked. */ #define _VPF_parked 8 #define VPF_parked (1UL<<_VPF_parked) +/* VCPU is suspended. */ +#define _VPF_suspended 9 +#define VPF_suspended (1UL << _VPF_suspended) =20 static inline bool vcpu_runnable(const struct vcpu *v) { --=20 2.48.1 From nobody Thu Oct 30 22:54:56 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=1755507019; cv=none; d=zohomail.com; s=zohoarc; b=EO7rrDL4lNNJIRA7zuKaVXzvSKxLO9WmIu3Njyrwr/79AnH9ckwl0PUSZb4Z7cE+hQ0JFmeMp2l2QrP6a/C+NjpUKSm2AM1SS1ifnMcdu33mbQ37P3k8+gdABrRB6Q2ocLMbCeBArW7AJX/Myw7sRq7CIxNeBY+BA+2rzEVO+tY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755507019; 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=Y+NZQ2SavfEQWBQl30V+yFLWBar9QMmeABmy2cpnS6Qa2ntRhhCmX4R69tOkrk99bDEKHNXRcMu/pGSX1rdYwdK+gyk2RzQ8BCmRFpo5FT00LFPREXS87/0CEtoQmi776Vm+d1hHtS0sPeX+7WTUyNz8Mc4xMVCbtJKpd0HO744= 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 17555070192121005.3570682027016; Mon, 18 Aug 2025 01:50:19 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1085664.1443977 (Exim 4.92) (envelope-from ) id 1unvZ8-0006Mp-2N; Mon, 18 Aug 2025 08:50:06 +0000 Received: by outflank-mailman (output) from mailman id 1085664.1443977; Mon, 18 Aug 2025 08:50:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1unvZ7-0006L1-Qq; Mon, 18 Aug 2025 08:50:05 +0000 Received: by outflank-mailman (input) for mailman id 1085664; Mon, 18 Aug 2025 08:50:04 +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 1unvZ6-0005gf-Ly for xen-devel@lists.xenproject.org; Mon, 18 Aug 2025 08:50:04 +0000 Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [2a00:1450:4864:20::12c]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 5410581f-7c10-11f0-b898-0df219b8e170; Mon, 18 Aug 2025 10:50:02 +0200 (CEST) Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-55ce528022eso4210518e87.3 for ; Mon, 18 Aug 2025 01:50:02 -0700 (PDT) Received: from yp-VivoBook-ASUSLaptop-M1503QA-M1503QA.. ([95.67.15.120]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55cef351579sm1571950e87.4.2025.08.18.01.49.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 01:49:59 -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: 5410581f-7c10-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755507001; x=1756111801; 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=UJilwVKl8v1Hiym+CCGJObk6o8weilog7NRSjetJglxjcdzH2H4nmPHEIf0XRtOZFf 3Z8t1EPSkqIeiSPfwgb08dE4FcdkLv4xY3VtJmLgJ+MVUXhL8YIUsC54yG2ucyT0RM0J n6l168AVwcPIbQQSqnzBdZ5iiSWEK09QGmYhsvxbvbOkZS+XUm49g/Ju6AAMwbBjrplh XrNfsnzQdnUSMeFp77hibPTNHMavAKs+8gw9xHGQb3C1Cf1rrPEYUwYu007Z+GIo9r/Z XCD2siahN1O58uu2LgBqCP9E3XH3xGTP7JH6VvH54wV9o2Bss+ZmLplJeNawJrCAwaDt Mjpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755507001; x=1756111801; 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=oGHfiONwmkvta9XY5097PvPFg3+6bggzEehlZF4uS3UzSq6/i1D0OZ6UQkKvWj/KO3 /0RIqKN+Uu5FLo7pm8IZMNFNud6rexTzvDR82LHFECqt2NG30MF1C2HTaPsf7abOJLqr S0RBzVMBFXaiaLQnOn6zMHIqfwP+0lc8jYJyquCu9swAznl5Zq8CI92qc1GrInkFpO7C cwHcQjf1tvuBXDY8aYheny2iDWugBIX44/7gE3iJuLWz4gJ1pt0Khz7kiqAxxiH++Ek1 AFilMvLcHe53AT8hFQozKIZsXJx2V3FutIKb23U9j44Pje0qKxDSHa+eQyZ+6ssIaIDg 3rXg== X-Gm-Message-State: AOJu0Yx9mbt6RS8LF6WLyPaiiJx3qU/6Wmwz9vNTHJIU+dyN54NYpF2H dPJs8JUExIKF8zLl3inN7PZaobBDWRHBG1U3hpflx8r0vKBQXqZNTGHFknyNIQ== X-Gm-Gg: ASbGncvd0sdi0htfmufs966pCSZmtrYTe+vr39aaJvM/R+9lN4Djiwiq9lcyc38H0vI 09UrCyWhd3mY6nJeCKLowe1dAzYqQbyaLd2X05+m2iVBFdph4d3sV3VXfehiWHqNk0vGPAS64fB 4obRDIq0bRah2ZpLu98tZuHVsFNv7cgE26Q1+pKIWjgobGYabeC9EJazQtJDrcChh7ZnKx9EGxS +rtGWA9dqMahANkdF0K19BSE40ItNwAnPwnirxKOYzXnRn7kN5d9HD9NKZ/J11X5qLBjVLqT9+8 4Ie3EIuV3Ulf9T+phrXzlKmukBVGkaENtCQZxqXyE5FQiwWV6dfhnf5OGryHOt5TCSDfaMxb/+i oykFTd4FMZ9alu0AbhaqLPx38KHoR0hJOszeGtZTOv6W+Vg43ifVuZQ/Ih8HE+3thCCFeajXk X-Google-Smtp-Source: AGHT+IERO8Ep+xUY8smoumIQzfhUwoe1nQke3+EHmR9SoaAFhFdmVrI9o4YNspXRsI1oGW0jo61fgg== X-Received: by 2002:a05:6512:145c:20b0:55d:fb2d:3c39 with SMTP id 2adb3069b0e04-55dfb2d3df9mr106422e87.40.1755507000857; Mon, 18 Aug 2025 01:50:00 -0700 (PDT) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Anthony PERARD , Juergen Gross Subject: [PATCH v9 2/4] tools/xl: Allow compilation of 'xl resume' command on Arm Date: Mon, 18 Aug 2025 11:49:25 +0300 Message-ID: <60c29f80837b0642fcf225aaff3cd2b07310c0ce.1755506449.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: 1755507021495124100 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 Thu Oct 30 22:54:56 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=1755507023; cv=none; d=zohomail.com; s=zohoarc; b=Fd6+y3Q1YEPQM7j9T9yi8tKaZ2sk0D9QTt0qeM4af/nYRef5lsJkSggn7vW8hamXSwgZ6BETh2qASU7e1NzevGp5i7mB5dgOZ5QVyL5zk3bzaJ0xk13NlS3Mg/u5oJNQG0hEAMrPR62uijcj1+HUOxujoofJSkB7qndthv2CF64= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755507023; 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=gDyBEr2C8bHK7ao0mUQj4cm53R0gNtsq0NOW3g9oj/Q=; b=UfYWHrXhKyZSOwn8Vds9AlSU8yrPjWEJmFSiKzfzejbdZGu2LAZ7FYk+nBfNfCsRPzGn79HxrcN8Gbw1e2G5OBWhkvqzjrL8l+XilsGzRaDAz6tFxRlq5TTvTcnMeierwT5pGxysAY2p9h7Hi3nigWul1cPVm/PHcZjHcN/+RMM= 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 1755507023464116.14706217351647; Mon, 18 Aug 2025 01:50:23 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1085665.1443982 (Exim 4.92) (envelope-from ) id 1unvZ8-0006Rk-9U; Mon, 18 Aug 2025 08:50:06 +0000 Received: by outflank-mailman (output) from mailman id 1085665.1443982; Mon, 18 Aug 2025 08:50:06 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1unvZ8-0006Pe-36; Mon, 18 Aug 2025 08:50:06 +0000 Received: by outflank-mailman (input) for mailman id 1085665; Mon, 18 Aug 2025 08:50:04 +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 1unvZ6-0005gf-Sv for xen-devel@lists.xenproject.org; Mon, 18 Aug 2025 08:50:04 +0000 Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [2a00:1450:4864:20::12c]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 54d520fc-7c10-11f0-b898-0df219b8e170; Mon, 18 Aug 2025 10:50:03 +0200 (CEST) Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-55cf526f6b5so1268147e87.0 for ; Mon, 18 Aug 2025 01:50:03 -0700 (PDT) Received: from yp-VivoBook-ASUSLaptop-M1503QA-M1503QA.. ([95.67.15.120]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55cef351579sm1571950e87.4.2025.08.18.01.50.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 01:50:01 -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: 54d520fc-7c10-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755507003; x=1756111803; 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=gDyBEr2C8bHK7ao0mUQj4cm53R0gNtsq0NOW3g9oj/Q=; b=A1rjufAi3lZXZTSURI0bfI2U/Pdc6x5j4iDByNK7ByFmpoQfM0zS22+4w1syyVupVv 9WQB/bQhMFY3NeqI0rwTX6LprJe5jaZ50Ixt2UX2iUxLT9eI2c8k/67ohtF4g7F3UaHI LbMMmzaP0umoAJOuK+BLJY9zpOv2Gf1HxNLnJJndBtUgkLYLQ+P/JmhdPNedDXUhamsz zsdlxne2GFHCQG1EPXNrsWjXQlhk1hnFz5vaTp1oYuP6Pqp13zHMtX8gvQVVrtWCJsNH MPNbfC0lT+MwpmDAybdUBox3kniuI8hd8SiLtEesN9JV+SYvmFauR6XuvBI0/w4mvawj 3OMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755507003; x=1756111803; 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=gDyBEr2C8bHK7ao0mUQj4cm53R0gNtsq0NOW3g9oj/Q=; b=J61AtUyZknAWN0zKCztKDbNHft3fHQ/VJX4CLvXtXBzeTB37vj1lEUOdCH0KIpDzEV RQNZClRUBnrinCjXdPVLMwTvQZFcp97Ouf27Xfikvubg0OsZJBjVHuDC4Rdhn0WLERKq aovoExkt4/r/4D7aMKF6q0ZC2I3C27GkWI5YOHOJ8ynPUsJUnc4RYH890Cun3g5eQkYX mT/jrr66LNFif6MqFPLgrPw8J9gyf0H7Ye+Wg6SSbPdxyEJjmsXEjy2g7sZ2lSH4cl/Z Z10BaEzQlW87R0f2YyzQ8ooDN2G34mMDS6Os3tl+tKUkgd5TyU/CjVZiak/xyKZ64DUQ nhxA== X-Gm-Message-State: AOJu0Yw1HYQ1pRsNNzcUPUOokxizNxV3rYSLDtPDKP32GTSMj1hGEnN1 6iiJaGifHhxx5DTetpH3PNXge3VNzrXXR0BqvMBCvKasVmI1A4VXpjWbFeYnVQ== X-Gm-Gg: ASbGncuoOykF3xFysDu3m/0vWN1GVAgPCKVD0yqnAKPSgVWqUGqoxbah+eXmarS5Fhd 3IL+/BY6zywIMK9RLJKL5iCmpkpDtc1G3SttHeGQz9uayv9RYEGBeifbjUGoN+AD9ItqDjIch4k ZsRWZdh/Z7k1Qk0xIMgXn1y/Dn020wBlD1Mg4ee4pXEdZPD+ol8vH+hySStcbFvy6j42Ks2aldK yscFsFsRMX7LMkW+nUYSfoftABi1uoTH8dVxqzBAMU2Ngjh4rep19fts/eSHXKuF9Q48ajoFrqz EKcL2tKxl/6BkcEDg/dOt40n4j4DpuszkhPNPoqFGcLfQW2ntdWBI9z32+1+aKP1n3q3/WCU/0r r7KGz1DfGAopo3Noe431OfQj1cC//I8JIg21ce42aOaZn+q5u6qs9/TuIQ03PUcY43Js5r5tG X-Google-Smtp-Source: AGHT+IGr02AXeA3n+BBNzDAuN5HRALbJi4k1/BBbrpK7ZkUVsp5aYN7mgH3NCmtvPfPRLdgTDba5hQ== X-Received: by 2002:a05:6512:3da1:b0:55c:c9d5:d344 with SMTP id 2adb3069b0e04-55ceeb69a1fmr2850612e87.28.1755507002219; Mon, 18 Aug 2025 01:50:02 -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 v9 3/4] SUPPORT.md: Document PSCI SYSTEM_SUSPEND support for guests Date: Mon, 18 Aug 2025 11:49:26 +0300 Message-ID: <433d74567cabf33c2a672afc0f96e58efec75c54.1755506449.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: 1755507025456124100 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 Experimental. Signed-off-by: Mykola Kvach --- 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..b5ab049b52 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: Experimental =20 ## Virtual Hardware, QEMU =20 --=20 2.48.1 From nobody Thu Oct 30 22:54:56 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=1755507021; cv=none; d=zohomail.com; s=zohoarc; b=C2LglD3azP40rjrT5TIlFnt7SW7jWaCXd5aLfX/SDv2bwLhfN4PApBN95K5Y1dQNcgVvK/tduSqBPkQvv2/QsDRozQre9sJeEC0Bqjcn4Z5KY8OgOsX09UvUXINpm5J6scbppneTf//hzx+IUjJr3bWGfTw3OZLMSm+pf+4jwYo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755507021; 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=rSXErmgf4mUOU3w7XCCgpOwuZwNZDieNzbmZWIHlqM8=; b=bFdDDPoF2iszi3p7DKCitSc6ea5dj7kYHI0ducCQiXR1LiAKj4V//JhM2+VdZIUzaAUGB9lbHnz1EdInaY5SCZRh+0LSJDS8XEywdVw6KFtfFlN9yfhv+ZF0T/hfKhFPABWy73VxIB5NtWM6E0HcveE3TBOOgG087yPXtA5nytQ= 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 1755507021566250.88479569045353; Mon, 18 Aug 2025 01:50:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1085666.1443991 (Exim 4.92) (envelope-from ) id 1unvZ8-0006YQ-Sl; Mon, 18 Aug 2025 08:50:06 +0000 Received: by outflank-mailman (output) from mailman id 1085666.1443991; Mon, 18 Aug 2025 08:50:06 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1unvZ8-0006Wr-EH; Mon, 18 Aug 2025 08:50:06 +0000 Received: by outflank-mailman (input) for mailman id 1085666; Mon, 18 Aug 2025 08:50:05 +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 1unvZ7-0005Kq-25 for xen-devel@lists.xenproject.org; Mon, 18 Aug 2025 08:50:05 +0000 Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [2a00:1450:4864:20::131]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 55874cc0-7c10-11f0-a329-13f23c93f187; Mon, 18 Aug 2025 10:50:04 +0200 (CEST) Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-55ce5097638so3957479e87.0 for ; Mon, 18 Aug 2025 01:50:04 -0700 (PDT) Received: from yp-VivoBook-ASUSLaptop-M1503QA-M1503QA.. ([95.67.15.120]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55cef351579sm1571950e87.4.2025.08.18.01.50.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 01:50:02 -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: 55874cc0-7c10-11f0-a329-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755507004; x=1756111804; 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=rSXErmgf4mUOU3w7XCCgpOwuZwNZDieNzbmZWIHlqM8=; b=cApIkXbkekwT+fQsI6J91RxvVSmbMPbjVhEaDgVM9FZjb80rfjNZHMGeYSFYajE1RP HWrp6mxPgvfXQ6zpE8xHrRQQMo+qYMYul3yoa1kzOdH69wsotNZ/h5C5qn6yF2cHl0Go gEyP2xYUte2JW98LGeJLcAmaEByjpqAw3evWy3wbKip8/ySqOv0r6LKLwwd4pg2lGUSU npBQSK/sTO/zgAPbotHUNq7o+x58sgyMXFLS/r68i89Yy4XQavJi82sEIY/aKNBJS3VT GdNVfj3ZtYgL/ws5jAXLZ0HA5RLc7/uXq9Q5b7NTrYcMfxnjg0pFfE4LbKllv9vyNZE9 FcLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755507004; x=1756111804; 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=rSXErmgf4mUOU3w7XCCgpOwuZwNZDieNzbmZWIHlqM8=; b=oK5yDPN55/31v5bVMrSDeI6Kej9vUvg/r3uB3wV/lbmzPWyC/9pfsV5w68UGdlQMeU 1TF7uIKFAkqgn2Bv30FCRPlDhzXwlAYwg9nmKsJD3YCEjyihLwYAZysESEJ7JRg+svQ0 CE2nbct0PJ2yKXm0IixQb77+ylWH1S9zaZJz0QdD701JhJHqQNG7UH5nxsnki968kDV4 /iTS6QMLG8CY9SmlAvB41Cbas1n4Hyl45OE21SQD13ArQqFLkZtPqOTXMH0s34UUvpib f9KUt3Avf3ySbz6w+8dBRCncsN6OV+gamLMjRuDPq44hlzobFdVsMOUwnnfMD2KnAtLn hFhQ== X-Gm-Message-State: AOJu0YzrHGB0YQ1qVR7I+yRd+BcYxcDkLUgHvsVGyCQpk/v2pW5x0YiO 79M8fIOYFlU3qs6QIpQwh+rZOT+kObHoCNTN75kJBn0fMSVdJO3jr/Yn9qTsgA== X-Gm-Gg: ASbGnctksdLXiFZPBlbMbIsPQylzKZlacTHvUVLFLYr46eOCdjg2BEI48RpNnfxMwk2 J0IU8LiDrs8BIDnzdust04DdcbWIcyYh1eObGKh4cdz7Dw41/j7zO59n6Ii4KEQR5V98gEUnZnp EGXqStUJYPgKTeamlHgoBS3kvU9x7DyRb+adMp+A/m3zI7ShbVZcfNdlThB8fgjazntqYBTSzeR X71rT4fIu04ITuVBIODiL+vXkNvEZbOaI9GTPwDfRujMlLbhc5IZfGYsyr53qInDADLOFTdl+Wl dEajyr67lLhzAduVtxFtK4gclmWWY/qVab0UQ0J6lWk7jgqTvY6UWAFCmRcskH2Vfq32PM2zLqT r+YpRAJ/gDc/ICNTAWIHKSG25aXMPR1pLV5zRydhEfdRq5voz+RFDZCT7wlJLcg== X-Google-Smtp-Source: AGHT+IHKP+vZ17DE5QYKRCnOIQOuto1ryTkPgpZmhlycbfPLB2vOYZ1r/2ziLH95IBblJQgzQ9+81g== X-Received: by 2002:a05:6512:1054:b0:55c:e752:e9c8 with SMTP id 2adb3069b0e04-55ceeb5aaa4mr3539987e87.44.1755507003551; Mon, 18 Aug 2025 01:50:03 -0700 (PDT) From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Mykola Kvach , Oleksii Kurochko , Community Manager Subject: [PATCH v9 4/4] CHANGELOG: Document guest suspend/resume to RAM support on Arm Date: Mon, 18 Aug 2025 11:49:27 +0300 Message-ID: <5d570383467445e4c89347d1cab7f4a3f062e740.1755506449.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: 1755507023783116600 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 5f31ca08fe..7e42ca9b59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,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