diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-08-20 16:42:16 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-08-20 16:42:16 +0000 |
commit | ec114986f0332aedfb148ca5aa19570bc14c6740 (patch) | |
tree | 8c707521fc1f4c672ca5babafcde215c6a6f3200 | |
parent | aacd829062b0e4d6c5d9edf8eb393a27d15a732c (diff) | |
download | xen-ec114986f0332aedfb148ca5aa19570bc14c6740.tar.gz xen-ec114986f0332aedfb148ca5aa19570bc14c6740.tar.bz2 xen-ec114986f0332aedfb148ca5aa19570bc14c6740.zip |
bitkeeper revision 1.1159.45.14 (412629e8AO8Ty3LNUQeMVLVbHFMAQQ)
Fix SET_FOREIGNDOM
-rw-r--r-- | xen/arch/x86/memory.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/xen/arch/x86/memory.c b/xen/arch/x86/memory.c index 5152e39648..1cced82a7d 100644 --- a/xen/arch/x86/memory.c +++ b/xen/arch/x86/memory.c @@ -864,12 +864,17 @@ static int do_extended_command(unsigned long ptr, unsigned long val) case MMUEXT_SET_FOREIGNDOM: domid = (domid_t)(val >> 16); + if ( (e = percpu_info[cpu].foreign) != NULL ) + put_domain(e); + percpu_info[cpu].foreign = NULL; + if ( !IS_PRIV(d) ) { switch ( domid ) { case DOMID_IO: - get_knownalive_domain(e = dom_io); + get_knownalive_domain(dom_io); + percpu_info[cpu].foreign = dom_io; break; default: MEM_LOG("Dom %u cannot set foreign dom\n", d->domain); @@ -879,19 +884,18 @@ static int do_extended_command(unsigned long ptr, unsigned long val) } else { - if ( (e = percpu_info[cpu].foreign) != NULL ) - put_domain(e); - percpu_info[cpu].foreign = e = find_domain_by_id(domid); if ( e == NULL ) { switch ( domid ) { case DOMID_XEN: - get_knownalive_domain(e = dom_xen); + get_knownalive_domain(dom_xen); + percpu_info[cpu].foreign = dom_xen; break; case DOMID_IO: - get_knownalive_domain(e = dom_io); + get_knownalive_domain(dom_io); + percpu_info[cpu].foreign = dom_io; break; default: MEM_LOG("Unknown domain '%u'", domid); |