aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-08-20 16:42:16 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-08-20 16:42:16 +0000
commitec114986f0332aedfb148ca5aa19570bc14c6740 (patch)
tree8c707521fc1f4c672ca5babafcde215c6a6f3200
parentaacd829062b0e4d6c5d9edf8eb393a27d15a732c (diff)
downloadxen-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.c16
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);