diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2009-01-30 23:50:57 +0100 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2009-01-30 23:50:57 +0100 |
commit | 9b7ed8faa034fc2d350e2eff5c68680eb5c43a07 (patch) | |
tree | 5c94c34ad30e312604c1ce4f08ab6631b64a94f5 /arch/sh/kernel | |
parent | x86: add pte_set_flags/clear_flags for pte flag manipulation (diff) | |
parent | Merge branch 'linus' into core/percpu (diff) | |
download | linux-9b7ed8faa034fc2d350e2eff5c68680eb5c43a07.tar.xz linux-9b7ed8faa034fc2d350e2eff5c68680eb5c43a07.zip |
Merge branch 'core/percpu' into x86/paravirt
Diffstat (limited to 'arch/sh/kernel')
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/setup-sh7343.c | 31 | ||||
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/setup-sh7722.c | 2 | ||||
-rw-r--r-- | arch/sh/kernel/process_64.c | 2 | ||||
-rw-r--r-- | arch/sh/kernel/traps_32.c | 9 |
4 files changed, 36 insertions, 8 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7343.c b/arch/sh/kernel/cpu/sh4a/setup-sh7343.c index 0623e377f488..4ff4dc64520c 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7343.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7343.c @@ -112,6 +112,34 @@ static struct platform_device veu_device = { .num_resources = ARRAY_SIZE(veu_resources), }; +static struct uio_info jpu_platform_data = { + .name = "JPU", + .version = "0", + .irq = 27, +}; + +static struct resource jpu_resources[] = { + [0] = { + .name = "JPU", + .start = 0xfea00000, + .end = 0xfea102d3, + .flags = IORESOURCE_MEM, + }, + [1] = { + /* place holder for contiguous memory */ + }, +}; + +static struct platform_device jpu_device = { + .name = "uio_pdrv_genirq", + .id = 2, + .dev = { + .platform_data = &jpu_platform_data, + }, + .resource = jpu_resources, + .num_resources = ARRAY_SIZE(jpu_resources), +}; + static struct plat_sci_port sci_platform_data[] = { { .mapbase = 0xffe00000, @@ -152,6 +180,7 @@ static struct platform_device *sh7343_devices[] __initdata = { &sci_device, &vpu_device, &veu_device, + &jpu_device, }; static int __init sh7343_devices_setup(void) @@ -160,9 +189,11 @@ static int __init sh7343_devices_setup(void) clk_always_enable("xymem0"); /* XYMEM */ clk_always_enable("veu0"); /* VEU */ clk_always_enable("vpu0"); /* VPU */ + clk_always_enable("jpu0"); /* JPU */ platform_resource_setup_memory(&vpu_device, "vpu", 1 << 20); platform_resource_setup_memory(&veu_device, "veu", 2 << 20); + platform_resource_setup_memory(&jpu_device, "jpu", 2 << 20); return platform_add_devices(sh7343_devices, ARRAY_SIZE(sh7343_devices)); diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c index 50cf6838ec41..5146afc156e0 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c @@ -158,7 +158,7 @@ static struct resource jpu_resources[] = { [0] = { .name = "JPU", .start = 0xfea00000, - .end = 0xfea102d0, + .end = 0xfea102d3, .flags = IORESOURCE_MEM, }, [1] = { diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c index a7e5f2e74bac..c90c7e5e5fee 100644 --- a/arch/sh/kernel/process_64.c +++ b/arch/sh/kernel/process_64.c @@ -520,7 +520,6 @@ asmlinkage int sys_execve(char *ufilename, char **uargv, int error; char *filename; - lock_kernel(); filename = getname((char __user *)ufilename); error = PTR_ERR(filename); if (IS_ERR(filename)) @@ -537,7 +536,6 @@ asmlinkage int sys_execve(char *ufilename, char **uargv, } putname(filename); out: - unlock_kernel(); return error; } diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c index c0aa3d83ec0e..60dcf87ed019 100644 --- a/arch/sh/kernel/traps_32.c +++ b/arch/sh/kernel/traps_32.c @@ -125,20 +125,18 @@ static inline void die_if_kernel(const char *str, struct pt_regs *regs, * - userspace errors just cause EFAULT to be returned, resulting in SEGV * - kernel/userspace interfaces cause a jump to an appropriate handler * - other kernel errors are bad - * - return 0 if fixed-up, -EFAULT if non-fatal (to the kernel) fault */ -static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err) +static void die_if_no_fixup(const char * str, struct pt_regs * regs, long err) { if (!user_mode(regs)) { const struct exception_table_entry *fixup; fixup = search_exception_tables(regs->pc); if (fixup) { regs->pc = fixup->fixup; - return 0; + return; } die(str, regs, err); } - return -EFAULT; } static inline void sign_extend(unsigned int count, unsigned char *dst) @@ -314,7 +312,8 @@ static int handle_unaligned_ins(opcode_t instruction, struct pt_regs *regs, /* Argh. Address not only misaligned but also non-existent. * Raise an EFAULT and see if it's trapped */ - return die_if_no_fixup("Fault in unaligned fixup", regs, 0); + die_if_no_fixup("Fault in unaligned fixup", regs, 0); + return -EFAULT; } /* |