diff options
Diffstat (limited to 'xenolinux-2.4.21-pre4-sparse')
3 files changed, 136 insertions, 6 deletions
diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/Makefile b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/Makefile index 4738fc0ba4..eeb3413842 100644 --- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/Makefile +++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/Makefile @@ -1,3 +1,3 @@ O_TARGET := dom0.o -obj-y := dom0_memory.o dom0_core.o vfr.o +obj-y := dom0_memory.o dom0_core.o vfr.o sched_ops.o include $(TOPDIR)/Rules.make diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/dom0_ops.h b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/dom0_ops.h index 6c60a93ff6..a482d3c4d9 100644 --- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/dom0_ops.h +++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/dom0_ops.h @@ -4,15 +4,19 @@ * Process command requests from domain-0 guest OS. * * Copyright (c) 2002, K A Fraser, B Dragovic + * + * MUST BE KEPT IN SYNC WITH xen/include/xeno/dom0_ops.h */ #define DOM0_NEWDOMAIN 0 #define DOM0_KILLDOMAIN 1 #define DOM0_GETMEMLIST 2 #define DOM0_STARTDOM 4 -#define MAP_DOM_MEM 6 /* Not passed down to Xen */ -#define DO_PGUPDATES 7 /* Not passed down to Xen */ -#define MAX_CMD 8 +#define DOM0_BVTCTL 6 +#define DOM0_ADJUSTDOM 7 +#define MAP_DOM_MEM 8 /* Not passed down to Xen */ +#define DO_PGUPDATES 9 /* Not passed down to Xen */ +#define MAX_CMD 10 #define MAX_CMD_LEN 256 @@ -20,8 +24,8 @@ typedef struct dom0_newdomain_st { unsigned int domain; unsigned int memory_kb; - unsigned int num_vifs; // temporary - unsigned long pg_head; // return parameter + unsigned int num_vifs; /* temporary */ + unsigned long pg_head; /* return parameter */ } dom0_newdomain_t; typedef struct dom0_killdomain_st @@ -37,6 +41,20 @@ typedef struct dom0_getmemlist_st void *buffer; } dom0_getmemlist_t; +typedef struct dom0_bvtctl_st +{ + unsigned long ctx_allow; /* context switch allowance */ +} dom0_bvtctl_t; + +typedef struct dom0_adjustdom_st +{ + unsigned int domain; /* domain id */ + unsigned long mcu_adv; /* mcu advance: inverse of weight */ + unsigned long warp; /* time warp */ + unsigned long warpl; /* warp limit */ + unsigned long warpu; /* unwarp time requirement */ +} dom0_adjustdom_t; + /* This is entirely processed by XenoLinux */ typedef struct dom_mem { @@ -64,6 +82,8 @@ typedef struct domain_launch char cmd_line[MAX_CMD_LEN]; } dom_meminfo_t; + + typedef struct dom0_op_st { unsigned long cmd; @@ -72,6 +92,8 @@ typedef struct dom0_op_st dom0_newdomain_t newdomain; dom0_killdomain_t killdomain; dom0_getmemlist_t getmemlist; + dom0_bvtctl_t bvtctl; + dom0_adjustdom_t adjustdom; dom_mem_t dommem; dom_pgupdate_t pgupdate; dom_meminfo_t meminfo; diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/sched_ops.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/sched_ops.c new file mode 100644 index 0000000000..2408f83880 --- /dev/null +++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/sched_ops.c @@ -0,0 +1,108 @@ +/* -*- Mode:C; c-basic-offset:4; tab-width:4 -*- + **************************************************************************** + * (C) 2003 - Rolf Neugebauer - Intel Research Cambridge + **************************************************************************** + * + * File: sched_ops.c + * Author: Rolf Neugebauer (neugebar@dcs.gla.ac.uk) + * Changes: + * + * Date: Mar 2003 + * + * Environment: XenoLinux + * Description: Dom0 Control interface to scheduler in Xen + * + * code based on Andy's vfr parsing code + * + * Commands understood by the interface: + * + * S <did> <mcu advance> [ <warp> <warp limit> <unwarp limit> ] + * C <context swith allowance> + * + **************************************************************************** + * $Id: c-insert.c,v 1.7 2002/11/08 16:04:34 rn Exp $ + **************************************************************************** + */ + + +#include <linux/proc_fs.h> +#include <asm/hypervisor.h> +#include "dom0_ops.h" + +#define SCHED_ENTRY "sched" +extern struct proc_dir_entry *xeno_base; +static struct proc_dir_entry *sched_pde; + + +static int sched_read_proc(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + strcpy(page, readbuf); + *readbuf = '\0'; + *eof = 1; + *start = page; + return strlen(page); +} + + +static int sched_write_proc(struct file *file, const char *buffer, + u_long count, void *data) +{ + dom0_op_t op; + + int ret, len; + int ts, te, tl; /* token start, end, and length */ + + /* Only admin can adjust scheduling parameters */ + if ( !capable(CAP_SYS_ADMIN) ) + return -EPERM; + + /* parse the commands */ + len = count; + ts = te = 0; + + while ( count && isspace(buffer[ts]) ) { ts++; count--; } // skip spaces. + te = ts; + if ( te <= ts ) goto bad; + tl = te - ts; + + if ( strncmp(&buffer[ts], "S", tl) == 0 ) + { + op.cmd = NETWORK_OP_ADDRULE; + } + else if ( strncmp(&buffer[ts], "C", tl) == 0 ) + { + op.cmd = NETWORK_OP_DELETERULE; + } + + +} + + +/* + * main scheduler interface driver driver initialization function. + */ +static int __init init_module(void) +{ + printk(KERN_ALERT "Starting Domain Scheduler Control Interface\n"); + + sched_pde = create_proc_entry(SCHED_ENTRY, 0600, xeno_base); + if ( sched_pde == NULL ) + { + printk(KERN_ALERT "Unable to create dom scheduler proc entry!"); + return -1; + } + + sched_pde->read_proc = sched_read_proc; + sched_pde->write_proc = sched_write_proc; + + return 0; +} + +static void __exit cleanup_module(void) +{ +} + +module_init(init_module); +module_exit(cleanup_module); + |