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

+52 -34
+1 -1
arch/arm/Kconfig
··· 1281 1281 config SMP_ON_UP 1282 1282 bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)" 1283 1283 depends on EXPERIMENTAL 1284 - depends on SMP && !XIP 1284 + depends on SMP && !XIP_KERNEL 1285 1285 default y 1286 1286 help 1287 1287 SMP kernels contain instructions which fail on non-SMP processors.
+1 -1
arch/arm/include/asm/bitops.h
··· 285 285 if (__builtin_constant_p(x)) 286 286 return constant_fls(x); 287 287 288 - asm("clz\t%0, %1" : "=r" (ret) : "r" (x) : "cc"); 288 + asm("clz\t%0, %1" : "=r" (ret) : "r" (x)); 289 289 ret = 32 - ret; 290 290 return ret; 291 291 }
+2
arch/arm/include/asm/sched_clock.h
··· 115 115 } 116 116 } 117 117 118 + extern void sched_clock_postinit(void); 119 + 118 120 #endif
+2
arch/arm/kernel/head-common.S
··· 60 60 str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n" 61 61 str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n" 62 62 .align 63 + #else 64 + b __error 63 65 #endif 64 66 65 67 /*
+2
arch/arm/kernel/process.c
··· 483 483 return randomize_range(mm->brk, range_end, 0) ? : mm->brk; 484 484 } 485 485 486 + #ifdef CONFIG_MMU 486 487 /* 487 488 * The vectors page is always readable from user space for the 488 489 * atomic helpers and the signal restart code. Let's declare a mapping ··· 504 503 { 505 504 return (vma->vm_start == 0xffff0000) ? "[vectors]" : NULL; 506 505 } 506 + #endif
+7 -2
arch/arm/kernel/sched_clock.c
··· 34 34 sched_clock_update_fn = update; 35 35 36 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 39 r = rate; 40 40 if (r >= 4000000) { ··· 60 60 * sets the initial epoch. 61 61 */ 62 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 66 * Ensure that sched_clock() starts off at 0ns 67 67 */ 68 68 cd->epoch_ns = 0; 69 + } 70 + 71 + void __init sched_clock_postinit(void) 72 + { 73 + sched_clock_poll(sched_clock_timer.data); 69 74 }
+10 -12
arch/arm/kernel/setup.c
··· 518 518 #endif 519 519 } 520 520 521 - static void __init 522 - request_standard_resources(struct meminfo *mi, struct machine_desc *mdesc) 521 + static void __init request_standard_resources(struct machine_desc *mdesc) 523 522 { 523 + struct memblock_region *region; 524 524 struct resource *res; 525 - int i; 526 525 527 526 kernel_code.start = virt_to_phys(_text); 528 527 kernel_code.end = virt_to_phys(_etext - 1); 529 528 kernel_data.start = virt_to_phys(_sdata); 530 529 kernel_data.end = virt_to_phys(_end - 1); 531 530 532 - for (i = 0; i < mi->nr_banks; i++) { 533 - if (mi->bank[i].size == 0) 534 - continue; 535 - 531 + for_each_memblock(memory, region) { 536 532 res = alloc_bootmem_low(sizeof(*res)); 537 533 res->name = "System RAM"; 538 - res->start = mi->bank[i].start; 539 - res->end = mi->bank[i].start + mi->bank[i].size - 1; 534 + res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); 535 + res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; 540 536 res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; 541 537 542 538 request_resource(&iomem_resource, res); ··· 646 650 647 651 __tagtable(ATAG_REVISION, parse_tag_revision); 648 652 649 - #ifndef CONFIG_CMDLINE_FORCE 650 653 static int __init parse_tag_cmdline(const struct tag *tag) 651 654 { 655 + #ifndef CONFIG_CMDLINE_FORCE 652 656 strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE); 657 + #else 658 + pr_warning("Ignoring tag cmdline (using the default kernel command line)\n"); 659 + #endif /* CONFIG_CMDLINE_FORCE */ 653 660 return 0; 654 661 } 655 662 656 663 __tagtable(ATAG_CMDLINE, parse_tag_cmdline); 657 - #endif /* CONFIG_CMDLINE_FORCE */ 658 664 659 665 /* 660 666 * Scan the tag table for this tag, and call its parse function. ··· 855 857 arm_memblock_init(&meminfo, mdesc); 856 858 857 859 paging_init(mdesc); 858 - request_standard_resources(&meminfo, mdesc); 860 + request_standard_resources(mdesc); 859 861 860 862 #ifdef CONFIG_SMP 861 863 if (is_smp())
+1 -1
arch/arm/kernel/smp_twd.c
··· 114 114 twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5); 115 115 116 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 120 load = twd_timer_rate / HZ;
+6 -3
arch/arm/kernel/stacktrace.c
··· 94 94 if (tsk != current) { 95 95 #ifdef CONFIG_SMP 96 96 /* 97 - * What guarantees do we have here that 'tsk' 98 - * is not running on another CPU? 97 + * What guarantees do we have here that 'tsk' is not 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 104 #else 102 105 data.no_sched_functions = 1; 103 106 frame.fp = thread_saved_fp(tsk);
+4
arch/arm/kernel/time.c
··· 29 29 30 30 #include <asm/leds.h> 31 31 #include <asm/thread_info.h> 32 + #include <asm/sched_clock.h> 32 33 #include <asm/stacktrace.h> 33 34 #include <asm/mach/arch.h> 34 35 #include <asm/mach/time.h> ··· 164 163 { 165 164 system_timer = machine_desc->timer; 166 165 system_timer->init(); 166 + #ifdef CONFIG_HAVE_SCHED_CLOCK 167 + sched_clock_postinit(); 168 + #endif 167 169 } 168 170
+4
arch/arm/lib/delay.S
··· 25 25 ldr r2, .LC1 26 26 mul r0, r2, r0 27 27 ENTRY(__const_udelay) @ 0 <= r0 <= 0x7fffff06 28 + mov r1, #-1 28 29 ldr r2, .LC0 29 30 ldr r2, [r2] @ max = 0x01ffffff 31 + add r0, r0, r1, lsr #32-14 30 32 mov r0, r0, lsr #14 @ max = 0x0001ffff 33 + add r2, r2, r1, lsr #32-10 31 34 mov r2, r2, lsr #10 @ max = 0x00007fff 32 35 mul r0, r2, r0 @ max = 2^32-1 36 + add r0, r0, r1, lsr #32-6 33 37 movs r0, r0, lsr #6 34 38 moveq pc, lr 35 39
-1
arch/arm/mach-h720x/h7201-eval.c
··· 23 23 #include <asm/types.h> 24 24 #include <asm/mach-types.h> 25 25 #include <asm/page.h> 26 - #include <asm/pgtable.h> 27 26 #include <asm/mach/arch.h> 28 27 #include <mach/hardware.h> 29 28 #include "common.h"
-1
arch/arm/mach-h720x/h7202-eval.c
··· 23 23 #include <asm/types.h> 24 24 #include <asm/mach-types.h> 25 25 #include <asm/page.h> 26 - #include <asm/pgtable.h> 27 26 #include <asm/mach/arch.h> 28 27 #include <mach/irqs.h> 29 28 #include <mach/hardware.h>
+1 -1
arch/arm/mach-integrator/cpu.c
··· 173 173 174 174 if (machine_is_integrator()) { 175 175 vco.s = (cm_osc >> 8) & 7; 176 - } else if (machine_is_cintegrator()) { 176 + } else { 177 177 vco.s = 1; 178 178 } 179 179 vco.v = cm_osc & 255;
-1
arch/arm/mach-pxa/generic.c
··· 22 22 23 23 #include <mach/hardware.h> 24 24 #include <asm/system.h> 25 - #include <asm/pgtable.h> 26 25 #include <asm/mach/map.h> 27 26 #include <asm/mach-types.h> 28 27
+2 -2
arch/arm/mach-s5pv310/hotplug.c
··· 30 30 * Turn off coherency 31 31 */ 32 32 " mrc p15, 0, %0, c1, c0, 1\n" 33 - " bic %0, %0, %2\n" 33 + " bic %0, %0, #0x20\n" 34 34 " mcr p15, 0, %0, c1, c0, 1\n" 35 35 " mrc p15, 0, %0, c1, c0, 0\n" 36 - " bic %0, %0, #0x04\n" 36 + " bic %0, %0, %2\n" 37 37 " mcr p15, 0, %0, c1, c0, 0\n" 38 38 : "=&r" (v) 39 39 : "r" (0), "Ir" (CR_C)
-1
arch/arm/mach-sa1100/generic.c
··· 21 21 #include <asm/div64.h> 22 22 #include <mach/hardware.h> 23 23 #include <asm/system.h> 24 - #include <asm/pgtable.h> 25 24 #include <asm/mach/map.h> 26 25 #include <asm/mach/flash.h> 27 26 #include <asm/irq.h>
+2 -2
arch/arm/mach-tegra/hotplug.c
··· 26 26 * Turn off coherency 27 27 */ 28 28 " mrc p15, 0, %0, c1, c0, 1\n" 29 - " bic %0, %0, %2\n" 29 + " bic %0, %0, #0x20\n" 30 30 " mcr p15, 0, %0, c1, c0, 1\n" 31 31 " mrc p15, 0, %0, c1, c0, 0\n" 32 - " bic %0, %0, #0x04\n" 32 + " bic %0, %0, %2\n" 33 33 " mcr p15, 0, %0, c1, c0, 0\n" 34 34 : "=&r" (v) 35 35 : "r" (0), "Ir" (CR_C)
+1 -1
arch/arm/mm/dma-mapping.c
··· 577 577 * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg 578 578 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices 579 579 * @sg: list of buffers 580 - * @nents: number of buffers to unmap (returned from dma_map_sg) 580 + * @nents: number of buffers to unmap (same as was passed to dma_map_sg) 581 581 * @dir: DMA transfer direction (same as was passed to dma_map_sg) 582 582 * 583 583 * Unmap a set of streaming mode DMA translations. Again, CPU access
+3 -1
arch/arm/mm/proc-v7.S
··· 159 159 tstne r1, #L_PTE_PRESENT 160 160 moveq r3, #0 161 161 162 - str r3, [r0, #2048]! 162 + ARM( str r3, [r0, #2048]! ) 163 + THUMB( add r0, r0, #2048 ) 164 + THUMB( str r3, [r0] ) 163 165 mcr p15, 0, r0, c7, c10, 1 @ flush_pte 164 166 #endif 165 167 mov pc, lr
+3 -3
drivers/video/ep93xx-fb.c
··· 483 483 info->screen_base, info->fix.smem_start); 484 484 } 485 485 486 - static int __init ep93xxfb_probe(struct platform_device *pdev) 486 + static int __devinit ep93xxfb_probe(struct platform_device *pdev) 487 487 { 488 488 struct ep93xxfb_mach_info *mach_info = pdev->dev.platform_data; 489 489 struct fb_info *info; ··· 598 598 return err; 599 599 } 600 600 601 - static int ep93xxfb_remove(struct platform_device *pdev) 601 + static int __devexit ep93xxfb_remove(struct platform_device *pdev) 602 602 { 603 603 struct fb_info *info = platform_get_drvdata(pdev); 604 604 struct ep93xx_fbi *fbi = info->par; ··· 622 622 623 623 static struct platform_driver ep93xxfb_driver = { 624 624 .probe = ep93xxfb_probe, 625 - .remove = ep93xxfb_remove, 625 + .remove = __devexit_p(ep93xxfb_remove), 626 626 .driver = { 627 627 .name = "ep93xx-fb", 628 628 .owner = THIS_MODULE,