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);