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];
51void xnsched_initq(
struct xnsched_mlq *q);
53void xnsched_addq(
struct xnsched_mlq *q,
54 struct xnthread *thread);
56void xnsched_addq_tail(
struct xnsched_mlq *q,
57 struct xnthread *thread);
59void xnsched_delq(
struct xnsched_mlq *q,
60 struct xnthread *thread);
62struct xnthread *xnsched_getq(
struct xnsched_mlq *q);
64static inline int xnsched_emptyq_p(
struct xnsched_mlq *q)
69static inline int xnsched_weightq(
struct xnsched_mlq *q)
71 return find_first_bit(q->prio_map, XNSCHED_MLQ_LEVELS);
74typedef struct xnsched_mlq xnsched_queue_t;
78typedef 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); \
102struct xnthread *xnsched_findq(xnsched_queue_t *q,
int prio);