aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-15 15:29:50 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-15 15:29:50 -0500
commit65e5d002b5ad220db2bf9557f53de5a98f7dab86 (patch)
tree93d36afd4b82a24e5b553766a574a6632fca3aff /arch/arm/kernel
parent38567333a6dabd0f2b4150e9fb6dd8e3ba2985e5 (diff)
parentcb4d3eaebb96616085f5a46a7d7e004ddd955b09 (diff)
Merge branch 'fixes' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'fixes' of master.kernel.org:/home/rmk/linux-2.6-arm: ARM: fix missing branch in __error_a ARM: fix /proc/$PID/stack on SMP ARM: Fix build regression on SA11x0, PXA, and H720x targets ARM: 6625/1: use memblock memory regions for "System RAM" I/O resources ARM: fix wrongly patched constants ARM: 6624/1: fix dependency for CONFIG_SMP_ON_UP ARM: 6623/1: Thumb-2: Fix out-of-range offset for Thumb-2 in proc-v7.S ARM: 6622/1: fix dma_unmap_sg() documentation ARM: 6621/1: bitops: remove condition code clobber for CLZ ARM: 6620/1: Change misleading warning when CONFIG_CMDLINE_FORCE is used ARM: 6619/1: nommu: avoid mapping vectors page when !CONFIG_MMU ARM: sched_clock: make minsec argument to clocks_calc_mult_shift() zero ARM: sched_clock: allow init_sched_clock() to be called early ARM: integrator: fix compile warning in cpu.c ARM: 6616/1: Fix ep93xx-fb init/exit annotations ARM: twd: fix display of twd frequency ARM: udelay: prevent math rounding resulting in short udelays
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r--arch/arm/kernel/head-common.S2
-rw-r--r--arch/arm/kernel/process.c2
-rw-r--r--arch/arm/kernel/sched_clock.c9
-rw-r--r--arch/arm/kernel/setup.c22
-rw-r--r--arch/arm/kernel/smp_twd.c2
-rw-r--r--arch/arm/kernel/stacktrace.c9
-rw-r--r--arch/arm/kernel/time.c4
7 files changed, 32 insertions, 18 deletions
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S
index bbecaac1e01..8f57515bbdb 100644
--- a/arch/arm/kernel/head-common.S
+++ b/arch/arm/kernel/head-common.S
@@ -60,6 +60,8 @@ str_a1: .asciz "\nError: unrecognized/unsupported machine ID (r1 = 0x"
60str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n" 60str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n"
61str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n" 61str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n"
62 .align 62 .align
63#else
64 b __error
63#endif 65#endif
64 66
65/* 67/*
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index e76fcaadce0..94bbedbed63 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -483,6 +483,7 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
483 return randomize_range(mm->brk, range_end, 0) ? : mm->brk; 483 return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
484} 484}
485 485
486#ifdef CONFIG_MMU
486/* 487/*
487 * The vectors page is always readable from user space for the 488 * The vectors page is always readable from user space for the
488 * atomic helpers and the signal restart code. Let's declare a mapping 489 * atomic helpers and the signal restart code. Let's declare a mapping
@@ -503,3 +504,4 @@ const char *arch_vma_name(struct vm_area_struct *vma)
503{ 504{
504 return (vma->vm_start == 0xffff0000) ? "[vectors]" : NULL; 505 return (vma->vm_start == 0xffff0000) ? "[vectors]" : NULL;
505} 506}
507#endif
diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c
index 2cdcc9287c7..9a46370fe9d 100644
--- a/arch/arm/kernel/sched_clock.c
+++ b/arch/arm/kernel/sched_clock.c
@@ -34,7 +34,7 @@ void __init init_sched_clock(struct clock_data *cd, void (*update)(void),
34 sched_clock_update_fn = update; 34 sched_clock_update_fn = update;
35 35
36 /* calculate the mult/shift to convert counter ticks to ns. */ 36 /* calculate the mult/shift to convert counter ticks to ns. */
37 clocks_calc_mult_shift(&cd->mult, &cd->shift, rate, NSEC_PER_SEC, 60); 37 clocks_calc_mult_shift(&cd->mult, &cd->shift, rate, NSEC_PER_SEC, 0);
38 38
39 r = rate; 39 r = rate;
40 if (r >= 4000000) { 40 if (r >= 4000000) {
@@ -60,10 +60,15 @@ void __init init_sched_clock(struct clock_data *cd, void (*update)(void),
60 * sets the initial epoch. 60 * sets the initial epoch.
61 */ 61 */
62 sched_clock_timer.data = msecs_to_jiffies(w - (w / 10)); 62 sched_clock_timer.data = msecs_to_jiffies(w - (w / 10));
63 sched_clock_poll(sched_clock_timer.data); 63 update();
64 64
65 /* 65 /*
66 * Ensure that sched_clock() starts off at 0ns 66 * Ensure that sched_clock() starts off at 0ns
67 */ 67 */
68 cd->epoch_ns = 0; 68 cd->epoch_ns = 0;
69} 69}
70
71void __init sched_clock_postinit(void)
72{
73 sched_clock_poll(sched_clock_timer.data);
74}
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 3455ad33de4..420b8d6485d 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -518,25 +518,21 @@ setup_ramdisk(int doload, int prompt, int image_start, unsigned int rd_sz)
518#endif 518#endif
519} 519}
520 520
521static void __init 521static void __init request_standard_resources(struct machine_desc *mdesc)
522request_standard_resources(struct meminfo *mi, struct machine_desc *mdesc)
523{ 522{
523 struct memblock_region *region;
524 struct resource *res; 524 struct resource *res;
525 int i;
526 525
527 kernel_code.start = virt_to_phys(_text); 526 kernel_code.start = virt_to_phys(_text);
528 kernel_code.end = virt_to_phys(_etext - 1); 527 kernel_code.end = virt_to_phys(_etext - 1);
529 kernel_data.start = virt_to_phys(_sdata); 528 kernel_data.start = virt_to_phys(_sdata);
530 kernel_data.end = virt_to_phys(_end - 1); 529 kernel_data.end = virt_to_phys(_end - 1);
531 530
532 for (i = 0; i < mi->nr_banks; i++) { 531 for_each_memblock(memory, region) {
533 if (mi->bank[i].size == 0)
534 continue;
535
536 res = alloc_bootmem_low(sizeof(*res)); 532 res = alloc_bootmem_low(sizeof(*res));
537 res->name = "System RAM"; 533 res->name = "System RAM";
538 res->start = mi->bank[i].start; 534 res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region));
539 res->end = mi->bank[i].start + mi->bank[i].size - 1; 535 res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
540 res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; 536 res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
541 537
542 request_resource(&iomem_resource, res); 538 request_resource(&iomem_resource, res);
@@ -650,15 +646,17 @@ static int __init parse_tag_revision(const struct tag *tag)
650 646
651__tagtable(ATAG_REVISION, parse_tag_revision); 647__tagtable(ATAG_REVISION, parse_tag_revision);
652 648
653#ifndef CONFIG_CMDLINE_FORCE
654static int __init parse_tag_cmdline(const struct tag *tag) 649static int __init parse_tag_cmdline(const struct tag *tag)
655{ 650{
651#ifndef CONFIG_CMDLINE_FORCE
656 strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE); 652 strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
653#else
654 pr_warning("Ignoring tag cmdline (using the default kernel command line)\n");
655#endif /* CONFIG_CMDLINE_FORCE */
657 return 0; 656 return 0;
658} 657}
659 658
660__tagtable(ATAG_CMDLINE, parse_tag_cmdline); 659__tagtable(ATAG_CMDLINE, parse_tag_cmdline);
661#endif /* CONFIG_CMDLINE_FORCE */
662 660
663/* 661/*
664 * Scan the tag table for this tag, and call its parse function. 662 * Scan the tag table for this tag, and call its parse function.
@@ -857,7 +855,7 @@ void __init setup_arch(char **cmdline_p)
857 arm_memblock_init(&meminfo, mdesc); 855 arm_memblock_init(&meminfo, mdesc);
858 856
859 paging_init(mdesc); 857 paging_init(mdesc);
860 request_standard_resources(&meminfo, mdesc); 858 request_standard_resources(mdesc);
861 859
862#ifdef CONFIG_SMP 860#ifdef CONFIG_SMP
863 if (is_smp()) 861 if (is_smp())
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c
index dd790745b3e..fd9156698ab 100644
--- a/arch/arm/kernel/smp_twd.c
+++ b/arch/arm/kernel/smp_twd.c
@@ -114,7 +114,7 @@ static void __cpuinit twd_calibrate_rate(void)
114 twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5); 114 twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5);
115 115
116 printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000, 116 printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000,
117 (twd_timer_rate / 100000) % 100); 117 (twd_timer_rate / 1000000) % 100);
118 } 118 }
119 119
120 load = twd_timer_rate / HZ; 120 load = twd_timer_rate / HZ;
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c
index c2e112e1a05..381d23a497c 100644
--- a/arch/arm/kernel/stacktrace.c
+++ b/arch/arm/kernel/stacktrace.c
@@ -94,10 +94,13 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
94 if (tsk != current) { 94 if (tsk != current) {
95#ifdef CONFIG_SMP 95#ifdef CONFIG_SMP
96 /* 96 /*
97 * What guarantees do we have here that 'tsk' 97 * What guarantees do we have here that 'tsk' is not
98 * is not running on another CPU? 98 * running on another CPU? For now, ignore it as we
99 * can't guarantee we won't explode.
99 */ 100 */
100 BUG(); 101 if (trace->nr_entries < trace->max_entries)
102 trace->entries[trace->nr_entries++] = ULONG_MAX;
103 return;
101#else 104#else
102 data.no_sched_functions = 1; 105 data.no_sched_functions = 1;
103 frame.fp = thread_saved_fp(tsk); 106 frame.fp = thread_saved_fp(tsk);
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index f1e2eb19a67..3d76bf23373 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -29,6 +29,7 @@
29 29
30#include <asm/leds.h> 30#include <asm/leds.h>
31#include <asm/thread_info.h> 31#include <asm/thread_info.h>
32#include <asm/sched_clock.h>
32#include <asm/stacktrace.h> 33#include <asm/stacktrace.h>
33#include <asm/mach/arch.h> 34#include <asm/mach/arch.h>
34#include <asm/mach/time.h> 35#include <asm/mach/time.h>
@@ -163,5 +164,8 @@ void __init time_init(void)
163{ 164{
164 system_timer = machine_desc->timer; 165 system_timer = machine_desc->timer;
165 system_timer->init(); 166 system_timer->init();
167#ifdef CONFIG_HAVE_SCHED_CLOCK
168 sched_clock_postinit();
169#endif
166} 170}
167 171