mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Fix dummy domains (DOM_IO and DOM_XEN) creation so that
list heads are initialised. Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
1 parent
f7ec354306
commit
cf220cf03b
5 files changed
+24
-39
No files matched your search
@@ -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
|
||||
|
||||
|
||||
+4
-8
@@ -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++ )
|
||||
|
||||
+5
-14
@@ -32,23 +32,14 @@ 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);
|
||||
|
||||
if ( !is_idle_domain(d) )
|
||||
@@ -74,14 +65,14 @@ struct domain *domain_create(domid_t dom_id, unsigned int cpu)
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
+11
-3
@@ -99,12 +99,20 @@ void vcpu_runstate_get(struct vcpu *v, struct vcpu_runstate_info *runstate)
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ extern struct vcpu *idle_vcpu[NR_CPUS];
|
||||
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(struct domain *d)
|
||||
}
|
||||
|
||||
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,
|
||||
|
||||