19 #ifndef _COBALT_KERNEL_SCHEDQUEUE_H
20 #define _COBALT_KERNEL_SCHEDQUEUE_H
22 #include <cobalt/kernel/list.h>
29 #define XNSCHED_CLASS_WEIGHT_FACTOR 1024
31 #ifdef CONFIG_XENO_OPT_SCALABLE_SCHED
33 #include <linux/bitmap.h>
41 #define XNSCHED_MLQ_LEVELS 260
45 DECLARE_BITMAP(prio_map, XNSCHED_MLQ_LEVELS);
46 struct list_head heads[XNSCHED_MLQ_LEVELS];
51 void xnsched_initq(
struct xnsched_mlq *q);
53 void xnsched_addq(
struct xnsched_mlq *q,
54 struct xnthread *thread);
56 void xnsched_addq_tail(
struct xnsched_mlq *q,
57 struct xnthread *thread);
59 void xnsched_delq(
struct xnsched_mlq *q,
60 struct xnthread *thread);
62 struct xnthread *xnsched_getq(
struct xnsched_mlq *q);
64 static inline int xnsched_emptyq_p(
struct xnsched_mlq *q)
69 static inline int xnsched_weightq(
struct xnsched_mlq *q)
71 return find_first_bit(q->prio_map, XNSCHED_MLQ_LEVELS);
74 typedef struct xnsched_mlq xnsched_queue_t;
78 typedef struct list_head xnsched_queue_t;
80 #define xnsched_initq(__q) INIT_LIST_HEAD(__q)
81 #define xnsched_emptyq_p(__q) list_empty(__q)
82 #define xnsched_addq(__q, __t) list_add_prilf(__t, __q, cprio, rlink)
83 #define xnsched_addq_tail(__q, __t) list_add_priff(__t, __q, cprio, rlink)
84 #define xnsched_delq(__q, __t) (void)(__q), list_del(&(__t)->rlink)
85 #define xnsched_getq(__q) \
87 struct xnthread *__t = NULL; \
88 if (!list_empty(__q)) \
89 __t = list_get_entry(__q, struct xnthread, rlink); \
92 #define xnsched_weightq(__q) \
94 struct xnthread *__t; \
95 __t = list_first_entry(__q, struct xnthread, rlink); \
102 struct xnthread *xnsched_findq(xnsched_queue_t *q,
int prio);