1 /* 2 * SYS/USCHED.H 3 * 4 * Userland scheduler API 5 * 6 * $DragonFly: src/sys/sys/usched.h,v 1.15 2008/04/21 15:24:47 dillon Exp $ 7 */ 8 9 #ifndef _SYS_USCHED_H_ 10 #define _SYS_USCHED_H_ 11 12 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES) 13 14 #ifndef _SYS_TYPES_H_ 15 #include <sys/types.h> 16 #endif 17 #ifndef _SYS_QUEUE_H_ 18 #include <sys/queue.h> 19 #endif 20 #ifndef _SYS_SYSTIMER_H_ 21 #include <sys/systimer.h> 22 #endif 23 24 #define NAME_LENGTH 32 25 26 struct lwp; 27 struct proc; 28 struct globaldata; 29 30 struct usched { 31 TAILQ_ENTRY(usched) entry; 32 const char *name; 33 const char *desc; 34 void (*usched_register)(void); 35 void (*usched_unregister)(void); 36 void (*acquire_curproc)(struct lwp *); 37 void (*release_curproc)(struct lwp *); 38 void (*setrunqueue)(struct lwp *); 39 void (*schedulerclock)(struct lwp *, sysclock_t, sysclock_t); 40 void (*recalculate)(struct lwp *); 41 void (*resetpriority)(struct lwp *); 42 void (*heuristic_forking)(struct lwp *, struct lwp *); 43 void (*heuristic_exiting)(struct lwp *, struct proc *); 44 void (*uload_update)(struct lwp *); 45 void (*setcpumask)(struct usched *, cpumask_t); 46 void (*yield)(struct lwp *); 47 void (*changedcpu)(struct lwp *); 48 }; 49 50 union usched_data { 51 /* 52 * BSD4 scheduler. 53 */ 54 struct { 55 short priority; /* lower is better */ 56 char unused01; /* (currently not used) */ 57 char rqindex; 58 int batch; /* batch mode heuristic */ 59 int estcpu; /* dynamic priority modification */ 60 u_short rqtype; /* protected copy of rtprio type */ 61 u_short unused02; 62 } bsd4; 63 struct { 64 short priority; /* lower is better */ 65 char forked; /* lock cpu during fork */ 66 char rqindex; 67 short estfast; /* fast estcpu collapse mode */ 68 short uload; /* for delta uload adjustments */ 69 int estcpu; /* dynamic priority modification */ 70 u_short rqtype; /* protected copy of rtprio type */ 71 u_short qcpu; /* which cpu are we enqueued on? */ 72 u_short rrcount; /* reset when moved to runq tail */ 73 u_short unused01; 74 u_short unused02; 75 u_short unused03; 76 } dfly; 77 78 int pad[6]; /* PAD for future expansion */ 79 }; 80 81 /* 82 * Flags for usched_ctl() 83 */ 84 #define USCH_ADD 0x00000001 85 #define USCH_REM 0x00000010 86 87 #endif /* _KERNEL || _KERNEL_STRUCTURES */ 88 89 #define USCHED_SET_SCHEDULER 0 90 #define USCHED_SET_CPU 1 91 #define USCHED_ADD_CPU 2 92 #define USCHED_DEL_CPU 3 93 #define USCHED_GET_CPU 4 94 95 /* 96 * Kernel variables and procedures, or user system calls. 97 */ 98 #ifdef _KERNEL 99 100 extern struct usched usched_bsd4; 101 extern struct usched usched_dfly; 102 extern struct usched usched_dummy; 103 extern cpumask_t usched_mastermask; 104 extern int sched_ticks; /* From sys/kern/kern_clock.c */ 105 106 int usched_ctl(struct usched *, int); 107 struct usched *usched_init(void); 108 void usched_schedulerclock(struct lwp *, sysclock_t, sysclock_t); 109 110 #endif 111 112 #if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL) 113 114 int usched_set(pid_t, int, void *, int); 115 116 #endif 117 118 #endif 119 120