proc extension request: p_sched
Peter Kadau
peter.kadau at tuebingen.mpg.de
Sat Dec 27 05:48:05 PST 2003
Hi !
May I have this in the tree ?
This way I can have my world and kernel always
in sync while testing userland scheduler variations.
The overhead shouldn't be much of a problem and the
struct sched can always be extended without recompiling
the world.
The struct runq there is only used as pointer and
declared in my scheduler extension - which freezes
my machine occassionly *sigh*...
If anyone of you kernel-insiders would like to comment
on my current code, I'd happily submit it of course.
Thanks and
Cheers
Peter
--
<peter.kadau at xxxxxxxxxxxxxxxx>
Campus der Max-Planck-Institute Tübingen
Netzwerk- und Systemadministration
Tel: +49 7071 601 598
Fax: +49 7071 601 616
diff -u -r src.orig/sys/kern/init_main.c src/sys/kern/init_main.c
--- src.orig/sys/kern/init_main.c Mon Nov 10 07:12:13 2003
+++ src/sys/kern/init_main.c Fri Dec 26 23:57:47 2003
@@ -87,6 +87,7 @@
struct proc *initproc;
struct proc proc0;
struct thread thread0;
+struct sched sched0;
int cmask = CMASK;
extern struct user *proc0paddr;
@@ -376,6 +377,8 @@
*/
p->p_stats = &p->p_addr->u_stats;
p->p_sigacts = &p->p_addr->u_sigacts;
+
+ p->p_sched = &sched0;
/*
* Charge root for one process.
diff -u -r src.orig/sys/kern/kern_exit.c src/sys/kern/kern_exit.c
--- src.orig/sys/kern/kern_exit.c Fri Nov 21 06:29:04 2003
+++ src/sys/kern/kern_exit.c Sat Dec 27 13:30:47 2003
@@ -370,6 +370,9 @@
p->p_limit = NULL;
}
+ FREE(p->p_sched, M_SUBPROC);
+ p->p_sched = NULL;
+
/*
* Release the P_CURPROC designation on the process so the userland
* scheduler can work in someone else.
diff -u -r src.orig/sys/kern/kern_fork.c src/sys/kern/kern_fork.c
--- src.orig/sys/kern/kern_fork.c Thu Nov 27 20:57:37 2003
+++ src/sys/kern/kern_fork.c Fri Dec 26 23:59:26 2003
@@ -497,6 +497,11 @@
*/
p2->p_estcpu = p1->p_estcpu;
+ /* sched infrastructure */
+ MALLOC(p2->p_sched, struct sched *, sizeof(struct sched), M_SUBPROC, M_WAITOK);
+ p2->p_sched->sched_runq = NULL;
+ p2->p_sched->sched_flags = p1->p_sched->sched_flags;
+
/*
* This begins the section where we must prevent the parent
* from being swapped.
diff -u -r src.orig/sys/sys/proc.h src/sys/sys/proc.h
--- src.orig/sys/sys/proc.h Sun Dec 7 05:20:38 2003
+++ src/sys/sys/proc.h Sat Dec 27 13:29:00 2003
@@ -110,6 +110,7 @@
u_char ar_args[0]; /* Arguments */
};
+
/*
* Description of a process.
*
@@ -122,6 +123,12 @@
* is running.
*/
+struct runq;
+struct sched {
+ struct runq *sched_runq;
+ u_int32_t sched_flags;
+};
+
struct jail;
struct proc {
@@ -232,6 +239,7 @@
void *p_emuldata; /* process-specific emulator state data */
struct thread *p_thread; /* temporarily embed thread struct in proc */
struct upcall *p_upcall; /* USERLAND POINTER! registered upcall */
+ struct sched *p_sched; /* user scheduler info */
};
#if defined(_KERNEL)
More information about the Submit
mailing list