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",
}
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;
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;
}
int enable;
} dom0_pcidev_access_t;
- #define DOM0_SHADOW_CONTROL 24
+ /*
+ * 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 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;
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;
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 */
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);