Mailing List Archive

Fix dummy domains (DOM_IO and DOM_XEN) creation so that
# HG changeset patch
# User kfraser@dhcp93.uk.xensource.com
# Node ID ab627e9da8fb7be385f4e713ac184c275aba7c7c
# Parent 2dd8e7c4472897a86cac635b6982fa55f1ab6e07
Fix dummy domains (DOM_IO and DOM_XEN) creation so that
list heads are initialised.
Signed-off-by: Keir Fraser <keir@xensource.com>
---
xen/arch/ia64/xen/domain.c | 14 ++------------
xen/arch/x86/mm.c | 12 ++++--------
xen/common/domain.c | 19 +++++--------------
xen/common/schedule.c | 14 +++++++++++---
xen/include/xen/sched.h | 4 ++--
5 files changed, 24 insertions(+), 39 deletions(-)

diff -r 2dd8e7c44728 -r ab627e9da8fb xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Thu Jun 01 16:31:37 2006 +0100
+++ b/xen/arch/ia64/xen/domain.c Thu Jun 01 16:39:42 2006 +0100
@@ -92,26 +92,16 @@ alloc_dom_xen_and_dom_io(void)
* Any Xen-heap pages that we will allow to be mapped will have
* their domain field set to dom_xen.
*/
- dom_xen = alloc_domain();
+ dom_xen = alloc_domain(DOMID_XEN);
BUG_ON(dom_xen == NULL);
- spin_lock_init(&dom_xen->page_alloc_lock);
- INIT_LIST_HEAD(&dom_xen->page_list);
- INIT_LIST_HEAD(&dom_xen->xenpage_list);
- atomic_set(&dom_xen->refcnt, 1);
- dom_xen->domain_id = DOMID_XEN;

/*
* Initialise our DOMID_IO domain.
* This domain owns I/O pages that are within the range of the page_info
* array. Mappings occur at the priv of the caller.
*/
- dom_io = alloc_domain();
+ dom_io = alloc_domain(DOMID_IO);
BUG_ON(dom_io == NULL);
- spin_lock_init(&dom_io->page_alloc_lock);
- INIT_LIST_HEAD(&dom_io->page_list);
- INIT_LIST_HEAD(&dom_io->xenpage_list);
- atomic_set(&dom_io->refcnt, 1);
- dom_io->domain_id = DOMID_IO;
}
#endif

diff -r 2dd8e7c44728 -r ab627e9da8fb xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Thu Jun 01 16:31:37 2006 +0100
+++ b/xen/arch/x86/mm.c Thu Jun 01 16:39:42 2006 +0100
@@ -187,20 +187,16 @@ void arch_init_memory(void)
* Any Xen-heap pages that we will allow to be mapped will have
* their domain field set to dom_xen.
*/
- dom_xen = alloc_domain();
- spin_lock_init(&dom_xen->page_alloc_lock);
- atomic_set(&dom_xen->refcnt, 1);
- dom_xen->domain_id = DOMID_XEN;
+ dom_xen = alloc_domain(DOMID_XEN);
+ BUG_ON(dom_xen == NULL);

/*
* Initialise our DOMID_IO domain.
* This domain owns I/O pages that are within the range of the page_info
* array. Mappings occur at the priv of the caller.
*/
- dom_io = alloc_domain();
- spin_lock_init(&dom_io->page_alloc_lock);
- atomic_set(&dom_io->refcnt, 1);
- dom_io->domain_id = DOMID_IO;
+ dom_io = alloc_domain(DOMID_IO);
+ BUG_ON(dom_io == NULL);

/* First 1MB of RAM is historically marked as I/O. */
for ( i = 0; i < 0x100; i++ )
diff -r 2dd8e7c44728 -r ab627e9da8fb xen/common/domain.c
--- a/xen/common/domain.c Thu Jun 01 16:31:37 2006 +0100
+++ b/xen/common/domain.c Thu Jun 01 16:39:42 2006 +0100
@@ -32,22 +32,13 @@ struct domain *domain_list;

struct domain *dom0;

-struct domain *domain_create(domid_t dom_id, unsigned int cpu)
+struct domain *domain_create(domid_t domid, unsigned int cpu)
{
struct domain *d, **pd;
struct vcpu *v;

- if ( (d = alloc_domain()) == NULL )
+ if ( (d = alloc_domain(domid)) == NULL )
return NULL;
-
- d->domain_id = dom_id;
-
- atomic_set(&d->refcnt, 1);
-
- spin_lock_init(&d->big_lock);
- spin_lock_init(&d->page_alloc_lock);
- INIT_LIST_HEAD(&d->page_list);
- INIT_LIST_HEAD(&d->xenpage_list);

rangeset_domain_initialise(d);

@@ -74,14 +65,14 @@ struct domain *domain_create(domid_t dom
if ( !is_idle_domain(d) )
{
write_lock(&domlist_lock);
- pd = &domain_list; /* NB. domain_list maintained in order of dom_id. */
+ pd = &domain_list; /* NB. domain_list maintained in order of domid. */
for ( pd = &domain_list; *pd != NULL; pd = &(*pd)->next_in_list )
if ( (*pd)->domain_id > d->domain_id )
break;
d->next_in_list = *pd;
*pd = d;
- d->next_in_hashbucket = domain_hash[DOMAIN_HASH(dom_id)];
- domain_hash[DOMAIN_HASH(dom_id)] = d;
+ d->next_in_hashbucket = domain_hash[DOMAIN_HASH(domid)];
+ domain_hash[DOMAIN_HASH(domid)] = d;
write_unlock(&domlist_lock);
}

diff -r 2dd8e7c44728 -r ab627e9da8fb xen/common/schedule.c
--- a/xen/common/schedule.c Thu Jun 01 16:31:37 2006 +0100
+++ b/xen/common/schedule.c Thu Jun 01 16:39:42 2006 +0100
@@ -99,12 +99,20 @@ void vcpu_runstate_get(struct vcpu *v, s
}
}

-struct domain *alloc_domain(void)
+struct domain *alloc_domain(domid_t domid)
{
struct domain *d;

- if ( (d = xmalloc(struct domain)) != NULL )
- memset(d, 0, sizeof(*d));
+ if ( (d = xmalloc(struct domain)) == NULL )
+ return NULL;
+
+ memset(d, 0, sizeof(*d));
+ d->domain_id = domid;
+ atomic_set(&d->refcnt, 1);
+ spin_lock_init(&d->big_lock);
+ spin_lock_init(&d->page_alloc_lock);
+ INIT_LIST_HEAD(&d->page_list);
+ INIT_LIST_HEAD(&d->xenpage_list);

return d;
}
diff -r 2dd8e7c44728 -r ab627e9da8fb xen/include/xen/sched.h
--- a/xen/include/xen/sched.h Thu Jun 01 16:31:37 2006 +0100
+++ b/xen/include/xen/sched.h Thu Jun 01 16:39:42 2006 +0100
@@ -189,7 +189,7 @@ struct vcpu *alloc_vcpu(
struct vcpu *alloc_vcpu(
struct domain *d, unsigned int vcpu_id, unsigned int cpu_id);

-struct domain *alloc_domain(void);
+struct domain *alloc_domain(domid_t domid);
void free_domain(struct domain *d);

#define DOMAIN_DESTROYED (1<<31) /* assumes atomic_t is >= 32 bits */
@@ -226,7 +226,7 @@ static inline void get_knownalive_domain
}

extern struct domain *domain_create(
- domid_t dom_id, unsigned int cpu);
+ domid_t domid, unsigned int cpu);
extern int construct_dom0(
struct domain *d,
unsigned long image_start, unsigned long image_len,

_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xensource.com
http://lists.xensource.com/xen-changelog