009ccc2962
* scheduler_enqueue_in_runqueue() now allows the scheduler to return a hint as to whether a reschedule is desirable or not. This is used in a few other places in order to relegate scheduling decisions entirely to the scheduler rather than the priority hacks previously used. There are probably other places in the kernel that could now make use of that information to more intelligently call reschedule() though. * Switch over the default scheduler to scheduler_affine(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32554 a95241bf-73f2-0310-859d-f6bbb57e9c96
69 lines
2.1 KiB
C
69 lines
2.1 KiB
C
/*
|
|
* Copyright 2008-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
|
|
* Copyright 2005, Axel Dörfler, axeld@pinc-software.de.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef KERNEL_SCHEDULER_H
|
|
#define KERNEL_SCHEDULER_H
|
|
|
|
|
|
#include <SupportDefs.h>
|
|
|
|
|
|
struct scheduling_analysis;
|
|
struct thread;
|
|
struct SchedulerListener;
|
|
|
|
|
|
struct scheduler_ops {
|
|
bool (*enqueue_in_run_queue)(struct thread* thread);
|
|
void (*reschedule)(void);
|
|
void (*set_thread_priority)(struct thread* thread, int32 priority);
|
|
// called when the thread structure is first created -
|
|
// initialization of per-thread housekeeping data structures should
|
|
// be done here
|
|
void (*on_thread_create)(struct thread* thread);
|
|
// called when a thread structure is initialized and made ready for
|
|
// use - should be used to reset the housekeeping data structures
|
|
// if needed
|
|
void (*on_thread_init)(struct thread* thread);
|
|
// called when a thread structure is freed - freeing up any allocated
|
|
// mem on the scheduler's part should be done here
|
|
void (*on_thread_destroy)(struct thread* thread);
|
|
|
|
void (*start)(void);
|
|
};
|
|
|
|
extern struct scheduler_ops* gScheduler;
|
|
|
|
#define scheduler_enqueue_in_run_queue(thread) \
|
|
gScheduler->enqueue_in_run_queue(thread)
|
|
#define scheduler_set_thread_priority(thread, priority) \
|
|
gScheduler->set_thread_priority(thread, priority)
|
|
#define scheduler_reschedule() gScheduler->reschedule()
|
|
#define scheduler_start() gScheduler->start()
|
|
#define scheduler_on_thread_create(thread) \
|
|
gScheduler->on_thread_create(thread)
|
|
#define scheduler_on_thread_init(thread) \
|
|
gScheduler->on_thread_init(thread)
|
|
#define scheduler_on_thread_destroy(thread) \
|
|
gScheduler->on_thread_destroy(thread)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void scheduler_add_listener(struct SchedulerListener* listener);
|
|
void scheduler_remove_listener(struct SchedulerListener* listener);
|
|
|
|
void scheduler_init(void);
|
|
|
|
status_t _user_analyze_scheduling(bigtime_t from, bigtime_t until, void* buffer,
|
|
size_t size, struct scheduling_analysis* analysis);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* KERNEL_SCHEDULER_H */
|