| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adapt to new schema for spinlock:
(tglx 20091217)
spinlock - the weakest one, which might sleep in RT
raw_spinlock - spinlock which always spins even on RT
arch_spinlock - the hardware level architecture dependent implementation
----
Planning for future porting on PreemptRT, probably all of the
spinlock changed in this patch should true spinning lock (raw_spinlock).
There are a couple of spinlock that the kernel still defines as
spinlock_t (therefore no changes reported in this commit) that might cause
problems to us:
- wait_queue_t lock is defined as spinlock_t; it is used in:
* fmlp.c -- sem->wait.lock
* sync.c -- ts_release.wait.lock
- rwlock_t used in fifo implementation in sched_trace.c
* this need probably to be changed to something always spinning in RT
at the expense of increased locking time.
|
|
|
|
|
|
|
|
|
|
| |
NO_ENFORCEMENT - A job may execute beyond its declared execution time.
Jobs notify the kernel that they are complete via liblitmus's
sleep_next_period()
QUANTUM_ENFORCEMENT - The kernel terminates a job if its actual execution
time exceeds the declared execution time.
PRECISE_ENFORCEMENT - Hook declared, but not yet implemented. Plan to
support this policy through hrtimers. Error thrown if specified.
|
|
|
|
|
| |
- read L2, L3 clustering from proc file (default L2)
- check for "feasible cluster size"
|
|
|
|
|
|
|
|
| |
1) High priority task tied to FMLP semaphore in P-EDF scheduling is
incorrectly tracked for tasks acquiring the lock without
contention. (HP is always set to CPU 0 instead of proper CPU.)
2) Race in a print statement from P-EDF's pi_block() causes NULL
pointer dereference.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In feather_trace_64 with optimized gcc kernel code we must force the
reloading of additional (non very obvious :) registers.
Fixes the following BUG:
[ 66.288413] BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
[ 66.289276] IP: [<ffffffff81208a8b>] requeue+0x1b/0x90
[ 66.289276] PGD 7b8cf067 PUD 7ad9e067 PMD 0
[ 66.289276] Oops: 0000 [#1] PREEMPT SMP
[ 66.289276] last sysfs file: /sys/devices/pci0000:00/0000:00:01.1/ide0/0.0/block/hda/size
[ 66.289276] CPU 3
[ 66.289276] Modules linked in:
[ 66.289276] Pid: 1485, comm: release_ts Not tainted 2.6.32-litmus2010 #172
[ 66.289276] RIP: 0010:[<ffffffff81208a8b>] [<ffffffff81208a8b>] requeue+0x1b/0x90
[ 66.289276] RSP: 0018:ffff88007b47fdc8 EFLAGS: 00010086
[ 66.289276] RAX: 0000000000000000 RBX: ffff88007b47ffd8 RCX: ffff8800063d1560
[ 66.289276] RDX: 0000000000000000 RSI: 0000000000000018 RDI: ffff88007b47ffd8
[ 66.289276] RBP: ffff88007b47fdd8 R08: 0000000000000001 R09: 0000000000000000
[ 66.289276] R10: 0000000000000003 R11: 0000000000000000 R12: ffff88007b47ffd8
[ 66.289276] R13: ffff880005fed240 R14: 0000000000000003 R15: ffff88007b47fe88
[ 66.289276] FS: 000000000077b850(0063) GS:ffff880006200000(0000) knlGS:0000000000000000
[ 66.289276] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 66.289276] CR2: 0000000000000018 CR3: 000000007bb5d000 CR4: 00000000000006a0
[ 66.289276] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 66.289276] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 66.289276] Process release_ts (pid: 1485, threadinfo ffff88007b47e000, task ffff88007ba71320)
[ 66.289276] Stack:
[ 66.289276] ffff88007b47ffd8 0000000000000082 ffff88007b47fde8 ffffffff81208ec3
[ 66.289276] <0> ffff88007b47fe08 ffffffff8120968f ffff880005fed240 ffff88007b725fa0
[ 66.289276] <0> ffff88007b47fe28 ffffffff810332ed ffff88007b47fe38 ffff88007b725fa0
[ 66.289276] Call Trace:
[ 66.289276] [<ffffffff81208ec3>] gsnedf_job_arrival+0x13/0x20
[ 66.289276] [<ffffffff8120968f>] gsnedf_task_wake_up+0x8f/0xd0
[ 66.289276] [<ffffffff810332ed>] enqueue_task_litmus+0x3d/0x90
[ 66.289276] [<ffffffff8102c48d>] enqueue_task+0x2d/0x40
[ 66.289276] [<ffffffff8102c55e>] activate_task+0x2e/0x40
[ 66.289276] [<ffffffff8103646b>] try_to_wake_up+0x1db/0x360
[ 66.289276] [<ffffffff81036602>] default_wake_function+0x12/0x20
[ 66.289276] [<ffffffff8102c96b>] __wake_up_common+0x5b/0x90
[ 66.289276] [<ffffffff81030ddd>] complete_n+0x4d/0x70
[ 66.289276] [<ffffffff81205634>] sys_release_ts+0x104/0x120
[ 66.289276] [<ffffffff8100b2eb>] system_call_fastpath+0x16/0x1b
[ 66.289276] Code: c7 40 04 01 00 00 00 e9 89 fe ff ff 0f 1f 40 00 55 48 89 e5 41 54 53 0f 1f 44 00 00 48 85 ff 49 89 fc 74 64 48 8b 87 c0 12 00 00 <83> 78 18 ff 75 5f 48 8b 9f 70 12 00 00 e8 e3 d1 e5 ff 48 39 d8
[ 66.289276] RIP [<ffffffff81208a8b>] requeue+0x1b/0x90
[ 66.289276] RSP <ffff88007b47fdc8>
[ 66.289276] CR2: 0000000000000018
[ 66.289276] ---[ end trace 1475fc2061a1b4b5 ]---
|
|
|
|
|
|
|
|
| |
Dealing with preemptions across CPUs in the presence of non-preemptive
sections can be tricky and should not be replicated across (event-driven) plugins.
This patch introduces a generic preemption function that handles
non-preemptive sections (hopefully) correctly.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
This device only supports mmap()'ing a single page.
This page is shared RW between the kernel and userspace.
It is inteded to allow near-zero-overhead communication
between the kernel and userspace. It's first use will be a
proper implementation of user-signaled
non-preemptable section support.
|
|
|
|
|
| |
Add x86_32 architecture dependent code and add the infrastructure
for x86_32 - x86_64 integration.
|
|
|
|
|
|
|
| |
- Binomial heap "heap" names conflicted with priority heap
of cgroup in kernel
- This patch change binomial heap "heap" names in "bheap" (I wasn't
able to come up with a more interesting name, so proposal are welcomed)
|
|
|
|
|
|
| |
- add syscall on x86_64
- refactor __NR_sleep_next_period -> __NR_complete_job
for both x86_32 and x86_64
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
to be merged:
- arm_release_timer() with no rq locking
|
|
|
|
|
|
|
|
| |
- fix requesting more than 2^11 pages (MAX_ORDER)
to system allocator
to be merged:
- feather-trace generic implementation
|
| |
|
|
to be merged:
- SRP (sched.c)
- feather-trace implementation (to be fixed)
- sync support (KConfig)
litmus_sched_class implements 3 new methods:
.prio_changed:
void
.switched_to:
void
.get_rr_interval:
return infinity (i.e., 0)
|