aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
...
| * | Improve help message for TRACE() bufferBjoern B. Brandenburg2010-11-16
| | | | | | | | | | | | | | | It's not being allocated per cpu anymore. Further, provide a hint to the user where to find the data in userspace.
| * | Make TRACE() buffer size configurableBjoern B. Brandenburg2010-11-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Let the user choose an appropriate buffer size (instead of scaling with NR_CPUS). The kfifo api requires the buffer to be a power of two, so enforce this constraint in the configuration. This fixes a previously-existing compile-time error for values of NR_CPU that are not a power of two. Based on a patch by Mac Mollison <mollison@cs.unc.edu>.
| * | Workaround: do not set rq->skip_clock_updateBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Disabling the clock update seems to be causing problems even in normal Linux, and causes major bugs under LITMUS^RT. As a workaround, just disable this "optimization" for now. Details: the idle load balancer causes tasks that suspsend to be marked with set_tsk_need_resched(). When such a task resumes, it may wrongly trigger the setting of skip_clock_update. However, a corresponding rescheduling event may not happen immediately, such that the currently-scheduled task is no longer charged for its execution time.
| * | Remove LITMUS^RT TRACE_BUG_ON macroBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | | | | Linux now has a macro of the same name, which causes namespace collisions. Since our version is only being used in two places that haven't triggered in several years, let's just remove it.
| * | Avoid warning on 64bit buildsBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | The specifier %u doesn't match sizeof() if sizeof() returns a 64bit quantity on x86_64. Always cast it to int to avoid the warning.
| * | Cleanup TRACE() implementationBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since the intial rebased from .24 to .32, the TRACE() implementation was a hybrid between our old ringbuffer implementation and the new generic kfifo API. This was a) ugly and b) not save for TRACE() invoctations during early boot. This patch rips out the old parts and replaces the actual buffer with a static kfifo. This also increases TRACE() buffer size considerably. As we avoid a dynamic allocation, this a larger size is less problematic for debug builds. This helps a bit with holes in the debug log if the buffer-flushing task is starved.
| * | Hook up LITMUS^RT remote preemption support on ARMBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | Call into scheduler state machine in the IPI handler.
| * | Hook up LITMUS^RT remote preemption support on x86Bjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | Call into scheduler state machine in the IPI handler.
| * | 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.
| * | hook litmus tick function into hrtimer-driven ticksBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | Litmus plugins should also be activated if ticks are triggered by hrtimer.
| * | 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.
| * | sched_trace: make buffer size configurableBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | Large sched_trace buffers cause boot problems on the ARM box. Allow the user to specify smaller buffers.
| * | ARM: hookup LITMUS^RT system callsBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | Includes the LITMUS^RT-specifc unistd.h extension and modifies the actual syscall table.
| * | ARM: Include LITMUS^RT KConfigBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | Make the ARM built aware of the LITMUS^RT-specific options.
| * | ARM: provide get_cycles() for RealView PB11{MP,76} and Cortex-A8Bjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | Use the CCNT register to override the default get_cycles() implementation in arch/arm/asm/timex.h. This is useful for overhead measurements and debugging.
| * | ARM: allow mach/timex.h to define get_cycles()Bjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | | | | Some platforms have access to a cycle coutner (CCNT) register in the CP15 coprocessor. This trivial change will allow such platforms to provide specialized implementations.
| * | C-EDF: move /proc/litmus/cluster_cache to /proc/litmus/plugins/C-EDF/clusterBjoern B. Brandenburg2010-11-11
| | | | | | | | | | | | | | | | | | | | | Make use of the new per-plugin proc file infrastructure to avoid littering the global namespace. While at it, also move all the relevant bits to sched_cedf.c. In the future, each plugin's parameters should be handled in the respective plugin file.
| * | 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_ENFORCEMENTBjoern B. Brandenburg2010-10-19
| | | | | | | | | | | | | | | | | | | | Allow all kinds of budget enforcement settings now that we have the supporting infrastructure.
| * | | Litmus core: enable precise budget enforcementBjoern B. Brandenburg2010-10-19
| | | | | | | | | | | | | | | | Update the budget enforcement timer after each scheduling decision.
| * | | Litmus core: add plugin-independent precise budget enforcement infrastructureBjoern B. Brandenburg2010-10-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Simple logic: if a task requires precise enforcement, then program a hr-timer to fire when the task must be descheduled. When the timer fires, simply activate the scheduler. When we switch to a different task, either reprogram the timer or cancel it.
| * | | Litmus core: add macro to test for PRECISE_ENFORCEMENTBjoern B. Brandenburg2010-10-19
| | | | | | | | | | | | | | | | | | | | | | | | Required for EDF-WM. We should implement precise enforcement in the core distribution soon anyway (once we know how it works in EDF-WM).
| * | | Litmus core: add budget_remaining() helperBjoern B. Brandenburg2010-10-19
| | | | | | | | | | | | | | | | Quick way to figure out how much budget a LITMUS^RT job has left.
| * | | hrtimer: add init function to properly set hrtimer_start_on_info paramsAndrea Bastoni2010-10-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This helper function is also useful to remind us that if we use hrtimer_pull outside the scope of triggering remote releases, we need to take care of properly set the "state" field of hrtimer_start_on_info structure.
| * | | 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.
| * | | rt_domain_t: disable timer TRACE() spam by defaultBjoern B. Brandenburg2010-10-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | These messages are highly useful when debugging races, but they quickly litter the log when looking for something else. We keep them around, but by default they shouldn't show up.
| * | | rt_domain_t: add add_release_on()Bjoern B. Brandenburg2010-10-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This API addition allows the calling code to override the release master for a given rt_domain_t object. This is particularly useful if a job is supposed to migrate to a particular CPU. This need arises for example in semi- partitioned schedulers.
| * | | PSN-EDF: remove outdated commentBjoern B. Brandenburg2010-09-21
| | | | | | | | | | | | | | | | | | | | ...and replace it with a more useful one. We don't directly modify Linux run queues anymore since (at least) LITMUS^RT 2008.
| * | | Bugfix: avoid link error in Feather-Trace on x86Bjoern B. Brandenburg2010-07-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If no events are defined but Feater-Trace support is enabled, then the current implementation generates a link error because the __event_table sections is absent. > arch/x86/built-in.o: In function `ft_disable_all_events': > (.text+0x242af): undefined reference to `__start___event_table' As a simple work around, we force zero-element array to always be "allocated" in the __event_table section. This ensures that we end up with a zero-byte section if no events are enabled, and does not affect the layout of the section if events are present. > bbb@ludwig:~/dev/litmus2010$ nm vmlinux | grep event_table > ffffffff81950cdc D __event_table_dummy > ffffffff81950cdc A __start___event_table > ffffffff81950cdc A __stop___event_table
| * | | Bugfix: avoid conditional compilation dependent errorAndrea Bastoni2010-07-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If RELEASE_MASTER is not selected the "info" hrtimer_start_on_info structure in release_heap structure is not visible and trying to access "info" from reinit_release_heap() causes the following error: error: 'struct release_heap' has no member named 'info' info should not be referenced if RELEASE_MASTER is not used. The problem was first reported by Glenn <gelliott@cs.unc.edu>
| * | | Bugfix: change __ARCH_HAS_SEND_PULL_TIMERS in CONFIG_ARCH_HAS_SEND_PULL_TIMERSAndrea Bastoni2010-06-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit "0c527966 Make release master support optional" uses __ARCH_HAS_SEND_PULL_TIMERS instead of CONFIG_ARCH_HAS_SEND_PULL_TIMERS (introduced in commit 0fb33c99) to conditionally compile a pull timer related code in rt_domain.c. This code is disabled and pull-timer's state is no longer properly reset. Therefore, a pulled timer cannot be armed anymore.
| * | | 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.
| * | | Make platform-specific Feather-Trace depend on !CONFIG_DEBUG_RODATABjoern B. Brandenburg2010-06-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Feather-Trace rewrites instructions in the kernel's .text segment. This segment may be write-protected if CONFIG_DEBUG_RODATA is selected. In this case, fall back to the default flag-based Feather-Trace implementation. In the future, we could either adopt the ftrace method of rewriting .text addresses using non-.text mappings or we could consider replacing Feather-Trace with ftrace altogether. For now, this patch avoids unexpected runtime errors.
| * | | Make PFAIR optional to prevent build and runtime failures.Bjoern B. Brandenburg2010-06-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The PFAIR plugin always implicitly assumed !NO_HZ (the schedule is wrong if NO_HZ is enabled) and does not built if hrtimers are absent: > litmus/built-in.o: In function `pfair_activate_plugin': > sched_pfair.c:(.text+0x7f07): undefined reference to `cpu_stagger_offset' > litmus/built-in.o: In function `init_pfair': > sched_pfair.c:(.init.text+0x487): undefined reference to `cpu_stagger_offset' cpu_stagger_offset() is only available if hrtimers are enabled. This patch makes these dependencies explicit.
| * | | Make C-EDF depend on x86 and SYSFSAndrea Bastoni2010-06-01
| | | | | | | | | | | | | | | | | | | | | | | | C-EDF depends on intel_cacheinfo.c (for get_shared_cpu_map()) which is only available on x86 architectures. Furthermore, get_shared_cpu_map() is only available if SYSFS filesystem is present.
| * | | Make smp_send_pull_timers() optional.Bjoern B. Brandenburg2010-06-01
| | | | | | | | | | | | | | | | | | | | There is currently no need to implement this in ARM. So let's make it optional instead.
| * | | 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.
| * | | Make compilation of C-EDF optional.Bjoern B. Brandenburg2010-05-30
| | | | | | | | | | | | | | | | | | | | | | | | C-EDF only makes sense on multicore platforms that have shared caches. Make it possible to disable it on other platforms, in particular, on those that do not export get_shared_cpu_map().
| * | | Make __ARCH_HAS_FEATHER_TRACE a proper CONFIG_ variable.Bjoern B. Brandenburg2010-05-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The idea of the Feather-Trace default implementation is that LITMUS^RT should work without a specialized Feather-Trace implementation present. This was actually broken. Changes litmus/feather_trace.h to only include asm/feather_trace.h if actually promised by the architecture.
| * | | 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.
| * | | 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.
| * | | Update kfifo and spinlock_t in sched_trace.cAndrea Bastoni2010-05-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - kfifo needs to be defined and used differently (see include/linux/kfifo.h) - spinlock -> raw_spinlock - include slab.h when using kmalloc and friends This commit compiles and is the logical end of the merge of Litmus and 2.6.34.
| * | | 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.
| * | | 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.
| * | | Merge branch 'master' into wip-merge-2.6.34Andrea Bastoni2010-05-29
| |\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Simple merge between master and 2.6.34 with conflicts resolved. This commit does not compile, the following main problems are still unresolved: - spinlock -> raw_spinlock API changes - kfifo API changes - sched_class API changes Conflicts: Makefile arch/x86/include/asm/hw_irq.h arch/x86/include/asm/unistd_32.h arch/x86/kernel/syscall_table_32.S include/linux/hrtimer.h kernel/sched.c kernel/sched_fair.c
| | * | | Add C-EDF PluginAndrea 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).
| | * | | Export shared_cpu_mapAndrea Bastoni2010-05-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The cpumap of CPUs that share the same cache level is not normally available outside intel_cacheinfo.c. This commit allows to export such map.