aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/litmus.c
Commit message (Collapse)AuthorAge
* Removed ARM-specific hacks which disabled less common mixed-criticality ↵wip-mcJonathan Herman2013-03-30
| | | | features.
* Remove the uncached-control page code.Christopher Kenna2012-12-04
|
* Disabled release master work.Jonathan Herman2012-10-19
|
* Try and debug the queue.Christopher Kenna2012-10-19
|
* Turn color_ctrl_page into a system call.Christopher Kenna2012-10-18
| | | | | | | | Conflicts: include/litmus/color.h Signed-off-by: Christopher Kenna <cjk@cs.unc.edu>
* A queue for reading in pages.Christopher Kenna2012-10-18
| | | | | | This is not tested and probably won't work. Signed-off-by: Christopher Kenna <cjk@cs.unc.edu>
* Added way tracker.Jonathan Herman2012-10-18
|
* Changes to ARM lockdown and LITMUS cycle counting code.Christopher Kenna2012-10-17
| | | | | | | | | | Try and fix the cycle counter on ARMv7 CPUs (unsuccessful). Use the multi-core timer on the ODROID-X to count cycles. Add lockdown register access to proc. Add proc options to disable prefetching for L1/L2 cache. Add test to lockdown.c to print the time to read in various WSSs. Signed-off-by: Christopher Kenna <cjk@cs.unc.edu>
* Fix cycle counters for ARM v7 CPUs.Christopher Kenna2012-10-12
| | | | | | | | Conflicts: arch/arm/mach-omap2/board-omap4panda.c Signed-off-by: Christopher Kenna <cjk@cs.unc.edu>
* uncachable color control pageChristopher Kenna2012-10-11
| | | | Signed-off-by: Christopher Kenna <cjk@cs.unc.edu>
* Architecture dependent uncachable control page.Christopher Kenna2012-10-07
| | | | | | | | | | | | | | | | | | | | | | | | | | While working on an ODROID-X (Samsung Exynos4412 ARM Cortex-A9), I experienced non-determinism when reading and writing values to the LITMUS^RT control page. Writes to the control page from user- (kernel-) space where not always reflected in kernel- (user-) space. Neither restricting the task to run on a single CPU nor inserting general memory barriers (with mb()) fixed the problem. Mapping the control page as uncachable in both kernel and user space did fix the problem, which is what this patch does. Also, since vunmap() cannot be called from an interrupt context, I had to add a workqueue that unmaps and frees the control page when it is no longer needed. (On my system, exit_litmus() was called from interrupt context while the kernel reaped the task_struct.) Conflicts: include/litmus/rt_param.h litmus/litmus.c Does not make the color control page uncachable yet! Signed-off-by: Christopher Kenna <cjk@cs.unc.edu>
* Add ifdef's for CONFIG_PLUGIN_MC and CONFIG_MERGE_TIMERS.Christopher Kenna2012-10-04
|
* Fixed sched_color run issues.Jonathan Herman2012-09-30
|\
| * Cleanup. Remove this commitJonathan Herman2012-09-27
| |
| * Added exit and tardy hooks.Jonathan Herman2012-09-27
| |
| * New Feature: Arbitrary deadlines.2012.2Glenn Elliott2012-08-01
| | | | | | | | | | | | | | | | | | | | | | | | Added support for arbitrary deadlines. Constraint: Relative deadline must be >= exec cost. Use: Set relative deadline in rt_task::rdeadline. Set value to 0 to default to implicit deadlines. Limitations: PFAIR not supported by this patch. PFAIR updated to reject tasks that do not have implicit deadlines.
* | Resolved merge bugs.Jonathan Herman2012-09-29
| |
* | Merge branch 'wip-color' into wip-mcJonathan Herman2012-09-29
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: include/litmus/budget.h include/litmus/litmus.h include/litmus/rt_param.h include/litmus/sched_trace.h include/litmus/trace.h include/trace/events/litmus.h litmus/Makefile litmus/budget.c litmus/ftdev.c litmus/jobs.c litmus/litmus.c litmus/locking.c litmus/preempt.c litmus/rt_domain.c litmus/sched_gsn_edf.c litmus/trace.c
| * | Page reclaiming, control devices, cleanup.Christopher Kenna2012-04-08
| |/ | | | | | | | | Track allocated pages and add a proc handler to reclaim free pages and add control device for allocating colored memory with mmap.
| * Litmus core: simplify np-section protocolwip-2011.2-bbbBjoern B. Brandenburg2011-11-24
| | | | | | | | | | | | User a 32-bit word for all non-preemptive section flags. Set the "please yield soon" flag atomically when accessing it on remotely-scheduled tasks.
| * Avoid needlessly costly migrations. CONFIG_SCHED_CPU_AFFINITYGlenn Elliott2011-08-27
| | | | | | | | | | | | | | | | | | | | | | | | | | Given a choice between several available CPUs (unlinked) on which to schedule a task, let the scheduler select the CPU closest to where that task was previously scheduled. Hopefully, this will reduce cache migration penalties. Notes: SCHED_CPU_AFFINITY is dependent upon x86 (only x86 is supported at this time). Also PFair/PD^2 does not make use of this feature. Signed-off-by: Andrea Bastoni <bastoni@cs.unc.edu>
| * 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.
| * LITMUS Core: Check for valid class in RT-param syscall.Christopher Kenna2011-04-20
| |
* | Debug commit.Christopher Kenna2011-09-30
| | | | | | | | | | | | | | Some things are working, but the kernel panics when you try and deallocate an event group. Committed so Jonathan can look at it.
* | Timer mergingJonathan Herman2011-09-27
| |
* | Check point commit for merging CE with MC plugin.Christopher Kenna2011-09-24
| | | | | | | | | | Also started to fix typos in Jonathan's code, but there were too many after I realized that event_group.o was not in the LITMUS Makefile.
* | Checkpoint commit,initial timer merge designJonathan Herman2011-09-24
| |
* | Merge branch 'wip-mc' of ↵Jonathan Herman2011-09-21
|\ \ | | | | | | | | | ssh://cvs.cs.unc.edu/cvs/proj/litmus/repo/litmus2010 into wip-mc
| * | Passes simple tests.Christopher Kenna2011-09-21
| | |
* | | Now with fine grained lockingJonathan Herman2011-09-21
|/ /
* | Partial cyclic executive plugin.Christopher Kenna2011-09-05
| | | | | | | | | | This is not tested and missing everything for /proc. I just am checking it in so that it the code is backed up in a git repository.
* | Refactor the mixed-criticality (MC) plugin.Christopher Kenna2011-08-27
|/ | | | | | | | | | | | | | | | | | | | | Add linux kernel configuration option CONFIG_LITMUS_MC. Attempt to restore rt_param.h to its original state as much as possible. Remove fields from rt_task and rt_job and move them into a new mc_data struct. Added mc_data field to rt_param compiled in only if using MC plugin. Make a new MC plugin specific header that contains a mc_data struct, which is a container for mc_task struct and a mc_job struct. Update sched_mc.c to use the new data structures. Also, add some macros that simplify the code, e.g., getting task criticality quickly. Add system call to set MC plugin specific stuff. Check for the change in liblitmus. Add a few lines to exit_litmus to reclaim the MC plugin mc_data struct in the task_struct on task exit.
* bugfix: don't let children stay Litmus real-time tasksBjoern B. Brandenburg2011-01-30
| | | | | | | | It has always been LITMUS^RT policy that children of real-time tasks may not skip the admissions test, etc. This used to be enforced, but was apparently dropped during some port. This commit re-introduces this policy. This fixes a kernel panic that occurred when "real-time children" exited without proper initilization.
* Bugfix: synchronize with all other CPUs before switching pluginAndrea Bastoni2010-11-20
| | | | | | | | | | | The CPU triggering the plugin switch should wait until all other CPUs are in a proper state (synch_on_plugin_switch()) before performing the actual switch. Based on the original patch from Jeremy Erickson <jerickso@cs.unc.edu>. This should solve (for most practical cases) the C-EDF-related plugin-switch problem reported on the ML.
* Split out TRACE() from litmus.h and cleanup some includesBjoern B. Brandenburg2010-11-11
| | | | | | | | | | The TRACE() functionality doesn't need all of litmus.h. Currently, it's impossible to use TRACE() in sched.h due to a circular dependency. This patch moves TRACE() and friends to litmus/sched_debug.h, which can be included in sched.h. While at it, also fix some minor include ugliness that was revealed by this change.
* Litmus core: refactor the implementation of /procChristopher Kenna2010-10-23
|
* Litmus core: per-plugin proc directoriesChristopher Kenna2010-10-23
| | | | | | Change the Litmus proc layout so that loaded plugins are visible in /proc/litmus/plugins/loaded and add Litmus functions make_plugin_proc_dir() and remove_plugin_proc_dir() to add per-plugin proc directories.
* 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: allow PRECISE_ENFORCEMENT2010.2Bjoern B. Brandenburg2010-10-19
| | | | | Allow all kinds of budget enforcement settings now that we have the supporting infrastructure.
* Make release master support optionalBjoern B. Brandenburg2010-06-01
| | | | | | | | Introduces CONFIG_RELEASE_MASTER and makes release master support dependent on the new symbol. This is useful because dedicated interrupt handling only applies to "large" multicore platforms. This will allow us to not implement smp_send_pull_timers() for all platforms.
* Add support for one single cluster (all cpus) on C-EDFAndrea Bastoni2010-05-30
| | | | | - With the "ALL" cluster size option the behavior of C-EDF is equivalent to G-EDF (one single cluster)
* Added support for choices in budget policy enforcement.Glenn Elliott2010-05-30
| | | | | | | | | | 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.
* Change most LitmusRT spinlock_t in raw_spinlock_tAndrea Bastoni2010-05-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 ---- Most probably, all the spinlocks changed by this commit will be true spinning lock (raw_spinlock) in PreemptRT (so hopefully we'll need few changes when porting Litmmus to PreemptRT). There are a couple of spinlock that the kernel still defines as spinlock_t (therefore no changes reported in this commit) that might cause us troubles: - 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. ---- This commit also fixes warnings and errors due to the need to include slab.h when using kmalloc() and friends. ---- This commit does not compile.
* Add C-EDF Plugin2010.1Andrea Bastoni2010-05-29
| | | | | | Improved C-EDF plugin. C-EDF now supports different cluster sizes (based on L2 and L3 cache sharing) and supports dynamic changes of cluster size (this requires reloading the plugin).
* Synchronize plugin switchingAndrea Bastoni2010-05-29
| | | | | | Make sure the plugin is not used by any CPUs while switching. The CPU performing the switch sends an IPI to all other CPUs forcing them to synchronize on an atomic variable.
* Bugfix: don't inherit od_table across forksBjoern B. Brandenburg2010-05-29
| | | | | | | | The od_table is strictly per-thread and should not be inherited across a fork/clone. This caused memory corruption when a task exited, which ultimately could lead to oopses in unrelated code. Bug and testcase initially reported by Glenn.
* Add virtual LITMUS^RT control device.Bjoern B. Brandenburg2010-05-29
| | | | | | | | | 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.
* Bugfix: clear LITMUS^RT state on fork completelyBjoern B. Brandenburg2010-05-29
| | | | | | | | | | | | | | | | | | When a real-time task forks, then its LITMUS^RT-specific fields should be cleared, because we don't want real-time tasks to spawn new real-time tasks that bypass the plugin's admission control (if any). This was broken in three ways: 1) kernel/fork.c did not erase all of tsk->rt_param, only the first few bytes due to a wrong size argument to memset(). 2) It should have been calling litmus_fork() instead anyway. 3) litmus_fork() was _also_ not clearing all of tsk->rt_param, due to another size argument bug. Interestingly, 1) and 2) can be traced back to the 2007->2008 port, whereas 3) was added by Mitchell much later on (to dead code, no less). I'm really surprised that this never blew up before.
* Refactor binomial heap names: heap -> bheapAndrea Bastoni2010-05-29
| | | | | | - Binomial heap "heap" names conflicted with priority heap of cgroup in kernel - This patch change binomial heap "heap" names in "bheap"
* [ported from 2008.3] Add rt_domain_t supportAndrea Bastoni2010-05-29
| | | | | Still to be merged: - arm_release_timer() with no rq locking