aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-05-19 09:35:08 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-05-19 09:35:08 +0000
commit5ac60a25d9c33cd8b027f59b1d3fe821d6a4b7d2 (patch)
treea73345d4ef0f1336ca7ba399e69c0d8179fd68f1
parentd48232a5fb98f1cc87f9e697ee65b26b0d5237f2 (diff)
downloadxen-5ac60a25d9c33cd8b027f59b1d3fe821d6a4b7d2.tar.gz
xen-5ac60a25d9c33cd8b027f59b1d3fe821d6a4b7d2.tar.bz2
xen-5ac60a25d9c33cd8b027f59b1d3fe821d6a4b7d2.zip
bitkeeper revision 1.239.1.1 (3ec8a54czDaKIhP-DcWe6orB0zUv-Q)
dom0_ops.c: Correctly handle domain-not-found when executing a dom0 op.
-rw-r--r--xen/common/dom0_ops.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/xen/common/dom0_ops.c b/xen/common/dom0_ops.c
index c62b68b919..ec1e9df604 100644
--- a/xen/common/dom0_ops.c
+++ b/xen/common/dom0_ops.c
@@ -79,9 +79,13 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
case DOM0_BUILDDOMAIN:
{
struct task_struct * p = find_domain_by_id(op.u.meminfo.domain);
- if ( (ret = final_setup_guestos(p, &op.u.meminfo)) == 0 )
- ret = p->domain;
- put_task_struct(p);
+ ret = -EINVAL;
+ if ( p != NULL )
+ {
+ if ( (ret = final_setup_guestos(p, &op.u.meminfo)) == 0 )
+ ret = p->domain;
+ put_task_struct(p);
+ }
}
break;
@@ -94,14 +98,14 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
wake_up(p);
reschedule(p);
ret = p->domain;
+ put_task_struct(p);
}
- put_task_struct(p);
}
break;
case DOM0_STOPDOMAIN:
{
- ret = stop_other_domain (op.u.meminfo.domain);
+ ret = stop_other_domain(op.u.meminfo.domain);
}
break;
@@ -153,14 +157,7 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
{
unsigned int dom = op.u.killdomain.domain;
int force = op.u.killdomain.force;
- if ( dom == IDLE_DOMAIN_ID )
- {
- ret = -EPERM;
- }
- else
- {
- ret = kill_other_domain(dom, force);
- }
+ ret = (dom == IDLE_DOMAIN_ID) ? -EPERM : kill_other_domain(dom, force);
}
break;
@@ -179,15 +176,10 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
unsigned long warp = op.u.adjustdom.warp;
unsigned long warpl = op.u.adjustdom.warpl;
unsigned long warpu = op.u.adjustdom.warpu;
-
- if ( dom == IDLE_DOMAIN_ID )
- {
- ret = -EPERM;
- }
- else
- {
+
+ ret = -EPERM;
+ if ( dom != IDLE_DOMAIN_ID )
ret = sched_adjdom(dom, mcu_adv, warp, warpl, warpu);
- }
}
break;