From: iap10@tetris.cl.cam.ac.uk Date: Fri, 2 Apr 2004 14:03:03 +0000 (+0000) Subject: bitkeeper revision 1.834 (406d7297L8YEnoDy3p-Js-U7j2roug) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~18287 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=72ab8c7adebff63d3a4b6ac540cf0ea842442b6a;p=xen.git bitkeeper revision 1.834 (406d7297L8YEnoDy3p-Js-U7j2roug) manual merge as two conflicting dom0 ops --- 72ab8c7adebff63d3a4b6ac540cf0ea842442b6a diff --cc tools/xc/py/Xc.c index 4c82b03d73,3cbbe7efa6..5114b52afe --- a/tools/xc/py/Xc.c +++ b/tools/xc/py/Xc.c @@@ -914,28 -986,22 +986,44 @@@ static PyObject *pyxc_rrobin_global_set return zero; } +static PyObject *pyxc_shadow_control(PyObject *self, + PyObject *args, + PyObject *kwds) +{ + XcObject *xc = (XcObject *)self; + + u64 dom; + int op=0; + + static char *kwd_list[] = { "dom", "op", NULL }; + + if ( !PyArg_ParseTupleAndKeywords(args, kwds, "L|i", kwd_list, + &dom, &op) ) + return NULL; + + if ( xc_shadow_control(xc->xc_handle, dom, op) != 0 ) + return PyErr_SetFromErrno(xc_error); + + Py_INCREF(zero); + return zero; +} + + static PyObject *pyxc_rrobin_global_get(PyObject *self, + PyObject *args, + PyObject *kwds) + { + XcObject *xc = (XcObject *)self; + u64 slice; + + if ( !PyArg_ParseTuple(args, "") ) + return NULL; + + if ( xc_rrobin_global_get(xc->xc_handle, &slice) != 0 ) + return PyErr_SetFromErrno(xc_error); + + return Py_BuildValue("s:L", "slice", slice); + } + static PyMethodDef pyxc_methods[] = { { "domain_create", diff --cc xen/common/dom0_ops.c index db4ea2acd4,4c1a3cdefd..7251b71d63 --- a/xen/common/dom0_ops.c +++ b/xen/common/dom0_ops.c @@@ -495,18 -487,13 +496,26 @@@ long do_dom0_op(dom0_op_t *u_dom0_op } break; + case DOM0_SHADOW_CONTROL: + { + struct task_struct *p; + + p = find_domain_by_id( op->u.shadow_control.domain ); + if ( p ) + { + ret = shadow_mode_control(p, op->u.shadow_control.op ); + put_task_struct(p); + } + } + break; ++ + case DOM0_SCHED_ID: + { + op->u.sched_id.sched_id = sched_id(); + + copy_to_user(u_dom0_op, op, sizeof(*op)); + ret = 0; + } default: ret = -ENOSYS; diff --cc xen/common/domain.c index 8b9dd6916d,e86a5eba27..2db0331d89 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@@ -849,14 -1017,11 +1017,11 @@@ int construct_dom0(struct task_struct * set_bit(PF_CONSTRUCTED, &p->flags); - #if 0 // XXXXX DO NOT CHECK IN ENBALED !!! (but useful for testing so leave) + #if 0 // XXXXX DO NOT CHECK IN ENABLED !!! (but useful for testing so leave) - shadow_mode_enable(p, SHM_test); + shadow_mode_enable(&p->mm, SHM_test); #endif - new_thread(p, - (unsigned long)virt_load_address, - (unsigned long)virt_stack_address, - (unsigned long)virt_startinfo_address); + new_thread(p, vkern_entry, vstack_end, vstartinfo_start); return 0; } diff --cc xen/include/hypervisor-ifs/dom0_ops.h index 70cf92225b,251f4853a4..7dc221ad77 --- a/xen/include/hypervisor-ifs/dom0_ops.h +++ b/xen/include/hypervisor-ifs/dom0_ops.h @@@ -214,24 -213,16 +213,34 @@@ typedef struct dom0_pcidev_access_s int enable; } dom0_pcidev_access_t; + /* + * Get the ID of the current scheduler. + */ + #define DOM0_SCHED_ID 24 + typedef struct dom0_sched_id_st + { + /* OUT variable */ + int sched_id; + } dom0_sched_id_t; + +/* + * Control shadow pagetables operation + */ - #define DOM0_SHADOW_CONTROL 24 ++#define DOM0_SHADOW_CONTROL 25 + +#define DOM0_SHADOW_CONTROL_OP_OFF 0 +#define DOM0_SHADOW_CONTROL_OP_ENABLE_TEST 1 +#define DOM0_SHADOW_CONTROL_OP_ENABLE_LOGDIRTY 2 +#define DOM0_SHADOW_CONTROL_OP_FLUSH 10 +#define DOM0_SHADOW_CONTROL_OP_CLEAN 11 +typedef struct dom0_shadow_control_st +{ + /* IN variables. */ + domid_t domain; + int op; +} dom0_shadow_control_t; + + typedef struct dom0_op_st { unsigned long cmd; @@@ -257,7 -248,7 +266,8 @@@ dom0_gettbufs_t gettbufs; dom0_physinfo_t physinfo; dom0_pcidev_access_t pcidev_access; + dom0_sched_id_t sched_id; + dom0_shadow_control_t shadow_control; } u; } dom0_op_t; diff --cc xen/include/xen/sched-if.h index cf7358719a,7e55f46b91..51579c4086 --- a/xen/include/xen/sched-if.h +++ b/xen/include/xen/sched-if.h @@@ -50,7 -49,7 +49,8 @@@ struct schedule void (*dump_settings) (void); void (*dump_cpu_state) (int); void (*dump_runq_el) (struct task_struct *); + int (*prn_state) (int); + void (*pause) (struct task_struct *); }; /* per CPU scheduler information */ diff --cc xen/include/xen/sched.h index ad8d3c68fd,033f860c01..fcccf3fa23 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@@ -266,7 -273,7 +274,8 @@@ void sched_add_domain(struct task_struc int sched_rem_domain(struct task_struct *p); long sched_ctl(struct sched_ctl_cmd *); long sched_adjdom(struct sched_adjdom_cmd *); + int sched_id(); +void sched_pause_sync(struct task_struct *); void init_idle_task(void); void __wake_up(struct task_struct *p); void wake_up(struct task_struct *p);