ChangeSet 1.1367, 2005/04/22 17:10:53+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx
Remove memory and cpu parameters from DOM0_CREATEDOMAIN, and remove
DOM0_SETINITIALMEM. You can get the same effect via PINCPU,
SETMAXMEM, and do_mem_op(increase_reservation).
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
tools/libxc/xc.h | 4 -
tools/libxc/xc_domain.c | 46 +++++++++++++---------
tools/libxc/xc_private.h | 53 ++++++++++++++------------
xen/arch/ia64/dom0_ops.c | 2
xen/arch/x86/dom0_ops.c | 2
xen/common/dom0_ops.c | 85 +++++++++++++-----------------------------
xen/common/dom_mem_ops.c | 10 ++--
xen/common/domain.c | 25 ------------
xen/include/asm-ia64/mm.h | 1
xen/include/public/dom0_ops.h | 16 -------
10 files changed, 90 insertions(+), 154 deletions(-)
diff -Nru a/tools/libxc/xc.h b/tools/libxc/xc.h
--- a/tools/libxc/xc.h 2005-04-22 13:03:49 -04:00
+++ b/tools/libxc/xc.h 2005-04-22 13:03:49 -04:00
@@ -353,10 +353,6 @@
int xc_sched_id(int xc_handle,
int *sched_id);
-int xc_domain_setinitialmem(int xc_handle,
- u32 domid,
- unsigned int initial_memkb);
-
int xc_domain_setmaxmem(int xc_handle,
u32 domid,
unsigned int max_memkb);
diff -Nru a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c 2005-04-22 13:03:49 -04:00
+++ b/tools/libxc/xc_domain.c 2005-04-22 13:03:49 -04:00
@@ -14,22 +14,42 @@
float cpu_weight,
u32 *pdomid)
{
- int err;
+ int err, errno_saved;
dom0_op_t op;
op.cmd = DOM0_CREATEDOMAIN;
op.u.createdomain.domain = (domid_t)*pdomid;
- op.u.createdomain.memory_kb = mem_kb;
- op.u.createdomain.cpu = cpu;
+ if ( (err = do_dom0_op(xc_handle, &op)) != 0 )
+ return err;
- if ( (err = do_dom0_op(xc_handle, &op)) == 0 )
+ *pdomid = (u16)op.u.createdomain.domain;
+
+ if ( (cpu != -1) &&
+ ((err = xc_domain_pincpu(xc_handle, *pdomid, cpu)) != 0) )
+ goto fail;
+
+ if ( (err = xc_domain_setcpuweight(xc_handle, *pdomid, cpu_weight)) != 0 )
+ goto fail;
+
+ if ( (err = xc_domain_setmaxmem(xc_handle, *pdomid, mem_kb)) != 0 )
+ goto fail;
+
+ if ( (err = do_dom_mem_op(xc_handle, MEMOP_increase_reservation,
+ NULL, mem_kb/4, 0, *pdomid)) != (mem_kb/4) )
{
- *pdomid = (u16)op.u.createdomain.domain;
-
- err = xc_domain_setcpuweight(xc_handle, *pdomid, cpu_weight);
+ if ( err > 0 )
+ errno = ENOMEM;
+ err = -1;
+ goto fail;
}
return err;
+
+ fail:
+ errno_saved = errno;
+ (void)xc_domain_destroy(xc_handle, *pdomid);
+ errno = errno_saved;
+ return err;
}
@@ -211,18 +231,6 @@
}
return ret;
-}
-
-
-int xc_domain_setinitialmem(int xc_handle,
- u32 domid,
- unsigned int initial_memkb)
-{
- dom0_op_t op;
- op.cmd = DOM0_SETDOMAININITIALMEM;
- op.u.setdomaininitialmem.domain = (domid_t)domid;
- op.u.setdomaininitialmem.initial_memkb = initial_memkb;
- return do_dom0_op(xc_handle, &op);
}
int xc_domain_setmaxmem(int xc_handle,
diff -Nru a/tools/libxc/xc_private.h b/tools/libxc/xc_private.h
--- a/tools/libxc/xc_private.h 2005-04-22 13:03:49 -04:00
+++ b/tools/libxc/xc_private.h 2005-04-22 13:03:49 -04:00
@@ -72,7 +72,7 @@
static inline int do_dom0_op(int xc_handle, dom0_op_t *op)
{
- int ret = -1, retries = 0;
+ int ret = -1, errno_saved;
privcmd_hypercall_t hypercall;
op->interface_version = DOM0_INTERFACE_VERSION;
@@ -86,26 +86,19 @@
goto out1;
}
- again:
if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 )
{
- if ( (errno == EAGAIN) && (retries++ < 10) )
- {
- /*
- * This was added for memory allocation, where we can get EAGAIN
- * if memory is unavailable because it is on the scrub list.
- */
- sleep(1);
- goto again;
- }
if ( errno == EACCES )
fprintf(stderr, "Dom0 operation failed -- need to"
" rebuild the user-space tool set?\n");
- goto out2;
}
- out2: (void)munlock(op, sizeof(*op));
- out1: return ret;
+ errno_saved = errno;
+ (void)munlock(op, sizeof(*op));
+ errno = errno_saved;
+
+ out1:
+ return ret;
}
static inline int do_dom_mem_op(int xc_handle,
@@ -117,7 +110,8 @@
{
privcmd_hypercall_t hypercall;
long ret = -EINVAL;
-
+ int errno_saved;
+
hypercall.op = __HYPERVISOR_dom_mem_op;
hypercall.arg[0] = (unsigned long)memop;
hypercall.arg[1] = (unsigned long)extent_list;
@@ -125,7 +119,8 @@
hypercall.arg[3] = (unsigned long)extent_order;
hypercall.arg[4] = (unsigned long)domid;
- if ( mlock(extent_list, nr_extents*sizeof(unsigned long)) != 0 )
+ if ( (extent_list != NULL) &&
+ (mlock(extent_list, nr_extents*sizeof(unsigned long)) != 0) )
{
PERROR("Could not lock memory for Xen hypercall");
goto out1;
@@ -134,12 +129,18 @@
if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 )
{
fprintf(stderr, "Dom_mem operation failed (rc=%ld errno=%d)-- need to"
- " rebuild the user-space tool set?\n",ret,errno);
- goto out2;
+ " rebuild the user-space tool set?\n",ret,errno);
+ }
+
+ if ( extent_list != NULL )
+ {
+ errno_saved = errno;
+ (void)munlock(extent_list, nr_extents*sizeof(unsigned long));
+ errno = errno_saved;
}
- out2: (void)munlock(extent_list, nr_extents*sizeof(unsigned long));
- out1: return ret;
+ out1:
+ return ret;
}
static inline int do_mmuext_op(
@@ -150,7 +151,8 @@
{
privcmd_hypercall_t hypercall;
long ret = -EINVAL;
-
+ int errno_saved;
+
hypercall.op = __HYPERVISOR_mmuext_op;
hypercall.arg[0] = (unsigned long)op;
hypercall.arg[1] = (unsigned long)nr_ops;
@@ -167,11 +169,14 @@
{
fprintf(stderr, "Dom_mem operation failed (rc=%ld errno=%d)-- need to"
" rebuild the user-space tool set?\n",ret,errno);
- goto out2;
}
- out2: (void)munlock(op, nr_ops*sizeof(*op));
- out1: return ret;
+ errno_saved = errno;
+ (void)munlock(op, nr_ops*sizeof(*op));
+ errno = errno_saved;
+
+ out1:
+ return ret;
}
diff -Nru a/xen/arch/ia64/dom0_ops.c b/xen/arch/ia64/dom0_ops.c
--- a/xen/arch/ia64/dom0_ops.c 2005-04-22 13:03:49 -04:00
+++ b/xen/arch/ia64/dom0_ops.c 2005-04-22 13:03:49 -04:00
@@ -24,8 +24,6 @@
#define TRC_DOM0OP_ENTER_BASE 0x00020000
#define TRC_DOM0OP_LEAVE_BASE 0x00030000
-extern unsigned int alloc_new_dom_mem(struct domain *, unsigned int);
-
static int msr_cpu_mask;
static unsigned long msr_addr;
static unsigned long msr_lo;
diff -Nru a/xen/arch/x86/dom0_ops.c b/xen/arch/x86/dom0_ops.c
--- a/xen/arch/x86/dom0_ops.c 2005-04-22 13:03:49 -04:00
+++ b/xen/arch/x86/dom0_ops.c 2005-04-22 13:03:49 -04:00
@@ -26,8 +26,6 @@
#define TRC_DOM0OP_ENTER_BASE 0x00020000
#define TRC_DOM0OP_LEAVE_BASE 0x00030000
-extern unsigned int alloc_new_dom_mem(struct domain *, unsigned int);
-
static int msr_cpu_mask;
static unsigned long msr_addr;
static unsigned long msr_lo;
diff -Nru a/xen/common/dom0_ops.c b/xen/common/dom0_ops.c
--- a/xen/common/dom0_ops.c 2005-04-22 13:03:49 -04:00
+++ b/xen/common/dom0_ops.c 2005-04-22 13:03:49 -04:00
@@ -19,7 +19,6 @@
#include <xen/physdev.h>
#include <public/sched_ctl.h>
-extern unsigned int alloc_new_dom_mem(struct domain *, unsigned int);
extern long arch_do_dom0_op(dom0_op_t *op, dom0_op_t *u_dom0_op);
extern void arch_getdomaininfo_ctxt(
struct exec_domain *, full_execution_context_t *);
@@ -153,9 +152,12 @@
case DOM0_CREATEDOMAIN:
{
- struct domain *d;
- unsigned int pro;
- domid_t dom;
+ struct domain *d;
+ unsigned int pro;
+ domid_t dom;
+ struct exec_domain *ed;
+ unsigned int i, ht, cnt[NR_CPUS] = { 0 };
+
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|