|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 1/4] xen/arm: Implement PSCI SYSTEM_SUSPEND call for guests
Hi Mykola, On 27/06/2025 11:51, Mykola Kvach wrote: diff --git a/xen/arch/arm/include/asm/perfc_defn.h b/xen/arch/arm/include/asm/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_reset") 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")PERFCOUNTER(vcpu_kick, "vcpu: notify other vcpu") diff --git a/xen/arch/arm/include/asm/psci.h b/xen/arch/arm/include/asm/psci.hindex 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)#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)/* 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/vpsci.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 <asm/psci.h>/* Number of function implemented by virtual PSCI (only 0.2 or later) */-#define VPSCI_NR_FUNCS 12 +#define VPSCI_NR_FUNCS 14/* 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/mmu/p2m.c b/xen/arch/arm/mmu/p2m.c index 67296dabb5..f9c09a49e2 100644 --- a/xen/arch/arm/mmu/p2m.c +++ b/xen/arch/arm/mmu/p2m.c @@ -6,6 +6,8 @@ #include <xen/sched.h> #include <xen/softirq.h>+#include <public/sched.h> This is definitely not obvious why you need to change p2m_save_state(). AFAIU, you are doing this because when suspending the system, you will overwrite p->arch.sctlr. However, this is super fragile. For instance, you still seem to overwrite TTBR{0,1} and TTBCR. TTBR{0,1} are technically unknown at boot. So it is fine to ignore them. But for TTBCR, I am not 100% whether this is supposed to be unknown. Anyway, adding more "if (...)" is not the right solution because in the future we may decide to reset more registers. It would be better if we stash the value sand then update the registers. Another possibility would be to entirely skip the save path for CPUs that are turned off (after all this is a bit useless work...). This looks like an open-coding version of domain_resume() without the domain_{,un}pause(). What worries me is there is a comment on top of domain_pause() explaining why it is called. I understand, we can't call domain_pause() here (it doesn't work on the current domain). However, it feels to me there is an explanation necessary why this is fine to diverge. I am not a scheduler expert, so I am CCing Juergen in the hope he could provide some inputs. It would be good to add a comment explaining why you need to call domain_shutdown() first. Otherwise, one could wonder whether we can get rid of the complexity when a vCPU is still online. + + /* Ensure that all CPUs other than the calling one are offline */ + for_each_vcpu ( d, v ) NIT: Even if this is a single "statement" below, I think adding the brace would make the code clearer.
Coding style: For the two lines above, there is a missing space after ",".Also, if a 64-bit domain is calling the 32-bit version, then we also need to ignore the top 32-bits. AFAICT CPU_ON also have the same issue. I am not going to ask fixing CPU_ON (it would be good though), but I will at least ask we don't spread the mistake further. Cheers, -- Julien Grall
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |