|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 01/10] xen/arm: Introduce steps in domain_relinquish_resource
In a later patch, a new step will be added. It will avoid to check every step
when the function was preempted.
Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
Changes in v2:
- Introduce the patch
---
xen/arch/arm/domain.c | 37 ++++++++++++++++++++++++++++++-------
xen/include/asm-arm/domain.h | 8 ++++++++
2 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index 67c65c3..1590708 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -497,6 +497,8 @@ int arch_domain_create(struct domain *d, unsigned int
domcr_flags)
{
int rc;
+ d->arch.relmem = RELMEM_not_started;
+
/* Idle domains do not need this setup */
if ( is_idle_domain(d) )
return 0;
@@ -696,15 +698,36 @@ int domain_relinquish_resources(struct domain *d)
{
int ret = 0;
- ret = relinquish_memory(d, &d->xenpage_list);
- if ( ret )
- return ret;
+ switch ( d->arch.relmem )
+ {
+ case RELMEM_not_started:
+ d->arch.relmem = RELMEM_xen;
+ /* Falltrough */
- ret = relinquish_memory(d, &d->page_list);
- if ( ret )
- return ret;
+ case RELMEM_xen:
+ ret = relinquish_memory(d, &d->xenpage_list);
+ if ( ret )
+ return ret;
- return ret;
+ d->arch.relmem = RELMEM_page;
+ /* Fallthrough */
+
+ case RELMEM_page:
+ ret = relinquish_memory(d, &d->page_list);
+ if ( ret )
+ return ret;
+
+ d->arch.relmem = RELMEM_done;
+ /* Fallthrough */
+
+ case RELMEM_done:
+ break;
+
+ default:
+ BUG();
+ }
+
+ return 0;
}
void arch_dump_domain_info(struct domain *d)
diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h
index 8ebee3e..922eda3 100644
--- a/xen/include/asm-arm/domain.h
+++ b/xen/include/asm-arm/domain.h
@@ -70,6 +70,14 @@ struct arch_domain
struct hvm_domain hvm_domain;
xen_pfn_t *grant_table_gpfn;
+ /* Continuable domain_relinquish_resources(). */
+ enum {
+ RELMEM_not_started,
+ RELMEM_xen,
+ RELMEM_page,
+ RELMEM_done,
+ } relmem;
+
/* Virtual CPUID */
uint32_t vpidr;
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |