bitkeeper revision 1.809 (4059b6abq9zvnfmJ9cVcMhBo_lOhew)

Many files:
  Scheduler updates.
sched_ctl.h:
  Rename: xen/include/hypervisor-ifs/sched-ctl.h -> xen/include/hypervisor-ifs/sched_ctl.h
This commit is contained in:
kaf24@scramble.cl.cam.ac.uk committed 2004-03-18 14:48:11 +00:00
1 parent bee5b0bb13
commit fcaa8335c3
14 files changed
+65 -78

No files matched your search

+1 -1
View File
@@ -501,7 +501,7 @@
3ead095dE_VF-QA88rl_5cWYRWtRVQ xen/include/hypervisor-ifs/kbd.h
3ddb79c2oRPrzClk3zbTkRHlpumzKA xen/include/hypervisor-ifs/network.h
4051db79512nOCGweabrFWO2M2h5ng xen/include/hypervisor-ifs/physdev.h
40589968wmhPmV5-ENbBYmMjnedgKw xen/include/hypervisor-ifs/sched-ctl.h
40589968wmhPmV5-ENbBYmMjnedgKw xen/include/hypervisor-ifs/sched_ctl.h
404f3d2eR2Owk-ZcGOx9ULGHg3nrww xen/include/hypervisor-ifs/trace.h
3f0d22cbroqp_BkoDPwkfRJhaw1LiQ xen/include/hypervisor-ifs/vbd.h
3ddb79c4qbCoOFHrv9sCGshbWzBVlQ xen/include/scsi/scsi.h
+3 -5
View File
@@ -12,11 +12,12 @@ int xc_atropos_global_set(int xc_handle,
unsigned long ctx_allow)
{
dom0_op_t op;
op.cmd = DOM0_SCHEDCTL;
op.u.schedctl.if_ver = SCHED_CTL_IF_VER;
op.u.schedctl.sched_id = SCHED_BVT;
op.u.schedctl.u.bvt.ctx_allow = ctx_allow;
return do_dom0_op(xc_handle, &op);
}
@@ -24,15 +25,12 @@ int xc_atropos_domain_set(int xc_handle,
u64 domid, int xtratime)
{
dom0_op_t op;
op.cmd = DOM0_ADJUSTDOM;
op.cmd = DOM0_ADJUSTDOM;
op.u.adjustdom.domain = (domid_t)domid;
op.u.adjustdom.if_ver = SCHED_CTL_IF_VER;
op.u.adjustdom.sched_id = SCHED_ATROPOS;
op.u.adjustdom.u.atropos.xtratime = xtratime;
printf("Doing dom0 op!\n");
return do_dom0_op(xc_handle, &op);
}
+10 -8
View File
@@ -12,10 +12,12 @@ int xc_bvtsched_global_set(int xc_handle,
unsigned long ctx_allow)
{
dom0_op_t op;
op.cmd = DOM0_SCHEDCTL;
op.u.schedctl.sched_id = SCHED_BVT;
op.u.schedctl.if_ver = SCHED_CTL_IF_VER;
op.u.schedctl.u.bvt.ctx_allow = ctx_allow;
return do_dom0_op(xc_handle, &op);
}
@@ -27,16 +29,16 @@ int xc_bvtsched_domain_set(int xc_handle,
unsigned long warpu)
{
dom0_op_t op;
struct bvt_adjdom *adjptr = &op.u.adjustdom.u.bvt;
struct bvt_adjdom *bvtadj = &op.u.adjustdom.u.bvt;
op.cmd = DOM0_ADJUSTDOM;
op.u.adjustdom.sched_id = SCHED_BVT;
op.u.adjustdom.if_ver = SCHED_CTL_IF_VER;
op.u.adjustdom.domain = (domid_t)domid;
op.u.adjustdom.sched_id = SCHED_BVT;
bvtadj->mcu_adv = mcuadv;
bvtadj->warp = warp;
bvtadj->warpl = warpl;
bvtadj->warpu = warpu;
adjptr->mcu_adv = mcuadv;
adjptr->warp = warp;
adjptr->warpl = warpl;
adjptr->warpu = warpu;
return do_dom0_op(xc_handle, &op);
}
+1 -1
View File
@@ -23,7 +23,7 @@
#include <dom0_ops.h>
#include <vbd.h>
#include <event_channel.h>
#include <sched-ctl.h>
#include <sched_ctl.h>
#define _PAGE_PRESENT 0x001
#define _PAGE_RW 0x002
+2 -1
View File
@@ -11,10 +11,11 @@
int xc_rrobin_global_set(int xc_handle, u64 slice)
{
dom0_op_t op;
op.cmd = DOM0_SCHEDCTL;
op.u.schedctl.if_ver = SCHED_CTL_IF_VER;
op.u.schedctl.sched_id = SCHED_RROBIN;
op.u.schedctl.u.rrobin.slice = slice;
return do_dom0_op(xc_handle, &op);
}
+1 -1
View File
@@ -4,7 +4,7 @@ all:
install: all
if [ "$(prefix)" = "" ]; then python setup.py install; \
else python setup.py install --home="$(prefix)"; fi
else python setup.py install --root="$(prefix)"; fi
clean:
rm -rf build *.pyc *.pyo *.o *.a *~
+1 -1
View File
@@ -4,7 +4,7 @@ all:
install: all
if [ "$(prefix)" = "" ]; then python setup.py install; \
else python setup.py install --home="$(prefix)"; fi
else python setup.py install --root="$(prefix)"; fi
clean:
rm -rf build *.pyc *.pyo *.o *.a *~
+3
View File
@@ -72,4 +72,7 @@ def connect(host,port):
__send_to_sock(sock)
if __name__ == '__main__':
if len(sys.argv) != 3:
print sys.argv[0] + " <host> <port>"
sys.exit(1)
connect(str(sys.argv[1]),int(sys.argv[2]))
+1 -1
View File
@@ -4,7 +4,7 @@ all:
install: all
if [ "$(prefix)" = "" ]; then python setup.py install; \
else python setup.py install --home="$(prefix)"; fi
else python setup.py install --root="$(prefix)"; fi
mkdir -p $(prefix)/usr/sbin
install -m0755 xend $(prefix)/usr/sbin
+1 -1
View File
@@ -18,7 +18,7 @@
#include <asm/pdb.h>
#include <xeno/trace.h>
#include <xeno/console.h>
#include <hypervisor-ifs/sched-ctl.h>
#include <hypervisor-ifs/sched_ctl.h>
extern unsigned int alloc_new_dom_mem(struct task_struct *, unsigned int);
+2 -2
View File
@@ -6,7 +6,7 @@
#include <xeno/sched.h>
#include <xeno/sched-if.h>
#include <hypervisor-ifs/sched-ctl.h>
#include <hypervisor-ifs/sched_ctl.h>
#include <xeno/ac_timer.h>
#include <xeno/time.h>
@@ -43,7 +43,7 @@ static void rr_dump_settings()
}
struct scheduler sched_rrobin_def = {
.name = "Stupid Round Robin Scheduler",
.name = "Round-Robin Scheduler",
.opt_name = "rrobin",
.sched_id = SCHED_RROBIN,
+30 -40
View File
@@ -26,7 +26,7 @@
#include <xeno/timer.h>
#include <xeno/perfc.h>
#include <xeno/sched-if.h>
#include <hypervisor-ifs/sched-ctl.h>
#include <hypervisor-ifs/sched_ctl.h>
#include <xeno/trace.h>
/*#define WAKEUP_HISTO*/
@@ -40,8 +40,10 @@
#define TIME_SLOP (s32)MICROSECS(50) /* allow time to slip a bit */
/* XXX MAW pull trace-related #defines out of here and into an auto-generated
* header file later on! */
/*
* XXX Pull trace-related #defines out of here and into an auto-generated
* header file later on!
*/
#define TRC_SCHED_DOM_ADD 0x00010000
#define TRC_SCHED_DOM_REM 0x00010001
#define TRC_SCHED_WAKE 0x00010002
@@ -66,26 +68,23 @@ static void t_timer_fn(unsigned long unused);
static void dom_timer_fn(unsigned long data);
static void fallback_timer_fn(unsigned long unused);
/* this is global for now so that private implementations can reach it */
/* This is global for now so that private implementations can reach it. */
schedule_data_t schedule_data[NR_CPUS];
/* XXX would be nice if the schedulers array could get populated
* automagically without having to hack the code in here */
/*
* XXX It would be nice if the schedulers array could get populated
* automagically without having to hack the code in here.
*/
extern struct scheduler sched_bvt_def, sched_rrobin_def;
static struct scheduler *schedulers[] = { &sched_bvt_def,
&sched_rrobin_def,
NULL};
/* scheduler ops for the current scheduler */
/* Operations for the current scheduler. */
static struct scheduler ops;
/* for scheduler functions that return void */
#define SCHED_FN_VOID(fn, ...) do { if ( ops.fn ) ops.fn(__VA_ARGS__); } \
while (0)
/* for scheduler functions that return a numeric value */
#define SCHED_FN_RET(fn, ...) \
(( ops.fn != NULL ) ? ops.fn( __VA_ARGS__ ) : 0 )
#define SCHED_FN(fn, ...) \
((ops.fn != NULL) ? (ops.fn(__VA_ARGS__)) : (typeof(ops.fn(__VA_ARGS__)))0)
spinlock_t schedule_lock[NR_CPUS] __cacheline_aligned;
@@ -102,7 +101,7 @@ extern kmem_cache_t *task_struct_cachep;
void free_task_struct(struct task_struct *p)
{
SCHED_FN_VOID(free_task, p);
SCHED_FN(free_task, p);
kmem_cache_free(task_struct_cachep, p);
}
@@ -120,7 +119,7 @@ struct task_struct *alloc_task_struct(void)
memset(p, 0, sizeof(*p));
if ( SCHED_FN_RET(alloc_task, p) < 0)
if ( SCHED_FN(alloc_task, p) < 0)
{
kmem_cache_free(task_struct_cachep, p);
return NULL;
@@ -134,7 +133,7 @@ struct task_struct *alloc_task_struct(void)
*/
void sched_add_domain(struct task_struct *p)
{
p->state = TASK_STOPPED;
p->state = TASK_STOPPED;
if( p->domain != IDLE_DOMAIN_ID )
{
@@ -149,14 +148,11 @@ void sched_add_domain(struct task_struct *p)
schedule_data[p->processor].idle = p;
}
SCHED_FN_VOID(add_task, p);
SCHED_FN(add_task, p);
TRACE_3D(TRC_SCHED_DOM_ADD, _HIGH32(p->domain), _LOW32(p->domain), p);
}
/* XXX race condition here? we could both add and remove a domain at once, in
* theory. ick! */
/* XXX is the task already removed from the runlist at this point? */
int sched_rem_domain(struct task_struct *p)
{
int x, y = p->state;
@@ -166,7 +162,7 @@ int sched_rem_domain(struct task_struct *p)
rem_ac_timer(&p->timer);
SCHED_FN_VOID(rem_task, p);
SCHED_FN(rem_task, p);
TRACE_3D(TRC_SCHED_DOM_REM, _HIGH32(p->domain), _LOW32(p->domain), p);
@@ -179,9 +175,9 @@ void init_idle_task(void)
unsigned long flags;
struct task_struct *p = current;
if ( SCHED_FN_RET (alloc_task, p) < 0)
if ( SCHED_FN (alloc_task, p) < 0)
panic("Failed to allocate scheduler private data for idle task");
SCHED_FN_VOID(add_task, p);
SCHED_FN(add_task, p);
spin_lock_irqsave(&schedule_lock[p->processor], flags);
p->has_cpu = 1;
@@ -202,7 +198,7 @@ void __wake_up(struct task_struct *p)
p->state = TASK_RUNNING;
SCHED_FN_VOID(wake_up, p);
SCHED_FN(wake_up, p);
#ifdef WAKEUP_HISTO
p->wokenup = NOW();
@@ -319,13 +315,10 @@ long sched_ctl(struct sched_ctl_cmd *cmd)
{
TRACE_0D(TRC_SCHED_CTL);
if ( cmd->if_ver != SCHED_CTL_IF_VER )
return -EACCES;
if ( cmd->sched_id != ops.sched_id )
return -EINVAL;
return SCHED_FN_RET(control, cmd);
return SCHED_FN(control, cmd);
}
@@ -334,9 +327,6 @@ long sched_adjdom(struct sched_adjdom_cmd *cmd)
{
struct task_struct *p;
if ( cmd->if_ver != SCHED_CTL_IF_VER )
return -EACCES;
if ( cmd->sched_id != ops.sched_id )
return -EINVAL;
@@ -347,7 +337,7 @@ long sched_adjdom(struct sched_adjdom_cmd *cmd)
TRACE_2D(TRC_SCHED_ADJDOM, _HIGH32(p->domain), _LOW32(p->domain));
SCHED_FN_VOID(adjdom, p, cmd);
SCHED_FN(adjdom, p, cmd);
put_task_struct(p);
return 0;
@@ -388,7 +378,7 @@ unsigned long __reschedule(struct task_struct *p)
if ( schedule_data[cpu].s_timer.expires > min_time + TIME_SLOP )
mod_ac_timer(&schedule_data[cpu].s_timer, min_time);
return SCHED_FN_RET(reschedule, p);
return SCHED_FN(reschedule, p);
}
void reschedule(struct task_struct *p)
@@ -436,7 +426,7 @@ asmlinkage void __enter_scheduler(void)
if ( signal_pending(prev) )
prev->state = TASK_RUNNING;
else
SCHED_FN_VOID(do_block, prev);
SCHED_FN(do_block, prev);
}
/* get policy-specific decision on scheduling... */
@@ -623,10 +613,10 @@ void __init scheduler_init(void)
if ( ops.do_schedule == NULL)
panic("Chosen scheduler has NULL do_schedule!");
if ( SCHED_FN_RET(init_scheduler) < 0 )
if ( SCHED_FN(init_scheduler) < 0 )
panic("Initialising scheduler failed!");
SCHED_FN_VOID(add_task, &idle0_task);
SCHED_FN(add_task, &idle0_task);
}
/*
@@ -666,7 +656,7 @@ static void dump_rqueue(struct list_head *queue, char *name)
list_for_each (list, queue) {
p = list_entry(list, struct task_struct, run_list);
printk("%3d: %llu has=%c ", loop++, p->domain, p->has_cpu ? 'T':'F');
SCHED_FN_VOID(dump_runq_el, p);
SCHED_FN(dump_runq_el, p);
printk("c=0x%X%08X\n", (u32)(p->cpu_time>>32), (u32)p->cpu_time);
printk(" l: %lx n: %lx p: %lx\n",
(unsigned long)list, (unsigned long)list->next,
@@ -682,12 +672,12 @@ void dump_runq(u_char key, void *dev_id, struct pt_regs *regs)
int i;
printk("Scheduler: %s (%s)\n", ops.name, ops.opt_name);
SCHED_FN_VOID(dump_settings);
SCHED_FN(dump_settings);
printk("NOW=0x%08X%08X\n", (u32)(now>>32), (u32)now);
for (i = 0; i < smp_num_cpus; i++) {
spin_lock_irqsave(&schedule_lock[i], flags);
printk("CPU[%02d] ", i);
SCHED_FN_VOID(dump_cpu_state,i);
SCHED_FN(dump_cpu_state,i);
dump_rqueue(&schedule_data[i].runqueue, "rq");
spin_unlock_irqrestore(&schedule_lock[i], flags);
}
+1 -1
View File
@@ -11,7 +11,7 @@
#define __DOM0_OPS_H__
#include "hypervisor-if.h"
#include "sched-ctl.h"
#include "sched_ctl.h"
/*
* Make sure you increment the interface version whenever you modify this file!
@@ -4,26 +4,20 @@
* Mark Williamson, (C) 2004 Intel Research Cambridge
*/
#ifndef _SCHED_CTL_H_
#define _SCHED_CTL_H_
#ifndef __SCHED_CTL_H__
#define __SCHED_CTL_H__
/**
* When this file is changed, increment the version number. This ensures that
* tools will refuse to work (rather than causing a crash) when they're
* out-of-sync with the Xen version number.
*/
#define SCHED_CTL_IF_VER 0x0001
/* scheduler types */
/* Scheduler types. */
#define SCHED_BVT 0
#define SCHED_ATROPOS 1
#define SCHED_RROBIN 2
/* generic scheduler control command - union of all scheduler control
* command structures */
/*
* Generic scheduler control command: union of all scheduler control command
* structures.
*/
struct sched_ctl_cmd
{
unsigned int if_ver;
unsigned int sched_id;
union
@@ -44,7 +38,6 @@ struct sched_ctl_cmd
struct sched_adjdom_cmd
{
unsigned int if_ver;
unsigned int sched_id;
domid_t domain;
@@ -65,4 +58,4 @@ struct sched_adjdom_cmd
} u;
};
#endif /* _SCHED_CTL_H_ */
#endif /* __SCHED_CTL_H__ */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.