aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/Kconfig37
-rw-r--r--arch/arm/Makefile7
-rw-r--r--arch/arm/common/Kconfig7
-rw-r--r--arch/arm/common/Makefile1
-rw-r--r--arch/arm/common/vic.c92
-rw-r--r--arch/arm/kernel/Makefile1
-rw-r--r--arch/arm/kernel/armksyms.c22
-rw-r--r--arch/arm/kernel/calls.S59
-rw-r--r--arch/arm/kernel/entry-armv.S24
-rw-r--r--arch/arm/kernel/entry-common.S146
-rw-r--r--arch/arm/kernel/entry-header.S1
-rw-r--r--arch/arm/kernel/head.S7
-rw-r--r--arch/arm/kernel/ptrace.c15
-rw-r--r--arch/arm/kernel/semaphore.c17
-rw-r--r--arch/arm/kernel/sys_arm.c2
-rw-r--r--arch/arm/kernel/sys_oabi-compat.c339
-rw-r--r--arch/arm/kernel/traps.c2
-rw-r--r--arch/arm/lib/ashldi3.S1
-rw-r--r--arch/arm/lib/ashrdi3.S1
-rw-r--r--arch/arm/lib/lib1funcs.S27
-rw-r--r--arch/arm/lib/lshrdi3.S1
-rw-r--r--arch/arm/lib/muldi3.S1
-rw-r--r--arch/arm/lib/ucmpdi2.S14
-rw-r--r--arch/arm/mach-aaec2000/aaed2000.c1
-rw-r--r--arch/arm/mach-at91rm9200/board-csb337.c1
-rw-r--r--arch/arm/mach-at91rm9200/board-csb637.c1
-rw-r--r--arch/arm/mach-at91rm9200/board-dk.c1
-rw-r--r--arch/arm/mach-at91rm9200/board-ek.c1
-rw-r--r--arch/arm/mach-clps711x/autcpu12.c1
-rw-r--r--arch/arm/mach-clps711x/cdb89712.c1
-rw-r--r--arch/arm/mach-clps711x/ceiva.c1
-rw-r--r--arch/arm/mach-clps711x/clep7312.c1
-rw-r--r--arch/arm/mach-clps711x/edb7211-arch.c1
-rw-r--r--arch/arm/mach-clps711x/fortunet.c1
-rw-r--r--arch/arm/mach-clps711x/p720t.c1
-rw-r--r--arch/arm/mach-clps7500/core.c1
-rw-r--r--arch/arm/mach-ebsa110/core.c1
-rw-r--r--arch/arm/mach-footbridge/cats-hw.c1
-rw-r--r--arch/arm/mach-footbridge/co285.c1
-rw-r--r--arch/arm/mach-footbridge/ebsa285.c1
-rw-r--r--arch/arm/mach-footbridge/netwinder-hw.c1
-rw-r--r--arch/arm/mach-footbridge/personal.c1
-rw-r--r--arch/arm/mach-h720x/h7201-eval.c1
-rw-r--r--arch/arm/mach-h720x/h7202-eval.c1
-rw-r--r--arch/arm/mach-imx/mx1ads.c1
-rw-r--r--arch/arm/mach-integrator/integrator_ap.c1
-rw-r--r--arch/arm/mach-integrator/integrator_cp.c1
-rw-r--r--arch/arm/mach-iop3xx/iop321-setup.c2
-rw-r--r--arch/arm/mach-iop3xx/iop331-setup.c2
-rw-r--r--arch/arm/mach-ixp2000/core.c10
-rw-r--r--arch/arm/mach-ixp2000/enp2611.c1
-rw-r--r--arch/arm/mach-ixp2000/ixdp2400.c1
-rw-r--r--arch/arm/mach-ixp2000/ixdp2800.c1
-rw-r--r--arch/arm/mach-ixp2000/ixdp2x01.c2
-rw-r--r--arch/arm/mach-ixp4xx/coyote-setup.c2
-rw-r--r--arch/arm/mach-ixp4xx/gtwx5715-setup.c1
-rw-r--r--arch/arm/mach-ixp4xx/ixdp425-setup.c4
-rw-r--r--arch/arm/mach-ixp4xx/nas100d-setup.c1
-rw-r--r--arch/arm/mach-ixp4xx/nslu2-setup.c1
-rw-r--r--arch/arm/mach-l7200/core.c1
-rw-r--r--arch/arm/mach-lh7a40x/arch-kev7a400.c1
-rw-r--r--arch/arm/mach-lh7a40x/arch-lpd7a40x.c2
-rw-r--r--arch/arm/mach-omap1/board-generic.c1
-rw-r--r--arch/arm/mach-omap1/board-h2.c1
-rw-r--r--arch/arm/mach-omap1/board-h3.c1
-rw-r--r--arch/arm/mach-omap1/board-innovator.c1
-rw-r--r--arch/arm/mach-omap1/board-netstar.c1
-rw-r--r--arch/arm/mach-omap1/board-osk.c1
-rw-r--r--arch/arm/mach-omap1/board-palmte.c1
-rw-r--r--arch/arm/mach-omap1/board-perseus2.c1
-rw-r--r--arch/arm/mach-omap1/board-voiceblue.c1
-rw-r--r--arch/arm/mach-omap2/board-generic.c1
-rw-r--r--arch/arm/mach-omap2/board-h4.c1
-rw-r--r--arch/arm/mach-pxa/corgi.c3
-rw-r--r--arch/arm/mach-pxa/idp.c1
-rw-r--r--arch/arm/mach-pxa/lubbock.c1
-rw-r--r--arch/arm/mach-pxa/mainstone.c1
-rw-r--r--arch/arm/mach-pxa/poodle.c1
-rw-r--r--arch/arm/mach-pxa/spitz.c3
-rw-r--r--arch/arm/mach-pxa/tosa.c1
-rw-r--r--arch/arm/mach-realview/Kconfig1
-rw-r--r--arch/arm/mach-realview/realview_eb.c1
-rw-r--r--arch/arm/mach-rpc/riscpc.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-anubis.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-bast.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-h1940.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-n30.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-nexcoder.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-otom.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-rx3715.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-smdk2410.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-smdk2440.c1
-rw-r--r--arch/arm/mach-s3c2410/mach-vr1000.c1
-rw-r--r--arch/arm/mach-sa1100/assabet.c1
-rw-r--r--arch/arm/mach-sa1100/badge4.c1
-rw-r--r--arch/arm/mach-sa1100/cerf.c1
-rw-r--r--arch/arm/mach-sa1100/collie.c1
-rw-r--r--arch/arm/mach-sa1100/h3600.c3
-rw-r--r--arch/arm/mach-sa1100/hackkit.c1
-rw-r--r--arch/arm/mach-sa1100/jornada720.c1
-rw-r--r--arch/arm/mach-sa1100/lart.c1
-rw-r--r--arch/arm/mach-sa1100/pleb.c1
-rw-r--r--arch/arm/mach-sa1100/shannon.c1
-rw-r--r--arch/arm/mach-sa1100/simpad.c1
-rw-r--r--arch/arm/mach-shark/core.c1
-rw-r--r--arch/arm/mach-versatile/Kconfig1
-rw-r--r--arch/arm/mach-versatile/core.c58
-rw-r--r--arch/arm/mach-versatile/versatile_ab.c1
-rw-r--r--arch/arm/mach-versatile/versatile_pb.c1
-rw-r--r--arch/arm/nwfpe/fpa11.h4
-rw-r--r--arch/arm/plat-omap/Kconfig3
-rw-r--r--arch/i386/Kconfig18
-rw-r--r--arch/i386/Makefile6
-rw-r--r--arch/i386/kernel/traps.c57
-rw-r--r--arch/i386/pci/fixup.c16
-rw-r--r--arch/ia64/configs/gensparse_defconfig2
-rw-r--r--arch/ia64/configs/sn2_defconfig2
-rw-r--r--arch/s390/crypto/aes_s390.c60
-rw-r--r--arch/s390/crypto/des_s390.c360
-rw-r--r--arch/s390/crypto/sha256_s390.c29
-rw-r--r--arch/s390/kernel/process.c14
-rw-r--r--arch/s390/kernel/setup.c11
-rw-r--r--arch/s390/kernel/time.c2
-rw-r--r--arch/s390/kernel/vtime.c27
-rw-r--r--arch/s390/lib/Makefile3
-rw-r--r--arch/s390/lib/spinlock.c7
-rw-r--r--arch/um/Makefile3
127 files changed, 1232 insertions, 382 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 3cfd82a05b20..5959e36c3b4c 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -180,6 +180,7 @@ config ARCH_OMAP
180config ARCH_VERSATILE 180config ARCH_VERSATILE
181 bool "Versatile" 181 bool "Versatile"
182 select ARM_AMBA 182 select ARM_AMBA
183 select ARM_VIC
183 select ICST307 184 select ICST307
184 help 185 help
185 This enables support for ARM Ltd Versatile board. 186 This enables support for ARM Ltd Versatile board.
@@ -400,6 +401,38 @@ config NO_IDLE_HZ
400 Currently at least OMAP, PXA2xx and SA11x0 platforms are known 401 Currently at least OMAP, PXA2xx and SA11x0 platforms are known
401 to have accurate timekeeping with dynamic tick. 402 to have accurate timekeeping with dynamic tick.
402 403
404config AEABI
405 bool "Use the ARM EABI to compile the kernel"
406 help
407 This option allows for the kernel to be compiled using the latest
408 ARM ABI (aka EABI). This is only useful if you are using a user
409 space environment that is also compiled with EABI.
410
411 Since there are major incompatibilities between the legacy ABI and
412 EABI, especially with regard to structure member alignment, this
413 option also changes the kernel syscall calling convention to
414 disambiguate both ABIs and allow for backward compatibility support
415 (selected with CONFIG_OABI_COMPAT).
416
417 To use this you need GCC version 4.0.0 or later.
418
419config OABI_COMPAT
420 bool "Allow old ABI binaries to run with this kernel"
421 depends on AEABI
422 default y
423 help
424 This option preserves the old syscall interface along with the
425 new (ARM EABI) one. It also provides a compatibility layer to
426 intercept syscalls that have structure arguments which layout
427 in memory differs between the legacy ABI and the new ARM EABI
428 (only for non "thumb" binaries). This option adds a tiny
429 overhead to all syscalls and produces a slightly larger kernel.
430 If you know you'll be using only pure EABI user space then you
431 can say N here. If this option is not selected and you attempt
432 to execute a legacy ABI binary then the result will be
433 UNPREDICTABLE (in fact it can be predicted that it won't work
434 at all). If in doubt say Y.
435
403config ARCH_DISCONTIGMEM_ENABLE 436config ARCH_DISCONTIGMEM_ENABLE
404 bool 437 bool
405 default (ARCH_LH7A40X && !LH7A40X_CONTIGMEM) 438 default (ARCH_LH7A40X && !LH7A40X_CONTIGMEM)
@@ -586,6 +619,7 @@ comment "At least one emulation must be selected"
586 619
587config FPE_NWFPE 620config FPE_NWFPE
588 bool "NWFPE math emulation" 621 bool "NWFPE math emulation"
622 depends on !AEABI || OABI_COMPAT
589 ---help--- 623 ---help---
590 Say Y to include the NWFPE floating point emulator in the kernel. 624 Say Y to include the NWFPE floating point emulator in the kernel.
591 This is necessary to run most binaries. Linux does not currently 625 This is necessary to run most binaries. Linux does not currently
@@ -609,7 +643,7 @@ config FPE_NWFPE_XP
609 643
610config FPE_FASTFPE 644config FPE_FASTFPE
611 bool "FastFPE math emulation (EXPERIMENTAL)" 645 bool "FastFPE math emulation (EXPERIMENTAL)"
612 depends on !CPU_32v3 && EXPERIMENTAL 646 depends on (!AEABI || OABI_COMPAT) && !CPU_32v3 && EXPERIMENTAL
613 ---help--- 647 ---help---
614 Say Y here to include the FAST floating point emulator in the kernel. 648 Say Y here to include the FAST floating point emulator in the kernel.
615 This is an experimental much faster emulator which now also has full 649 This is an experimental much faster emulator which now also has full
@@ -641,6 +675,7 @@ source "fs/Kconfig.binfmt"
641 675
642config ARTHUR 676config ARTHUR
643 tristate "RISC OS personality" 677 tristate "RISC OS personality"
678 depends on !AEABI
644 help 679 help
645 Say Y here to include the kernel code necessary if you want to run 680 Say Y here to include the kernel code necessary if you want to run
646 Acorn RISC OS/Arthur binaries under Linux. This code is still very 681 Acorn RISC OS/Arthur binaries under Linux. This code is still very
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 1fa2a1011584..fbfc14a56b96 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -56,8 +56,13 @@ tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100
56tune-$(CONFIG_CPU_XSCALE) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale 56tune-$(CONFIG_CPU_XSCALE) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
57tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) 57tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
58 58
59# Need -Uarm for gcc < 3.x 59ifeq ($(CONFIG_AEABI),y)
60CFLAGS_ABI :=-mabi=aapcs -mno-thumb-interwork
61else
60CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,) 62CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
63endif
64
65# Need -Uarm for gcc < 3.x
61CFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm 66CFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
62AFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float 67AFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float
63 68
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig
index d7509c7a3c5e..5e34ca6d38b6 100644
--- a/arch/arm/common/Kconfig
+++ b/arch/arm/common/Kconfig
@@ -1,7 +1,10 @@
1config ICST525 1config ARM_GIC
2 bool 2 bool
3 3
4config ARM_GIC 4config ARM_VIC
5 bool
6
7config ICST525
5 bool 8 bool
6 9
7config ICST307 10config ICST307
diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile
index ec8d17c96906..c81a2ff6b5be 100644
--- a/arch/arm/common/Makefile
+++ b/arch/arm/common/Makefile
@@ -4,6 +4,7 @@
4 4
5obj-y += rtctime.o 5obj-y += rtctime.o
6obj-$(CONFIG_ARM_GIC) += gic.o 6obj-$(CONFIG_ARM_GIC) += gic.o
7obj-$(CONFIG_ARM_VIC) += vic.o
7obj-$(CONFIG_ICST525) += icst525.o 8obj-$(CONFIG_ICST525) += icst525.o
8obj-$(CONFIG_ICST307) += icst307.o 9obj-$(CONFIG_ICST307) += icst307.o
9obj-$(CONFIG_SA1111) += sa1111.o 10obj-$(CONFIG_SA1111) += sa1111.o
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c
new file mode 100644
index 000000000000..a45ed1687a59
--- /dev/null
+++ b/arch/arm/common/vic.c
@@ -0,0 +1,92 @@
1/*
2 * linux/arch/arm/common/vic.c
3 *
4 * Copyright (C) 1999 - 2003 ARM Limited
5 * Copyright (C) 2000 Deep Blue Solutions Ltd
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21#include <linux/init.h>
22#include <linux/list.h>
23
24#include <asm/io.h>
25#include <asm/irq.h>
26#include <asm/mach/irq.h>
27#include <asm/hardware/vic.h>
28
29static void __iomem *vic_base;
30
31static void vic_mask_irq(unsigned int irq)
32{
33 irq -= IRQ_VIC_START;
34 writel(1 << irq, vic_base + VIC_INT_ENABLE_CLEAR);
35}
36
37static void vic_unmask_irq(unsigned int irq)
38{
39 irq -= IRQ_VIC_START;
40 writel(1 << irq, vic_base + VIC_INT_ENABLE);
41}
42
43static struct irqchip vic_chip = {
44 .ack = vic_mask_irq,
45 .mask = vic_mask_irq,
46 .unmask = vic_unmask_irq,
47};
48
49void __init vic_init(void __iomem *base, u32 vic_sources)
50{
51 unsigned int i;
52
53 vic_base = base;
54
55 /* Disable all interrupts initially. */
56
57 writel(0, vic_base + VIC_INT_SELECT);
58 writel(0, vic_base + VIC_INT_ENABLE);
59 writel(~0, vic_base + VIC_INT_ENABLE_CLEAR);
60 writel(0, vic_base + VIC_IRQ_STATUS);
61 writel(0, vic_base + VIC_ITCR);
62 writel(~0, vic_base + VIC_INT_SOFT_CLEAR);
63
64 /*
65 * Make sure we clear all existing interrupts
66 */
67 writel(0, vic_base + VIC_VECT_ADDR);
68 for (i = 0; i < 19; i++) {
69 unsigned int value;
70
71 value = readl(vic_base + VIC_VECT_ADDR);
72 writel(value, vic_base + VIC_VECT_ADDR);
73 }
74
75 for (i = 0; i < 16; i++) {
76 void __iomem *reg = vic_base + VIC_VECT_CNTL0 + (i * 4);
77 writel(VIC_VECT_CNTL_ENABLE | i, reg);
78 }
79
80 writel(32, vic_base + VIC_DEF_VECT_ADDR);
81
82 for (i = 0; i < 32; i++) {
83 unsigned int irq = IRQ_VIC_START + i;
84
85 set_irq_chip(irq, &vic_chip);
86
87 if (vic_sources & (1 << i)) {
88 set_irq_handler(irq, do_level_IRQ);
89 set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
90 }
91 }
92}
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index de94b0f3ee2a..2ce0e3a27a45 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -20,6 +20,7 @@ obj-$(CONFIG_ARTHUR) += arthur.o
20obj-$(CONFIG_ISA_DMA) += dma-isa.o 20obj-$(CONFIG_ISA_DMA) += dma-isa.o
21obj-$(CONFIG_PCI) += bios32.o 21obj-$(CONFIG_PCI) += bios32.o
22obj-$(CONFIG_SMP) += smp.o 22obj-$(CONFIG_SMP) += smp.o
23obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o
23 24
24obj-$(CONFIG_IWMMXT) += iwmmxt.o 25obj-$(CONFIG_IWMMXT) += iwmmxt.o
25AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt 26AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c
index 9997098009a9..1574941ebfe1 100644
--- a/arch/arm/kernel/armksyms.c
+++ b/arch/arm/kernel/armksyms.c
@@ -35,6 +35,16 @@ extern void __udivsi3(void);
35extern void __umodsi3(void); 35extern void __umodsi3(void);
36extern void __do_div64(void); 36extern void __do_div64(void);
37 37
38extern void __aeabi_idiv(void);
39extern void __aeabi_idivmod(void);
40extern void __aeabi_lasr(void);
41extern void __aeabi_llsl(void);
42extern void __aeabi_llsr(void);
43extern void __aeabi_lmul(void);
44extern void __aeabi_uidiv(void);
45extern void __aeabi_uidivmod(void);
46extern void __aeabi_ulcmp(void);
47
38extern void fpundefinstr(void); 48extern void fpundefinstr(void);
39extern void fp_enter(void); 49extern void fp_enter(void);
40 50
@@ -141,6 +151,18 @@ EXPORT_SYMBOL(__udivsi3);
141EXPORT_SYMBOL(__umodsi3); 151EXPORT_SYMBOL(__umodsi3);
142EXPORT_SYMBOL(__do_div64); 152EXPORT_SYMBOL(__do_div64);
143 153
154#ifdef CONFIG_AEABI
155EXPORT_SYMBOL(__aeabi_idiv);
156EXPORT_SYMBOL(__aeabi_idivmod);
157EXPORT_SYMBOL(__aeabi_lasr);
158EXPORT_SYMBOL(__aeabi_llsl);
159EXPORT_SYMBOL(__aeabi_llsr);
160EXPORT_SYMBOL(__aeabi_lmul);
161EXPORT_SYMBOL(__aeabi_uidiv);
162EXPORT_SYMBOL(__aeabi_uidivmod);
163EXPORT_SYMBOL(__aeabi_ulcmp);
164#endif
165
144 /* bitops */ 166 /* bitops */
145EXPORT_SYMBOL(_set_bit_le); 167EXPORT_SYMBOL(_set_bit_le);
146EXPORT_SYMBOL(_test_and_set_bit_le); 168EXPORT_SYMBOL(_test_and_set_bit_le);
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S
index 55076a75e5bf..75e6f9a94713 100644
--- a/arch/arm/kernel/calls.S
+++ b/arch/arm/kernel/calls.S
@@ -13,7 +13,7 @@
13#define NR_syscalls 328 13#define NR_syscalls 328
14#else 14#else
15 15
16__syscall_start: 16100:
17/* 0 */ .long sys_restart_syscall 17/* 0 */ .long sys_restart_syscall
18 .long sys_exit 18 .long sys_exit
19 .long sys_fork_wrapper 19 .long sys_fork_wrapper
@@ -27,7 +27,7 @@ __syscall_start:
27/* 10 */ .long sys_unlink 27/* 10 */ .long sys_unlink
28 .long sys_execve_wrapper 28 .long sys_execve_wrapper
29 .long sys_chdir 29 .long sys_chdir
30 .long sys_time /* used by libc4 */ 30 .long OBSOLETE(sys_time) /* used by libc4 */
31 .long sys_mknod 31 .long sys_mknod
32/* 15 */ .long sys_chmod 32/* 15 */ .long sys_chmod
33 .long sys_lchown16 33 .long sys_lchown16
@@ -36,15 +36,15 @@ __syscall_start:
36 .long sys_lseek 36 .long sys_lseek
37/* 20 */ .long sys_getpid 37/* 20 */ .long sys_getpid
38 .long sys_mount 38 .long sys_mount
39 .long sys_oldumount /* used by libc4 */ 39 .long OBSOLETE(sys_oldumount) /* used by libc4 */
40 .long sys_setuid16 40 .long sys_setuid16
41 .long sys_getuid16 41 .long sys_getuid16
42/* 25 */ .long sys_stime 42/* 25 */ .long OBSOLETE(sys_stime)
43 .long sys_ptrace 43 .long sys_ptrace
44 .long sys_alarm /* used by libc4 */ 44 .long OBSOLETE(sys_alarm) /* used by libc4 */
45 .long sys_ni_syscall /* was sys_fstat */ 45 .long sys_ni_syscall /* was sys_fstat */
46 .long sys_pause 46 .long sys_pause
47/* 30 */ .long sys_utime /* used by libc4 */ 47/* 30 */ .long OBSOLETE(sys_utime) /* used by libc4 */
48 .long sys_ni_syscall /* was sys_stty */ 48 .long sys_ni_syscall /* was sys_stty */
49 .long sys_ni_syscall /* was sys_getty */ 49 .long sys_ni_syscall /* was sys_getty */
50 .long sys_access 50 .long sys_access
@@ -90,21 +90,21 @@ __syscall_start:
90 .long sys_sigpending 90 .long sys_sigpending
91 .long sys_sethostname 91 .long sys_sethostname
92/* 75 */ .long sys_setrlimit 92/* 75 */ .long sys_setrlimit
93 .long sys_old_getrlimit /* used by libc4 */ 93 .long OBSOLETE(sys_old_getrlimit) /* used by libc4 */
94 .long sys_getrusage 94 .long sys_getrusage
95 .long sys_gettimeofday 95 .long sys_gettimeofday
96 .long sys_settimeofday 96 .long sys_settimeofday
97/* 80 */ .long sys_getgroups16 97/* 80 */ .long sys_getgroups16
98 .long sys_setgroups16 98 .long sys_setgroups16
99 .long old_select /* used by libc4 */ 99 .long OBSOLETE(old_select) /* used by libc4 */
100 .long sys_symlink 100 .long sys_symlink
101 .long sys_ni_syscall /* was sys_lstat */ 101 .long sys_ni_syscall /* was sys_lstat */
102/* 85 */ .long sys_readlink 102/* 85 */ .long sys_readlink
103 .long sys_uselib 103 .long sys_uselib
104 .long sys_swapon 104 .long sys_swapon
105 .long sys_reboot 105 .long sys_reboot
106 .long old_readdir /* used by libc4 */ 106 .long OBSOLETE(old_readdir) /* used by libc4 */
107/* 90 */ .long old_mmap /* used by libc4 */ 107/* 90 */ .long OBSOLETE(old_mmap) /* used by libc4 */
108 .long sys_munmap 108 .long sys_munmap
109 .long sys_truncate 109 .long sys_truncate
110 .long sys_ftruncate 110 .long sys_ftruncate
@@ -116,7 +116,7 @@ __syscall_start:
116 .long sys_statfs 116 .long sys_statfs
117/* 100 */ .long sys_fstatfs 117/* 100 */ .long sys_fstatfs
118 .long sys_ni_syscall 118 .long sys_ni_syscall
119 .long sys_socketcall 119 .long OBSOLETE(sys_socketcall)
120 .long sys_syslog 120 .long sys_syslog
121 .long sys_setitimer 121 .long sys_setitimer
122/* 105 */ .long sys_getitimer 122/* 105 */ .long sys_getitimer
@@ -127,11 +127,11 @@ __syscall_start:
127/* 110 */ .long sys_ni_syscall /* was sys_iopl */ 127/* 110 */ .long sys_ni_syscall /* was sys_iopl */
128 .long sys_vhangup 128 .long sys_vhangup
129 .long sys_ni_syscall 129 .long sys_ni_syscall
130 .long sys_syscall /* call a syscall */ 130 .long OBSOLETE(sys_syscall) /* call a syscall */
131 .long sys_wait4 131 .long sys_wait4
132/* 115 */ .long sys_swapoff 132/* 115 */ .long sys_swapoff
133 .long sys_sysinfo 133 .long sys_sysinfo
134 .long sys_ipc 134 .long OBSOLETE(ABI(sys_ipc, sys_oabi_ipc))
135 .long sys_fsync 135 .long sys_fsync
136 .long sys_sigreturn_wrapper 136 .long sys_sigreturn_wrapper
137/* 120 */ .long sys_clone_wrapper 137/* 120 */ .long sys_clone_wrapper
@@ -194,8 +194,8 @@ __syscall_start:
194 .long sys_rt_sigtimedwait 194 .long sys_rt_sigtimedwait
195 .long sys_rt_sigqueueinfo 195 .long sys_rt_sigqueueinfo
196 .long sys_rt_sigsuspend_wrapper 196 .long sys_rt_sigsuspend_wrapper
197/* 180 */ .long sys_pread64 197/* 180 */ .long ABI(sys_pread64, sys_oabi_pread64)
198 .long sys_pwrite64 198 .long ABI(sys_pwrite64, sys_oabi_pwrite64)
199 .long sys_chown16 199 .long sys_chown16
200 .long sys_getcwd 200 .long sys_getcwd
201 .long sys_capget 201 .long sys_capget
@@ -207,11 +207,11 @@ __syscall_start:
207/* 190 */ .long sys_vfork_wrapper 207/* 190 */ .long sys_vfork_wrapper
208 .long sys_getrlimit 208 .long sys_getrlimit
209 .long sys_mmap2 209 .long sys_mmap2
210 .long sys_truncate64 210 .long ABI(sys_truncate64, sys_oabi_truncate64)
211 .long sys_ftruncate64 211 .long ABI(sys_ftruncate64, sys_oabi_ftruncate64)
212/* 195 */ .long sys_stat64 212/* 195 */ .long ABI(sys_stat64, sys_oabi_stat64)
213 .long sys_lstat64 213 .long ABI(sys_lstat64, sys_oabi_lstat64)
214 .long sys_fstat64 214 .long ABI(sys_fstat64, sys_oabi_fstat64)
215 .long sys_lchown 215 .long sys_lchown
216 .long sys_getuid 216 .long sys_getuid
217/* 200 */ .long sys_getgid 217/* 200 */ .long sys_getgid
@@ -235,11 +235,11 @@ __syscall_start:
235 .long sys_pivot_root 235 .long sys_pivot_root
236 .long sys_mincore 236 .long sys_mincore
237/* 220 */ .long sys_madvise 237/* 220 */ .long sys_madvise
238 .long sys_fcntl64 238 .long ABI(sys_fcntl64, sys_oabi_fcntl64)
239 .long sys_ni_syscall /* TUX */ 239 .long sys_ni_syscall /* TUX */
240 .long sys_ni_syscall 240 .long sys_ni_syscall
241 .long sys_gettid 241 .long sys_gettid
242/* 225 */ .long sys_readahead 242/* 225 */ .long ABI(sys_readahead, sys_oabi_readahead)
243 .long sys_setxattr 243 .long sys_setxattr
244 .long sys_lsetxattr 244 .long sys_lsetxattr
245 .long sys_fsetxattr 245 .long sys_fsetxattr
@@ -265,8 +265,8 @@ __syscall_start:
265 .long sys_exit_group 265 .long sys_exit_group
266 .long sys_lookup_dcookie 266 .long sys_lookup_dcookie
267/* 250 */ .long sys_epoll_create 267/* 250 */ .long sys_epoll_create
268 .long sys_epoll_ctl 268 .long ABI(sys_epoll_ctl, sys_oabi_epoll_ctl)
269 .long sys_epoll_wait 269 .long ABI(sys_epoll_wait, sys_oabi_epoll_wait)
270 .long sys_remap_file_pages 270 .long sys_remap_file_pages
271 .long sys_ni_syscall /* sys_set_thread_area */ 271 .long sys_ni_syscall /* sys_set_thread_area */
272/* 255 */ .long sys_ni_syscall /* sys_get_thread_area */ 272/* 255 */ .long sys_ni_syscall /* sys_get_thread_area */
@@ -280,8 +280,8 @@ __syscall_start:
280 .long sys_clock_gettime 280 .long sys_clock_gettime
281 .long sys_clock_getres 281 .long sys_clock_getres
282/* 265 */ .long sys_clock_nanosleep 282/* 265 */ .long sys_clock_nanosleep
283 .long sys_statfs64 283 .long sys_statfs64_wrapper
284 .long sys_fstatfs64 284 .long sys_fstatfs64_wrapper
285 .long sys_tgkill 285 .long sys_tgkill
286 .long sys_utimes 286 .long sys_utimes
287/* 270 */ .long sys_arm_fadvise64_64 287/* 270 */ .long sys_arm_fadvise64_64
@@ -312,7 +312,7 @@ __syscall_start:
312/* 295 */ .long sys_getsockopt 312/* 295 */ .long sys_getsockopt
313 .long sys_sendmsg 313 .long sys_sendmsg
314 .long sys_recvmsg 314 .long sys_recvmsg
315 .long sys_semop 315 .long ABI(sys_semop, sys_oabi_semop)
316 .long sys_semget 316 .long sys_semget
317/* 300 */ .long sys_semctl 317/* 300 */ .long sys_semctl
318 .long sys_msgsnd 318 .long sys_msgsnd
@@ -326,7 +326,7 @@ __syscall_start:
326 .long sys_add_key 326 .long sys_add_key
327/* 310 */ .long sys_request_key 327/* 310 */ .long sys_request_key
328 .long sys_keyctl 328 .long sys_keyctl
329 .long sys_semtimedop 329 .long ABI(sys_semtimedop, sys_oabi_semtimedop)
330/* vserver */ .long sys_ni_syscall 330/* vserver */ .long sys_ni_syscall
331 .long sys_ioprio_set 331 .long sys_ioprio_set
332/* 315 */ .long sys_ioprio_get 332/* 315 */ .long sys_ioprio_get
@@ -336,9 +336,8 @@ __syscall_start:
336 .long sys_mbind 336 .long sys_mbind
337/* 320 */ .long sys_get_mempolicy 337/* 320 */ .long sys_get_mempolicy
338 .long sys_set_mempolicy 338 .long sys_set_mempolicy
339__syscall_end:
340 339
341 .rept NR_syscalls - (__syscall_end - __syscall_start) / 4 340 .rept NR_syscalls - (. - 100b) / 4
342 .long sys_ni_syscall 341 .long sys_ni_syscall
343 .endr 342 .endr
344#endif 343#endif
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index a52baedf6262..874e6bb79405 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -3,6 +3,7 @@
3 * 3 *
4 * Copyright (C) 1996,1997,1998 Russell King. 4 * Copyright (C) 1996,1997,1998 Russell King.
5 * ARM700 fix by Matthew Godbolt (linux-user@willothewisp.demon.co.uk) 5 * ARM700 fix by Matthew Godbolt (linux-user@willothewisp.demon.co.uk)
6 * nommu support by Hyok S. Choi (hyok.choi@samsung.com)
6 * 7 *
7 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as 9 * it under the terms of the GNU General Public License version 2 as
@@ -104,14 +105,24 @@ common_invalid:
104/* 105/*
105 * SVC mode handlers 106 * SVC mode handlers
106 */ 107 */
108
109#if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5)
110#define SPFIX(code...) code
111#else
112#define SPFIX(code...)
113#endif
114
107 .macro svc_entry 115 .macro svc_entry
108 sub sp, sp, #S_FRAME_SIZE 116 sub sp, sp, #S_FRAME_SIZE
117 SPFIX( tst sp, #4 )
118 SPFIX( bicne sp, sp, #4 )
109 stmib sp, {r1 - r12} 119 stmib sp, {r1 - r12}
110 120
111 ldmia r0, {r1 - r3} 121 ldmia r0, {r1 - r3}
112 add r5, sp, #S_SP @ here for interlock avoidance 122 add r5, sp, #S_SP @ here for interlock avoidance
113 mov r4, #-1 @ "" "" "" "" 123 mov r4, #-1 @ "" "" "" ""
114 add r0, sp, #S_FRAME_SIZE @ "" "" "" "" 124 add r0, sp, #S_FRAME_SIZE @ "" "" "" ""
125 SPFIX( addne r0, r0, #4 )
115 str r1, [sp] @ save the "real" r0 copied 126 str r1, [sp] @ save the "real" r0 copied
116 @ from the exception stack 127 @ from the exception stack
117 128
@@ -302,7 +313,14 @@ __pabt_svc:
302 313
303/* 314/*
304 * User mode handlers 315 * User mode handlers
316 *
317 * EABI note: sp_svc is always 64-bit aligned here, so should S_FRAME_SIZE
305 */ 318 */
319
320#if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) && (S_FRAME_SIZE & 7)
321#error "sizeof(struct pt_regs) must be a multiple of 8"
322#endif
323
306 .macro usr_entry 324 .macro usr_entry
307 sub sp, sp, #S_FRAME_SIZE 325 sub sp, sp, #S_FRAME_SIZE
308 stmib sp, {r1 - r12} 326 stmib sp, {r1 - r12}
@@ -538,7 +556,11 @@ ENTRY(__switch_to)
538 add ip, r1, #TI_CPU_SAVE 556 add ip, r1, #TI_CPU_SAVE
539 ldr r3, [r2, #TI_TP_VALUE] 557 ldr r3, [r2, #TI_TP_VALUE]
540 stmia ip!, {r4 - sl, fp, sp, lr} @ Store most regs on stack 558 stmia ip!, {r4 - sl, fp, sp, lr} @ Store most regs on stack
559#ifndef CONFIG_MMU
560 add r2, r2, #TI_CPU_DOMAIN
561#else
541 ldr r6, [r2, #TI_CPU_DOMAIN]! 562 ldr r6, [r2, #TI_CPU_DOMAIN]!
563#endif
542#if __LINUX_ARM_ARCH__ >= 6 564#if __LINUX_ARM_ARCH__ >= 6
543#ifdef CONFIG_CPU_MPCORE 565#ifdef CONFIG_CPU_MPCORE
544 clrex 566 clrex
@@ -556,7 +578,9 @@ ENTRY(__switch_to)
556 mov r4, #0xffff0fff 578 mov r4, #0xffff0fff
557 str r3, [r4, #-15] @ TLS val at 0xffff0ff0 579 str r3, [r4, #-15] @ TLS val at 0xffff0ff0
558#endif 580#endif
581#ifdef CONFIG_MMU
559 mcr p15, 0, r6, c3, c0, 0 @ Set domain register 582 mcr p15, 0, r6, c3, c0, 0 @ Set domain register
583#endif
560#ifdef CONFIG_VFP 584#ifdef CONFIG_VFP
561 @ Always disable VFP so we can lazily save/restore the old 585 @ Always disable VFP so we can lazily save/restore the old
562 @ state. This occurs in the context of the previous thread. 586 @ state. This occurs in the context of the previous thread.
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index e2b42997ad33..2b92ce85f97f 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -98,20 +98,14 @@ ENTRY(ret_from_fork)
98 run on an ARM7 and we can save a couple of instructions. 98 run on an ARM7 and we can save a couple of instructions.
99 --pb */ 99 --pb */
100#ifdef CONFIG_CPU_ARM710 100#ifdef CONFIG_CPU_ARM710
101 .macro arm710_bug_check, instr, temp 101#define A710(code...) code
102 and \temp, \instr, #0x0f000000 @ check for SWI 102.Larm710bug:
103 teq \temp, #0x0f000000
104 bne .Larm700bug
105 .endm
106
107.Larm700bug:
108 ldmia sp, {r0 - lr}^ @ Get calling r0 - lr 103 ldmia sp, {r0 - lr}^ @ Get calling r0 - lr
109 mov r0, r0 104 mov r0, r0
110 add sp, sp, #S_FRAME_SIZE 105 add sp, sp, #S_FRAME_SIZE
111 subs pc, lr, #4 106 subs pc, lr, #4
112#else 107#else
113 .macro arm710_bug_check, instr, temp 108#define A710(code...)
114 .endm
115#endif 109#endif
116 110
117 .align 5 111 .align 5
@@ -129,14 +123,50 @@ ENTRY(vector_swi)
129 /* 123 /*
130 * Get the system call number. 124 * Get the system call number.
131 */ 125 */
126
127#if defined(CONFIG_OABI_COMPAT)
128
129 /*
130 * If we have CONFIG_OABI_COMPAT then we need to look at the swi
131 * value to determine if it is an EABI or an old ABI call.
132 */
132#ifdef CONFIG_ARM_THUMB 133#ifdef CONFIG_ARM_THUMB
134 tst r8, #PSR_T_BIT
135 movne r10, #0 @ no thumb OABI emulation
136 ldreq r10, [lr, #-4] @ get SWI instruction
137#else
138 ldr r10, [lr, #-4] @ get SWI instruction
139 A710( and ip, r10, #0x0f000000 @ check for SWI )
140 A710( teq ip, #0x0f000000 )
141 A710( bne .Larm710bug )
142#endif
143
144#elif defined(CONFIG_AEABI)
145
146 /*
147 * Pure EABI user space always put syscall number into scno (r7).
148 */
149 A710( ldr ip, [lr, #-4] @ get SWI instruction )
150 A710( and ip, ip, #0x0f000000 @ check for SWI )
151 A710( teq ip, #0x0f000000 )
152 A710( bne .Larm710bug )
153
154#elif defined(CONFIG_ARM_THUMB)
155
156 /* Legacy ABI only, possibly thumb mode. */
133 tst r8, #PSR_T_BIT @ this is SPSR from save_user_regs 157 tst r8, #PSR_T_BIT @ this is SPSR from save_user_regs
134 addne scno, r7, #__NR_SYSCALL_BASE @ put OS number in 158 addne scno, r7, #__NR_SYSCALL_BASE @ put OS number in
135 ldreq scno, [lr, #-4] 159 ldreq scno, [lr, #-4]
160
136#else 161#else
162
163 /* Legacy ABI only. */
137 ldr scno, [lr, #-4] @ get SWI instruction 164 ldr scno, [lr, #-4] @ get SWI instruction
165 A710( and ip, scno, #0x0f000000 @ check for SWI )
166 A710( teq ip, #0x0f000000 )
167 A710( bne .Larm710bug )
168
138#endif 169#endif
139 arm710_bug_check scno, ip
140 170
141#ifdef CONFIG_ALIGNMENT_TRAP 171#ifdef CONFIG_ALIGNMENT_TRAP
142 ldr ip, __cr_alignment 172 ldr ip, __cr_alignment
@@ -145,18 +175,31 @@ ENTRY(vector_swi)
145#endif 175#endif
146 enable_irq 176 enable_irq
147 177
148 stmdb sp!, {r4, r5} @ push fifth and sixth args
149
150 get_thread_info tsk 178 get_thread_info tsk
179 adr tbl, sys_call_table @ load syscall table pointer
151 ldr ip, [tsk, #TI_FLAGS] @ check for syscall tracing 180 ldr ip, [tsk, #TI_FLAGS] @ check for syscall tracing
181
182#if defined(CONFIG_OABI_COMPAT)
183 /*
184 * If the swi argument is zero, this is an EABI call and we do nothing.
185 *
186 * If this is an old ABI call, get the syscall number into scno and
187 * get the old ABI syscall table address.
188 */
189 bics r10, r10, #0xff000000
190 eorne scno, r10, #__NR_OABI_SYSCALL_BASE
191 ldrne tbl, =sys_oabi_call_table
192#elif !defined(CONFIG_AEABI)
152 bic scno, scno, #0xff000000 @ mask off SWI op-code 193 bic scno, scno, #0xff000000 @ mask off SWI op-code
153 eor scno, scno, #__NR_SYSCALL_BASE @ check OS number 194 eor scno, scno, #__NR_SYSCALL_BASE @ check OS number
154 adr tbl, sys_call_table @ load syscall table pointer 195#endif
196
197 stmdb sp!, {r4, r5} @ push fifth and sixth args
155 tst ip, #_TIF_SYSCALL_TRACE @ are we tracing syscalls? 198 tst ip, #_TIF_SYSCALL_TRACE @ are we tracing syscalls?
156 bne __sys_trace 199 bne __sys_trace
157 200
158 adr lr, ret_fast_syscall @ return address
159 cmp scno, #NR_syscalls @ check upper syscall limit 201 cmp scno, #NR_syscalls @ check upper syscall limit
202 adr lr, ret_fast_syscall @ return address
160 ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine 203 ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine
161 204
162 add r1, sp, #S_OFF 205 add r1, sp, #S_OFF
@@ -171,11 +214,13 @@ ENTRY(vector_swi)
171 * context switches, and waiting for our parent to respond. 214 * context switches, and waiting for our parent to respond.
172 */ 215 */
173__sys_trace: 216__sys_trace:
217 mov r2, scno
174 add r1, sp, #S_OFF 218 add r1, sp, #S_OFF
175 mov r0, #0 @ trace entry [IP = 0] 219 mov r0, #0 @ trace entry [IP = 0]
176 bl syscall_trace 220 bl syscall_trace
177 221
178 adr lr, __sys_trace_return @ return address 222 adr lr, __sys_trace_return @ return address
223 mov scno, r0 @ syscall number (possibly new)
179 add r1, sp, #S_R0 + S_OFF @ pointer to regs 224 add r1, sp, #S_R0 + S_OFF @ pointer to regs
180 cmp scno, #NR_syscalls @ check upper syscall limit 225 cmp scno, #NR_syscalls @ check upper syscall limit
181 ldmccia r1, {r0 - r3} @ have to reload r0 - r3 226 ldmccia r1, {r0 - r3} @ have to reload r0 - r3
@@ -184,6 +229,7 @@ __sys_trace:
184 229
185__sys_trace_return: 230__sys_trace_return:
186 str r0, [sp, #S_R0 + S_OFF]! @ save returned r0 231 str r0, [sp, #S_R0 + S_OFF]! @ save returned r0
232 mov r2, scno
187 mov r1, sp 233 mov r1, sp
188 mov r0, #1 @ trace exit [IP = 1] 234 mov r0, #1 @ trace exit [IP = 1]
189 bl syscall_trace 235 bl syscall_trace
@@ -195,10 +241,24 @@ __sys_trace_return:
195__cr_alignment: 241__cr_alignment:
196 .word cr_alignment 242 .word cr_alignment
197#endif 243#endif
244 .ltorg
245
246/*
247 * This is the syscall table declaration for native ABI syscalls.
248 * With EABI a couple syscalls are obsolete and defined as sys_ni_syscall.
249 */
250#define ABI(native, compat) native
251#ifdef CONFIG_AEABI
252#define OBSOLETE(syscall) sys_ni_syscall
253#else
254#define OBSOLETE(syscall) syscall
255#endif
198 256
199 .type sys_call_table, #object 257 .type sys_call_table, #object
200ENTRY(sys_call_table) 258ENTRY(sys_call_table)
201#include "calls.S" 259#include "calls.S"
260#undef ABI
261#undef OBSOLETE
202 262
203/*============================================================================ 263/*============================================================================
204 * Special system call wrappers 264 * Special system call wrappers
@@ -207,7 +267,7 @@ ENTRY(sys_call_table)
207@ r8 = syscall table 267@ r8 = syscall table
208 .type sys_syscall, #function 268 .type sys_syscall, #function
209sys_syscall: 269sys_syscall:
210 eor scno, r0, #__NR_SYSCALL_BASE 270 eor scno, r0, #__NR_OABI_SYSCALL_BASE
211 cmp scno, #__NR_syscall - __NR_SYSCALL_BASE 271 cmp scno, #__NR_syscall - __NR_SYSCALL_BASE
212 cmpne scno, #NR_syscalls @ check range 272 cmpne scno, #NR_syscalls @ check range
213 stmloia sp, {r5, r6} @ shuffle args 273 stmloia sp, {r5, r6} @ shuffle args
@@ -255,6 +315,16 @@ sys_sigaltstack_wrapper:
255 ldr r2, [sp, #S_OFF + S_SP] 315 ldr r2, [sp, #S_OFF + S_SP]
256 b do_sigaltstack 316 b do_sigaltstack
257 317
318sys_statfs64_wrapper:
319 teq r1, #88
320 moveq r1, #84
321 b sys_statfs64
322
323sys_fstatfs64_wrapper:
324 teq r1, #88
325 moveq r1, #84
326 b sys_fstatfs64
327
258/* 328/*
259 * Note: off_4k (r5) is always units of 4K. If we can't do the requested 329 * Note: off_4k (r5) is always units of 4K. If we can't do the requested
260 * offset, we return EINVAL. 330 * offset, we return EINVAL.
@@ -271,3 +341,49 @@ sys_mmap2:
271 str r5, [sp, #4] 341 str r5, [sp, #4]
272 b do_mmap2 342 b do_mmap2
273#endif 343#endif
344
345#ifdef CONFIG_OABI_COMPAT
346
347/*
348 * These are syscalls with argument register differences
349 */
350
351sys_oabi_pread64:
352 stmia sp, {r3, r4}
353 b sys_pread64
354
355sys_oabi_pwrite64:
356 stmia sp, {r3, r4}
357 b sys_pwrite64
358
359sys_oabi_truncate64:
360 mov r3, r2
361 mov r2, r1
362 b sys_truncate64
363
364sys_oabi_ftruncate64:
365 mov r3, r2
366 mov r2, r1
367 b sys_ftruncate64
368
369sys_oabi_readahead:
370 str r3, [sp]
371 mov r3, r2
372 mov r2, r1
373 b sys_readahead
374
375/*
376 * Let's declare a second syscall table for old ABI binaries
377 * using the compatibility syscall entries.
378 */
379#define ABI(native, compat) compat
380#define OBSOLETE(syscall) syscall
381
382 .type sys_oabi_call_table, #object
383ENTRY(sys_oabi_call_table)
384#include "calls.S"
385#undef ABI
386#undef OBSOLETE
387
388#endif
389
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
index 648cfff93138..55c99cdab7d6 100644
--- a/arch/arm/kernel/entry-header.S
+++ b/arch/arm/kernel/entry-header.S
@@ -19,6 +19,7 @@
19@ 19@
20@ Most of the stack format comes from struct pt_regs, but with 20@ Most of the stack format comes from struct pt_regs, but with
21@ the addition of 8 bytes for storing syscall args 5 and 6. 21@ the addition of 8 bytes for storing syscall args 5 and 6.
22@ This _must_ remain a multiple of 8 for EABI.
22@ 23@
23#define S_OFF 8 24#define S_OFF 8
24 25
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index 1e985f2cd70f..1aca1775b28f 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -251,12 +251,11 @@ __turn_mmu_on:
251 * r10 = procinfo 251 * r10 = procinfo
252 * 252 *
253 * Returns: 253 * Returns:
254 * r0, r3, r5, r6, r7 corrupted 254 * r0, r3, r6, r7 corrupted
255 * r4 = physical page table address 255 * r4 = physical page table address
256 */ 256 */
257 .type __create_page_tables, %function 257 .type __create_page_tables, %function
258__create_page_tables: 258__create_page_tables:
259 ldr r5, [r8, #MACHINFO_PHYSRAM] @ physram
260 pgtbl r4 @ page table address 259 pgtbl r4 @ page table address
261 260
262 /* 261 /*
@@ -303,7 +302,7 @@ __create_page_tables:
303 * Then map first 1MB of ram in case it contains our boot params. 302 * Then map first 1MB of ram in case it contains our boot params.
304 */ 303 */
305 add r0, r4, #PAGE_OFFSET >> 18 304 add r0, r4, #PAGE_OFFSET >> 18
306 orr r6, r5, r7 305 orr r6, r7, #PHYS_OFFSET
307 str r6, [r0] 306 str r6, [r0]
308 307
309#ifdef CONFIG_XIP_KERNEL 308#ifdef CONFIG_XIP_KERNEL
@@ -311,7 +310,7 @@ __create_page_tables:
311 * Map some ram to cover our .data and .bss areas. 310 * Map some ram to cover our .data and .bss areas.
312 * Mapping 3MB should be plenty. 311 * Mapping 3MB should be plenty.
313 */ 312 */
314 sub r3, r4, r5 313 sub r3, r4, #PHYS_OFFSET
315 mov r3, r3, lsr #20 314 mov r3, r3, lsr #20
316 add r0, r0, r3, lsl #2 315 add r0, r0, r3, lsl #2
317 add r6, r6, r3, lsl #20 316 add r6, r6, r3, lsl #20
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index e591f72bcdeb..7b6256bb590e 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -766,6 +766,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
766 (unsigned long __user *) data); 766 (unsigned long __user *) data);
767 break; 767 break;
768 768
769 case PTRACE_SET_SYSCALL:
770 ret = 0;
771 child->ptrace_message = data;
772 break;
773
769 default: 774 default:
770 ret = ptrace_request(child, request, addr, data); 775 ret = ptrace_request(child, request, addr, data);
771 break; 776 break;
@@ -774,14 +779,14 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
774 return ret; 779 return ret;
775} 780}
776 781
777asmlinkage void syscall_trace(int why, struct pt_regs *regs) 782asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno)
778{ 783{
779 unsigned long ip; 784 unsigned long ip;
780 785
781 if (!test_thread_flag(TIF_SYSCALL_TRACE)) 786 if (!test_thread_flag(TIF_SYSCALL_TRACE))
782 return; 787 return scno;
783 if (!(current->ptrace & PT_PTRACED)) 788 if (!(current->ptrace & PT_PTRACED))
784 return; 789 return scno;
785 790
786 /* 791 /*
787 * Save IP. IP is used to denote syscall entry/exit: 792 * Save IP. IP is used to denote syscall entry/exit:
@@ -790,6 +795,8 @@ asmlinkage void syscall_trace(int why, struct pt_regs *regs)
790 ip = regs->ARM_ip; 795 ip = regs->ARM_ip;
791 regs->ARM_ip = why; 796 regs->ARM_ip = why;
792 797
798 current->ptrace_message = scno;
799
793 /* the 0x80 provides a way for the tracing parent to distinguish 800 /* the 0x80 provides a way for the tracing parent to distinguish
794 between a syscall stop and SIGTRAP delivery */ 801 between a syscall stop and SIGTRAP delivery */
795 ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) 802 ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
@@ -804,4 +811,6 @@ asmlinkage void syscall_trace(int why, struct pt_regs *regs)
804 current->exit_code = 0; 811 current->exit_code = 0;
805 } 812 }
806 regs->ARM_ip = ip; 813 regs->ARM_ip = ip;
814
815 return current->ptrace_message;
807} 816}
diff --git a/arch/arm/kernel/semaphore.c b/arch/arm/kernel/semaphore.c
index 4c31f2923055..981fe5c6ccbe 100644
--- a/arch/arm/kernel/semaphore.c
+++ b/arch/arm/kernel/semaphore.c
@@ -177,41 +177,42 @@ int __down_trylock(struct semaphore * sem)
177 * ip contains the semaphore pointer on entry. Save the C-clobbered 177 * ip contains the semaphore pointer on entry. Save the C-clobbered
178 * registers (r0 to r3 and lr), but not ip, as we use it as a return 178 * registers (r0 to r3 and lr), but not ip, as we use it as a return
179 * value in some cases.. 179 * value in some cases..
180 * To remain AAPCS compliant (64-bit stack align) we save r4 as well.
180 */ 181 */
181asm(" .section .sched.text,\"ax\",%progbits \n\ 182asm(" .section .sched.text,\"ax\",%progbits \n\
182 .align 5 \n\ 183 .align 5 \n\
183 .globl __down_failed \n\ 184 .globl __down_failed \n\
184__down_failed: \n\ 185__down_failed: \n\
185 stmfd sp!, {r0 - r3, lr} \n\ 186 stmfd sp!, {r0 - r4, lr} \n\
186 mov r0, ip \n\ 187 mov r0, ip \n\
187 bl __down \n\ 188 bl __down \n\
188 ldmfd sp!, {r0 - r3, pc} \n\ 189 ldmfd sp!, {r0 - r4, pc} \n\
189 \n\ 190 \n\
190 .align 5 \n\ 191 .align 5 \n\
191 .globl __down_interruptible_failed \n\ 192 .globl __down_interruptible_failed \n\
192__down_interruptible_failed: \n\ 193__down_interruptible_failed: \n\
193 stmfd sp!, {r0 - r3, lr} \n\ 194 stmfd sp!, {r0 - r4, lr} \n\
194 mov r0, ip \n\ 195 mov r0, ip \n\
195 bl __down_interruptible \n\ 196 bl __down_interruptible \n\
196 mov ip, r0 \n\ 197 mov ip, r0 \n\
197 ldmfd sp!, {r0 - r3, pc} \n\ 198 ldmfd sp!, {r0 - r4, pc} \n\
198 \n\ 199 \n\
199 .align 5 \n\ 200 .align 5 \n\
200 .globl __down_trylock_failed \n\ 201 .globl __down_trylock_failed \n\
201__down_trylock_failed: \n\ 202__down_trylock_failed: \n\
202 stmfd sp!, {r0 - r3, lr} \n\ 203 stmfd sp!, {r0 - r4, lr} \n\
203 mov r0, ip \n\ 204 mov r0, ip \n\
204 bl __down_trylock \n\ 205 bl __down_trylock \n\
205 mov ip, r0 \n\ 206 mov ip, r0 \n\
206 ldmfd sp!, {r0 - r3, pc} \n\ 207 ldmfd sp!, {r0 - r4, pc} \n\
207 \n\ 208 \n\
208 .align 5 \n\ 209 .align 5 \n\
209 .globl __up_wakeup \n\ 210 .globl __up_wakeup \n\
210__up_wakeup: \n\ 211__up_wakeup: \n\
211 stmfd sp!, {r0 - r3, lr} \n\ 212 stmfd sp!, {r0 - r4, lr} \n\
212 mov r0, ip \n\ 213 mov r0, ip \n\
213 bl __up \n\ 214 bl __up \n\
214 ldmfd sp!, {r0 - r3, pc} \n\ 215 ldmfd sp!, {r0 - r4, pc} \n\
215 "); 216 ");
216 217
217EXPORT_SYMBOL(__down_failed); 218EXPORT_SYMBOL(__down_failed);
diff --git a/arch/arm/kernel/sys_arm.c b/arch/arm/kernel/sys_arm.c
index ea569ba482b1..a491de2d9024 100644
--- a/arch/arm/kernel/sys_arm.c
+++ b/arch/arm/kernel/sys_arm.c
@@ -147,6 +147,7 @@ asmlinkage int old_select(struct sel_arg_struct __user *arg)
147 return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); 147 return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp);
148} 148}
149 149
150#if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT)
150/* 151/*
151 * sys_ipc() is the de-multiplexer for the SysV IPC calls.. 152 * sys_ipc() is the de-multiplexer for the SysV IPC calls..
152 * 153 *
@@ -226,6 +227,7 @@ asmlinkage int sys_ipc(uint call, int first, int second, int third,
226 return -ENOSYS; 227 return -ENOSYS;
227 } 228 }
228} 229}
230#endif
229 231
230/* Fork a new task - this creates a new program thread. 232/* Fork a new task - this creates a new program thread.
231 * This is called indirectly via a small wrapper 233 * This is called indirectly via a small wrapper
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c
new file mode 100644
index 000000000000..eafa8e5284af
--- /dev/null
+++ b/arch/arm/kernel/sys_oabi-compat.c
@@ -0,0 +1,339 @@
1/*
2 * arch/arm/kernel/sys_oabi-compat.c
3 *
4 * Compatibility wrappers for syscalls that are used from
5 * old ABI user space binaries with an EABI kernel.
6 *
7 * Author: Nicolas Pitre
8 * Created: Oct 7, 2005
9 * Copyright: MontaVista Software, Inc.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16/*
17 * The legacy ABI and the new ARM EABI have different rules making some
18 * syscalls incompatible especially with structure arguments.
19 * Most notably, Eabi says 64-bit members should be 64-bit aligned instead of
20 * simply word aligned. EABI also pads structures to the size of the largest
21 * member it contains instead of the invariant 32-bit.
22 *
23 * The following syscalls are affected:
24 *
25 * sys_stat64:
26 * sys_lstat64:
27 * sys_fstat64:
28 *
29 * struct stat64 has different sizes and some members are shifted
30 * Compatibility wrappers are needed for them and provided below.
31 *
32 * sys_fcntl64:
33 *
34 * struct flock64 has different sizes and some members are shifted
35 * A compatibility wrapper is needed and provided below.
36 *
37 * sys_statfs64:
38 * sys_fstatfs64:
39 *
40 * struct statfs64 has extra padding with EABI growing its size from
41 * 84 to 88. This struct is now __attribute__((packed,aligned(4)))
42 * with a small assembly wrapper to force the sz argument to 84 if it is 88
43 * to avoid copying the extra padding over user space unexpecting it.
44 *
45 * sys_newuname:
46 *
47 * struct new_utsname has no padding with EABI. No problem there.
48 *
49 * sys_epoll_ctl:
50 * sys_epoll_wait:
51 *
52 * struct epoll_event has its second member shifted also affecting the
53 * structure size. Compatibility wrappers are needed and provided below.
54 *
55 * sys_ipc:
56 * sys_semop:
57 * sys_semtimedop:
58 *
59 * struct sembuf loses its padding with EABI. Since arrays of them are
60 * used they have to be copyed to remove the padding. Compatibility wrappers
61 * provided below.
62 */
63
64#include <linux/syscalls.h>
65#include <linux/errno.h>
66#include <linux/fs.h>
67#include <linux/fcntl.h>
68#include <linux/eventpoll.h>
69#include <linux/sem.h>
70#include <asm/ipc.h>
71#include <asm/uaccess.h>
72
73struct oldabi_stat64 {
74 unsigned long long st_dev;
75 unsigned int __pad1;
76 unsigned long __st_ino;
77 unsigned int st_mode;
78 unsigned int st_nlink;
79
80 unsigned long st_uid;
81 unsigned long st_gid;
82
83 unsigned long long st_rdev;
84 unsigned int __pad2;
85
86 long long st_size;
87 unsigned long st_blksize;
88 unsigned long long st_blocks;
89
90 unsigned long st_atime;
91 unsigned long st_atime_nsec;
92
93 unsigned long st_mtime;
94 unsigned long st_mtime_nsec;
95
96 unsigned long st_ctime;
97 unsigned long st_ctime_nsec;
98
99 unsigned long long st_ino;
100} __attribute__ ((packed,aligned(4)));
101
102static long cp_oldabi_stat64(struct kstat *stat,
103 struct oldabi_stat64 __user *statbuf)
104{
105 struct oldabi_stat64 tmp;
106
107 tmp.st_dev = huge_encode_dev(stat->dev);
108 tmp.__pad1 = 0;
109 tmp.__st_ino = stat->ino;
110 tmp.st_mode = stat->mode;
111 tmp.st_nlink = stat->nlink;
112 tmp.st_uid = stat->uid;
113 tmp.st_gid = stat->gid;
114 tmp.st_rdev = huge_encode_dev(stat->rdev);
115 tmp.st_size = stat->size;
116 tmp.st_blocks = stat->blocks;
117 tmp.__pad2 = 0;
118 tmp.st_blksize = stat->blksize;
119 tmp.st_atime = stat->atime.tv_sec;
120 tmp.st_atime_nsec = stat->atime.tv_nsec;
121 tmp.st_mtime = stat->mtime.tv_sec;
122 tmp.st_mtime_nsec = stat->mtime.tv_nsec;
123 tmp.st_ctime = stat->ctime.tv_sec;
124 tmp.st_ctime_nsec = stat->ctime.tv_nsec;
125 tmp.st_ino = stat->ino;
126 return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
127}
128
129asmlinkage long sys_oabi_stat64(char __user * filename,
130 struct oldabi_stat64 __user * statbuf)
131{
132 struct kstat stat;
133 int error = vfs_stat(filename, &stat);
134 if (!error)
135 error = cp_oldabi_stat64(&stat, statbuf);
136 return error;
137}
138
139asmlinkage long sys_oabi_lstat64(char __user * filename,
140 struct oldabi_stat64 __user * statbuf)
141{
142 struct kstat stat;
143 int error = vfs_lstat(filename, &stat);
144 if (!error)
145 error = cp_oldabi_stat64(&stat, statbuf);
146 return error;
147}
148
149asmlinkage long sys_oabi_fstat64(unsigned long fd,
150 struct oldabi_stat64 __user * statbuf)
151{
152 struct kstat stat;
153 int error = vfs_fstat(fd, &stat);
154 if (!error)
155 error = cp_oldabi_stat64(&stat, statbuf);
156 return error;
157}
158
159struct oabi_flock64 {
160 short l_type;
161 short l_whence;
162 loff_t l_start;
163 loff_t l_len;
164 pid_t l_pid;
165} __attribute__ ((packed,aligned(4)));
166
167asmlinkage long sys_oabi_fcntl64(unsigned int fd, unsigned int cmd,
168 unsigned long arg)
169{
170 struct oabi_flock64 user;
171 struct flock64 kernel;
172 mm_segment_t fs = USER_DS; /* initialized to kill a warning */
173 unsigned long local_arg = arg;
174 int ret;
175
176 switch (cmd) {
177 case F_GETLK64:
178 case F_SETLK64:
179 case F_SETLKW64:
180 if (copy_from_user(&user, (struct oabi_flock64 __user *)arg,
181 sizeof(user)))
182 return -EFAULT;
183 kernel.l_type = user.l_type;
184 kernel.l_whence = user.l_whence;
185 kernel.l_start = user.l_start;
186 kernel.l_len = user.l_len;
187 kernel.l_pid = user.l_pid;
188 local_arg = (unsigned long)&kernel;
189 fs = get_fs();
190 set_fs(KERNEL_DS);
191 }
192
193 ret = sys_fcntl64(fd, cmd, local_arg);
194
195 switch (cmd) {
196 case F_GETLK64:
197 if (!ret) {
198 user.l_type = kernel.l_type;
199 user.l_whence = kernel.l_whence;
200 user.l_start = kernel.l_start;
201 user.l_len = kernel.l_len;
202 user.l_pid = kernel.l_pid;
203 if (copy_to_user((struct oabi_flock64 __user *)arg,
204 &user, sizeof(user)))
205 ret = -EFAULT;
206 }
207 case F_SETLK64:
208 case F_SETLKW64:
209 set_fs(fs);
210 }
211
212 return ret;
213}
214
215struct oabi_epoll_event {
216 __u32 events;
217 __u64 data;
218} __attribute__ ((packed,aligned(4)));
219
220asmlinkage long sys_oabi_epoll_ctl(int epfd, int op, int fd,
221 struct oabi_epoll_event __user *event)
222{
223 struct oabi_epoll_event user;
224 struct epoll_event kernel;
225 mm_segment_t fs;
226 long ret;
227
228 if (op == EPOLL_CTL_DEL)
229 return sys_epoll_ctl(epfd, op, fd, NULL);
230 if (copy_from_user(&user, event, sizeof(user)))
231 return -EFAULT;
232 kernel.events = user.events;
233 kernel.data = user.data;
234 fs = get_fs();
235 set_fs(KERNEL_DS);
236 ret = sys_epoll_ctl(epfd, op, fd, &kernel);
237 set_fs(fs);
238 return ret;
239}
240
241asmlinkage long sys_oabi_epoll_wait(int epfd,
242 struct oabi_epoll_event __user *events,
243 int maxevents, int timeout)
244{
245 struct epoll_event *kbuf;
246 mm_segment_t fs;
247 long ret, err, i;
248
249 if (maxevents <= 0 || maxevents > (INT_MAX/sizeof(struct epoll_event)))
250 return -EINVAL;
251 kbuf = kmalloc(sizeof(*kbuf) * maxevents, GFP_KERNEL);
252 if (!kbuf)
253 return -ENOMEM;
254 fs = get_fs();
255 set_fs(KERNEL_DS);
256 ret = sys_epoll_wait(epfd, kbuf, maxevents, timeout);
257 set_fs(fs);
258 err = 0;
259 for (i = 0; i < ret; i++) {
260 __put_user_error(kbuf[i].events, &events->events, err);
261 __put_user_error(kbuf[i].data, &events->data, err);
262 events++;
263 }
264 kfree(kbuf);
265 return err ? -EFAULT : ret;
266}
267
268struct oabi_sembuf {
269 unsigned short sem_num;
270 short sem_op;
271 short sem_flg;
272 unsigned short __pad;
273};
274
275asmlinkage long sys_oabi_semtimedop(int semid,
276 struct oabi_sembuf __user *tsops,
277 unsigned nsops,
278 const struct timespec __user *timeout)
279{
280 struct sembuf *sops;
281 struct timespec local_timeout;
282 long err;
283 int i;
284
285 if (nsops < 1)
286 return -EINVAL;
287 sops = kmalloc(sizeof(*sops) * nsops, GFP_KERNEL);
288 if (!sops)
289 return -ENOMEM;
290 err = 0;
291 for (i = 0; i < nsops; i++) {
292 __get_user_error(sops[i].sem_num, &tsops->sem_num, err);
293 __get_user_error(sops[i].sem_op, &tsops->sem_op, err);
294 __get_user_error(sops[i].sem_flg, &tsops->sem_flg, err);
295 tsops++;
296 }
297 if (timeout) {
298 /* copy this as well before changing domain protection */
299 err |= copy_from_user(&local_timeout, timeout, sizeof(*timeout));
300 timeout = &local_timeout;
301 }
302 if (err) {
303 err = -EFAULT;
304 } else {
305 mm_segment_t fs = get_fs();
306 set_fs(KERNEL_DS);
307 err = sys_semtimedop(semid, sops, nsops, timeout);
308 set_fs(fs);
309 }
310 kfree(sops);
311 return err;
312}
313
314asmlinkage long sys_oabi_semop(int semid, struct oabi_sembuf __user *tsops,
315 unsigned nsops)
316{
317 return sys_oabi_semtimedop(semid, tsops, nsops, NULL);
318}
319
320extern asmlinkage int sys_ipc(uint call, int first, int second, int third,
321 void __user *ptr, long fifth);
322
323asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third,
324 void __user *ptr, long fifth)
325{
326 switch (call & 0xffff) {
327 case SEMOP:
328 return sys_oabi_semtimedop(first,
329 (struct oabi_sembuf __user *)ptr,
330 second, NULL);
331 case SEMTIMEDOP:
332 return sys_oabi_semtimedop(first,
333 (struct oabi_sembuf __user *)ptr,
334 second,
335 (const struct timespec __user *)fifth);
336 default:
337 return sys_ipc(call, first, second, third, ptr, fifth);
338 }
339}
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 93cfd3ffcc72..10235b01582e 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -404,7 +404,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
404 struct thread_info *thread = current_thread_info(); 404 struct thread_info *thread = current_thread_info();
405 siginfo_t info; 405 siginfo_t info;
406 406
407 if ((no >> 16) != 0x9f) 407 if ((no >> 16) != (__ARM_NR_BASE>> 16))
408 return bad_syscall(no, regs); 408 return bad_syscall(no, regs);
409 409
410 switch (no & 0xffff) { 410 switch (no & 0xffff) {
diff --git a/arch/arm/lib/ashldi3.S b/arch/arm/lib/ashldi3.S
index 561e20717b30..55e57a1c2e6d 100644
--- a/arch/arm/lib/ashldi3.S
+++ b/arch/arm/lib/ashldi3.S
@@ -37,6 +37,7 @@ Boston, MA 02110-1301, USA. */
37#endif 37#endif
38 38
39ENTRY(__ashldi3) 39ENTRY(__ashldi3)
40ENTRY(__aeabi_llsl)
40 41
41 subs r3, r2, #32 42 subs r3, r2, #32
42 rsb ip, r2, #32 43 rsb ip, r2, #32
diff --git a/arch/arm/lib/ashrdi3.S b/arch/arm/lib/ashrdi3.S
index 86fb2a90c301..0b31398f89b2 100644
--- a/arch/arm/lib/ashrdi3.S
+++ b/arch/arm/lib/ashrdi3.S
@@ -37,6 +37,7 @@ Boston, MA 02110-1301, USA. */
37#endif 37#endif
38 38
39ENTRY(__ashrdi3) 39ENTRY(__ashrdi3)
40ENTRY(__aeabi_lasr)
40 41
41 subs r3, r2, #32 42 subs r3, r2, #32
42 rsb ip, r2, #32 43 rsb ip, r2, #32
diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S
index 59026029d017..4e492f4b3f0e 100644
--- a/arch/arm/lib/lib1funcs.S
+++ b/arch/arm/lib/lib1funcs.S
@@ -206,6 +206,7 @@ Boston, MA 02111-1307, USA. */
206 206
207 207
208ENTRY(__udivsi3) 208ENTRY(__udivsi3)
209ENTRY(__aeabi_uidiv)
209 210
210 subs r2, r1, #1 211 subs r2, r1, #1
211 moveq pc, lr 212 moveq pc, lr
@@ -246,6 +247,7 @@ ENTRY(__umodsi3)
246 247
247 248
248ENTRY(__divsi3) 249ENTRY(__divsi3)
250ENTRY(__aeabi_idiv)
249 251
250 cmp r1, #0 252 cmp r1, #0
251 eor ip, r0, r1 @ save the sign of the result. 253 eor ip, r0, r1 @ save the sign of the result.
@@ -303,12 +305,33 @@ ENTRY(__modsi3)
303 rsbmi r0, r0, #0 305 rsbmi r0, r0, #0
304 mov pc, lr 306 mov pc, lr
305 307
308#ifdef CONFIG_AEABI
309
310ENTRY(__aeabi_uidivmod)
311
312 stmfd sp!, {r0, r1, ip, lr}
313 bl __aeabi_uidiv
314 ldmfd sp!, {r1, r2, ip, lr}
315 mul r3, r0, r2
316 sub r1, r1, r3
317 mov pc, lr
318
319ENTRY(__aeabi_idivmod)
320
321 stmfd sp!, {r0, r1, ip, lr}
322 bl __aeabi_idiv
323 ldmfd sp!, {r1, r2, ip, lr}
324 mul r3, r0, r2
325 sub r1, r1, r3
326 mov pc, lr
327
328#endif
306 329
307Ldiv0: 330Ldiv0:
308 331
309 str lr, [sp, #-4]! 332 str lr, [sp, #-8]!
310 bl __div0 333 bl __div0
311 mov r0, #0 @ About as wrong as it could be. 334 mov r0, #0 @ About as wrong as it could be.
312 ldr pc, [sp], #4 335 ldr pc, [sp], #8
313 336
314 337
diff --git a/arch/arm/lib/lshrdi3.S b/arch/arm/lib/lshrdi3.S
index 46c2ed19ec95..a86dbdd59cc4 100644
--- a/arch/arm/lib/lshrdi3.S
+++ b/arch/arm/lib/lshrdi3.S
@@ -37,6 +37,7 @@ Boston, MA 02110-1301, USA. */
37#endif 37#endif
38 38
39ENTRY(__lshrdi3) 39ENTRY(__lshrdi3)
40ENTRY(__aeabi_llsr)
40 41
41 subs r3, r2, #32 42 subs r3, r2, #32
42 rsb ip, r2, #32 43 rsb ip, r2, #32
diff --git a/arch/arm/lib/muldi3.S b/arch/arm/lib/muldi3.S
index c7fbdf005319..72d594184b8a 100644
--- a/arch/arm/lib/muldi3.S
+++ b/arch/arm/lib/muldi3.S
@@ -25,6 +25,7 @@
25#endif 25#endif
26 26
27ENTRY(__muldi3) 27ENTRY(__muldi3)
28ENTRY(__aeabi_lmul)
28 29
29 mul xh, yl, xh 30 mul xh, yl, xh
30 mla xh, xl, yh, xh 31 mla xh, xl, yh, xh
diff --git a/arch/arm/lib/ucmpdi2.S b/arch/arm/lib/ucmpdi2.S
index 112630f93e5d..d847a62834cb 100644
--- a/arch/arm/lib/ucmpdi2.S
+++ b/arch/arm/lib/ucmpdi2.S
@@ -10,6 +10,7 @@
10 * published by the Free Software Foundation. 10 * published by the Free Software Foundation.
11 */ 11 */
12 12
13#include <linux/config.h>
13#include <linux/linkage.h> 14#include <linux/linkage.h>
14 15
15#ifdef __ARMEB__ 16#ifdef __ARMEB__
@@ -33,3 +34,16 @@ ENTRY(__ucmpdi2)
33 movhi r0, #2 34 movhi r0, #2
34 mov pc, lr 35 mov pc, lr
35 36
37#ifdef CONFIG_AEABI
38
39ENTRY(__aeabi_ulcmp)
40
41 cmp xh, yh
42 cmpeq xl, yl
43 movlo r0, #-1
44 moveq r0, #0
45 movhi r0, #1
46 mov pc, lr
47
48#endif
49
diff --git a/arch/arm/mach-aaec2000/aaed2000.c b/arch/arm/mach-aaec2000/aaed2000.c
index f5ef69702296..dc5fa8e5ebef 100644
--- a/arch/arm/mach-aaec2000/aaed2000.c
+++ b/arch/arm/mach-aaec2000/aaed2000.c
@@ -90,7 +90,6 @@ static void __init aaed2000_map_io(void)
90 90
91MACHINE_START(AAED2000, "Agilent AAED-2000 Development Platform") 91MACHINE_START(AAED2000, "Agilent AAED-2000 Development Platform")
92 /* Maintainer: Nicolas Bellido Y Ortega */ 92 /* Maintainer: Nicolas Bellido Y Ortega */
93 .phys_ram = 0xf0000000,
94 .phys_io = PIO_BASE, 93 .phys_io = PIO_BASE,
95 .io_pg_offst = ((VIO_BASE) >> 18) & 0xfffc, 94 .io_pg_offst = ((VIO_BASE) >> 18) & 0xfffc,
96 .map_io = aaed2000_map_io, 95 .map_io = aaed2000_map_io,
diff --git a/arch/arm/mach-at91rm9200/board-csb337.c b/arch/arm/mach-at91rm9200/board-csb337.c
index 4aec834ee47f..54022e58d50d 100644
--- a/arch/arm/mach-at91rm9200/board-csb337.c
+++ b/arch/arm/mach-at91rm9200/board-csb337.c
@@ -132,7 +132,6 @@ static void __init csb337_board_init(void)
132 132
133MACHINE_START(CSB337, "Cogent CSB337") 133MACHINE_START(CSB337, "Cogent CSB337")
134 /* Maintainer: Bill Gatliff */ 134 /* Maintainer: Bill Gatliff */
135 .phys_ram = AT91_SDRAM_BASE,
136 .phys_io = AT91_BASE_SYS, 135 .phys_io = AT91_BASE_SYS,
137 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, 136 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
138 .boot_params = AT91_SDRAM_BASE + 0x100, 137 .boot_params = AT91_SDRAM_BASE + 0x100,
diff --git a/arch/arm/mach-at91rm9200/board-csb637.c b/arch/arm/mach-at91rm9200/board-csb637.c
index 23e4cc21481a..8195f9d919ea 100644
--- a/arch/arm/mach-at91rm9200/board-csb637.c
+++ b/arch/arm/mach-at91rm9200/board-csb637.c
@@ -105,7 +105,6 @@ static void __init csb637_board_init(void)
105 105
106MACHINE_START(CSB637, "Cogent CSB637") 106MACHINE_START(CSB637, "Cogent CSB637")
107 /* Maintainer: Bill Gatliff */ 107 /* Maintainer: Bill Gatliff */
108 .phys_ram = AT91_SDRAM_BASE,
109 .phys_io = AT91_BASE_SYS, 108 .phys_io = AT91_BASE_SYS,
110 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, 109 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
111 .boot_params = AT91_SDRAM_BASE + 0x100, 110 .boot_params = AT91_SDRAM_BASE + 0x100,
diff --git a/arch/arm/mach-at91rm9200/board-dk.c b/arch/arm/mach-at91rm9200/board-dk.c
index 8c747a31b95a..8a783368366e 100644
--- a/arch/arm/mach-at91rm9200/board-dk.c
+++ b/arch/arm/mach-at91rm9200/board-dk.c
@@ -127,7 +127,6 @@ static void __init dk_board_init(void)
127 127
128MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK") 128MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
129 /* Maintainer: SAN People/Atmel */ 129 /* Maintainer: SAN People/Atmel */
130 .phys_ram = AT91_SDRAM_BASE,
131 .phys_io = AT91_BASE_SYS, 130 .phys_io = AT91_BASE_SYS,
132 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, 131 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
133 .boot_params = AT91_SDRAM_BASE + 0x100, 132 .boot_params = AT91_SDRAM_BASE + 0x100,
diff --git a/arch/arm/mach-at91rm9200/board-ek.c b/arch/arm/mach-at91rm9200/board-ek.c
index d140645711be..fd0752eba897 100644
--- a/arch/arm/mach-at91rm9200/board-ek.c
+++ b/arch/arm/mach-at91rm9200/board-ek.c
@@ -120,7 +120,6 @@ static void __init ek_board_init(void)
120 120
121MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK") 121MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK")
122 /* Maintainer: SAN People/Atmel */ 122 /* Maintainer: SAN People/Atmel */
123 .phys_ram = AT91_SDRAM_BASE,
124 .phys_io = AT91_BASE_SYS, 123 .phys_io = AT91_BASE_SYS,
125 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, 124 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
126 .boot_params = AT91_SDRAM_BASE + 0x100, 125 .boot_params = AT91_SDRAM_BASE + 0x100,
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c
index 43b9423d1440..c13ca6c56baa 100644
--- a/arch/arm/mach-clps711x/autcpu12.c
+++ b/arch/arm/mach-clps711x/autcpu12.c
@@ -64,7 +64,6 @@ void __init autcpu12_map_io(void)
64 64
65MACHINE_START(AUTCPU12, "autronix autcpu12") 65MACHINE_START(AUTCPU12, "autronix autcpu12")
66 /* Maintainer: Thomas Gleixner */ 66 /* Maintainer: Thomas Gleixner */
67 .phys_ram = 0xc0000000,
68 .phys_io = 0x80000000, 67 .phys_io = 0x80000000,
69 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc, 68 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc,
70 .boot_params = 0xc0020000, 69 .boot_params = 0xc0020000,
diff --git a/arch/arm/mach-clps711x/cdb89712.c b/arch/arm/mach-clps711x/cdb89712.c
index cba7be5a06c3..831df007f6c7 100644
--- a/arch/arm/mach-clps711x/cdb89712.c
+++ b/arch/arm/mach-clps711x/cdb89712.c
@@ -55,7 +55,6 @@ static void __init cdb89712_map_io(void)
55 55
56MACHINE_START(CDB89712, "Cirrus-CDB89712") 56MACHINE_START(CDB89712, "Cirrus-CDB89712")
57 /* Maintainer: Ray Lehtiniemi */ 57 /* Maintainer: Ray Lehtiniemi */
58 .phys_ram = 0xc0000000,
59 .phys_io = 0x80000000, 58 .phys_io = 0x80000000,
60 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc, 59 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc,
61 .boot_params = 0xc0000100, 60 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-clps711x/ceiva.c b/arch/arm/mach-clps711x/ceiva.c
index 35d51a759b59..e2b2c5ac8a83 100644
--- a/arch/arm/mach-clps711x/ceiva.c
+++ b/arch/arm/mach-clps711x/ceiva.c
@@ -56,7 +56,6 @@ static void __init ceiva_map_io(void)
56 56
57MACHINE_START(CEIVA, "CEIVA/Polaroid Photo MAX Digital Picture Frame") 57MACHINE_START(CEIVA, "CEIVA/Polaroid Photo MAX Digital Picture Frame")
58 /* Maintainer: Rob Scott */ 58 /* Maintainer: Rob Scott */
59 .phys_ram = 0xc0000000,
60 .phys_io = 0x80000000, 59 .phys_io = 0x80000000,
61 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc, 60 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc,
62 .boot_params = 0xc0000100, 61 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-clps711x/clep7312.c b/arch/arm/mach-clps711x/clep7312.c
index c83f3fd68fcd..09fb57e45213 100644
--- a/arch/arm/mach-clps711x/clep7312.c
+++ b/arch/arm/mach-clps711x/clep7312.c
@@ -38,7 +38,6 @@ fixup_clep7312(struct machine_desc *desc, struct tag *tags,
38 38
39MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312") 39MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312")
40 /* Maintainer: Nobody */ 40 /* Maintainer: Nobody */
41 .phys_ram = 0xc0000000,
42 .phys_io = 0x80000000, 41 .phys_io = 0x80000000,
43 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc, 42 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc,
44 .boot_params = 0xc0000100, 43 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-clps711x/edb7211-arch.c b/arch/arm/mach-clps711x/edb7211-arch.c
index 255c98b63e15..dc81cc68595d 100644
--- a/arch/arm/mach-clps711x/edb7211-arch.c
+++ b/arch/arm/mach-clps711x/edb7211-arch.c
@@ -52,7 +52,6 @@ fixup_edb7211(struct machine_desc *desc, struct tag *tags,
52 52
53MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)") 53MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
54 /* Maintainer: Jon McClintock */ 54 /* Maintainer: Jon McClintock */
55 .phys_ram = 0xc0000000,
56 .phys_io = 0x80000000, 55 .phys_io = 0x80000000,
57 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc, 56 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc,
58 .boot_params = 0xc0020100, /* 0xc0000000 - 0xc001ffff can be video RAM */ 57 .boot_params = 0xc0020100, /* 0xc0000000 - 0xc001ffff can be video RAM */
diff --git a/arch/arm/mach-clps711x/fortunet.c b/arch/arm/mach-clps711x/fortunet.c
index 3d88da0c287b..ff26a85aa4ba 100644
--- a/arch/arm/mach-clps711x/fortunet.c
+++ b/arch/arm/mach-clps711x/fortunet.c
@@ -78,7 +78,6 @@ fortunet_fixup(struct machine_desc *desc, struct tag *tags,
78 78
79MACHINE_START(FORTUNET, "ARM-FortuNet") 79MACHINE_START(FORTUNET, "ARM-FortuNet")
80 /* Maintainer: FortuNet Inc. */ 80 /* Maintainer: FortuNet Inc. */
81 .phys_ram = 0xc0000000,
82 .phys_io = 0x80000000, 81 .phys_io = 0x80000000,
83 .io_pg_offst = ((0xf0000000) >> 18) & 0xfffc, 82 .io_pg_offst = ((0xf0000000) >> 18) & 0xfffc,
84 .boot_params = 0x00000000, 83 .boot_params = 0x00000000,
diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c
index a1acb945fb51..9ba45f4d5a7e 100644
--- a/arch/arm/mach-clps711x/p720t.c
+++ b/arch/arm/mach-clps711x/p720t.c
@@ -90,7 +90,6 @@ static void __init p720t_map_io(void)
90 90
91MACHINE_START(P720T, "ARM-Prospector720T") 91MACHINE_START(P720T, "ARM-Prospector720T")
92 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ 92 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
93 .phys_ram = 0xc0000000,
94 .phys_io = 0x80000000, 93 .phys_io = 0x80000000,
95 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc, 94 .io_pg_offst = ((0xff000000) >> 18) & 0xfffc,
96 .boot_params = 0xc0000100, 95 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-clps7500/core.c b/arch/arm/mach-clps7500/core.c
index d869af0023f8..5b12cab0e691 100644
--- a/arch/arm/mach-clps7500/core.c
+++ b/arch/arm/mach-clps7500/core.c
@@ -384,7 +384,6 @@ static void __init clps7500_init(void)
384 384
385MACHINE_START(CLPS7500, "CL-PS7500") 385MACHINE_START(CLPS7500, "CL-PS7500")
386 /* Maintainer: Philip Blundell */ 386 /* Maintainer: Philip Blundell */
387 .phys_ram = 0x10000000,
388 .phys_io = 0x03000000, 387 .phys_io = 0x03000000,
389 .io_pg_offst = ((0xe0000000) >> 18) & 0xfffc, 388 .io_pg_offst = ((0xe0000000) >> 18) & 0xfffc,
390 .map_io = clps7500_map_io, 389 .map_io = clps7500_map_io,
diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c
index ed4614983adb..6d620d8268cc 100644
--- a/arch/arm/mach-ebsa110/core.c
+++ b/arch/arm/mach-ebsa110/core.c
@@ -284,7 +284,6 @@ arch_initcall(ebsa110_init);
284 284
285MACHINE_START(EBSA110, "EBSA110") 285MACHINE_START(EBSA110, "EBSA110")
286 /* Maintainer: Russell King */ 286 /* Maintainer: Russell King */
287 .phys_ram = 0x00000000,
288 .phys_io = 0xe0000000, 287 .phys_io = 0xe0000000,
289 .io_pg_offst = ((0xe0000000) >> 18) & 0xfffc, 288 .io_pg_offst = ((0xe0000000) >> 18) & 0xfffc,
290 .boot_params = 0x00000400, 289 .boot_params = 0x00000400,
diff --git a/arch/arm/mach-footbridge/cats-hw.c b/arch/arm/mach-footbridge/cats-hw.c
index 49b898af0032..5b64d5c5b967 100644
--- a/arch/arm/mach-footbridge/cats-hw.c
+++ b/arch/arm/mach-footbridge/cats-hw.c
@@ -85,7 +85,6 @@ fixup_cats(struct machine_desc *desc, struct tag *tags,
85 85
86MACHINE_START(CATS, "Chalice-CATS") 86MACHINE_START(CATS, "Chalice-CATS")
87 /* Maintainer: Philip Blundell */ 87 /* Maintainer: Philip Blundell */
88 .phys_ram = 0x00000000,
89 .phys_io = DC21285_ARMCSR_BASE, 88 .phys_io = DC21285_ARMCSR_BASE,
90 .io_pg_offst = ((0xfe000000) >> 18) & 0xfffc, 89 .io_pg_offst = ((0xfe000000) >> 18) & 0xfffc,
91 .boot_params = 0x00000100, 90 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-footbridge/co285.c b/arch/arm/mach-footbridge/co285.c
index 548a79081688..4545576ad8d9 100644
--- a/arch/arm/mach-footbridge/co285.c
+++ b/arch/arm/mach-footbridge/co285.c
@@ -29,7 +29,6 @@ fixup_coebsa285(struct machine_desc *desc, struct tag *tags,
29 29
30MACHINE_START(CO285, "co-EBSA285") 30MACHINE_START(CO285, "co-EBSA285")
31 /* Maintainer: Mark van Doesburg */ 31 /* Maintainer: Mark van Doesburg */
32 .phys_ram = 0x00000000,
33 .phys_io = DC21285_ARMCSR_BASE, 32 .phys_io = DC21285_ARMCSR_BASE,
34 .io_pg_offst = ((0x7cf00000) >> 18) & 0xfffc, 33 .io_pg_offst = ((0x7cf00000) >> 18) & 0xfffc,
35 .fixup = fixup_coebsa285, 34 .fixup = fixup_coebsa285,
diff --git a/arch/arm/mach-footbridge/ebsa285.c b/arch/arm/mach-footbridge/ebsa285.c
index 1c37605268d5..b1d3bf20a41e 100644
--- a/arch/arm/mach-footbridge/ebsa285.c
+++ b/arch/arm/mach-footbridge/ebsa285.c
@@ -14,7 +14,6 @@
14 14
15MACHINE_START(EBSA285, "EBSA285") 15MACHINE_START(EBSA285, "EBSA285")
16 /* Maintainer: Russell King */ 16 /* Maintainer: Russell King */
17 .phys_ram = 0x00000000,
18 .phys_io = DC21285_ARMCSR_BASE, 17 .phys_io = DC21285_ARMCSR_BASE,
19 .io_pg_offst = ((0xfe000000) >> 18) & 0xfffc, 18 .io_pg_offst = ((0xfe000000) >> 18) & 0xfffc,
20 .boot_params = 0x00000100, 19 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-footbridge/netwinder-hw.c b/arch/arm/mach-footbridge/netwinder-hw.c
index 9e563de465b5..229bf0585e40 100644
--- a/arch/arm/mach-footbridge/netwinder-hw.c
+++ b/arch/arm/mach-footbridge/netwinder-hw.c
@@ -649,7 +649,6 @@ fixup_netwinder(struct machine_desc *desc, struct tag *tags,
649 649
650MACHINE_START(NETWINDER, "Rebel-NetWinder") 650MACHINE_START(NETWINDER, "Rebel-NetWinder")
651 /* Maintainer: Russell King/Rebel.com */ 651 /* Maintainer: Russell King/Rebel.com */
652 .phys_ram = 0x00000000,
653 .phys_io = DC21285_ARMCSR_BASE, 652 .phys_io = DC21285_ARMCSR_BASE,
654 .io_pg_offst = ((0xfe000000) >> 18) & 0xfffc, 653 .io_pg_offst = ((0xfe000000) >> 18) & 0xfffc,
655 .boot_params = 0x00000100, 654 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-footbridge/personal.c b/arch/arm/mach-footbridge/personal.c
index 0146b8bb59da..c4f843fc099d 100644
--- a/arch/arm/mach-footbridge/personal.c
+++ b/arch/arm/mach-footbridge/personal.c
@@ -14,7 +14,6 @@
14 14
15MACHINE_START(PERSONAL_SERVER, "Compaq-PersonalServer") 15MACHINE_START(PERSONAL_SERVER, "Compaq-PersonalServer")
16 /* Maintainer: Jamey Hicks / George France */ 16 /* Maintainer: Jamey Hicks / George France */
17 .phys_ram = 0x00000000,
18 .phys_io = DC21285_ARMCSR_BASE, 17 .phys_io = DC21285_ARMCSR_BASE,
19 .io_pg_offst = ((0xfe000000) >> 18) & 0xfffc, 18 .io_pg_offst = ((0xfe000000) >> 18) & 0xfffc,
20 .boot_params = 0x00000100, 19 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-h720x/h7201-eval.c b/arch/arm/mach-h720x/h7201-eval.c
index fa59e9e2a5c8..193f968edac3 100644
--- a/arch/arm/mach-h720x/h7201-eval.c
+++ b/arch/arm/mach-h720x/h7201-eval.c
@@ -31,7 +31,6 @@
31 31
32MACHINE_START(H7201, "Hynix GMS30C7201") 32MACHINE_START(H7201, "Hynix GMS30C7201")
33 /* Maintainer: Robert Schwebel, Pengutronix */ 33 /* Maintainer: Robert Schwebel, Pengutronix */
34 .phys_ram = 0x40000000,
35 .phys_io = 0x80000000, 34 .phys_io = 0x80000000,
36 .io_pg_offst = ((0xf0000000) >> 18) & 0xfffc, 35 .io_pg_offst = ((0xf0000000) >> 18) & 0xfffc,
37 .boot_params = 0xc0001000, 36 .boot_params = 0xc0001000,
diff --git a/arch/arm/mach-h720x/h7202-eval.c b/arch/arm/mach-h720x/h7202-eval.c
index d75c8221d2a5..36266896979c 100644
--- a/arch/arm/mach-h720x/h7202-eval.c
+++ b/arch/arm/mach-h720x/h7202-eval.c
@@ -72,7 +72,6 @@ static void __init init_eval_h7202(void)
72 72
73MACHINE_START(H7202, "Hynix HMS30C7202") 73MACHINE_START(H7202, "Hynix HMS30C7202")
74 /* Maintainer: Robert Schwebel, Pengutronix */ 74 /* Maintainer: Robert Schwebel, Pengutronix */
75 .phys_ram = 0x40000000,
76 .phys_io = 0x80000000, 75 .phys_io = 0x80000000,
77 .io_pg_offst = ((0xf0000000) >> 18) & 0xfffc, 76 .io_pg_offst = ((0xf0000000) >> 18) & 0xfffc,
78 .boot_params = 0x40000100, 77 .boot_params = 0x40000100,
diff --git a/arch/arm/mach-imx/mx1ads.c b/arch/arm/mach-imx/mx1ads.c
index c9e0cd8ed016..dc31e3fd6c57 100644
--- a/arch/arm/mach-imx/mx1ads.c
+++ b/arch/arm/mach-imx/mx1ads.c
@@ -69,7 +69,6 @@ mx1ads_map_io(void)
69 69
70MACHINE_START(MX1ADS, "Motorola MX1ADS") 70MACHINE_START(MX1ADS, "Motorola MX1ADS")
71 /* Maintainer: Sascha Hauer, Pengutronix */ 71 /* Maintainer: Sascha Hauer, Pengutronix */
72 .phys_ram = 0x08000000,
73 .phys_io = 0x00200000, 72 .phys_io = 0x00200000,
74 .io_pg_offst = ((0xe0200000) >> 18) & 0xfffc, 73 .io_pg_offst = ((0xe0200000) >> 18) & 0xfffc,
75 .boot_params = 0x08000100, 74 .boot_params = 0x08000100,
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c
index 3afedeb56a6e..d8d3c2a5a97e 100644
--- a/arch/arm/mach-integrator/integrator_ap.c
+++ b/arch/arm/mach-integrator/integrator_ap.c
@@ -347,7 +347,6 @@ static struct sys_timer ap_timer = {
347 347
348MACHINE_START(INTEGRATOR, "ARM-Integrator") 348MACHINE_START(INTEGRATOR, "ARM-Integrator")
349 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ 349 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
350 .phys_ram = 0x00000000,
351 .phys_io = 0x16000000, 350 .phys_io = 0x16000000,
352 .io_pg_offst = ((0xf1600000) >> 18) & 0xfffc, 351 .io_pg_offst = ((0xf1600000) >> 18) & 0xfffc,
353 .boot_params = 0x00000100, 352 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c
index 16cf2482a3e9..31820170f306 100644
--- a/arch/arm/mach-integrator/integrator_cp.c
+++ b/arch/arm/mach-integrator/integrator_cp.c
@@ -578,7 +578,6 @@ static struct sys_timer cp_timer = {
578 578
579MACHINE_START(CINTEGRATOR, "ARM-IntegratorCP") 579MACHINE_START(CINTEGRATOR, "ARM-IntegratorCP")
580 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ 580 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
581 .phys_ram = 0x00000000,
582 .phys_io = 0x16000000, 581 .phys_io = 0x16000000,
583 .io_pg_offst = ((0xf1600000) >> 18) & 0xfffc, 582 .io_pg_offst = ((0xf1600000) >> 18) & 0xfffc,
584 .boot_params = 0x00000100, 583 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-iop3xx/iop321-setup.c b/arch/arm/mach-iop3xx/iop321-setup.c
index 80770233b8d4..e4f4c52d93d4 100644
--- a/arch/arm/mach-iop3xx/iop321-setup.c
+++ b/arch/arm/mach-iop3xx/iop321-setup.c
@@ -151,7 +151,6 @@ extern void iop321_init_time(void);
151#if defined(CONFIG_ARCH_IQ80321) 151#if defined(CONFIG_ARCH_IQ80321)
152MACHINE_START(IQ80321, "Intel IQ80321") 152MACHINE_START(IQ80321, "Intel IQ80321")
153 /* Maintainer: Intel Corporation */ 153 /* Maintainer: Intel Corporation */
154 .phys_ram = PHYS_OFFSET,
155 .phys_io = IQ80321_UART, 154 .phys_io = IQ80321_UART,
156 .io_pg_offst = ((IQ80321_UART) >> 18) & 0xfffc, 155 .io_pg_offst = ((IQ80321_UART) >> 18) & 0xfffc,
157 .map_io = iq80321_map_io, 156 .map_io = iq80321_map_io,
@@ -163,7 +162,6 @@ MACHINE_END
163#elif defined(CONFIG_ARCH_IQ31244) 162#elif defined(CONFIG_ARCH_IQ31244)
164MACHINE_START(IQ31244, "Intel IQ31244") 163MACHINE_START(IQ31244, "Intel IQ31244")
165 /* Maintainer: Intel Corp. */ 164 /* Maintainer: Intel Corp. */
166 .phys_ram = PHYS_OFFSET,
167 .phys_io = IQ31244_UART, 165 .phys_io = IQ31244_UART,
168 .io_pg_offst = ((IQ31244_UART) >> 18) & 0xfffc, 166 .io_pg_offst = ((IQ31244_UART) >> 18) & 0xfffc,
169 .map_io = iq31244_map_io, 167 .map_io = iq31244_map_io,
diff --git a/arch/arm/mach-iop3xx/iop331-setup.c b/arch/arm/mach-iop3xx/iop331-setup.c
index e6ea1cba6a17..63585485123e 100644
--- a/arch/arm/mach-iop3xx/iop331-setup.c
+++ b/arch/arm/mach-iop3xx/iop331-setup.c
@@ -195,7 +195,6 @@ extern void iq80332_map_io(void);
195#if defined(CONFIG_ARCH_IQ80331) 195#if defined(CONFIG_ARCH_IQ80331)
196MACHINE_START(IQ80331, "Intel IQ80331") 196MACHINE_START(IQ80331, "Intel IQ80331")
197 /* Maintainer: Intel Corp. */ 197 /* Maintainer: Intel Corp. */
198 .phys_ram = PHYS_OFFSET,
199 .phys_io = 0xfefff000, 198 .phys_io = 0xfefff000,
200 .io_pg_offst = ((0xfffff000) >> 18) & 0xfffc, // virtual, physical 199 .io_pg_offst = ((0xfffff000) >> 18) & 0xfffc, // virtual, physical
201 .map_io = iq80331_map_io, 200 .map_io = iq80331_map_io,
@@ -208,7 +207,6 @@ MACHINE_END
208#elif defined(CONFIG_MACH_IQ80332) 207#elif defined(CONFIG_MACH_IQ80332)
209MACHINE_START(IQ80332, "Intel IQ80332") 208MACHINE_START(IQ80332, "Intel IQ80332")
210 /* Maintainer: Intel Corp. */ 209 /* Maintainer: Intel Corp. */
211 .phys_ram = PHYS_OFFSET,
212 .phys_io = 0xfefff000, 210 .phys_io = 0xfefff000,
213 .io_pg_offst = ((0xfffff000) >> 18) & 0xfffc, // virtual, physical 211 .io_pg_offst = ((0xfffff000) >> 18) & 0xfffc, // virtual, physical
214 .map_io = iq80332_map_io, 212 .map_io = iq80332_map_io,
diff --git a/arch/arm/mach-ixp2000/core.c b/arch/arm/mach-ixp2000/core.c
index 6851abaf5524..cfd5bef3190b 100644
--- a/arch/arm/mach-ixp2000/core.c
+++ b/arch/arm/mach-ixp2000/core.c
@@ -106,6 +106,16 @@ static struct map_desc ixp2000_io_desc[] __initdata = {
106 .length = IXP2000_MSF_SIZE, 106 .length = IXP2000_MSF_SIZE,
107 .type = MT_IXP2000_DEVICE, 107 .type = MT_IXP2000_DEVICE,
108 }, { 108 }, {
109 .virtual = IXP2000_SCRATCH_RING_VIRT_BASE,
110 .pfn = __phys_to_pfn(IXP2000_SCRATCH_RING_PHYS_BASE),
111 .length = IXP2000_SCRATCH_RING_SIZE,
112 .type = MT_IXP2000_DEVICE,
113 }, {
114 .virtual = IXP2000_SRAM0_VIRT_BASE,
115 .pfn = __phys_to_pfn(IXP2000_SRAM0_PHYS_BASE),
116 .length = IXP2000_SRAM0_SIZE,
117 .type = MT_IXP2000_DEVICE,
118 }, {
109 .virtual = IXP2000_PCI_IO_VIRT_BASE, 119 .virtual = IXP2000_PCI_IO_VIRT_BASE,
110 .pfn = __phys_to_pfn(IXP2000_PCI_IO_PHYS_BASE), 120 .pfn = __phys_to_pfn(IXP2000_PCI_IO_PHYS_BASE),
111 .length = IXP2000_PCI_IO_SIZE, 121 .length = IXP2000_PCI_IO_SIZE,
diff --git a/arch/arm/mach-ixp2000/enp2611.c b/arch/arm/mach-ixp2000/enp2611.c
index 61f6006241bd..9e5a13bb39d0 100644
--- a/arch/arm/mach-ixp2000/enp2611.c
+++ b/arch/arm/mach-ixp2000/enp2611.c
@@ -254,7 +254,6 @@ static void __init enp2611_init_machine(void)
254 254
255MACHINE_START(ENP2611, "Radisys ENP-2611 PCI network processor board") 255MACHINE_START(ENP2611, "Radisys ENP-2611 PCI network processor board")
256 /* Maintainer: Lennert Buytenhek <buytenh@wantstofly.org> */ 256 /* Maintainer: Lennert Buytenhek <buytenh@wantstofly.org> */
257 .phys_ram = 0x00000000,
258 .phys_io = IXP2000_UART_PHYS_BASE, 257 .phys_io = IXP2000_UART_PHYS_BASE,
259 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc, 258 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
260 .boot_params = 0x00000100, 259 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-ixp2000/ixdp2400.c b/arch/arm/mach-ixp2000/ixdp2400.c
index fd280a93637e..7c782403042a 100644
--- a/arch/arm/mach-ixp2000/ixdp2400.c
+++ b/arch/arm/mach-ixp2000/ixdp2400.c
@@ -169,7 +169,6 @@ void ixdp2400_init_irq(void)
169 169
170MACHINE_START(IXDP2400, "Intel IXDP2400 Development Platform") 170MACHINE_START(IXDP2400, "Intel IXDP2400 Development Platform")
171 /* Maintainer: MontaVista Software, Inc. */ 171 /* Maintainer: MontaVista Software, Inc. */
172 .phys_ram = 0x00000000,
173 .phys_io = IXP2000_UART_PHYS_BASE, 172 .phys_io = IXP2000_UART_PHYS_BASE,
174 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc, 173 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
175 .boot_params = 0x00000100, 174 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-ixp2000/ixdp2800.c b/arch/arm/mach-ixp2000/ixdp2800.c
index f9073aa28615..076e3f8acc96 100644
--- a/arch/arm/mach-ixp2000/ixdp2800.c
+++ b/arch/arm/mach-ixp2000/ixdp2800.c
@@ -285,7 +285,6 @@ void ixdp2800_init_irq(void)
285 285
286MACHINE_START(IXDP2800, "Intel IXDP2800 Development Platform") 286MACHINE_START(IXDP2800, "Intel IXDP2800 Development Platform")
287 /* Maintainer: MontaVista Software, Inc. */ 287 /* Maintainer: MontaVista Software, Inc. */
288 .phys_ram = 0x00000000,
289 .phys_io = IXP2000_UART_PHYS_BASE, 288 .phys_io = IXP2000_UART_PHYS_BASE,
290 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc, 289 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
291 .boot_params = 0x00000100, 290 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-ixp2000/ixdp2x01.c b/arch/arm/mach-ixp2000/ixdp2x01.c
index e6a882f35da2..10f06606d460 100644
--- a/arch/arm/mach-ixp2000/ixdp2x01.c
+++ b/arch/arm/mach-ixp2000/ixdp2x01.c
@@ -376,7 +376,6 @@ static void __init ixdp2x01_init_machine(void)
376#ifdef CONFIG_ARCH_IXDP2401 376#ifdef CONFIG_ARCH_IXDP2401
377MACHINE_START(IXDP2401, "Intel IXDP2401 Development Platform") 377MACHINE_START(IXDP2401, "Intel IXDP2401 Development Platform")
378 /* Maintainer: MontaVista Software, Inc. */ 378 /* Maintainer: MontaVista Software, Inc. */
379 .phys_ram = 0x00000000,
380 .phys_io = IXP2000_UART_PHYS_BASE, 379 .phys_io = IXP2000_UART_PHYS_BASE,
381 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc, 380 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
382 .boot_params = 0x00000100, 381 .boot_params = 0x00000100,
@@ -390,7 +389,6 @@ MACHINE_END
390#ifdef CONFIG_ARCH_IXDP2801 389#ifdef CONFIG_ARCH_IXDP2801
391MACHINE_START(IXDP2801, "Intel IXDP2801 Development Platform") 390MACHINE_START(IXDP2801, "Intel IXDP2801 Development Platform")
392 /* Maintainer: MontaVista Software, Inc. */ 391 /* Maintainer: MontaVista Software, Inc. */
393 .phys_ram = 0x00000000,
394 .phys_io = IXP2000_UART_PHYS_BASE, 392 .phys_io = IXP2000_UART_PHYS_BASE,
395 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc, 393 .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
396 .boot_params = 0x00000100, 394 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-ixp4xx/coyote-setup.c b/arch/arm/mach-ixp4xx/coyote-setup.c
index 679594a73981..13f8a7ac3ba9 100644
--- a/arch/arm/mach-ixp4xx/coyote-setup.c
+++ b/arch/arm/mach-ixp4xx/coyote-setup.c
@@ -101,7 +101,6 @@ static void __init coyote_init(void)
101#ifdef CONFIG_ARCH_ADI_COYOTE 101#ifdef CONFIG_ARCH_ADI_COYOTE
102MACHINE_START(ADI_COYOTE, "ADI Engineering Coyote") 102MACHINE_START(ADI_COYOTE, "ADI Engineering Coyote")
103 /* Maintainer: MontaVista Software, Inc. */ 103 /* Maintainer: MontaVista Software, Inc. */
104 .phys_ram = PHYS_OFFSET,
105 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, 104 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
106 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, 105 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
107 .map_io = ixp4xx_map_io, 106 .map_io = ixp4xx_map_io,
@@ -119,7 +118,6 @@ MACHINE_END
119#ifdef CONFIG_MACH_IXDPG425 118#ifdef CONFIG_MACH_IXDPG425
120MACHINE_START(IXDPG425, "Intel IXDPG425") 119MACHINE_START(IXDPG425, "Intel IXDPG425")
121 /* Maintainer: MontaVista Software, Inc. */ 120 /* Maintainer: MontaVista Software, Inc. */
122 .phys_ram = PHYS_OFFSET,
123 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, 121 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
124 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, 122 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
125 .map_io = ixp4xx_map_io, 123 .map_io = ixp4xx_map_io,
diff --git a/arch/arm/mach-ixp4xx/gtwx5715-setup.c b/arch/arm/mach-ixp4xx/gtwx5715-setup.c
index 038670489970..654e2eed81fb 100644
--- a/arch/arm/mach-ixp4xx/gtwx5715-setup.c
+++ b/arch/arm/mach-ixp4xx/gtwx5715-setup.c
@@ -142,7 +142,6 @@ static void __init gtwx5715_init(void)
142 142
143MACHINE_START(GTWX5715, "Gemtek GTWX5715 (Linksys WRV54G)") 143MACHINE_START(GTWX5715, "Gemtek GTWX5715 (Linksys WRV54G)")
144 /* Maintainer: George Joseph */ 144 /* Maintainer: George Joseph */
145 .phys_ram = PHYS_OFFSET,
146 .phys_io = IXP4XX_UART2_BASE_PHYS, 145 .phys_io = IXP4XX_UART2_BASE_PHYS,
147 .io_pg_offst = ((IXP4XX_UART2_BASE_VIRT) >> 18) & 0xfffc, 146 .io_pg_offst = ((IXP4XX_UART2_BASE_VIRT) >> 18) & 0xfffc,
148 .map_io = ixp4xx_map_io, 147 .map_io = ixp4xx_map_io,
diff --git a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c
index c2e105c89c95..da72383ee301 100644
--- a/arch/arm/mach-ixp4xx/ixdp425-setup.c
+++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c
@@ -121,7 +121,6 @@ static void __init ixdp425_init(void)
121#ifdef CONFIG_ARCH_IXDP425 121#ifdef CONFIG_ARCH_IXDP425
122MACHINE_START(IXDP425, "Intel IXDP425 Development Platform") 122MACHINE_START(IXDP425, "Intel IXDP425 Development Platform")
123 /* Maintainer: MontaVista Software, Inc. */ 123 /* Maintainer: MontaVista Software, Inc. */
124 .phys_ram = PHYS_OFFSET,
125 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, 124 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
126 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, 125 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
127 .map_io = ixp4xx_map_io, 126 .map_io = ixp4xx_map_io,
@@ -135,7 +134,6 @@ MACHINE_END
135#ifdef CONFIG_MACH_IXDP465 134#ifdef CONFIG_MACH_IXDP465
136MACHINE_START(IXDP465, "Intel IXDP465 Development Platform") 135MACHINE_START(IXDP465, "Intel IXDP465 Development Platform")
137 /* Maintainer: MontaVista Software, Inc. */ 136 /* Maintainer: MontaVista Software, Inc. */
138 .phys_ram = PHYS_OFFSET,
139 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, 137 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
140 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, 138 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
141 .map_io = ixp4xx_map_io, 139 .map_io = ixp4xx_map_io,
@@ -149,7 +147,6 @@ MACHINE_END
149#ifdef CONFIG_ARCH_PRPMC1100 147#ifdef CONFIG_ARCH_PRPMC1100
150MACHINE_START(IXCDP1100, "Intel IXCDP1100 Development Platform") 148MACHINE_START(IXCDP1100, "Intel IXCDP1100 Development Platform")
151 /* Maintainer: MontaVista Software, Inc. */ 149 /* Maintainer: MontaVista Software, Inc. */
152 .phys_ram = PHYS_OFFSET,
153 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, 150 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
154 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, 151 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
155 .map_io = ixp4xx_map_io, 152 .map_io = ixp4xx_map_io,
@@ -169,7 +166,6 @@ MACHINE_END
169#ifdef CONFIG_ARCH_AVILA 166#ifdef CONFIG_ARCH_AVILA
170MACHINE_START(AVILA, "Gateworks Avila Network Platform") 167MACHINE_START(AVILA, "Gateworks Avila Network Platform")
171 /* Maintainer: Deepak Saxena <dsaxena@plexity.net> */ 168 /* Maintainer: Deepak Saxena <dsaxena@plexity.net> */
172 .phys_ram = PHYS_OFFSET,
173 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, 169 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
174 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, 170 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
175 .map_io = ixp4xx_map_io, 171 .map_io = ixp4xx_map_io,
diff --git a/arch/arm/mach-ixp4xx/nas100d-setup.c b/arch/arm/mach-ixp4xx/nas100d-setup.c
index 49998a8bd4e8..856d56f3b2ae 100644
--- a/arch/arm/mach-ixp4xx/nas100d-setup.c
+++ b/arch/arm/mach-ixp4xx/nas100d-setup.c
@@ -124,7 +124,6 @@ static void __init nas100d_init(void)
124 124
125MACHINE_START(NAS100D, "Iomega NAS 100d") 125MACHINE_START(NAS100D, "Iomega NAS 100d")
126 /* Maintainer: www.nslu2-linux.org */ 126 /* Maintainer: www.nslu2-linux.org */
127 .phys_ram = PHYS_OFFSET,
128 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, 127 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
129 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC, 128 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
130 .boot_params = 0x00000100, 129 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-ixp4xx/nslu2-setup.c b/arch/arm/mach-ixp4xx/nslu2-setup.c
index 289e94cb65c2..da9340a53434 100644
--- a/arch/arm/mach-ixp4xx/nslu2-setup.c
+++ b/arch/arm/mach-ixp4xx/nslu2-setup.c
@@ -123,7 +123,6 @@ static void __init nslu2_init(void)
123 123
124MACHINE_START(NSLU2, "Linksys NSLU2") 124MACHINE_START(NSLU2, "Linksys NSLU2")
125 /* Maintainer: www.nslu2-linux.org */ 125 /* Maintainer: www.nslu2-linux.org */
126 .phys_ram = PHYS_OFFSET,
127 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, 126 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
128 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC, 127 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
129 .boot_params = 0x00000100, 128 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-l7200/core.c b/arch/arm/mach-l7200/core.c
index 03ed742ae2be..ac626436e96f 100644
--- a/arch/arm/mach-l7200/core.c
+++ b/arch/arm/mach-l7200/core.c
@@ -91,7 +91,6 @@ static void __init l7200_map_io(void)
91 91
92MACHINE_START(L7200, "LinkUp Systems L7200") 92MACHINE_START(L7200, "LinkUp Systems L7200")
93 /* Maintainer: Steve Hill / Scott McConnell */ 93 /* Maintainer: Steve Hill / Scott McConnell */
94 .phys_ram = 0xf0000000,
95 .phys_io = 0x80040000, 94 .phys_io = 0x80040000,
96 .io_pg_offst = ((0xd0000000) >> 18) & 0xfffc, 95 .io_pg_offst = ((0xd0000000) >> 18) & 0xfffc,
97 .map_io = l7200_map_io, 96 .map_io = l7200_map_io,
diff --git a/arch/arm/mach-lh7a40x/arch-kev7a400.c b/arch/arm/mach-lh7a40x/arch-kev7a400.c
index 19f2fa2244c4..2cccc27c62e4 100644
--- a/arch/arm/mach-lh7a40x/arch-kev7a400.c
+++ b/arch/arm/mach-lh7a40x/arch-kev7a400.c
@@ -112,7 +112,6 @@ void __init lh7a40x_init_board_irq (void)
112 112
113MACHINE_START (KEV7A400, "Sharp KEV7a400") 113MACHINE_START (KEV7A400, "Sharp KEV7a400")
114 /* Maintainer: Marc Singer */ 114 /* Maintainer: Marc Singer */
115 .phys_ram = 0xc0000000,
116 .phys_io = 0x80000000, 115 .phys_io = 0x80000000,
117 .io_pg_offst = ((io_p2v (0x80000000))>>18) & 0xfffc, 116 .io_pg_offst = ((io_p2v (0x80000000))>>18) & 0xfffc,
118 .boot_params = 0xc0000100, 117 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-lh7a40x/arch-lpd7a40x.c b/arch/arm/mach-lh7a40x/arch-lpd7a40x.c
index 4eb962fdb3a8..12e23277c5ea 100644
--- a/arch/arm/mach-lh7a40x/arch-lpd7a40x.c
+++ b/arch/arm/mach-lh7a40x/arch-lpd7a40x.c
@@ -317,7 +317,6 @@ lpd7a400_map_io(void)
317 317
318MACHINE_START (LPD7A400, "Logic Product Development LPD7A400-10") 318MACHINE_START (LPD7A400, "Logic Product Development LPD7A400-10")
319 /* Maintainer: Marc Singer */ 319 /* Maintainer: Marc Singer */
320 .phys_ram = 0xc0000000,
321 .phys_io = 0x80000000, 320 .phys_io = 0x80000000,
322 .io_pg_offst = ((io_p2v (0x80000000))>>18) & 0xfffc, 321 .io_pg_offst = ((io_p2v (0x80000000))>>18) & 0xfffc,
323 .boot_params = 0xc0000100, 322 .boot_params = 0xc0000100,
@@ -333,7 +332,6 @@ MACHINE_END
333 332
334MACHINE_START (LPD7A404, "Logic Product Development LPD7A404-10") 333MACHINE_START (LPD7A404, "Logic Product Development LPD7A404-10")
335 /* Maintainer: Marc Singer */ 334 /* Maintainer: Marc Singer */
336 .phys_ram = 0xc0000000,
337 .phys_io = 0x80000000, 335 .phys_io = 0x80000000,
338 .io_pg_offst = ((io_p2v (0x80000000))>>18) & 0xfffc, 336 .io_pg_offst = ((io_p2v (0x80000000))>>18) & 0xfffc,
339 .boot_params = 0xc0000100, 337 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-omap1/board-generic.c b/arch/arm/mach-omap1/board-generic.c
index 4b292e93fbe2..bdc20b51b076 100644
--- a/arch/arm/mach-omap1/board-generic.c
+++ b/arch/arm/mach-omap1/board-generic.c
@@ -109,7 +109,6 @@ static void __init omap_generic_map_io(void)
109 109
110MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710") 110MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
111 /* Maintainer: Tony Lindgren <tony@atomide.com> */ 111 /* Maintainer: Tony Lindgren <tony@atomide.com> */
112 .phys_ram = 0x10000000,
113 .phys_io = 0xfff00000, 112 .phys_io = 0xfff00000,
114 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 113 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
115 .boot_params = 0x10000100, 114 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c
index a07e2c9307fa..9533c36a92df 100644
--- a/arch/arm/mach-omap1/board-h2.c
+++ b/arch/arm/mach-omap1/board-h2.c
@@ -199,7 +199,6 @@ static void __init h2_map_io(void)
199 199
200MACHINE_START(OMAP_H2, "TI-H2") 200MACHINE_START(OMAP_H2, "TI-H2")
201 /* Maintainer: Imre Deak <imre.deak@nokia.com> */ 201 /* Maintainer: Imre Deak <imre.deak@nokia.com> */
202 .phys_ram = 0x10000000,
203 .phys_io = 0xfff00000, 202 .phys_io = 0xfff00000,
204 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 203 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
205 .boot_params = 0x10000100, 204 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c
index 668e278433c2..d665efc1c344 100644
--- a/arch/arm/mach-omap1/board-h3.c
+++ b/arch/arm/mach-omap1/board-h3.c
@@ -215,7 +215,6 @@ static void __init h3_map_io(void)
215 215
216MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board") 216MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
217 /* Maintainer: Texas Instruments, Inc. */ 217 /* Maintainer: Texas Instruments, Inc. */
218 .phys_ram = 0x10000000,
219 .phys_io = 0xfff00000, 218 .phys_io = 0xfff00000,
220 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 219 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
221 .boot_params = 0x10000100, 220 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c
index 95f1ff36cdcb..652f37c7f906 100644
--- a/arch/arm/mach-omap1/board-innovator.c
+++ b/arch/arm/mach-omap1/board-innovator.c
@@ -303,7 +303,6 @@ static void __init innovator_map_io(void)
303 303
304MACHINE_START(OMAP_INNOVATOR, "TI-Innovator") 304MACHINE_START(OMAP_INNOVATOR, "TI-Innovator")
305 /* Maintainer: MontaVista Software, Inc. */ 305 /* Maintainer: MontaVista Software, Inc. */
306 .phys_ram = 0x10000000,
307 .phys_io = 0xfff00000, 306 .phys_io = 0xfff00000,
308 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 307 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
309 .boot_params = 0x10000100, 308 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap1/board-netstar.c b/arch/arm/mach-omap1/board-netstar.c
index 0448fa7de8a4..58f783930d45 100644
--- a/arch/arm/mach-omap1/board-netstar.c
+++ b/arch/arm/mach-omap1/board-netstar.c
@@ -149,7 +149,6 @@ postcore_initcall(netstar_late_init);
149 149
150MACHINE_START(NETSTAR, "NetStar OMAP5910") 150MACHINE_START(NETSTAR, "NetStar OMAP5910")
151 /* Maintainer: Ladislav Michl <michl@2n.cz> */ 151 /* Maintainer: Ladislav Michl <michl@2n.cz> */
152 .phys_ram = 0x10000000,
153 .phys_io = 0xfff00000, 152 .phys_io = 0xfff00000,
154 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 153 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
155 .boot_params = 0x10000100, 154 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c
index e990e1bc1669..e5d126e8f276 100644
--- a/arch/arm/mach-omap1/board-osk.c
+++ b/arch/arm/mach-omap1/board-osk.c
@@ -274,7 +274,6 @@ static void __init osk_map_io(void)
274 274
275MACHINE_START(OMAP_OSK, "TI-OSK") 275MACHINE_START(OMAP_OSK, "TI-OSK")
276 /* Maintainer: Dirk Behme <dirk.behme@de.bosch.com> */ 276 /* Maintainer: Dirk Behme <dirk.behme@de.bosch.com> */
277 .phys_ram = 0x10000000,
278 .phys_io = 0xfff00000, 277 .phys_io = 0xfff00000,
279 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 278 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
280 .boot_params = 0x10000100, 279 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c
index 5c975eb5c34b..67fada207622 100644
--- a/arch/arm/mach-omap1/board-palmte.c
+++ b/arch/arm/mach-omap1/board-palmte.c
@@ -76,7 +76,6 @@ static void __init omap_generic_map_io(void)
76} 76}
77 77
78MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E") 78MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
79 .phys_ram = 0x10000000,
80 .phys_io = 0xfff00000, 79 .phys_io = 0xfff00000,
81 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 80 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
82 .boot_params = 0x10000100, 81 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c
index 92ff5dc07351..88708a0c52a2 100644
--- a/arch/arm/mach-omap1/board-perseus2.c
+++ b/arch/arm/mach-omap1/board-perseus2.c
@@ -199,7 +199,6 @@ static void __init omap_perseus2_map_io(void)
199 199
200MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2") 200MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2")
201 /* Maintainer: Kevin Hilman <kjh@hilman.org> */ 201 /* Maintainer: Kevin Hilman <kjh@hilman.org> */
202 .phys_ram = 0x10000000,
203 .phys_io = 0xfff00000, 202 .phys_io = 0xfff00000,
204 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 203 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
205 .boot_params = 0x10000100, 204 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c
index 6f9a6220e78a..959b4b847c87 100644
--- a/arch/arm/mach-omap1/board-voiceblue.c
+++ b/arch/arm/mach-omap1/board-voiceblue.c
@@ -281,7 +281,6 @@ EXPORT_SYMBOL(voiceblue_wdt_ping);
281 281
282MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910") 282MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910")
283 /* Maintainer: Ladislav Michl <michl@2n.cz> */ 283 /* Maintainer: Ladislav Michl <michl@2n.cz> */
284 .phys_ram = 0x10000000,
285 .phys_io = 0xfff00000, 284 .phys_io = 0xfff00000,
286 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc, 285 .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
287 .boot_params = 0x10000100, 286 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index c602e7a3d93e..b937123e5c65 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -69,7 +69,6 @@ static void __init omap_generic_map_io(void)
69 69
70MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx") 70MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
71 /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */ 71 /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
72 .phys_ram = 0x80000000,
73 .phys_io = 0x48000000, 72 .phys_io = 0x48000000,
74 .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc, 73 .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
75 .boot_params = 0x80000100, 74 .boot_params = 0x80000100,
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c
index f2554469a76a..c3c35d40378a 100644
--- a/arch/arm/mach-omap2/board-h4.c
+++ b/arch/arm/mach-omap2/board-h4.c
@@ -186,7 +186,6 @@ static void __init omap_h4_map_io(void)
186 186
187MACHINE_START(OMAP_H4, "OMAP2420 H4 board") 187MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
188 /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */ 188 /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
189 .phys_ram = 0x80000000,
190 .phys_io = 0x48000000, 189 .phys_io = 0x48000000,
191 .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc, 190 .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
192 .boot_params = 0x80000100, 191 .boot_params = 0x80000100,
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c
index 5a7b873f29b3..7ffd2de8f2f3 100644
--- a/arch/arm/mach-pxa/corgi.c
+++ b/arch/arm/mach-pxa/corgi.c
@@ -342,7 +342,6 @@ static void __init fixup_corgi(struct machine_desc *desc,
342 342
343#ifdef CONFIG_MACH_CORGI 343#ifdef CONFIG_MACH_CORGI
344MACHINE_START(CORGI, "SHARP Corgi") 344MACHINE_START(CORGI, "SHARP Corgi")
345 .phys_ram = 0xa0000000,
346 .phys_io = 0x40000000, 345 .phys_io = 0x40000000,
347 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 346 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
348 .fixup = fixup_corgi, 347 .fixup = fixup_corgi,
@@ -355,7 +354,6 @@ MACHINE_END
355 354
356#ifdef CONFIG_MACH_SHEPHERD 355#ifdef CONFIG_MACH_SHEPHERD
357MACHINE_START(SHEPHERD, "SHARP Shepherd") 356MACHINE_START(SHEPHERD, "SHARP Shepherd")
358 .phys_ram = 0xa0000000,
359 .phys_io = 0x40000000, 357 .phys_io = 0x40000000,
360 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 358 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
361 .fixup = fixup_corgi, 359 .fixup = fixup_corgi,
@@ -368,7 +366,6 @@ MACHINE_END
368 366
369#ifdef CONFIG_MACH_HUSKY 367#ifdef CONFIG_MACH_HUSKY
370MACHINE_START(HUSKY, "SHARP Husky") 368MACHINE_START(HUSKY, "SHARP Husky")
371 .phys_ram = 0xa0000000,
372 .phys_io = 0x40000000, 369 .phys_io = 0x40000000,
373 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 370 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
374 .fixup = fixup_corgi, 371 .fixup = fixup_corgi,
diff --git a/arch/arm/mach-pxa/idp.c b/arch/arm/mach-pxa/idp.c
index 7de159e2ab42..347b9dea24c6 100644
--- a/arch/arm/mach-pxa/idp.c
+++ b/arch/arm/mach-pxa/idp.c
@@ -183,7 +183,6 @@ static void __init idp_map_io(void)
183 183
184MACHINE_START(PXA_IDP, "Vibren PXA255 IDP") 184MACHINE_START(PXA_IDP, "Vibren PXA255 IDP")
185 /* Maintainer: Vibren Technologies */ 185 /* Maintainer: Vibren Technologies */
186 .phys_ram = 0xa0000000,
187 .phys_io = 0x40000000, 186 .phys_io = 0x40000000,
188 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 187 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
189 .map_io = idp_map_io, 188 .map_io = idp_map_io,
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c
index b464bc88ff93..3e26d7ce5bb2 100644
--- a/arch/arm/mach-pxa/lubbock.c
+++ b/arch/arm/mach-pxa/lubbock.c
@@ -437,7 +437,6 @@ static void __init lubbock_map_io(void)
437 437
438MACHINE_START(LUBBOCK, "Intel DBPXA250 Development Platform (aka Lubbock)") 438MACHINE_START(LUBBOCK, "Intel DBPXA250 Development Platform (aka Lubbock)")
439 /* Maintainer: MontaVista Software Inc. */ 439 /* Maintainer: MontaVista Software Inc. */
440 .phys_ram = 0xa0000000,
441 .phys_io = 0x40000000, 440 .phys_io = 0x40000000,
442 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 441 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
443 .map_io = lubbock_map_io, 442 .map_io = lubbock_map_io,
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c
index 8da9d3efe9a0..d5bda60209ec 100644
--- a/arch/arm/mach-pxa/mainstone.c
+++ b/arch/arm/mach-pxa/mainstone.c
@@ -489,7 +489,6 @@ static void __init mainstone_map_io(void)
489 489
490MACHINE_START(MAINSTONE, "Intel HCDDBBVA0 Development Platform (aka Mainstone)") 490MACHINE_START(MAINSTONE, "Intel HCDDBBVA0 Development Platform (aka Mainstone)")
491 /* Maintainer: MontaVista Software Inc. */ 491 /* Maintainer: MontaVista Software Inc. */
492 .phys_ram = 0xa0000000,
493 .phys_io = 0x40000000, 492 .phys_io = 0x40000000,
494 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 493 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
495 .map_io = mainstone_map_io, 494 .map_io = mainstone_map_io,
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
index 663c95005985..911e6ff5a9bd 100644
--- a/arch/arm/mach-pxa/poodle.c
+++ b/arch/arm/mach-pxa/poodle.c
@@ -311,7 +311,6 @@ static void __init fixup_poodle(struct machine_desc *desc,
311} 311}
312 312
313MACHINE_START(POODLE, "SHARP Poodle") 313MACHINE_START(POODLE, "SHARP Poodle")
314 .phys_ram = 0xa0000000,
315 .phys_io = 0x40000000, 314 .phys_io = 0x40000000,
316 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 315 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
317 .fixup = fixup_poodle, 316 .fixup = fixup_poodle,
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
index a9eacc06555f..c094d99ebf56 100644
--- a/arch/arm/mach-pxa/spitz.c
+++ b/arch/arm/mach-pxa/spitz.c
@@ -497,7 +497,6 @@ static void __init fixup_spitz(struct machine_desc *desc,
497 497
498#ifdef CONFIG_MACH_SPITZ 498#ifdef CONFIG_MACH_SPITZ
499MACHINE_START(SPITZ, "SHARP Spitz") 499MACHINE_START(SPITZ, "SHARP Spitz")
500 .phys_ram = 0xa0000000,
501 .phys_io = 0x40000000, 500 .phys_io = 0x40000000,
502 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 501 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
503 .fixup = fixup_spitz, 502 .fixup = fixup_spitz,
@@ -510,7 +509,6 @@ MACHINE_END
510 509
511#ifdef CONFIG_MACH_BORZOI 510#ifdef CONFIG_MACH_BORZOI
512MACHINE_START(BORZOI, "SHARP Borzoi") 511MACHINE_START(BORZOI, "SHARP Borzoi")
513 .phys_ram = 0xa0000000,
514 .phys_io = 0x40000000, 512 .phys_io = 0x40000000,
515 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 513 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
516 .fixup = fixup_spitz, 514 .fixup = fixup_spitz,
@@ -523,7 +521,6 @@ MACHINE_END
523 521
524#ifdef CONFIG_MACH_AKITA 522#ifdef CONFIG_MACH_AKITA
525MACHINE_START(AKITA, "SHARP Akita") 523MACHINE_START(AKITA, "SHARP Akita")
526 .phys_ram = 0xa0000000,
527 .phys_io = 0x40000000, 524 .phys_io = 0x40000000,
528 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 525 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
529 .fixup = fixup_spitz, 526 .fixup = fixup_spitz,
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
index e4f92efc616e..d168286ed470 100644
--- a/arch/arm/mach-pxa/tosa.c
+++ b/arch/arm/mach-pxa/tosa.c
@@ -295,7 +295,6 @@ static void __init fixup_tosa(struct machine_desc *desc,
295} 295}
296 296
297MACHINE_START(TOSA, "SHARP Tosa") 297MACHINE_START(TOSA, "SHARP Tosa")
298 .phys_ram = 0xa0000000,
299 .phys_io = 0x40000000, 298 .phys_io = 0x40000000,
300 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 299 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
301 .fixup = fixup_tosa, 300 .fixup = fixup_tosa,
diff --git a/arch/arm/mach-realview/Kconfig b/arch/arm/mach-realview/Kconfig
index 129976866d47..17f5f4439fe7 100644
--- a/arch/arm/mach-realview/Kconfig
+++ b/arch/arm/mach-realview/Kconfig
@@ -3,7 +3,6 @@ menu "RealView platform type"
3 3
4config MACH_REALVIEW_EB 4config MACH_REALVIEW_EB
5 bool "Support RealView/EB platform" 5 bool "Support RealView/EB platform"
6 default n
7 select ARM_GIC 6 select ARM_GIC
8 help 7 help
9 Include support for the ARM(R) RealView Emulation Baseboard platform. 8 Include support for the ARM(R) RealView Emulation Baseboard platform.
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c
index 112f7592aca9..d4a586e38d5b 100644
--- a/arch/arm/mach-realview/realview_eb.c
+++ b/arch/arm/mach-realview/realview_eb.c
@@ -166,7 +166,6 @@ static void __init realview_eb_init(void)
166 166
167MACHINE_START(REALVIEW_EB, "ARM-RealView EB") 167MACHINE_START(REALVIEW_EB, "ARM-RealView EB")
168 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ 168 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
169 .phys_ram = 0x00000000,
170 .phys_io = REALVIEW_UART0_BASE, 169 .phys_io = REALVIEW_UART0_BASE,
171 .io_pg_offst = (IO_ADDRESS(REALVIEW_UART0_BASE) >> 18) & 0xfffc, 170 .io_pg_offst = (IO_ADDRESS(REALVIEW_UART0_BASE) >> 18) & 0xfffc,
172 .boot_params = 0x00000100, 171 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-rpc/riscpc.c b/arch/arm/mach-rpc/riscpc.c
index 5c4ac1c008a6..208a2b5dba1b 100644
--- a/arch/arm/mach-rpc/riscpc.c
+++ b/arch/arm/mach-rpc/riscpc.c
@@ -177,7 +177,6 @@ extern struct sys_timer ioc_timer;
177 177
178MACHINE_START(RISCPC, "Acorn-RiscPC") 178MACHINE_START(RISCPC, "Acorn-RiscPC")
179 /* Maintainer: Russell King */ 179 /* Maintainer: Russell King */
180 .phys_ram = 0x10000000,
181 .phys_io = 0x03000000, 180 .phys_io = 0x03000000,
182 .io_pg_offst = ((0xe0000000) >> 18) & 0xfffc, 181 .io_pg_offst = ((0xe0000000) >> 18) & 0xfffc,
183 .boot_params = 0x10000100, 182 .boot_params = 0x10000100,
diff --git a/arch/arm/mach-s3c2410/mach-anubis.c b/arch/arm/mach-s3c2410/mach-anubis.c
index 0f81fc0c2f7f..3e327b8e46be 100644
--- a/arch/arm/mach-s3c2410/mach-anubis.c
+++ b/arch/arm/mach-s3c2410/mach-anubis.c
@@ -294,7 +294,6 @@ static void __init anubis_map_io(void)
294 294
295MACHINE_START(ANUBIS, "Simtec-Anubis") 295MACHINE_START(ANUBIS, "Simtec-Anubis")
296 /* Maintainer: Ben Dooks <ben@simtec.co.uk> */ 296 /* Maintainer: Ben Dooks <ben@simtec.co.uk> */
297 .phys_ram = S3C2410_SDRAM_PA,
298 .phys_io = S3C2410_PA_UART, 297 .phys_io = S3C2410_PA_UART,
299 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 298 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
300 .boot_params = S3C2410_SDRAM_PA + 0x100, 299 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c
index 4d962717fdf7..995bb8add331 100644
--- a/arch/arm/mach-s3c2410/mach-bast.c
+++ b/arch/arm/mach-s3c2410/mach-bast.c
@@ -527,7 +527,6 @@ static void __init bast_init(void)
527 527
528MACHINE_START(BAST, "Simtec-BAST") 528MACHINE_START(BAST, "Simtec-BAST")
529 /* Maintainer: Ben Dooks <ben@simtec.co.uk> */ 529 /* Maintainer: Ben Dooks <ben@simtec.co.uk> */
530 .phys_ram = S3C2410_SDRAM_PA,
531 .phys_io = S3C2410_PA_UART, 530 .phys_io = S3C2410_PA_UART,
532 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 531 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
533 .boot_params = S3C2410_SDRAM_PA + 0x100, 532 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c
index 0aa8760598f7..1c316f14ed94 100644
--- a/arch/arm/mach-s3c2410/mach-h1940.c
+++ b/arch/arm/mach-s3c2410/mach-h1940.c
@@ -171,7 +171,6 @@ static void __init h1940_init(void)
171 171
172MACHINE_START(H1940, "IPAQ-H1940") 172MACHINE_START(H1940, "IPAQ-H1940")
173 /* Maintainer: Ben Dooks <ben@fluff.org> */ 173 /* Maintainer: Ben Dooks <ben@fluff.org> */
174 .phys_ram = S3C2410_SDRAM_PA,
175 .phys_io = S3C2410_PA_UART, 174 .phys_io = S3C2410_PA_UART,
176 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 175 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
177 .boot_params = S3C2410_SDRAM_PA + 0x100, 176 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-n30.c b/arch/arm/mach-s3c2410/mach-n30.c
index 378d640ab00b..116ac3169966 100644
--- a/arch/arm/mach-s3c2410/mach-n30.c
+++ b/arch/arm/mach-s3c2410/mach-n30.c
@@ -128,7 +128,6 @@ MACHINE_START(N30, "Acer-N30")
128 /* Maintainer: Christer Weinigel <christer@weinigel.se>, 128 /* Maintainer: Christer Weinigel <christer@weinigel.se>,
129 Ben Dooks <ben-linux@fluff.org> 129 Ben Dooks <ben-linux@fluff.org>
130 */ 130 */
131 .phys_ram = S3C2410_SDRAM_PA,
132 .phys_io = S3C2410_PA_UART, 131 .phys_io = S3C2410_PA_UART,
133 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 132 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
134 .boot_params = S3C2410_SDRAM_PA + 0x100, 133 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-nexcoder.c b/arch/arm/mach-s3c2410/mach-nexcoder.c
index 42b0eeff2e0f..07d09509a626 100644
--- a/arch/arm/mach-s3c2410/mach-nexcoder.c
+++ b/arch/arm/mach-s3c2410/mach-nexcoder.c
@@ -148,7 +148,6 @@ static void __init nexcoder_map_io(void)
148 148
149MACHINE_START(NEXCODER_2440, "NexVision - Nexcoder 2440") 149MACHINE_START(NEXCODER_2440, "NexVision - Nexcoder 2440")
150 /* Maintainer: Guillaume GOURAT <guillaume.gourat@nexvision.tv> */ 150 /* Maintainer: Guillaume GOURAT <guillaume.gourat@nexvision.tv> */
151 .phys_ram = S3C2410_SDRAM_PA,
152 .phys_io = S3C2410_PA_UART, 151 .phys_io = S3C2410_PA_UART,
153 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 152 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
154 .boot_params = S3C2410_SDRAM_PA + 0x100, 153 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-otom.c b/arch/arm/mach-s3c2410/mach-otom.c
index a2eb9ed48fcd..b39daedf93ca 100644
--- a/arch/arm/mach-s3c2410/mach-otom.c
+++ b/arch/arm/mach-s3c2410/mach-otom.c
@@ -116,7 +116,6 @@ static void __init otom11_map_io(void)
116 116
117MACHINE_START(OTOM, "Nex Vision - Otom 1.1") 117MACHINE_START(OTOM, "Nex Vision - Otom 1.1")
118 /* Maintainer: Guillaume GOURAT <guillaume.gourat@nexvision.tv> */ 118 /* Maintainer: Guillaume GOURAT <guillaume.gourat@nexvision.tv> */
119 .phys_ram = S3C2410_SDRAM_PA,
120 .phys_io = S3C2410_PA_UART, 119 .phys_io = S3C2410_PA_UART,
121 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 120 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
122 .boot_params = S3C2410_SDRAM_PA + 0x100, 121 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-rx3715.c b/arch/arm/mach-s3c2410/mach-rx3715.c
index f8d86d1e16b6..0260ed5ab946 100644
--- a/arch/arm/mach-s3c2410/mach-rx3715.c
+++ b/arch/arm/mach-s3c2410/mach-rx3715.c
@@ -205,7 +205,6 @@ static void __init rx3715_init_machine(void)
205 205
206MACHINE_START(RX3715, "IPAQ-RX3715") 206MACHINE_START(RX3715, "IPAQ-RX3715")
207 /* Maintainer: Ben Dooks <ben@fluff.org> */ 207 /* Maintainer: Ben Dooks <ben@fluff.org> */
208 .phys_ram = S3C2410_SDRAM_PA,
209 .phys_io = S3C2410_PA_UART, 208 .phys_io = S3C2410_PA_UART,
210 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 209 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
211 .boot_params = S3C2410_SDRAM_PA + 0x100, 210 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-smdk2410.c b/arch/arm/mach-s3c2410/mach-smdk2410.c
index 2c91965ee1c8..1e76e1fdfcea 100644
--- a/arch/arm/mach-s3c2410/mach-smdk2410.c
+++ b/arch/arm/mach-s3c2410/mach-smdk2410.c
@@ -115,7 +115,6 @@ static void __init smdk2410_init_irq(void)
115MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch 115MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch
116 * to SMDK2410 */ 116 * to SMDK2410 */
117 /* Maintainer: Jonas Dietsche */ 117 /* Maintainer: Jonas Dietsche */
118 .phys_ram = S3C2410_SDRAM_PA,
119 .phys_io = S3C2410_PA_UART, 118 .phys_io = S3C2410_PA_UART,
120 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 119 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
121 .boot_params = S3C2410_SDRAM_PA + 0x100, 120 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-smdk2440.c b/arch/arm/mach-s3c2410/mach-smdk2440.c
index 4e31118533e6..f4315721c3b8 100644
--- a/arch/arm/mach-s3c2410/mach-smdk2440.c
+++ b/arch/arm/mach-s3c2410/mach-smdk2440.c
@@ -216,7 +216,6 @@ static void __init smdk2440_machine_init(void)
216 216
217MACHINE_START(S3C2440, "SMDK2440") 217MACHINE_START(S3C2440, "SMDK2440")
218 /* Maintainer: Ben Dooks <ben@fluff.org> */ 218 /* Maintainer: Ben Dooks <ben@fluff.org> */
219 .phys_ram = S3C2410_SDRAM_PA,
220 .phys_io = S3C2410_PA_UART, 219 .phys_io = S3C2410_PA_UART,
221 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 220 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
222 .boot_params = S3C2410_SDRAM_PA + 0x100, 221 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-s3c2410/mach-vr1000.c b/arch/arm/mach-s3c2410/mach-vr1000.c
index ae7e099bf6c8..785fc9cdcf7c 100644
--- a/arch/arm/mach-s3c2410/mach-vr1000.c
+++ b/arch/arm/mach-s3c2410/mach-vr1000.c
@@ -395,7 +395,6 @@ static void __init vr1000_map_io(void)
395 395
396MACHINE_START(VR1000, "Thorcom-VR1000") 396MACHINE_START(VR1000, "Thorcom-VR1000")
397 /* Maintainer: Ben Dooks <ben@simtec.co.uk> */ 397 /* Maintainer: Ben Dooks <ben@simtec.co.uk> */
398 .phys_ram = S3C2410_SDRAM_PA,
399 .phys_io = S3C2410_PA_UART, 398 .phys_io = S3C2410_PA_UART,
400 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, 399 .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
401 .boot_params = S3C2410_SDRAM_PA + 0x100, 400 .boot_params = S3C2410_SDRAM_PA + 0x100,
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c
index a66ac61233a2..a599bb0d4ab8 100644
--- a/arch/arm/mach-sa1100/assabet.c
+++ b/arch/arm/mach-sa1100/assabet.c
@@ -447,7 +447,6 @@ static void __init assabet_map_io(void)
447 447
448 448
449MACHINE_START(ASSABET, "Intel-Assabet") 449MACHINE_START(ASSABET, "Intel-Assabet")
450 .phys_ram = 0xc0000000,
451 .phys_io = 0x80000000, 450 .phys_io = 0x80000000,
452 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 451 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
453 .boot_params = 0xc0000100, 452 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-sa1100/badge4.c b/arch/arm/mach-sa1100/badge4.c
index edccd5eb06be..f60b7a66dfa0 100644
--- a/arch/arm/mach-sa1100/badge4.c
+++ b/arch/arm/mach-sa1100/badge4.c
@@ -297,7 +297,6 @@ static void __init badge4_map_io(void)
297} 297}
298 298
299MACHINE_START(BADGE4, "Hewlett-Packard Laboratories BadgePAD 4") 299MACHINE_START(BADGE4, "Hewlett-Packard Laboratories BadgePAD 4")
300 .phys_ram = 0xc0000000,
301 .phys_io = 0x80000000, 300 .phys_io = 0x80000000,
302 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 301 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
303 .boot_params = 0xc0000100, 302 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-sa1100/cerf.c b/arch/arm/mach-sa1100/cerf.c
index 508593722bc7..8269a9ef9afe 100644
--- a/arch/arm/mach-sa1100/cerf.c
+++ b/arch/arm/mach-sa1100/cerf.c
@@ -135,7 +135,6 @@ static void __init cerf_init(void)
135 135
136MACHINE_START(CERF, "Intrinsyc CerfBoard/CerfCube") 136MACHINE_START(CERF, "Intrinsyc CerfBoard/CerfCube")
137 /* Maintainer: support@intrinsyc.com */ 137 /* Maintainer: support@intrinsyc.com */
138 .phys_ram = 0xc0000000,
139 .phys_io = 0x80000000, 138 .phys_io = 0x80000000,
140 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 139 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
141 .map_io = cerf_map_io, 140 .map_io = cerf_map_io,
diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
index 522abc036d3a..6888816a1935 100644
--- a/arch/arm/mach-sa1100/collie.c
+++ b/arch/arm/mach-sa1100/collie.c
@@ -191,7 +191,6 @@ static void __init collie_map_io(void)
191} 191}
192 192
193MACHINE_START(COLLIE, "Sharp-Collie") 193MACHINE_START(COLLIE, "Sharp-Collie")
194 .phys_ram = 0xc0000000,
195 .phys_io = 0x80000000, 194 .phys_io = 0x80000000,
196 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 195 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
197 .map_io = collie_map_io, 196 .map_io = collie_map_io,
diff --git a/arch/arm/mach-sa1100/h3600.c b/arch/arm/mach-sa1100/h3600.c
index e8352b7f74b0..b04d92271020 100644
--- a/arch/arm/mach-sa1100/h3600.c
+++ b/arch/arm/mach-sa1100/h3600.c
@@ -392,7 +392,6 @@ static void __init h3100_map_io(void)
392} 392}
393 393
394MACHINE_START(H3100, "Compaq iPAQ H3100") 394MACHINE_START(H3100, "Compaq iPAQ H3100")
395 .phys_ram = 0xc0000000,
396 .phys_io = 0x80000000, 395 .phys_io = 0x80000000,
397 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 396 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
398 .boot_params = 0xc0000100, 397 .boot_params = 0xc0000100,
@@ -510,7 +509,6 @@ static void __init h3600_map_io(void)
510} 509}
511 510
512MACHINE_START(H3600, "Compaq iPAQ H3600") 511MACHINE_START(H3600, "Compaq iPAQ H3600")
513 .phys_ram = 0xc0000000,
514 .phys_io = 0x80000000, 512 .phys_io = 0x80000000,
515 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 513 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
516 .boot_params = 0xc0000100, 514 .boot_params = 0xc0000100,
@@ -897,7 +895,6 @@ static void __init h3800_map_io(void)
897} 895}
898 896
899MACHINE_START(H3800, "Compaq iPAQ H3800") 897MACHINE_START(H3800, "Compaq iPAQ H3800")
900 .phys_ram = 0xc0000000,
901 .phys_io = 0x80000000, 898 .phys_io = 0x80000000,
902 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 899 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
903 .boot_params = 0xc0000100, 900 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-sa1100/hackkit.c b/arch/arm/mach-sa1100/hackkit.c
index c922e043c424..046b213efd5b 100644
--- a/arch/arm/mach-sa1100/hackkit.c
+++ b/arch/arm/mach-sa1100/hackkit.c
@@ -195,7 +195,6 @@ static void __init hackkit_init(void)
195 */ 195 */
196 196
197MACHINE_START(HACKKIT, "HackKit Cpu Board") 197MACHINE_START(HACKKIT, "HackKit Cpu Board")
198 .phys_ram = 0xc0000000,
199 .phys_io = 0x80000000, 198 .phys_io = 0x80000000,
200 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 199 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
201 .boot_params = 0xc0000100, 200 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-sa1100/jornada720.c b/arch/arm/mach-sa1100/jornada720.c
index 2f671cc3cb99..17f5a43acdb7 100644
--- a/arch/arm/mach-sa1100/jornada720.c
+++ b/arch/arm/mach-sa1100/jornada720.c
@@ -173,7 +173,6 @@ static void __init jornada720_mach_init(void)
173 173
174MACHINE_START(JORNADA720, "HP Jornada 720") 174MACHINE_START(JORNADA720, "HP Jornada 720")
175 /* Maintainer: Michael Gernoth <michael@gernoth.net> */ 175 /* Maintainer: Michael Gernoth <michael@gernoth.net> */
176 .phys_ram = 0xc0000000,
177 .phys_io = 0x80000000, 176 .phys_io = 0x80000000,
178 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 177 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
179 .boot_params = 0xc0000100, 178 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-sa1100/lart.c b/arch/arm/mach-sa1100/lart.c
index 8c9e3dd52942..07d3a696ae7f 100644
--- a/arch/arm/mach-sa1100/lart.c
+++ b/arch/arm/mach-sa1100/lart.c
@@ -60,7 +60,6 @@ static void __init lart_map_io(void)
60} 60}
61 61
62MACHINE_START(LART, "LART") 62MACHINE_START(LART, "LART")
63 .phys_ram = 0xc0000000,
64 .phys_io = 0x80000000, 63 .phys_io = 0x80000000,
65 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 64 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
66 .boot_params = 0xc0000100, 65 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-sa1100/pleb.c b/arch/arm/mach-sa1100/pleb.c
index 58c18f9e9b7b..0709ebab531c 100644
--- a/arch/arm/mach-sa1100/pleb.c
+++ b/arch/arm/mach-sa1100/pleb.c
@@ -146,7 +146,6 @@ static void __init pleb_map_io(void)
146} 146}
147 147
148MACHINE_START(PLEB, "PLEB") 148MACHINE_START(PLEB, "PLEB")
149 .phys_ram = 0xc0000000,
150 .phys_io = 0x80000000, 149 .phys_io = 0x80000000,
151 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 150 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
152 .map_io = pleb_map_io, 151 .map_io = pleb_map_io,
diff --git a/arch/arm/mach-sa1100/shannon.c b/arch/arm/mach-sa1100/shannon.c
index 7482288278d9..5aafe0b56992 100644
--- a/arch/arm/mach-sa1100/shannon.c
+++ b/arch/arm/mach-sa1100/shannon.c
@@ -83,7 +83,6 @@ static void __init shannon_map_io(void)
83} 83}
84 84
85MACHINE_START(SHANNON, "Shannon (AKA: Tuxscreen)") 85MACHINE_START(SHANNON, "Shannon (AKA: Tuxscreen)")
86 .phys_ram = 0xc0000000,
87 .phys_io = 0x80000000, 86 .phys_io = 0x80000000,
88 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 87 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
89 .boot_params = 0xc0000100, 88 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-sa1100/simpad.c b/arch/arm/mach-sa1100/simpad.c
index 439ddc9b06d6..d2c23b2c34d1 100644
--- a/arch/arm/mach-sa1100/simpad.c
+++ b/arch/arm/mach-sa1100/simpad.c
@@ -229,7 +229,6 @@ arch_initcall(simpad_init);
229 229
230MACHINE_START(SIMPAD, "Simpad") 230MACHINE_START(SIMPAD, "Simpad")
231 /* Maintainer: Holger Freyther */ 231 /* Maintainer: Holger Freyther */
232 .phys_ram = 0xc0000000,
233 .phys_io = 0x80000000, 232 .phys_io = 0x80000000,
234 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, 233 .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
235 .boot_params = 0xc0000100, 234 .boot_params = 0xc0000100,
diff --git a/arch/arm/mach-shark/core.c b/arch/arm/mach-shark/core.c
index 2d428b6dbb58..877600e212dd 100644
--- a/arch/arm/mach-shark/core.c
+++ b/arch/arm/mach-shark/core.c
@@ -111,7 +111,6 @@ static struct sys_timer shark_timer = {
111 111
112MACHINE_START(SHARK, "Shark") 112MACHINE_START(SHARK, "Shark")
113 /* Maintainer: Alexander Schulz */ 113 /* Maintainer: Alexander Schulz */
114 .phys_ram = 0x08000000,
115 .phys_io = 0x40000000, 114 .phys_io = 0x40000000,
116 .io_pg_offst = ((0xe0000000) >> 18) & 0xfffc, 115 .io_pg_offst = ((0xe0000000) >> 18) & 0xfffc,
117 .boot_params = 0x08003000, 116 .boot_params = 0x08003000,
diff --git a/arch/arm/mach-versatile/Kconfig b/arch/arm/mach-versatile/Kconfig
index 8d787f4c78e6..95096afd5271 100644
--- a/arch/arm/mach-versatile/Kconfig
+++ b/arch/arm/mach-versatile/Kconfig
@@ -9,7 +9,6 @@ config ARCH_VERSATILE_PB
9 9
10config MACH_VERSATILE_AB 10config MACH_VERSATILE_AB
11 bool "Support Versatile/AB platform" 11 bool "Support Versatile/AB platform"
12 default n
13 help 12 help
14 Include support for the ARM(R) Versatile/AP platform. 13 Include support for the ARM(R) Versatile/AP platform.
15 14
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c
index 90023745b23a..9ebbe808b41d 100644
--- a/arch/arm/mach-versatile/core.c
+++ b/arch/arm/mach-versatile/core.c
@@ -35,6 +35,7 @@
35#include <asm/leds.h> 35#include <asm/leds.h>
36#include <asm/hardware/arm_timer.h> 36#include <asm/hardware/arm_timer.h>
37#include <asm/hardware/icst307.h> 37#include <asm/hardware/icst307.h>
38#include <asm/hardware/vic.h>
38 39
39#include <asm/mach/arch.h> 40#include <asm/mach/arch.h>
40#include <asm/mach/flash.h> 41#include <asm/mach/flash.h>
@@ -56,24 +57,6 @@
56#define VA_VIC_BASE __io_address(VERSATILE_VIC_BASE) 57#define VA_VIC_BASE __io_address(VERSATILE_VIC_BASE)
57#define VA_SIC_BASE __io_address(VERSATILE_SIC_BASE) 58#define VA_SIC_BASE __io_address(VERSATILE_SIC_BASE)
58 59
59static void vic_mask_irq(unsigned int irq)
60{
61 irq -= IRQ_VIC_START;
62 writel(1 << irq, VA_VIC_BASE + VIC_IRQ_ENABLE_CLEAR);
63}
64
65static void vic_unmask_irq(unsigned int irq)
66{
67 irq -= IRQ_VIC_START;
68 writel(1 << irq, VA_VIC_BASE + VIC_IRQ_ENABLE);
69}
70
71static struct irqchip vic_chip = {
72 .ack = vic_mask_irq,
73 .mask = vic_mask_irq,
74 .unmask = vic_unmask_irq,
75};
76
77static void sic_mask_irq(unsigned int irq) 60static void sic_mask_irq(unsigned int irq)
78{ 61{
79 irq -= IRQ_SIC_START; 62 irq -= IRQ_SIC_START;
@@ -127,43 +110,12 @@ sic_handle_irq(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
127 110
128void __init versatile_init_irq(void) 111void __init versatile_init_irq(void)
129{ 112{
130 unsigned int i, value; 113 unsigned int i;
131
132 /* Disable all interrupts initially. */
133 114
134 writel(0, VA_VIC_BASE + VIC_INT_SELECT); 115 vic_init(VA_VIC_BASE, ~(1 << 31));
135 writel(0, VA_VIC_BASE + VIC_IRQ_ENABLE);
136 writel(~0, VA_VIC_BASE + VIC_IRQ_ENABLE_CLEAR);
137 writel(0, VA_VIC_BASE + VIC_IRQ_STATUS);
138 writel(0, VA_VIC_BASE + VIC_ITCR);
139 writel(~0, VA_VIC_BASE + VIC_IRQ_SOFT_CLEAR);
140
141 /*
142 * Make sure we clear all existing interrupts
143 */
144 writel(0, VA_VIC_BASE + VIC_VECT_ADDR);
145 for (i = 0; i < 19; i++) {
146 value = readl(VA_VIC_BASE + VIC_VECT_ADDR);
147 writel(value, VA_VIC_BASE + VIC_VECT_ADDR);
148 }
149
150 for (i = 0; i < 16; i++) {
151 value = readl(VA_VIC_BASE + VIC_VECT_CNTL0 + (i * 4));
152 writel(value | VICVectCntl_Enable | i, VA_VIC_BASE + VIC_VECT_CNTL0 + (i * 4));
153 }
154
155 writel(32, VA_VIC_BASE + VIC_DEF_VECT_ADDR);
156
157 for (i = IRQ_VIC_START; i <= IRQ_VIC_END; i++) {
158 if (i != IRQ_VICSOURCE31) {
159 set_irq_chip(i, &vic_chip);
160 set_irq_handler(i, do_level_IRQ);
161 set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
162 }
163 }
164 116
165 set_irq_handler(IRQ_VICSOURCE31, sic_handle_irq); 117 set_irq_handler(IRQ_VICSOURCE31, sic_handle_irq);
166 vic_unmask_irq(IRQ_VICSOURCE31); 118 enable_irq(IRQ_VICSOURCE31);
167 119
168 /* Do second interrupt controller */ 120 /* Do second interrupt controller */
169 writel(~0, VA_SIC_BASE + SIC_IRQ_ENABLE_CLEAR); 121 writel(~0, VA_SIC_BASE + SIC_IRQ_ENABLE_CLEAR);
@@ -877,7 +829,7 @@ static unsigned long versatile_gettimeoffset(void)
877 ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff; 829 ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff;
878 do { 830 do {
879 ticks1 = ticks2; 831 ticks1 = ticks2;
880 status = __raw_readl(VA_IC_BASE + VIC_IRQ_RAW_STATUS); 832 status = __raw_readl(VA_IC_BASE + VIC_RAW_STATUS);
881 ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff; 833 ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff;
882 } while (ticks2 > ticks1); 834 } while (ticks2 > ticks1);
883 835
diff --git a/arch/arm/mach-versatile/versatile_ab.c b/arch/arm/mach-versatile/versatile_ab.c
index e74c8a2fbb95..1eb596782078 100644
--- a/arch/arm/mach-versatile/versatile_ab.c
+++ b/arch/arm/mach-versatile/versatile_ab.c
@@ -36,7 +36,6 @@
36 36
37MACHINE_START(VERSATILE_AB, "ARM-Versatile AB") 37MACHINE_START(VERSATILE_AB, "ARM-Versatile AB")
38 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ 38 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
39 .phys_ram = 0x00000000,
40 .phys_io = 0x101f1000, 39 .phys_io = 0x101f1000,
41 .io_pg_offst = ((0xf11f1000) >> 18) & 0xfffc, 40 .io_pg_offst = ((0xf11f1000) >> 18) & 0xfffc,
42 .boot_params = 0x00000100, 41 .boot_params = 0x00000100,
diff --git a/arch/arm/mach-versatile/versatile_pb.c b/arch/arm/mach-versatile/versatile_pb.c
index 22d5ca07f75d..f17ab4fb548a 100644
--- a/arch/arm/mach-versatile/versatile_pb.c
+++ b/arch/arm/mach-versatile/versatile_pb.c
@@ -100,7 +100,6 @@ arch_initcall(versatile_pb_init);
100 100
101MACHINE_START(VERSATILE_PB, "ARM-Versatile PB") 101MACHINE_START(VERSATILE_PB, "ARM-Versatile PB")
102 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ 102 /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
103 .phys_ram = 0x00000000,
104 .phys_io = 0x101f1000, 103 .phys_io = 0x101f1000,
105 .io_pg_offst = ((0xf11f1000) >> 18) & 0xfffc, 104 .io_pg_offst = ((0xf11f1000) >> 18) & 0xfffc,
106 .boot_params = 0x00000100, 105 .boot_params = 0x00000100,
diff --git a/arch/arm/nwfpe/fpa11.h b/arch/arm/nwfpe/fpa11.h
index da4c616b6c49..28cd79a451d3 100644
--- a/arch/arm/nwfpe/fpa11.h
+++ b/arch/arm/nwfpe/fpa11.h
@@ -62,7 +62,7 @@ typedef union tagFPREG {
62#else 62#else
63 u32 padding[3]; 63 u32 padding[3];
64#endif 64#endif
65} FPREG; 65} __attribute__ ((packed,aligned(4))) FPREG;
66 66
67/* 67/*
68 * FPA11 device model. 68 * FPA11 device model.
@@ -89,7 +89,7 @@ typedef struct tagFPA11 {
89 so we can use it to detect whether this 89 so we can use it to detect whether this
90 instance of the emulator needs to be 90 instance of the emulator needs to be
91 initialised. */ 91 initialised. */
92} FPA11; 92} __attribute__ ((packed,aligned(4))) FPA11;
93 93
94extern int8 SetRoundingMode(const unsigned int); 94extern int8 SetRoundingMode(const unsigned int);
95extern int8 SetRoundingPrecision(const unsigned int); 95extern int8 SetRoundingPrecision(const unsigned int);
diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig
index 9693e9b4ffd1..0887bb2a2551 100644
--- a/arch/arm/plat-omap/Kconfig
+++ b/arch/arm/plat-omap/Kconfig
@@ -22,7 +22,6 @@ comment "OMAP Feature Selections"
22config OMAP_RESET_CLOCKS 22config OMAP_RESET_CLOCKS
23 bool "Reset unused clocks during boot" 23 bool "Reset unused clocks during boot"
24 depends on ARCH_OMAP 24 depends on ARCH_OMAP
25 default n
26 help 25 help
27 Say Y if you want to reset unused clocks during boot. 26 Say Y if you want to reset unused clocks during boot.
28 This option saves power, but assumes all drivers are 27 This option saves power, but assumes all drivers are
@@ -44,7 +43,6 @@ config OMAP_MUX
44config OMAP_MUX_DEBUG 43config OMAP_MUX_DEBUG
45 bool "Multiplexing debug output" 44 bool "Multiplexing debug output"
46 depends on OMAP_MUX 45 depends on OMAP_MUX
47 default n
48 help 46 help
49 Makes the multiplexing functions print out a lot of debug info. 47 Makes the multiplexing functions print out a lot of debug info.
50 This is useful if you want to find out the correct values of the 48 This is useful if you want to find out the correct values of the
@@ -93,7 +91,6 @@ config OMAP_32K_TIMER_HZ
93 91
94config OMAP_DM_TIMER 92config OMAP_DM_TIMER
95 bool "Use dual-mode timer" 93 bool "Use dual-mode timer"
96 default n
97 depends on ARCH_OMAP16XX 94 depends on ARCH_OMAP16XX
98 help 95 help
99 Select this option if you want to use OMAP Dual-Mode timers. 96 Select this option if you want to use OMAP Dual-Mode timers.
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index d5d0df7f04fc..cbde675bc95c 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -702,6 +702,15 @@ config PHYSICAL_START
702 702
703 Don't change this unless you know what you are doing. 703 Don't change this unless you know what you are doing.
704 704
705config HOTPLUG_CPU
706 bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
707 depends on SMP && HOTPLUG && EXPERIMENTAL
708 ---help---
709 Say Y here to experiment with turning CPUs off and on. CPUs
710 can be controlled through /sys/devices/system/cpu.
711
712 Say N.
713
705endmenu 714endmenu
706 715
707 716
@@ -988,15 +997,6 @@ config SCx200
988 This support is also available as a module. If compiled as a 997 This support is also available as a module. If compiled as a
989 module, it will be called scx200. 998 module, it will be called scx200.
990 999
991config HOTPLUG_CPU
992 bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
993 depends on SMP && HOTPLUG && EXPERIMENTAL
994 ---help---
995 Say Y here to experiment with turning CPUs off and on. CPUs
996 can be controlled through /sys/devices/system/cpu.
997
998 Say N.
999
1000source "drivers/pcmcia/Kconfig" 1000source "drivers/pcmcia/Kconfig"
1001 1001
1002source "drivers/pci/hotplug/Kconfig" 1002source "drivers/pci/hotplug/Kconfig"
diff --git a/arch/i386/Makefile b/arch/i386/Makefile
index d3c0409d201c..bd2d53a9dd2b 100644
--- a/arch/i386/Makefile
+++ b/arch/i386/Makefile
@@ -42,9 +42,9 @@ include $(srctree)/arch/i386/Makefile.cpu
42cflags-$(CONFIG_REGPARM) += $(shell if [ $(call cc-version) -ge 0300 ] ; then \ 42cflags-$(CONFIG_REGPARM) += $(shell if [ $(call cc-version) -ge 0300 ] ; then \
43 echo "-mregparm=3"; fi ;) 43 echo "-mregparm=3"; fi ;)
44 44
45# Disable unit-at-a-time mode, it makes gcc use a lot more stack 45# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
46# due to the lack of sharing of stacklots. 46# a lot more stack due to the lack of sharing of stacklots:
47CFLAGS += $(call cc-option,-fno-unit-at-a-time) 47CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;)
48 48
49CFLAGS += $(cflags-y) 49CFLAGS += $(cflags-y)
50 50
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c
index b9f0030a2ebb..0aaebf3e1cfa 100644
--- a/arch/i386/kernel/traps.c
+++ b/arch/i386/kernel/traps.c
@@ -112,33 +112,38 @@ static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
112 p < (void *)tinfo + THREAD_SIZE - 3; 112 p < (void *)tinfo + THREAD_SIZE - 3;
113} 113}
114 114
115static void print_addr_and_symbol(unsigned long addr, char *log_lvl)
116{
117 printk(log_lvl);
118 printk(" [<%08lx>] ", addr);
119 print_symbol("%s", addr);
120 printk("\n");
121}
122
115static inline unsigned long print_context_stack(struct thread_info *tinfo, 123static inline unsigned long print_context_stack(struct thread_info *tinfo,
116 unsigned long *stack, unsigned long ebp) 124 unsigned long *stack, unsigned long ebp,
125 char *log_lvl)
117{ 126{
118 unsigned long addr; 127 unsigned long addr;
119 128
120#ifdef CONFIG_FRAME_POINTER 129#ifdef CONFIG_FRAME_POINTER
121 while (valid_stack_ptr(tinfo, (void *)ebp)) { 130 while (valid_stack_ptr(tinfo, (void *)ebp)) {
122 addr = *(unsigned long *)(ebp + 4); 131 addr = *(unsigned long *)(ebp + 4);
123 printk(KERN_EMERG " [<%08lx>] ", addr); 132 print_addr_and_symbol(addr, log_lvl);
124 print_symbol("%s", addr);
125 printk("\n");
126 ebp = *(unsigned long *)ebp; 133 ebp = *(unsigned long *)ebp;
127 } 134 }
128#else 135#else
129 while (valid_stack_ptr(tinfo, stack)) { 136 while (valid_stack_ptr(tinfo, stack)) {
130 addr = *stack++; 137 addr = *stack++;
131 if (__kernel_text_address(addr)) { 138 if (__kernel_text_address(addr))
132 printk(KERN_EMERG " [<%08lx>]", addr); 139 print_addr_and_symbol(addr, log_lvl);
133 print_symbol(" %s", addr);
134 printk("\n");
135 }
136 } 140 }
137#endif 141#endif
138 return ebp; 142 return ebp;
139} 143}
140 144
141void show_trace(struct task_struct *task, unsigned long * stack) 145static void show_trace_log_lvl(struct task_struct *task,
146 unsigned long *stack, char *log_lvl)
142{ 147{
143 unsigned long ebp; 148 unsigned long ebp;
144 149
@@ -157,7 +162,7 @@ void show_trace(struct task_struct *task, unsigned long * stack)
157 struct thread_info *context; 162 struct thread_info *context;
158 context = (struct thread_info *) 163 context = (struct thread_info *)
159 ((unsigned long)stack & (~(THREAD_SIZE - 1))); 164 ((unsigned long)stack & (~(THREAD_SIZE - 1)));
160 ebp = print_context_stack(context, stack, ebp); 165 ebp = print_context_stack(context, stack, ebp, log_lvl);
161 stack = (unsigned long*)context->previous_esp; 166 stack = (unsigned long*)context->previous_esp;
162 if (!stack) 167 if (!stack)
163 break; 168 break;
@@ -165,7 +170,13 @@ void show_trace(struct task_struct *task, unsigned long * stack)
165 } 170 }
166} 171}
167 172
168void show_stack(struct task_struct *task, unsigned long *esp) 173void show_trace(struct task_struct *task, unsigned long * stack)
174{
175 show_trace_log_lvl(task, stack, "");
176}
177
178static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp,
179 char *log_lvl)
169{ 180{
170 unsigned long *stack; 181 unsigned long *stack;
171 int i; 182 int i;
@@ -178,16 +189,26 @@ void show_stack(struct task_struct *task, unsigned long *esp)
178 } 189 }
179 190
180 stack = esp; 191 stack = esp;
181 printk(KERN_EMERG); 192 printk(log_lvl);
182 for(i = 0; i < kstack_depth_to_print; i++) { 193 for(i = 0; i < kstack_depth_to_print; i++) {
183 if (kstack_end(stack)) 194 if (kstack_end(stack))
184 break; 195 break;
185 if (i && ((i % 8) == 0)) 196 if (i && ((i % 8) == 0)) {
186 printk("\n" KERN_EMERG " "); 197 printk("\n");
198 printk(log_lvl);
199 printk(" ");
200 }
187 printk("%08lx ", *stack++); 201 printk("%08lx ", *stack++);
188 } 202 }
189 printk("\n" KERN_EMERG "Call Trace:\n"); 203 printk("\n");
190 show_trace(task, esp); 204 printk(log_lvl);
205 printk("Call Trace:\n");
206 show_trace_log_lvl(task, esp, log_lvl);
207}
208
209void show_stack(struct task_struct *task, unsigned long *esp)
210{
211 show_stack_log_lvl(task, esp, "");
191} 212}
192 213
193/* 214/*
@@ -238,7 +259,7 @@ void show_registers(struct pt_regs *regs)
238 u8 __user *eip; 259 u8 __user *eip;
239 260
240 printk("\n" KERN_EMERG "Stack: "); 261 printk("\n" KERN_EMERG "Stack: ");
241 show_stack(NULL, (unsigned long*)esp); 262 show_stack_log_lvl(NULL, (unsigned long *)esp, KERN_EMERG);
242 263
243 printk(KERN_EMERG "Code: "); 264 printk(KERN_EMERG "Code: ");
244 265
diff --git a/arch/i386/pci/fixup.c b/arch/i386/pci/fixup.c
index 65f67070db64..83c3645ccc43 100644
--- a/arch/i386/pci/fixup.c
+++ b/arch/i386/pci/fixup.c
@@ -449,3 +449,19 @@ static void __devinit pci_post_fixup_toshiba_ohci1394(struct pci_dev *dev)
449} 449}
450DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_TI, 0x8032, 450DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_TI, 0x8032,
451 pci_post_fixup_toshiba_ohci1394); 451 pci_post_fixup_toshiba_ohci1394);
452
453
454/*
455 * Prevent the BIOS trapping accesses to the Cyrix CS5530A video device
456 * configuration space.
457 */
458static void __devinit pci_early_fixup_cyrix_5530(struct pci_dev *dev)
459{
460 u8 r;
461 /* clear 'F4 Video Configuration Trap' bit */
462 pci_read_config_byte(dev, 0x42, &r);
463 r &= 0xfd;
464 pci_write_config_byte(dev, 0x42, r);
465}
466DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY,
467 pci_early_fixup_cyrix_5530);
diff --git a/arch/ia64/configs/gensparse_defconfig b/arch/ia64/configs/gensparse_defconfig
index 80f8663bc6d9..1d07d8072ec2 100644
--- a/arch/ia64/configs/gensparse_defconfig
+++ b/arch/ia64/configs/gensparse_defconfig
@@ -701,6 +701,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
701CONFIG_SERIAL_SGI_L1_CONSOLE=y 701CONFIG_SERIAL_SGI_L1_CONSOLE=y
702# CONFIG_SERIAL_JSM is not set 702# CONFIG_SERIAL_JSM is not set
703CONFIG_SERIAL_SGI_IOC4=y 703CONFIG_SERIAL_SGI_IOC4=y
704CONFIG_SERIAL_SGI_IOC3=y
704CONFIG_UNIX98_PTYS=y 705CONFIG_UNIX98_PTYS=y
705CONFIG_LEGACY_PTYS=y 706CONFIG_LEGACY_PTYS=y
706CONFIG_LEGACY_PTY_COUNT=256 707CONFIG_LEGACY_PTY_COUNT=256
@@ -1046,6 +1047,7 @@ CONFIG_INFINIBAND_IPOIB=m
1046# SN Devices 1047# SN Devices
1047# 1048#
1048CONFIG_SGI_IOC4=y 1049CONFIG_SGI_IOC4=y
1050CONFIG_SGI_IOC3=y
1049 1051
1050# 1052#
1051# File systems 1053# File systems
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig
index ff8bb3770c9d..3cb503b659e6 100644
--- a/arch/ia64/configs/sn2_defconfig
+++ b/arch/ia64/configs/sn2_defconfig
@@ -659,6 +659,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
659CONFIG_SERIAL_SGI_L1_CONSOLE=y 659CONFIG_SERIAL_SGI_L1_CONSOLE=y
660# CONFIG_SERIAL_JSM is not set 660# CONFIG_SERIAL_JSM is not set
661CONFIG_SERIAL_SGI_IOC4=y 661CONFIG_SERIAL_SGI_IOC4=y
662CONFIG_SERIAL_SGI_IOC3=y
662CONFIG_UNIX98_PTYS=y 663CONFIG_UNIX98_PTYS=y
663CONFIG_LEGACY_PTYS=y 664CONFIG_LEGACY_PTYS=y
664CONFIG_LEGACY_PTY_COUNT=256 665CONFIG_LEGACY_PTY_COUNT=256
@@ -899,6 +900,7 @@ CONFIG_INFINIBAND_SRP=m
899# SN Devices 900# SN Devices
900# 901#
901CONFIG_SGI_IOC4=y 902CONFIG_SGI_IOC4=y
903CONFIG_SGI_IOC3=y
902 904
903# 905#
904# File systems 906# File systems
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c
index 7a1033d8e00f..c5ca2dc5d428 100644
--- a/arch/s390/crypto/aes_s390.c
+++ b/arch/s390/crypto/aes_s390.c
@@ -114,80 +114,108 @@ static unsigned int aes_encrypt_ecb(const struct cipher_desc *desc, u8 *out,
114 const u8 *in, unsigned int nbytes) 114 const u8 *in, unsigned int nbytes)
115{ 115{
116 struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm); 116 struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm);
117 int ret;
118
119 /* only use complete blocks */
120 nbytes &= ~(AES_BLOCK_SIZE - 1);
117 121
118 switch (sctx->key_len) { 122 switch (sctx->key_len) {
119 case 16: 123 case 16:
120 crypt_s390_km(KM_AES_128_ENCRYPT, &sctx->key, out, in, nbytes); 124 ret = crypt_s390_km(KM_AES_128_ENCRYPT, &sctx->key, out, in, nbytes);
125 BUG_ON((ret < 0) || (ret != nbytes));
121 break; 126 break;
122 case 24: 127 case 24:
123 crypt_s390_km(KM_AES_192_ENCRYPT, &sctx->key, out, in, nbytes); 128 ret = crypt_s390_km(KM_AES_192_ENCRYPT, &sctx->key, out, in, nbytes);
129 BUG_ON((ret < 0) || (ret != nbytes));
124 break; 130 break;
125 case 32: 131 case 32:
126 crypt_s390_km(KM_AES_256_ENCRYPT, &sctx->key, out, in, nbytes); 132 ret = crypt_s390_km(KM_AES_256_ENCRYPT, &sctx->key, out, in, nbytes);
133 BUG_ON((ret < 0) || (ret != nbytes));
127 break; 134 break;
128 } 135 }
129 return nbytes & ~(AES_BLOCK_SIZE - 1); 136 return nbytes;
130} 137}
131 138
132static unsigned int aes_decrypt_ecb(const struct cipher_desc *desc, u8 *out, 139static unsigned int aes_decrypt_ecb(const struct cipher_desc *desc, u8 *out,
133 const u8 *in, unsigned int nbytes) 140 const u8 *in, unsigned int nbytes)
134{ 141{
135 struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm); 142 struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm);
143 int ret;
144
145 /* only use complete blocks */
146 nbytes &= ~(AES_BLOCK_SIZE - 1);
136 147
137 switch (sctx->key_len) { 148 switch (sctx->key_len) {
138 case 16: 149 case 16:
139 crypt_s390_km(KM_AES_128_DECRYPT, &sctx->key, out, in, nbytes); 150 ret = crypt_s390_km(KM_AES_128_DECRYPT, &sctx->key, out, in, nbytes);
151 BUG_ON((ret < 0) || (ret != nbytes));
140 break; 152 break;
141 case 24: 153 case 24:
142 crypt_s390_km(KM_AES_192_DECRYPT, &sctx->key, out, in, nbytes); 154 ret = crypt_s390_km(KM_AES_192_DECRYPT, &sctx->key, out, in, nbytes);
155 BUG_ON((ret < 0) || (ret != nbytes));
143 break; 156 break;
144 case 32: 157 case 32:
145 crypt_s390_km(KM_AES_256_DECRYPT, &sctx->key, out, in, nbytes); 158 ret = crypt_s390_km(KM_AES_256_DECRYPT, &sctx->key, out, in, nbytes);
159 BUG_ON((ret < 0) || (ret != nbytes));
146 break; 160 break;
147 } 161 }
148 return nbytes & ~(AES_BLOCK_SIZE - 1); 162 return nbytes;
149} 163}
150 164
151static unsigned int aes_encrypt_cbc(const struct cipher_desc *desc, u8 *out, 165static unsigned int aes_encrypt_cbc(const struct cipher_desc *desc, u8 *out,
152 const u8 *in, unsigned int nbytes) 166 const u8 *in, unsigned int nbytes)
153{ 167{
154 struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm); 168 struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm);
169 int ret;
170
171 /* only use complete blocks */
172 nbytes &= ~(AES_BLOCK_SIZE - 1);
155 173
156 memcpy(&sctx->iv, desc->info, AES_BLOCK_SIZE); 174 memcpy(&sctx->iv, desc->info, AES_BLOCK_SIZE);
157 switch (sctx->key_len) { 175 switch (sctx->key_len) {
158 case 16: 176 case 16:
159 crypt_s390_kmc(KMC_AES_128_ENCRYPT, &sctx->iv, out, in, nbytes); 177 ret = crypt_s390_kmc(KMC_AES_128_ENCRYPT, &sctx->iv, out, in, nbytes);
178 BUG_ON((ret < 0) || (ret != nbytes));
160 break; 179 break;
161 case 24: 180 case 24:
162 crypt_s390_kmc(KMC_AES_192_ENCRYPT, &sctx->iv, out, in, nbytes); 181 ret = crypt_s390_kmc(KMC_AES_192_ENCRYPT, &sctx->iv, out, in, nbytes);
182 BUG_ON((ret < 0) || (ret != nbytes));
163 break; 183 break;
164 case 32: 184 case 32:
165 crypt_s390_kmc(KMC_AES_256_ENCRYPT, &sctx->iv, out, in, nbytes); 185 ret = crypt_s390_kmc(KMC_AES_256_ENCRYPT, &sctx->iv, out, in, nbytes);
186 BUG_ON((ret < 0) || (ret != nbytes));
166 break; 187 break;
167 } 188 }
168 memcpy(desc->info, &sctx->iv, AES_BLOCK_SIZE); 189 memcpy(desc->info, &sctx->iv, AES_BLOCK_SIZE);
169 190
170 return nbytes & ~(AES_BLOCK_SIZE - 1); 191 return nbytes;
171} 192}
172 193
173static unsigned int aes_decrypt_cbc(const struct cipher_desc *desc, u8 *out, 194static unsigned int aes_decrypt_cbc(const struct cipher_desc *desc, u8 *out,
174 const u8 *in, unsigned int nbytes) 195 const u8 *in, unsigned int nbytes)
175{ 196{
176 struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm); 197 struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm);
198 int ret;
199
200 /* only use complete blocks */
201 nbytes &= ~(AES_BLOCK_SIZE - 1);
177 202
178 memcpy(&sctx->iv, desc->info, AES_BLOCK_SIZE); 203 memcpy(&sctx->iv, desc->info, AES_BLOCK_SIZE);
179 switch (sctx->key_len) { 204 switch (sctx->key_len) {
180 case 16: 205 case 16:
181 crypt_s390_kmc(KMC_AES_128_DECRYPT, &sctx->iv, out, in, nbytes); 206 ret = crypt_s390_kmc(KMC_AES_128_DECRYPT, &sctx->iv, out, in, nbytes);
207 BUG_ON((ret < 0) || (ret != nbytes));
182 break; 208 break;
183 case 24: 209 case 24:
184 crypt_s390_kmc(KMC_AES_192_DECRYPT, &sctx->iv, out, in, nbytes); 210 ret = crypt_s390_kmc(KMC_AES_192_DECRYPT, &sctx->iv, out, in, nbytes);
211 BUG_ON((ret < 0) || (ret != nbytes));
185 break; 212 break;
186 case 32: 213 case 32:
187 crypt_s390_kmc(KMC_AES_256_DECRYPT, &sctx->iv, out, in, nbytes); 214 ret = crypt_s390_kmc(KMC_AES_256_DECRYPT, &sctx->iv, out, in, nbytes);
215 BUG_ON((ret < 0) || (ret != nbytes));
188 break; 216 break;
189 } 217 }
190 return nbytes & ~(AES_BLOCK_SIZE - 1); 218 return nbytes;
191} 219}
192 220
193 221
diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c
index a38bb2a3eef6..e3c37aa0a199 100644
--- a/arch/s390/crypto/des_s390.c
+++ b/arch/s390/crypto/des_s390.c
@@ -15,10 +15,8 @@
15 */ 15 */
16#include <linux/init.h> 16#include <linux/init.h>
17#include <linux/module.h> 17#include <linux/module.h>
18#include <linux/mm.h>
19#include <linux/errno.h>
20#include <asm/scatterlist.h>
21#include <linux/crypto.h> 18#include <linux/crypto.h>
19
22#include "crypt_s390.h" 20#include "crypt_s390.h"
23#include "crypto_des.h" 21#include "crypto_des.h"
24 22
@@ -46,38 +44,92 @@ struct crypt_s390_des3_192_ctx {
46 u8 key[DES3_192_KEY_SIZE]; 44 u8 key[DES3_192_KEY_SIZE];
47}; 45};
48 46
49static int 47static int des_setkey(void *ctx, const u8 *key, unsigned int keylen,
50des_setkey(void *ctx, const u8 *key, unsigned int keylen, u32 *flags) 48 u32 *flags)
51{ 49{
52 struct crypt_s390_des_ctx *dctx; 50 struct crypt_s390_des_ctx *dctx = ctx;
53 int ret; 51 int ret;
54 52
55 dctx = ctx; 53 /* test if key is valid (not a weak key) */
56 //test if key is valid (not a weak key)
57 ret = crypto_des_check_key(key, keylen, flags); 54 ret = crypto_des_check_key(key, keylen, flags);
58 if (ret == 0){ 55 if (ret == 0)
59 memcpy(dctx->key, key, keylen); 56 memcpy(dctx->key, key, keylen);
60 }
61 return ret; 57 return ret;
62} 58}
63 59
60static void des_encrypt(void *ctx, u8 *out, const u8 *in)
61{
62 struct crypt_s390_des_ctx *dctx = ctx;
63
64 crypt_s390_km(KM_DEA_ENCRYPT, dctx->key, out, in, DES_BLOCK_SIZE);
65}
66
67static void des_decrypt(void *ctx, u8 *out, const u8 *in)
68{
69 struct crypt_s390_des_ctx *dctx = ctx;
70
71 crypt_s390_km(KM_DEA_DECRYPT, dctx->key, out, in, DES_BLOCK_SIZE);
72}
73
74static unsigned int des_encrypt_ecb(const struct cipher_desc *desc, u8 *out,
75 const u8 *in, unsigned int nbytes)
76{
77 struct crypt_s390_des_ctx *sctx = crypto_tfm_ctx(desc->tfm);
78 int ret;
79
80 /* only use complete blocks */
81 nbytes &= ~(DES_BLOCK_SIZE - 1);
82 ret = crypt_s390_km(KM_DEA_ENCRYPT, sctx->key, out, in, nbytes);
83 BUG_ON((ret < 0) || (ret != nbytes));
84
85 return nbytes;
86}
64 87
65static void 88static unsigned int des_decrypt_ecb(const struct cipher_desc *desc, u8 *out,
66des_encrypt(void *ctx, u8 *dst, const u8 *src) 89 const u8 *in, unsigned int nbytes)
67{ 90{
68 struct crypt_s390_des_ctx *dctx; 91 struct crypt_s390_des_ctx *sctx = crypto_tfm_ctx(desc->tfm);
92 int ret;
93
94 /* only use complete blocks */
95 nbytes &= ~(DES_BLOCK_SIZE - 1);
96 ret = crypt_s390_km(KM_DEA_DECRYPT, sctx->key, out, in, nbytes);
97 BUG_ON((ret < 0) || (ret != nbytes));
69 98
70 dctx = ctx; 99 return nbytes;
71 crypt_s390_km(KM_DEA_ENCRYPT, dctx->key, dst, src, DES_BLOCK_SIZE);
72} 100}
73 101
74static void 102static unsigned int des_encrypt_cbc(const struct cipher_desc *desc, u8 *out,
75des_decrypt(void *ctx, u8 *dst, const u8 *src) 103 const u8 *in, unsigned int nbytes)
76{ 104{
77 struct crypt_s390_des_ctx *dctx; 105 struct crypt_s390_des_ctx *sctx = crypto_tfm_ctx(desc->tfm);
106 int ret;
78 107
79 dctx = ctx; 108 /* only use complete blocks */
80 crypt_s390_km(KM_DEA_DECRYPT, dctx->key, dst, src, DES_BLOCK_SIZE); 109 nbytes &= ~(DES_BLOCK_SIZE - 1);
110
111 memcpy(sctx->iv, desc->info, DES_BLOCK_SIZE);
112 ret = crypt_s390_kmc(KMC_DEA_ENCRYPT, &sctx->iv, out, in, nbytes);
113 BUG_ON((ret < 0) || (ret != nbytes));
114
115 memcpy(desc->info, sctx->iv, DES_BLOCK_SIZE);
116 return nbytes;
117}
118
119static unsigned int des_decrypt_cbc(const struct cipher_desc *desc, u8 *out,
120 const u8 *in, unsigned int nbytes)
121{
122 struct crypt_s390_des_ctx *sctx = crypto_tfm_ctx(desc->tfm);
123 int ret;
124
125 /* only use complete blocks */
126 nbytes &= ~(DES_BLOCK_SIZE - 1);
127
128 memcpy(&sctx->iv, desc->info, DES_BLOCK_SIZE);
129 ret = crypt_s390_kmc(KMC_DEA_DECRYPT, &sctx->iv, out, in, nbytes);
130 BUG_ON((ret < 0) || (ret != nbytes));
131
132 return nbytes;
81} 133}
82 134
83static struct crypto_alg des_alg = { 135static struct crypto_alg des_alg = {
@@ -87,12 +139,19 @@ static struct crypto_alg des_alg = {
87 .cra_ctxsize = sizeof(struct crypt_s390_des_ctx), 139 .cra_ctxsize = sizeof(struct crypt_s390_des_ctx),
88 .cra_module = THIS_MODULE, 140 .cra_module = THIS_MODULE,
89 .cra_list = LIST_HEAD_INIT(des_alg.cra_list), 141 .cra_list = LIST_HEAD_INIT(des_alg.cra_list),
90 .cra_u = { .cipher = { 142 .cra_u = {
91 .cia_min_keysize = DES_KEY_SIZE, 143 .cipher = {
92 .cia_max_keysize = DES_KEY_SIZE, 144 .cia_min_keysize = DES_KEY_SIZE,
93 .cia_setkey = des_setkey, 145 .cia_max_keysize = DES_KEY_SIZE,
94 .cia_encrypt = des_encrypt, 146 .cia_setkey = des_setkey,
95 .cia_decrypt = des_decrypt } } 147 .cia_encrypt = des_encrypt,
148 .cia_decrypt = des_decrypt,
149 .cia_encrypt_ecb = des_encrypt_ecb,
150 .cia_decrypt_ecb = des_decrypt_ecb,
151 .cia_encrypt_cbc = des_encrypt_cbc,
152 .cia_decrypt_cbc = des_decrypt_cbc,
153 }
154 }
96}; 155};
97 156
98/* 157/*
@@ -107,20 +166,18 @@ static struct crypto_alg des_alg = {
107 * Implementers MUST reject keys that exhibit this property. 166 * Implementers MUST reject keys that exhibit this property.
108 * 167 *
109 */ 168 */
110static int 169static int des3_128_setkey(void *ctx, const u8 *key, unsigned int keylen,
111des3_128_setkey(void *ctx, const u8 *key, unsigned int keylen, u32 *flags) 170 u32 *flags)
112{ 171{
113 int i, ret; 172 int i, ret;
114 struct crypt_s390_des3_128_ctx *dctx; 173 struct crypt_s390_des3_128_ctx *dctx = ctx;
115 const u8* temp_key = key; 174 const u8* temp_key = key;
116 175
117 dctx = ctx;
118 if (!(memcmp(key, &key[DES_KEY_SIZE], DES_KEY_SIZE))) { 176 if (!(memcmp(key, &key[DES_KEY_SIZE], DES_KEY_SIZE))) {
119
120 *flags |= CRYPTO_TFM_RES_BAD_KEY_SCHED; 177 *flags |= CRYPTO_TFM_RES_BAD_KEY_SCHED;
121 return -EINVAL; 178 return -EINVAL;
122 } 179 }
123 for (i = 0; i < 2; i++, temp_key += DES_KEY_SIZE) { 180 for (i = 0; i < 2; i++, temp_key += DES_KEY_SIZE) {
124 ret = crypto_des_check_key(temp_key, DES_KEY_SIZE, flags); 181 ret = crypto_des_check_key(temp_key, DES_KEY_SIZE, flags);
125 if (ret < 0) 182 if (ret < 0)
126 return ret; 183 return ret;
@@ -129,24 +186,85 @@ des3_128_setkey(void *ctx, const u8 *key, unsigned int keylen, u32 *flags)
129 return 0; 186 return 0;
130} 187}
131 188
132static void 189static void des3_128_encrypt(void *ctx, u8 *dst, const u8 *src)
133des3_128_encrypt(void *ctx, u8 *dst, const u8 *src)
134{ 190{
135 struct crypt_s390_des3_128_ctx *dctx; 191 struct crypt_s390_des3_128_ctx *dctx = ctx;
136 192
137 dctx = ctx;
138 crypt_s390_km(KM_TDEA_128_ENCRYPT, dctx->key, dst, (void*)src, 193 crypt_s390_km(KM_TDEA_128_ENCRYPT, dctx->key, dst, (void*)src,
139 DES3_128_BLOCK_SIZE); 194 DES3_128_BLOCK_SIZE);
140} 195}
141 196
142static void 197static void des3_128_decrypt(void *ctx, u8 *dst, const u8 *src)
143des3_128_decrypt(void *ctx, u8 *dst, const u8 *src)
144{ 198{
145 struct crypt_s390_des3_128_ctx *dctx; 199 struct crypt_s390_des3_128_ctx *dctx = ctx;
146 200
147 dctx = ctx;
148 crypt_s390_km(KM_TDEA_128_DECRYPT, dctx->key, dst, (void*)src, 201 crypt_s390_km(KM_TDEA_128_DECRYPT, dctx->key, dst, (void*)src,
149 DES3_128_BLOCK_SIZE); 202 DES3_128_BLOCK_SIZE);
203}
204
205static unsigned int des3_128_encrypt_ecb(const struct cipher_desc *desc,
206 u8 *out, const u8 *in,
207 unsigned int nbytes)
208{
209 struct crypt_s390_des3_128_ctx *sctx = crypto_tfm_ctx(desc->tfm);
210 int ret;
211
212 /* only use complete blocks */
213 nbytes &= ~(DES3_128_BLOCK_SIZE - 1);
214 ret = crypt_s390_km(KM_TDEA_128_ENCRYPT, sctx->key, out, in, nbytes);
215 BUG_ON((ret < 0) || (ret != nbytes));
216
217 return nbytes;
218}
219
220static unsigned int des3_128_decrypt_ecb(const struct cipher_desc *desc,
221 u8 *out, const u8 *in,
222 unsigned int nbytes)
223{
224 struct crypt_s390_des3_128_ctx *sctx = crypto_tfm_ctx(desc->tfm);
225 int ret;
226
227 /* only use complete blocks */
228 nbytes &= ~(DES3_128_BLOCK_SIZE - 1);
229 ret = crypt_s390_km(KM_TDEA_128_DECRYPT, sctx->key, out, in, nbytes);
230 BUG_ON((ret < 0) || (ret != nbytes));
231
232 return nbytes;
233}
234
235static unsigned int des3_128_encrypt_cbc(const struct cipher_desc *desc,
236 u8 *out, const u8 *in,
237 unsigned int nbytes)
238{
239 struct crypt_s390_des3_128_ctx *sctx = crypto_tfm_ctx(desc->tfm);
240 int ret;
241
242 /* only use complete blocks */
243 nbytes &= ~(DES3_128_BLOCK_SIZE - 1);
244
245 memcpy(sctx->iv, desc->info, DES3_128_BLOCK_SIZE);
246 ret = crypt_s390_kmc(KMC_TDEA_128_ENCRYPT, &sctx->iv, out, in, nbytes);
247 BUG_ON((ret < 0) || (ret != nbytes));
248
249 memcpy(desc->info, sctx->iv, DES3_128_BLOCK_SIZE);
250 return nbytes;
251}
252
253static unsigned int des3_128_decrypt_cbc(const struct cipher_desc *desc,
254 u8 *out, const u8 *in,
255 unsigned int nbytes)
256{
257 struct crypt_s390_des3_128_ctx *sctx = crypto_tfm_ctx(desc->tfm);
258 int ret;
259
260 /* only use complete blocks */
261 nbytes &= ~(DES3_128_BLOCK_SIZE - 1);
262
263 memcpy(&sctx->iv, desc->info, DES3_128_BLOCK_SIZE);
264 ret = crypt_s390_kmc(KMC_TDEA_128_DECRYPT, &sctx->iv, out, in, nbytes);
265 BUG_ON((ret < 0) || (ret != nbytes));
266
267 return nbytes;
150} 268}
151 269
152static struct crypto_alg des3_128_alg = { 270static struct crypto_alg des3_128_alg = {
@@ -156,12 +274,19 @@ static struct crypto_alg des3_128_alg = {
156 .cra_ctxsize = sizeof(struct crypt_s390_des3_128_ctx), 274 .cra_ctxsize = sizeof(struct crypt_s390_des3_128_ctx),
157 .cra_module = THIS_MODULE, 275 .cra_module = THIS_MODULE,
158 .cra_list = LIST_HEAD_INIT(des3_128_alg.cra_list), 276 .cra_list = LIST_HEAD_INIT(des3_128_alg.cra_list),
159 .cra_u = { .cipher = { 277 .cra_u = {
160 .cia_min_keysize = DES3_128_KEY_SIZE, 278 .cipher = {
161 .cia_max_keysize = DES3_128_KEY_SIZE, 279 .cia_min_keysize = DES3_128_KEY_SIZE,
162 .cia_setkey = des3_128_setkey, 280 .cia_max_keysize = DES3_128_KEY_SIZE,
163 .cia_encrypt = des3_128_encrypt, 281 .cia_setkey = des3_128_setkey,
164 .cia_decrypt = des3_128_decrypt } } 282 .cia_encrypt = des3_128_encrypt,
283 .cia_decrypt = des3_128_decrypt,
284 .cia_encrypt_ecb = des3_128_encrypt_ecb,
285 .cia_decrypt_ecb = des3_128_decrypt_ecb,
286 .cia_encrypt_cbc = des3_128_encrypt_cbc,
287 .cia_decrypt_cbc = des3_128_decrypt_cbc,
288 }
289 }
165}; 290};
166 291
167/* 292/*
@@ -177,50 +302,108 @@ static struct crypto_alg des3_128_alg = {
177 * property. 302 * property.
178 * 303 *
179 */ 304 */
180static int 305static int des3_192_setkey(void *ctx, const u8 *key, unsigned int keylen,
181des3_192_setkey(void *ctx, const u8 *key, unsigned int keylen, u32 *flags) 306 u32 *flags)
182{ 307{
183 int i, ret; 308 int i, ret;
184 struct crypt_s390_des3_192_ctx *dctx; 309 struct crypt_s390_des3_192_ctx *dctx = ctx;
185 const u8* temp_key; 310 const u8* temp_key = key;
186 311
187 dctx = ctx;
188 temp_key = key;
189 if (!(memcmp(key, &key[DES_KEY_SIZE], DES_KEY_SIZE) && 312 if (!(memcmp(key, &key[DES_KEY_SIZE], DES_KEY_SIZE) &&
190 memcmp(&key[DES_KEY_SIZE], &key[DES_KEY_SIZE * 2], 313 memcmp(&key[DES_KEY_SIZE], &key[DES_KEY_SIZE * 2],
191 DES_KEY_SIZE))) { 314 DES_KEY_SIZE))) {
192 315
193 *flags |= CRYPTO_TFM_RES_BAD_KEY_SCHED; 316 *flags |= CRYPTO_TFM_RES_BAD_KEY_SCHED;
194 return -EINVAL; 317 return -EINVAL;
195 } 318 }
196 for (i = 0; i < 3; i++, temp_key += DES_KEY_SIZE) { 319 for (i = 0; i < 3; i++, temp_key += DES_KEY_SIZE) {
197 ret = crypto_des_check_key(temp_key, DES_KEY_SIZE, flags); 320 ret = crypto_des_check_key(temp_key, DES_KEY_SIZE, flags);
198 if (ret < 0){ 321 if (ret < 0)
199 return ret; 322 return ret;
200 }
201 } 323 }
202 memcpy(dctx->key, key, keylen); 324 memcpy(dctx->key, key, keylen);
203 return 0; 325 return 0;
204} 326}
205 327
206static void 328static void des3_192_encrypt(void *ctx, u8 *dst, const u8 *src)
207des3_192_encrypt(void *ctx, u8 *dst, const u8 *src)
208{ 329{
209 struct crypt_s390_des3_192_ctx *dctx; 330 struct crypt_s390_des3_192_ctx *dctx = ctx;
210 331
211 dctx = ctx;
212 crypt_s390_km(KM_TDEA_192_ENCRYPT, dctx->key, dst, (void*)src, 332 crypt_s390_km(KM_TDEA_192_ENCRYPT, dctx->key, dst, (void*)src,
213 DES3_192_BLOCK_SIZE); 333 DES3_192_BLOCK_SIZE);
214} 334}
215 335
216static void 336static void des3_192_decrypt(void *ctx, u8 *dst, const u8 *src)
217des3_192_decrypt(void *ctx, u8 *dst, const u8 *src)
218{ 337{
219 struct crypt_s390_des3_192_ctx *dctx; 338 struct crypt_s390_des3_192_ctx *dctx = ctx;
220 339
221 dctx = ctx;
222 crypt_s390_km(KM_TDEA_192_DECRYPT, dctx->key, dst, (void*)src, 340 crypt_s390_km(KM_TDEA_192_DECRYPT, dctx->key, dst, (void*)src,
223 DES3_192_BLOCK_SIZE); 341 DES3_192_BLOCK_SIZE);
342}
343
344static unsigned int des3_192_encrypt_ecb(const struct cipher_desc *desc,
345 u8 *out, const u8 *in,
346 unsigned int nbytes)
347{
348 struct crypt_s390_des3_192_ctx *sctx = crypto_tfm_ctx(desc->tfm);
349 int ret;
350
351 /* only use complete blocks */
352 nbytes &= ~(DES3_192_BLOCK_SIZE - 1);
353 ret = crypt_s390_km(KM_TDEA_192_ENCRYPT, sctx->key, out, in, nbytes);
354 BUG_ON((ret < 0) || (ret != nbytes));
355
356 return nbytes;
357}
358
359static unsigned int des3_192_decrypt_ecb(const struct cipher_desc *desc,
360 u8 *out, const u8 *in,
361 unsigned int nbytes)
362{
363 struct crypt_s390_des3_192_ctx *sctx = crypto_tfm_ctx(desc->tfm);
364 int ret;
365
366 /* only use complete blocks */
367 nbytes &= ~(DES3_192_BLOCK_SIZE - 1);
368 ret = crypt_s390_km(KM_TDEA_192_DECRYPT, sctx->key, out, in, nbytes);
369 BUG_ON((ret < 0) || (ret != nbytes));
370
371 return nbytes;
372}
373
374static unsigned int des3_192_encrypt_cbc(const struct cipher_desc *desc,
375 u8 *out, const u8 *in,
376 unsigned int nbytes)
377{
378 struct crypt_s390_des3_192_ctx *sctx = crypto_tfm_ctx(desc->tfm);
379 int ret;
380
381 /* only use complete blocks */
382 nbytes &= ~(DES3_192_BLOCK_SIZE - 1);
383
384 memcpy(sctx->iv, desc->info, DES3_192_BLOCK_SIZE);
385 ret = crypt_s390_kmc(KMC_TDEA_192_ENCRYPT, &sctx->iv, out, in, nbytes);
386 BUG_ON((ret < 0) || (ret != nbytes));
387
388 memcpy(desc->info, sctx->iv, DES3_192_BLOCK_SIZE);
389 return nbytes;
390}
391
392static unsigned int des3_192_decrypt_cbc(const struct cipher_desc *desc,
393 u8 *out, const u8 *in,
394 unsigned int nbytes)
395{
396 struct crypt_s390_des3_192_ctx *sctx = crypto_tfm_ctx(desc->tfm);
397 int ret;
398
399 /* only use complete blocks */
400 nbytes &= ~(DES3_192_BLOCK_SIZE - 1);
401
402 memcpy(&sctx->iv, desc->info, DES3_192_BLOCK_SIZE);
403 ret = crypt_s390_kmc(KMC_TDEA_192_DECRYPT, &sctx->iv, out, in, nbytes);
404 BUG_ON((ret < 0) || (ret != nbytes));
405
406 return nbytes;
224} 407}
225 408
226static struct crypto_alg des3_192_alg = { 409static struct crypto_alg des3_192_alg = {
@@ -230,44 +413,43 @@ static struct crypto_alg des3_192_alg = {
230 .cra_ctxsize = sizeof(struct crypt_s390_des3_192_ctx), 413 .cra_ctxsize = sizeof(struct crypt_s390_des3_192_ctx),
231 .cra_module = THIS_MODULE, 414 .cra_module = THIS_MODULE,
232 .cra_list = LIST_HEAD_INIT(des3_192_alg.cra_list), 415 .cra_list = LIST_HEAD_INIT(des3_192_alg.cra_list),
233 .cra_u = { .cipher = { 416 .cra_u = {
234 .cia_min_keysize = DES3_192_KEY_SIZE, 417 .cipher = {
235 .cia_max_keysize = DES3_192_KEY_SIZE, 418 .cia_min_keysize = DES3_192_KEY_SIZE,
236 .cia_setkey = des3_192_setkey, 419 .cia_max_keysize = DES3_192_KEY_SIZE,
237 .cia_encrypt = des3_192_encrypt, 420 .cia_setkey = des3_192_setkey,
238 .cia_decrypt = des3_192_decrypt } } 421 .cia_encrypt = des3_192_encrypt,
422 .cia_decrypt = des3_192_decrypt,
423 .cia_encrypt_ecb = des3_192_encrypt_ecb,
424 .cia_decrypt_ecb = des3_192_decrypt_ecb,
425 .cia_encrypt_cbc = des3_192_encrypt_cbc,
426 .cia_decrypt_cbc = des3_192_decrypt_cbc,
427 }
428 }
239}; 429};
240 430
241 431static int init(void)
242
243static int
244init(void)
245{ 432{
246 int ret; 433 int ret = 0;
247 434
248 if (!crypt_s390_func_available(KM_DEA_ENCRYPT) || 435 if (!crypt_s390_func_available(KM_DEA_ENCRYPT) ||
249 !crypt_s390_func_available(KM_TDEA_128_ENCRYPT) || 436 !crypt_s390_func_available(KM_TDEA_128_ENCRYPT) ||
250 !crypt_s390_func_available(KM_TDEA_192_ENCRYPT)){ 437 !crypt_s390_func_available(KM_TDEA_192_ENCRYPT))
251 return -ENOSYS; 438 return -ENOSYS;
252 }
253 439
254 ret = 0; 440 ret |= (crypto_register_alg(&des_alg) == 0) ? 0:1;
255 ret |= (crypto_register_alg(&des_alg) == 0)? 0:1; 441 ret |= (crypto_register_alg(&des3_128_alg) == 0) ? 0:2;
256 ret |= (crypto_register_alg(&des3_128_alg) == 0)? 0:2; 442 ret |= (crypto_register_alg(&des3_192_alg) == 0) ? 0:4;
257 ret |= (crypto_register_alg(&des3_192_alg) == 0)? 0:4; 443 if (ret) {
258 if (ret){
259 crypto_unregister_alg(&des3_192_alg); 444 crypto_unregister_alg(&des3_192_alg);
260 crypto_unregister_alg(&des3_128_alg); 445 crypto_unregister_alg(&des3_128_alg);
261 crypto_unregister_alg(&des_alg); 446 crypto_unregister_alg(&des_alg);
262 return -EEXIST; 447 return -EEXIST;
263 } 448 }
264
265 printk(KERN_INFO "crypt_s390: des_s390 loaded.\n");
266 return 0; 449 return 0;
267} 450}
268 451
269static void __exit 452static void __exit fini(void)
270fini(void)
271{ 453{
272 crypto_unregister_alg(&des3_192_alg); 454 crypto_unregister_alg(&des3_192_alg);
273 crypto_unregister_alg(&des3_128_alg); 455 crypto_unregister_alg(&des3_128_alg);
diff --git a/arch/s390/crypto/sha256_s390.c b/arch/s390/crypto/sha256_s390.c
index b75bdbd476c7..1ec5e92b3454 100644
--- a/arch/s390/crypto/sha256_s390.c
+++ b/arch/s390/crypto/sha256_s390.c
@@ -51,6 +51,7 @@ static void sha256_update(void *ctx, const u8 *data, unsigned int len)
51{ 51{
52 struct s390_sha256_ctx *sctx = ctx; 52 struct s390_sha256_ctx *sctx = ctx;
53 unsigned int index; 53 unsigned int index;
54 int ret;
54 55
55 /* how much is already in the buffer? */ 56 /* how much is already in the buffer? */
56 index = sctx->count / 8 & 0x3f; 57 index = sctx->count / 8 & 0x3f;
@@ -58,15 +59,29 @@ static void sha256_update(void *ctx, const u8 *data, unsigned int len)
58 /* update message bit length */ 59 /* update message bit length */
59 sctx->count += len * 8; 60 sctx->count += len * 8;
60 61
61 /* process one block */ 62 if ((index + len) < SHA256_BLOCK_SIZE)
62 if ((index + len) >= SHA256_BLOCK_SIZE) { 63 goto store;
64
65 /* process one stored block */
66 if (index) {
63 memcpy(sctx->buf + index, data, SHA256_BLOCK_SIZE - index); 67 memcpy(sctx->buf + index, data, SHA256_BLOCK_SIZE - index);
64 crypt_s390_kimd(KIMD_SHA_256, sctx->state, sctx->buf, 68 ret = crypt_s390_kimd(KIMD_SHA_256, sctx->state, sctx->buf,
65 SHA256_BLOCK_SIZE); 69 SHA256_BLOCK_SIZE);
70 BUG_ON(ret != SHA256_BLOCK_SIZE);
66 data += SHA256_BLOCK_SIZE - index; 71 data += SHA256_BLOCK_SIZE - index;
67 len -= SHA256_BLOCK_SIZE - index; 72 len -= SHA256_BLOCK_SIZE - index;
68 } 73 }
69 74
75 /* process as many blocks as possible */
76 if (len >= SHA256_BLOCK_SIZE) {
77 ret = crypt_s390_kimd(KIMD_SHA_256, sctx->state, data,
78 len & ~(SHA256_BLOCK_SIZE - 1));
79 BUG_ON(ret != (len & ~(SHA256_BLOCK_SIZE - 1)));
80 data += ret;
81 len -= ret;
82 }
83
84store:
70 /* anything left? */ 85 /* anything left? */
71 if (len) 86 if (len)
72 memcpy(sctx->buf + index , data, len); 87 memcpy(sctx->buf + index , data, len);
@@ -119,9 +134,9 @@ static struct crypto_alg alg = {
119 .cra_list = LIST_HEAD_INIT(alg.cra_list), 134 .cra_list = LIST_HEAD_INIT(alg.cra_list),
120 .cra_u = { .digest = { 135 .cra_u = { .digest = {
121 .dia_digestsize = SHA256_DIGEST_SIZE, 136 .dia_digestsize = SHA256_DIGEST_SIZE,
122 .dia_init = sha256_init, 137 .dia_init = sha256_init,
123 .dia_update = sha256_update, 138 .dia_update = sha256_update,
124 .dia_final = sha256_final } } 139 .dia_final = sha256_final } }
125}; 140};
126 141
127static int init(void) 142static int init(void)
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index 2ff90a1a1056..008c74526fd3 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -58,10 +58,18 @@ asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
58 */ 58 */
59unsigned long thread_saved_pc(struct task_struct *tsk) 59unsigned long thread_saved_pc(struct task_struct *tsk)
60{ 60{
61 struct stack_frame *sf; 61 struct stack_frame *sf, *low, *high;
62 62
63 sf = (struct stack_frame *) tsk->thread.ksp; 63 if (!tsk || !task_stack_page(tsk))
64 sf = (struct stack_frame *) sf->back_chain; 64 return 0;
65 low = task_stack_page(tsk);
66 high = (struct stack_frame *) task_pt_regs(tsk);
67 sf = (struct stack_frame *) (tsk->thread.ksp & PSW_ADDR_INSN);
68 if (sf <= low || sf > high)
69 return 0;
70 sf = (struct stack_frame *) (sf->back_chain & PSW_ADDR_INSN);
71 if (sf <= low || sf > high)
72 return 0;
65 return sf->gprs[8]; 73 return sf->gprs[8];
66} 74}
67 75
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index b03847d100d9..de8784267473 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -268,7 +268,7 @@ static void do_machine_restart_nonsmp(char * __unused)
268 reipl_diag(); 268 reipl_diag();
269 269
270 if (MACHINE_IS_VM) 270 if (MACHINE_IS_VM)
271 cpcmd ("IPL", NULL, 0); 271 cpcmd ("IPL", NULL, 0, NULL);
272 else 272 else
273 reipl (0x10000 | S390_lowcore.ipl_device); 273 reipl (0x10000 | S390_lowcore.ipl_device);
274} 274}
@@ -276,14 +276,14 @@ static void do_machine_restart_nonsmp(char * __unused)
276static void do_machine_halt_nonsmp(void) 276static void do_machine_halt_nonsmp(void)
277{ 277{
278 if (MACHINE_IS_VM && strlen(vmhalt_cmd) > 0) 278 if (MACHINE_IS_VM && strlen(vmhalt_cmd) > 0)
279 cpcmd(vmhalt_cmd, NULL, 0); 279 cpcmd(vmhalt_cmd, NULL, 0, NULL);
280 signal_processor(smp_processor_id(), sigp_stop_and_store_status); 280 signal_processor(smp_processor_id(), sigp_stop_and_store_status);
281} 281}
282 282
283static void do_machine_power_off_nonsmp(void) 283static void do_machine_power_off_nonsmp(void)
284{ 284{
285 if (MACHINE_IS_VM && strlen(vmpoff_cmd) > 0) 285 if (MACHINE_IS_VM && strlen(vmpoff_cmd) > 0)
286 cpcmd(vmpoff_cmd, NULL, 0); 286 cpcmd(vmpoff_cmd, NULL, 0, NULL);
287 signal_processor(smp_processor_id(), sigp_stop_and_store_status); 287 signal_processor(smp_processor_id(), sigp_stop_and_store_status);
288} 288}
289 289
@@ -315,6 +315,11 @@ void machine_power_off(void)
315 _machine_power_off(); 315 _machine_power_off();
316} 316}
317 317
318/*
319 * Dummy power off function.
320 */
321void (*pm_power_off)(void) = machine_power_off;
322
318static void __init 323static void __init
319add_memory_hole(unsigned long start, unsigned long end) 324add_memory_hole(unsigned long start, unsigned long end)
320{ 325{
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index b0d8ca8e5eeb..7c0fe152a111 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -214,7 +214,7 @@ void account_ticks(struct pt_regs *regs)
214#endif 214#endif
215 215
216#ifdef CONFIG_VIRT_CPU_ACCOUNTING 216#ifdef CONFIG_VIRT_CPU_ACCOUNTING
217 account_user_vtime(current); 217 account_tick_vtime(current);
218#else 218#else
219 while (ticks--) 219 while (ticks--)
220 update_process_times(user_mode(regs)); 220 update_process_times(user_mode(regs));
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c
index 22a895ecb7a4..dfe6f0856617 100644
--- a/arch/s390/kernel/vtime.c
+++ b/arch/s390/kernel/vtime.c
@@ -32,7 +32,7 @@ DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer);
32 * Update process times based on virtual cpu times stored by entry.S 32 * Update process times based on virtual cpu times stored by entry.S
33 * to the lowcore fields user_timer, system_timer & steal_clock. 33 * to the lowcore fields user_timer, system_timer & steal_clock.
34 */ 34 */
35void account_user_vtime(struct task_struct *tsk) 35void account_tick_vtime(struct task_struct *tsk)
36{ 36{
37 cputime_t cputime; 37 cputime_t cputime;
38 __u64 timer, clock; 38 __u64 timer, clock;
@@ -76,6 +76,31 @@ void account_user_vtime(struct task_struct *tsk)
76 * Update process times based on virtual cpu times stored by entry.S 76 * Update process times based on virtual cpu times stored by entry.S
77 * to the lowcore fields user_timer, system_timer & steal_clock. 77 * to the lowcore fields user_timer, system_timer & steal_clock.
78 */ 78 */
79void account_vtime(struct task_struct *tsk)
80{
81 cputime_t cputime;
82 __u64 timer;
83
84 timer = S390_lowcore.last_update_timer;
85 asm volatile (" STPT %0" /* Store current cpu timer value */
86 : "=m" (S390_lowcore.last_update_timer) );
87 S390_lowcore.system_timer += timer - S390_lowcore.last_update_timer;
88
89 cputime = S390_lowcore.user_timer >> 12;
90 S390_lowcore.user_timer -= cputime << 12;
91 S390_lowcore.steal_clock -= cputime << 12;
92 account_user_time(tsk, cputime);
93
94 cputime = S390_lowcore.system_timer >> 12;
95 S390_lowcore.system_timer -= cputime << 12;
96 S390_lowcore.steal_clock -= cputime << 12;
97 account_system_time(tsk, 0, cputime);
98}
99
100/*
101 * Update process times based on virtual cpu times stored by entry.S
102 * to the lowcore fields user_timer, system_timer & steal_clock.
103 */
79void account_system_vtime(struct task_struct *tsk) 104void account_system_vtime(struct task_struct *tsk)
80{ 105{
81 cputime_t cputime; 106 cputime_t cputime;
diff --git a/arch/s390/lib/Makefile b/arch/s390/lib/Makefile
index d9b97b3c597f..f20b51ff1d86 100644
--- a/arch/s390/lib/Makefile
+++ b/arch/s390/lib/Makefile
@@ -4,5 +4,6 @@
4 4
5EXTRA_AFLAGS := -traditional 5EXTRA_AFLAGS := -traditional
6 6
7lib-y += delay.o string.o spinlock.o 7lib-y += delay.o string.o
8lib-y += $(if $(CONFIG_64BIT),uaccess64.o,uaccess.o) 8lib-y += $(if $(CONFIG_64BIT),uaccess64.o,uaccess.o)
9lib-$(CONFIG_SMP) += spinlock.o \ No newline at end of file
diff --git a/arch/s390/lib/spinlock.c b/arch/s390/lib/spinlock.c
index 68d79c502081..60f80a4eed4e 100644
--- a/arch/s390/lib/spinlock.c
+++ b/arch/s390/lib/spinlock.c
@@ -13,7 +13,6 @@
13#include <linux/init.h> 13#include <linux/init.h>
14#include <asm/io.h> 14#include <asm/io.h>
15 15
16atomic_t spin_retry_counter;
17int spin_retry = 1000; 16int spin_retry = 1000;
18 17
19/** 18/**
@@ -45,7 +44,6 @@ _raw_spin_lock_wait(raw_spinlock_t *lp, unsigned int pc)
45 _diag44(); 44 _diag44();
46 count = spin_retry; 45 count = spin_retry;
47 } 46 }
48 atomic_inc(&spin_retry_counter);
49 if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0) 47 if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0)
50 return; 48 return;
51 } 49 }
@@ -58,7 +56,6 @@ _raw_spin_trylock_retry(raw_spinlock_t *lp, unsigned int pc)
58 int count = spin_retry; 56 int count = spin_retry;
59 57
60 while (count-- > 0) { 58 while (count-- > 0) {
61 atomic_inc(&spin_retry_counter);
62 if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0) 59 if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0)
63 return 1; 60 return 1;
64 } 61 }
@@ -77,7 +74,6 @@ _raw_read_lock_wait(raw_rwlock_t *rw)
77 _diag44(); 74 _diag44();
78 count = spin_retry; 75 count = spin_retry;
79 } 76 }
80 atomic_inc(&spin_retry_counter);
81 old = rw->lock & 0x7fffffffU; 77 old = rw->lock & 0x7fffffffU;
82 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 78 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old)
83 return; 79 return;
@@ -92,7 +88,6 @@ _raw_read_trylock_retry(raw_rwlock_t *rw)
92 int count = spin_retry; 88 int count = spin_retry;
93 89
94 while (count-- > 0) { 90 while (count-- > 0) {
95 atomic_inc(&spin_retry_counter);
96 old = rw->lock & 0x7fffffffU; 91 old = rw->lock & 0x7fffffffU;
97 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 92 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old)
98 return 1; 93 return 1;
@@ -111,7 +106,6 @@ _raw_write_lock_wait(raw_rwlock_t *rw)
111 _diag44(); 106 _diag44();
112 count = spin_retry; 107 count = spin_retry;
113 } 108 }
114 atomic_inc(&spin_retry_counter);
115 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 109 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0)
116 return; 110 return;
117 } 111 }
@@ -124,7 +118,6 @@ _raw_write_trylock_retry(raw_rwlock_t *rw)
124 int count = spin_retry; 118 int count = spin_retry;
125 119
126 while (count-- > 0) { 120 while (count-- > 0) {
127 atomic_inc(&spin_retry_counter);
128 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 121 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0)
129 return 1; 122 return 1;
130 } 123 }
diff --git a/arch/um/Makefile b/arch/um/Makefile
index 322972fd064e..45435ff589c1 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -67,7 +67,8 @@ USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \
67# in CFLAGS. Otherwise, it would cause ld to complain about the two different 67# in CFLAGS. Otherwise, it would cause ld to complain about the two different
68# errnos. 68# errnos.
69 69
70CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask 70CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \
71 -Dmktime=kernel_mktime
71CFLAGS += $(call cc-option,-fno-unit-at-a-time,) 72CFLAGS += $(call cc-option,-fno-unit-at-a-time,)
72 73
73include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH) 74include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH)