4 * Userland scheduler API
6 * $DragonFly: src/sys/sys/usched.h,v 1.15 2008/04/21 15:24:47 dillon Exp $
10 #define _SYS_USCHED_H_
12 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
15 #include <sys/types.h>
18 #include <sys/queue.h>
20 #ifndef _SYS_SYSTIMER_H_
21 #include <sys/systimer.h>
23 #include <machine/cpumask.h>
25 #define NAME_LENGTH 32
32 TAILQ_ENTRY(usched
) entry
;
35 void (*usched_register
)(void);
36 void (*usched_unregister
)(void);
37 void (*acquire_curproc
)(struct lwp
*);
38 void (*release_curproc
)(struct lwp
*);
39 void (*setrunqueue
)(struct lwp
*);
40 void (*schedulerclock
)(struct lwp
*, sysclock_t
, sysclock_t
);
41 void (*recalculate
)(struct lwp
*);
42 void (*resetpriority
)(struct lwp
*);
43 void (*heuristic_forking
)(struct lwp
*, struct lwp
*);
44 void (*heuristic_exiting
)(struct lwp
*, struct proc
*);
45 void (*uload_update
)(struct lwp
*);
46 void (*setcpumask
)(struct usched
*, cpumask_t
);
47 void (*yield
)(struct lwp
*);
48 void (*changedcpu
)(struct lwp
*);
56 short priority
; /* lower is better */
57 char unused01
; /* (currently not used) */
59 int batch
; /* batch mode heuristic */
60 int estcpu
; /* dynamic priority modification */
61 u_short rqtype
; /* protected copy of rtprio type */
65 short priority
; /* lower is better */
66 char forked
; /* lock cpu during fork */
68 short estfast
; /* fast estcpu collapse mode */
69 short uload
; /* for delta uload adjustments */
70 int estcpu
; /* dynamic priority modification */
71 u_short rqtype
; /* protected copy of rtprio type */
72 u_short qcpu
; /* which cpu are we enqueued on? */
73 u_short rrcount
; /* reset when moved to runq tail */
79 int pad
[6]; /* PAD for future expansion */
83 * Flags for usched_ctl()
85 #define USCH_ADD 0x00000001
86 #define USCH_REM 0x00000010
88 #endif /* _KERNEL || _KERNEL_STRUCTURES */
90 #define USCHED_SET_SCHEDULER 0
91 #define USCHED_SET_CPU 1
92 #define USCHED_ADD_CPU 2
93 #define USCHED_DEL_CPU 3
94 #define USCHED_GET_CPU 4
95 #define USCHED_GET_CPUMASK 5 /* since DragonFly 4.5 */
96 #define USCHED_SET_CPUMASK 6 /* since DragonFly 4.7 */
99 * Kernel variables and procedures, or user system calls.
103 extern struct usched usched_bsd4
;
104 extern struct usched usched_dfly
;
105 extern struct usched usched_dummy
;
106 extern cpumask_t usched_mastermask
;
107 extern int sched_ticks
; /* From sys/kern/kern_clock.c */
109 int usched_ctl(struct usched
*, int);
110 struct usched
*usched_init(void);
111 void usched_schedulerclock(struct lwp
*, sysclock_t
, sysclock_t
);
115 #if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL)
117 int usched_set(pid_t
, int, void *, int);
118 int lwp_setaffinity(pid_t
, lwpid_t
, const cpumask_t
*);
119 int lwp_getaffinity(pid_t
, lwpid_t
, cpumask_t
*);