diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-15 15:29:50 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-15 15:29:50 -0500 |
commit | 65e5d002b5ad220db2bf9557f53de5a98f7dab86 (patch) | |
tree | 93d36afd4b82a24e5b553766a574a6632fca3aff /arch/arm/kernel | |
parent | 38567333a6dabd0f2b4150e9fb6dd8e3ba2985e5 (diff) | |
parent | cb4d3eaebb96616085f5a46a7d7e004ddd955b09 (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.S | 2 | ||||
-rw-r--r-- | arch/arm/kernel/process.c | 2 | ||||
-rw-r--r-- | arch/arm/kernel/sched_clock.c | 9 | ||||
-rw-r--r-- | arch/arm/kernel/setup.c | 22 | ||||
-rw-r--r-- | arch/arm/kernel/smp_twd.c | 2 | ||||
-rw-r--r-- | arch/arm/kernel/stacktrace.c | 9 | ||||
-rw-r--r-- | arch/arm/kernel/time.c | 4 |
7 files changed, 32 insertions, 18 deletions
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index bbecaac1e013..8f57515bbdb0 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" | |||
60 | str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n" | 60 | str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n" |
61 | str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n" | 61 | str_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 e76fcaadce03..94bbedbed639 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 2cdcc9287c74..9a46370fe9da 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 | |||
71 | void __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 3455ad33de4c..420b8d6485d6 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 | ||
521 | static void __init | 521 | static void __init request_standard_resources(struct machine_desc *mdesc) |
522 | request_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 | ||
654 | static int __init parse_tag_cmdline(const struct tag *tag) | 649 | static 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 dd790745b3ef..fd9156698ab9 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 c2e112e1a05f..381d23a497c1 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 f1e2eb19a67d..3d76bf233734 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 | ||