| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds the PFAIR plugin. The implementation is based on an earlier version
developed by John Calandrino.
Features:
- supports aligned and staggered quanta
- supports early releasing
- uses mergable heaps to limit overheads
This version still has a couple of limitations:
- no support for sporadic; all tasks are assumed to be periodic
- tasks are limited to a maximum period of 1000 quanta
- overload (especially in the tick) is not handled gracefully
|
|
|
|
|
| |
We probably don't get such a big buffer, but the allocation
code scales it down if such a large memory chunk is not available.
|
| |
|
| |
|
|\ |
|
| |
| |
| |
| |
| | |
- move platform dependent bits into arch/
- provide a default implementation (used for sparc64)
|
| |
| |
| |
| |
| |
| |
| |
| | |
- TICK
- SCHED1
- SCHED2
- RELEASE
- CXS
|
| | |
|
| | |
|
|/
|
|
| |
Without this change, a BUG_ON() in schedule() triggers.
|
|
|
|
|
|
| |
The list-based priority queues did not perform well on the Niagara T2000.
This heap-based implementation should perform much faster when queues
are long.
|
| |
|
|
|
|
|
| |
PFAIR needs to do things a bit differently. This callback
will allow plugins to handle synchronous releases differently.
|
| |
|
|
|
|
|
|
|
| |
- don't deadlock on a runqueue lock in case of a bug inside
the scheduler
- write printk() messages to TRACE()
- tell user of TRACE() buffer
|
|
|
|
|
|
| |
Also:
- add some memory barriers, to be on the safe side
- fix some line breaks
|
|
|
|
|
| |
As discovered by John, the old way of initializing the spin locks
breaks when rt_domains are allocated dynamically.
|
|
|
|
|
| |
- give TRACE() messages sequence numbers
- remove a some old, unused cruft
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On the T2000, GSN-EDF would eventually deadlock. This was caused by a deadlock
involving the release and ready locks of its rt_domain.
Usually, the dependency in GSN-EDF is:
function held -> required
=========================================
enqueue: ready -> release
gsnedf_job_release: -> ready
arm_release_timer: -> release
So far so good. The problem arose when hrtimer detected that the timer being
armed had already expired (must have been just a few nanoseconds) and decided
to call the callback directly WHILE HOLDING THE RELEASE LOCK. Which led to the
following result:
function held -> required CPU
====================================================
enqueue: ready -> release 5
gsnedf_job_release: release -> ready 6
We avoid this problem now by dropping the release lock in arm_release_timer()
before calling the job release callback.
|
|
|
|
|
| |
This is modeled after tasklets. Just writing a 0 does not have
the desired effect on SPARC64.
|
| |
|
|
|
|
| |
For debugging, make relinking optimizations available in the TRACE() log.
|
|
|
|
| |
The plugins don't care about best-effort tasks. Don't bother them.
|
|
|
|
| |
Make CPU state available to gdb.
|
|
|
|
| |
Blocking and preemptions must take precedence over forced job completions.
|
|
|
|
|
| |
This change fixes a race where a job could be executed on more than one
CPU, which to random crashes.
|
|
|
|
| |
Added one message and improved another.
|
|
|
|
| |
Don't place events in __init functions.
|
|
|
|
|
| |
We can't use tasklets from within the scheduler.
User no_rqlock_work instead.
|
|
|
|
|
| |
Many things can't be done from within the scheduler.
This framework should make it easer to defer them.
|
| |
|
|
|
|
|
| |
The old version had a significant window for races with
interrupt handlers executing on other CPUs.
|
| |
|
|
|
|
|
| |
sched_clock() is offset from litmus_clock(),
jobs were being delayed for long times.
|
|
|
|
| |
We need to disable Feather-Trace on the Niagara for now, and
there is no reason to always include it, anyway.
|
|
|
|
|
|
| |
- this will make it easier to maintain it across multiple
platforms and versions
- also remove obsolete SRP system call
|
|
|
|
|
| |
pi is confusing, there are many PI schemes in the world.
We implement the FMLP, thus we should label it as such.
|
|
|
|
|
| |
- split SRP into its own file
- rename litmus_sem.c to fmlp.c, since that is what it is
|
|
|
|
|
|
|
|
| |
The SRP implementation did not correctly address various
suspension-related scenarios correctly. Now the need for
SRP blocking is tested on each scheduling event. This ensures
mutual exclusion under the SRP even in the face of unexpected
suspensions, for example due to IO.
|
| |
|
| |
|
| |
|
|
|
|
| |
This is the first step in cleaning up the SRP implementation.
|
|
|
|
|
| |
- don't let SRP be active under GSN-EDF
- later, don't let FMLP be active under PFAIR, either
|
| |
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
litmus/edf_common.c
litmus/sched_gsn_edf.c
litmus/sched_psn_edf.c
Minor clashes between sched_clock() -> litmus_clock() and jobs.c refactoring
merged by hand. The result has been compile-tested.
|
| |
| |
| |
| | |
John's proposal for how to release jobs with hrtimers.
|
| | |
|
|/
|
|
|
|
|
|
|
| |
This adds the internals for two new systems calls:
- sys_wait_for_ts_release()
- sys_release_ts()
The first system call suspends a task until the task systems is
released with the second system call.
|
|
This introduces the core changes ported from LITMUS 2007.
The kernel seems to work under QEMU, but many bugs probably remain.
|