aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/kernel
AgeCommit message (Collapse)AuthorFilesLines
2010-12-20ARM: SMP: consolidate the common parts of smp_prepare_cpus()Russell King1-11/+38
There is a certain amount of smp_prepare_cpus() which doesn't belong in the platform support code - that is, code which is invariant to the SMP implementation. Move this code into arch/arm/kernel/smp.c, and add a platform_ prefix to the original function. Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: SMP: ensure smp_send_stop() waits for CPUs to stopRussell King1-3/+15
Wait for CPUs to indicate that they've stopped, after sending the stop IPI, rather than blindly continuing on and hoping that they've stopped in time. Print a warning if we fail to stop the other CPUs. Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: SMP: use more sane register allocation for __fixup_smp_on_upRussell King1-17/+22
Use r0,r3-r6 rather than r0,r3,r4,r6,r7, which makes it easier to understand which registers can be modified. Also document which registers hold values which must be preserved. Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: SMP: collect IPI and local timer IRQs for /proc/statRussell King1-0/+15
The IPI and local timer interrupts weren't being properly accounted for in /proc/stat. Collect them from the irq_stat structure, and return their sum. Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: SMP: provide individual IPI interrupt statisticsRussell King2-6/+24
This separates out the individual IPI interrupt counts from the total IPI count, which allows better visibility of what IPIs are being used for. Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: pxa: add iwmmx support for PJ4Haojian Zhuang3-13/+137
iwmmxt is used in XScale, XScale3, Mohawk and PJ4 core. But the instructions of accessing CP0 and CP1 is changed in PJ4. Append more files to support iwmmxt in PJ4 core. Signed-off-by: Zhou Zhu <[email protected]> Signed-off-by: Haojian Zhuang <[email protected]> Acked-by: Nicolas Pitre <[email protected]> Signed-off-by: Eric Miao <[email protected]>
2010-12-20ARM: fix /proc/interrupts formattingRussell King3-15/+20
As per x86, align the initial column according to how many IRQs we have. Also, provide an english explaination for the 'LOC:' and 'IPI:' lines. Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: SMP: move ipi_count into irq_stat structureRussell King1-12/+2
Move the ipi_count into irq_stat, which allows the ipi_data structure to be entirely removed. Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: SMP: provide accessors for irq_stat dataRussell King1-2/+2
Provide __inc_irq_stat() and __get_irq_stat() to increment and read the irq stat counters. Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: include local timer irq stats only when local timers configuredRussell King2-12/+14
Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-20ARM: SMP: remove send_ipi_message()Russell King1-13/+5
send_ipi_message() does nothing except call smp_cross_call(). As this is a static function, nothing external to this file calls it, so we can easily clean up this now unnecessary indirection. Signed-off-by: Russell King <[email protected]>
2010-12-18Merge branch 'hw-breakpoint' of git://repo.or.cz/linux-2.6/linux-wd into ↵Russell King4-226/+344
devel-stable
2010-12-18ARM: smp: avoid incrementing mm_users on CPU startupRussell King1-1/+0
We should not be incrementing mm_users when we startup a secondary CPU - doing so results in mm_users incrementing by one each time we hotplug a CPU, which will eventually wrap, and will cause problems. Other architectures such as x86 do not increment mm_users, but only mm_count, so we follow that pattern. Signed-off-by: Russell King <[email protected]>
2010-12-16perf: Dynamic pmu typesPeter Zijlstra1-1/+1
Extend the perf_pmu_register() interface to allow for named and dynamic pmu types. Because we need to support the existing static types we cannot use dynamic types for everything, hence provide a type argument. If we want to enumerate the PMUs they need a name, provide one. Signed-off-by: Peter Zijlstra <[email protected]> LKML-Reference: <[email protected]> Signed-off-by: Ingo Molnar <[email protected]>
2010-12-15ARM: hw_breakpoint: do not fail initcall if monitor mode is disabledWill Deacon1-29/+25
The debug registers can only be manipulated from software if monitor debug mode is enabled. On some cores, this can never be enabled (i.e. the corresponding bit in the DSCR is RAZ/WI). This patch ensures we can handle this hardware configuration and fail gracefully, rather than blow up the kernel during boot. Reported-by: Cyril Chemparathy <[email protected]> Signed-off-by: Will Deacon <[email protected]>
2010-12-14ARM: GIC: move enablement of PPI interrupts to gic.cRussell King1-6/+1
Avoid adding nasty genirq-specific code to local timers to enable PPI interrupts. Instead, provide a gic function to do this. Signed-off-by: Russell King <[email protected]>
2010-12-07Merge commit 'v2.6.37-rc5' into perf/coreIngo Molnar3-1/+10
Merge reason: Pick up the latest -rc. Signed-off-by: Ingo Molnar <[email protected]>
2010-12-06ARM: hw_breakpoint: fix warnings generated by sparseWill Deacon1-7/+13
sparse doesn't like per-cpu accesses such as: static DEFINE_PER_CPU(struct perf_event *, foo[MAXLEN]); struct perf_event **bar = __get_cpu_var(foo); and shouts quite loudly about it: | warning: incorrect type in assignment (different modifiers) | expected struct perf_event **slots | got struct perf_event *[noderef] *<noident> This patch adds casts to these sorts of assignments in hw_breakpoint.c in order to silence the warnings. Reported-by: Russell King <[email protected]> Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: ptrace: fix style issue with hw_breakpoint interfaceWill Deacon1-2/+2
This patch fixes a trivial style issue in ptrace.c. Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: hw_breakpoint: disallow per-cpu breakpoints without overflow handlerWill Deacon1-2/+4
Single-stepping a breakpoint requires us to disable it temporarily so that we don't get stuck in a recursive debug trap. With per-cpu breakpoints this presents a problem where an interrupt can be taken before the single-step has completed and a new task is eventually scheduled. This new task will not hit the breakpoint because it will have been disabled during the previous handling code. This patch disallows per-cpu breakpoints on ARM when an overflow handler is not present. A similar effect can be created by placing breakpoints on a shell and then running applications there. Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: hw_breakpoint: unify single-stepping code for watchpoints and breakpointsWill Deacon1-41/+40
The single-stepping code is currently different depending on whether we are stepping over a breakpoint or a watchpoint. There is no good reason for this, so let's sort it out. This patch adds functions for enabling/disabling single-step for a particular hw_breakpoint and integrates this with the exception handling code. Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: hw_breakpoint: do not allocate new breakpoints with preemption disabledWill Deacon1-57/+77
The watchpoint single-stepping code calls register_user_hw_breakpoint to register a mismatch breakpoint for stepping over the watchpoint. This is performed with preemption disabled, which is unsafe as we may end up scheduling whilst in_atomic(). Furthermore, using the perf API is rather overkill since we are already in the hw-breakpoint backend and only require access to reserved breakpoints anyway. This patch reworks the watchpoint stepping code so that we don't require another perf_event for the mismatch breakpoint. Instead, we hold a separate arch_hw_breakpoint_ctrl struct inside the watchpoint which is used exclusively for stepping. We can check whether or not stepping is enabled when installing or uninstalling the watchpoint and operate on the breakpoint accordingly. Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: hw_breakpoint: don't advertise reserved breakpointsWill Deacon1-89/+117
To permit handling of watchpoint exceptions without signalling a debugger, it is necessary to reserve breakpoint registers for in-kernel use only. This patch ensures that we record and subtract the number of reserved breakpoints from the number of usable breakpoint registers that we advertise to userspace via the ptrace API. Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: hw_breakpoint: disable preemption during debug exception handlingWill Deacon3-5/+36
On ARM, debug exceptions occur in the form of data or prefetch aborts. One difference is that debug exceptions require access to per-cpu banked registers and data structures which are not saved in the low-level exception code. For kernels built with CONFIG_PREEMPT, there is an unlikely scenario that the debug handler ends up running on a different CPU from the one that originally signalled the event, resulting in random data being read from the wrong registers. This patch adds a debug_entry macro to the low-level exception handling code which checks whether the taken exception is a debug exception. If it is, the preempt count for the faulting process is incremented. After the debug handler has finished, the count is decremented. Acked-by: Catalin Marinas <[email protected]> Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: hw_breakpoint: correct and simplify alignment fixup codeWill Deacon1-26/+31
The current hw_breakpoint code tries to fix up the alignment of breakpoints so that we can make use of sparse byte-address-select bits in the control register and give the illusion that we can set breakpoints on unaligned addresses. Although this works on v6 cores, v7 forbids this behaviour, instead requiring breakpoints to be set on aligned addresses and have contiguous byte-address-select ranges depending on the instruction set in use. For ARM the only supported size is 4 bytes, whilst Thumb-2 also permits 2 byte breakpoints (watchpoints can be of 1, 2, 4 or 8 bytes long). This patch simplifies the alignment fixup code so that we require addresses to be aligned to the size of the corresponding breakpoint. This allows us to handle the common case of breaking on a half-word aligned Thumb-2 instruction and also allows us to set byte watchpoints on arbitrary addresses. Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: hw_breakpoint: reset control registers in hotplug pathWill Deacon1-1/+15
The ARMv7 debug architecture doesn't make any guarantees about the contents of debug control registers following a debug logic reset. This patch ensures that we reset the control registers when a cpu comes ONLINE (for example, with hotplug) so that when we enable monitor mode while inserting a breakpoint we won't exhibit random behaviour. Signed-off-by: Will Deacon <[email protected]>
2010-12-06ARM: hw_breakpoint: ensure OS lock is clear before writing to debug registersWill Deacon1-5/+22
ARMv7 architects a system for saving and restoring the debug registers across low-power modes. At the heart of this system is a lock register which, when set, forbids writes to the debug registers. While locked, writes to debug registers via the co-processor interface will result in undefined instruction traps. Linux currently doesn't make use of this feature because we update the debug registers on context switch anyway, however the status of the lock is IMPLEMENTATION DEFINED on reset. This patch ensures that the lock is cleared during boot so that we can write to the debug registers safely. Signed-off-by: Will Deacon <[email protected]>
2010-12-05ARM: move high-usage mostly read variables in setup.c to __read_mostlyRussell King1-8/+8
Signed-off-by: Russell King <[email protected]>
2010-12-05ARM: implement support for read-mostly sectionsRussell King1-0/+1
As our SMP implementation uses MESI protocols. Grouping together data which is mostly only read together means that we avoid unnecessary cache line bouncing when this code shares a cache line with other data. In other words, cache lines associated with read-mostly data are expected to spend most of their time in shared state. Signed-off-by: Russell King <[email protected]>
2010-12-04ARM: 6521/1: perf: use raw_spinlock_t for pmu_lockWill Deacon4-35/+35
For kernels built with PREEMPT_RT, critical sections protected by standard spinlocks are preemptible. This is not acceptable on perf as (a) we may be scheduled onto a different CPU whilst reading/writing banked PMU registers and (b) the latency when reading the PMU registers becomes unpredictable. This patch upgrades the pmu_lock spinlock to a raw_spinlock instead. Reported-by: Jamie Iles <[email protected]> Signed-off-by: Will Deacon <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-04ARM: 6512/1: perf: fix warnings generated by sparseWill Deacon4-23/+23
Russell reported a number of warnings coming from sparse when checking the ARM perf_event.c files: | perf_event.c seems to also have problems too: | | CHECK arch/arm/kernel/perf_event.c | arch/arm/kernel/perf_event.c:37:1: warning: symbol 'pmu_lock' was not declared. Should it be static? | arch/arm/kernel/perf_event.c:70:1: warning: symbol 'cpu_hw_events' was not declared. Should it be static? | arch/arm/kernel/perf_event.c:1006:1: warning: symbol 'armv6pmu_enable_event' was not declared. Should it be static? | arch/arm/kernel/perf_event.c:1113:1: warning: symbol 'armv6pmu_stop' was not declared. Should it be static? | arch/arm/kernel/perf_event.c:1956:6: warning: symbol 'armv7pmu_enable_event' was not declared. Should it be static? | arch/arm/kernel/perf_event.c:3072:14: warning: incorrect type in argument 1 (different address spaces) | arch/arm/kernel/perf_event.c:3072:14: expected void const volatile [noderef] <asn:1>*<noident> | arch/arm/kernel/perf_event.c:3072:14: got struct frame_tail *tail | arch/arm/kernel/perf_event.c:3074:49: warning: incorrect type in argument 2 (different address spaces) | arch/arm/kernel/perf_event.c:3074:49: expected void const [noderef] <asn:1>*from | arch/arm/kernel/perf_event.c:3074:49: got struct frame_tail *tail This patch resolves these issues so we can live in silence again. Reported-by: Russell King <[email protected]> Signed-off-by: Will Deacon <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-04ARM: 6522/1: kexec: Add call to non-crashing cores through IPIPer Fransson1-0/+30
When kexec is used to start a crash kernel the other cores are notified. These non-crashing cores will save their state in the crash notes and then do nothing. Signed-off-by: Per Fransson <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-04ARM: 6519/1: kuser: Fix incorrect cmpxchg syscall in kuser helpersDave Martin1-1/+1
The existing code invokes the syscall with rubbish in r7, due to what looks like an incorrect literal load idiom. Reviewed-by: Will Deacon <[email protected]> Signed-off-by: Dave Martin <[email protected]> Acked-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-03ARM: SMP: remove IRQ-disabling for smp_cross_call()Russell King1-6/+0
As we've now removed the spinlock and bitmask, we have nothing left which requires interrupts to be disabled when sending an IPI. All current IPI-sending implementations use the GIC, which also does not require interrupts disabled when calling gic_raise_softirq(). Remove the now unnecessary IRQ disable. Signed-off-by: Russell King <[email protected]>
2010-12-03ARM: SMP: avoid using bitmasks and locks for IPIs, use hardware insteadRussell King1-61/+26
Avoid using bitmasks and locks in the percpu area for IPIs, and instead use individual software generated interrupts to identify the reason for the IPI. This avoids the problems of having spinlocks in the percpu area. Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-03ARM: SMP: pass an ipi number to smp_cross_call()Russell King2-9/+3
This allows us to use smp_cross_call() to trigger a number of different software generated interrupts, rather than combining them all on one SGI. Recover the SGI number via do_IPI. Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-12-01ARM: module: ignore unwind for sections not marked SHF_ALLOCRussell King1-0/+3
If a section is not marked with SHF_ALLOC, it will be discarded by the module code. Therefore, it is not correct to register the unwind tables. Signed-off-by: Russell King <[email protected]>
2010-12-01ARM: module: clean up handling of ELF unwind tablesRussell King1-55/+51
There's no need to keep pointers to the ELF sections available while the module is loaded - we only need the section pointers while we're finding and registering the unwind tables, which can all be done during the finalize stage of loading. Signed-off-by: Russell King <[email protected]>
2010-11-30ARM: 6504/1: Thumb-2: Fix long-distance conditional branches in head.S for ↵Dave Martin1-0/+3
Thumb-2. The 32-bit conditional branches in Thumb-2 have a shorter range (+/-512K) than their ARM counterparts (+/-32MB). The linker does not currently generate trampolines to extend the range of these Thumb-2 conditional branches, resulting in link errors when vmlinux is sufficiently large, e.g.: head.o:(.text+0x464): relocation truncated to fit: R_ARM_THM_JUMP19 This patch forces the longer-range, unconditional branch encoding by use of an explicit IT instruction. The resulting branches are triggered on the same conditions as before. Signed-off-by: Dave Martin <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-11-30ARM: 6500/1: Thumb-2: Correct data alignment for CONFIG_THUMB2_KERNEL in ↵Dave Martin1-0/+4
kernel/head.S Directives such as .long and .word do not magically cause the assembler location counter to become aligned in gas. As a result, using these directives in code sections can result in misaligned data words when building a Thumb-2 kernel (CONFIG_THUMB2_KERNEL). This is a Bad Thing, since the ABI permits the compiler to assume that fundamental types of word size or above are word- aligned when accessing them from C. If the data is not really word-aligned, this can cause impaired performance and stray alignment faults in some circumstances. In general, the following rules should be applied when using data word declaration directives inside code sections: * .quad and .double: .align 3 * .long, .word, .single, .float: .align (or .align 2) * .short: No explicit alignment required, since Thumb-2 instructions are always 2 or 4 bytes in size. immediately after an instruction. Reviewed-by: Will Deacon <[email protected]> Signed-off-by: Dave Martin <[email protected]> Acked-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-11-30ARM: 6497/1: kexec: Correct data alignment for CONFIG_THUMB2_KERNELDave Martin1-0/+2
Directives such as .long and .word do not magically cause the assembler location counter to become aligned in gas. As a result, using these directives in code sections can result in misaligned data words when building a Thumb-2 kernel (CONFIG_THUMB2_KERNEL). This is a Bad Thing, since the ABI permits the compiler to assume that fundamental types of word size or above are word- aligned when accessing them from C. If the data is not really word-aligned, this can cause impaired performance and stray alignment faults in some circumstances. In general, the following rules should be applied when using data word declaration directives inside code sections: * .quad and .double: .align 3 * .long, .word, .single, .float: .align (or .align 2) * .short: No explicit alignment required, since Thumb-2 instructions are always 2 or 4 bytes in size. immediately after an instruction. Reviewed-by: Will Deacon <[email protected]> Signed-off-by: Dave Martin <[email protected]> Acked-by: Catalin Marinas <[email protected]> Signed-off-by: Russell King <[email protected]>
2010-11-26ARM: pgtable: directly pass pgd/pmd/pte to their error functionsRussell King1-6/+6
Rather than passing the pte value to __pte_error, pass the raw pte_t cookie instead. Do the same for pmd and pgd functions. Signed-off-by: Russell King <[email protected]>
2010-11-26perf, arch: Cleanup perf-pmu init vs lockup-detectorPeter Zijlstra1-1/+1
The perf hardware pmu got initialized at various points in the boot, some before early_initcall() some after (notably arch_initcall). The problem is that the NMI lockup detector is ran from early_initcall() and expects the hardware pmu to be present. Sanitize this by moving all architecture hardware pmu implementations to initialize at early_initcall() and move the lockup detector to an explicit initcall right after that. Cc: paulus <[email protected]> Cc: davem <[email protected]> Cc: Michael Cree <[email protected]> Cc: Deng-Cheng Zhu <[email protected]> Acked-by: Paul Mundt <[email protected]> Acked-by: Will Deacon <[email protected]> Signed-off-by: Peter Zijlstra <[email protected]> LKML-Reference: <1290707759.2145.119.camel@laptop> Signed-off-by: Ingo Molnar <[email protected]>
2010-11-26ARM: always build swp_emulate as ARMv7Russell King1-0/+1
swp_emulate is only used on ARMv7+, and includes ARMv7+ assembly instructions. Allow the assembler to accept ARMv7 instructions, but leave the compiler's code generation options alone. Signed-off-by: Russell King <[email protected]>
2010-11-26Merge branch 'ftrace' of git://github.com/rabinv/linux-2.6 into devel-stableRussell King6-74/+244
2010-11-25ARM: perf: separate PMU backends into multiple filesWill Deacon4-2352/+2390
The ARM perf_event.c file contains all PMU backends and, as new PMUs are introduced, will continue to grow. This patch follows the example of x86 and splits the PMU implementations into separate files which are then #included back into the main file. Compile-time guards are added to each PMU file to avoid compiling in code that is not relevant for the version of the architecture which we are targetting. Acked-by: Jean Pihet <[email protected]> Signed-off-by: Will Deacon <[email protected]>
2010-11-25ARM: perf: encode PMU name in arm_pmu structureWill Deacon1-11/+8
Currently, perf uses the PMU ID as an index into a string table to look up the name of a given PMU. This patch encodes the name of a PMU directly into the arm_pmu structure so that PMU-specific code can be factored out into separate files. Acked-by: Jamie Iles <[email protected]> Acked-by: Jean Pihet <[email protected]> Signed-off-by: Will Deacon <[email protected]>
2010-11-25ARM: perf: add _init() functions to PMUsWill Deacon1-20/+45
In preparation for separating the PMU-specific code, this patch adds self-contained init functions to each PMU, therefore removing any PMU-specific knowledge from the PMU-agnostic init_hw_perf_events function. Acked-by: Jamie Iles <[email protected]> Acked-by: Jean Pihet <[email protected]> Signed-off-by: Will Deacon <[email protected]>
2010-11-25ARM: perf: avoid exposing internal stop function for v6 PMUWill Deacon1-1/+1
Unlike other pmu functions, armv6pmu_pmu_stop is not declared static. This patch adds the missing keyword. Acked-by: Jamie Iles <[email protected]> Signed-off-by: Will Deacon <[email protected]>
2010-11-25ARM: perf: consolidate common PMU behaviourWill Deacon1-93/+38
The functions for mapping PMU events (perf, cache and raw) are common between all PMU types and differ only in the data on which they operate. This patch implements common definitions of these mapping functions and changes the arm_pmu struct to hold pointers to the data which they require. This is in anticipation of separating out the PMU-specific code into separate files. Acked-by: Jamie Iles <[email protected]> Acked-by: Jean Pihet <[email protected]> Signed-off-by: Will Deacon <[email protected]>