#include <kern/macro_help.h>
#include <kern/timer_call.h>
#include <kern/ast.h>
-#include <kern/kalloc.h>
#include <kern/bits.h>
#define NRQS_MAX (128) /* maximum number of priority levels */
struct rt_queue {
_Atomic int count; /* # of threads total */
queue_head_t queue; /* all runnable RT threads */
-#if __SMP__
- decl_simple_lock_data(, rt_lock);
-#endif
struct runq_stats runq_stats;
};
typedef struct rt_queue *rt_queue_t;
extern uint32_t max_rt_quantum, min_rt_quantum;
extern int default_preemption_rate;
-extern int default_bg_preemption_rate;
#if defined(CONFIG_SCHED_TIMESHARE_CORE)
#if defined(CONFIG_SCHED_TIMESHARE_CORE)
#define MAX_LOAD (NRQS - 1)
+#define SCHED_PRI_SHIFT_MAX ((8 * sizeof(uint32_t)) - 1)
extern uint32_t sched_pri_shifts[TH_BUCKET_MAX];
extern uint32_t sched_fixed_shift;
extern int8_t sched_load_shifts[NRQS];
extern uint32_t sched_run_decr(thread_t thread);
extern void sched_update_thread_bucket(thread_t thread);
+extern uint32_t sched_smt_run_incr(thread_t thread);
+extern uint32_t sched_smt_run_decr(thread_t thread);
+extern void sched_smt_update_thread_bucket(thread_t thread);
+
#define SCHED_DECAY_TICKS 32
struct shift_data {
int shift1;
* thread_timer_delta macro takes care of both thread timers.
*/
#define thread_timer_delta(thread, delta) \
-MACRO_BEGIN \
- (delta) = (typeof(delta))timer_delta(&(thread)->system_timer, \
- &(thread)->system_timer_save); \
- (delta) += (typeof(delta))timer_delta(&(thread)->user_timer, \
- &(thread)->user_timer_save); \
+MACRO_BEGIN \
+ (delta) = (typeof(delta))timer_delta(&(thread)->system_timer, \
+ &(thread)->system_timer_save); \
+ (delta) += (typeof(delta))timer_delta(&(thread)->user_timer, \
+ &(thread)->user_timer_save); \
MACRO_END
+extern bool system_is_SMT;
+
#endif /* _KERN_SCHED_H_ */