forked from Minki/linux
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
This commit is contained in:
commit
65e5d002b5
@ -1281,7 +1281,7 @@ config SMP
|
||||
config SMP_ON_UP
|
||||
bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
depends on SMP && !XIP
|
||||
depends on SMP && !XIP_KERNEL
|
||||
default y
|
||||
help
|
||||
SMP kernels contain instructions which fail on non-SMP processors.
|
||||
|
@ -285,7 +285,7 @@ static inline int fls(int x)
|
||||
if (__builtin_constant_p(x))
|
||||
return constant_fls(x);
|
||||
|
||||
asm("clz\t%0, %1" : "=r" (ret) : "r" (x) : "cc");
|
||||
asm("clz\t%0, %1" : "=r" (ret) : "r" (x));
|
||||
ret = 32 - ret;
|
||||
return ret;
|
||||
}
|
||||
|
@ -115,4 +115,6 @@ static inline void init_fixed_sched_clock(struct clock_data *cd,
|
||||
}
|
||||
}
|
||||
|
||||
extern void sched_clock_postinit(void);
|
||||
|
||||
#endif
|
||||
|
@ -60,6 +60,8 @@ str_a1: .asciz "\nError: unrecognized/unsupported machine ID (r1 = 0x"
|
||||
str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n"
|
||||
str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n"
|
||||
.align
|
||||
#else
|
||||
b __error
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -483,6 +483,7 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
|
||||
return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/*
|
||||
* The vectors page is always readable from user space for the
|
||||
* 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)
|
||||
{
|
||||
return (vma->vm_start == 0xffff0000) ? "[vectors]" : NULL;
|
||||
}
|
||||
#endif
|
||||
|
@ -34,7 +34,7 @@ void __init init_sched_clock(struct clock_data *cd, void (*update)(void),
|
||||
sched_clock_update_fn = update;
|
||||
|
||||
/* calculate the mult/shift to convert counter ticks to ns. */
|
||||
clocks_calc_mult_shift(&cd->mult, &cd->shift, rate, NSEC_PER_SEC, 60);
|
||||
clocks_calc_mult_shift(&cd->mult, &cd->shift, rate, NSEC_PER_SEC, 0);
|
||||
|
||||
r = rate;
|
||||
if (r >= 4000000) {
|
||||
@ -60,10 +60,15 @@ void __init init_sched_clock(struct clock_data *cd, void (*update)(void),
|
||||
* sets the initial epoch.
|
||||
*/
|
||||
sched_clock_timer.data = msecs_to_jiffies(w - (w / 10));
|
||||
sched_clock_poll(sched_clock_timer.data);
|
||||
update();
|
||||
|
||||
/*
|
||||
* Ensure that sched_clock() starts off at 0ns
|
||||
*/
|
||||
cd->epoch_ns = 0;
|
||||
}
|
||||
|
||||
void __init sched_clock_postinit(void)
|
||||
{
|
||||
sched_clock_poll(sched_clock_timer.data);
|
||||
}
|
||||
|
@ -518,25 +518,21 @@ setup_ramdisk(int doload, int prompt, int image_start, unsigned int rd_sz)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void __init
|
||||
request_standard_resources(struct meminfo *mi, struct machine_desc *mdesc)
|
||||
static void __init request_standard_resources(struct machine_desc *mdesc)
|
||||
{
|
||||
struct memblock_region *region;
|
||||
struct resource *res;
|
||||
int i;
|
||||
|
||||
kernel_code.start = virt_to_phys(_text);
|
||||
kernel_code.end = virt_to_phys(_etext - 1);
|
||||
kernel_data.start = virt_to_phys(_sdata);
|
||||
kernel_data.end = virt_to_phys(_end - 1);
|
||||
|
||||
for (i = 0; i < mi->nr_banks; i++) {
|
||||
if (mi->bank[i].size == 0)
|
||||
continue;
|
||||
|
||||
for_each_memblock(memory, region) {
|
||||
res = alloc_bootmem_low(sizeof(*res));
|
||||
res->name = "System RAM";
|
||||
res->start = mi->bank[i].start;
|
||||
res->end = mi->bank[i].start + mi->bank[i].size - 1;
|
||||
res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region));
|
||||
res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
|
||||
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
|
||||
request_resource(&iomem_resource, res);
|
||||
@ -650,15 +646,17 @@ static int __init parse_tag_revision(const struct tag *tag)
|
||||
|
||||
__tagtable(ATAG_REVISION, parse_tag_revision);
|
||||
|
||||
#ifndef CONFIG_CMDLINE_FORCE
|
||||
static int __init parse_tag_cmdline(const struct tag *tag)
|
||||
{
|
||||
#ifndef CONFIG_CMDLINE_FORCE
|
||||
strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
|
||||
#else
|
||||
pr_warning("Ignoring tag cmdline (using the default kernel command line)\n");
|
||||
#endif /* CONFIG_CMDLINE_FORCE */
|
||||
return 0;
|
||||
}
|
||||
|
||||
__tagtable(ATAG_CMDLINE, parse_tag_cmdline);
|
||||
#endif /* CONFIG_CMDLINE_FORCE */
|
||||
|
||||
/*
|
||||
* Scan the tag table for this tag, and call its parse function.
|
||||
@ -857,7 +855,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
arm_memblock_init(&meminfo, mdesc);
|
||||
|
||||
paging_init(mdesc);
|
||||
request_standard_resources(&meminfo, mdesc);
|
||||
request_standard_resources(mdesc);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
if (is_smp())
|
||||
|
@ -114,7 +114,7 @@ static void __cpuinit twd_calibrate_rate(void)
|
||||
twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5);
|
||||
|
||||
printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000,
|
||||
(twd_timer_rate / 100000) % 100);
|
||||
(twd_timer_rate / 1000000) % 100);
|
||||
}
|
||||
|
||||
load = twd_timer_rate / HZ;
|
||||
|
@ -94,10 +94,13 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
|
||||
if (tsk != current) {
|
||||
#ifdef CONFIG_SMP
|
||||
/*
|
||||
* What guarantees do we have here that 'tsk'
|
||||
* is not running on another CPU?
|
||||
* What guarantees do we have here that 'tsk' is not
|
||||
* running on another CPU? For now, ignore it as we
|
||||
* can't guarantee we won't explode.
|
||||
*/
|
||||
BUG();
|
||||
if (trace->nr_entries < trace->max_entries)
|
||||
trace->entries[trace->nr_entries++] = ULONG_MAX;
|
||||
return;
|
||||
#else
|
||||
data.no_sched_functions = 1;
|
||||
frame.fp = thread_saved_fp(tsk);
|
||||
|
@ -29,6 +29,7 @@
|
||||
|
||||
#include <asm/leds.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/sched_clock.h>
|
||||
#include <asm/stacktrace.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
@ -163,5 +164,8 @@ void __init time_init(void)
|
||||
{
|
||||
system_timer = machine_desc->timer;
|
||||
system_timer->init();
|
||||
#ifdef CONFIG_HAVE_SCHED_CLOCK
|
||||
sched_clock_postinit();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -25,11 +25,15 @@ ENTRY(__udelay)
|
||||
ldr r2, .LC1
|
||||
mul r0, r2, r0
|
||||
ENTRY(__const_udelay) @ 0 <= r0 <= 0x7fffff06
|
||||
mov r1, #-1
|
||||
ldr r2, .LC0
|
||||
ldr r2, [r2] @ max = 0x01ffffff
|
||||
add r0, r0, r1, lsr #32-14
|
||||
mov r0, r0, lsr #14 @ max = 0x0001ffff
|
||||
add r2, r2, r1, lsr #32-10
|
||||
mov r2, r2, lsr #10 @ max = 0x00007fff
|
||||
mul r0, r2, r0 @ max = 2^32-1
|
||||
add r0, r0, r1, lsr #32-6
|
||||
movs r0, r0, lsr #6
|
||||
moveq pc, lr
|
||||
|
||||
|
@ -23,7 +23,6 @@
|
||||
#include <asm/types.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <mach/hardware.h>
|
||||
#include "common.h"
|
||||
|
@ -23,7 +23,6 @@
|
||||
#include <asm/types.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/hardware.h>
|
||||
|
@ -173,7 +173,7 @@ static unsigned int integrator_get(unsigned int cpu)
|
||||
|
||||
if (machine_is_integrator()) {
|
||||
vco.s = (cm_osc >> 8) & 7;
|
||||
} else if (machine_is_cintegrator()) {
|
||||
} else {
|
||||
vco.s = 1;
|
||||
}
|
||||
vco.v = cm_osc & 255;
|
||||
|
@ -22,7 +22,6 @@
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
|
@ -30,10 +30,10 @@ static inline void cpu_enter_lowpower(void)
|
||||
* Turn off coherency
|
||||
*/
|
||||
" mrc p15, 0, %0, c1, c0, 1\n"
|
||||
" bic %0, %0, %2\n"
|
||||
" bic %0, %0, #0x20\n"
|
||||
" mcr p15, 0, %0, c1, c0, 1\n"
|
||||
" mrc p15, 0, %0, c1, c0, 0\n"
|
||||
" bic %0, %0, #0x04\n"
|
||||
" bic %0, %0, %2\n"
|
||||
" mcr p15, 0, %0, c1, c0, 0\n"
|
||||
: "=&r" (v)
|
||||
: "r" (0), "Ir" (CR_C)
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include <asm/div64.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
#include <asm/irq.h>
|
||||
|
@ -26,10 +26,10 @@ static inline void cpu_enter_lowpower(void)
|
||||
* Turn off coherency
|
||||
*/
|
||||
" mrc p15, 0, %0, c1, c0, 1\n"
|
||||
" bic %0, %0, %2\n"
|
||||
" bic %0, %0, #0x20\n"
|
||||
" mcr p15, 0, %0, c1, c0, 1\n"
|
||||
" mrc p15, 0, %0, c1, c0, 0\n"
|
||||
" bic %0, %0, #0x04\n"
|
||||
" bic %0, %0, %2\n"
|
||||
" mcr p15, 0, %0, c1, c0, 0\n"
|
||||
: "=&r" (v)
|
||||
: "r" (0), "Ir" (CR_C)
|
||||
|
@ -577,7 +577,7 @@ EXPORT_SYMBOL(dma_map_sg);
|
||||
* dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
|
||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
||||
* @sg: list of buffers
|
||||
* @nents: number of buffers to unmap (returned from dma_map_sg)
|
||||
* @nents: number of buffers to unmap (same as was passed to dma_map_sg)
|
||||
* @dir: DMA transfer direction (same as was passed to dma_map_sg)
|
||||
*
|
||||
* Unmap a set of streaming mode DMA translations. Again, CPU access
|
||||
|
@ -159,7 +159,9 @@ ENTRY(cpu_v7_set_pte_ext)
|
||||
tstne r1, #L_PTE_PRESENT
|
||||
moveq r3, #0
|
||||
|
||||
str r3, [r0, #2048]!
|
||||
ARM( str r3, [r0, #2048]! )
|
||||
THUMB( add r0, r0, #2048 )
|
||||
THUMB( str r3, [r0] )
|
||||
mcr p15, 0, r0, c7, c10, 1 @ flush_pte
|
||||
#endif
|
||||
mov pc, lr
|
||||
|
@ -483,7 +483,7 @@ static void ep93xxfb_dealloc_videomem(struct fb_info *info)
|
||||
info->screen_base, info->fix.smem_start);
|
||||
}
|
||||
|
||||
static int __init ep93xxfb_probe(struct platform_device *pdev)
|
||||
static int __devinit ep93xxfb_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct ep93xxfb_mach_info *mach_info = pdev->dev.platform_data;
|
||||
struct fb_info *info;
|
||||
@ -598,7 +598,7 @@ failed:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ep93xxfb_remove(struct platform_device *pdev)
|
||||
static int __devexit ep93xxfb_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct fb_info *info = platform_get_drvdata(pdev);
|
||||
struct ep93xx_fbi *fbi = info->par;
|
||||
@ -622,7 +622,7 @@ static int ep93xxfb_remove(struct platform_device *pdev)
|
||||
|
||||
static struct platform_driver ep93xxfb_driver = {
|
||||
.probe = ep93xxfb_probe,
|
||||
.remove = ep93xxfb_remove,
|
||||
.remove = __devexit_p(ep93xxfb_remove),
|
||||
.driver = {
|
||||
.name = "ep93xx-fb",
|
||||
.owner = THIS_MODULE,
|
||||
|
Loading…
Reference in New Issue
Block a user