--- //depot/user/davidxu/pshared/src/lib/libc/sys/Symbol.map 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/lib/libc/sys/Symbol.map 2010-11-23 01:26:57.000000000 0000 @@ -227,6 +227,7 @@ rmdir; rtprio; rtprio_thread; + schedctl; sched_get_priority_max; sched_get_priority_min; sched_getparam; --- //depot/user/davidxu/pshared/src/sys/conf/files 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/conf/files 2010-11-23 01:26:57.000000000 0000 @@ -2157,6 +2157,7 @@ kern/kern_resource.c standard kern/kern_rmlock.c standard kern/kern_rwlock.c standard +kern/kern_schedctl.c standard kern/kern_sdt.c optional kdtrace_hooks kern/kern_sema.c standard kern/kern_shutdown.c standard --- //depot/user/davidxu/pshared/src/sys/kern/init_sysent.c 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/kern/init_sysent.c 2010-11-23 01:26:57.000000000 0000 @@ -2,8 +2,8 @@ * System call switch table. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/kern/init_sysent.c,v 1.257 2010/08/30 14:26:02 kib Exp $ - * created from FreeBSD: head/sys/kern/syscalls.master 211998 2010-08-30 14:24:44Z kib + * $FreeBSD$ + * created from FreeBSD: src/sys/kern/syscalls.master,v 1.265 2010/08/30 14:24:44 kib Exp */ #include "opt_compat.h" @@ -557,4 +557,5 @@ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 520 = pdgetpid */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 521 = pdwait */ { AS(pselect_args), (sy_call_t *)pselect, AUE_SELECT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 522 = pselect */ + { AS(schedctl_args), (sy_call_t *)schedctl, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 523 = schedctl */ }; --- //depot/user/davidxu/pshared/src/sys/kern/kern_thread.c 2010-11-23 01:58:38.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/kern/kern_thread.c 2010-11-23 01:58:38.000000000 0000 @@ -68,7 +68,7 @@ SYSCTL_NODE(_kern, OID_AUTO, threads, CTLFLAG_RW, 0, "thread allocation"); int max_threads_per_proc = 1500; -SYSCTL_INT(_kern_threads, OID_AUTO, max_threads_per_proc, CTLFLAG_RW, +SYSCTL_INT(_kern_threads, OID_AUTO, max_threads_per_proc, CTLFLAG_RD, &max_threads_per_proc, 0, "Limit on threads per proc"); int max_threads_hits; --- //depot/user/davidxu/pshared/src/sys/kern/sched_ule.c 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/kern/sched_ule.c 2010-11-23 01:26:57.000000000 0000 @@ -1839,7 +1839,8 @@ if (dtrace_vtime_active) (*dtrace_vtime_switch_func)(newtd); #endif - + if (td->td_schedctl != NULL) + td->td_schedctl->sc_state = SC_SLEEP; cpu_switch(td, newtd, mtx); /* * We may return from cpu_switch on a different cpu. However, @@ -1862,6 +1863,8 @@ TDQ_LOCK_ASSERT(tdq, MA_OWNED|MA_NOTRECURSED); MPASS(td->td_lock == TDQ_LOCKPTR(tdq)); td->td_oncpu = cpuid; + if (td->td_schedctl != NULL) + td->td_schedctl->sc_state = SC_RUN; } /* --- //depot/user/davidxu/pshared/src/sys/kern/syscalls.c 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/kern/syscalls.c 2010-11-23 01:26:57.000000000 0000 @@ -2,8 +2,8 @@ * System call names. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/kern/syscalls.c,v 1.240 2010/08/30 14:26:02 kib Exp $ - * created from FreeBSD: head/sys/kern/syscalls.master 211998 2010-08-30 14:24:44Z kib + * $FreeBSD$ + * created from FreeBSD: src/sys/kern/syscalls.master,v 1.265 2010/08/30 14:24:44 kib Exp */ const char *syscallnames[] = { @@ -530,4 +530,5 @@ "#520", /* 520 = pdgetpid */ "#521", /* 521 = pdwait */ "pselect", /* 522 = pselect */ + "schedctl", /* 523 = schedctl */ }; --- //depot/user/davidxu/pshared/src/sys/kern/syscalls.master 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/kern/syscalls.master 2010-11-23 01:26:57.000000000 0000 @@ -926,5 +926,6 @@ fd_set *ou, fd_set *ex, \ const struct timespec *ts, \ const sigset_t *sm); } +523 AUE_NULL STD { caddr_t schedctl(int version); } ; Please copy any additions and changes to the following compatability tables: ; sys/compat/freebsd32/syscalls.master --- //depot/user/davidxu/pshared/src/sys/kern/systrace_args.c 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/kern/systrace_args.c 2010-11-23 01:26:57.000000000 0000 @@ -2,7 +2,7 @@ * System call argument to DTrace register array converstion. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/kern/systrace_args.c,v 1.36 2010/08/30 14:26:02 kib Exp $ + * $FreeBSD$ * This file is part of the DTrace syscall provider. */ @@ -3108,6 +3108,13 @@ *n_args = 6; break; } + /* schedctl */ + case 523: { + struct schedctl_args *p = params; + iarg[0] = p->version; /* int */ + *n_args = 1; + break; + } default: *n_args = 0; break; @@ -8265,6 +8272,16 @@ break; }; break; + /* schedctl */ + case 523: + switch(ndx) { + case 0: + p = "int"; + break; + default: + break; + }; + break; default: break; }; --- //depot/user/davidxu/pshared/src/sys/sys/proc.h 2010-11-23 01:58:38.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/sys/proc.h 2010-11-23 01:58:38.000000000 0000 @@ -53,6 +53,7 @@ #include /* XXX. */ #include #include +#include #include #include #include @@ -264,6 +265,8 @@ int td_ng_outbound; /* (k) Thread entered ng from above. */ struct osd td_osd; /* (k) Object specific data. */ struct vm_map_entry *td_map_def_user; /* (k) Deferred entries. */ + sc_shared_t *td_schedctl; + vm_offset_t td_sc_uaddr; #define td_endzero td_rqindex /* Copied during fork1() or thread_sched_upcall(). */ @@ -526,7 +529,9 @@ struct itimers *p_itimers; /* (c) POSIX interval timers. */ int p_robustcount; /* (*) Number of robust mutexes. */ int p_robustwaiters;/* (*) Number of robust mutex - * waiters. */ + waiters. */ + struct pschedctl *p_schedctl; /* (c) Shared scheduler info. */ + /* End area that is zeroed on creation. */ #define p_endzero p_magic --- //depot/user/davidxu/pshared/src/sys/sys/syscall.h 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/sys/syscall.h 2010-11-23 01:26:57.000000000 0000 @@ -2,8 +2,8 @@ * System call numbers. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/sys/syscall.h,v 1.237 2010/08/30 14:26:02 kib Exp $ - * created from FreeBSD: head/sys/kern/syscalls.master 211998 2010-08-30 14:24:44Z kib + * $FreeBSD$ + * created from FreeBSD: src/sys/kern/syscalls.master,v 1.265 2010/08/30 14:24:44 kib Exp */ #define SYS_syscall 0 @@ -431,4 +431,5 @@ #define SYS_shmctl 512 #define SYS_lpathconf 513 #define SYS_pselect 522 -#define SYS_MAXSYSCALL 523 +#define SYS_schedctl 523 +#define SYS_MAXSYSCALL 524 --- //depot/user/davidxu/pshared/src/sys/sys/syscall.mk 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/sys/syscall.mk 2010-11-23 01:26:57.000000000 0000 @@ -1,7 +1,7 @@ # FreeBSD system call names. # DO NOT EDIT-- this file is automatically generated. -# $FreeBSD: src/sys/sys/syscall.mk,v 1.192 2010/08/30 14:26:02 kib Exp $ -# created from FreeBSD: head/sys/kern/syscalls.master 211998 2010-08-30 14:24:44Z kib +# $FreeBSD$ +# created from FreeBSD: src/sys/kern/syscalls.master,v 1.265 2010/08/30 14:24:44 kib Exp MIASM = \ syscall.o \ exit.o \ @@ -379,4 +379,5 @@ msgctl.o \ shmctl.o \ lpathconf.o \ - pselect.o + pselect.o \ + schedctl.o --- //depot/user/davidxu/pshared/src/sys/sys/sysproto.h 2010-11-23 01:26:57.000000000 0000 +++ /home/davidxu/p4/pshared/src/sys/sys/sysproto.h 2010-11-23 01:26:57.000000000 0000 @@ -2,8 +2,8 @@ * System call prototypes. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/sys/sysproto.h,v 1.244 2010/08/30 14:26:02 kib Exp $ - * created from FreeBSD: head/sys/kern/syscalls.master 211998 2010-08-30 14:24:44Z kib + * $FreeBSD$ + * created from FreeBSD: src/sys/kern/syscalls.master,v 1.265 2010/08/30 14:24:44 kib Exp */ #ifndef _SYS_SYSPROTO_H_ @@ -1665,6 +1665,9 @@ char ts_l_[PADL_(const struct timespec *)]; const struct timespec * ts; char ts_r_[PADR_(const struct timespec *)]; char sm_l_[PADL_(const sigset_t *)]; const sigset_t * sm; char sm_r_[PADR_(const sigset_t *)]; }; +struct schedctl_args { + char version_l_[PADL_(int)]; int version; char version_r_[PADR_(int)]; +}; int nosys(struct thread *, struct nosys_args *); void sys_exit(struct thread *, struct sys_exit_args *); int fork(struct thread *, struct fork_args *); @@ -2026,6 +2029,7 @@ int shmctl(struct thread *, struct shmctl_args *); int lpathconf(struct thread *, struct lpathconf_args *); int pselect(struct thread *, struct pselect_args *); +int schedctl(struct thread *, struct schedctl_args *); #ifdef COMPAT_43 @@ -2701,6 +2705,7 @@ #define SYS_AUE_shmctl AUE_SHMCTL #define SYS_AUE_lpathconf AUE_LPATHCONF #define SYS_AUE_pselect AUE_SELECT +#define SYS_AUE_schedctl AUE_NULL #undef PAD_ #undef PADL_