Message ID | 931418d761e47eee7847e6bd559e02597cbab1b6.1665137247.git.mykyta_poturai@epam.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/19] xen/arm: Implement PSCI system suspend | expand |
Hi, On 07/10/2022 11:32, Mykyta Poturai wrote: > From: Mirela Simonovic <mirela.simonovic@aggios.com> > > These functions will be reused by suspend/resume support for ARM. > > Signed-off-by: Mirela Simonovic <mirela.simonovic@aggios.com> > Signed-off-by: Saeed Nowshadi <saeed.nowshadi@xilinx.com> Your Signed-off-by is missing. > --- > xen/common/domain.c | 29 +++++++++++++++++++++++++++++ The title suggests that there will be code movement. However... I only see addition here. Did you intend to remove the functions from arch/x86/acpi/power.c? > xen/include/xen/sched.h | 3 +++ > 2 files changed, 32 insertions(+) > > diff --git a/xen/common/domain.c b/xen/common/domain.c > index 56d47dd664..5e5894c468 100644 > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -1884,6 +1884,35 @@ int continue_hypercall_on_cpu( > return 0; > } > > + > +void freeze_domains(void) > +{ > + struct domain *d; > + > + rcu_read_lock(&domlist_read_lock); > + /* > + * Note that we iterate in order of domain-id. Hence we will pause dom0 > + * first which is required for correctness (as only dom0 can add domains to > + * the domain list). Otherwise we could miss concurrently-created domains. > + */ > + for_each_domain ( d ) > + domain_pause(d); > + rcu_read_unlock(&domlist_read_lock); > +} > + > +void thaw_domains(void) > +{ > + struct domain *d; > + > + rcu_read_lock(&domlist_read_lock); > + for_each_domain ( d ) > + { > + restore_vcpu_affinity(d); > + domain_unpause(d); > + } > + rcu_read_unlock(&domlist_read_lock); > +} > + > /* > * Local variables: > * mode: C > diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h > index 00a939aa01..c8ddfdd51c 100644 > --- a/xen/include/xen/sched.h > +++ b/xen/include/xen/sched.h > @@ -978,6 +978,9 @@ static inline struct vcpu *domain_vcpu(const struct domain *d, > return vcpu_id >= d->max_vcpus ? NULL : d->vcpu[idx]; > } > > +void freeze_domains(void); > +void thaw_domains(void); > + > void cpu_init(void); > > /* Cheers,
diff --git a/xen/common/domain.c b/xen/common/domain.c index 56d47dd664..5e5894c468 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1884,6 +1884,35 @@ int continue_hypercall_on_cpu( return 0; } + +void freeze_domains(void) +{ + struct domain *d; + + rcu_read_lock(&domlist_read_lock); + /* + * Note that we iterate in order of domain-id. Hence we will pause dom0 + * first which is required for correctness (as only dom0 can add domains to + * the domain list). Otherwise we could miss concurrently-created domains. + */ + for_each_domain ( d ) + domain_pause(d); + rcu_read_unlock(&domlist_read_lock); +} + +void thaw_domains(void) +{ + struct domain *d; + + rcu_read_lock(&domlist_read_lock); + for_each_domain ( d ) + { + restore_vcpu_affinity(d); + domain_unpause(d); + } + rcu_read_unlock(&domlist_read_lock); +} + /* * Local variables: * mode: C diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 00a939aa01..c8ddfdd51c 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -978,6 +978,9 @@ static inline struct vcpu *domain_vcpu(const struct domain *d, return vcpu_id >= d->max_vcpus ? NULL : d->vcpu[idx]; } +void freeze_domains(void); +void thaw_domains(void); + void cpu_init(void); /*