aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/sched_litmus.c
Commit message (Collapse)AuthorAge
* Fix prototype mismatching and synch syscall numbersAndrea Bastoni2011-08-27
| | | | | | * Update prototypes for switched_to(), prio_changed(), select_task_rq(). * Fix missing pid field in printk output. * Synchronize syscall numbers for arm and x86.
* Merge 'Linux v3.0' into LitmusAndrea Bastoni2011-08-27
| | | | | | | | | | | | | | | | | | | | | | | Some notes: * Litmus^RT scheduling class is the topmost scheduling class (above stop_sched_class). * scheduler_ipi() function (e.g., in smp_reschedule_interrupt()) may increase IPI latencies. * Added path into schedule() to quickly re-evaluate scheduling decision without becoming preemptive again. This used to be a standard path before the removal of BKL. Conflicts: Makefile arch/arm/kernel/calls.S arch/arm/kernel/smp.c arch/x86/include/asm/unistd_32.h arch/x86/kernel/smp.c arch/x86/kernel/syscall_table_32.S include/linux/hrtimer.h kernel/printk.c kernel/sched.c kernel/sched_fair.c
* Implement proper remote preemption supportBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | To date, Litmus has just hooked into the smp_send_reschedule() IPI handler and marked tasks as having to reschedule to implement remote preemptions. This was never particularly clean, but so far we got away with it. However, changes in the underlying Linux, and peculartities of the ARM code (interrupts enabled before context switch) break this naive approach. This patch introduces new state-machine based remote preemption support. By examining the local state before calling set_tsk_need_resched(), we avoid confusing the underlying Linux scheduler. Further, this patch avoids sending unncessary IPIs.
* Merge commit 'v2.6.36' into wip-merge-2.6.36Andrea Bastoni2010-10-23
| | | | | | | | | | | | | | | | | | | | | | | Conflicts: Makefile arch/x86/include/asm/unistd_32.h arch/x86/kernel/syscall_table_32.S kernel/sched.c kernel/time/tick-sched.c Relevant API and functions changes (solved in this commit): - (API) .enqueue_task() (enqueue_task_litmus), dequeue_task() (dequeue_task_litmus), [litmus/sched_litmus.c] - (API) .select_task_rq() (select_task_rq_litmus) [litmus/sched_litmus.c] - (API) sysrq_dump_trace_buffer() and sysrq_handle_kill_rt_tasks() [litmus/sched_trace.c] - struct kfifo internal buffer name changed (buffer -> buf) [litmus/sched_trace.c] - add_wait_queue_exclusive_locked -> __add_wait_queue_tail_exclusive [litmus/fmlp.c] - syscall numbers for both x86_32 and x86_64
* Litmus core: enable precise budget enforcementBjoern B. Brandenburg2010-10-19
| | | | Update the budget enforcement timer after each scheduling decision.
* Litmus core: set state to TASK_RUNNING before calling wake_up()Bjoern B. Brandenburg2010-10-19
| | | | | | | | | Having tasks that are !is_running() in shared structures is very confusing during development and debugging, and can likely mask bugs and/or create races. It seems like a strange choice that Linux changes a task's state only _after_ activating it. For LITMUS^RT tasks, we change this order.
* Make litmus_sched_class staticAndrea Bastoni2010-06-10
| | | | | litmus_sched_class wasn't declared static, but it's not used outside sched.c, so change it's signature to static.
* Bugfix: re-insert missing TS_PLUGIN_TICK_END tracing pointAndrea Bastoni2010-05-30
| | | | | Insert PLUGIN_TICK_END tracing point in litmus_tick(). It was lost during the porting of 2008.3 to 2010.1.
* Update sched_class and spinlock_t in litmus.cAndrea Bastoni2010-05-29
| | | | | | | | - get_rr_interval() changed signature - load_balance() and move_one_tak() are no longer needed - spinlock_t -> raw_spinlock_t This commit does not compile.
* Re-implement non-preemptive section support.Bjoern B. Brandenburg2010-05-29
| | | | | | | | | | | | Re-introduce NP sections in the configuration and in litmus.h. Remove the old np_flag from rt_param. If CONFIG_NP_SECTION is disabled, then all non-preemptive section checks are constant expressions which should get removed by the dead code elimination during optimization. Instead of re-implementing sys_exit_np(), we simply repurposed sched_yield() for calling into the scheduler to trigger delayed preemptions.
* Better explanation of jump-to-CFS optimization removalBjoern B. Brandenburg2010-05-29
| | | | | | | | GSN-EDF and friends rely on being called even if there is currently no runnable real-time task on the runqueue for (at least) two reasons: 1) To initiate migrations. LITMUS^RT pull tasks for migrations; this requires plugins to be called even if no task is currently present. 2) To maintain invariants when jobs block.
* Integrate litmus_tick() in task_tick_litmus()Andrea Bastoni2010-05-29
| | | | | | | | | - remove the call to litmus_tick() from scheduler_tick() just after having performed the class task_tick() and integrate litmus_tick() in task_tick_litmus() - task_tick_litmus() is the handler for the litmus class task_tick() method. It is called in non-queued mode from scheduler_tick()
* [ported from 2008.3] Core LITMUS^RT infrastructureAndrea Bastoni2010-05-29
Port 2008.3 Core LITMUS^RT infrastructure to Linux 2.6.32 litmus_sched_class implements 4 new methods: - prio_changed: void - switched_to: void - get_rr_interval: return infinity (i.e., 0) - select_task_rq: return current cpu