aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-03-21 11:52:18 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-21 11:52:18 -0500
commitb05005772f34497eb2b7415a651fe785cbe70e16 (patch)
treeb176aeb7fa9baf69e77ddd83e844727490bfcf28 /arch
parent044f324f6ea5d55391db62fca6a295b2651cb946 (diff)
parent7705a8792b0fc82fd7d4dd923724606bbfd9fb20 (diff)
Merge branch 'origin'
Conflicts: Documentation/video4linux/CARDLIST.cx88 drivers/media/video/cx88/Kconfig drivers/media/video/em28xx/em28xx-video.c drivers/media/video/saa7134/saa7134-dvb.c Resolved as in the original merge by Mauro Carvalho Chehab
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/kernel/asm-offsets.c1
-rw-r--r--arch/alpha/kernel/entry.S16
-rw-r--r--arch/alpha/kernel/irq.c43
-rw-r--r--arch/alpha/kernel/smp.c25
-rw-r--r--arch/arm/Kconfig53
-rw-r--r--arch/arm/common/locomo.c21
-rw-r--r--arch/arm/common/rtctime.c16
-rw-r--r--arch/arm/configs/at91rm9200dk_defconfig1
-rw-r--r--arch/arm/configs/at91rm9200ek_defconfig1
-rw-r--r--arch/arm/configs/bast_defconfig5
-rw-r--r--arch/arm/configs/collie_defconfig7
-rw-r--r--arch/arm/configs/csb337_defconfig1
-rw-r--r--arch/arm/configs/csb637_defconfig1
-rw-r--r--arch/arm/configs/enp2611_defconfig2
-rw-r--r--arch/arm/configs/ixdp2400_defconfig2
-rw-r--r--arch/arm/configs/ixdp2401_defconfig2
-rw-r--r--arch/arm/configs/ixdp2801_defconfig2
-rw-r--r--arch/arm/configs/s3c2410_defconfig56
-rw-r--r--arch/arm/kernel/asm-offsets.c4
-rw-r--r--arch/arm/kernel/calls.S661
-rw-r--r--arch/arm/kernel/compat.c2
-rw-r--r--arch/arm/kernel/compat.h13
-rw-r--r--arch/arm/kernel/entry-armv.S19
-rw-r--r--arch/arm/kernel/entry-common.S4
-rw-r--r--arch/arm/kernel/process.c3
-rw-r--r--arch/arm/kernel/ptrace.c14
-rw-r--r--arch/arm/kernel/setup.c10
-rw-r--r--arch/arm/kernel/smp.c1
-rw-r--r--arch/arm/kernel/sys_oabi-compat.c101
-rw-r--r--arch/arm/kernel/time.c10
-rw-r--r--arch/arm/kernel/traps.c8
-rw-r--r--arch/arm/lib/muldi3.S4
-rw-r--r--arch/arm/mach-at91rm9200/devices.c4
-rw-r--r--arch/arm/mach-at91rm9200/gpio.c31
-rw-r--r--arch/arm/mach-clps711x/Kconfig2
-rw-r--r--arch/arm/mach-imx/mx1ads.c1
-rw-r--r--arch/arm/mach-integrator/integrator_cp.c4
-rw-r--r--arch/arm/mach-integrator/platsmp.c21
-rw-r--r--arch/arm/mach-iop3xx/iop321-setup.c1
-rw-r--r--arch/arm/mach-iop3xx/iop331-setup.c1
-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/ixdp2x01.c5
-rw-r--r--arch/arm/mach-ixp4xx/Kconfig4
-rw-r--r--arch/arm/mach-ixp4xx/common.c20
-rw-r--r--arch/arm/mach-ixp4xx/nas100d-power.c3
-rw-r--r--arch/arm/mach-ixp4xx/nas100d-setup.c3
-rw-r--r--arch/arm/mach-ixp4xx/nslu2-power.c3
-rw-r--r--arch/arm/mach-ixp4xx/nslu2-setup.c13
-rw-r--r--arch/arm/mach-omap1/board-generic.c3
-rw-r--r--arch/arm/mach-omap1/board-h2.c3
-rw-r--r--arch/arm/mach-omap1/board-h3.c3
-rw-r--r--arch/arm/mach-omap1/board-innovator.c3
-rw-r--r--arch/arm/mach-omap1/board-netstar.c3
-rw-r--r--arch/arm/mach-omap1/board-osk.c3
-rw-r--r--arch/arm/mach-omap1/board-palmte.c3
-rw-r--r--arch/arm/mach-omap1/board-perseus2.c3
-rw-r--r--arch/arm/mach-omap1/board-voiceblue.c3
-rw-r--r--arch/arm/mach-omap1/io.c42
-rw-r--r--arch/arm/mach-omap2/board-generic.c3
-rw-r--r--arch/arm/mach-omap2/board-h4.c3
-rw-r--r--arch/arm/mach-pxa/pxa27x.c2
-rw-r--r--arch/arm/mach-realview/core.c2
-rw-r--r--arch/arm/mach-realview/platsmp.c21
-rw-r--r--arch/arm/mach-s3c2410/Makefile5
-rw-r--r--arch/arm/mach-s3c2410/clock.c43
-rw-r--r--arch/arm/mach-s3c2410/clock.h1
-rw-r--r--arch/arm/mach-s3c2410/cpu.c18
-rw-r--r--arch/arm/mach-s3c2410/cpu.h3
-rw-r--r--arch/arm/mach-s3c2410/devs.c74
-rw-r--r--arch/arm/mach-s3c2410/dma.c2
-rw-r--r--arch/arm/mach-s3c2410/gpio.c72
-rw-r--r--arch/arm/mach-s3c2410/mach-h1940.c29
-rw-r--r--arch/arm/mach-s3c2410/s3c2400-gpio.c45
-rw-r--r--arch/arm/mach-s3c2410/s3c2400.h31
-rw-r--r--arch/arm/mach-s3c2410/s3c2410-gpio.c93
-rw-r--r--arch/arm/mach-s3c2410/sleep.S8
-rw-r--r--arch/arm/mach-versatile/pci.c93
-rw-r--r--arch/arm/mm/abort-ev6.S2
-rw-r--r--arch/arm/mm/cache-v6.S23
-rw-r--r--arch/arm/mm/flush.c6
-rw-r--r--arch/arm/mm/ioremap.c2
-rw-r--r--arch/arm/mm/mm-armv.c6
-rw-r--r--arch/arm/mm/proc-xscale.S16
-rw-r--r--arch/arm/mm/tlb-v6.S1
-rw-r--r--arch/arm/oprofile/common.c5
-rw-r--r--arch/arm/plat-omap/pm.c1
-rw-r--r--arch/arm/plat-omap/sram.c9
-rw-r--r--arch/arm/tools/mach-types35
-rw-r--r--arch/arm26/Kconfig6
-rw-r--r--arch/arm26/kernel/fiq.c32
-rw-r--r--arch/arm26/kernel/signal.c3
-rw-r--r--arch/cris/Makefile2
-rw-r--r--arch/cris/arch-v10/kernel/ptrace.c8
-rw-r--r--arch/cris/kernel/setup.c1
-rw-r--r--arch/frv/Kconfig4
-rw-r--r--arch/frv/Makefile2
-rw-r--r--arch/frv/kernel/break.S77
-rw-r--r--arch/frv/kernel/entry-table.S39
-rw-r--r--arch/frv/kernel/entry.S91
-rw-r--r--arch/frv/kernel/head.S3
-rw-r--r--arch/frv/kernel/irq.c41
-rw-r--r--arch/frv/mm/kmap.c9
-rw-r--r--arch/h8300/Kconfig4
-rw-r--r--arch/h8300/Kconfig.cpu2
-rw-r--r--arch/h8300/Kconfig.debug2
-rw-r--r--arch/h8300/defconfig2
-rw-r--r--arch/h8300/kernel/process.c3
-rw-r--r--arch/i386/Kconfig59
-rw-r--r--arch/i386/boot/.gitignore3
-rw-r--r--arch/i386/boot/tools/.gitignore1
-rw-r--r--arch/i386/kernel/.gitignore1
-rw-r--r--arch/i386/kernel/Makefile4
-rw-r--r--arch/i386/kernel/acpi/Makefile4
-rw-r--r--arch/i386/kernel/acpi/boot.c22
-rw-r--r--arch/i386/kernel/acpi/cstate.c58
-rw-r--r--arch/i386/kernel/acpi/earlyquirk.c8
-rw-r--r--arch/i386/kernel/acpi/processor.c75
-rw-r--r--arch/i386/kernel/apic.c11
-rw-r--r--arch/i386/kernel/cpu/amd.c8
-rw-r--r--arch/i386/kernel/cpu/centaur.c12
-rw-r--r--arch/i386/kernel/cpu/common.c47
-rw-r--r--arch/i386/kernel/cpu/cpufreq/Kconfig1
-rw-r--r--arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c71
-rw-r--r--arch/i386/kernel/cpu/cpufreq/p4-clockmod.c9
-rw-r--r--arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c12
-rw-r--r--arch/i386/kernel/cpu/cyrix.c18
-rw-r--r--arch/i386/kernel/cpu/intel_cacheinfo.c12
-rw-r--r--arch/i386/kernel/cpu/mtrr/main.c15
-rw-r--r--arch/i386/kernel/cpu/nexgen.c8
-rw-r--r--arch/i386/kernel/cpu/rise.c8
-rw-r--r--arch/i386/kernel/cpu/transmeta.c11
-rw-r--r--arch/i386/kernel/cpu/umc.c8
-rw-r--r--arch/i386/kernel/efi.c14
-rw-r--r--arch/i386/kernel/head.S6
-rw-r--r--arch/i386/kernel/i386_ksyms.c2
-rw-r--r--arch/i386/kernel/io_apic.c25
-rw-r--r--arch/i386/kernel/kprobes.c16
-rw-r--r--arch/i386/kernel/machine_kexec.c14
-rw-r--r--arch/i386/kernel/microcode.c15
-rw-r--r--arch/i386/kernel/mpparse.c20
-rw-r--r--arch/i386/kernel/nmi.c6
-rw-r--r--arch/i386/kernel/process.c6
-rw-r--r--arch/i386/kernel/setup.c4
-rw-r--r--arch/i386/kernel/smpboot.c20
-rw-r--r--arch/i386/kernel/syscall_table.S3
-rw-r--r--arch/i386/kernel/time.c4
-rw-r--r--arch/i386/kernel/timers/timer_tsc.c19
-rw-r--r--arch/i386/kernel/topology.c (renamed from arch/i386/mach-default/topology.c)6
-rw-r--r--arch/i386/kernel/traps.c9
-rw-r--r--arch/i386/kernel/vsyscall-sysenter.S15
-rw-r--r--arch/i386/mach-default/Makefile2
-rw-r--r--arch/i386/mach-voyager/voyager_basic.c3
-rw-r--r--arch/i386/mach-voyager/voyager_smp.c3
-rw-r--r--arch/i386/oprofile/backtrace.c38
-rw-r--r--arch/i386/pci/irq.c5
-rw-r--r--arch/i386/pci/mmconfig.c15
-rw-r--r--arch/ia64/Kconfig5
-rw-r--r--arch/ia64/configs/bigsur_defconfig161
-rw-r--r--arch/ia64/configs/gensparse_defconfig171
-rw-r--r--arch/ia64/configs/sim_defconfig371
-rw-r--r--arch/ia64/configs/sn2_defconfig58
-rw-r--r--arch/ia64/configs/tiger_defconfig57
-rw-r--r--arch/ia64/configs/zx1_defconfig192
-rw-r--r--arch/ia64/defconfig177
-rw-r--r--arch/ia64/dig/setup.c10
-rw-r--r--arch/ia64/ia32/ia32_signal.c1
-rw-r--r--arch/ia64/kernel/Makefile5
-rw-r--r--arch/ia64/kernel/acpi-ext.c22
-rw-r--r--arch/ia64/kernel/acpi-processor.c67
-rw-r--r--arch/ia64/kernel/acpi.c59
-rw-r--r--arch/ia64/kernel/cpufreq/Makefile1
-rw-r--r--arch/ia64/kernel/cpufreq/acpi-cpufreq.c51
-rw-r--r--arch/ia64/kernel/cyclone.c2
-rw-r--r--arch/ia64/kernel/efi.c16
-rw-r--r--arch/ia64/kernel/entry.S20
-rw-r--r--arch/ia64/kernel/fsys.S30
-rw-r--r--arch/ia64/kernel/head.S1
-rw-r--r--arch/ia64/kernel/ia64_ksyms.c15
-rw-r--r--arch/ia64/kernel/ivt.S16
-rw-r--r--arch/ia64/kernel/mca_asm.S2
-rw-r--r--arch/ia64/kernel/mca_drv.c19
-rw-r--r--arch/ia64/kernel/sal.c75
-rw-r--r--arch/ia64/kernel/setup.c8
-rw-r--r--arch/ia64/kernel/smpboot.c5
-rw-r--r--arch/ia64/kernel/time.c62
-rw-r--r--arch/ia64/kernel/topology.c18
-rw-r--r--arch/ia64/kernel/traps.c8
-rw-r--r--arch/ia64/kernel/unaligned.c36
-rw-r--r--arch/ia64/pci/pci.c12
-rw-r--r--arch/ia64/sn/Makefile2
-rw-r--r--arch/ia64/sn/kernel/Makefile2
-rw-r--r--arch/ia64/sn/kernel/bte.c17
-rw-r--r--arch/ia64/sn/kernel/io_init.c141
-rw-r--r--arch/ia64/sn/kernel/irq.c25
-rw-r--r--arch/ia64/sn/kernel/klconflib.c29
-rw-r--r--arch/ia64/sn/kernel/mca.c5
-rw-r--r--arch/ia64/sn/kernel/setup.c77
-rw-r--r--arch/ia64/sn/kernel/sn2/Makefile2
-rw-r--r--arch/ia64/sn/kernel/sn2/prominfo_proc.c25
-rw-r--r--arch/ia64/sn/kernel/sn2/sn2_smp.c213
-rw-r--r--arch/ia64/sn/kernel/sn2/sn_hwperf.c5
-rw-r--r--arch/ia64/sn/kernel/sn2/sn_proc_fs.c22
-rw-r--r--arch/ia64/sn/kernel/sn2/timer.c19
-rw-r--r--arch/ia64/sn/kernel/sn2/timer_interrupt.c7
-rw-r--r--arch/ia64/sn/kernel/tiocx.c6
-rw-r--r--arch/ia64/sn/kernel/xpc_channel.c14
-rw-r--r--arch/ia64/sn/kernel/xpc_main.c39
-rw-r--r--arch/ia64/sn/pci/Makefile2
-rw-r--r--arch/ia64/sn/pci/pci_dma.c20
-rw-r--r--arch/ia64/sn/pci/pcibr/Makefile2
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_ate.c29
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_dma.c14
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_provider.c9
-rw-r--r--arch/m32r/Makefile6
-rw-r--r--arch/m32r/kernel/m32r_ksyms.c5
-rw-r--r--arch/m32r/kernel/setup.c6
-rw-r--r--arch/m32r/kernel/signal.c24
-rw-r--r--arch/m32r/kernel/sys_m32r.c61
-rw-r--r--arch/m32r/lib/usercopy.c4
-rw-r--r--arch/m68k/Kconfig4
-rw-r--r--arch/m68k/fpsp040/bindec.S5
-rw-r--r--arch/m68k/fpsp040/binstr.S5
-rw-r--r--arch/m68k/fpsp040/bugfix.S5
-rw-r--r--arch/m68k/fpsp040/decbin.S5
-rw-r--r--arch/m68k/fpsp040/do_func.S5
-rw-r--r--arch/m68k/fpsp040/fpsp.h5
-rw-r--r--arch/m68k/fpsp040/gen_except.S5
-rw-r--r--arch/m68k/fpsp040/get_op.S5
-rw-r--r--arch/m68k/fpsp040/kernel_ex.S5
-rw-r--r--arch/m68k/fpsp040/res_func.S5
-rw-r--r--arch/m68k/fpsp040/round.S5
-rw-r--r--arch/m68k/fpsp040/sacos.S5
-rw-r--r--arch/m68k/fpsp040/sasin.S5
-rw-r--r--arch/m68k/fpsp040/satan.S5
-rw-r--r--arch/m68k/fpsp040/satanh.S5
-rw-r--r--arch/m68k/fpsp040/scale.S5
-rw-r--r--arch/m68k/fpsp040/scosh.S5
-rw-r--r--arch/m68k/fpsp040/setox.S5
-rw-r--r--arch/m68k/fpsp040/sgetem.S5
-rw-r--r--arch/m68k/fpsp040/sint.S5
-rw-r--r--arch/m68k/fpsp040/skeleton.S5
-rw-r--r--arch/m68k/fpsp040/slog2.S5
-rw-r--r--arch/m68k/fpsp040/slogn.S5
-rw-r--r--arch/m68k/fpsp040/smovecr.S5
-rw-r--r--arch/m68k/fpsp040/srem_mod.S5
-rw-r--r--arch/m68k/fpsp040/ssin.S5
-rw-r--r--arch/m68k/fpsp040/ssinh.S5
-rw-r--r--arch/m68k/fpsp040/stan.S5
-rw-r--r--arch/m68k/fpsp040/stanh.S5
-rw-r--r--arch/m68k/fpsp040/sto_res.S5
-rw-r--r--arch/m68k/fpsp040/stwotox.S5
-rw-r--r--arch/m68k/fpsp040/tbldo.S5
-rw-r--r--arch/m68k/fpsp040/util.S5
-rw-r--r--arch/m68k/fpsp040/x_bsun.S5
-rw-r--r--arch/m68k/fpsp040/x_fline.S5
-rw-r--r--arch/m68k/fpsp040/x_operr.S5
-rw-r--r--arch/m68k/fpsp040/x_ovfl.S5
-rw-r--r--arch/m68k/fpsp040/x_snan.S5
-rw-r--r--arch/m68k/fpsp040/x_store.S5
-rw-r--r--arch/m68k/fpsp040/x_unfl.S5
-rw-r--r--arch/m68k/fpsp040/x_unimp.S5
-rw-r--r--arch/m68k/fpsp040/x_unsupp.S5
-rw-r--r--arch/m68k/kernel/process.c3
-rw-r--r--arch/m68knommu/Kconfig4
-rw-r--r--arch/m68knommu/kernel/process.c8
-rw-r--r--arch/mips/Kconfig5
-rw-r--r--arch/mips/Makefile30
-rw-r--r--arch/mips/arc/arc_con.c2
-rw-r--r--arch/mips/arc/misc.c19
-rw-r--r--arch/mips/au1000/common/reset.c12
-rw-r--r--arch/mips/au1000/common/setup.c3
-rw-r--r--arch/mips/cobalt/int-handler.S2
-rw-r--r--arch/mips/cobalt/irq.c2
-rw-r--r--arch/mips/cobalt/reset.c2
-rw-r--r--arch/mips/cobalt/setup.c9
-rw-r--r--arch/mips/configs/ip27_defconfig13
-rw-r--r--arch/mips/configs/ip32_defconfig1
-rw-r--r--arch/mips/configs/qemu_defconfig78
-rw-r--r--arch/mips/ddb5xxx/ddb5074/setup.c3
-rw-r--r--arch/mips/ddb5xxx/ddb5476/setup.c3
-rw-r--r--arch/mips/ddb5xxx/ddb5477/setup.c3
-rw-r--r--arch/mips/dec/setup.c3
-rw-r--r--arch/mips/gt64120/ev64120/setup.c4
-rw-r--r--arch/mips/gt64120/momenco_ocelot/setup.c6
-rw-r--r--arch/mips/ite-boards/generic/it8172_setup.c3
-rw-r--r--arch/mips/jazz/setup.c4
-rw-r--r--arch/mips/jmr3927/rbhma3100/setup.c3
-rw-r--r--arch/mips/kernel/binfmt_elfn32.c5
-rw-r--r--arch/mips/kernel/binfmt_elfo32.c5
-rw-r--r--arch/mips/kernel/cpu-probe.c7
-rw-r--r--arch/mips/kernel/gdb-stub.c2
-rw-r--r--arch/mips/kernel/genex.S2
-rw-r--r--arch/mips/kernel/irq-mv6434x.c8
-rw-r--r--arch/mips/kernel/linux32.c76
-rw-r--r--arch/mips/kernel/process.c163
-rw-r--r--arch/mips/kernel/ptrace32.c22
-rw-r--r--arch/mips/kernel/reset.c18
-rw-r--r--arch/mips/kernel/rtlx.c4
-rw-r--r--arch/mips/kernel/scall32-o32.S17
-rw-r--r--arch/mips/kernel/scall64-64.S17
-rw-r--r--arch/mips/kernel/scall64-n32.S23
-rw-r--r--arch/mips/kernel/scall64-o32.S21
-rw-r--r--arch/mips/kernel/setup.c3
-rw-r--r--arch/mips/kernel/signal-common.h8
-rw-r--r--arch/mips/kernel/signal.c104
-rw-r--r--arch/mips/kernel/signal32.c143
-rw-r--r--arch/mips/kernel/signal_n32.c49
-rw-r--r--arch/mips/kernel/smp.c22
-rw-r--r--arch/mips/kernel/smp_mt.c47
-rw-r--r--arch/mips/kernel/syscall.c48
-rw-r--r--arch/mips/kernel/time.c11
-rw-r--r--arch/mips/kernel/traps.c6
-rw-r--r--arch/mips/kernel/vmlinux.lds.S15
-rw-r--r--arch/mips/lasat/reset.c5
-rw-r--r--arch/mips/lasat/setup.c4
-rw-r--r--arch/mips/lib-32/dump_tlb.c33
-rw-r--r--arch/mips/lib/iomap.c2
-rw-r--r--arch/mips/math-emu/dp_simple.c14
-rw-r--r--arch/mips/math-emu/sp_simple.c14
-rw-r--r--arch/mips/mips-boards/atlas/atlas_setup.c4
-rw-r--r--arch/mips/mips-boards/generic/reset.c5
-rw-r--r--arch/mips/mips-boards/sead/sead_setup.c4
-rw-r--r--arch/mips/mips-boards/sim/sim_setup.c4
-rw-r--r--arch/mips/mm/c-r4k.c140
-rw-r--r--arch/mips/mm/c-tx39.c71
-rw-r--r--arch/mips/mm/cache.c5
-rw-r--r--arch/mips/mm/cex-sb1.S2
-rw-r--r--arch/mips/mm/init.c16
-rw-r--r--arch/mips/mm/tlbex.c34
-rw-r--r--arch/mips/momentum/jaguar_atx/ja-console.c2
-rw-r--r--arch/mips/momentum/jaguar_atx/prom.c2
-rw-r--r--arch/mips/momentum/jaguar_atx/setup.c8
-rw-r--r--arch/mips/momentum/ocelot_3/setup.c4
-rw-r--r--arch/mips/momentum/ocelot_c/irq.c2
-rw-r--r--arch/mips/momentum/ocelot_c/prom.c2
-rw-r--r--arch/mips/momentum/ocelot_c/setup.c31
-rw-r--r--arch/mips/momentum/ocelot_g/setup.c4
-rw-r--r--arch/mips/oprofile/Makefile1
-rw-r--r--arch/mips/oprofile/common.c3
-rw-r--r--arch/mips/oprofile/op_model_mipsxx.c11
-rw-r--r--arch/mips/pci/Makefile1
-rw-r--r--arch/mips/pci/fixup-cobalt.c6
-rw-r--r--arch/mips/pci/ops-gt64111.c2
-rw-r--r--arch/mips/pci/pci-bcm1480.c2
-rw-r--r--arch/mips/pci/pci-ocelot-c.c6
-rw-r--r--arch/mips/philips/pnx8550/common/platform.c8
-rw-r--r--arch/mips/philips/pnx8550/common/setup.c3
-rw-r--r--arch/mips/pmc-sierra/yosemite/prom.c3
-rw-r--r--arch/mips/pmc-sierra/yosemite/setup.c2
-rw-r--r--arch/mips/pmc-sierra/yosemite/smp.c26
-rw-r--r--arch/mips/sgi-ip22/ip22-reset.c55
-rw-r--r--arch/mips/sgi-ip22/ip22-setup.c10
-rw-r--r--arch/mips/sgi-ip27/ip27-reset.c5
-rw-r--r--arch/mips/sgi-ip27/ip27-smp.c7
-rw-r--r--arch/mips/sgi-ip32/ip32-reset.c3
-rw-r--r--arch/mips/sgi-ip32/ip32-setup.c13
-rw-r--r--arch/mips/sibyte/Kconfig4
-rw-r--r--arch/mips/sibyte/bcm1480/irq.c5
-rw-r--r--arch/mips/sibyte/cfe/setup.c3
-rw-r--r--arch/mips/sibyte/cfe/smp.c10
-rw-r--r--arch/mips/sibyte/sb1250/prom.c3
-rw-r--r--arch/mips/sibyte/sb1250/setup.c36
-rw-r--r--arch/mips/sibyte/sb1250/time.c77
-rw-r--r--arch/mips/sibyte/swarm/setup.c7
-rw-r--r--arch/mips/sni/setup.c5
-rw-r--r--arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c10
-rw-r--r--arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c140
-rw-r--r--arch/mips/tx4938/toshiba_rbtx4938/setup.c4
-rw-r--r--arch/mips/vr41xx/common/pmu.c3
-rw-r--r--arch/parisc/Kconfig25
-rw-r--r--arch/parisc/Kconfig.debug10
-rw-r--r--arch/parisc/configs/b180_defconfig182
-rw-r--r--arch/parisc/hpux/entry_hpux.S3
-rw-r--r--arch/parisc/hpux/sys_hpux.c10
-rw-r--r--arch/parisc/kernel/drivers.c3
-rw-r--r--arch/parisc/kernel/parisc_ksyms.c3
-rw-r--r--arch/parisc/kernel/pci.c13
-rw-r--r--arch/parisc/kernel/perf.c38
-rw-r--r--arch/parisc/kernel/perf_images.h4
-rw-r--r--arch/parisc/kernel/process.c35
-rw-r--r--arch/parisc/kernel/ptrace.c8
-rw-r--r--arch/parisc/kernel/signal.c2
-rw-r--r--arch/parisc/kernel/signal32.c102
-rw-r--r--arch/parisc/kernel/signal32.h127
-rw-r--r--arch/parisc/kernel/syscall.S2
-rw-r--r--arch/parisc/kernel/syscall_table.S19
-rw-r--r--arch/parisc/kernel/traps.c3
-rw-r--r--arch/parisc/math-emu/decode_exc.c1
-rw-r--r--arch/parisc/mm/init.c35
-rw-r--r--arch/powerpc/Kconfig10
-rw-r--r--arch/powerpc/Makefile3
-rw-r--r--arch/powerpc/boot/crt0.S5
-rw-r--r--arch/powerpc/configs/cell_defconfig94
-rw-r--r--arch/powerpc/configs/g5_defconfig174
-rw-r--r--arch/powerpc/configs/iseries_defconfig96
-rw-r--r--arch/powerpc/configs/maple_defconfig50
-rw-r--r--arch/powerpc/configs/mpc834x_sys_defconfig32
-rw-r--r--arch/powerpc/configs/pmac32_defconfig77
-rw-r--r--arch/powerpc/configs/ppc64_defconfig175
-rw-r--r--arch/powerpc/configs/pseries_defconfig127
-rw-r--r--arch/powerpc/kernel/Makefile6
-rw-r--r--arch/powerpc/kernel/asm-offsets.c1
-rw-r--r--arch/powerpc/kernel/cputable.c9
-rw-r--r--arch/powerpc/kernel/crash.c4
-rw-r--r--arch/powerpc/kernel/entry_32.S95
-rw-r--r--arch/powerpc/kernel/entry_64.S94
-rw-r--r--arch/powerpc/kernel/fpu.S2
-rw-r--r--arch/powerpc/kernel/head_32.S1
-rw-r--r--arch/powerpc/kernel/head_64.S119
-rw-r--r--arch/powerpc/kernel/iommu.c9
-rw-r--r--arch/powerpc/kernel/legacy_serial.c4
-rw-r--r--arch/powerpc/kernel/lparcfg.c6
-rw-r--r--arch/powerpc/kernel/machine_kexec_64.c10
-rw-r--r--arch/powerpc/kernel/pci_64.c5
-rw-r--r--arch/powerpc/kernel/ppc_ksyms.c26
-rw-r--r--arch/powerpc/kernel/process.c32
-rw-r--r--arch/powerpc/kernel/prom.c92
-rw-r--r--arch/powerpc/kernel/prom_init.c44
-rw-r--r--arch/powerpc/kernel/prom_parse.c4
-rw-r--r--arch/powerpc/kernel/ptrace.c5
-rw-r--r--arch/powerpc/kernel/rtas-rtc.c2
-rw-r--r--arch/powerpc/kernel/rtas.c12
-rw-r--r--arch/powerpc/kernel/rtas_flash.c3
-rw-r--r--arch/powerpc/kernel/rtas_pci.c24
-rw-r--r--arch/powerpc/kernel/setup_64.c7
-rw-r--r--arch/powerpc/kernel/signal_32.c41
-rw-r--r--arch/powerpc/kernel/signal_64.c13
-rw-r--r--arch/powerpc/kernel/smp.c3
-rw-r--r--arch/powerpc/kernel/sys_ppc32.c4
-rw-r--r--arch/powerpc/kernel/systbl.S5
-rw-r--r--arch/powerpc/kernel/time.c312
-rw-r--r--arch/powerpc/kernel/traps.c2
-rw-r--r--arch/powerpc/kernel/udbg_16550.c2
-rw-r--r--arch/powerpc/kernel/vdso.c4
-rw-r--r--arch/powerpc/kernel/vdso64/gettimeofday.S4
-rw-r--r--arch/powerpc/mm/hash_native_64.c7
-rw-r--r--arch/powerpc/mm/hash_utils_64.c5
-rw-r--r--arch/powerpc/mm/lmb.c4
-rw-r--r--arch/powerpc/mm/mem.c14
-rw-r--r--arch/powerpc/mm/pgtable_32.c5
-rw-r--r--arch/powerpc/oprofile/Kconfig1
-rw-r--r--arch/powerpc/platforms/cell/Makefile2
-rw-r--r--arch/powerpc/platforms/chrp/chrp.h1
-rw-r--r--arch/powerpc/platforms/chrp/pci.c2
-rw-r--r--arch/powerpc/platforms/chrp/setup.c2
-rw-r--r--arch/powerpc/platforms/chrp/time.c21
-rw-r--r--arch/powerpc/platforms/iseries/lpevents.c2
-rw-r--r--arch/powerpc/platforms/iseries/setup.c1
-rw-r--r--arch/powerpc/platforms/maple/pci.c4
-rw-r--r--arch/powerpc/platforms/powermac/feature.c19
-rw-r--r--arch/powerpc/platforms/powermac/low_i2c.c3
-rw-r--r--arch/powerpc/platforms/powermac/pci.c89
-rw-r--r--arch/powerpc/platforms/powermac/pfunc_base.c5
-rw-r--r--arch/powerpc/platforms/powermac/pfunc_core.c19
-rw-r--r--arch/powerpc/platforms/powermac/setup.c6
-rw-r--r--arch/powerpc/platforms/powermac/smp.c2
-rw-r--r--arch/powerpc/platforms/pseries/Kconfig9
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c14
-rw-r--r--arch/powerpc/platforms/pseries/eeh_driver.c10
-rw-r--r--arch/powerpc/platforms/pseries/pci_dlpar.c67
-rw-r--r--arch/powerpc/platforms/pseries/setup.c2
-rw-r--r--arch/powerpc/platforms/pseries/smp.c2
-rw-r--r--arch/powerpc/sysdev/dart_iommu.c2
-rw-r--r--arch/powerpc/sysdev/mpic.c9
-rw-r--r--arch/ppc/kernel/asm-offsets.c1
-rw-r--r--arch/ppc/kernel/entry.S95
-rw-r--r--arch/ppc/kernel/head.S1
-rw-r--r--arch/ppc/kernel/head_8xx.S7
-rw-r--r--arch/ppc/kernel/misc.S283
-rw-r--r--arch/ppc/kernel/ppc_ksyms.c12
-rw-r--r--arch/ppc/platforms/4xx/bamboo.c4
-rw-r--r--arch/ppc/platforms/4xx/bubinga.c4
-rw-r--r--arch/ppc/platforms/4xx/ebony.c4
-rw-r--r--arch/ppc/platforms/4xx/luan.c4
-rw-r--r--arch/ppc/platforms/4xx/ocotea.c4
-rw-r--r--arch/ppc/platforms/4xx/xilinx_ml300.c4
-rw-r--r--arch/ppc/platforms/4xx/yucca.c4
-rw-r--r--arch/ppc/platforms/83xx/mpc834x_sys.c4
-rw-r--r--arch/ppc/platforms/85xx/mpc8540_ads.c4
-rw-r--r--arch/ppc/platforms/85xx/mpc85xx_cds_common.c4
-rw-r--r--arch/ppc/platforms/85xx/sbc8560.c2
-rw-r--r--arch/ppc/platforms/85xx/tqm85xx.c4
-rw-r--r--arch/ppc/platforms/chestnut.c2
-rw-r--r--arch/ppc/platforms/ev64260.c2
-rw-r--r--arch/ppc/platforms/radstone_ppc7d.c2
-rw-r--r--arch/ppc/platforms/spruce.c4
-rw-r--r--arch/ppc/syslib/mv64x60.c4
-rw-r--r--arch/ppc/syslib/ocp.c4
-rw-r--r--arch/ppc/syslib/ppc83xx_setup.c2
-rw-r--r--arch/ppc/syslib/ppc85xx_setup.c2
-rw-r--r--arch/ppc/xmon/adb.c212
-rw-r--r--arch/ppc/xmon/start.c184
-rw-r--r--arch/ppc/xmon/xmon.c108
-rw-r--r--arch/s390/Kconfig4
-rw-r--r--arch/s390/defconfig41
-rw-r--r--arch/s390/kernel/compat_linux.c103
-rw-r--r--arch/s390/kernel/compat_signal.c105
-rw-r--r--arch/s390/kernel/compat_wrapper.S143
-rw-r--r--arch/s390/kernel/entry.S51
-rw-r--r--arch/s390/kernel/entry64.S75
-rw-r--r--arch/s390/kernel/machine_kexec.c5
-rw-r--r--arch/s390/kernel/process.c4
-rw-r--r--arch/s390/kernel/setup.c2
-rw-r--r--arch/s390/kernel/signal.c146
-rw-r--r--arch/s390/kernel/smp.c73
-rw-r--r--arch/s390/kernel/sys_s390.c4
-rw-r--r--arch/s390/kernel/syscalls.S23
-rw-r--r--arch/s390/kernel/time.c11
-rw-r--r--arch/s390/kernel/traps.c2
-rw-r--r--arch/s390/lib/Makefile2
-rw-r--r--arch/s390/lib/delay.c2
-rw-r--r--arch/s390/lib/spinlock.c15
-rw-r--r--arch/s390/lib/uaccess.S6
-rw-r--r--arch/s390/lib/uaccess64.S6
-rw-r--r--arch/s390/mm/cmm.c10
-rw-r--r--arch/sh/Kconfig12
-rw-r--r--arch/sh/boards/renesas/rts7751r2d/io.c30
-rw-r--r--arch/sh/boards/superh/microdev/io.c192
-rw-r--r--arch/sh/boards/superh/microdev/irq.c2
-rw-r--r--arch/sh/boards/superh/microdev/setup.c166
-rw-r--r--arch/sh/boards/unknown/Makefile2
-rw-r--r--arch/sh/boards/unknown/io.c46
-rw-r--r--arch/sh/boards/unknown/mach.c67
-rw-r--r--arch/sh/boards/unknown/setup.c12
-rw-r--r--arch/sh/cchips/voyagergx/consistent.c15
-rw-r--r--arch/sh/cchips/voyagergx/irq.c7
-rw-r--r--arch/sh/configs/microdev_defconfig410
-rw-r--r--arch/sh/kernel/Makefile2
-rw-r--r--arch/sh/kernel/cpu/Makefile2
-rw-r--r--arch/sh/kernel/cpu/bus.c197
-rw-r--r--arch/sh/kernel/cpu/clock.c13
-rw-r--r--arch/sh/kernel/cpu/irq/ipr.c59
-rw-r--r--arch/sh/kernel/entry.S18
-rw-r--r--arch/sh/kernel/process.c54
-rw-r--r--arch/sh/kernel/setup.c51
-rw-r--r--arch/sh64/kernel/sh_ksyms.c8
-rw-r--r--arch/sh64/kernel/time.c1
-rw-r--r--arch/sparc/kernel/entry.S2
-rw-r--r--arch/sparc/kernel/process.c2
-rw-r--r--arch/sparc/kernel/systbls.S5
-rw-r--r--arch/sparc/math-emu/math.c10
-rw-r--r--arch/sparc64/Kconfig1
-rw-r--r--arch/sparc64/boot/.gitignore4
-rw-r--r--arch/sparc64/defconfig24
-rw-r--r--arch/sparc64/kernel/entry.S2
-rw-r--r--arch/sparc64/kernel/setup.c2
-rw-r--r--arch/sparc64/kernel/smp.c28
-rw-r--r--arch/sparc64/kernel/sys32.S3
-rw-r--r--arch/sparc64/kernel/sys_sparc32.c21
-rw-r--r--arch/sparc64/kernel/systbls.S11
-rw-r--r--arch/sparc64/kernel/una_asm.S4
-rw-r--r--arch/sparc64/lib/U1copy_from_user.S2
-rw-r--r--arch/sparc64/lib/U1copy_to_user.S2
-rw-r--r--arch/sparc64/lib/U3copy_from_user.S2
-rw-r--r--arch/sparc64/lib/U3copy_to_user.S2
-rw-r--r--arch/sparc64/lib/bzero.S2
-rw-r--r--arch/sparc64/lib/copy_in_user.S2
-rw-r--r--arch/sparc64/lib/csum_copy_from_user.S2
-rw-r--r--arch/sparc64/lib/csum_copy_to_user.S2
-rw-r--r--arch/sparc64/lib/strlen_user.S2
-rw-r--r--arch/sparc64/lib/strncpy_from_user.S2
-rw-r--r--arch/sparc64/solaris/entry64.S2
-rw-r--r--arch/sparc64/solaris/systbl.S29
-rw-r--r--arch/um/Makefile23
-rw-r--r--arch/um/drivers/chan_kern.c6
-rw-r--r--arch/um/drivers/chan_user.c15
-rw-r--r--arch/um/drivers/cow.h2
-rw-r--r--arch/um/drivers/cow_sys.h6
-rw-r--r--arch/um/drivers/cow_user.c24
-rw-r--r--arch/um/drivers/daemon_kern.c4
-rw-r--r--arch/um/drivers/line.c2
-rw-r--r--arch/um/drivers/mcast_kern.c4
-rw-r--r--arch/um/drivers/mconsole_kern.c11
-rw-r--r--arch/um/drivers/net_kern.c29
-rw-r--r--arch/um/drivers/net_user.c34
-rw-r--r--arch/um/drivers/slip_common.h13
-rw-r--r--arch/um/drivers/slip_kern.c15
-rw-r--r--arch/um/drivers/slirp_kern.c13
-rw-r--r--arch/um/drivers/ssl.c6
-rw-r--r--arch/um/drivers/ubd_kern.c2
-rw-r--r--arch/um/include/init.h2
-rw-r--r--arch/um/include/kern_util.h2
-rw-r--r--arch/um/include/os.h3
-rw-r--r--arch/um/include/registers.h2
-rw-r--r--arch/um/kernel/exec_kern.c2
-rw-r--r--arch/um/kernel/physmem.c2
-rw-r--r--arch/um/kernel/reboot.c1
-rw-r--r--arch/um/kernel/skas/process.c569
-rw-r--r--arch/um/kernel/tt/syscall_kern.c8
-rw-r--r--arch/um/kernel/um_arch.c18
-rw-r--r--arch/um/os-Linux/drivers/tuntap_user.c4
-rw-r--r--arch/um/os-Linux/file.c19
-rw-r--r--arch/um/os-Linux/process.c16
-rw-r--r--arch/um/os-Linux/skas/mem.c2
-rw-r--r--arch/um/os-Linux/skas/process.c21
-rw-r--r--arch/um/os-Linux/start_up.c1
-rw-r--r--arch/um/os-Linux/sys-i386/registers.c5
-rw-r--r--arch/um/os-Linux/sys-x86_64/registers.c5
-rw-r--r--arch/um/sys-i386/ldt.c11
-rw-r--r--arch/um/sys-x86_64/ptrace_user.c7
-rw-r--r--arch/um/sys-x86_64/user-offsets.c2
-rw-r--r--arch/v850/Kconfig4
-rw-r--r--arch/v850/kernel/process.c3
-rw-r--r--arch/v850/kernel/simcons.c25
-rw-r--r--arch/x86_64/Kconfig16
-rw-r--r--arch/x86_64/Kconfig.debug7
-rw-r--r--arch/x86_64/defconfig53
-rw-r--r--arch/x86_64/ia32/ia32entry.S7
-rw-r--r--arch/x86_64/ia32/sys_ia32.c22
-rw-r--r--arch/x86_64/kernel/Makefile2
-rw-r--r--arch/x86_64/kernel/acpi/Makefile5
-rw-r--r--arch/x86_64/kernel/acpi/processor.c72
-rw-r--r--arch/x86_64/kernel/aperture.c2
-rw-r--r--arch/x86_64/kernel/apic.c92
-rw-r--r--arch/x86_64/kernel/entry.S8
-rw-r--r--arch/x86_64/kernel/head.S7
-rw-r--r--arch/x86_64/kernel/io_apic.c50
-rw-r--r--arch/x86_64/kernel/machine_kexec.c2
-rw-r--r--arch/x86_64/kernel/mce.c2
-rw-r--r--arch/x86_64/kernel/mpparse.c12
-rw-r--r--arch/x86_64/kernel/nmi.c26
-rw-r--r--arch/x86_64/kernel/pci-dma.c3
-rw-r--r--arch/x86_64/kernel/pci-gart.c39
-rw-r--r--arch/x86_64/kernel/pci-nommu.c7
-rw-r--r--arch/x86_64/kernel/pci-swiotlb.c2
-rw-r--r--arch/x86_64/kernel/pmtimer.c25
-rw-r--r--arch/x86_64/kernel/process.c4
-rw-r--r--arch/x86_64/kernel/setup.c16
-rw-r--r--arch/x86_64/kernel/smpboot.c7
-rw-r--r--arch/x86_64/kernel/time.c98
-rw-r--r--arch/x86_64/kernel/traps.c39
-rw-r--r--arch/x86_64/kernel/vmlinux.lds.S10
-rw-r--r--arch/x86_64/kernel/x8664_ksyms.c5
-rw-r--r--arch/x86_64/lib/Makefile2
-rw-r--r--arch/x86_64/lib/clear_page.S38
-rw-r--r--arch/x86_64/lib/copy_page.S87
-rw-r--r--arch/x86_64/lib/copy_user.S247
-rw-r--r--arch/x86_64/lib/iomap_copy.S26
-rw-r--r--arch/x86_64/lib/memcpy.S93
-rw-r--r--arch/x86_64/lib/memset.S94
-rw-r--r--arch/x86_64/mm/fault.c3
-rw-r--r--arch/x86_64/mm/k8topology.c2
-rw-r--r--arch/x86_64/mm/numa.c2
-rw-r--r--arch/x86_64/mm/srat.c50
-rw-r--r--arch/x86_64/pci/mmconfig.c19
-rw-r--r--arch/xtensa/Kconfig4
-rw-r--r--arch/xtensa/kernel/process.c3
-rw-r--r--arch/xtensa/platform-iss/console.c4
649 files changed, 8810 insertions, 7383 deletions
diff --git a/arch/alpha/kernel/asm-offsets.c b/arch/alpha/kernel/asm-offsets.c
index 8f2e5c718b50..6c56c754a0b5 100644
--- a/arch/alpha/kernel/asm-offsets.c
+++ b/arch/alpha/kernel/asm-offsets.c
@@ -28,6 +28,7 @@ void foo(void)
28 DEFINE(TASK_GID, offsetof(struct task_struct, gid)); 28 DEFINE(TASK_GID, offsetof(struct task_struct, gid));
29 DEFINE(TASK_EGID, offsetof(struct task_struct, egid)); 29 DEFINE(TASK_EGID, offsetof(struct task_struct, egid));
30 DEFINE(TASK_REAL_PARENT, offsetof(struct task_struct, real_parent)); 30 DEFINE(TASK_REAL_PARENT, offsetof(struct task_struct, real_parent));
31 DEFINE(TASK_GROUP_LEADER, offsetof(struct task_struct, group_leader));
31 DEFINE(TASK_TGID, offsetof(struct task_struct, tgid)); 32 DEFINE(TASK_TGID, offsetof(struct task_struct, tgid));
32 BLANK(); 33 BLANK();
33 34
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S
index e38671c922bc..7af15bf7e5ab 100644
--- a/arch/alpha/kernel/entry.S
+++ b/arch/alpha/kernel/entry.S
@@ -879,17 +879,19 @@ sys_getxpid:
879 879
880 /* See linux/kernel/timer.c sys_getppid for discussion 880 /* See linux/kernel/timer.c sys_getppid for discussion
881 about this loop. */ 881 about this loop. */
882 ldq $3, TASK_REAL_PARENT($2) 882 ldq $3, TASK_GROUP_LEADER($2)
8831: ldl $1, TASK_TGID($3) 883 ldq $4, TASK_REAL_PARENT($3)
884 ldl $0, TASK_TGID($2)
8851: ldl $1, TASK_TGID($4)
884#ifdef CONFIG_SMP 886#ifdef CONFIG_SMP
885 mov $3, $4 887 mov $4, $5
886 mb 888 mb
887 ldq $3, TASK_REAL_PARENT($2) 889 ldq $3, TASK_GROUP_LEADER($2)
888 cmpeq $3, $4, $4 890 ldq $4, TASK_REAL_PARENT($3)
889 beq $4, 1b 891 cmpeq $4, $5, $5
892 beq $5, 1b
890#endif 893#endif
891 stq $1, 80($sp) 894 stq $1, 80($sp)
892 ldl $0, TASK_TGID($2)
893 ret 895 ret
894.end sys_getxpid 896.end sys_getxpid
895 897
diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c
index 76be5cf0de13..da677f829f76 100644
--- a/arch/alpha/kernel/irq.c
+++ b/arch/alpha/kernel/irq.c
@@ -68,34 +68,32 @@ show_interrupts(struct seq_file *p, void *v)
68#ifdef CONFIG_SMP 68#ifdef CONFIG_SMP
69 int j; 69 int j;
70#endif 70#endif
71 int i = *(loff_t *) v; 71 int irq = *(loff_t *) v;
72 struct irqaction * action; 72 struct irqaction * action;
73 unsigned long flags; 73 unsigned long flags;
74 74
75#ifdef CONFIG_SMP 75#ifdef CONFIG_SMP
76 if (i == 0) { 76 if (irq == 0) {
77 seq_puts(p, " "); 77 seq_puts(p, " ");
78 for (i = 0; i < NR_CPUS; i++) 78 for_each_online_cpu(j)
79 if (cpu_online(i)) 79 seq_printf(p, "CPU%d ", j);
80 seq_printf(p, "CPU%d ", i);
81 seq_putc(p, '\n'); 80 seq_putc(p, '\n');
82 } 81 }
83#endif 82#endif
84 83
85 if (i < ACTUAL_NR_IRQS) { 84 if (irq < ACTUAL_NR_IRQS) {
86 spin_lock_irqsave(&irq_desc[i].lock, flags); 85 spin_lock_irqsave(&irq_desc[irq].lock, flags);
87 action = irq_desc[i].action; 86 action = irq_desc[irq].action;
88 if (!action) 87 if (!action)
89 goto unlock; 88 goto unlock;
90 seq_printf(p, "%3d: ",i); 89 seq_printf(p, "%3d: ", irq);
91#ifndef CONFIG_SMP 90#ifndef CONFIG_SMP
92 seq_printf(p, "%10u ", kstat_irqs(i)); 91 seq_printf(p, "%10u ", kstat_irqs(irq));
93#else 92#else
94 for (j = 0; j < NR_CPUS; j++) 93 for_each_online_cpu(j)
95 if (cpu_online(j)) 94 seq_printf(p, "%10u ", kstat_cpu(j).irqs[irq]);
96 seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
97#endif 95#endif
98 seq_printf(p, " %14s", irq_desc[i].handler->typename); 96 seq_printf(p, " %14s", irq_desc[irq].handler->typename);
99 seq_printf(p, " %c%s", 97 seq_printf(p, " %c%s",
100 (action->flags & SA_INTERRUPT)?'+':' ', 98 (action->flags & SA_INTERRUPT)?'+':' ',
101 action->name); 99 action->name);
@@ -108,13 +106,12 @@ show_interrupts(struct seq_file *p, void *v)
108 106
109 seq_putc(p, '\n'); 107 seq_putc(p, '\n');
110unlock: 108unlock:
111 spin_unlock_irqrestore(&irq_desc[i].lock, flags); 109 spin_unlock_irqrestore(&irq_desc[irq].lock, flags);
112 } else if (i == ACTUAL_NR_IRQS) { 110 } else if (irq == ACTUAL_NR_IRQS) {
113#ifdef CONFIG_SMP 111#ifdef CONFIG_SMP
114 seq_puts(p, "IPI: "); 112 seq_puts(p, "IPI: ");
115 for (i = 0; i < NR_CPUS; i++) 113 for_each_online_cpu(j)
116 if (cpu_online(i)) 114 seq_printf(p, "%10lu ", cpu_data[j].ipi_count);
117 seq_printf(p, "%10lu ", cpu_data[i].ipi_count);
118 seq_putc(p, '\n'); 115 seq_putc(p, '\n');
119#endif 116#endif
120 seq_printf(p, "ERR: %10lu\n", irq_err_count); 117 seq_printf(p, "ERR: %10lu\n", irq_err_count);
@@ -122,7 +119,6 @@ unlock:
122 return 0; 119 return 0;
123} 120}
124 121
125
126/* 122/*
127 * handle_irq handles all normal device IRQ's (the special 123 * handle_irq handles all normal device IRQ's (the special
128 * SMP cross-CPU interrupts have their own specific 124 * SMP cross-CPU interrupts have their own specific
@@ -155,8 +151,13 @@ handle_irq(int irq, struct pt_regs * regs)
155 } 151 }
156 152
157 irq_enter(); 153 irq_enter();
154 /*
155 * __do_IRQ() must be called with IPL_MAX. Note that we do not
156 * explicitly enable interrupts afterwards - some MILO PALcode
157 * (namely LX164 one) seems to have severe problems with RTI
158 * at IPL 0.
159 */
158 local_irq_disable(); 160 local_irq_disable();
159 __do_IRQ(irq, regs); 161 __do_IRQ(irq, regs);
160 local_irq_enable();
161 irq_exit(); 162 irq_exit();
162} 163}
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c
index 4b873527ce1c..02c2db08114a 100644
--- a/arch/alpha/kernel/smp.c
+++ b/arch/alpha/kernel/smp.c
@@ -73,9 +73,6 @@ cpumask_t cpu_online_map;
73 73
74EXPORT_SYMBOL(cpu_online_map); 74EXPORT_SYMBOL(cpu_online_map);
75 75
76/* cpus reported in the hwrpb */
77static unsigned long hwrpb_cpu_present_mask __initdata = 0;
78
79int smp_num_probed; /* Internal processor count */ 76int smp_num_probed; /* Internal processor count */
80int smp_num_cpus = 1; /* Number that came online. */ 77int smp_num_cpus = 1; /* Number that came online. */
81 78
@@ -442,7 +439,7 @@ setup_smp(void)
442 if ((cpu->flags & 0x1cc) == 0x1cc) { 439 if ((cpu->flags & 0x1cc) == 0x1cc) {
443 smp_num_probed++; 440 smp_num_probed++;
444 /* Assume here that "whami" == index */ 441 /* Assume here that "whami" == index */
445 hwrpb_cpu_present_mask |= (1UL << i); 442 cpu_set(i, cpu_possible_map);
446 cpu->pal_revision = boot_cpu_palrev; 443 cpu->pal_revision = boot_cpu_palrev;
447 } 444 }
448 445
@@ -453,12 +450,12 @@ setup_smp(void)
453 } 450 }
454 } else { 451 } else {
455 smp_num_probed = 1; 452 smp_num_probed = 1;
456 hwrpb_cpu_present_mask = (1UL << boot_cpuid); 453 cpu_set(boot_cpuid, cpu_possible_map);
457 } 454 }
458 cpu_present_mask = cpumask_of_cpu(boot_cpuid); 455 cpu_present_mask = cpumask_of_cpu(boot_cpuid);
459 456
460 printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n", 457 printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
461 smp_num_probed, hwrpb_cpu_present_mask); 458 smp_num_probed, cpu_possible_map.bits[0]);
462} 459}
463 460
464/* 461/*
@@ -467,8 +464,6 @@ setup_smp(void)
467void __init 464void __init
468smp_prepare_cpus(unsigned int max_cpus) 465smp_prepare_cpus(unsigned int max_cpus)
469{ 466{
470 int cpu_count, i;
471
472 /* Take care of some initial bookkeeping. */ 467 /* Take care of some initial bookkeeping. */
473 memset(ipi_data, 0, sizeof(ipi_data)); 468 memset(ipi_data, 0, sizeof(ipi_data));
474 469
@@ -486,19 +481,7 @@ smp_prepare_cpus(unsigned int max_cpus)
486 481
487 printk(KERN_INFO "SMP starting up secondaries.\n"); 482 printk(KERN_INFO "SMP starting up secondaries.\n");
488 483
489 cpu_count = 1; 484 smp_num_cpus = smp_num_probed;
490 for (i = 0; (i < NR_CPUS) && (cpu_count < max_cpus); i++) {
491 if (i == boot_cpuid)
492 continue;
493
494 if (((hwrpb_cpu_present_mask >> i) & 1) == 0)
495 continue;
496
497 cpu_set(i, cpu_possible_map);
498 cpu_count++;
499 }
500
501 smp_num_cpus = cpu_count;
502} 485}
503 486
504void __devinit 487void __devinit
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 5959e36c3b4c..32ba00bd0a2f 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -10,9 +10,9 @@ config ARM
10 default y 10 default y
11 help 11 help
12 The ARM series is a line of low-power-consumption RISC chip designs 12 The ARM series is a line of low-power-consumption RISC chip designs
13 licensed by ARM ltd and targeted at embedded applications and 13 licensed by ARM Ltd and targeted at embedded applications and
14 handhelds such as the Compaq IPAQ. ARM-based PCs are no longer 14 handhelds such as the Compaq IPAQ. ARM-based PCs are no longer
15 manufactured, but legacy ARM-based PC hardware remains popular in 15 manufactured, but legacy ARM-based PC hardware remains popular in
16 Europe. There is an ARM Linux project with a web page at 16 Europe. There is an ARM Linux project with a web page at
17 <http://www.arm.linux.org.uk/>. 17 <http://www.arm.linux.org.uk/>.
18 18
@@ -69,57 +69,77 @@ config GENERIC_ISA_DMA
69config FIQ 69config FIQ
70 bool 70 bool
71 71
72config ARCH_MTD_XIP
73 bool
74
72source "init/Kconfig" 75source "init/Kconfig"
73 76
74menu "System Type" 77menu "System Type"
75 78
76choice 79choice
77 prompt "ARM system type" 80 prompt "ARM system type"
78 default ARCH_RPC 81 default ARCH_VERSATILE
79 82
80config ARCH_CLPS7500 83config ARCH_CLPS7500
81 bool "Cirrus-CL-PS7500FE" 84 bool "Cirrus-CL-PS7500FE"
82 select TIMER_ACORN 85 select TIMER_ACORN
83 select ISA 86 select ISA
87 help
88 Support for the Cirrus Logic PS7500FE system-on-a-chip.
84 89
85config ARCH_CLPS711X 90config ARCH_CLPS711X
86 bool "CLPS711x/EP721x-based" 91 bool "CLPS711x/EP721x-based"
92 help
93 Support for Cirrus Logic 711x/721x based boards.
87 94
88config ARCH_CO285 95config ARCH_CO285
89 bool "Co-EBSA285" 96 bool "Co-EBSA285"
90 select FOOTBRIDGE 97 select FOOTBRIDGE
91 select FOOTBRIDGE_ADDIN 98 select FOOTBRIDGE_ADDIN
99 help
100 Support for Intel's EBSA285 companion chip.
92 101
93config ARCH_EBSA110 102config ARCH_EBSA110
94 bool "EBSA-110" 103 bool "EBSA-110"
95 select ISA 104 select ISA
96 help 105 help
97 This is an evaluation board for the StrongARM processor available 106 This is an evaluation board for the StrongARM processor available
98 from Digital. It has limited hardware on-board, including an onboard 107 from Digital. It has limited hardware on-board, including an
99 Ethernet interface, two PCMCIA sockets, two serial ports and a 108 Ethernet interface, two PCMCIA sockets, two serial ports and a
100 parallel port. 109 parallel port.
101 110
102config ARCH_FOOTBRIDGE 111config ARCH_FOOTBRIDGE
103 bool "FootBridge" 112 bool "FootBridge"
104 select FOOTBRIDGE 113 select FOOTBRIDGE
114 help
115 Support for systems based on the DC21285 companion chip
116 ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder.
105 117
106config ARCH_INTEGRATOR 118config ARCH_INTEGRATOR
107 bool "Integrator" 119 bool "Integrator"
108 select ARM_AMBA 120 select ARM_AMBA
109 select ICST525 121 select ICST525
122 help
123 Support for ARM's Integrator platform.
110 124
111config ARCH_IOP3XX 125config ARCH_IOP3XX
112 bool "IOP3xx-based" 126 bool "IOP3xx-based"
113 select PCI 127 select PCI
128 help
129 Support for Intel's IOP3XX (XScale) family of processors.
114 130
115config ARCH_IXP4XX 131config ARCH_IXP4XX
116 bool "IXP4xx-based" 132 bool "IXP4xx-based"
117 select DMABOUNCE 133 select DMABOUNCE
118 select PCI 134 select PCI
135 help
136 Support for Intel's IXP4XX (XScale) family of processors.
119 137
120config ARCH_IXP2000 138config ARCH_IXP2000
121 bool "IXP2400/2800-based" 139 bool "IXP2400/2800-based"
122 select PCI 140 select PCI
141 help
142 Support for Intel's IXP2400/2800 (XScale) family of processors.
123 143
124config ARCH_L7200 144config ARCH_L7200
125 bool "LinkUp-L7200" 145 bool "LinkUp-L7200"
@@ -136,6 +156,9 @@ config ARCH_L7200
136 156
137config ARCH_PXA 157config ARCH_PXA
138 bool "PXA2xx-based" 158 bool "PXA2xx-based"
159 select ARCH_MTD_XIP
160 help
161 Support for Intel's PXA2XX processor line.
139 162
140config ARCH_RPC 163config ARCH_RPC
141 bool "RiscPC" 164 bool "RiscPC"
@@ -152,19 +175,25 @@ config ARCH_SA1100
152 bool "SA1100-based" 175 bool "SA1100-based"
153 select ISA 176 select ISA
154 select ARCH_DISCONTIGMEM_ENABLE 177 select ARCH_DISCONTIGMEM_ENABLE
178 select ARCH_MTD_XIP
179 help
180 Support for StrongARM 11x0 based boards.
155 181
156config ARCH_S3C2410 182config ARCH_S3C2410
157 bool "Samsung S3C2410" 183 bool "Samsung S3C2410"
158 help 184 help
159 Samsung S3C2410X CPU based systems, such as the Simtec Electronics 185 Samsung S3C2410X CPU based systems, such as the Simtec Electronics
160 BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or 186 BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
161 the Samsung SMDK2410 development board (and derviatives). 187 the Samsung SMDK2410 development board (and derivatives).
162 188
163config ARCH_SHARK 189config ARCH_SHARK
164 bool "Shark" 190 bool "Shark"
165 select ISA 191 select ISA
166 select ISA_DMA 192 select ISA_DMA
167 select PCI 193 select PCI
194 help
195 Support for the StrongARM based Digital DNARD machine, also known
196 as "Shark" (<http://www.shark-linux.de/shark.html>).
168 197
169config ARCH_LH7A40X 198config ARCH_LH7A40X
170 bool "Sharp LH7A40X" 199 bool "Sharp LH7A40X"
@@ -176,6 +205,8 @@ config ARCH_LH7A40X
176 205
177config ARCH_OMAP 206config ARCH_OMAP
178 bool "TI OMAP" 207 bool "TI OMAP"
208 help
209 Support for TI's OMAP platform (OMAP1 and OMAP2).
179 210
180config ARCH_VERSATILE 211config ARCH_VERSATILE
181 bool "Versatile" 212 bool "Versatile"
@@ -194,6 +225,8 @@ config ARCH_REALVIEW
194 225
195config ARCH_IMX 226config ARCH_IMX
196 bool "IMX" 227 bool "IMX"
228 help
229 Support for Motorola's i.MX family of processors (MX1, MXL).
197 230
198config ARCH_H720X 231config ARCH_H720X
199 bool "Hynix-HMS720x-based" 232 bool "Hynix-HMS720x-based"
@@ -210,8 +243,8 @@ config ARCH_AAEC2000
210config ARCH_AT91RM9200 243config ARCH_AT91RM9200
211 bool "AT91RM9200" 244 bool "AT91RM9200"
212 help 245 help
213 Say Y here if you intend to run this kernel on an AT91RM9200-based 246 Say Y here if you intend to run this kernel on an Atmel
214 board. 247 AT91RM9200-based board.
215 248
216endchoice 249endchoice
217 250
@@ -417,8 +450,8 @@ config AEABI
417 To use this you need GCC version 4.0.0 or later. 450 To use this you need GCC version 4.0.0 or later.
418 451
419config OABI_COMPAT 452config OABI_COMPAT
420 bool "Allow old ABI binaries to run with this kernel" 453 bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
421 depends on AEABI 454 depends on AEABI && EXPERIMENTAL
422 default y 455 default y
423 help 456 help
424 This option preserves the old syscall interface along with the 457 This option preserves the old syscall interface along with the
@@ -766,6 +799,8 @@ source "drivers/i2c/Kconfig"
766 799
767source "drivers/spi/Kconfig" 800source "drivers/spi/Kconfig"
768 801
802source "drivers/w1/Kconfig"
803
769source "drivers/hwmon/Kconfig" 804source "drivers/hwmon/Kconfig"
770 805
771#source "drivers/l3/Kconfig" 806#source "drivers/l3/Kconfig"
diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index 159ad7ed7a40..d31b1cb7eea0 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -629,6 +629,22 @@ static int locomo_resume(struct platform_device *dev)
629} 629}
630#endif 630#endif
631 631
632
633#define LCM_ALC_EN 0x8000
634
635void frontlight_set(struct locomo *lchip, int duty, int vr, int bpwf)
636{
637 unsigned long flags;
638
639 spin_lock_irqsave(&lchip->lock, flags);
640 locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
641 udelay(100);
642 locomo_writel(duty, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
643 locomo_writel(bpwf | LCM_ALC_EN, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
644 spin_unlock_irqrestore(&lchip->lock, flags);
645}
646
647
632/** 648/**
633 * locomo_probe - probe for a single LoCoMo chip. 649 * locomo_probe - probe for a single LoCoMo chip.
634 * @phys_addr: physical address of device. 650 * @phys_addr: physical address of device.
@@ -688,6 +704,11 @@ __locomo_probe(struct device *me, struct resource *mem, int irq)
688 /* FrontLight */ 704 /* FrontLight */
689 locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS); 705 locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
690 locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD); 706 locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
707
708 /* Same constants can be used for collie and poodle
709 (depending on CONFIG options in original sharp code)? */
710 frontlight_set(lchip, 163, 0, 148);
711
691 /* Longtime timer */ 712 /* Longtime timer */
692 locomo_writel(0, lchip->base + LOCOMO_LTINT); 713 locomo_writel(0, lchip->base + LOCOMO_LTINT);
693 /* SPI */ 714 /* SPI */
diff --git a/arch/arm/common/rtctime.c b/arch/arm/common/rtctime.c
index 48b1e19b131f..e851d86c212c 100644
--- a/arch/arm/common/rtctime.c
+++ b/arch/arm/common/rtctime.c
@@ -128,19 +128,27 @@ EXPORT_SYMBOL(rtc_tm_to_time);
128/* 128/*
129 * Calculate the next alarm time given the requested alarm time mask 129 * Calculate the next alarm time given the requested alarm time mask
130 * and the current time. 130 * and the current time.
131 *
132 * FIXME: for now, we just copy the alarm time because we're lazy (and
133 * is therefore buggy - setting a 10am alarm at 8pm will not result in
134 * the alarm triggering.)
135 */ 131 */
136void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm) 132void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm)
137{ 133{
134 unsigned long next_time;
135 unsigned long now_time;
136
138 next->tm_year = now->tm_year; 137 next->tm_year = now->tm_year;
139 next->tm_mon = now->tm_mon; 138 next->tm_mon = now->tm_mon;
140 next->tm_mday = now->tm_mday; 139 next->tm_mday = now->tm_mday;
141 next->tm_hour = alrm->tm_hour; 140 next->tm_hour = alrm->tm_hour;
142 next->tm_min = alrm->tm_min; 141 next->tm_min = alrm->tm_min;
143 next->tm_sec = alrm->tm_sec; 142 next->tm_sec = alrm->tm_sec;
143
144 rtc_tm_to_time(now, &now_time);
145 rtc_tm_to_time(next, &next_time);
146
147 if (next_time < now_time) {
148 /* Advance one day */
149 next_time += 60 * 60 * 24;
150 rtc_time_to_tm(next_time, next);
151 }
144} 152}
145 153
146static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm) 154static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm)
diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig
index 5cdd13acf8ff..1fe73d198888 100644
--- a/arch/arm/configs/at91rm9200dk_defconfig
+++ b/arch/arm/configs/at91rm9200dk_defconfig
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
85# CONFIG_ARCH_CLPS711X is not set 85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set 86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set 87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set 88# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set 89# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set 90# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/at91rm9200ek_defconfig b/arch/arm/configs/at91rm9200ek_defconfig
index 20838ccf1da7..b7d934cdb1b7 100644
--- a/arch/arm/configs/at91rm9200ek_defconfig
+++ b/arch/arm/configs/at91rm9200ek_defconfig
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
85# CONFIG_ARCH_CLPS711X is not set 85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set 86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set 87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set 88# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set 89# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set 90# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/bast_defconfig b/arch/arm/configs/bast_defconfig
index 6886001b5366..4a8564f386af 100644
--- a/arch/arm/configs/bast_defconfig
+++ b/arch/arm/configs/bast_defconfig
@@ -14,8 +14,7 @@ CONFIG_GENERIC_IOMAP=y
14# Code maturity level options 14# Code maturity level options
15# 15#
16CONFIG_EXPERIMENTAL=y 16CONFIG_EXPERIMENTAL=y
17# CONFIG_CLEAN_COMPILE is not set 17CONFIG_CLEAN_COMPILE=y
18CONFIG_BROKEN=y
19CONFIG_BROKEN_ON_SMP=y 18CONFIG_BROKEN_ON_SMP=y
20 19
21# 20#
@@ -360,7 +359,6 @@ CONFIG_BLK_DEV_IDE_BAST=y
360# 359#
361# IEEE 1394 (FireWire) support 360# IEEE 1394 (FireWire) support
362# 361#
363# CONFIG_IEEE1394 is not set
364 362
365# 363#
366# I2O device support 364# I2O device support
@@ -781,7 +779,6 @@ CONFIG_SYSFS=y
781# CONFIG_DEVFS_FS is not set 779# CONFIG_DEVFS_FS is not set
782# CONFIG_DEVPTS_FS_XATTR is not set 780# CONFIG_DEVPTS_FS_XATTR is not set
783# CONFIG_TMPFS is not set 781# CONFIG_TMPFS is not set
784# CONFIG_HUGETLBFS is not set
785# CONFIG_HUGETLB_PAGE is not set 782# CONFIG_HUGETLB_PAGE is not set
786CONFIG_RAMFS=y 783CONFIG_RAMFS=y
787 784
diff --git a/arch/arm/configs/collie_defconfig b/arch/arm/configs/collie_defconfig
index 15468a0cf70e..c9aa878e610a 100644
--- a/arch/arm/configs/collie_defconfig
+++ b/arch/arm/configs/collie_defconfig
@@ -13,8 +13,7 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y
13# Code maturity level options 13# Code maturity level options
14# 14#
15CONFIG_EXPERIMENTAL=y 15CONFIG_EXPERIMENTAL=y
16# CONFIG_CLEAN_COMPILE is not set 16CONFIG_CLEAN_COMPILE=y
17CONFIG_BROKEN=y
18CONFIG_BROKEN_ON_SMP=y 17CONFIG_BROKEN_ON_SMP=y
19CONFIG_LOCK_KERNEL=y 18CONFIG_LOCK_KERNEL=y
20CONFIG_INIT_ENV_ARG_LIMIT=32 19CONFIG_INIT_ENV_ARG_LIMIT=32
@@ -308,9 +307,7 @@ CONFIG_MTD_CFI_I2=y
308# CONFIG_MTD_ROM is not set 307# CONFIG_MTD_ROM is not set
309# CONFIG_MTD_ABSENT is not set 308# CONFIG_MTD_ABSENT is not set
310CONFIG_MTD_OBSOLETE_CHIPS=y 309CONFIG_MTD_OBSOLETE_CHIPS=y
311# CONFIG_MTD_AMDSTD is not set
312CONFIG_MTD_SHARP=y 310CONFIG_MTD_SHARP=y
313# CONFIG_MTD_JEDEC is not set
314 311
315# 312#
316# Mapping drivers for chip access 313# Mapping drivers for chip access
@@ -396,7 +393,6 @@ CONFIG_ATA_OVER_ETH=m
396# 393#
397# IEEE 1394 (FireWire) support 394# IEEE 1394 (FireWire) support
398# 395#
399# CONFIG_IEEE1394 is not set
400 396
401# 397#
402# I2O device support 398# I2O device support
@@ -741,7 +737,6 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
741CONFIG_PROC_FS=y 737CONFIG_PROC_FS=y
742CONFIG_SYSFS=y 738CONFIG_SYSFS=y
743CONFIG_TMPFS=y 739CONFIG_TMPFS=y
744# CONFIG_HUGETLBFS is not set
745# CONFIG_HUGETLB_PAGE is not set 740# CONFIG_HUGETLB_PAGE is not set
746CONFIG_RAMFS=y 741CONFIG_RAMFS=y
747# CONFIG_RELAYFS_FS is not set 742# CONFIG_RELAYFS_FS is not set
diff --git a/arch/arm/configs/csb337_defconfig b/arch/arm/configs/csb337_defconfig
index 885a3184830a..94bd9932a402 100644
--- a/arch/arm/configs/csb337_defconfig
+++ b/arch/arm/configs/csb337_defconfig
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
85# CONFIG_ARCH_CLPS711X is not set 85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set 86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set 87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set 88# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set 89# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set 90# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/csb637_defconfig b/arch/arm/configs/csb637_defconfig
index 95a96a5462a0..1519124c5501 100644
--- a/arch/arm/configs/csb637_defconfig
+++ b/arch/arm/configs/csb637_defconfig
@@ -85,7 +85,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
85# CONFIG_ARCH_CLPS711X is not set 85# CONFIG_ARCH_CLPS711X is not set
86# CONFIG_ARCH_CO285 is not set 86# CONFIG_ARCH_CO285 is not set
87# CONFIG_ARCH_EBSA110 is not set 87# CONFIG_ARCH_EBSA110 is not set
88# CONFIG_ARCH_CAMELOT is not set
89# CONFIG_ARCH_FOOTBRIDGE is not set 88# CONFIG_ARCH_FOOTBRIDGE is not set
90# CONFIG_ARCH_INTEGRATOR is not set 89# CONFIG_ARCH_INTEGRATOR is not set
91# CONFIG_ARCH_IOP3XX is not set 90# CONFIG_ARCH_IOP3XX is not set
diff --git a/arch/arm/configs/enp2611_defconfig b/arch/arm/configs/enp2611_defconfig
index 9592e3925c79..5fdaf3ce9d56 100644
--- a/arch/arm/configs/enp2611_defconfig
+++ b/arch/arm/configs/enp2611_defconfig
@@ -171,7 +171,7 @@ CONFIG_ALIGNMENT_TRAP=y
171# 171#
172CONFIG_ZBOOT_ROM_TEXT=0x0 172CONFIG_ZBOOT_ROM_TEXT=0x0
173CONFIG_ZBOOT_ROM_BSS=0x0 173CONFIG_ZBOOT_ROM_BSS=0x0
174CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware" 174CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0"
175# CONFIG_XIP_KERNEL is not set 175# CONFIG_XIP_KERNEL is not set
176 176
177# 177#
diff --git a/arch/arm/configs/ixdp2400_defconfig b/arch/arm/configs/ixdp2400_defconfig
index d9d6bb86a6fa..c67fc449a11f 100644
--- a/arch/arm/configs/ixdp2400_defconfig
+++ b/arch/arm/configs/ixdp2400_defconfig
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
172# 172#
173CONFIG_ZBOOT_ROM_TEXT=0x0 173CONFIG_ZBOOT_ROM_TEXT=0x0
174CONFIG_ZBOOT_ROM_BSS=0x0 174CONFIG_ZBOOT_ROM_BSS=0x0
175CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware" 175CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0"
176# CONFIG_XIP_KERNEL is not set 176# CONFIG_XIP_KERNEL is not set
177 177
178# 178#
diff --git a/arch/arm/configs/ixdp2401_defconfig b/arch/arm/configs/ixdp2401_defconfig
index 2dc9d499c7d7..60d66e82c51f 100644
--- a/arch/arm/configs/ixdp2401_defconfig
+++ b/arch/arm/configs/ixdp2401_defconfig
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
172# 172#
173CONFIG_ZBOOT_ROM_TEXT=0x0 173CONFIG_ZBOOT_ROM_TEXT=0x0
174CONFIG_ZBOOT_ROM_BSS=0x0 174CONFIG_ZBOOT_ROM_BSS=0x0
175CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware" 175CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0"
176# CONFIG_XIP_KERNEL is not set 176# CONFIG_XIP_KERNEL is not set
177 177
178# 178#
diff --git a/arch/arm/configs/ixdp2801_defconfig b/arch/arm/configs/ixdp2801_defconfig
index ea8f4b478fa3..f54f3dcc5b33 100644
--- a/arch/arm/configs/ixdp2801_defconfig
+++ b/arch/arm/configs/ixdp2801_defconfig
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
172# 172#
173CONFIG_ZBOOT_ROM_TEXT=0x0 173CONFIG_ZBOOT_ROM_TEXT=0x0
174CONFIG_ZBOOT_ROM_BSS=0x0 174CONFIG_ZBOOT_ROM_BSS=0x0
175CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware ixdp2x01_clock=50000000" 175CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0"
176# CONFIG_XIP_KERNEL is not set 176# CONFIG_XIP_KERNEL is not set
177 177
178# 178#
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig
index 33f31080a98c..6695b07cf1ba 100644
--- a/arch/arm/configs/s3c2410_defconfig
+++ b/arch/arm/configs/s3c2410_defconfig
@@ -1,11 +1,10 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc1 3# Linux kernel version: 2.6.16-rc2
4# Sun Nov 13 17:41:24 2005 4# Mon Feb 6 11:17:23 2006
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_MMU=y 7CONFIG_MMU=y
8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 8CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y 9CONFIG_GENERIC_CALIBRATE_DELAY=y
11 10
@@ -13,8 +12,7 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y
13# Code maturity level options 12# Code maturity level options
14# 13#
15CONFIG_EXPERIMENTAL=y 14CONFIG_EXPERIMENTAL=y
16# CONFIG_CLEAN_COMPILE is not set 15CONFIG_CLEAN_COMPILE=y
17CONFIG_BROKEN=y
18CONFIG_BROKEN_ON_SMP=y 16CONFIG_BROKEN_ON_SMP=y
19CONFIG_INIT_ENV_ARG_LIMIT=32 17CONFIG_INIT_ENV_ARG_LIMIT=32
20 18
@@ -29,27 +27,31 @@ CONFIG_SYSVIPC=y
29# CONFIG_BSD_PROCESS_ACCT is not set 27# CONFIG_BSD_PROCESS_ACCT is not set
30CONFIG_SYSCTL=y 28CONFIG_SYSCTL=y
31# CONFIG_AUDIT is not set 29# CONFIG_AUDIT is not set
32# CONFIG_HOTPLUG is not set
33CONFIG_KOBJECT_UEVENT=y
34# CONFIG_IKCONFIG is not set 30# CONFIG_IKCONFIG is not set
35CONFIG_INITRAMFS_SOURCE="" 31CONFIG_INITRAMFS_SOURCE=""
32CONFIG_UID16=y
33CONFIG_CC_OPTIMIZE_FOR_SIZE=y
36# CONFIG_EMBEDDED is not set 34# CONFIG_EMBEDDED is not set
37CONFIG_KALLSYMS=y 35CONFIG_KALLSYMS=y
38# CONFIG_KALLSYMS_ALL is not set 36# CONFIG_KALLSYMS_ALL is not set
39# CONFIG_KALLSYMS_EXTRA_PASS is not set 37# CONFIG_KALLSYMS_EXTRA_PASS is not set
38CONFIG_HOTPLUG=y
40CONFIG_PRINTK=y 39CONFIG_PRINTK=y
41CONFIG_BUG=y 40CONFIG_BUG=y
41CONFIG_ELF_CORE=y
42CONFIG_BASE_FULL=y 42CONFIG_BASE_FULL=y
43CONFIG_FUTEX=y 43CONFIG_FUTEX=y
44CONFIG_EPOLL=y 44CONFIG_EPOLL=y
45CONFIG_CC_OPTIMIZE_FOR_SIZE=y
46CONFIG_SHMEM=y 45CONFIG_SHMEM=y
47CONFIG_CC_ALIGN_FUNCTIONS=0 46CONFIG_CC_ALIGN_FUNCTIONS=0
48CONFIG_CC_ALIGN_LABELS=0 47CONFIG_CC_ALIGN_LABELS=0
49CONFIG_CC_ALIGN_LOOPS=0 48CONFIG_CC_ALIGN_LOOPS=0
50CONFIG_CC_ALIGN_JUMPS=0 49CONFIG_CC_ALIGN_JUMPS=0
50CONFIG_SLAB=y
51# CONFIG_TINY_SHMEM is not set 51# CONFIG_TINY_SHMEM is not set
52CONFIG_BASE_SMALL=0 52CONFIG_BASE_SMALL=0
53# CONFIG_SLOB is not set
54CONFIG_OBSOLETE_INTERMODULE=y
53 55
54# 56#
55# Loadable module support 57# Loadable module support
@@ -103,6 +105,7 @@ CONFIG_ARCH_S3C2410=y
103# CONFIG_ARCH_IMX is not set 105# CONFIG_ARCH_IMX is not set
104# CONFIG_ARCH_H720X is not set 106# CONFIG_ARCH_H720X is not set
105# CONFIG_ARCH_AAEC2000 is not set 107# CONFIG_ARCH_AAEC2000 is not set
108# CONFIG_ARCH_AT91RM9200 is not set
106 109
107# 110#
108# S3C24XX Implementations 111# S3C24XX Implementations
@@ -161,7 +164,6 @@ CONFIG_CPU_TLB_V4WBI=y
161# Bus support 164# Bus support
162# 165#
163CONFIG_ISA=y 166CONFIG_ISA=y
164CONFIG_ISA_DMA_API=y
165 167
166# 168#
167# PCCARD (PCMCIA/CardBus) support 169# PCCARD (PCMCIA/CardBus) support
@@ -173,6 +175,7 @@ CONFIG_ISA_DMA_API=y
173# 175#
174# CONFIG_PREEMPT is not set 176# CONFIG_PREEMPT is not set
175# CONFIG_NO_IDLE_HZ is not set 177# CONFIG_NO_IDLE_HZ is not set
178# CONFIG_AEABI is not set
176# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set 179# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
177CONFIG_SELECT_MEMORY_MODEL=y 180CONFIG_SELECT_MEMORY_MODEL=y
178CONFIG_FLATMEM_MANUAL=y 181CONFIG_FLATMEM_MANUAL=y
@@ -215,6 +218,8 @@ CONFIG_BINFMT_AOUT=y
215# Power management options 218# Power management options
216# 219#
217CONFIG_PM=y 220CONFIG_PM=y
221CONFIG_PM_LEGACY=y
222# CONFIG_PM_DEBUG is not set
218CONFIG_APM=y 223CONFIG_APM=y
219 224
220# 225#
@@ -260,6 +265,11 @@ CONFIG_TCP_CONG_BIC=y
260# SCTP Configuration (EXPERIMENTAL) 265# SCTP Configuration (EXPERIMENTAL)
261# 266#
262# CONFIG_IP_SCTP is not set 267# CONFIG_IP_SCTP is not set
268
269#
270# TIPC Configuration (EXPERIMENTAL)
271#
272# CONFIG_TIPC is not set
263# CONFIG_ATM is not set 273# CONFIG_ATM is not set
264# CONFIG_BRIDGE is not set 274# CONFIG_BRIDGE is not set
265# CONFIG_VLAN_8021Q is not set 275# CONFIG_VLAN_8021Q is not set
@@ -277,7 +287,6 @@ CONFIG_TCP_CONG_BIC=y
277# QoS and/or fair queueing 287# QoS and/or fair queueing
278# 288#
279# CONFIG_NET_SCHED is not set 289# CONFIG_NET_SCHED is not set
280# CONFIG_NET_CLS_ROUTE is not set
281 290
282# 291#
283# Network testing 292# Network testing
@@ -301,6 +310,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
301# CONFIG_DEBUG_DRIVER is not set 310# CONFIG_DEBUG_DRIVER is not set
302 311
303# 312#
313# Connector - unified userspace <-> kernelspace linker
314#
315# CONFIG_CONNECTOR is not set
316
317#
304# Memory Technology Devices (MTD) 318# Memory Technology Devices (MTD)
305# 319#
306CONFIG_MTD=y 320CONFIG_MTD=y
@@ -413,8 +427,6 @@ CONFIG_PARPORT_1284=y
413# 427#
414# Block devices 428# Block devices
415# 429#
416# CONFIG_BLK_DEV_XD is not set
417# CONFIG_PARIDE is not set
418# CONFIG_BLK_DEV_COW_COMMON is not set 430# CONFIG_BLK_DEV_COW_COMMON is not set
419CONFIG_BLK_DEV_LOOP=y 431CONFIG_BLK_DEV_LOOP=y
420# CONFIG_BLK_DEV_CRYPTOLOOP is not set 432# CONFIG_BLK_DEV_CRYPTOLOOP is not set
@@ -473,7 +485,6 @@ CONFIG_BLK_DEV_IDE_BAST=y
473# 485#
474# IEEE 1394 (FireWire) support 486# IEEE 1394 (FireWire) support
475# 487#
476# CONFIG_IEEE1394 is not set
477 488
478# 489#
479# I2O device support 490# I2O device support
@@ -504,7 +515,6 @@ CONFIG_NETDEVICES=y
504CONFIG_NET_ETHERNET=y 515CONFIG_NET_ETHERNET=y
505CONFIG_MII=y 516CONFIG_MII=y
506# CONFIG_NET_VENDOR_3COM is not set 517# CONFIG_NET_VENDOR_3COM is not set
507# CONFIG_LANCE is not set
508# CONFIG_NET_VENDOR_SMC is not set 518# CONFIG_NET_VENDOR_SMC is not set
509# CONFIG_SMC91X is not set 519# CONFIG_SMC91X is not set
510CONFIG_DM9000=y 520CONFIG_DM9000=y
@@ -609,11 +619,11 @@ CONFIG_SERIAL_NONSTANDARD=y
609# CONFIG_ROCKETPORT is not set 619# CONFIG_ROCKETPORT is not set
610# CONFIG_CYCLADES is not set 620# CONFIG_CYCLADES is not set
611# CONFIG_DIGIEPCA is not set 621# CONFIG_DIGIEPCA is not set
612# CONFIG_ESPSERIAL is not set
613# CONFIG_MOXA_INTELLIO is not set 622# CONFIG_MOXA_INTELLIO is not set
614# CONFIG_MOXA_SMARTIO is not set 623# CONFIG_MOXA_SMARTIO is not set
615# CONFIG_ISI is not set 624# CONFIG_ISI is not set
616# CONFIG_SYNCLINKMP is not set 625# CONFIG_SYNCLINKMP is not set
626# CONFIG_SYNCLINK_GT is not set
617# CONFIG_N_HDLC is not set 627# CONFIG_N_HDLC is not set
618# CONFIG_RISCOM8 is not set 628# CONFIG_RISCOM8 is not set
619# CONFIG_SPECIALIX is not set 629# CONFIG_SPECIALIX is not set
@@ -627,6 +637,7 @@ CONFIG_SERIAL_NONSTANDARD=y
627CONFIG_SERIAL_8250=y 637CONFIG_SERIAL_8250=y
628CONFIG_SERIAL_8250_CONSOLE=y 638CONFIG_SERIAL_8250_CONSOLE=y
629CONFIG_SERIAL_8250_NR_UARTS=8 639CONFIG_SERIAL_8250_NR_UARTS=8
640CONFIG_SERIAL_8250_RUNTIME_UARTS=4
630CONFIG_SERIAL_8250_EXTENDED=y 641CONFIG_SERIAL_8250_EXTENDED=y
631CONFIG_SERIAL_8250_MANY_PORTS=y 642CONFIG_SERIAL_8250_MANY_PORTS=y
632CONFIG_SERIAL_8250_SHARE_IRQ=y 643CONFIG_SERIAL_8250_SHARE_IRQ=y
@@ -689,6 +700,7 @@ CONFIG_S3C2410_RTC=y
689# 700#
690# TPM devices 701# TPM devices
691# 702#
703# CONFIG_TCG_TPM is not set
692# CONFIG_TELCLOCK is not set 704# CONFIG_TELCLOCK is not set
693 705
694# 706#
@@ -733,6 +745,12 @@ CONFIG_SENSORS_EEPROM=m
733# CONFIG_I2C_DEBUG_CHIP is not set 745# CONFIG_I2C_DEBUG_CHIP is not set
734 746
735# 747#
748# SPI support
749#
750# CONFIG_SPI is not set
751# CONFIG_SPI_MASTER is not set
752
753#
736# Hardware Monitoring support 754# Hardware Monitoring support
737# 755#
738CONFIG_HWMON=y 756CONFIG_HWMON=y
@@ -865,6 +883,7 @@ CONFIG_FS_MBCACHE=y
865# CONFIG_JFS_FS is not set 883# CONFIG_JFS_FS is not set
866# CONFIG_FS_POSIX_ACL is not set 884# CONFIG_FS_POSIX_ACL is not set
867# CONFIG_XFS_FS is not set 885# CONFIG_XFS_FS is not set
886# CONFIG_OCFS2_FS is not set
868# CONFIG_MINIX_FS is not set 887# CONFIG_MINIX_FS is not set
869CONFIG_ROMFS_FS=y 888CONFIG_ROMFS_FS=y
870CONFIG_INOTIFY=y 889CONFIG_INOTIFY=y
@@ -896,10 +915,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
896CONFIG_PROC_FS=y 915CONFIG_PROC_FS=y
897CONFIG_SYSFS=y 916CONFIG_SYSFS=y
898# CONFIG_TMPFS is not set 917# CONFIG_TMPFS is not set
899# CONFIG_HUGETLBFS is not set
900# CONFIG_HUGETLB_PAGE is not set 918# CONFIG_HUGETLB_PAGE is not set
901CONFIG_RAMFS=y 919CONFIG_RAMFS=y
902# CONFIG_RELAYFS_FS is not set 920# CONFIG_RELAYFS_FS is not set
921# CONFIG_CONFIGFS_FS is not set
903 922
904# 923#
905# Miscellaneous filesystems 924# Miscellaneous filesystems
@@ -968,6 +987,7 @@ CONFIG_SOLARIS_X86_PARTITION=y
968# CONFIG_SGI_PARTITION is not set 987# CONFIG_SGI_PARTITION is not set
969# CONFIG_ULTRIX_PARTITION is not set 988# CONFIG_ULTRIX_PARTITION is not set
970# CONFIG_SUN_PARTITION is not set 989# CONFIG_SUN_PARTITION is not set
990# CONFIG_KARMA_PARTITION is not set
971# CONFIG_EFI_PARTITION is not set 991# CONFIG_EFI_PARTITION is not set
972 992
973# 993#
@@ -1023,12 +1043,13 @@ CONFIG_NLS_DEFAULT="iso8859-1"
1023# Kernel hacking 1043# Kernel hacking
1024# 1044#
1025# CONFIG_PRINTK_TIME is not set 1045# CONFIG_PRINTK_TIME is not set
1026CONFIG_DEBUG_KERNEL=y
1027CONFIG_MAGIC_SYSRQ=y 1046CONFIG_MAGIC_SYSRQ=y
1047CONFIG_DEBUG_KERNEL=y
1028CONFIG_LOG_BUF_SHIFT=16 1048CONFIG_LOG_BUF_SHIFT=16
1029CONFIG_DETECT_SOFTLOCKUP=y 1049CONFIG_DETECT_SOFTLOCKUP=y
1030# CONFIG_SCHEDSTATS is not set 1050# CONFIG_SCHEDSTATS is not set
1031# CONFIG_DEBUG_SLAB is not set 1051# CONFIG_DEBUG_SLAB is not set
1052CONFIG_DEBUG_MUTEXES=y
1032# CONFIG_DEBUG_SPINLOCK is not set 1053# CONFIG_DEBUG_SPINLOCK is not set
1033# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1054# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1034# CONFIG_DEBUG_KOBJECT is not set 1055# CONFIG_DEBUG_KOBJECT is not set
@@ -1037,6 +1058,7 @@ CONFIG_DEBUG_INFO=y
1037# CONFIG_DEBUG_FS is not set 1058# CONFIG_DEBUG_FS is not set
1038# CONFIG_DEBUG_VM is not set 1059# CONFIG_DEBUG_VM is not set
1039CONFIG_FRAME_POINTER=y 1060CONFIG_FRAME_POINTER=y
1061CONFIG_FORCED_INLINING=y
1040# CONFIG_RCU_TORTURE_TEST is not set 1062# CONFIG_RCU_TORTURE_TEST is not set
1041CONFIG_DEBUG_USER=y 1063CONFIG_DEBUG_USER=y
1042# CONFIG_DEBUG_WAITQ is not set 1064# CONFIG_DEBUG_WAITQ is not set
diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c
index 0abbce8c70bc..b324dcac1c56 100644
--- a/arch/arm/kernel/asm-offsets.c
+++ b/arch/arm/kernel/asm-offsets.c
@@ -57,7 +57,9 @@ int main(void)
57 DEFINE(TI_TP_VALUE, offsetof(struct thread_info, tp_value)); 57 DEFINE(TI_TP_VALUE, offsetof(struct thread_info, tp_value));
58 DEFINE(TI_FPSTATE, offsetof(struct thread_info, fpstate)); 58 DEFINE(TI_FPSTATE, offsetof(struct thread_info, fpstate));
59 DEFINE(TI_VFPSTATE, offsetof(struct thread_info, vfpstate)); 59 DEFINE(TI_VFPSTATE, offsetof(struct thread_info, vfpstate));
60 DEFINE(TI_IWMMXT_STATE, (offsetof(struct thread_info, fpstate)+4)&~7); 60#ifdef CONFIG_IWMMXT
61 DEFINE(TI_IWMMXT_STATE, offsetof(struct thread_info, fpstate.iwmmxt));
62#endif
61 BLANK(); 63 BLANK();
62 DEFINE(S_R0, offsetof(struct pt_regs, ARM_r0)); 64 DEFINE(S_R0, offsetof(struct pt_regs, ARM_r0));
63 DEFINE(S_R1, offsetof(struct pt_regs, ARM_r1)); 65 DEFINE(S_R1, offsetof(struct pt_regs, ARM_r1));
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S
index 75e6f9a94713..3173924a9b60 100644
--- a/arch/arm/kernel/calls.S
+++ b/arch/arm/kernel/calls.S
@@ -7,337 +7,334 @@
7 * it under the terms of the GNU General Public License version 2 as 7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 * 9 *
10 * This file is included twice in entry-common.S 10 * This file is included thrice in entry-common.S
11 */ 11 */
12#ifndef NR_syscalls 12/* 0 */ CALL(sys_restart_syscall)
13#define NR_syscalls 328 13 CALL(sys_exit)
14#else 14 CALL(sys_fork_wrapper)
15 15 CALL(sys_read)
16100: 16 CALL(sys_write)
17/* 0 */ .long sys_restart_syscall 17/* 5 */ CALL(sys_open)
18 .long sys_exit 18 CALL(sys_close)
19 .long sys_fork_wrapper 19 CALL(sys_ni_syscall) /* was sys_waitpid */
20 .long sys_read 20 CALL(sys_creat)
21 .long sys_write 21 CALL(sys_link)
22/* 5 */ .long sys_open 22/* 10 */ CALL(sys_unlink)
23 .long sys_close 23 CALL(sys_execve_wrapper)
24 .long sys_ni_syscall /* was sys_waitpid */ 24 CALL(sys_chdir)
25 .long sys_creat 25 CALL(OBSOLETE(sys_time)) /* used by libc4 */
26 .long sys_link 26 CALL(sys_mknod)
27/* 10 */ .long sys_unlink 27/* 15 */ CALL(sys_chmod)
28 .long sys_execve_wrapper 28 CALL(sys_lchown16)
29 .long sys_chdir 29 CALL(sys_ni_syscall) /* was sys_break */
30 .long OBSOLETE(sys_time) /* used by libc4 */ 30 CALL(sys_ni_syscall) /* was sys_stat */
31 .long sys_mknod 31 CALL(sys_lseek)
32/* 15 */ .long sys_chmod 32/* 20 */ CALL(sys_getpid)
33 .long sys_lchown16 33 CALL(sys_mount)
34 .long sys_ni_syscall /* was sys_break */ 34 CALL(OBSOLETE(sys_oldumount)) /* used by libc4 */
35 .long sys_ni_syscall /* was sys_stat */ 35 CALL(sys_setuid16)
36 .long sys_lseek 36 CALL(sys_getuid16)
37/* 20 */ .long sys_getpid 37/* 25 */ CALL(OBSOLETE(sys_stime))
38 .long sys_mount 38 CALL(sys_ptrace)
39 .long OBSOLETE(sys_oldumount) /* used by libc4 */ 39 CALL(OBSOLETE(sys_alarm)) /* used by libc4 */
40 .long sys_setuid16 40 CALL(sys_ni_syscall) /* was sys_fstat */
41 .long sys_getuid16 41 CALL(sys_pause)
42/* 25 */ .long OBSOLETE(sys_stime) 42/* 30 */ CALL(OBSOLETE(sys_utime)) /* used by libc4 */
43 .long sys_ptrace 43 CALL(sys_ni_syscall) /* was sys_stty */
44 .long OBSOLETE(sys_alarm) /* used by libc4 */ 44 CALL(sys_ni_syscall) /* was sys_getty */
45 .long sys_ni_syscall /* was sys_fstat */ 45 CALL(sys_access)
46 .long sys_pause 46 CALL(sys_nice)
47/* 30 */ .long OBSOLETE(sys_utime) /* used by libc4 */ 47/* 35 */ CALL(sys_ni_syscall) /* was sys_ftime */
48 .long sys_ni_syscall /* was sys_stty */ 48 CALL(sys_sync)
49 .long sys_ni_syscall /* was sys_getty */ 49 CALL(sys_kill)
50 .long sys_access 50 CALL(sys_rename)
51 .long sys_nice 51 CALL(sys_mkdir)
52/* 35 */ .long sys_ni_syscall /* was sys_ftime */ 52/* 40 */ CALL(sys_rmdir)
53 .long sys_sync 53 CALL(sys_dup)
54 .long sys_kill 54 CALL(sys_pipe)
55 .long sys_rename 55 CALL(sys_times)
56 .long sys_mkdir 56 CALL(sys_ni_syscall) /* was sys_prof */
57/* 40 */ .long sys_rmdir 57/* 45 */ CALL(sys_brk)
58 .long sys_dup 58 CALL(sys_setgid16)
59 .long sys_pipe 59 CALL(sys_getgid16)
60 .long sys_times 60 CALL(sys_ni_syscall) /* was sys_signal */
61 .long sys_ni_syscall /* was sys_prof */ 61 CALL(sys_geteuid16)
62/* 45 */ .long sys_brk 62/* 50 */ CALL(sys_getegid16)
63 .long sys_setgid16 63 CALL(sys_acct)
64 .long sys_getgid16 64 CALL(sys_umount)
65 .long sys_ni_syscall /* was sys_signal */ 65 CALL(sys_ni_syscall) /* was sys_lock */
66 .long sys_geteuid16 66 CALL(sys_ioctl)
67/* 50 */ .long sys_getegid16 67/* 55 */ CALL(sys_fcntl)
68 .long sys_acct 68 CALL(sys_ni_syscall) /* was sys_mpx */
69 .long sys_umount 69 CALL(sys_setpgid)
70 .long sys_ni_syscall /* was sys_lock */ 70 CALL(sys_ni_syscall) /* was sys_ulimit */
71 .long sys_ioctl 71 CALL(sys_ni_syscall) /* was sys_olduname */
72/* 55 */ .long sys_fcntl 72/* 60 */ CALL(sys_umask)
73 .long sys_ni_syscall /* was sys_mpx */ 73 CALL(sys_chroot)
74 .long sys_setpgid 74 CALL(sys_ustat)
75 .long sys_ni_syscall /* was sys_ulimit */ 75 CALL(sys_dup2)
76 .long sys_ni_syscall /* was sys_olduname */ 76 CALL(sys_getppid)
77/* 60 */ .long sys_umask 77/* 65 */ CALL(sys_getpgrp)
78 .long sys_chroot 78 CALL(sys_setsid)
79 .long sys_ustat 79 CALL(sys_sigaction)
80 .long sys_dup2 80 CALL(sys_ni_syscall) /* was sys_sgetmask */
81 .long sys_getppid 81 CALL(sys_ni_syscall) /* was sys_ssetmask */
82/* 65 */ .long sys_getpgrp 82/* 70 */ CALL(sys_setreuid16)
83 .long sys_setsid 83 CALL(sys_setregid16)
84 .long sys_sigaction 84 CALL(sys_sigsuspend_wrapper)
85 .long sys_ni_syscall /* was sys_sgetmask */ 85 CALL(sys_sigpending)
86 .long sys_ni_syscall /* was sys_ssetmask */ 86 CALL(sys_sethostname)
87/* 70 */ .long sys_setreuid16 87/* 75 */ CALL(sys_setrlimit)
88 .long sys_setregid16 88 CALL(OBSOLETE(sys_old_getrlimit)) /* used by libc4 */
89 .long sys_sigsuspend_wrapper 89 CALL(sys_getrusage)
90 .long sys_sigpending 90 CALL(sys_gettimeofday)
91 .long sys_sethostname 91 CALL(sys_settimeofday)
92/* 75 */ .long sys_setrlimit 92/* 80 */ CALL(sys_getgroups16)
93 .long OBSOLETE(sys_old_getrlimit) /* used by libc4 */ 93 CALL(sys_setgroups16)
94 .long sys_getrusage 94 CALL(OBSOLETE(old_select)) /* used by libc4 */
95 .long sys_gettimeofday 95 CALL(sys_symlink)
96 .long sys_settimeofday 96 CALL(sys_ni_syscall) /* was sys_lstat */
97/* 80 */ .long sys_getgroups16 97/* 85 */ CALL(sys_readlink)
98 .long sys_setgroups16 98 CALL(sys_uselib)
99 .long OBSOLETE(old_select) /* used by libc4 */ 99 CALL(sys_swapon)
100 .long sys_symlink 100 CALL(sys_reboot)
101 .long sys_ni_syscall /* was sys_lstat */ 101 CALL(OBSOLETE(old_readdir)) /* used by libc4 */
102/* 85 */ .long sys_readlink 102/* 90 */ CALL(OBSOLETE(old_mmap)) /* used by libc4 */
103 .long sys_uselib 103 CALL(sys_munmap)
104 .long sys_swapon 104 CALL(sys_truncate)
105 .long sys_reboot 105 CALL(sys_ftruncate)
106 .long OBSOLETE(old_readdir) /* used by libc4 */ 106 CALL(sys_fchmod)
107/* 90 */ .long OBSOLETE(old_mmap) /* used by libc4 */ 107/* 95 */ CALL(sys_fchown16)
108 .long sys_munmap 108 CALL(sys_getpriority)
109 .long sys_truncate 109 CALL(sys_setpriority)
110 .long sys_ftruncate 110 CALL(sys_ni_syscall) /* was sys_profil */
111 .long sys_fchmod 111 CALL(sys_statfs)
112/* 95 */ .long sys_fchown16 112/* 100 */ CALL(sys_fstatfs)
113 .long sys_getpriority 113 CALL(sys_ni_syscall)
114 .long sys_setpriority 114 CALL(OBSOLETE(ABI(sys_socketcall, sys_oabi_socketcall)))
115 .long sys_ni_syscall /* was sys_profil */ 115 CALL(sys_syslog)
116 .long sys_statfs 116 CALL(sys_setitimer)
117/* 100 */ .long sys_fstatfs 117/* 105 */ CALL(sys_getitimer)
118 .long sys_ni_syscall 118 CALL(sys_newstat)
119 .long OBSOLETE(sys_socketcall) 119 CALL(sys_newlstat)
120 .long sys_syslog 120 CALL(sys_newfstat)
121 .long sys_setitimer 121 CALL(sys_ni_syscall) /* was sys_uname */
122/* 105 */ .long sys_getitimer 122/* 110 */ CALL(sys_ni_syscall) /* was sys_iopl */
123 .long sys_newstat 123 CALL(sys_vhangup)
124 .long sys_newlstat 124 CALL(sys_ni_syscall)
125 .long sys_newfstat 125 CALL(OBSOLETE(sys_syscall)) /* call a syscall */
126 .long sys_ni_syscall /* was sys_uname */ 126 CALL(sys_wait4)
127/* 110 */ .long sys_ni_syscall /* was sys_iopl */ 127/* 115 */ CALL(sys_swapoff)
128 .long sys_vhangup 128 CALL(sys_sysinfo)
129 .long sys_ni_syscall 129 CALL(OBSOLETE(ABI(sys_ipc, sys_oabi_ipc)))
130 .long OBSOLETE(sys_syscall) /* call a syscall */ 130 CALL(sys_fsync)
131 .long sys_wait4 131 CALL(sys_sigreturn_wrapper)
132/* 115 */ .long sys_swapoff 132/* 120 */ CALL(sys_clone_wrapper)
133 .long sys_sysinfo 133 CALL(sys_setdomainname)
134 .long OBSOLETE(ABI(sys_ipc, sys_oabi_ipc)) 134 CALL(sys_newuname)
135 .long sys_fsync 135 CALL(sys_ni_syscall)
136 .long sys_sigreturn_wrapper 136 CALL(sys_adjtimex)
137/* 120 */ .long sys_clone_wrapper 137/* 125 */ CALL(sys_mprotect)
138 .long sys_setdomainname 138 CALL(sys_sigprocmask)
139 .long sys_newuname 139 CALL(sys_ni_syscall) /* was sys_create_module */
140 .long sys_ni_syscall 140 CALL(sys_init_module)
141 .long sys_adjtimex 141 CALL(sys_delete_module)
142/* 125 */ .long sys_mprotect 142/* 130 */ CALL(sys_ni_syscall) /* was sys_get_kernel_syms */
143 .long sys_sigprocmask 143 CALL(sys_quotactl)
144 .long sys_ni_syscall /* was sys_create_module */ 144 CALL(sys_getpgid)
145 .long sys_init_module 145 CALL(sys_fchdir)
146 .long sys_delete_module 146 CALL(sys_bdflush)
147/* 130 */ .long sys_ni_syscall /* was sys_get_kernel_syms */ 147/* 135 */ CALL(sys_sysfs)
148 .long sys_quotactl 148 CALL(sys_personality)
149 .long sys_getpgid 149 CALL(sys_ni_syscall) /* CALL(_sys_afs_syscall) */
150 .long sys_fchdir 150 CALL(sys_setfsuid16)
151 .long sys_bdflush 151 CALL(sys_setfsgid16)
152/* 135 */ .long sys_sysfs 152/* 140 */ CALL(sys_llseek)
153 .long sys_personality 153 CALL(sys_getdents)
154 .long sys_ni_syscall /* .long _sys_afs_syscall */ 154 CALL(sys_select)
155 .long sys_setfsuid16 155 CALL(sys_flock)
156 .long sys_setfsgid16 156 CALL(sys_msync)
157/* 140 */ .long sys_llseek 157/* 145 */ CALL(sys_readv)
158 .long sys_getdents 158 CALL(sys_writev)
159 .long sys_select 159 CALL(sys_getsid)
160 .long sys_flock 160 CALL(sys_fdatasync)
161 .long sys_msync 161 CALL(sys_sysctl)
162/* 145 */ .long sys_readv 162/* 150 */ CALL(sys_mlock)
163 .long sys_writev 163 CALL(sys_munlock)
164 .long sys_getsid 164 CALL(sys_mlockall)
165 .long sys_fdatasync 165 CALL(sys_munlockall)
166 .long sys_sysctl 166 CALL(sys_sched_setparam)
167/* 150 */ .long sys_mlock 167/* 155 */ CALL(sys_sched_getparam)
168 .long sys_munlock 168 CALL(sys_sched_setscheduler)
169 .long sys_mlockall 169 CALL(sys_sched_getscheduler)
170 .long sys_munlockall 170 CALL(sys_sched_yield)
171 .long sys_sched_setparam 171 CALL(sys_sched_get_priority_max)
172/* 155 */ .long sys_sched_getparam 172/* 160 */ CALL(sys_sched_get_priority_min)
173 .long sys_sched_setscheduler 173 CALL(sys_sched_rr_get_interval)
174 .long sys_sched_getscheduler 174 CALL(sys_nanosleep)
175 .long sys_sched_yield 175 CALL(sys_arm_mremap)
176 .long sys_sched_get_priority_max 176 CALL(sys_setresuid16)
177/* 160 */ .long sys_sched_get_priority_min 177/* 165 */ CALL(sys_getresuid16)
178 .long sys_sched_rr_get_interval 178 CALL(sys_ni_syscall)
179 .long sys_nanosleep 179 CALL(sys_ni_syscall) /* was sys_query_module */
180 .long sys_arm_mremap 180 CALL(sys_poll)
181 .long sys_setresuid16 181 CALL(sys_nfsservctl)
182/* 165 */ .long sys_getresuid16 182/* 170 */ CALL(sys_setresgid16)
183 .long sys_ni_syscall 183 CALL(sys_getresgid16)
184 .long sys_ni_syscall /* was sys_query_module */ 184 CALL(sys_prctl)
185 .long sys_poll 185 CALL(sys_rt_sigreturn_wrapper)
186 .long sys_nfsservctl 186 CALL(sys_rt_sigaction)
187/* 170 */ .long sys_setresgid16 187/* 175 */ CALL(sys_rt_sigprocmask)
188 .long sys_getresgid16 188 CALL(sys_rt_sigpending)
189 .long sys_prctl 189 CALL(sys_rt_sigtimedwait)
190 .long sys_rt_sigreturn_wrapper 190 CALL(sys_rt_sigqueueinfo)
191 .long sys_rt_sigaction 191 CALL(sys_rt_sigsuspend_wrapper)
192/* 175 */ .long sys_rt_sigprocmask 192/* 180 */ CALL(ABI(sys_pread64, sys_oabi_pread64))
193 .long sys_rt_sigpending 193 CALL(ABI(sys_pwrite64, sys_oabi_pwrite64))
194 .long sys_rt_sigtimedwait 194 CALL(sys_chown16)
195 .long sys_rt_sigqueueinfo 195 CALL(sys_getcwd)
196 .long sys_rt_sigsuspend_wrapper 196 CALL(sys_capget)
197/* 180 */ .long ABI(sys_pread64, sys_oabi_pread64) 197/* 185 */ CALL(sys_capset)
198 .long ABI(sys_pwrite64, sys_oabi_pwrite64) 198 CALL(sys_sigaltstack_wrapper)
199 .long sys_chown16 199 CALL(sys_sendfile)
200 .long sys_getcwd 200 CALL(sys_ni_syscall)
201 .long sys_capget 201 CALL(sys_ni_syscall)
202/* 185 */ .long sys_capset 202/* 190 */ CALL(sys_vfork_wrapper)
203 .long sys_sigaltstack_wrapper 203 CALL(sys_getrlimit)
204 .long sys_sendfile 204 CALL(sys_mmap2)
205 .long sys_ni_syscall 205 CALL(ABI(sys_truncate64, sys_oabi_truncate64))
206 .long sys_ni_syscall 206 CALL(ABI(sys_ftruncate64, sys_oabi_ftruncate64))
207/* 190 */ .long sys_vfork_wrapper 207/* 195 */ CALL(ABI(sys_stat64, sys_oabi_stat64))
208 .long sys_getrlimit 208 CALL(ABI(sys_lstat64, sys_oabi_lstat64))
209 .long sys_mmap2 209 CALL(ABI(sys_fstat64, sys_oabi_fstat64))
210 .long ABI(sys_truncate64, sys_oabi_truncate64) 210 CALL(sys_lchown)
211 .long ABI(sys_ftruncate64, sys_oabi_ftruncate64) 211 CALL(sys_getuid)
212/* 195 */ .long ABI(sys_stat64, sys_oabi_stat64) 212/* 200 */ CALL(sys_getgid)
213 .long ABI(sys_lstat64, sys_oabi_lstat64) 213 CALL(sys_geteuid)
214 .long ABI(sys_fstat64, sys_oabi_fstat64) 214 CALL(sys_getegid)
215 .long sys_lchown 215 CALL(sys_setreuid)
216 .long sys_getuid 216 CALL(sys_setregid)
217/* 200 */ .long sys_getgid 217/* 205 */ CALL(sys_getgroups)
218 .long sys_geteuid 218 CALL(sys_setgroups)
219 .long sys_getegid 219 CALL(sys_fchown)
220 .long sys_setreuid 220 CALL(sys_setresuid)
221 .long sys_setregid 221 CALL(sys_getresuid)
222/* 205 */ .long sys_getgroups 222/* 210 */ CALL(sys_setresgid)
223 .long sys_setgroups 223 CALL(sys_getresgid)
224 .long sys_fchown 224 CALL(sys_chown)
225 .long sys_setresuid 225 CALL(sys_setuid)
226 .long sys_getresuid 226 CALL(sys_setgid)
227/* 210 */ .long sys_setresgid 227/* 215 */ CALL(sys_setfsuid)
228 .long sys_getresgid 228 CALL(sys_setfsgid)
229 .long sys_chown 229 CALL(sys_getdents64)
230 .long sys_setuid 230 CALL(sys_pivot_root)
231 .long sys_setgid 231 CALL(sys_mincore)
232/* 215 */ .long sys_setfsuid 232/* 220 */ CALL(sys_madvise)
233 .long sys_setfsgid 233 CALL(ABI(sys_fcntl64, sys_oabi_fcntl64))
234 .long sys_getdents64 234 CALL(sys_ni_syscall) /* TUX */
235 .long sys_pivot_root 235 CALL(sys_ni_syscall)
236 .long sys_mincore 236 CALL(sys_gettid)
237/* 220 */ .long sys_madvise 237/* 225 */ CALL(ABI(sys_readahead, sys_oabi_readahead))
238 .long ABI(sys_fcntl64, sys_oabi_fcntl64) 238 CALL(sys_setxattr)
239 .long sys_ni_syscall /* TUX */ 239 CALL(sys_lsetxattr)
240 .long sys_ni_syscall 240 CALL(sys_fsetxattr)
241 .long sys_gettid 241 CALL(sys_getxattr)
242/* 225 */ .long ABI(sys_readahead, sys_oabi_readahead) 242/* 230 */ CALL(sys_lgetxattr)
243 .long sys_setxattr 243 CALL(sys_fgetxattr)
244 .long sys_lsetxattr 244 CALL(sys_listxattr)
245 .long sys_fsetxattr 245 CALL(sys_llistxattr)
246 .long sys_getxattr 246 CALL(sys_flistxattr)
247/* 230 */ .long sys_lgetxattr 247/* 235 */ CALL(sys_removexattr)
248 .long sys_fgetxattr 248 CALL(sys_lremovexattr)
249 .long sys_listxattr 249 CALL(sys_fremovexattr)
250 .long sys_llistxattr 250 CALL(sys_tkill)
251 .long sys_flistxattr 251 CALL(sys_sendfile64)
252/* 235 */ .long sys_removexattr 252/* 240 */ CALL(sys_futex)
253 .long sys_lremovexattr 253 CALL(sys_sched_setaffinity)
254 .long sys_fremovexattr 254 CALL(sys_sched_getaffinity)
255 .long sys_tkill 255 CALL(sys_io_setup)
256 .long sys_sendfile64 256 CALL(sys_io_destroy)
257/* 240 */ .long sys_futex 257/* 245 */ CALL(sys_io_getevents)
258 .long sys_sched_setaffinity 258 CALL(sys_io_submit)
259 .long sys_sched_getaffinity 259 CALL(sys_io_cancel)
260 .long sys_io_setup 260 CALL(sys_exit_group)
261 .long sys_io_destroy 261 CALL(sys_lookup_dcookie)
262/* 245 */ .long sys_io_getevents 262/* 250 */ CALL(sys_epoll_create)
263 .long sys_io_submit 263 CALL(ABI(sys_epoll_ctl, sys_oabi_epoll_ctl))
264 .long sys_io_cancel 264 CALL(ABI(sys_epoll_wait, sys_oabi_epoll_wait))
265 .long sys_exit_group 265 CALL(sys_remap_file_pages)
266 .long sys_lookup_dcookie 266 CALL(sys_ni_syscall) /* sys_set_thread_area */
267/* 250 */ .long sys_epoll_create 267/* 255 */ CALL(sys_ni_syscall) /* sys_get_thread_area */
268 .long ABI(sys_epoll_ctl, sys_oabi_epoll_ctl) 268 CALL(sys_set_tid_address)
269 .long ABI(sys_epoll_wait, sys_oabi_epoll_wait) 269 CALL(sys_timer_create)
270 .long sys_remap_file_pages 270 CALL(sys_timer_settime)
271 .long sys_ni_syscall /* sys_set_thread_area */ 271 CALL(sys_timer_gettime)
272/* 255 */ .long sys_ni_syscall /* sys_get_thread_area */ 272/* 260 */ CALL(sys_timer_getoverrun)
273 .long sys_set_tid_address 273 CALL(sys_timer_delete)
274 .long sys_timer_create 274 CALL(sys_clock_settime)
275 .long sys_timer_settime 275 CALL(sys_clock_gettime)
276 .long sys_timer_gettime 276 CALL(sys_clock_getres)
277/* 260 */ .long sys_timer_getoverrun 277/* 265 */ CALL(sys_clock_nanosleep)
278 .long sys_timer_delete 278 CALL(sys_statfs64_wrapper)
279 .long sys_clock_settime 279 CALL(sys_fstatfs64_wrapper)
280 .long sys_clock_gettime 280 CALL(sys_tgkill)
281 .long sys_clock_getres 281 CALL(sys_utimes)
282/* 265 */ .long sys_clock_nanosleep 282/* 270 */ CALL(sys_arm_fadvise64_64)
283 .long sys_statfs64_wrapper 283 CALL(sys_pciconfig_iobase)
284 .long sys_fstatfs64_wrapper 284 CALL(sys_pciconfig_read)
285 .long sys_tgkill 285 CALL(sys_pciconfig_write)
286 .long sys_utimes 286 CALL(sys_mq_open)
287/* 270 */ .long sys_arm_fadvise64_64 287/* 275 */ CALL(sys_mq_unlink)
288 .long sys_pciconfig_iobase 288 CALL(sys_mq_timedsend)
289 .long sys_pciconfig_read 289 CALL(sys_mq_timedreceive)
290 .long sys_pciconfig_write 290 CALL(sys_mq_notify)
291 .long sys_mq_open 291 CALL(sys_mq_getsetattr)
292/* 275 */ .long sys_mq_unlink 292/* 280 */ CALL(sys_waitid)
293 .long sys_mq_timedsend 293 CALL(sys_socket)
294 .long sys_mq_timedreceive 294 CALL(ABI(sys_bind, sys_oabi_bind))
295 .long sys_mq_notify 295 CALL(ABI(sys_connect, sys_oabi_connect))
296 .long sys_mq_getsetattr 296 CALL(sys_listen)
297/* 280 */ .long sys_waitid 297/* 285 */ CALL(sys_accept)
298 .long sys_socket 298 CALL(sys_getsockname)
299 .long sys_bind 299 CALL(sys_getpeername)
300 .long sys_connect 300 CALL(sys_socketpair)
301 .long sys_listen 301 CALL(sys_send)
302/* 285 */ .long sys_accept 302/* 290 */ CALL(ABI(sys_sendto, sys_oabi_sendto))
303 .long sys_getsockname 303 CALL(sys_recv)
304 .long sys_getpeername 304 CALL(sys_recvfrom)
305 .long sys_socketpair 305 CALL(sys_shutdown)
306 .long sys_send 306 CALL(sys_setsockopt)
307/* 290 */ .long sys_sendto 307/* 295 */ CALL(sys_getsockopt)
308 .long sys_recv 308 CALL(ABI(sys_sendmsg, sys_oabi_sendmsg))
309 .long sys_recvfrom 309 CALL(sys_recvmsg)
310 .long sys_shutdown 310 CALL(ABI(sys_semop, sys_oabi_semop))
311 .long sys_setsockopt 311 CALL(sys_semget)
312/* 295 */ .long sys_getsockopt 312/* 300 */ CALL(sys_semctl)
313 .long sys_sendmsg 313 CALL(sys_msgsnd)
314 .long sys_recvmsg 314 CALL(sys_msgrcv)
315 .long ABI(sys_semop, sys_oabi_semop) 315 CALL(sys_msgget)
316 .long sys_semget 316 CALL(sys_msgctl)
317/* 300 */ .long sys_semctl 317/* 305 */ CALL(sys_shmat)
318 .long sys_msgsnd 318 CALL(sys_shmdt)
319 .long sys_msgrcv 319 CALL(sys_shmget)
320 .long sys_msgget 320 CALL(sys_shmctl)
321 .long sys_msgctl 321 CALL(sys_add_key)
322/* 305 */ .long sys_shmat 322/* 310 */ CALL(sys_request_key)
323 .long sys_shmdt 323 CALL(sys_keyctl)
324 .long sys_shmget 324 CALL(ABI(sys_semtimedop, sys_oabi_semtimedop))
325 .long sys_shmctl 325/* vserver */ CALL(sys_ni_syscall)
326 .long sys_add_key 326 CALL(sys_ioprio_set)
327/* 310 */ .long sys_request_key 327/* 315 */ CALL(sys_ioprio_get)
328 .long sys_keyctl 328 CALL(sys_inotify_init)
329 .long ABI(sys_semtimedop, sys_oabi_semtimedop) 329 CALL(sys_inotify_add_watch)
330/* vserver */ .long sys_ni_syscall 330 CALL(sys_inotify_rm_watch)
331 .long sys_ioprio_set 331 CALL(sys_mbind)
332/* 315 */ .long sys_ioprio_get 332/* 320 */ CALL(sys_get_mempolicy)
333 .long sys_inotify_init 333 CALL(sys_set_mempolicy)
334 .long sys_inotify_add_watch 334#ifndef syscalls_counted
335 .long sys_inotify_rm_watch 335.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
336 .long sys_mbind 336#define syscalls_counted
337/* 320 */ .long sys_get_mempolicy
338 .long sys_set_mempolicy
339
340 .rept NR_syscalls - (. - 100b) / 4
341 .long sys_ni_syscall
342 .endr
343#endif 337#endif
338.rept syscalls_padding
339 CALL(sys_ni_syscall)
340.endr
diff --git a/arch/arm/kernel/compat.c b/arch/arm/kernel/compat.c
index 7195add42e74..60cfa7f3226c 100644
--- a/arch/arm/kernel/compat.c
+++ b/arch/arm/kernel/compat.c
@@ -27,6 +27,8 @@
27 27
28#include <asm/mach/arch.h> 28#include <asm/mach/arch.h>
29 29
30#include "compat.h"
31
30/* 32/*
31 * Usage: 33 * Usage:
32 * - do not go blindly adding fields, add them at the end 34 * - do not go blindly adding fields, add them at the end
diff --git a/arch/arm/kernel/compat.h b/arch/arm/kernel/compat.h
new file mode 100644
index 000000000000..27e61a68bd1c
--- /dev/null
+++ b/arch/arm/kernel/compat.h
@@ -0,0 +1,13 @@
1/*
2 * linux/arch/arm/kernel/compat.h
3 *
4 * Copyright (C) 2001 Russell King
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9*/
10
11extern void convert_to_tag_list(struct tag *tags);
12
13extern void squash_mem_tags(struct tag *tag);
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index d401d908c463..ec48d70c6d8b 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -333,10 +333,14 @@ __pabt_svc:
333 @ from the exception stack 333 @ from the exception stack
334 334
335#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) 335#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
336#ifndef CONFIG_MMU
337#warning "NPTL on non MMU needs fixing"
338#else
336 @ make sure our user space atomic helper is aborted 339 @ make sure our user space atomic helper is aborted
337 cmp r2, #TASK_SIZE 340 cmp r2, #TASK_SIZE
338 bichs r3, r3, #PSR_Z_BIT 341 bichs r3, r3, #PSR_Z_BIT
339#endif 342#endif
343#endif
340 344
341 @ 345 @
342 @ We are now ready to fill in the remaining blanks on the stack: 346 @ We are now ready to fill in the remaining blanks on the stack:
@@ -562,7 +566,7 @@ ENTRY(__switch_to)
562 ldr r6, [r2, #TI_CPU_DOMAIN]! 566 ldr r6, [r2, #TI_CPU_DOMAIN]!
563#endif 567#endif
564#if __LINUX_ARM_ARCH__ >= 6 568#if __LINUX_ARM_ARCH__ >= 6
565#ifdef CONFIG_CPU_MPCORE 569#ifdef CONFIG_CPU_32v6K
566 clrex 570 clrex
567#else 571#else
568 strex r5, r4, [ip] @ Clear exclusive monitor 572 strex r5, r4, [ip] @ Clear exclusive monitor
@@ -705,7 +709,12 @@ __kuser_memory_barrier: @ 0xffff0fa0
705 * The C flag is also set if *ptr was changed to allow for assembly 709 * The C flag is also set if *ptr was changed to allow for assembly
706 * optimization in the calling code. 710 * optimization in the calling code.
707 * 711 *
708 * Note: this routine already includes memory barriers as needed. 712 * Notes:
713 *
714 * - This routine already includes memory barriers as needed.
715 *
716 * - A failure might be transient, i.e. it is possible, although unlikely,
717 * that "failure" be returned even if *ptr == oldval.
709 * 718 *
710 * For example, a user space atomic_add implementation could look like this: 719 * For example, a user space atomic_add implementation could look like this:
711 * 720 *
@@ -756,12 +765,18 @@ __kuser_cmpxchg: @ 0xffff0fc0
756 * exception happening just after the str instruction which would 765 * exception happening just after the str instruction which would
757 * clear the Z flag although the exchange was done. 766 * clear the Z flag although the exchange was done.
758 */ 767 */
768#ifdef CONFIG_MMU
759 teq ip, ip @ set Z flag 769 teq ip, ip @ set Z flag
760 ldr ip, [r2] @ load current val 770 ldr ip, [r2] @ load current val
761 add r3, r2, #1 @ prepare store ptr 771 add r3, r2, #1 @ prepare store ptr
762 teqeq ip, r0 @ compare with oldval if still allowed 772 teqeq ip, r0 @ compare with oldval if still allowed
763 streq r1, [r3, #-1]! @ store newval if still allowed 773 streq r1, [r3, #-1]! @ store newval if still allowed
764 subs r0, r2, r3 @ if r2 == r3 the str occured 774 subs r0, r2, r3 @ if r2 == r3 the str occured
775#else
776#warning "NPTL on non MMU needs fixing"
777 mov r0, #-1
778 adds r0, r0, #0
779#endif
765 mov pc, lr 780 mov pc, lr
766 781
767#else 782#else
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index 2b92ce85f97f..dbcb11a31f78 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -87,7 +87,11 @@ ENTRY(ret_from_fork)
87 b ret_slow_syscall 87 b ret_slow_syscall
88 88
89 89
90 .equ NR_syscalls,0
91#define CALL(x) .equ NR_syscalls,NR_syscalls+1
90#include "calls.S" 92#include "calls.S"
93#undef CALL
94#define CALL(x) .long x
91 95
92/*============================================================================= 96/*=============================================================================
93 * SWI handler 97 * SWI handler
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 4b4e4cf79c80..489c069e5c3e 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -27,6 +27,7 @@
27#include <linux/kallsyms.h> 27#include <linux/kallsyms.h>
28#include <linux/init.h> 28#include <linux/init.h>
29#include <linux/cpu.h> 29#include <linux/cpu.h>
30#include <linux/elfcore.h>
30 31
31#include <asm/leds.h> 32#include <asm/leds.h>
32#include <asm/processor.h> 33#include <asm/processor.h>
@@ -83,7 +84,7 @@ EXPORT_SYMBOL(pm_power_off);
83 * This is our default idle handler. We need to disable 84 * This is our default idle handler. We need to disable
84 * interrupts here to ensure we don't miss a wakeup call. 85 * interrupts here to ensure we don't miss a wakeup call.
85 */ 86 */
86void default_idle(void) 87static void default_idle(void)
87{ 88{
88 if (hlt_counter) 89 if (hlt_counter)
89 cpu_relax(); 90 cpu_relax();
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index 7b6256bb590e..a1d1b2906e8d 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -610,15 +610,12 @@ static int ptrace_setfpregs(struct task_struct *tsk, void __user *ufp)
610static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp) 610static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp)
611{ 611{
612 struct thread_info *thread = task_thread_info(tsk); 612 struct thread_info *thread = task_thread_info(tsk);
613 void *ptr = &thread->fpstate;
614 613
615 if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) 614 if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT))
616 return -ENODATA; 615 return -ENODATA;
617 iwmmxt_task_disable(thread); /* force it to ram */ 616 iwmmxt_task_disable(thread); /* force it to ram */
618 /* The iWMMXt state is stored doubleword-aligned. */ 617 return copy_to_user(ufp, &thread->fpstate.iwmmxt, IWMMXT_SIZE)
619 if (((long) ptr) & 4) 618 ? -EFAULT : 0;
620 ptr += 4;
621 return copy_to_user(ufp, ptr, 0x98) ? -EFAULT : 0;
622} 619}
623 620
624/* 621/*
@@ -627,15 +624,12 @@ static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp)
627static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp) 624static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp)
628{ 625{
629 struct thread_info *thread = task_thread_info(tsk); 626 struct thread_info *thread = task_thread_info(tsk);
630 void *ptr = &thread->fpstate;
631 627
632 if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) 628 if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT))
633 return -EACCES; 629 return -EACCES;
634 iwmmxt_task_release(thread); /* force a reload */ 630 iwmmxt_task_release(thread); /* force a reload */
635 /* The iWMMXt state is stored doubleword-aligned. */ 631 return copy_from_user(&thread->fpstate.iwmmxt, ufp, IWMMXT_SIZE)
636 if (((long) ptr) & 4) 632 ? -EFAULT : 0;
637 ptr += 4;
638 return copy_from_user(ptr, ufp, 0x98) ? -EFAULT : 0;
639} 633}
640 634
641#endif 635#endif
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index c45d10d07bde..08974cbe9824 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -23,6 +23,7 @@
23#include <linux/root_dev.h> 23#include <linux/root_dev.h>
24#include <linux/cpu.h> 24#include <linux/cpu.h>
25#include <linux/interrupt.h> 25#include <linux/interrupt.h>
26#include <linux/smp.h>
26 27
27#include <asm/cpu.h> 28#include <asm/cpu.h>
28#include <asm/elf.h> 29#include <asm/elf.h>
@@ -36,6 +37,8 @@
36#include <asm/mach/irq.h> 37#include <asm/mach/irq.h>
37#include <asm/mach/time.h> 38#include <asm/mach/time.h>
38 39
40#include "compat.h"
41
39#ifndef MEM_SIZE 42#ifndef MEM_SIZE
40#define MEM_SIZE (16*1024*1024) 43#define MEM_SIZE (16*1024*1024)
41#endif 44#endif
@@ -52,10 +55,7 @@ static int __init fpe_setup(char *line)
52__setup("fpe=", fpe_setup); 55__setup("fpe=", fpe_setup);
53#endif 56#endif
54 57
55extern unsigned int mem_fclk_21285;
56extern void paging_init(struct meminfo *, struct machine_desc *desc); 58extern void paging_init(struct meminfo *, struct machine_desc *desc);
57extern void convert_to_tag_list(struct tag *tags);
58extern void squash_mem_tags(struct tag *tag);
59extern void reboot_setup(char *str); 59extern void reboot_setup(char *str);
60extern int root_mountflags; 60extern int root_mountflags;
61extern void _stext, _text, _etext, __data_start, _edata, _end; 61extern void _stext, _text, _etext, __data_start, _edata, _end;
@@ -771,6 +771,10 @@ void __init setup_arch(char **cmdline_p)
771 paging_init(&meminfo, mdesc); 771 paging_init(&meminfo, mdesc);
772 request_standard_resources(&meminfo, mdesc); 772 request_standard_resources(&meminfo, mdesc);
773 773
774#ifdef CONFIG_SMP
775 smp_init_cpus();
776#endif
777
774 cpu_init(); 778 cpu_init();
775 779
776 /* 780 /*
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 7338948bd7d3..02aa300c4633 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -338,7 +338,6 @@ void __init smp_prepare_boot_cpu(void)
338 338
339 per_cpu(cpu_data, cpu).idle = current; 339 per_cpu(cpu_data, cpu).idle = current;
340 340
341 cpu_set(cpu, cpu_possible_map);
342 cpu_set(cpu, cpu_present_map); 341 cpu_set(cpu, cpu_present_map);
343 cpu_set(cpu, cpu_online_map); 342 cpu_set(cpu, cpu_online_map);
344} 343}
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c
index eafa8e5284af..8e2f9bc3368b 100644
--- a/arch/arm/kernel/sys_oabi-compat.c
+++ b/arch/arm/kernel/sys_oabi-compat.c
@@ -59,6 +59,17 @@
59 * struct sembuf loses its padding with EABI. Since arrays of them are 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 60 * used they have to be copyed to remove the padding. Compatibility wrappers
61 * provided below. 61 * provided below.
62 *
63 * sys_bind:
64 * sys_connect:
65 * sys_sendmsg:
66 * sys_sendto:
67 * sys_socketcall:
68 *
69 * struct sockaddr_un loses its padding with EABI. Since the size of the
70 * structure is used as a validation test in unix_mkname(), we need to
71 * change the length argument to 110 whenever it is 112. Compatibility
72 * wrappers provided below.
62 */ 73 */
63 74
64#include <linux/syscalls.h> 75#include <linux/syscalls.h>
@@ -67,6 +78,8 @@
67#include <linux/fcntl.h> 78#include <linux/fcntl.h>
68#include <linux/eventpoll.h> 79#include <linux/eventpoll.h>
69#include <linux/sem.h> 80#include <linux/sem.h>
81#include <linux/socket.h>
82#include <linux/net.h>
70#include <asm/ipc.h> 83#include <asm/ipc.h>
71#include <asm/uaccess.h> 84#include <asm/uaccess.h>
72 85
@@ -337,3 +350,91 @@ asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third,
337 return sys_ipc(call, first, second, third, ptr, fifth); 350 return sys_ipc(call, first, second, third, ptr, fifth);
338 } 351 }
339} 352}
353
354asmlinkage long sys_oabi_bind(int fd, struct sockaddr __user *addr, int addrlen)
355{
356 sa_family_t sa_family;
357 if (addrlen == 112 &&
358 get_user(sa_family, &addr->sa_family) == 0 &&
359 sa_family == AF_UNIX)
360 addrlen = 110;
361 return sys_bind(fd, addr, addrlen);
362}
363
364asmlinkage long sys_oabi_connect(int fd, struct sockaddr __user *addr, int addrlen)
365{
366 sa_family_t sa_family;
367 if (addrlen == 112 &&
368 get_user(sa_family, &addr->sa_family) == 0 &&
369 sa_family == AF_UNIX)
370 addrlen = 110;
371 return sys_connect(fd, addr, addrlen);
372}
373
374asmlinkage long sys_oabi_sendto(int fd, void __user *buff,
375 size_t len, unsigned flags,
376 struct sockaddr __user *addr,
377 int addrlen)
378{
379 sa_family_t sa_family;
380 if (addrlen == 112 &&
381 get_user(sa_family, &addr->sa_family) == 0 &&
382 sa_family == AF_UNIX)
383 addrlen = 110;
384 return sys_sendto(fd, buff, len, flags, addr, addrlen);
385}
386
387asmlinkage long sys_oabi_sendmsg(int fd, struct msghdr __user *msg, unsigned flags)
388{
389 struct sockaddr __user *addr;
390 int msg_namelen;
391 sa_family_t sa_family;
392 if (msg &&
393 get_user(msg_namelen, &msg->msg_namelen) == 0 &&
394 msg_namelen == 112 &&
395 get_user(addr, &msg->msg_name) == 0 &&
396 get_user(sa_family, &addr->sa_family) == 0 &&
397 sa_family == AF_UNIX)
398 {
399 /*
400 * HACK ALERT: there is a limit to how much backward bending
401 * we should do for what is actually a transitional
402 * compatibility layer. This already has known flaws with
403 * a few ioctls that we don't intend to fix. Therefore
404 * consider this blatent hack as another one... and take care
405 * to run for cover. In most cases it will "just work fine".
406 * If it doesn't, well, tough.
407 */
408 put_user(110, &msg->msg_namelen);
409 }
410 return sys_sendmsg(fd, msg, flags);
411}
412
413asmlinkage long sys_oabi_socketcall(int call, unsigned long __user *args)
414{
415 unsigned long r = -EFAULT, a[6];
416
417 switch (call) {
418 case SYS_BIND:
419 if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
420 r = sys_oabi_bind(a[0], (struct sockaddr __user *)a[1], a[2]);
421 break;
422 case SYS_CONNECT:
423 if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
424 r = sys_oabi_connect(a[0], (struct sockaddr __user *)a[1], a[2]);
425 break;
426 case SYS_SENDTO:
427 if (copy_from_user(a, args, 6 * sizeof(long)) == 0)
428 r = sys_oabi_sendto(a[0], (void __user *)a[1], a[2], a[3],
429 (struct sockaddr __user *)a[4], a[5]);
430 break;
431 case SYS_SENDMSG:
432 if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
433 r = sys_oabi_sendmsg(a[0], (struct msghdr __user *)a[1], a[2]);
434 break;
435 default:
436 r = sys_socketcall(call, args);
437 }
438
439 return r;
440}
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index d7d932c02866..d6bd435a6857 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -422,12 +422,14 @@ static int timer_dyn_tick_disable(void)
422void timer_dyn_reprogram(void) 422void timer_dyn_reprogram(void)
423{ 423{
424 struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick; 424 struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick;
425 unsigned long next, seq;
425 426
426 if (dyn_tick) { 427 if (dyn_tick && (dyn_tick->state & DYN_TICK_ENABLED)) {
427 write_seqlock(&xtime_lock); 428 next = next_timer_interrupt();
428 if (dyn_tick->state & DYN_TICK_ENABLED) 429 do {
430 seq = read_seqbegin(&xtime_lock);
429 dyn_tick->reprogram(next_timer_interrupt() - jiffies); 431 dyn_tick->reprogram(next_timer_interrupt() - jiffies);
430 write_sequnlock(&xtime_lock); 432 } while (read_seqretry(&xtime_lock, seq));
431 } 433 }
432} 434}
433 435
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 10235b01582e..03924bcc6129 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -19,6 +19,7 @@
19#include <linux/personality.h> 19#include <linux/personality.h>
20#include <linux/ptrace.h> 20#include <linux/ptrace.h>
21#include <linux/kallsyms.h> 21#include <linux/kallsyms.h>
22#include <linux/delay.h>
22#include <linux/init.h> 23#include <linux/init.h>
23 24
24#include <asm/atomic.h> 25#include <asm/atomic.h>
@@ -231,6 +232,13 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
231 __die(str, err, thread, regs); 232 __die(str, err, thread, regs);
232 bust_spinlocks(0); 233 bust_spinlocks(0);
233 spin_unlock_irq(&die_lock); 234 spin_unlock_irq(&die_lock);
235
236 if (panic_on_oops) {
237 printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
238 ssleep(5);
239 panic("Fatal exception");
240 }
241
234 do_exit(SIGSEGV); 242 do_exit(SIGSEGV);
235} 243}
236 244
diff --git a/arch/arm/lib/muldi3.S b/arch/arm/lib/muldi3.S
index 72d594184b8a..d89c60615794 100644
--- a/arch/arm/lib/muldi3.S
+++ b/arch/arm/lib/muldi3.S
@@ -29,8 +29,8 @@ ENTRY(__aeabi_lmul)
29 29
30 mul xh, yl, xh 30 mul xh, yl, xh
31 mla xh, xl, yh, xh 31 mla xh, xl, yh, xh
32 mov ip, xl, asr #16 32 mov ip, xl, lsr #16
33 mov yh, yl, asr #16 33 mov yh, yl, lsr #16
34 bic xl, xl, ip, lsl #16 34 bic xl, xl, ip, lsl #16
35 bic yl, yl, yh, lsl #16 35 bic yl, yl, yh, lsl #16
36 mla xh, yh, ip, xh 36 mla xh, yh, ip, xh
diff --git a/arch/arm/mach-at91rm9200/devices.c b/arch/arm/mach-at91rm9200/devices.c
index 8df3e5245651..57eedd5beaf6 100644
--- a/arch/arm/mach-at91rm9200/devices.c
+++ b/arch/arm/mach-at91rm9200/devices.c
@@ -100,8 +100,10 @@ void __init at91_add_device_udc(struct at91_udc_data *data)
100 at91_set_gpio_input(data->vbus_pin, 0); 100 at91_set_gpio_input(data->vbus_pin, 0);
101 at91_set_deglitch(data->vbus_pin, 1); 101 at91_set_deglitch(data->vbus_pin, 1);
102 } 102 }
103 if (data->pullup_pin) 103 if (data->pullup_pin) {
104 at91_set_gpio_output(data->pullup_pin, 0); 104 at91_set_gpio_output(data->pullup_pin, 0);
105 at91_set_multi_drive(data->pullup_pin, 1);
106 }
105 107
106 udc_data = *data; 108 udc_data = *data;
107 platform_device_register(&at91rm9200_udc_device); 109 platform_device_register(&at91rm9200_udc_device);
diff --git a/arch/arm/mach-at91rm9200/gpio.c b/arch/arm/mach-at91rm9200/gpio.c
index 2fd2ef583e4d..0e396feec468 100644
--- a/arch/arm/mach-at91rm9200/gpio.c
+++ b/arch/arm/mach-at91rm9200/gpio.c
@@ -159,6 +159,23 @@ int __init_or_module at91_set_deglitch(unsigned pin, int is_on)
159} 159}
160EXPORT_SYMBOL(at91_set_deglitch); 160EXPORT_SYMBOL(at91_set_deglitch);
161 161
162/*
163 * enable/disable the multi-driver; This is only valid for output and
164 * allows the output pin to run as an open collector output.
165 */
166int __init_or_module at91_set_multi_drive(unsigned pin, int is_on)
167{
168 void __iomem *pio = pin_to_controller(pin);
169 unsigned mask = pin_to_mask(pin);
170
171 if (!pio)
172 return -EINVAL;
173
174 __raw_writel(mask, pio + (is_on ? PIO_MDER : PIO_MDDR));
175 return 0;
176}
177EXPORT_SYMBOL(at91_set_multi_drive);
178
162/*--------------------------------------------------------------------------*/ 179/*--------------------------------------------------------------------------*/
163 180
164 181
@@ -257,8 +274,18 @@ static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs
257 gpio = &irq_desc[pin]; 274 gpio = &irq_desc[pin];
258 275
259 while (isr) { 276 while (isr) {
260 if (isr & 1) 277 if (isr & 1) {
261 gpio->handle(pin, gpio, regs); 278 if (unlikely(gpio->disable_depth)) {
279 /*
280 * The core ARM interrupt handler lazily disables IRQs so
281 * another IRQ must be generated before it actually gets
282 * here to be disabled on the GPIO controller.
283 */
284 gpio_irq_mask(pin);
285 }
286 else
287 gpio->handle(pin, gpio, regs);
288 }
262 pin++; 289 pin++;
263 gpio++; 290 gpio++;
264 isr >>= 1; 291 isr >>= 1;
diff --git a/arch/arm/mach-clps711x/Kconfig b/arch/arm/mach-clps711x/Kconfig
index 0793dcf54f2e..0e2b641268ad 100644
--- a/arch/arm/mach-clps711x/Kconfig
+++ b/arch/arm/mach-clps711x/Kconfig
@@ -24,6 +24,8 @@ config ARCH_CEIVA
24 24
25config ARCH_CLEP7312 25config ARCH_CLEP7312
26 bool "CLEP7312" 26 bool "CLEP7312"
27 help
28 Boards based on the Cirrus Logic 7212/7312 chips.
27 29
28config ARCH_EDB7211 30config ARCH_EDB7211
29 bool "EDB7211" 31 bool "EDB7211"
diff --git a/arch/arm/mach-imx/mx1ads.c b/arch/arm/mach-imx/mx1ads.c
index dc31e3fd6c57..8ab1b040288c 100644
--- a/arch/arm/mach-imx/mx1ads.c
+++ b/arch/arm/mach-imx/mx1ads.c
@@ -27,7 +27,6 @@
27#include <asm/mach/arch.h> 27#include <asm/mach/arch.h>
28#include <linux/interrupt.h> 28#include <linux/interrupt.h>
29#include "generic.h" 29#include "generic.h"
30#include <asm/serial.h>
31 30
32static struct resource cs89x0_resources[] = { 31static struct resource cs89x0_resources[] = {
33 [0] = { 32 [0] = {
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c
index 31820170f306..a0724f2b24ce 100644
--- a/arch/arm/mach-integrator/integrator_cp.c
+++ b/arch/arm/mach-integrator/integrator_cp.c
@@ -469,7 +469,9 @@ static void cp_clcd_enable(struct clcd_fb *fb)
469 if (fb->fb.var.bits_per_pixel <= 8) 469 if (fb->fb.var.bits_per_pixel <= 8)
470 val = CM_CTRL_LCDMUXSEL_VGA_8421BPP; 470 val = CM_CTRL_LCDMUXSEL_VGA_8421BPP;
471 else if (fb->fb.var.bits_per_pixel <= 16) 471 else if (fb->fb.var.bits_per_pixel <= 16)
472 val = CM_CTRL_LCDMUXSEL_VGA_16BPP; 472 val = CM_CTRL_LCDMUXSEL_VGA_16BPP
473 | CM_CTRL_LCDEN0 | CM_CTRL_LCDEN1
474 | CM_CTRL_STATIC1 | CM_CTRL_STATIC2;
473 else 475 else
474 val = 0; /* no idea for this, don't trust the docs */ 476 val = 0; /* no idea for this, don't trust the docs */
475 477
diff --git a/arch/arm/mach-integrator/platsmp.c b/arch/arm/mach-integrator/platsmp.c
index ea10bd8c972c..1bc8534ef0c6 100644
--- a/arch/arm/mach-integrator/platsmp.c
+++ b/arch/arm/mach-integrator/platsmp.c
@@ -140,6 +140,18 @@ static void __init poke_milo(void)
140 mb(); 140 mb();
141} 141}
142 142
143/*
144 * Initialise the CPU possible map early - this describes the CPUs
145 * which may be present or become present in the system.
146 */
147void __init smp_init_cpus(void)
148{
149 unsigned int i, ncores = get_core_count();
150
151 for (i = 0; i < ncores; i++)
152 cpu_set(i, cpu_possible_map);
153}
154
143void __init smp_prepare_cpus(unsigned int max_cpus) 155void __init smp_prepare_cpus(unsigned int max_cpus)
144{ 156{
145 unsigned int ncores = get_core_count(); 157 unsigned int ncores = get_core_count();
@@ -176,14 +188,11 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
176 max_cpus = ncores; 188 max_cpus = ncores;
177 189
178 /* 190 /*
179 * Initialise the possible/present maps. 191 * Initialise the present map, which describes the set of CPUs
180 * cpu_possible_map describes the set of CPUs which may be present 192 * actually populated at the present time.
181 * cpu_present_map describes the set of CPUs populated
182 */ 193 */
183 for (i = 0; i < max_cpus; i++) { 194 for (i = 0; i < max_cpus; i++)
184 cpu_set(i, cpu_possible_map);
185 cpu_set(i, cpu_present_map); 195 cpu_set(i, cpu_present_map);
186 }
187 196
188 /* 197 /*
189 * Do we need any more CPUs? If so, then let them know where 198 * Do we need any more CPUs? If so, then let them know where
diff --git a/arch/arm/mach-iop3xx/iop321-setup.c b/arch/arm/mach-iop3xx/iop321-setup.c
index e4f4c52d93d4..0ebbcb20c6ae 100644
--- a/arch/arm/mach-iop3xx/iop321-setup.c
+++ b/arch/arm/mach-iop3xx/iop321-setup.c
@@ -13,7 +13,6 @@
13#include <linux/mm.h> 13#include <linux/mm.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/config.h> 15#include <linux/config.h>
16#include <linux/init.h>
17#include <linux/major.h> 16#include <linux/major.h>
18#include <linux/fs.h> 17#include <linux/fs.h>
19#include <linux/platform_device.h> 18#include <linux/platform_device.h>
diff --git a/arch/arm/mach-iop3xx/iop331-setup.c b/arch/arm/mach-iop3xx/iop331-setup.c
index 63585485123e..2d6abe5be14d 100644
--- a/arch/arm/mach-iop3xx/iop331-setup.c
+++ b/arch/arm/mach-iop3xx/iop331-setup.c
@@ -12,7 +12,6 @@
12#include <linux/mm.h> 12#include <linux/mm.h>
13#include <linux/init.h> 13#include <linux/init.h>
14#include <linux/config.h> 14#include <linux/config.h>
15#include <linux/init.h>
16#include <linux/major.h> 15#include <linux/major.h>
17#include <linux/fs.h> 16#include <linux/fs.h>
18#include <linux/platform_device.h> 17#include <linux/platform_device.h>
diff --git a/arch/arm/mach-ixp2000/enp2611.c b/arch/arm/mach-ixp2000/enp2611.c
index 9e5a13bb39d0..52fac89e95b5 100644
--- a/arch/arm/mach-ixp2000/enp2611.c
+++ b/arch/arm/mach-ixp2000/enp2611.c
@@ -106,6 +106,7 @@ static void __init enp2611_pci_preinit(void)
106{ 106{
107 ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000); 107 ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000);
108 ixp2000_pci_preinit(); 108 ixp2000_pci_preinit();
109 pcibios_setup("firmware");
109} 110}
110 111
111static inline int enp2611_pci_valid_device(struct pci_bus *bus, 112static inline int enp2611_pci_valid_device(struct pci_bus *bus,
diff --git a/arch/arm/mach-ixp2000/ixdp2400.c b/arch/arm/mach-ixp2000/ixdp2400.c
index 7c782403042a..09101271298e 100644
--- a/arch/arm/mach-ixp2000/ixdp2400.c
+++ b/arch/arm/mach-ixp2000/ixdp2400.c
@@ -68,6 +68,7 @@ void __init ixdp2400_pci_preinit(void)
68{ 68{
69 ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000); 69 ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000);
70 ixp2000_pci_preinit(); 70 ixp2000_pci_preinit();
71 pcibios_setup("firmware");
71} 72}
72 73
73int ixdp2400_pci_setup(int nr, struct pci_sys_data *sys) 74int ixdp2400_pci_setup(int nr, struct pci_sys_data *sys)
diff --git a/arch/arm/mach-ixp2000/ixdp2x01.c b/arch/arm/mach-ixp2000/ixdp2x01.c
index 10f06606d460..150519fb38ec 100644
--- a/arch/arm/mach-ixp2000/ixdp2x01.c
+++ b/arch/arm/mach-ixp2000/ixdp2x01.c
@@ -212,6 +212,7 @@ void __init ixdp2x01_pci_preinit(void)
212{ 212{
213 ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00000000); 213 ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00000000);
214 ixp2000_pci_preinit(); 214 ixp2000_pci_preinit();
215 pcibios_setup("firmware");
215} 216}
216 217
217#define DEVPIN(dev, pin) ((pin) | ((dev) << 3)) 218#define DEVPIN(dev, pin) ((pin) | ((dev) << 3))
@@ -299,7 +300,9 @@ struct hw_pci ixdp2x01_pci __initdata = {
299 300
300int __init ixdp2x01_pci_init(void) 301int __init ixdp2x01_pci_init(void)
301{ 302{
302 pci_common_init(&ixdp2x01_pci); 303 if (machine_is_ixdp2401() || machine_is_ixdp2801())
304 pci_common_init(&ixdp2x01_pci);
305
303 return 0; 306 return 0;
304} 307}
305 308
diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig
index daadc78e271b..5bf50a2a737d 100644
--- a/arch/arm/mach-ixp4xx/Kconfig
+++ b/arch/arm/mach-ixp4xx/Kconfig
@@ -8,11 +8,9 @@ menu "Intel IXP4xx Implementation Options"
8 8
9comment "IXP4xx Platforms" 9comment "IXP4xx Platforms"
10 10
11# This entry is placed on top because otherwise it would have
12# been shown as a submenu.
13config MACH_NSLU2 11config MACH_NSLU2
14 bool 12 bool
15 prompt "NSLU2" if !(MACH_IXDP465 || MACH_IXDPG425 || ARCH_IXDP425 || ARCH_ADI_COYOTE || ARCH_AVILA || ARCH_IXCDP1100 || ARCH_PRPMC1100 || MACH_GTWX5715) 13 prompt "Linksys NSLU2"
16 help 14 help
17 Say 'Y' here if you want your kernel to support Linksys's 15 Say 'Y' here if you want your kernel to support Linksys's
18 NSLU2 NAS device. For more information on this platform, 16 NSLU2 NAS device. For more information on this platform,
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
index 4bdc9d4526cd..fbadf3021b9e 100644
--- a/arch/arm/mach-ixp4xx/common.c
+++ b/arch/arm/mach-ixp4xx/common.c
@@ -111,24 +111,30 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type)
111 if (line < 0) 111 if (line < 0)
112 return -EINVAL; 112 return -EINVAL;
113 113
114 if (type & IRQT_BOTHEDGE) { 114 switch (type){
115 case IRQT_BOTHEDGE:
115 int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL; 116 int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL;
116 irq_type = IXP4XX_IRQ_EDGE; 117 irq_type = IXP4XX_IRQ_EDGE;
117 } else if (type & IRQT_RISING) { 118 break;
119 case IRQT_RISING:
118 int_style = IXP4XX_GPIO_STYLE_RISING_EDGE; 120 int_style = IXP4XX_GPIO_STYLE_RISING_EDGE;
119 irq_type = IXP4XX_IRQ_EDGE; 121 irq_type = IXP4XX_IRQ_EDGE;
120 } else if (type & IRQT_FALLING) { 122 break;
123 case IRQT_FALLING:
121 int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE; 124 int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE;
122 irq_type = IXP4XX_IRQ_EDGE; 125 irq_type = IXP4XX_IRQ_EDGE;
123 } else if (type & IRQT_HIGH) { 126 break;
127 case IRQT_HIGH:
124 int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH; 128 int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH;
125 irq_type = IXP4XX_IRQ_LEVEL; 129 irq_type = IXP4XX_IRQ_LEVEL;
126 } else if (type & IRQT_LOW) { 130 break;
131 case IRQT_LOW:
127 int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW; 132 int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW;
128 irq_type = IXP4XX_IRQ_LEVEL; 133 irq_type = IXP4XX_IRQ_LEVEL;
129 } else 134 break;
135 default:
130 return -EINVAL; 136 return -EINVAL;
131 137 }
132 ixp4xx_config_irq(irq, irq_type); 138 ixp4xx_config_irq(irq, irq_type);
133 139
134 if (line >= 8) { /* pins 8-15 */ 140 if (line >= 8) { /* pins 8-15 */
diff --git a/arch/arm/mach-ixp4xx/nas100d-power.c b/arch/arm/mach-ixp4xx/nas100d-power.c
index 2bec69bfa715..99d333d7ebdd 100644
--- a/arch/arm/mach-ixp4xx/nas100d-power.c
+++ b/arch/arm/mach-ixp4xx/nas100d-power.c
@@ -56,6 +56,9 @@ static int __init nas100d_power_init(void)
56 56
57static void __exit nas100d_power_exit(void) 57static void __exit nas100d_power_exit(void)
58{ 58{
59 if (!(machine_is_nas100d()))
60 return;
61
59 free_irq(NAS100D_RB_IRQ, NULL); 62 free_irq(NAS100D_RB_IRQ, NULL);
60} 63}
61 64
diff --git a/arch/arm/mach-ixp4xx/nas100d-setup.c b/arch/arm/mach-ixp4xx/nas100d-setup.c
index 856d56f3b2ae..a3b4c6ac5708 100644
--- a/arch/arm/mach-ixp4xx/nas100d-setup.c
+++ b/arch/arm/mach-ixp4xx/nas100d-setup.c
@@ -113,6 +113,9 @@ static void __init nas100d_init(void)
113{ 113{
114 ixp4xx_sys_init(); 114 ixp4xx_sys_init();
115 115
116 /* gpio 14 and 15 are _not_ clocks */
117 *IXP4XX_GPIO_GPCLKR = 0;
118
116 nas100d_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); 119 nas100d_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
117 nas100d_flash_resource.end = 120 nas100d_flash_resource.end =
118 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; 121 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
diff --git a/arch/arm/mach-ixp4xx/nslu2-power.c b/arch/arm/mach-ixp4xx/nslu2-power.c
index b0ad9e901f6e..d80c362bc539 100644
--- a/arch/arm/mach-ixp4xx/nslu2-power.c
+++ b/arch/arm/mach-ixp4xx/nslu2-power.c
@@ -77,6 +77,9 @@ static int __init nslu2_power_init(void)
77 77
78static void __exit nslu2_power_exit(void) 78static void __exit nslu2_power_exit(void)
79{ 79{
80 if (!(machine_is_nslu2()))
81 return;
82
80 free_irq(NSLU2_RB_IRQ, NULL); 83 free_irq(NSLU2_RB_IRQ, NULL);
81 free_irq(NSLU2_PB_IRQ, NULL); 84 free_irq(NSLU2_PB_IRQ, NULL);
82} 85}
diff --git a/arch/arm/mach-ixp4xx/nslu2-setup.c b/arch/arm/mach-ixp4xx/nslu2-setup.c
index da9340a53434..55411f21d838 100644
--- a/arch/arm/mach-ixp4xx/nslu2-setup.c
+++ b/arch/arm/mach-ixp4xx/nslu2-setup.c
@@ -27,8 +27,6 @@ static struct flash_platform_data nslu2_flash_data = {
27}; 27};
28 28
29static struct resource nslu2_flash_resource = { 29static struct resource nslu2_flash_resource = {
30 .start = NSLU2_FLASH_BASE,
31 .end = NSLU2_FLASH_BASE + NSLU2_FLASH_SIZE,
32 .flags = IORESOURCE_MEM, 30 .flags = IORESOURCE_MEM,
33}; 31};
34 32
@@ -52,6 +50,12 @@ static struct platform_device nslu2_i2c_controller = {
52 .num_resources = 0, 50 .num_resources = 0,
53}; 51};
54 52
53static struct platform_device nslu2_beeper = {
54 .name = "ixp4xx-beeper",
55 .id = NSLU2_GPIO_BUZZ,
56 .num_resources = 0,
57};
58
55static struct resource nslu2_uart_resources[] = { 59static struct resource nslu2_uart_resources[] = {
56 { 60 {
57 .start = IXP4XX_UART1_BASE_PHYS, 61 .start = IXP4XX_UART1_BASE_PHYS,
@@ -99,6 +103,7 @@ static struct platform_device *nslu2_devices[] __initdata = {
99 &nslu2_i2c_controller, 103 &nslu2_i2c_controller,
100 &nslu2_flash, 104 &nslu2_flash,
101 &nslu2_uart, 105 &nslu2_uart,
106 &nslu2_beeper,
102}; 107};
103 108
104static void nslu2_power_off(void) 109static void nslu2_power_off(void)
@@ -116,6 +121,10 @@ static void __init nslu2_init(void)
116{ 121{
117 ixp4xx_sys_init(); 122 ixp4xx_sys_init();
118 123
124 nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
125 nslu2_flash_resource.end =
126 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
127
119 pm_power_off = nslu2_power_off; 128 pm_power_off = nslu2_power_off;
120 129
121 platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices)); 130 platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices));
diff --git a/arch/arm/mach-omap1/board-generic.c b/arch/arm/mach-omap1/board-generic.c
index bdc20b51b076..a177e78b2b87 100644
--- a/arch/arm/mach-omap1/board-generic.c
+++ b/arch/arm/mach-omap1/board-generic.c
@@ -30,6 +30,7 @@
30 30
31static void __init omap_generic_init_irq(void) 31static void __init omap_generic_init_irq(void)
32{ 32{
33 omap1_init_common_hw();
33 omap_init_irq(); 34 omap_init_irq();
34} 35}
35 36
@@ -104,7 +105,7 @@ static void __init omap_generic_init(void)
104 105
105static void __init omap_generic_map_io(void) 106static void __init omap_generic_map_io(void)
106{ 107{
107 omap_map_common_io(); 108 omap1_map_common_io();
108} 109}
109 110
110MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710") 111MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c
index 9533c36a92df..89f0cc74a519 100644
--- a/arch/arm/mach-omap1/board-h2.c
+++ b/arch/arm/mach-omap1/board-h2.c
@@ -128,6 +128,7 @@ static void __init h2_init_smc91x(void)
128 128
129static void __init h2_init_irq(void) 129static void __init h2_init_irq(void)
130{ 130{
131 omap1_init_common_hw();
131 omap_init_irq(); 132 omap_init_irq();
132 omap_gpio_init(); 133 omap_gpio_init();
133 h2_init_smc91x(); 134 h2_init_smc91x();
@@ -194,7 +195,7 @@ static void __init h2_init(void)
194 195
195static void __init h2_map_io(void) 196static void __init h2_map_io(void)
196{ 197{
197 omap_map_common_io(); 198 omap1_map_common_io();
198} 199}
199 200
200MACHINE_START(OMAP_H2, "TI-H2") 201MACHINE_START(OMAP_H2, "TI-H2")
diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c
index d665efc1c344..d9f386265996 100644
--- a/arch/arm/mach-omap1/board-h3.c
+++ b/arch/arm/mach-omap1/board-h3.c
@@ -203,6 +203,7 @@ static void __init h3_init_smc91x(void)
203 203
204void h3_init_irq(void) 204void h3_init_irq(void)
205{ 205{
206 omap1_init_common_hw();
206 omap_init_irq(); 207 omap_init_irq();
207 omap_gpio_init(); 208 omap_gpio_init();
208 h3_init_smc91x(); 209 h3_init_smc91x();
@@ -210,7 +211,7 @@ void h3_init_irq(void)
210 211
211static void __init h3_map_io(void) 212static void __init h3_map_io(void)
212{ 213{
213 omap_map_common_io(); 214 omap1_map_common_io();
214} 215}
215 216
216MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board") 217MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c
index 652f37c7f906..a04e4332915e 100644
--- a/arch/arm/mach-omap1/board-innovator.c
+++ b/arch/arm/mach-omap1/board-innovator.c
@@ -181,6 +181,7 @@ static void __init innovator_init_smc91x(void)
181 181
182void innovator_init_irq(void) 182void innovator_init_irq(void)
183{ 183{
184 omap1_init_common_hw();
184 omap_init_irq(); 185 omap_init_irq();
185 omap_gpio_init(); 186 omap_gpio_init();
186#ifdef CONFIG_ARCH_OMAP15XX 187#ifdef CONFIG_ARCH_OMAP15XX
@@ -285,7 +286,7 @@ static void __init innovator_init(void)
285 286
286static void __init innovator_map_io(void) 287static void __init innovator_map_io(void)
287{ 288{
288 omap_map_common_io(); 289 omap1_map_common_io();
289 290
290#ifdef CONFIG_ARCH_OMAP15XX 291#ifdef CONFIG_ARCH_OMAP15XX
291 if (cpu_is_omap1510()) { 292 if (cpu_is_omap1510()) {
diff --git a/arch/arm/mach-omap1/board-netstar.c b/arch/arm/mach-omap1/board-netstar.c
index 58f783930d45..60d5f8a3339c 100644
--- a/arch/arm/mach-omap1/board-netstar.c
+++ b/arch/arm/mach-omap1/board-netstar.c
@@ -65,6 +65,7 @@ static struct omap_board_config_kernel netstar_config[] = {
65 65
66static void __init netstar_init_irq(void) 66static void __init netstar_init_irq(void)
67{ 67{
68 omap1_init_common_hw();
68 omap_init_irq(); 69 omap_init_irq();
69 omap_gpio_init(); 70 omap_gpio_init();
70} 71}
@@ -108,7 +109,7 @@ static void __init netstar_init(void)
108 109
109static void __init netstar_map_io(void) 110static void __init netstar_map_io(void)
110{ 111{
111 omap_map_common_io(); 112 omap1_map_common_io();
112} 113}
113 114
114#define MACHINE_PANICED 1 115#define MACHINE_PANICED 1
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c
index e5d126e8f276..543fa136106d 100644
--- a/arch/arm/mach-omap1/board-osk.c
+++ b/arch/arm/mach-omap1/board-osk.c
@@ -169,6 +169,7 @@ static void __init osk_init_cf(void)
169 169
170static void __init osk_init_irq(void) 170static void __init osk_init_irq(void)
171{ 171{
172 omap1_init_common_hw();
172 omap_init_irq(); 173 omap_init_irq();
173 omap_gpio_init(); 174 omap_gpio_init();
174 osk_init_smc91x(); 175 osk_init_smc91x();
@@ -269,7 +270,7 @@ static void __init osk_init(void)
269 270
270static void __init osk_map_io(void) 271static void __init osk_map_io(void)
271{ 272{
272 omap_map_common_io(); 273 omap1_map_common_io();
273} 274}
274 275
275MACHINE_START(OMAP_OSK, "TI-OSK") 276MACHINE_START(OMAP_OSK, "TI-OSK")
diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c
index 67fada207622..e488f7236775 100644
--- a/arch/arm/mach-omap1/board-palmte.c
+++ b/arch/arm/mach-omap1/board-palmte.c
@@ -34,6 +34,7 @@
34 34
35static void __init omap_generic_init_irq(void) 35static void __init omap_generic_init_irq(void)
36{ 36{
37 omap1_init_common_hw();
37 omap_init_irq(); 38 omap_init_irq();
38} 39}
39 40
@@ -72,7 +73,7 @@ static void __init omap_generic_init(void)
72 73
73static void __init omap_generic_map_io(void) 74static void __init omap_generic_map_io(void)
74{ 75{
75 omap_map_common_io(); 76 omap1_map_common_io();
76} 77}
77 78
78MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E") 79MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c
index 88708a0c52a2..3913a3cc0ce6 100644
--- a/arch/arm/mach-omap1/board-perseus2.c
+++ b/arch/arm/mach-omap1/board-perseus2.c
@@ -144,6 +144,7 @@ static void __init perseus2_init_smc91x(void)
144 144
145void omap_perseus2_init_irq(void) 145void omap_perseus2_init_irq(void)
146{ 146{
147 omap1_init_common_hw();
147 omap_init_irq(); 148 omap_init_irq();
148 omap_gpio_init(); 149 omap_gpio_init();
149 perseus2_init_smc91x(); 150 perseus2_init_smc91x();
@@ -160,7 +161,7 @@ static struct map_desc omap_perseus2_io_desc[] __initdata = {
160 161
161static void __init omap_perseus2_map_io(void) 162static void __init omap_perseus2_map_io(void)
162{ 163{
163 omap_map_common_io(); 164 omap1_map_common_io();
164 iotable_init(omap_perseus2_io_desc, 165 iotable_init(omap_perseus2_io_desc,
165 ARRAY_SIZE(omap_perseus2_io_desc)); 166 ARRAY_SIZE(omap_perseus2_io_desc));
166 167
diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c
index 959b4b847c87..bfd5fdd1a875 100644
--- a/arch/arm/mach-omap1/board-voiceblue.c
+++ b/arch/arm/mach-omap1/board-voiceblue.c
@@ -162,6 +162,7 @@ static struct omap_board_config_kernel voiceblue_config[] = {
162 162
163static void __init voiceblue_init_irq(void) 163static void __init voiceblue_init_irq(void)
164{ 164{
165 omap1_init_common_hw();
165 omap_init_irq(); 166 omap_init_irq();
166 omap_gpio_init(); 167 omap_gpio_init();
167} 168}
@@ -206,7 +207,7 @@ static void __init voiceblue_init(void)
206 207
207static void __init voiceblue_map_io(void) 208static void __init voiceblue_map_io(void)
208{ 209{
209 omap_map_common_io(); 210 omap1_map_common_io();
210} 211}
211 212
212#define MACHINE_PANICED 1 213#define MACHINE_PANICED 1
diff --git a/arch/arm/mach-omap1/io.c b/arch/arm/mach-omap1/io.c
index a7a19f75b9e1..82d556be79c5 100644
--- a/arch/arm/mach-omap1/io.c
+++ b/arch/arm/mach-omap1/io.c
@@ -13,6 +13,7 @@
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/init.h> 14#include <linux/init.h>
15 15
16#include <asm/tlb.h>
16#include <asm/mach/map.h> 17#include <asm/mach/map.h>
17#include <asm/io.h> 18#include <asm/io.h>
18#include <asm/arch/mux.h> 19#include <asm/arch/mux.h>
@@ -83,15 +84,24 @@ static struct map_desc omap16xx_io_desc[] __initdata = {
83}; 84};
84#endif 85#endif
85 86
86static int initialized = 0; 87/*
87 88 * Maps common IO regions for omap1. This should only get called from
88static void __init _omap_map_io(void) 89 * board specific init.
90 */
91void __init omap1_map_common_io(void)
89{ 92{
90 initialized = 1;
91
92 /* We have to initialize the IO space mapping before we can run
93 * cpu_is_omapxxx() macros. */
94 iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc)); 93 iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc));
94
95 /* Normally devicemaps_init() would flush caches and tlb after
96 * mdesc->map_io(), but we must also do it here because of the CPU
97 * revision check below.
98 */
99 local_flush_tlb_all();
100 flush_cache_all();
101
102 /* We want to check CPU revision early for cpu_is_omapxxxx() macros.
103 * IO space mapping must be initialized before we can do that.
104 */
95 omap_check_revision(); 105 omap_check_revision();
96 106
97#ifdef CONFIG_ARCH_OMAP730 107#ifdef CONFIG_ARCH_OMAP730
@@ -111,7 +121,14 @@ static void __init _omap_map_io(void)
111#endif 121#endif
112 122
113 omap_sram_init(); 123 omap_sram_init();
124}
114 125
126/*
127 * Common low-level hardware init for omap1. This should only get called from
128 * board specific init.
129 */
130void __init omap1_init_common_hw()
131{
115 /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort 132 /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
116 * on a Posted Write in the TIPB Bridge". 133 * on a Posted Write in the TIPB Bridge".
117 */ 134 */
@@ -121,16 +138,7 @@ static void __init _omap_map_io(void)
121 /* Must init clocks early to assure that timer interrupt works 138 /* Must init clocks early to assure that timer interrupt works
122 */ 139 */
123 omap1_clk_init(); 140 omap1_clk_init();
124}
125 141
126/* 142 omap1_mux_init();
127 * This should only get called from board specific init
128 */
129void __init omap_map_common_io(void)
130{
131 if (!initialized) {
132 _omap_map_io();
133 omap1_mux_init();
134 }
135} 143}
136 144
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index b937123e5c65..eaecbf422d8c 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -33,6 +33,7 @@
33 33
34static void __init omap_generic_init_irq(void) 34static void __init omap_generic_init_irq(void)
35{ 35{
36 omap2_init_common_hw();
36 omap_init_irq(); 37 omap_init_irq();
37} 38}
38 39
@@ -64,7 +65,7 @@ static void __init omap_generic_init(void)
64 65
65static void __init omap_generic_map_io(void) 66static void __init omap_generic_map_io(void)
66{ 67{
67 omap_map_common_io(); 68 omap2_map_common_io();
68} 69}
69 70
70MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx") 71MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c
index c3c35d40378a..a300d634d8a5 100644
--- a/arch/arm/mach-omap2/board-h4.c
+++ b/arch/arm/mach-omap2/board-h4.c
@@ -136,6 +136,7 @@ static inline void __init h4_init_smc91x(void)
136 136
137static void __init omap_h4_init_irq(void) 137static void __init omap_h4_init_irq(void)
138{ 138{
139 omap2_init_common_hw();
139 omap_init_irq(); 140 omap_init_irq();
140 omap_gpio_init(); 141 omap_gpio_init();
141 h4_init_smc91x(); 142 h4_init_smc91x();
@@ -181,7 +182,7 @@ static void __init omap_h4_init(void)
181 182
182static void __init omap_h4_map_io(void) 183static void __init omap_h4_map_io(void)
183{ 184{
184 omap_map_common_io(); 185 omap2_map_common_io();
185} 186}
186 187
187MACHINE_START(OMAP_H4, "OMAP2420 H4 board") 188MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
index b41b1efaa2cf..3baa70819f24 100644
--- a/arch/arm/mach-pxa/pxa27x.c
+++ b/arch/arm/mach-pxa/pxa27x.c
@@ -44,7 +44,7 @@ unsigned int get_clk_frequency_khz( int info)
44 44
45 /* Read clkcfg register: it has turbo, b, half-turbo (and f) */ 45 /* Read clkcfg register: it has turbo, b, half-turbo (and f) */
46 asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg) ); 46 asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg) );
47 t = clkcfg & (1 << 1); 47 t = clkcfg & (1 << 0);
48 ht = clkcfg & (1 << 2); 48 ht = clkcfg & (1 << 2);
49 b = clkcfg & (1 << 3); 49 b = clkcfg & (1 << 3);
50 50
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c
index 4a222f59f2cf..4303d988c4bf 100644
--- a/arch/arm/mach-realview/core.c
+++ b/arch/arm/mach-realview/core.c
@@ -182,7 +182,7 @@ static const struct icst307_params realview_oscvco_params = {
182static void realview_oscvco_set(struct clk *clk, struct icst307_vco vco) 182static void realview_oscvco_set(struct clk *clk, struct icst307_vco vco)
183{ 183{
184 void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET; 184 void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET;
185 void __iomem *sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC1_OFFSET; 185 void __iomem *sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC4_OFFSET;
186 u32 val; 186 u32 val;
187 187
188 val = readl(sys_osc) & ~0x7ffff; 188 val = readl(sys_osc) & ~0x7ffff;
diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c
index a8fbd76d8be5..b8484e15dacb 100644
--- a/arch/arm/mach-realview/platsmp.c
+++ b/arch/arm/mach-realview/platsmp.c
@@ -143,6 +143,18 @@ static void __init poke_milo(void)
143 mb(); 143 mb();
144} 144}
145 145
146/*
147 * Initialise the CPU possible map early - this describes the CPUs
148 * which may be present or become present in the system.
149 */
150void __init smp_init_cpus(void)
151{
152 unsigned int i, ncores = get_core_count();
153
154 for (i = 0; i < ncores; i++)
155 cpu_set(i, cpu_possible_map);
156}
157
146void __init smp_prepare_cpus(unsigned int max_cpus) 158void __init smp_prepare_cpus(unsigned int max_cpus)
147{ 159{
148 unsigned int ncores = get_core_count(); 160 unsigned int ncores = get_core_count();
@@ -179,14 +191,11 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
179 local_timer_setup(cpu); 191 local_timer_setup(cpu);
180 192
181 /* 193 /*
182 * Initialise the possible/present maps. 194 * Initialise the present map, which describes the set of CPUs
183 * cpu_possible_map describes the set of CPUs which may be present 195 * actually populated at the present time.
184 * cpu_present_map describes the set of CPUs populated
185 */ 196 */
186 for (i = 0; i < max_cpus; i++) { 197 for (i = 0; i < max_cpus; i++)
187 cpu_set(i, cpu_possible_map);
188 cpu_set(i, cpu_present_map); 198 cpu_set(i, cpu_present_map);
189 }
190 199
191 /* 200 /*
192 * Do we need any more CPUs? If so, then let them know where 201 * Do we need any more CPUs? If so, then let them know where
diff --git a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile
index b4f1e051c768..1217bf00309c 100644
--- a/arch/arm/mach-s3c2410/Makefile
+++ b/arch/arm/mach-s3c2410/Makefile
@@ -10,9 +10,13 @@ obj-m :=
10obj-n := 10obj-n :=
11obj- := 11obj- :=
12 12
13# S3C2400 support files
14obj-$(CONFIG_CPU_S3C2400) += s3c2400-gpio.o
15
13# S3C2410 support files 16# S3C2410 support files
14 17
15obj-$(CONFIG_CPU_S3C2410) += s3c2410.o 18obj-$(CONFIG_CPU_S3C2410) += s3c2410.o
19obj-$(CONFIG_CPU_S3C2410) += s3c2410-gpio.o
16obj-$(CONFIG_S3C2410_DMA) += dma.o 20obj-$(CONFIG_S3C2410_DMA) += dma.o
17 21
18# Power Management support 22# Power Management support
@@ -25,6 +29,7 @@ obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o
25obj-$(CONFIG_CPU_S3C2440) += s3c2440.o s3c2440-dsc.o 29obj-$(CONFIG_CPU_S3C2440) += s3c2440.o s3c2440-dsc.o
26obj-$(CONFIG_CPU_S3C2440) += s3c2440-irq.o 30obj-$(CONFIG_CPU_S3C2440) += s3c2440-irq.o
27obj-$(CONFIG_CPU_S3C2440) += s3c2440-clock.o 31obj-$(CONFIG_CPU_S3C2440) += s3c2440-clock.o
32obj-$(CONFIG_CPU_S3C2440) += s3c2410-gpio.o
28 33
29# bast extras 34# bast extras
30 35
diff --git a/arch/arm/mach-s3c2410/clock.c b/arch/arm/mach-s3c2410/clock.c
index af2f3d52b61b..08489efdaf06 100644
--- a/arch/arm/mach-s3c2410/clock.c
+++ b/arch/arm/mach-s3c2410/clock.c
@@ -40,7 +40,6 @@
40#include <linux/mutex.h> 40#include <linux/mutex.h>
41 41
42#include <asm/hardware.h> 42#include <asm/hardware.h>
43#include <asm/atomic.h>
44#include <asm/irq.h> 43#include <asm/irq.h>
45#include <asm/io.h> 44#include <asm/io.h>
46 45
@@ -59,22 +58,18 @@ static DEFINE_MUTEX(clocks_mutex);
59void inline s3c24xx_clk_enable(unsigned int clocks, unsigned int enable) 58void inline s3c24xx_clk_enable(unsigned int clocks, unsigned int enable)
60{ 59{
61 unsigned long clkcon; 60 unsigned long clkcon;
62 unsigned long flags;
63
64 local_irq_save(flags);
65 61
66 clkcon = __raw_readl(S3C2410_CLKCON); 62 clkcon = __raw_readl(S3C2410_CLKCON);
67 clkcon &= ~clocks;
68 63
69 if (enable) 64 if (enable)
70 clkcon |= clocks; 65 clkcon |= clocks;
66 else
67 clkcon &= ~clocks;
71 68
72 /* ensure none of the special function bits set */ 69 /* ensure none of the special function bits set */
73 clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER); 70 clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER);
74 71
75 __raw_writel(clkcon, S3C2410_CLKCON); 72 __raw_writel(clkcon, S3C2410_CLKCON);
76
77 local_irq_restore(flags);
78} 73}
79 74
80/* enable and disable calls for use with the clk struct */ 75/* enable and disable calls for use with the clk struct */
@@ -138,16 +133,32 @@ void clk_put(struct clk *clk)
138 133
139int clk_enable(struct clk *clk) 134int clk_enable(struct clk *clk)
140{ 135{
141 if (IS_ERR(clk)) 136 if (IS_ERR(clk) || clk == NULL)
142 return -EINVAL; 137 return -EINVAL;
143 138
144 return (clk->enable)(clk, 1); 139 clk_enable(clk->parent);
140
141 mutex_lock(&clocks_mutex);
142
143 if ((clk->usage++) == 0)
144 (clk->enable)(clk, 1);
145
146 mutex_unlock(&clocks_mutex);
147 return 0;
145} 148}
146 149
147void clk_disable(struct clk *clk) 150void clk_disable(struct clk *clk)
148{ 151{
149 if (!IS_ERR(clk)) 152 if (IS_ERR(clk) || clk == NULL)
153 return;
154
155 mutex_lock(&clocks_mutex);
156
157 if ((--clk->usage) == 0)
150 (clk->enable)(clk, 0); 158 (clk->enable)(clk, 0);
159
160 mutex_unlock(&clocks_mutex);
161 clk_disable(clk->parent);
151} 162}
152 163
153 164
@@ -361,6 +372,14 @@ int s3c24xx_register_clock(struct clk *clk)
361 if (clk->enable == NULL) 372 if (clk->enable == NULL)
362 clk->enable = clk_null_enable; 373 clk->enable = clk_null_enable;
363 374
375 /* if this is a standard clock, set the usage state */
376
377 if (clk->ctrlbit) {
378 unsigned long clkcon = __raw_readl(S3C2410_CLKCON);
379
380 clk->usage = (clkcon & clk->ctrlbit) ? 1 : 0;
381 }
382
364 /* add to the list of available clocks */ 383 /* add to the list of available clocks */
365 384
366 mutex_lock(&clocks_mutex); 385 mutex_lock(&clocks_mutex);
@@ -402,6 +421,8 @@ int __init s3c24xx_setup_clocks(unsigned long xtal,
402 * the LCD clock if it is not needed. 421 * the LCD clock if it is not needed.
403 */ 422 */
404 423
424 mutex_lock(&clocks_mutex);
425
405 s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0); 426 s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0);
406 s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0); 427 s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0);
407 s3c24xx_clk_enable(S3C2410_CLKCON_USBD, 0); 428 s3c24xx_clk_enable(S3C2410_CLKCON_USBD, 0);
@@ -409,6 +430,8 @@ int __init s3c24xx_setup_clocks(unsigned long xtal,
409 s3c24xx_clk_enable(S3C2410_CLKCON_IIC, 0); 430 s3c24xx_clk_enable(S3C2410_CLKCON_IIC, 0);
410 s3c24xx_clk_enable(S3C2410_CLKCON_SPI, 0); 431 s3c24xx_clk_enable(S3C2410_CLKCON_SPI, 0);
411 432
433 mutex_unlock(&clocks_mutex);
434
412 /* assume uart clocks are correctly setup */ 435 /* assume uart clocks are correctly setup */
413 436
414 /* register our clocks */ 437 /* register our clocks */
diff --git a/arch/arm/mach-s3c2410/clock.h b/arch/arm/mach-s3c2410/clock.h
index 177d5c8decf7..eb5c95d1e7f2 100644
--- a/arch/arm/mach-s3c2410/clock.h
+++ b/arch/arm/mach-s3c2410/clock.h
@@ -16,6 +16,7 @@ struct clk {
16 struct clk *parent; 16 struct clk *parent;
17 const char *name; 17 const char *name;
18 int id; 18 int id;
19 int usage;
19 unsigned long rate; 20 unsigned long rate;
20 unsigned long ctrlbit; 21 unsigned long ctrlbit;
21 int (*enable)(struct clk *, int enable); 22 int (*enable)(struct clk *, int enable);
diff --git a/arch/arm/mach-s3c2410/cpu.c b/arch/arm/mach-s3c2410/cpu.c
index 687fe371369d..00a379334b60 100644
--- a/arch/arm/mach-s3c2410/cpu.c
+++ b/arch/arm/mach-s3c2410/cpu.c
@@ -40,6 +40,7 @@
40 40
41#include "cpu.h" 41#include "cpu.h"
42#include "clock.h" 42#include "clock.h"
43#include "s3c2400.h"
43#include "s3c2410.h" 44#include "s3c2410.h"
44#include "s3c2440.h" 45#include "s3c2440.h"
45 46
@@ -55,6 +56,7 @@ struct cpu_table {
55 56
56/* table of supported CPUs */ 57/* table of supported CPUs */
57 58
59static const char name_s3c2400[] = "S3C2400";
58static const char name_s3c2410[] = "S3C2410"; 60static const char name_s3c2410[] = "S3C2410";
59static const char name_s3c2440[] = "S3C2440"; 61static const char name_s3c2440[] = "S3C2440";
60static const char name_s3c2410a[] = "S3C2410A"; 62static const char name_s3c2410a[] = "S3C2410A";
@@ -96,7 +98,16 @@ static struct cpu_table cpu_ids[] __initdata = {
96 .init_uarts = s3c2440_init_uarts, 98 .init_uarts = s3c2440_init_uarts,
97 .init = s3c2440_init, 99 .init = s3c2440_init,
98 .name = name_s3c2440a 100 .name = name_s3c2440a
99 } 101 },
102 {
103 .idcode = 0x0, /* S3C2400 doesn't have an idcode */
104 .idmask = 0xffffffff,
105 .map_io = s3c2400_map_io,
106 .init_clocks = s3c2400_init_clocks,
107 .init_uarts = s3c2400_init_uarts,
108 .init = s3c2400_init,
109 .name = name_s3c2400
110 },
100}; 111};
101 112
102/* minimal IO mapping */ 113/* minimal IO mapping */
@@ -148,12 +159,15 @@ static struct cpu_table *cpu;
148 159
149void __init s3c24xx_init_io(struct map_desc *mach_desc, int size) 160void __init s3c24xx_init_io(struct map_desc *mach_desc, int size)
150{ 161{
151 unsigned long idcode; 162 unsigned long idcode = 0x0;
152 163
153 /* initialise the io descriptors we need for initialisation */ 164 /* initialise the io descriptors we need for initialisation */
154 iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc)); 165 iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
155 166
167#ifndef CONFIG_CPU_S3C2400
156 idcode = __raw_readl(S3C2410_GSTATUS1); 168 idcode = __raw_readl(S3C2410_GSTATUS1);
169#endif
170
157 cpu = s3c_lookup_cpu(idcode); 171 cpu = s3c_lookup_cpu(idcode);
158 172
159 if (cpu == NULL) { 173 if (cpu == NULL) {
diff --git a/arch/arm/mach-s3c2410/cpu.h b/arch/arm/mach-s3c2410/cpu.h
index 9cbe5eef492b..fc1067783f6d 100644
--- a/arch/arm/mach-s3c2410/cpu.h
+++ b/arch/arm/mach-s3c2410/cpu.h
@@ -17,11 +17,12 @@
17 * 14-Jan-2005 BJD Added s3c24xx_init_clocks() call 17 * 14-Jan-2005 BJD Added s3c24xx_init_clocks() call
18 * 10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} & IODESC_ENT 18 * 10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} & IODESC_ENT
19 * 14-Mar-2005 BJD Updated for __iomem 19 * 14-Mar-2005 BJD Updated for __iomem
20 * 15-Jan-2006 LCVR Updated S3C2410_PA_##x to new S3C24XX_PA_##x macro
20*/ 21*/
21 22
22/* todo - fix when rmk changes iodescs to use `void __iomem *` */ 23/* todo - fix when rmk changes iodescs to use `void __iomem *` */
23 24
24#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C2410_PA_##x), S3C24XX_SZ_##x, MT_DEVICE } 25#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }
25 26
26#ifndef MHZ 27#ifndef MHZ
27#define MHZ (1000*1000) 28#define MHZ (1000*1000)
diff --git a/arch/arm/mach-s3c2410/devs.c b/arch/arm/mach-s3c2410/devs.c
index f58406e6ef5a..ca09ba516e4c 100644
--- a/arch/arm/mach-s3c2410/devs.c
+++ b/arch/arm/mach-s3c2410/devs.c
@@ -10,6 +10,7 @@
10 * published by the Free Software Foundation. 10 * published by the Free Software Foundation.
11 * 11 *
12 * Modifications: 12 * Modifications:
13 * 15-Jan-2006 LCVR Using S3C24XX_PA_##x macro for common S3C24XX devices
13 * 10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} 14 * 10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ}
14 * 10-Feb-2005 BJD Added camera from guillaume.gourat@nexvision.tv 15 * 10-Feb-2005 BJD Added camera from guillaume.gourat@nexvision.tv
15 * 29-Aug-2004 BJD Added timers 0 through 3 16 * 29-Aug-2004 BJD Added timers 0 through 3
@@ -46,8 +47,8 @@ struct platform_device *s3c24xx_uart_devs[3];
46 47
47static struct resource s3c_usb_resource[] = { 48static struct resource s3c_usb_resource[] = {
48 [0] = { 49 [0] = {
49 .start = S3C2410_PA_USBHOST, 50 .start = S3C24XX_PA_USBHOST,
50 .end = S3C2410_PA_USBHOST + S3C24XX_SZ_USBHOST - 1, 51 .end = S3C24XX_PA_USBHOST + S3C24XX_SZ_USBHOST - 1,
51 .flags = IORESOURCE_MEM, 52 .flags = IORESOURCE_MEM,
52 }, 53 },
53 [1] = { 54 [1] = {
@@ -76,8 +77,8 @@ EXPORT_SYMBOL(s3c_device_usb);
76 77
77static struct resource s3c_lcd_resource[] = { 78static struct resource s3c_lcd_resource[] = {
78 [0] = { 79 [0] = {
79 .start = S3C2410_PA_LCD, 80 .start = S3C24XX_PA_LCD,
80 .end = S3C2410_PA_LCD + S3C24XX_SZ_LCD - 1, 81 .end = S3C24XX_PA_LCD + S3C24XX_SZ_LCD - 1,
81 .flags = IORESOURCE_MEM, 82 .flags = IORESOURCE_MEM,
82 }, 83 },
83 [1] = { 84 [1] = {
@@ -139,8 +140,8 @@ EXPORT_SYMBOL(s3c_device_nand);
139 140
140static struct resource s3c_usbgadget_resource[] = { 141static struct resource s3c_usbgadget_resource[] = {
141 [0] = { 142 [0] = {
142 .start = S3C2410_PA_USBDEV, 143 .start = S3C24XX_PA_USBDEV,
143 .end = S3C2410_PA_USBDEV + S3C24XX_SZ_USBDEV - 1, 144 .end = S3C24XX_PA_USBDEV + S3C24XX_SZ_USBDEV - 1,
144 .flags = IORESOURCE_MEM, 145 .flags = IORESOURCE_MEM,
145 }, 146 },
146 [1] = { 147 [1] = {
@@ -164,8 +165,8 @@ EXPORT_SYMBOL(s3c_device_usbgadget);
164 165
165static struct resource s3c_wdt_resource[] = { 166static struct resource s3c_wdt_resource[] = {
166 [0] = { 167 [0] = {
167 .start = S3C2410_PA_WATCHDOG, 168 .start = S3C24XX_PA_WATCHDOG,
168 .end = S3C2410_PA_WATCHDOG + S3C24XX_SZ_WATCHDOG - 1, 169 .end = S3C24XX_PA_WATCHDOG + S3C24XX_SZ_WATCHDOG - 1,
169 .flags = IORESOURCE_MEM, 170 .flags = IORESOURCE_MEM,
170 }, 171 },
171 [1] = { 172 [1] = {
@@ -189,8 +190,8 @@ EXPORT_SYMBOL(s3c_device_wdt);
189 190
190static struct resource s3c_i2c_resource[] = { 191static struct resource s3c_i2c_resource[] = {
191 [0] = { 192 [0] = {
192 .start = S3C2410_PA_IIC, 193 .start = S3C24XX_PA_IIC,
193 .end = S3C2410_PA_IIC + S3C24XX_SZ_IIC - 1, 194 .end = S3C24XX_PA_IIC + S3C24XX_SZ_IIC - 1,
194 .flags = IORESOURCE_MEM, 195 .flags = IORESOURCE_MEM,
195 }, 196 },
196 [1] = { 197 [1] = {
@@ -214,8 +215,8 @@ EXPORT_SYMBOL(s3c_device_i2c);
214 215
215static struct resource s3c_iis_resource[] = { 216static struct resource s3c_iis_resource[] = {
216 [0] = { 217 [0] = {
217 .start = S3C2410_PA_IIS, 218 .start = S3C24XX_PA_IIS,
218 .end = S3C2410_PA_IIS + S3C24XX_SZ_IIS -1, 219 .end = S3C24XX_PA_IIS + S3C24XX_SZ_IIS -1,
219 .flags = IORESOURCE_MEM, 220 .flags = IORESOURCE_MEM,
220 } 221 }
221}; 222};
@@ -239,8 +240,8 @@ EXPORT_SYMBOL(s3c_device_iis);
239 240
240static struct resource s3c_rtc_resource[] = { 241static struct resource s3c_rtc_resource[] = {
241 [0] = { 242 [0] = {
242 .start = S3C2410_PA_RTC, 243 .start = S3C24XX_PA_RTC,
243 .end = S3C2410_PA_RTC + 0xff, 244 .end = S3C24XX_PA_RTC + 0xff,
244 .flags = IORESOURCE_MEM, 245 .flags = IORESOURCE_MEM,
245 }, 246 },
246 [1] = { 247 [1] = {
@@ -268,12 +269,17 @@ EXPORT_SYMBOL(s3c_device_rtc);
268 269
269static struct resource s3c_adc_resource[] = { 270static struct resource s3c_adc_resource[] = {
270 [0] = { 271 [0] = {
271 .start = S3C2410_PA_ADC, 272 .start = S3C24XX_PA_ADC,
272 .end = S3C2410_PA_ADC + S3C24XX_SZ_ADC - 1, 273 .end = S3C24XX_PA_ADC + S3C24XX_SZ_ADC - 1,
273 .flags = IORESOURCE_MEM, 274 .flags = IORESOURCE_MEM,
274 }, 275 },
275 [1] = { 276 [1] = {
276 .start = IRQ_TC, 277 .start = IRQ_TC,
278 .end = IRQ_TC,
279 .flags = IORESOURCE_IRQ,
280 },
281 [2] = {
282 .start = IRQ_ADC,
277 .end = IRQ_ADC, 283 .end = IRQ_ADC,
278 .flags = IORESOURCE_IRQ, 284 .flags = IORESOURCE_IRQ,
279 } 285 }
@@ -316,8 +322,8 @@ EXPORT_SYMBOL(s3c_device_sdi);
316 322
317static struct resource s3c_spi0_resource[] = { 323static struct resource s3c_spi0_resource[] = {
318 [0] = { 324 [0] = {
319 .start = S3C2410_PA_SPI, 325 .start = S3C24XX_PA_SPI,
320 .end = S3C2410_PA_SPI + 0x1f, 326 .end = S3C24XX_PA_SPI + 0x1f,
321 .flags = IORESOURCE_MEM, 327 .flags = IORESOURCE_MEM,
322 }, 328 },
323 [1] = { 329 [1] = {
@@ -328,11 +334,17 @@ static struct resource s3c_spi0_resource[] = {
328 334
329}; 335};
330 336
337static u64 s3c_device_spi0_dmamask = 0xffffffffUL;
338
331struct platform_device s3c_device_spi0 = { 339struct platform_device s3c_device_spi0 = {
332 .name = "s3c2410-spi", 340 .name = "s3c2410-spi",
333 .id = 0, 341 .id = 0,
334 .num_resources = ARRAY_SIZE(s3c_spi0_resource), 342 .num_resources = ARRAY_SIZE(s3c_spi0_resource),
335 .resource = s3c_spi0_resource, 343 .resource = s3c_spi0_resource,
344 .dev = {
345 .dma_mask = &s3c_device_spi0_dmamask,
346 .coherent_dma_mask = 0xffffffffUL
347 }
336}; 348};
337 349
338EXPORT_SYMBOL(s3c_device_spi0); 350EXPORT_SYMBOL(s3c_device_spi0);
@@ -341,8 +353,8 @@ EXPORT_SYMBOL(s3c_device_spi0);
341 353
342static struct resource s3c_spi1_resource[] = { 354static struct resource s3c_spi1_resource[] = {
343 [0] = { 355 [0] = {
344 .start = S3C2410_PA_SPI + 0x20, 356 .start = S3C24XX_PA_SPI + 0x20,
345 .end = S3C2410_PA_SPI + 0x20 + 0x1f, 357 .end = S3C24XX_PA_SPI + 0x20 + 0x1f,
346 .flags = IORESOURCE_MEM, 358 .flags = IORESOURCE_MEM,
347 }, 359 },
348 [1] = { 360 [1] = {
@@ -353,11 +365,17 @@ static struct resource s3c_spi1_resource[] = {
353 365
354}; 366};
355 367
368static u64 s3c_device_spi1_dmamask = 0xffffffffUL;
369
356struct platform_device s3c_device_spi1 = { 370struct platform_device s3c_device_spi1 = {
357 .name = "s3c2410-spi", 371 .name = "s3c2410-spi",
358 .id = 1, 372 .id = 1,
359 .num_resources = ARRAY_SIZE(s3c_spi1_resource), 373 .num_resources = ARRAY_SIZE(s3c_spi1_resource),
360 .resource = s3c_spi1_resource, 374 .resource = s3c_spi1_resource,
375 .dev = {
376 .dma_mask = &s3c_device_spi1_dmamask,
377 .coherent_dma_mask = 0xffffffffUL
378 }
361}; 379};
362 380
363EXPORT_SYMBOL(s3c_device_spi1); 381EXPORT_SYMBOL(s3c_device_spi1);
@@ -366,8 +384,8 @@ EXPORT_SYMBOL(s3c_device_spi1);
366 384
367static struct resource s3c_timer0_resource[] = { 385static struct resource s3c_timer0_resource[] = {
368 [0] = { 386 [0] = {
369 .start = S3C2410_PA_TIMER + 0x0C, 387 .start = S3C24XX_PA_TIMER + 0x0C,
370 .end = S3C2410_PA_TIMER + 0x0C + 0xB, 388 .end = S3C24XX_PA_TIMER + 0x0C + 0xB,
371 .flags = IORESOURCE_MEM, 389 .flags = IORESOURCE_MEM,
372 }, 390 },
373 [1] = { 391 [1] = {
@@ -391,8 +409,8 @@ EXPORT_SYMBOL(s3c_device_timer0);
391 409
392static struct resource s3c_timer1_resource[] = { 410static struct resource s3c_timer1_resource[] = {
393 [0] = { 411 [0] = {
394 .start = S3C2410_PA_TIMER + 0x18, 412 .start = S3C24XX_PA_TIMER + 0x18,
395 .end = S3C2410_PA_TIMER + 0x23, 413 .end = S3C24XX_PA_TIMER + 0x23,
396 .flags = IORESOURCE_MEM, 414 .flags = IORESOURCE_MEM,
397 }, 415 },
398 [1] = { 416 [1] = {
@@ -416,8 +434,8 @@ EXPORT_SYMBOL(s3c_device_timer1);
416 434
417static struct resource s3c_timer2_resource[] = { 435static struct resource s3c_timer2_resource[] = {
418 [0] = { 436 [0] = {
419 .start = S3C2410_PA_TIMER + 0x24, 437 .start = S3C24XX_PA_TIMER + 0x24,
420 .end = S3C2410_PA_TIMER + 0x2F, 438 .end = S3C24XX_PA_TIMER + 0x2F,
421 .flags = IORESOURCE_MEM, 439 .flags = IORESOURCE_MEM,
422 }, 440 },
423 [1] = { 441 [1] = {
@@ -441,8 +459,8 @@ EXPORT_SYMBOL(s3c_device_timer2);
441 459
442static struct resource s3c_timer3_resource[] = { 460static struct resource s3c_timer3_resource[] = {
443 [0] = { 461 [0] = {
444 .start = S3C2410_PA_TIMER + 0x30, 462 .start = S3C24XX_PA_TIMER + 0x30,
445 .end = S3C2410_PA_TIMER + 0x3B, 463 .end = S3C24XX_PA_TIMER + 0x3B,
446 .flags = IORESOURCE_MEM, 464 .flags = IORESOURCE_MEM,
447 }, 465 },
448 [1] = { 466 [1] = {
diff --git a/arch/arm/mach-s3c2410/dma.c b/arch/arm/mach-s3c2410/dma.c
index 65feaf20d23e..4dbd8e758ea6 100644
--- a/arch/arm/mach-s3c2410/dma.c
+++ b/arch/arm/mach-s3c2410/dma.c
@@ -1152,7 +1152,7 @@ static int __init s3c2410_init_dma(void)
1152 1152
1153 printk("S3C2410 DMA Driver, (c) 2003-2004 Simtec Electronics\n"); 1153 printk("S3C2410 DMA Driver, (c) 2003-2004 Simtec Electronics\n");
1154 1154
1155 dma_base = ioremap(S3C2410_PA_DMA, 0x200); 1155 dma_base = ioremap(S3C24XX_PA_DMA, 0x200);
1156 if (dma_base == NULL) { 1156 if (dma_base == NULL) {
1157 printk(KERN_ERR "dma failed to remap register block\n"); 1157 printk(KERN_ERR "dma failed to remap register block\n");
1158 return -ENOMEM; 1158 return -ENOMEM;
diff --git a/arch/arm/mach-s3c2410/gpio.c b/arch/arm/mach-s3c2410/gpio.c
index 23ea3d5fa09c..cd39e8684584 100644
--- a/arch/arm/mach-s3c2410/gpio.c
+++ b/arch/arm/mach-s3c2410/gpio.c
@@ -31,6 +31,7 @@
31 * 05-Nov-2004 BJD EXPORT_SYMBOL() added for all code 31 * 05-Nov-2004 BJD EXPORT_SYMBOL() added for all code
32 * 13-Mar-2005 BJD Updates for __iomem 32 * 13-Mar-2005 BJD Updates for __iomem
33 * 26-Oct-2005 BJD Added generic configuration types 33 * 26-Oct-2005 BJD Added generic configuration types
34 * 15-Jan-2006 LCVR Added support for the S3C2400
34 */ 35 */
35 36
36 37
@@ -48,7 +49,7 @@
48 49
49void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function) 50void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)
50{ 51{
51 void __iomem *base = S3C2410_GPIO_BASE(pin); 52 void __iomem *base = S3C24XX_GPIO_BASE(pin);
52 unsigned long mask; 53 unsigned long mask;
53 unsigned long con; 54 unsigned long con;
54 unsigned long flags; 55 unsigned long flags;
@@ -95,7 +96,7 @@ EXPORT_SYMBOL(s3c2410_gpio_cfgpin);
95 96
96unsigned int s3c2410_gpio_getcfg(unsigned int pin) 97unsigned int s3c2410_gpio_getcfg(unsigned int pin)
97{ 98{
98 void __iomem *base = S3C2410_GPIO_BASE(pin); 99 void __iomem *base = S3C24XX_GPIO_BASE(pin);
99 unsigned long mask; 100 unsigned long mask;
100 101
101 if (pin < S3C2410_GPIO_BANKB) { 102 if (pin < S3C2410_GPIO_BANKB) {
@@ -111,7 +112,7 @@ EXPORT_SYMBOL(s3c2410_gpio_getcfg);
111 112
112void s3c2410_gpio_pullup(unsigned int pin, unsigned int to) 113void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
113{ 114{
114 void __iomem *base = S3C2410_GPIO_BASE(pin); 115 void __iomem *base = S3C24XX_GPIO_BASE(pin);
115 unsigned long offs = S3C2410_GPIO_OFFSET(pin); 116 unsigned long offs = S3C2410_GPIO_OFFSET(pin);
116 unsigned long flags; 117 unsigned long flags;
117 unsigned long up; 118 unsigned long up;
@@ -133,7 +134,7 @@ EXPORT_SYMBOL(s3c2410_gpio_pullup);
133 134
134void s3c2410_gpio_setpin(unsigned int pin, unsigned int to) 135void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
135{ 136{
136 void __iomem *base = S3C2410_GPIO_BASE(pin); 137 void __iomem *base = S3C24XX_GPIO_BASE(pin);
137 unsigned long offs = S3C2410_GPIO_OFFSET(pin); 138 unsigned long offs = S3C2410_GPIO_OFFSET(pin);
138 unsigned long flags; 139 unsigned long flags;
139 unsigned long dat; 140 unsigned long dat;
@@ -152,7 +153,7 @@ EXPORT_SYMBOL(s3c2410_gpio_setpin);
152 153
153unsigned int s3c2410_gpio_getpin(unsigned int pin) 154unsigned int s3c2410_gpio_getpin(unsigned int pin)
154{ 155{
155 void __iomem *base = S3C2410_GPIO_BASE(pin); 156 void __iomem *base = S3C24XX_GPIO_BASE(pin);
156 unsigned long offs = S3C2410_GPIO_OFFSET(pin); 157 unsigned long offs = S3C2410_GPIO_OFFSET(pin);
157 158
158 return __raw_readl(base + 0x04) & (1<< offs); 159 return __raw_readl(base + 0x04) & (1<< offs);
@@ -166,70 +167,13 @@ unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change)
166 unsigned long misccr; 167 unsigned long misccr;
167 168
168 local_irq_save(flags); 169 local_irq_save(flags);
169 misccr = __raw_readl(S3C2410_MISCCR); 170 misccr = __raw_readl(S3C24XX_MISCCR);
170 misccr &= ~clear; 171 misccr &= ~clear;
171 misccr ^= change; 172 misccr ^= change;
172 __raw_writel(misccr, S3C2410_MISCCR); 173 __raw_writel(misccr, S3C24XX_MISCCR);
173 local_irq_restore(flags); 174 local_irq_restore(flags);
174 175
175 return misccr; 176 return misccr;
176} 177}
177 178
178EXPORT_SYMBOL(s3c2410_modify_misccr); 179EXPORT_SYMBOL(s3c2410_modify_misccr);
179
180int s3c2410_gpio_getirq(unsigned int pin)
181{
182 if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15_EINT23)
183 return -1; /* not valid interrupts */
184
185 if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7)
186 return -1; /* not valid pin */
187
188 if (pin < S3C2410_GPF4)
189 return (pin - S3C2410_GPF0) + IRQ_EINT0;
190
191 if (pin < S3C2410_GPG0)
192 return (pin - S3C2410_GPF4) + IRQ_EINT4;
193
194 return (pin - S3C2410_GPG0) + IRQ_EINT8;
195}
196
197EXPORT_SYMBOL(s3c2410_gpio_getirq);
198
199int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,
200 unsigned int config)
201{
202 void __iomem *reg = S3C2410_EINFLT0;
203 unsigned long flags;
204 unsigned long val;
205
206 if (pin < S3C2410_GPG8 || pin > S3C2410_GPG15)
207 return -1;
208
209 config &= 0xff;
210
211 pin -= S3C2410_GPG8_EINT16;
212 reg += pin & ~3;
213
214 local_irq_save(flags);
215
216 /* update filter width and clock source */
217
218 val = __raw_readl(reg);
219 val &= ~(0xff << ((pin & 3) * 8));
220 val |= config << ((pin & 3) * 8);
221 __raw_writel(val, reg);
222
223 /* update filter enable */
224
225 val = __raw_readl(S3C2410_EXTINT2);
226 val &= ~(1 << ((pin * 4) + 3));
227 val |= on << ((pin * 4) + 3);
228 __raw_writel(val, S3C2410_EXTINT2);
229
230 local_irq_restore(flags);
231
232 return 0;
233}
234
235EXPORT_SYMBOL(s3c2410_gpio_irqfilter);
diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c
index 1c316f14ed94..646a3a5d33a5 100644
--- a/arch/arm/mach-s3c2410/mach-h1940.c
+++ b/arch/arm/mach-s3c2410/mach-h1940.c
@@ -46,10 +46,11 @@
46#include <asm/irq.h> 46#include <asm/irq.h>
47#include <asm/mach-types.h> 47#include <asm/mach-types.h>
48 48
49//#include <asm/debug-ll.h> 49
50#include <asm/arch/regs-serial.h> 50#include <asm/arch/regs-serial.h>
51#include <asm/arch/regs-lcd.h> 51#include <asm/arch/regs-lcd.h>
52 52
53#include <asm/arch/h1940-latch.h>
53#include <asm/arch/fb.h> 54#include <asm/arch/fb.h>
54 55
55#include <linux/serial_core.h> 56#include <linux/serial_core.h>
@@ -59,7 +60,12 @@
59#include "cpu.h" 60#include "cpu.h"
60 61
61static struct map_desc h1940_iodesc[] __initdata = { 62static struct map_desc h1940_iodesc[] __initdata = {
62 /* nothing here yet */ 63 [0] = {
64 .virtual = (unsigned long)H1940_LATCH,
65 .pfn = __phys_to_pfn(H1940_PA_LATCH),
66 .length = SZ_16K,
67 .type = MT_DEVICE
68 },
63}; 69};
64 70
65#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK 71#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
@@ -92,6 +98,25 @@ static struct s3c2410_uartcfg h1940_uartcfgs[] = {
92 } 98 }
93}; 99};
94 100
101/* Board control latch control */
102
103static unsigned int latch_state = H1940_LATCH_DEFAULT;
104
105void h1940_latch_control(unsigned int clear, unsigned int set)
106{
107 unsigned long flags;
108
109 local_irq_save(flags);
110
111 latch_state &= ~clear;
112 latch_state |= set;
113
114 __raw_writel(latch_state, H1940_LATCH);
115
116 local_irq_restore(flags);
117}
118
119EXPORT_SYMBOL_GPL(h1940_latch_control);
95 120
96 121
97/** 122/**
diff --git a/arch/arm/mach-s3c2410/s3c2400-gpio.c b/arch/arm/mach-s3c2410/s3c2400-gpio.c
new file mode 100644
index 000000000000..5127f39fa9bf
--- /dev/null
+++ b/arch/arm/mach-s3c2410/s3c2400-gpio.c
@@ -0,0 +1,45 @@
1/* linux/arch/arm/mach-s3c2410/gpio.c
2 *
3 * Copyright (c) 2006 Lucas Correia Villa Real <lucasvr@gobolinux.org>
4 *
5 * S3C2400 GPIO support
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 * Changelog
22 * 15-Jan-2006 LCVR Splitted from gpio.c, adding support for the S3C2400
23 */
24
25#include <linux/kernel.h>
26#include <linux/init.h>
27#include <linux/module.h>
28#include <linux/interrupt.h>
29#include <linux/ioport.h>
30
31#include <asm/hardware.h>
32#include <asm/irq.h>
33#include <asm/io.h>
34
35#include <asm/arch/regs-gpio.h>
36
37int s3c2400_gpio_getirq(unsigned int pin)
38{
39 if (pin < S3C2410_GPE0 || pin > S3C2400_GPE7_EINT7)
40 return -1; /* not valid interrupts */
41
42 return (pin - S3C2410_GPE0) + IRQ_EINT0;
43}
44
45EXPORT_SYMBOL(s3c2400_gpio_getirq);
diff --git a/arch/arm/mach-s3c2410/s3c2400.h b/arch/arm/mach-s3c2410/s3c2400.h
new file mode 100644
index 000000000000..8b2394e1ed40
--- /dev/null
+++ b/arch/arm/mach-s3c2410/s3c2400.h
@@ -0,0 +1,31 @@
1/* arch/arm/mach-s3c2410/s3c2400.h
2 *
3 * Copyright (c) 2004 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk>
5 *
6 * Header file for S3C2400 cpu support
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 * Modifications:
13 * 09-Fev-2006 LCVR First version, based on s3c2410.h
14*/
15
16#ifdef CONFIG_CPU_S3C2400
17
18extern int s3c2400_init(void);
19
20extern void s3c2400_map_io(struct map_desc *mach_desc, int size);
21
22extern void s3c2400_init_uarts(struct s3c2410_uartcfg *cfg, int no);
23
24extern void s3c2400_init_clocks(int xtal);
25
26#else
27#define s3c2400_init_clocks NULL
28#define s3c2400_init_uarts NULL
29#define s3c2400_map_io NULL
30#define s3c2400_init NULL
31#endif
diff --git a/arch/arm/mach-s3c2410/s3c2410-gpio.c b/arch/arm/mach-s3c2410/s3c2410-gpio.c
new file mode 100644
index 000000000000..d5e1caea1d23
--- /dev/null
+++ b/arch/arm/mach-s3c2410/s3c2410-gpio.c
@@ -0,0 +1,93 @@
1/* linux/arch/arm/mach-s3c2410/gpio.c
2 *
3 * Copyright (c) 2004-2006 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk>
5 *
6 * S3C2410 GPIO support
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 *
22 * Changelog
23 * 15-Jan-2006 LCVR Splitted from gpio.c
24 */
25
26#include <linux/kernel.h>
27#include <linux/init.h>
28#include <linux/module.h>
29#include <linux/interrupt.h>
30#include <linux/ioport.h>
31
32#include <asm/hardware.h>
33#include <asm/irq.h>
34#include <asm/io.h>
35
36#include <asm/arch/regs-gpio.h>
37
38int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,
39 unsigned int config)
40{
41 void __iomem *reg = S3C2410_EINFLT0;
42 unsigned long flags;
43 unsigned long val;
44
45 if (pin < S3C2410_GPG8 || pin > S3C2410_GPG15)
46 return -1;
47
48 config &= 0xff;
49
50 pin -= S3C2410_GPG8_EINT16;
51 reg += pin & ~3;
52
53 local_irq_save(flags);
54
55 /* update filter width and clock source */
56
57 val = __raw_readl(reg);
58 val &= ~(0xff << ((pin & 3) * 8));
59 val |= config << ((pin & 3) * 8);
60 __raw_writel(val, reg);
61
62 /* update filter enable */
63
64 val = __raw_readl(S3C2410_EXTINT2);
65 val &= ~(1 << ((pin * 4) + 3));
66 val |= on << ((pin * 4) + 3);
67 __raw_writel(val, S3C2410_EXTINT2);
68
69 local_irq_restore(flags);
70
71 return 0;
72}
73
74EXPORT_SYMBOL(s3c2410_gpio_irqfilter);
75
76int s3c2410_gpio_getirq(unsigned int pin)
77{
78 if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15_EINT23)
79 return -1; /* not valid interrupts */
80
81 if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7)
82 return -1; /* not valid pin */
83
84 if (pin < S3C2410_GPF4)
85 return (pin - S3C2410_GPF0) + IRQ_EINT0;
86
87 if (pin < S3C2410_GPG0)
88 return (pin - S3C2410_GPF4) + IRQ_EINT4;
89
90 return (pin - S3C2410_GPG0) + IRQ_EINT8;
91}
92
93EXPORT_SYMBOL(s3c2410_gpio_getirq);
diff --git a/arch/arm/mach-s3c2410/sleep.S b/arch/arm/mach-s3c2410/sleep.S
index 61768dac7fee..832fb86a03b4 100644
--- a/arch/arm/mach-s3c2410/sleep.S
+++ b/arch/arm/mach-s3c2410/sleep.S
@@ -72,7 +72,7 @@ ENTRY(s3c2410_cpu_suspend)
72 @@ prepare cpu to sleep 72 @@ prepare cpu to sleep
73 73
74 ldr r4, =S3C2410_REFRESH 74 ldr r4, =S3C2410_REFRESH
75 ldr r5, =S3C2410_MISCCR 75 ldr r5, =S3C24XX_MISCCR
76 ldr r6, =S3C2410_CLKCON 76 ldr r6, =S3C2410_CLKCON
77 ldr r7, [ r4 ] @ get REFRESH (and ensure in TLB) 77 ldr r7, [ r4 ] @ get REFRESH (and ensure in TLB)
78 ldr r8, [ r5 ] @ get MISCCR (and ensure in TLB) 78 ldr r8, [ r5 ] @ get MISCCR (and ensure in TLB)
@@ -133,12 +133,12 @@ ENTRY(s3c2410_cpu_resume)
133 @@ load UART to allow us to print the two characters for 133 @@ load UART to allow us to print the two characters for
134 @@ resume debug 134 @@ resume debug
135 135
136 mov r2, #S3C2410_PA_UART & 0xff000000 136 mov r2, #S3C24XX_PA_UART & 0xff000000
137 orr r2, r2, #S3C2410_PA_UART & 0xff000 137 orr r2, r2, #S3C24XX_PA_UART & 0xff000
138 138
139#if 0 139#if 0
140 /* SMDK2440 LED set */ 140 /* SMDK2440 LED set */
141 mov r14, #S3C2410_PA_GPIO 141 mov r14, #S3C24XX_PA_GPIO
142 ldr r12, [ r14, #0x54 ] 142 ldr r12, [ r14, #0x54 ]
143 bic r12, r12, #3<<4 143 bic r12, r12, #3<<4
144 orr r12, r12, #1<<7 144 orr r12, r12, #1<<7
diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c
index b80d57d51699..722fbabc9cfb 100644
--- a/arch/arm/mach-versatile/pci.c
+++ b/arch/arm/mach-versatile/pci.c
@@ -240,6 +240,14 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
240 int i; 240 int i;
241 int myslot = -1; 241 int myslot = -1;
242 unsigned long val; 242 unsigned long val;
243 void __iomem *local_pci_cfg_base;
244
245 val = __raw_readl(SYS_PCICTL);
246 if (!(val & 1)) {
247 printk("Not plugged into PCI backplane!\n");
248 ret = -EIO;
249 goto out;
250 }
243 251
244 if (nr == 0) { 252 if (nr == 0) {
245 sys->mem_offset = 0; 253 sys->mem_offset = 0;
@@ -253,48 +261,45 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
253 goto out; 261 goto out;
254 } 262 }
255 263
256 __raw_writel(VERSATILE_PCI_MEM_BASE0 >> 28,PCI_IMAP0);
257 __raw_writel(VERSATILE_PCI_MEM_BASE1 >> 28,PCI_IMAP1);
258 __raw_writel(VERSATILE_PCI_MEM_BASE2 >> 28,PCI_IMAP2);
259
260 __raw_writel(1, SYS_PCICTL);
261
262 val = __raw_readl(SYS_PCICTL);
263 if (!(val & 1)) {
264 printk("Not plugged into PCI backplane!\n");
265 ret = -EIO;
266 goto out;
267 }
268
269 /* 264 /*
270 * We need to discover the PCI core first to configure itself 265 * We need to discover the PCI core first to configure itself
271 * before the main PCI probing is performed 266 * before the main PCI probing is performed
272 */ 267 */
273 for (i=0; i<32; i++) { 268 for (i=0; i<32; i++)
274 if ((__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+DEVICE_ID_OFFSET) == VP_PCI_DEVICE_ID) && 269 if ((__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+DEVICE_ID_OFFSET) == VP_PCI_DEVICE_ID) &&
275 (__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+CLASS_ID_OFFSET) == VP_PCI_CLASS_ID)) { 270 (__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+CLASS_ID_OFFSET) == VP_PCI_CLASS_ID)) {
276 myslot = i; 271 myslot = i;
277
278 __raw_writel(myslot, PCI_SELFID);
279 val = __raw_readl(VERSATILE_PCI_CFG_VIRT_BASE+(myslot<<11)+CSR_OFFSET);
280 val |= (1<<2);
281 __raw_writel(val, VERSATILE_PCI_CFG_VIRT_BASE+(myslot<<11)+CSR_OFFSET);
282 break; 272 break;
283 } 273 }
284 }
285 274
286 if (myslot == -1) { 275 if (myslot == -1) {
287 printk("Cannot find PCI core!\n"); 276 printk("Cannot find PCI core!\n");
288 ret = -EIO; 277 ret = -EIO;
289 } else { 278 goto out;
290 printk("PCI core found (slot %d)\n",myslot);
291 /* Do not to map Versatile FPGA PCI device
292 into memory space as we are short of
293 mappable memory */
294 pci_slot_ignore |= (1 << myslot);
295 ret = 1;
296 } 279 }
297 280
281 printk("PCI core found (slot %d)\n",myslot);
282
283 __raw_writel(myslot, PCI_SELFID);
284 local_pci_cfg_base = (void *) VERSATILE_PCI_CFG_VIRT_BASE + (myslot << 11);
285
286 val = __raw_readl(local_pci_cfg_base + CSR_OFFSET);
287 val |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
288 __raw_writel(val, local_pci_cfg_base + CSR_OFFSET);
289
290 /*
291 * Configure the PCI inbound memory windows to be 1:1 mapped to SDRAM
292 */
293 __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_0);
294 __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_1);
295 __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_2);
296
297 /*
298 * Do not to map Versatile FPGA PCI device into memory space
299 */
300 pci_slot_ignore |= (1 << myslot);
301 ret = 1;
302
298 out: 303 out:
299 return ret; 304 return ret;
300} 305}
@@ -305,18 +310,18 @@ struct pci_bus *pci_versatile_scan_bus(int nr, struct pci_sys_data *sys)
305 return pci_scan_bus(sys->busnr, &pci_versatile_ops, sys); 310 return pci_scan_bus(sys->busnr, &pci_versatile_ops, sys);
306} 311}
307 312
308/*
309 * V3_LB_BASE? - local bus address
310 * V3_LB_MAP? - pci bus address
311 */
312void __init pci_versatile_preinit(void) 313void __init pci_versatile_preinit(void)
313{ 314{
314} 315 __raw_writel(VERSATILE_PCI_MEM_BASE0 >> 28, PCI_IMAP0);
316 __raw_writel(VERSATILE_PCI_MEM_BASE1 >> 28, PCI_IMAP1);
317 __raw_writel(VERSATILE_PCI_MEM_BASE2 >> 28, PCI_IMAP2);
315 318
316void __init pci_versatile_postinit(void) 319 __raw_writel(PHYS_OFFSET >> 28, PCI_SMAP0);
317{ 320 __raw_writel(PHYS_OFFSET >> 28, PCI_SMAP1);
318} 321 __raw_writel(PHYS_OFFSET >> 28, PCI_SMAP2);
319 322
323 __raw_writel(1, SYS_PCICTL);
324}
320 325
321/* 326/*
322 * map the specified device/slot/pin to an IRQ. Different backplanes may need to modify this. 327 * map the specified device/slot/pin to an IRQ. Different backplanes may need to modify this.
@@ -326,16 +331,15 @@ static int __init versatile_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
326 int irq; 331 int irq;
327 int devslot = PCI_SLOT(dev->devfn); 332 int devslot = PCI_SLOT(dev->devfn);
328 333
329 /* slot, pin, irq 334 /* slot, pin, irq
330 24 1 27 335 * 24 1 27
331 25 1 28 untested 336 * 25 1 28
332 26 1 29 337 * 26 1 29
333 27 1 30 untested 338 * 27 1 30
334 */ 339 */
335 340 irq = 27 + ((slot + pin - 1) & 3);
336 irq = 27 + ((slot + pin + 2) % 3); /* Fudged */
337 341
338 printk("map irq: slot %d, pin %d, devslot %d, irq: %d\n",slot,pin,devslot,irq); 342 printk("PCI map irq: slot %d, pin %d, devslot %d, irq: %d\n",slot,pin,devslot,irq);
339 343
340 return irq; 344 return irq;
341} 345}
@@ -347,7 +351,6 @@ static struct hw_pci versatile_pci __initdata = {
347 .setup = pci_versatile_setup, 351 .setup = pci_versatile_setup,
348 .scan = pci_versatile_scan_bus, 352 .scan = pci_versatile_scan_bus,
349 .preinit = pci_versatile_preinit, 353 .preinit = pci_versatile_preinit,
350 .postinit = pci_versatile_postinit,
351}; 354};
352 355
353static int __init versatile_pci_init(void) 356static int __init versatile_pci_init(void)
diff --git a/arch/arm/mm/abort-ev6.S b/arch/arm/mm/abort-ev6.S
index dbd346033122..8a7f65ba14b7 100644
--- a/arch/arm/mm/abort-ev6.S
+++ b/arch/arm/mm/abort-ev6.S
@@ -20,7 +20,7 @@
20 */ 20 */
21 .align 5 21 .align 5
22ENTRY(v6_early_abort) 22ENTRY(v6_early_abort)
23#ifdef CONFIG_CPU_MPCORE 23#ifdef CONFIG_CPU_32v6K
24 clrex 24 clrex
25#else 25#else
26 strex r0, r1, [sp] @ Clear the exclusive monitor 26 strex r0, r1, [sp] @ Clear the exclusive monitor
diff --git a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S
index 72966d90e956..2c6c2a7c05a0 100644
--- a/arch/arm/mm/cache-v6.S
+++ b/arch/arm/mm/cache-v6.S
@@ -92,25 +92,20 @@ ENTRY(v6_coherent_kern_range)
92 * - the Icache does not read data from the write buffer 92 * - the Icache does not read data from the write buffer
93 */ 93 */
94ENTRY(v6_coherent_user_range) 94ENTRY(v6_coherent_user_range)
95 bic r0, r0, #CACHE_LINE_SIZE - 1 95
961:
97#ifdef HARVARD_CACHE 96#ifdef HARVARD_CACHE
98 mcr p15, 0, r0, c7, c10, 1 @ clean D line 97 bic r0, r0, #CACHE_LINE_SIZE - 1
99 mcr p15, 0, r0, c7, c5, 1 @ invalidate I line 981: mcr p15, 0, r0, c7, c10, 1 @ clean D line
100#endif 99 add r0, r0, #CACHE_LINE_SIZE
101 mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry
102 add r0, r0, #BTB_FLUSH_SIZE
103 mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry
104 add r0, r0, #BTB_FLUSH_SIZE
105 mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry
106 add r0, r0, #BTB_FLUSH_SIZE
107 mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry
108 add r0, r0, #BTB_FLUSH_SIZE
109 cmp r0, r1 100 cmp r0, r1
110 blo 1b 101 blo 1b
111#ifdef HARVARD_CACHE 102#endif
112 mov r0, #0 103 mov r0, #0
104#ifdef HARVARD_CACHE
113 mcr p15, 0, r0, c7, c10, 4 @ drain write buffer 105 mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
106 mcr p15, 0, r0, c7, c5, 0 @ I+BTB cache invalidate
107#else
108 mcr p15, 0, r0, c7, c5, 6 @ invalidate BTB
114#endif 109#endif
115 mov pc, lr 110 mov pc, lr
116 111
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
index 330695b6b19d..b103e56806bd 100644
--- a/arch/arm/mm/flush.c
+++ b/arch/arm/mm/flush.c
@@ -24,14 +24,16 @@
24static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) 24static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr)
25{ 25{
26 unsigned long to = ALIAS_FLUSH_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); 26 unsigned long to = ALIAS_FLUSH_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT);
27 const int zero = 0;
27 28
28 set_pte(TOP_PTE(to), pfn_pte(pfn, PAGE_KERNEL)); 29 set_pte(TOP_PTE(to), pfn_pte(pfn, PAGE_KERNEL));
29 flush_tlb_kernel_page(to); 30 flush_tlb_kernel_page(to);
30 31
31 asm( "mcrr p15, 0, %1, %0, c14\n" 32 asm( "mcrr p15, 0, %1, %0, c14\n"
32 " mcrr p15, 0, %1, %0, c5\n" 33 " mcr p15, 0, %2, c7, c10, 4\n"
34 " mcr p15, 0, %2, c7, c5, 0\n"
33 : 35 :
34 : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES) 36 : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES), "r" (zero)
35 : "cc"); 37 : "cc");
36} 38}
37 39
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
index de3ce1eec2ec..da9b35974118 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
@@ -142,7 +142,7 @@ __ioremap_pfn(unsigned long pfn, unsigned long offset, size_t size,
142 return NULL; 142 return NULL;
143 addr = (unsigned long)area->addr; 143 addr = (unsigned long)area->addr;
144 if (remap_area_pages(addr, pfn, size, flags)) { 144 if (remap_area_pages(addr, pfn, size, flags)) {
145 vfree(addr); 145 vfree((void *)addr);
146 return NULL; 146 return NULL;
147 } 147 }
148 return (void __iomem *) (offset + (char *)addr); 148 return (void __iomem *) (offset + (char *)addr);
diff --git a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c
index d0245a31d4dd..ef8d30a185a9 100644
--- a/arch/arm/mm/mm-armv.c
+++ b/arch/arm/mm/mm-armv.c
@@ -343,6 +343,12 @@ static struct mem_types mem_types[] __initdata = {
343 PMD_SECT_AP_WRITE | PMD_SECT_BUFFERABLE | 343 PMD_SECT_AP_WRITE | PMD_SECT_BUFFERABLE |
344 PMD_SECT_TEX(1), 344 PMD_SECT_TEX(1),
345 .domain = DOMAIN_IO, 345 .domain = DOMAIN_IO,
346 },
347 [MT_NONSHARED_DEVICE] = {
348 .prot_l1 = PMD_TYPE_TABLE,
349 .prot_sect = PMD_TYPE_SECT | PMD_SECT_NONSHARED_DEV |
350 PMD_SECT_AP_WRITE,
351 .domain = DOMAIN_IO,
346 } 352 }
347}; 353};
348 354
diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S
index 861b35947280..2d3823ec3153 100644
--- a/arch/arm/mm/proc-xscale.S
+++ b/arch/arm/mm/proc-xscale.S
@@ -241,7 +241,15 @@ ENTRY(xscale_flush_user_cache_range)
241 * it also trashes the mini I-cache used by JTAG debuggers. 241 * it also trashes the mini I-cache used by JTAG debuggers.
242 */ 242 */
243ENTRY(xscale_coherent_kern_range) 243ENTRY(xscale_coherent_kern_range)
244 /* FALLTHROUGH */ 244 bic r0, r0, #CACHELINESIZE - 1
2451: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
246 add r0, r0, #CACHELINESIZE
247 cmp r0, r1
248 blo 1b
249 mov r0, #0
250 mcr p15, 0, r0, c7, c5, 0 @ Invalidate I cache & BTB
251 mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer
252 mov pc, lr
245 253
246/* 254/*
247 * coherent_user_range(start, end) 255 * coherent_user_range(start, end)
@@ -252,18 +260,16 @@ ENTRY(xscale_coherent_kern_range)
252 * 260 *
253 * - start - virtual start address 261 * - start - virtual start address
254 * - end - virtual end address 262 * - end - virtual end address
255 *
256 * Note: single I-cache line invalidation isn't used here since
257 * it also trashes the mini I-cache used by JTAG debuggers.
258 */ 263 */
259ENTRY(xscale_coherent_user_range) 264ENTRY(xscale_coherent_user_range)
260 bic r0, r0, #CACHELINESIZE - 1 265 bic r0, r0, #CACHELINESIZE - 1
2611: mcr p15, 0, r0, c7, c10, 1 @ clean D entry 2661: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
267 mcr p15, 0, r0, c7, c5, 1 @ Invalidate I cache entry
262 add r0, r0, #CACHELINESIZE 268 add r0, r0, #CACHELINESIZE
263 cmp r0, r1 269 cmp r0, r1
264 blo 1b 270 blo 1b
265 mov r0, #0 271 mov r0, #0
266 mcr p15, 0, r0, c7, c5, 0 @ Invalidate I cache & BTB 272 mcr p15, 0, r0, c7, c5, 6 @ Invalidate BTB
267 mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer 273 mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer
268 mov pc, lr 274 mov pc, lr
269 275
diff --git a/arch/arm/mm/tlb-v6.S b/arch/arm/mm/tlb-v6.S
index 6f76b89ef46e..fd6adde39091 100644
--- a/arch/arm/mm/tlb-v6.S
+++ b/arch/arm/mm/tlb-v6.S
@@ -80,6 +80,7 @@ ENTRY(v6wbi_flush_kern_tlb_range)
80 add r0, r0, #PAGE_SZ 80 add r0, r0, #PAGE_SZ
81 cmp r0, r1 81 cmp r0, r1
82 blo 1b 82 blo 1b
83 mcr p15, 0, r2, c7, c10, 4 @ data synchronization barrier
83 mov pc, lr 84 mov pc, lr
84 85
85 .section ".text.init", #alloc, #execinstr 86 .section ".text.init", #alloc, #execinstr
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c
index 1415930ceee1..6f8bc1f0e6a1 100644
--- a/arch/arm/oprofile/common.c
+++ b/arch/arm/oprofile/common.c
@@ -137,8 +137,9 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
137 if (spec) { 137 if (spec) {
138 init_MUTEX(&op_arm_sem); 138 init_MUTEX(&op_arm_sem);
139 139
140 if (spec->init() < 0) 140 ret = spec->init();
141 return -ENODEV; 141 if (ret < 0)
142 return ret;
142 143
143 op_arm_model = spec; 144 op_arm_model = spec;
144 init_driverfs(); 145 init_driverfs();
diff --git a/arch/arm/plat-omap/pm.c b/arch/arm/plat-omap/pm.c
index 1a24e2c10714..093efd786f21 100644
--- a/arch/arm/plat-omap/pm.c
+++ b/arch/arm/plat-omap/pm.c
@@ -38,7 +38,6 @@
38#include <linux/pm.h> 38#include <linux/pm.h>
39#include <linux/sched.h> 39#include <linux/sched.h>
40#include <linux/proc_fs.h> 40#include <linux/proc_fs.h>
41#include <linux/pm.h>
42#include <linux/interrupt.h> 41#include <linux/interrupt.h>
43 42
44#include <asm/io.h> 43#include <asm/io.h>
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c
index 792f66375830..ee82763b02b8 100644
--- a/arch/arm/plat-omap/sram.c
+++ b/arch/arm/plat-omap/sram.c
@@ -17,6 +17,7 @@
17#include <linux/init.h> 17#include <linux/init.h>
18 18
19#include <asm/mach/map.h> 19#include <asm/mach/map.h>
20#include <asm/tlb.h>
20#include <asm/io.h> 21#include <asm/io.h>
21#include <asm/cacheflush.h> 22#include <asm/cacheflush.h>
22 23
@@ -96,6 +97,14 @@ void __init omap_map_sram(void)
96 omap_sram_io_desc[0].length); 97 omap_sram_io_desc[0].length);
97 98
98 /* 99 /*
100 * Normally devicemaps_init() would flush caches and tlb after
101 * mdesc->map_io(), but since we're called from map_io(), we
102 * must do it here.
103 */
104 local_flush_tlb_all();
105 flush_cache_all();
106
107 /*
99 * Looks like we need to preserve some bootloader code at the 108 * Looks like we need to preserve some bootloader code at the
100 * beginning of SRAM for jumping to flash for reboot to work... 109 * beginning of SRAM for jumping to flash for reboot to work...
101 */ 110 */
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
index d0f9bb5e9023..8ab5300dcb94 100644
--- a/arch/arm/tools/mach-types
+++ b/arch/arm/tools/mach-types
@@ -12,7 +12,7 @@
12# 12#
13# http://www.arm.linux.org.uk/developer/machines/?action=new 13# http://www.arm.linux.org.uk/developer/machines/?action=new
14# 14#
15# Last update: Mon Jan 9 12:56:42 2006 15# Last update: Mon Feb 20 10:18:02 2006
16# 16#
17# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number 17# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
18# 18#
@@ -904,7 +904,7 @@ wg302v2 MACH_WG302V2 WG302V2 890
904eb42x MACH_EB42X EB42X 891 904eb42x MACH_EB42X EB42X 891
905iq331es MACH_IQ331ES IQ331ES 892 905iq331es MACH_IQ331ES IQ331ES 892
906cosydsp MACH_COSYDSP COSYDSP 893 906cosydsp MACH_COSYDSP COSYDSP 893
907uplat7d MACH_UPLAT7D UPLAT7D 894 907uplat7d_proto MACH_UPLAT7D UPLAT7D 894
908ptdavinci MACH_PTDAVINCI PTDAVINCI 895 908ptdavinci MACH_PTDAVINCI PTDAVINCI 895
909mbus MACH_MBUS MBUS 896 909mbus MACH_MBUS MBUS 896
910nadia2vb MACH_NADIA2VB NADIA2VB 897 910nadia2vb MACH_NADIA2VB NADIA2VB 897
@@ -938,3 +938,34 @@ auckland MACH_AUCKLAND AUCKLAND 924
938ak3220m MACH_AK3320M AK3320M 925 938ak3220m MACH_AK3320M AK3320M 925
939duramax MACH_DURAMAX DURAMAX 926 939duramax MACH_DURAMAX DURAMAX 926
940n35 MACH_N35 N35 927 940n35 MACH_N35 N35 927
941pronghorn MACH_PRONGHORN PRONGHORN 928
942fundy MACH_FUNDY FUNDY 929
943logicpd_pxa270 MACH_LOGICPD_PXA270 LOGICPD_PXA270 930
944cpu777 MACH_CPU777 CPU777 931
945simicon9201 MACH_SIMICON9201 SIMICON9201 932
946leap2_hpm MACH_LEAP2_HPM LEAP2_HPM 933
947cm922txa10 MACH_CM922TXA10 CM922TXA10 934
948sandgate MACH_PXA PXA 935
949sandgate2 MACH_SANDGATE2 SANDGATE2 936
950sandgate2g MACH_SANDGATE2G SANDGATE2G 937
951sandgate2p MACH_SANDGATE2P SANDGATE2P 938
952fred_jack MACH_FRED_JACK FRED_JACK 939
953ttg_color1 MACH_TTG_COLOR1 TTG_COLOR1 940
954nxeb500hmi MACH_NXEB500HMI NXEB500HMI 941
955netdcu8 MACH_NETDCU8 NETDCU8 942
956ml675050_cpu_boa MACH_ML675050_CPU_BOA ML675050_CPU_BOA 943
957ng_fvx538 MACH_NG_FVX538 NG_FVX538 944
958ng_fvs338 MACH_NG_FVS338 NG_FVS338 945
959pnx4103 MACH_PNX4103 PNX4103 946
960hesdb MACH_HESDB HESDB 947
961xsilo MACH_XSILO XSILO 948
962espresso MACH_ESPRESSO ESPRESSO 949
963emlc MACH_EMLC EMLC 950
964sisteron MACH_SISTERON SISTERON 951
965rx1950 MACH_RX1950 RX1950 952
966tsc_venus MACH_TSC_VENUS TSC_VENUS 953
967ds101j MACH_DS101J DS101J 954
968mxc300_30ads MACH_MXC30030ADS MXC30030ADS 955
969fujitsu_wimaxsoc MACH_FUJITSU_WIMAXSOC FUJITSU_WIMAXSOC 956
970dualpcmodem MACH_DUALPCMODEM DUALPCMODEM 957
971gesbc9312 MACH_GESBC9312 GESBC9312 958
diff --git a/arch/arm26/Kconfig b/arch/arm26/Kconfig
index 274e07019b46..dee23d87fc5a 100644
--- a/arch/arm26/Kconfig
+++ b/arch/arm26/Kconfig
@@ -53,14 +53,14 @@ config GENERIC_ISA_DMA
53 53
54config ARCH_MAY_HAVE_PC_FDC 54config ARCH_MAY_HAVE_PC_FDC
55 bool 55 bool
56 default y
57 56
58source "init/Kconfig" 57source "init/Kconfig"
59 58
60 59
61menu "System Type" 60menu "System Type"
62 61
63comment "Archimedes/A5000 Implementations (select only ONE)" 62choice
63 prompt "Archimedes/A5000 Implementations"
64 64
65config ARCH_ARC 65config ARCH_ARC
66 bool "Archimedes" 66 bool "Archimedes"
@@ -73,6 +73,7 @@ config ARCH_ARC
73 73
74config ARCH_A5K 74config ARCH_A5K
75 bool "A5000" 75 bool "A5000"
76 select ARCH_MAY_HAVE_PC_FDC
76 help 77 help
77 Say Y here to to support the Acorn A5000. 78 Say Y here to to support the Acorn A5000.
78 79
@@ -87,6 +88,7 @@ config PAGESIZE_16
87 Say Y here if your Archimedes or A5000 system has only 2MB of 88 Say Y here if your Archimedes or A5000 system has only 2MB of
88 memory, otherwise say N. The resulting kernel will not run on a 89 memory, otherwise say N. The resulting kernel will not run on a
89 machine with 4MB of memory. 90 machine with 4MB of memory.
91endchoice
90endmenu 92endmenu
91 93
92config ISA_DMA_API 94config ISA_DMA_API
diff --git a/arch/arm26/kernel/fiq.c b/arch/arm26/kernel/fiq.c
index 08a97c9498ff..a24272b61f30 100644
--- a/arch/arm26/kernel/fiq.c
+++ b/arch/arm26/kernel/fiq.c
@@ -104,14 +104,14 @@ void set_fiq_regs(struct pt_regs *regs)
104{ 104{
105 register unsigned long tmp, tmp2; 105 register unsigned long tmp, tmp2;
106 __asm__ volatile ( 106 __asm__ volatile (
107 "mov %0, pc 107 "mov %0, pc \n"
108 bic %1, %0, #0x3 108 "bic %1, %0, #0x3 \n"
109 orr %1, %1, %3 109 "orr %1, %1, %3 \n"
110 teqp %1, #0 @ select FIQ mode 110 "teqp %1, #0 @ select FIQ mode \n"
111 mov r0, r0 111 "mov r0, r0 \n"
112 ldmia %2, {r8 - r14} 112 "ldmia %2, {r8 - r14} \n"
113 teqp %0, #0 @ return to SVC mode 113 "teqp %0, #0 @ return to SVC mode \n"
114 mov r0, r0" 114 "mov r0, r0 "
115 : "=&r" (tmp), "=&r" (tmp2) 115 : "=&r" (tmp), "=&r" (tmp2)
116 : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26) 116 : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26)
117 /* These registers aren't modified by the above code in a way 117 /* These registers aren't modified by the above code in a way
@@ -125,14 +125,14 @@ void get_fiq_regs(struct pt_regs *regs)
125{ 125{
126 register unsigned long tmp, tmp2; 126 register unsigned long tmp, tmp2;
127 __asm__ volatile ( 127 __asm__ volatile (
128 "mov %0, pc 128 "mov %0, pc \n"
129 bic %1, %0, #0x3 129 "bic %1, %0, #0x3 \n"
130 orr %1, %1, %3 130 "orr %1, %1, %3 \n"
131 teqp %1, #0 @ select FIQ mode 131 "teqp %1, #0 @ select FIQ mode \n"
132 mov r0, r0 132 "mov r0, r0 \n"
133 stmia %2, {r8 - r14} 133 "stmia %2, {r8 - r14} \n"
134 teqp %0, #0 @ return to SVC mode 134 "teqp %0, #0 @ return to SVC mode \n"
135 mov r0, r0" 135 "mov r0, r0 "
136 : "=&r" (tmp), "=&r" (tmp2) 136 : "=&r" (tmp), "=&r" (tmp2)
137 : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26) 137 : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26)
138 /* These registers aren't modified by the above code in a way 138 /* These registers aren't modified by the above code in a way
diff --git a/arch/arm26/kernel/signal.c b/arch/arm26/kernel/signal.c
index ce2055bdc9ee..2a48c12100c0 100644
--- a/arch/arm26/kernel/signal.c
+++ b/arch/arm26/kernel/signal.c
@@ -480,6 +480,7 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
480{ 480{
481 siginfo_t info; 481 siginfo_t info;
482 int signr; 482 int signr;
483 struct k_sigaction ka;
483 484
484 /* 485 /*
485 * We want the common case to go fast, which 486 * We want the common case to go fast, which
@@ -493,7 +494,7 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
493 if (current->ptrace & PT_SINGLESTEP) 494 if (current->ptrace & PT_SINGLESTEP)
494 ptrace_cancel_bpt(current); 495 ptrace_cancel_bpt(current);
495 496
496 signr = get_signal_to_deliver(&info, regs, NULL); 497 signr = get_signal_to_deliver(&info, &ka, regs, NULL);
497 if (signr > 0) { 498 if (signr > 0) {
498 handle_signal(signr, &info, oldset, regs, syscall); 499 handle_signal(signr, &info, oldset, regs, syscall);
499 if (current->ptrace & PT_SINGLESTEP) 500 if (current->ptrace & PT_SINGLESTEP)
diff --git a/arch/cris/Makefile b/arch/cris/Makefile
index ea65d585cf5e..ee114699ef8e 100644
--- a/arch/cris/Makefile
+++ b/arch/cris/Makefile
@@ -119,7 +119,7 @@ $(SRC_ARCH)/.links:
119 @ln -sfn $(SRC_ARCH)/$(SARCH)/lib $(SRC_ARCH)/lib 119 @ln -sfn $(SRC_ARCH)/$(SARCH)/lib $(SRC_ARCH)/lib
120 @ln -sfn $(SRC_ARCH)/$(SARCH) $(SRC_ARCH)/arch 120 @ln -sfn $(SRC_ARCH)/$(SARCH) $(SRC_ARCH)/arch
121 @ln -sfn $(SRC_ARCH)/$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S 121 @ln -sfn $(SRC_ARCH)/$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S
122 @ln -sfn $(SRC_ARCH)/$(SARCH)/asm-offsets.c $(SRC_ARCH)/kernel/asm-offsets.c 122 @ln -sfn $(SRC_ARCH)/$(SARCH)/kernel/asm-offsets.c $(SRC_ARCH)/kernel/asm-offsets.c
123 @touch $@ 123 @touch $@
124 124
125# Create link to sub arch includes 125# Create link to sub arch includes
diff --git a/arch/cris/arch-v10/kernel/ptrace.c b/arch/cris/arch-v10/kernel/ptrace.c
index f214f74f264e..961c0d58ded4 100644
--- a/arch/cris/arch-v10/kernel/ptrace.c
+++ b/arch/cris/arch-v10/kernel/ptrace.c
@@ -202,18 +202,18 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
202 int i; 202 int i;
203 unsigned long tmp; 203 unsigned long tmp;
204 204
205 ret = 0;
205 for (i = 0; i <= PT_MAX; i++) { 206 for (i = 0; i <= PT_MAX; i++) {
206 tmp = get_reg(child, i); 207 tmp = get_reg(child, i);
207 208
208 if (put_user(tmp, datap)) { 209 if (put_user(tmp, datap)) {
209 ret = -EFAULT; 210 ret = -EFAULT;
210 goto out_tsk; 211 break;
211 } 212 }
212 213
213 data += sizeof(long); 214 data += sizeof(long);
214 } 215 }
215 216
216 ret = 0;
217 break; 217 break;
218 } 218 }
219 219
@@ -222,10 +222,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
222 int i; 222 int i;
223 unsigned long tmp; 223 unsigned long tmp;
224 224
225 ret = 0;
225 for (i = 0; i <= PT_MAX; i++) { 226 for (i = 0; i <= PT_MAX; i++) {
226 if (get_user(tmp, datap)) { 227 if (get_user(tmp, datap)) {
227 ret = -EFAULT; 228 ret = -EFAULT;
228 goto out_tsk; 229 break;
229 } 230 }
230 231
231 if (i == PT_DCCR) { 232 if (i == PT_DCCR) {
@@ -237,7 +238,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
237 data += sizeof(long); 238 data += sizeof(long);
238 } 239 }
239 240
240 ret = 0;
241 break; 241 break;
242 } 242 }
243 243
diff --git a/arch/cris/kernel/setup.c b/arch/cris/kernel/setup.c
index d11206e467ab..1ba57efff60d 100644
--- a/arch/cris/kernel/setup.c
+++ b/arch/cris/kernel/setup.c
@@ -24,7 +24,6 @@
24/* 24/*
25 * Setup options 25 * Setup options
26 */ 26 */
27struct drive_info_struct { char dummy[32]; } drive_info;
28struct screen_info screen_info; 27struct screen_info screen_info;
29 28
30extern int root_mountflags; 29extern int root_mountflags;
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig
index 60a617aff8ba..e08383712370 100644
--- a/arch/frv/Kconfig
+++ b/arch/frv/Kconfig
@@ -25,6 +25,10 @@ config GENERIC_HARDIRQS
25 bool 25 bool
26 default n 26 default n
27 27
28config TIME_LOW_RES
29 bool
30 default y
31
28mainmenu "Fujitsu FR-V Kernel Configuration" 32mainmenu "Fujitsu FR-V Kernel Configuration"
29 33
30source "init/Kconfig" 34source "init/Kconfig"
diff --git a/arch/frv/Makefile b/arch/frv/Makefile
index 90c0fb8d9dc3..d163747d17c0 100644
--- a/arch/frv/Makefile
+++ b/arch/frv/Makefile
@@ -81,7 +81,7 @@ endif
81# - reserve CC3 for use with atomic ops 81# - reserve CC3 for use with atomic ops
82# - all the extra registers are dealt with only at context switch time 82# - all the extra registers are dealt with only at context switch time
83CFLAGS += -mno-fdpic -mgpr-32 -msoft-float -mno-media 83CFLAGS += -mno-fdpic -mgpr-32 -msoft-float -mno-media
84CFLAGS += -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15 84CFLAGS += -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15 -ffixed-icc2
85AFLAGS += -mno-fdpic 85AFLAGS += -mno-fdpic
86ASFLAGS += -mno-fdpic 86ASFLAGS += -mno-fdpic
87 87
diff --git a/arch/frv/kernel/break.S b/arch/frv/kernel/break.S
index 33233dc23e29..687c48d62dde 100644
--- a/arch/frv/kernel/break.S
+++ b/arch/frv/kernel/break.S
@@ -200,12 +200,20 @@ __break_step:
200 movsg bpcsr,gr2 200 movsg bpcsr,gr2
201 sethi.p %hi(__entry_kernel_external_interrupt),gr3 201 sethi.p %hi(__entry_kernel_external_interrupt),gr3
202 setlo %lo(__entry_kernel_external_interrupt),gr3 202 setlo %lo(__entry_kernel_external_interrupt),gr3
203 subcc gr2,gr3,gr0,icc0 203 subcc.p gr2,gr3,gr0,icc0
204 sethi %hi(__entry_uspace_external_interrupt),gr3
205 setlo.p %lo(__entry_uspace_external_interrupt),gr3
204 beq icc0,#2,__break_step_kernel_external_interrupt 206 beq icc0,#2,__break_step_kernel_external_interrupt
205 sethi.p %hi(__entry_uspace_external_interrupt),gr3 207 subcc.p gr2,gr3,gr0,icc0
206 setlo %lo(__entry_uspace_external_interrupt),gr3 208 sethi %hi(__entry_kernel_external_interrupt_virtually_disabled),gr3
207 subcc gr2,gr3,gr0,icc0 209 setlo.p %lo(__entry_kernel_external_interrupt_virtually_disabled),gr3
208 beq icc0,#2,__break_step_uspace_external_interrupt 210 beq icc0,#2,__break_step_uspace_external_interrupt
211 subcc.p gr2,gr3,gr0,icc0
212 sethi %hi(__entry_kernel_external_interrupt_virtual_reenable),gr3
213 setlo.p %lo(__entry_kernel_external_interrupt_virtual_reenable),gr3
214 beq icc0,#2,__break_step_kernel_external_interrupt_virtually_disabled
215 subcc gr2,gr3,gr0,icc0
216 beq icc0,#2,__break_step_kernel_external_interrupt_virtual_reenable
209 217
210 LEDS 0x2007,gr2 218 LEDS 0x2007,gr2
211 219
@@ -254,6 +262,9 @@ __break_step_kernel_softprog_interrupt:
254# step through an external interrupt from kernel mode 262# step through an external interrupt from kernel mode
255 .globl __break_step_kernel_external_interrupt 263 .globl __break_step_kernel_external_interrupt
256__break_step_kernel_external_interrupt: 264__break_step_kernel_external_interrupt:
265 # deal with virtual interrupt disablement
266 beq icc2,#0,__break_step_kernel_external_interrupt_virtually_disabled
267
257 sethi.p %hi(__entry_kernel_external_interrupt_reentry),gr3 268 sethi.p %hi(__entry_kernel_external_interrupt_reentry),gr3
258 setlo %lo(__entry_kernel_external_interrupt_reentry),gr3 269 setlo %lo(__entry_kernel_external_interrupt_reentry),gr3
259 270
@@ -294,6 +305,64 @@ __break_return_as_kernel_prologue:
294#endif 305#endif
295 rett #1 306 rett #1
296 307
308# we single-stepped into an interrupt handler whilst interrupts were merely virtually disabled
309# need to really disable interrupts, set flag, fix up and return
310__break_step_kernel_external_interrupt_virtually_disabled:
311 movsg psr,gr2
312 andi gr2,#~PSR_PIL,gr2
313 ori gr2,#PSR_PIL_14,gr2 /* debugging interrupts only */
314 movgs gr2,psr
315
316 ldi @(gr31,#REG_CCR),gr3
317 movgs gr3,ccr
318 subcc.p gr0,gr0,gr0,icc2 /* leave Z set, clear C */
319
320 # exceptions must've been enabled and we must've been in supervisor mode
321 setlos BPSR_BET|BPSR_BS,gr3
322 movgs gr3,bpsr
323
324 # return to where the interrupt happened
325 movsg pcsr,gr2
326 movgs gr2,bpcsr
327
328 lddi.p @(gr31,#REG_GR(2)),gr2
329
330 xor gr31,gr31,gr31
331 movgs gr0,brr
332#ifdef CONFIG_MMU
333 movsg scr3,gr31
334#endif
335 rett #1
336
337# we stepped through into the virtual interrupt reenablement trap
338#
339# we also want to single step anyway, but after fixing up so that we get an event on the
340# instruction after the broken-into exception returns
341 .globl __break_step_kernel_external_interrupt_virtual_reenable
342__break_step_kernel_external_interrupt_virtual_reenable:
343 movsg psr,gr2
344 andi gr2,#~PSR_PIL,gr2
345 movgs gr2,psr
346
347 ldi @(gr31,#REG_CCR),gr3
348 movgs gr3,ccr
349 subicc gr0,#1,gr0,icc2 /* clear Z, set C */
350
351 # save the adjusted ICC2
352 movsg ccr,gr3
353 sti gr3,@(gr31,#REG_CCR)
354
355 # exceptions must've been enabled and we must've been in supervisor mode
356 setlos BPSR_BET|BPSR_BS,gr3
357 movgs gr3,bpsr
358
359 # return to where the trap happened
360 movsg pcsr,gr2
361 movgs gr2,bpcsr
362
363 # and then process the single step
364 bra __break_continue
365
297# step through an internal exception from uspace mode 366# step through an internal exception from uspace mode
298 .globl __break_step_uspace_softprog_interrupt 367 .globl __break_step_uspace_softprog_interrupt
299__break_step_uspace_softprog_interrupt: 368__break_step_uspace_softprog_interrupt:
diff --git a/arch/frv/kernel/entry-table.S b/arch/frv/kernel/entry-table.S
index 9b9243e2103c..81568acea9cd 100644
--- a/arch/frv/kernel/entry-table.S
+++ b/arch/frv/kernel/entry-table.S
@@ -116,6 +116,8 @@ __break_kerneltrap_fixup_table:
116 .long __break_step_uspace_external_interrupt 116 .long __break_step_uspace_external_interrupt
117 .section .trap.kernel 117 .section .trap.kernel
118 .org \tbr_tt 118 .org \tbr_tt
119 # deal with virtual interrupt disablement
120 beq icc2,#0,__entry_kernel_external_interrupt_virtually_disabled
119 bra __entry_kernel_external_interrupt 121 bra __entry_kernel_external_interrupt
120 .section .trap.fixup.kernel 122 .section .trap.fixup.kernel
121 .org \tbr_tt >> 2 123 .org \tbr_tt >> 2
@@ -259,25 +261,52 @@ __trap_fixup_kernel_data_tlb_miss:
259 .org TBR_TT_TRAP0 261 .org TBR_TT_TRAP0
260 .rept 127 262 .rept 127
261 bra __entry_uspace_softprog_interrupt 263 bra __entry_uspace_softprog_interrupt
262 bra __break_step_uspace_softprog_interrupt 264 .long 0,0,0
263 .long 0,0
264 .endr 265 .endr
265 .org TBR_TT_BREAK 266 .org TBR_TT_BREAK
266 bra __entry_break 267 bra __entry_break
267 .long 0,0,0 268 .long 0,0,0
268 269
270 .section .trap.fixup.user
271 .org TBR_TT_TRAP0 >> 2
272 .rept 127
273 .long __break_step_uspace_softprog_interrupt
274 .endr
275 .org TBR_TT_BREAK >> 2
276 .long 0
277
269 # miscellaneous kernel mode entry points 278 # miscellaneous kernel mode entry points
270 .section .trap.kernel 279 .section .trap.kernel
271 .org TBR_TT_TRAP0 280 .org TBR_TT_TRAP0
272 .rept 127
273 bra __entry_kernel_softprog_interrupt 281 bra __entry_kernel_softprog_interrupt
274 bra __break_step_kernel_softprog_interrupt 282 .org TBR_TT_TRAP1
275 .long 0,0 283 bra __entry_kernel_softprog_interrupt
284
285 # trap #2 in kernel - reenable interrupts
286 .org TBR_TT_TRAP2
287 bra __entry_kernel_external_interrupt_virtual_reenable
288
289 # miscellaneous kernel traps
290 .org TBR_TT_TRAP3
291 .rept 124
292 bra __entry_kernel_softprog_interrupt
293 .long 0,0,0
276 .endr 294 .endr
277 .org TBR_TT_BREAK 295 .org TBR_TT_BREAK
278 bra __entry_break 296 bra __entry_break
279 .long 0,0,0 297 .long 0,0,0
280 298
299 .section .trap.fixup.kernel
300 .org TBR_TT_TRAP0 >> 2
301 .long __break_step_kernel_softprog_interrupt
302 .long __break_step_kernel_softprog_interrupt
303 .long __break_step_kernel_external_interrupt_virtual_reenable
304 .rept 124
305 .long __break_step_kernel_softprog_interrupt
306 .endr
307 .org TBR_TT_BREAK >> 2
308 .long 0
309
281 # miscellaneous debug mode entry points 310 # miscellaneous debug mode entry points
282 .section .trap.break 311 .section .trap.break
283 .org TBR_TT_BREAK 312 .org TBR_TT_BREAK
diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S
index 5f6548388b74..1d21c8d34d8a 100644
--- a/arch/frv/kernel/entry.S
+++ b/arch/frv/kernel/entry.S
@@ -141,7 +141,10 @@ __entry_uspace_external_interrupt_reentry:
141 141
142 movsg gner0,gr4 142 movsg gner0,gr4
143 movsg gner1,gr5 143 movsg gner1,gr5
144 stdi gr4,@(gr28,#REG_GNER0) 144 stdi.p gr4,@(gr28,#REG_GNER0)
145
146 # interrupts start off fully disabled in the interrupt handler
147 subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
145 148
146 # set up kernel global registers 149 # set up kernel global registers
147 sethi.p %hi(__kernel_current_task),gr5 150 sethi.p %hi(__kernel_current_task),gr5
@@ -193,9 +196,8 @@ __entry_uspace_external_interrupt_reentry:
193 .type __entry_kernel_external_interrupt,@function 196 .type __entry_kernel_external_interrupt,@function
194__entry_kernel_external_interrupt: 197__entry_kernel_external_interrupt:
195 LEDS 0x6210 198 LEDS 0x6210
196 199// sub sp,gr15,gr31
197 sub sp,gr15,gr31 200// LEDS32
198 LEDS32
199 201
200 # set up the stack pointer 202 # set up the stack pointer
201 or.p sp,gr0,gr30 203 or.p sp,gr0,gr30
@@ -231,7 +233,10 @@ __entry_kernel_external_interrupt_reentry:
231 stdi gr24,@(gr28,#REG_GR(24)) 233 stdi gr24,@(gr28,#REG_GR(24))
232 stdi gr26,@(gr28,#REG_GR(26)) 234 stdi gr26,@(gr28,#REG_GR(26))
233 sti gr29,@(gr28,#REG_GR(29)) 235 sti gr29,@(gr28,#REG_GR(29))
234 stdi gr30,@(gr28,#REG_GR(30)) 236 stdi.p gr30,@(gr28,#REG_GR(30))
237
238 # note virtual interrupts will be fully enabled upon return
239 subicc gr0,#1,gr0,icc2 /* clear Z, set C */
235 240
236 movsg tbr ,gr20 241 movsg tbr ,gr20
237 movsg psr ,gr22 242 movsg psr ,gr22
@@ -267,7 +272,10 @@ __entry_kernel_external_interrupt_reentry:
267 272
268 movsg gner0,gr4 273 movsg gner0,gr4
269 movsg gner1,gr5 274 movsg gner1,gr5
270 stdi gr4,@(gr28,#REG_GNER0) 275 stdi.p gr4,@(gr28,#REG_GNER0)
276
277 # interrupts start off fully disabled in the interrupt handler
278 subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
271 279
272 # set the return address 280 # set the return address
273 sethi.p %hi(__entry_return_from_kernel_interrupt),gr4 281 sethi.p %hi(__entry_return_from_kernel_interrupt),gr4
@@ -291,6 +299,45 @@ __entry_kernel_external_interrupt_reentry:
291 299
292 .size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt 300 .size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt
293 301
302###############################################################################
303#
304# deal with interrupts that were actually virtually disabled
305# - we need to really disable them, flag the fact and return immediately
306# - if you change this, you must alter break.S also
307#
308###############################################################################
309 .balign L1_CACHE_BYTES
310 .globl __entry_kernel_external_interrupt_virtually_disabled
311 .type __entry_kernel_external_interrupt_virtually_disabled,@function
312__entry_kernel_external_interrupt_virtually_disabled:
313 movsg psr,gr30
314 andi gr30,#~PSR_PIL,gr30
315 ori gr30,#PSR_PIL_14,gr30 ; debugging interrupts only
316 movgs gr30,psr
317 subcc gr0,gr0,gr0,icc2 ; leave Z set, clear C
318 rett #0
319
320 .size __entry_kernel_external_interrupt_virtually_disabled,.-__entry_kernel_external_interrupt_virtually_disabled
321
322###############################################################################
323#
324# deal with re-enablement of interrupts that were pending when virtually re-enabled
325# - set ICC2.C, re-enable the real interrupts and return
326# - we can clear ICC2.Z because we shouldn't be here if it's not 0 [due to TIHI]
327# - if you change this, you must alter break.S also
328#
329###############################################################################
330 .balign L1_CACHE_BYTES
331 .globl __entry_kernel_external_interrupt_virtual_reenable
332 .type __entry_kernel_external_interrupt_virtual_reenable,@function
333__entry_kernel_external_interrupt_virtual_reenable:
334 movsg psr,gr30
335 andi gr30,#~PSR_PIL,gr30 ; re-enable interrupts
336 movgs gr30,psr
337 subicc gr0,#1,gr0,icc2 ; clear Z, set C
338 rett #0
339
340 .size __entry_kernel_external_interrupt_virtual_reenable,.-__entry_kernel_external_interrupt_virtual_reenable
294 341
295############################################################################### 342###############################################################################
296# 343#
@@ -335,6 +382,7 @@ __entry_uspace_softprog_interrupt_reentry:
335 382
336 sethi.p %hi(__entry_return_from_user_exception),gr23 383 sethi.p %hi(__entry_return_from_user_exception),gr23
337 setlo %lo(__entry_return_from_user_exception),gr23 384 setlo %lo(__entry_return_from_user_exception),gr23
385
338 bra __entry_common 386 bra __entry_common
339 387
340 .size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt 388 .size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt
@@ -495,7 +543,10 @@ __entry_common:
495 543
496 movsg gner0,gr4 544 movsg gner0,gr4
497 movsg gner1,gr5 545 movsg gner1,gr5
498 stdi gr4,@(gr28,#REG_GNER0) 546 stdi.p gr4,@(gr28,#REG_GNER0)
547
548 # set up virtual interrupt disablement
549 subicc gr0,#1,gr0,icc2 /* clear Z flag, set C flag */
499 550
500 # set up kernel global registers 551 # set up kernel global registers
501 sethi.p %hi(__kernel_current_task),gr5 552 sethi.p %hi(__kernel_current_task),gr5
@@ -1418,11 +1469,27 @@ sys_call_table:
1418 .long sys_add_key 1469 .long sys_add_key
1419 .long sys_request_key 1470 .long sys_request_key
1420 .long sys_keyctl 1471 .long sys_keyctl
1421 .long sys_ni_syscall // sys_vperfctr_open 1472 .long sys_ioprio_set
1422 .long sys_ni_syscall // sys_vperfctr_control /* 290 */ 1473 .long sys_ioprio_get /* 290 */
1423 .long sys_ni_syscall // sys_vperfctr_unlink 1474 .long sys_inotify_init
1424 .long sys_ni_syscall // sys_vperfctr_iresume 1475 .long sys_inotify_add_watch
1425 .long sys_ni_syscall // sys_vperfctr_read 1476 .long sys_inotify_rm_watch
1477 .long sys_migrate_pages
1478 .long sys_openat /* 295 */
1479 .long sys_mkdirat
1480 .long sys_mknodat
1481 .long sys_fchownat
1482 .long sys_futimesat
1483 .long sys_newfstatat /* 300 */
1484 .long sys_unlinkat
1485 .long sys_renameat
1486 .long sys_linkat
1487 .long sys_symlinkat
1488 .long sys_readlinkat /* 305 */
1489 .long sys_fchmodat
1490 .long sys_faccessat
1491 .long sys_pselect6
1492 .long sys_ppoll
1426 1493
1427 1494
1428syscall_table_size = (. - sys_call_table) 1495syscall_table_size = (. - sys_call_table)
diff --git a/arch/frv/kernel/head.S b/arch/frv/kernel/head.S
index c73b4fe9f6ca..29a5265489b7 100644
--- a/arch/frv/kernel/head.S
+++ b/arch/frv/kernel/head.S
@@ -513,6 +513,9 @@ __head_mmu_enabled:
513 movgs gr0,ccr 513 movgs gr0,ccr
514 movgs gr0,cccr 514 movgs gr0,cccr
515 515
516 # initialise the virtual interrupt handling
517 subcc gr0,gr0,gr0,icc2 /* set Z, clear C */
518
516#ifdef CONFIG_MMU 519#ifdef CONFIG_MMU
517 movgs gr3,scr2 520 movgs gr3,scr2
518 movgs gr3,scr3 521 movgs gr3,scr3
diff --git a/arch/frv/kernel/irq.c b/arch/frv/kernel/irq.c
index 59580c59c62c..27ab4c30aac6 100644
--- a/arch/frv/kernel/irq.c
+++ b/arch/frv/kernel/irq.c
@@ -287,18 +287,11 @@ asmlinkage void do_IRQ(void)
287 struct irq_source *source; 287 struct irq_source *source;
288 int level, cpu; 288 int level, cpu;
289 289
290 irq_enter();
291
290 level = (__frame->tbr >> 4) & 0xf; 292 level = (__frame->tbr >> 4) & 0xf;
291 cpu = smp_processor_id(); 293 cpu = smp_processor_id();
292 294
293#if 0
294 {
295 static u32 irqcount;
296 *(volatile u32 *) 0xe1200004 = ~((irqcount++ << 8) | level);
297 *(volatile u16 *) 0xffc00100 = (u16) ~0x9999;
298 mb();
299 }
300#endif
301
302 if ((unsigned long) __frame - (unsigned long) (current + 1) < 512) 295 if ((unsigned long) __frame - (unsigned long) (current + 1) < 512)
303 BUG(); 296 BUG();
304 297
@@ -308,40 +301,12 @@ asmlinkage void do_IRQ(void)
308 301
309 kstat_this_cpu.irqs[level]++; 302 kstat_this_cpu.irqs[level]++;
310 303
311 irq_enter();
312
313 for (source = frv_irq_levels[level].sources; source; source = source->next) 304 for (source = frv_irq_levels[level].sources; source; source = source->next)
314 source->doirq(source); 305 source->doirq(source);
315 306
316 irq_exit();
317
318 __clr_MASK(level); 307 __clr_MASK(level);
319 308
320 /* only process softirqs if we didn't interrupt another interrupt handler */ 309 irq_exit();
321 if ((__frame->psr & PSR_PIL) == PSR_PIL_0)
322 if (local_softirq_pending())
323 do_softirq();
324
325#ifdef CONFIG_PREEMPT
326 local_irq_disable();
327 while (--current->preempt_count == 0) {
328 if (!(__frame->psr & PSR_S) ||
329 current->need_resched == 0 ||
330 in_interrupt())
331 break;
332 current->preempt_count++;
333 local_irq_enable();
334 preempt_schedule();
335 local_irq_disable();
336 }
337#endif
338
339#if 0
340 {
341 *(volatile u16 *) 0xffc00100 = (u16) ~0x6666;
342 mb();
343 }
344#endif
345 310
346} /* end do_IRQ() */ 311} /* end do_IRQ() */
347 312
diff --git a/arch/frv/mm/kmap.c b/arch/frv/mm/kmap.c
index 539f45e6d15e..c54f18e65ea6 100644
--- a/arch/frv/mm/kmap.c
+++ b/arch/frv/mm/kmap.c
@@ -44,15 +44,6 @@ void iounmap(void *addr)
44} 44}
45 45
46/* 46/*
47 * __iounmap unmaps nearly everything, so be careful
48 * it doesn't free currently pointer/page tables anymore but it
49 * wans't used anyway and might be added later.
50 */
51void __iounmap(void *addr, unsigned long size)
52{
53}
54
55/*
56 * Set new cache mode for some kernel address space. 47 * Set new cache mode for some kernel address space.
57 * The caller must push data for that range itself, if such data may already 48 * The caller must push data for that range itself, if such data may already
58 * be in the cache. 49 * be in the cache.
diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig
index 80940d712acf..98308b018a35 100644
--- a/arch/h8300/Kconfig
+++ b/arch/h8300/Kconfig
@@ -33,6 +33,10 @@ config GENERIC_CALIBRATE_DELAY
33 bool 33 bool
34 default y 34 default y
35 35
36config TIME_LOW_RES
37 bool
38 default y
39
36config ISA 40config ISA
37 bool 41 bool
38 default y 42 default y
diff --git a/arch/h8300/Kconfig.cpu b/arch/h8300/Kconfig.cpu
index a380167a13cf..582797db9603 100644
--- a/arch/h8300/Kconfig.cpu
+++ b/arch/h8300/Kconfig.cpu
@@ -169,7 +169,7 @@ endif
169 169
170config CPU_H8300H 170config CPU_H8300H
171 bool 171 bool
172 depends on (H8002 || H83007 || H83048 || H83068) 172 depends on (H83002 || H83007 || H83048 || H83068)
173 default y 173 default y
174 174
175config CPU_H8S 175config CPU_H8S
diff --git a/arch/h8300/Kconfig.debug b/arch/h8300/Kconfig.debug
index 55034d08abff..e0e9bcb015a9 100644
--- a/arch/h8300/Kconfig.debug
+++ b/arch/h8300/Kconfig.debug
@@ -34,7 +34,7 @@ config GDB_DEBUG
34 help 34 help
35 gdb stub exception support 35 gdb stub exception support
36 36
37config CONFIG_SH_STANDARD_BIOS 37config SH_STANDARD_BIOS
38 bool "Use gdb protocol serial console" 38 bool "Use gdb protocol serial console"
39 depends on (!H8300H_SIM && !H8S_SIM) 39 depends on (!H8300H_SIM && !H8S_SIM)
40 help 40 help
diff --git a/arch/h8300/defconfig b/arch/h8300/defconfig
index 9d9b491cfc2c..8f1ec3297150 100644
--- a/arch/h8300/defconfig
+++ b/arch/h8300/defconfig
@@ -328,7 +328,7 @@ CONFIG_FULLDEBUG=y
328CONFIG_NO_KERNEL_MSG=y 328CONFIG_NO_KERNEL_MSG=y
329# CONFIG_SYSCALL_PRINT is not set 329# CONFIG_SYSCALL_PRINT is not set
330# CONFIG_GDB_DEBUG is not set 330# CONFIG_GDB_DEBUG is not set
331# CONFIG_CONFIG_SH_STANDARD_BIOS is not set 331# CONFIG_SH_STANDARD_BIOS is not set
332# CONFIG_DEFAULT_CMDLINE is not set 332# CONFIG_DEFAULT_CMDLINE is not set
333# CONFIG_BLKDEV_RESERVE is not set 333# CONFIG_BLKDEV_RESERVE is not set
334 334
diff --git a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c
index ed79ae20e88d..dd344f112cfe 100644
--- a/arch/h8300/kernel/process.c
+++ b/arch/h8300/kernel/process.c
@@ -45,6 +45,9 @@
45#include <asm/setup.h> 45#include <asm/setup.h>
46#include <asm/pgtable.h> 46#include <asm/pgtable.h>
47 47
48void (*pm_power_off)(void) = NULL;
49EXPORT_SYMBOL(pm_power_off);
50
48asmlinkage void ret_from_fork(void); 51asmlinkage void ret_from_fork(void);
49 52
50/* 53/*
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index cbde675bc95c..5b1a7d46d1d9 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -47,15 +47,6 @@ config DMI
47 47
48source "init/Kconfig" 48source "init/Kconfig"
49 49
50config DOUBLEFAULT
51 default y
52 bool "Enable doublefault exception handler" if EMBEDDED
53 help
54 This option allows trapping of rare doublefault exceptions that
55 would otherwise cause a system to silently reboot. Disabling this
56 option saves about 4k and might cause you much additional grey
57 hair.
58
59menu "Processor type and features" 50menu "Processor type and features"
60 51
61choice 52choice
@@ -451,12 +442,50 @@ config HIGHMEM4G
451 442
452config HIGHMEM64G 443config HIGHMEM64G
453 bool "64GB" 444 bool "64GB"
445 depends on X86_CMPXCHG64
454 help 446 help
455 Select this if you have a 32-bit processor and more than 4 447 Select this if you have a 32-bit processor and more than 4
456 gigabytes of physical RAM. 448 gigabytes of physical RAM.
457 449
458endchoice 450endchoice
459 451
452choice
453 depends on EXPERIMENTAL && !X86_PAE
454 prompt "Memory split"
455 default VMSPLIT_3G
456 help
457 Select the desired split between kernel and user memory.
458
459 If the address range available to the kernel is less than the
460 physical memory installed, the remaining memory will be available
461 as "high memory". Accessing high memory is a little more costly
462 than low memory, as it needs to be mapped into the kernel first.
463 Note that increasing the kernel address space limits the range
464 available to user programs, making the address space there
465 tighter. Selecting anything other than the default 3G/1G split
466 will also likely make your kernel incompatible with binary-only
467 kernel modules.
468
469 If you are not absolutely sure what you are doing, leave this
470 option alone!
471
472 config VMSPLIT_3G
473 bool "3G/1G user/kernel split"
474 config VMSPLIT_3G_OPT
475 bool "3G/1G user/kernel split (for full 1G low memory)"
476 config VMSPLIT_2G
477 bool "2G/2G user/kernel split"
478 config VMSPLIT_1G
479 bool "1G/3G user/kernel split"
480endchoice
481
482config PAGE_OFFSET
483 hex
484 default 0xB0000000 if VMSPLIT_3G_OPT
485 default 0x78000000 if VMSPLIT_2G
486 default 0x40000000 if VMSPLIT_1G
487 default 0xC0000000
488
460config HIGHMEM 489config HIGHMEM
461 bool 490 bool
462 depends on HIGHMEM64G || HIGHMEM4G 491 depends on HIGHMEM64G || HIGHMEM4G
@@ -704,13 +733,22 @@ config PHYSICAL_START
704 733
705config HOTPLUG_CPU 734config HOTPLUG_CPU
706 bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" 735 bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
707 depends on SMP && HOTPLUG && EXPERIMENTAL 736 depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER
708 ---help--- 737 ---help---
709 Say Y here to experiment with turning CPUs off and on. CPUs 738 Say Y here to experiment with turning CPUs off and on. CPUs
710 can be controlled through /sys/devices/system/cpu. 739 can be controlled through /sys/devices/system/cpu.
711 740
712 Say N. 741 Say N.
713 742
743config DOUBLEFAULT
744 default y
745 bool "Enable doublefault exception handler" if EMBEDDED
746 help
747 This option allows trapping of rare doublefault exceptions that
748 would otherwise cause a system to silently reboot. Disabling this
749 option saves about 4k and might cause you much additional grey
750 hair.
751
714endmenu 752endmenu
715 753
716 754
@@ -1022,6 +1060,7 @@ source "arch/i386/oprofile/Kconfig"
1022 1060
1023config KPROBES 1061config KPROBES
1024 bool "Kprobes (EXPERIMENTAL)" 1062 bool "Kprobes (EXPERIMENTAL)"
1063 depends on EXPERIMENTAL && MODULES
1025 help 1064 help
1026 Kprobes allows you to trap at almost any kernel address and 1065 Kprobes allows you to trap at almost any kernel address and
1027 execute a callback function. register_kprobe() establishes 1066 execute a callback function. register_kprobe() establishes
diff --git a/arch/i386/boot/.gitignore b/arch/i386/boot/.gitignore
new file mode 100644
index 000000000000..495f20c085de
--- /dev/null
+++ b/arch/i386/boot/.gitignore
@@ -0,0 +1,3 @@
1bootsect
2bzImage
3setup
diff --git a/arch/i386/boot/tools/.gitignore b/arch/i386/boot/tools/.gitignore
new file mode 100644
index 000000000000..378eac25d311
--- /dev/null
+++ b/arch/i386/boot/tools/.gitignore
@@ -0,0 +1 @@
build
diff --git a/arch/i386/kernel/.gitignore b/arch/i386/kernel/.gitignore
new file mode 100644
index 000000000000..40836ad9079c
--- /dev/null
+++ b/arch/i386/kernel/.gitignore
@@ -0,0 +1 @@
vsyscall.lds
diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile
index 60c3f76dfca4..65656c033d70 100644
--- a/arch/i386/kernel/Makefile
+++ b/arch/i386/kernel/Makefile
@@ -7,11 +7,11 @@ extra-y := head.o init_task.o vmlinux.lds
7obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \ 7obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \
8 ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \ 8 ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
9 pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \ 9 pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
10 quirks.o i8237.o 10 quirks.o i8237.o topology.o
11 11
12obj-y += cpu/ 12obj-y += cpu/
13obj-y += timers/ 13obj-y += timers/
14obj-$(CONFIG_ACPI) += acpi/ 14obj-y += acpi/
15obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o 15obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o
16obj-$(CONFIG_MCA) += mca.o 16obj-$(CONFIG_MCA) += mca.o
17obj-$(CONFIG_X86_MSR) += msr.o 17obj-$(CONFIG_X86_MSR) += msr.o
diff --git a/arch/i386/kernel/acpi/Makefile b/arch/i386/kernel/acpi/Makefile
index 267ca48e1b6c..7e9ac99354f4 100644
--- a/arch/i386/kernel/acpi/Makefile
+++ b/arch/i386/kernel/acpi/Makefile
@@ -1,8 +1,8 @@
1obj-y := boot.o 1obj-$(CONFIG_ACPI) += boot.o
2obj-$(CONFIG_X86_IO_APIC) += earlyquirk.o 2obj-$(CONFIG_X86_IO_APIC) += earlyquirk.o
3obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o 3obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o
4 4
5ifneq ($(CONFIG_ACPI_PROCESSOR),) 5ifneq ($(CONFIG_ACPI_PROCESSOR),)
6obj-y += cstate.o 6obj-y += cstate.o processor.o
7endif 7endif
8 8
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c
index 2111529dea77..f1a21945963d 100644
--- a/arch/i386/kernel/acpi/boot.c
+++ b/arch/i386/kernel/acpi/boot.c
@@ -248,10 +248,17 @@ acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end)
248 248
249 acpi_table_print_madt_entry(header); 249 acpi_table_print_madt_entry(header);
250 250
251 /* Register even disabled CPUs for cpu hotplug */ 251 /* Record local apic id only when enabled */
252 252 if (processor->flags.enabled)
253 x86_acpiid_to_apicid[processor->acpi_id] = processor->id; 253 x86_acpiid_to_apicid[processor->acpi_id] = processor->id;
254 254
255 /*
256 * We need to register disabled CPU as well to permit
257 * counting disabled CPUs. This allows us to size
258 * cpus_possible_map more accurately, to permit
259 * to not preallocating memory for all NR_CPUS
260 * when we use CPU hotplug.
261 */
255 mp_register_lapic(processor->id, /* APIC ID */ 262 mp_register_lapic(processor->id, /* APIC ID */
256 processor->flags.enabled); /* Enabled? */ 263 processor->flags.enabled); /* Enabled? */
257 264
@@ -464,7 +471,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
464 * success: return IRQ number (>=0) 471 * success: return IRQ number (>=0)
465 * failure: return < 0 472 * failure: return < 0
466 */ 473 */
467int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) 474int acpi_register_gsi(u32 gsi, int triggering, int polarity)
468{ 475{
469 unsigned int irq; 476 unsigned int irq;
470 unsigned int plat_gsi = gsi; 477 unsigned int plat_gsi = gsi;
@@ -476,14 +483,14 @@ int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
476 if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) { 483 if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
477 extern void eisa_set_level_irq(unsigned int irq); 484 extern void eisa_set_level_irq(unsigned int irq);
478 485
479 if (edge_level == ACPI_LEVEL_SENSITIVE) 486 if (triggering == ACPI_LEVEL_SENSITIVE)
480 eisa_set_level_irq(gsi); 487 eisa_set_level_irq(gsi);
481 } 488 }
482#endif 489#endif
483 490
484#ifdef CONFIG_X86_IO_APIC 491#ifdef CONFIG_X86_IO_APIC
485 if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) { 492 if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) {
486 plat_gsi = mp_register_gsi(gsi, edge_level, active_high_low); 493 plat_gsi = mp_register_gsi(gsi, triggering, polarity);
487 } 494 }
488#endif 495#endif
489 acpi_gsi_to_irq(plat_gsi, &irq); 496 acpi_gsi_to_irq(plat_gsi, &irq);
@@ -1104,9 +1111,6 @@ int __init acpi_boot_table_init(void)
1104 disable_acpi(); 1111 disable_acpi();
1105 return error; 1112 return error;
1106 } 1113 }
1107#ifdef __i386__
1108 check_acpi_pci();
1109#endif
1110 1114
1111 acpi_table_parse(ACPI_BOOT, acpi_parse_sbf); 1115 acpi_table_parse(ACPI_BOOT, acpi_parse_sbf);
1112 1116
diff --git a/arch/i386/kernel/acpi/cstate.c b/arch/i386/kernel/acpi/cstate.c
index 4c3036ba65df..25db49ef1770 100644
--- a/arch/i386/kernel/acpi/cstate.c
+++ b/arch/i386/kernel/acpi/cstate.c
@@ -14,64 +14,6 @@
14#include <acpi/processor.h> 14#include <acpi/processor.h>
15#include <asm/acpi.h> 15#include <asm/acpi.h>
16 16
17static void acpi_processor_power_init_intel_pdc(struct acpi_processor_power
18 *pow)
19{
20 struct acpi_object_list *obj_list;
21 union acpi_object *obj;
22 u32 *buf;
23
24 /* allocate and initialize pdc. It will be used later. */
25 obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
26 if (!obj_list) {
27 printk(KERN_ERR "Memory allocation error\n");
28 return;
29 }
30
31 obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
32 if (!obj) {
33 printk(KERN_ERR "Memory allocation error\n");
34 kfree(obj_list);
35 return;
36 }
37
38 buf = kmalloc(12, GFP_KERNEL);
39 if (!buf) {
40 printk(KERN_ERR "Memory allocation error\n");
41 kfree(obj);
42 kfree(obj_list);
43 return;
44 }
45
46 buf[0] = ACPI_PDC_REVISION_ID;
47 buf[1] = 1;
48 buf[2] = ACPI_PDC_C_CAPABILITY_SMP;
49
50 obj->type = ACPI_TYPE_BUFFER;
51 obj->buffer.length = 12;
52 obj->buffer.pointer = (u8 *) buf;
53 obj_list->count = 1;
54 obj_list->pointer = obj;
55 pow->pdc = obj_list;
56
57 return;
58}
59
60/* Initialize _PDC data based on the CPU vendor */
61void acpi_processor_power_init_pdc(struct acpi_processor_power *pow,
62 unsigned int cpu)
63{
64 struct cpuinfo_x86 *c = cpu_data + cpu;
65
66 pow->pdc = NULL;
67 if (c->x86_vendor == X86_VENDOR_INTEL)
68 acpi_processor_power_init_intel_pdc(pow);
69
70 return;
71}
72
73EXPORT_SYMBOL(acpi_processor_power_init_pdc);
74
75/* 17/*
76 * Initialize bm_flags based on the CPU cache properties 18 * Initialize bm_flags based on the CPU cache properties
77 * On SMP it depends on cache configuration 19 * On SMP it depends on cache configuration
diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c
index f1b9d2a46dab..2e3b643a4dc4 100644
--- a/arch/i386/kernel/acpi/earlyquirk.c
+++ b/arch/i386/kernel/acpi/earlyquirk.c
@@ -7,14 +7,22 @@
7#include <linux/pci.h> 7#include <linux/pci.h>
8#include <asm/pci-direct.h> 8#include <asm/pci-direct.h>
9#include <asm/acpi.h> 9#include <asm/acpi.h>
10#include <asm/apic.h>
10 11
11static int __init check_bridge(int vendor, int device) 12static int __init check_bridge(int vendor, int device)
12{ 13{
14#ifdef CONFIG_ACPI
13 /* According to Nvidia all timer overrides are bogus. Just ignore 15 /* According to Nvidia all timer overrides are bogus. Just ignore
14 them all. */ 16 them all. */
15 if (vendor == PCI_VENDOR_ID_NVIDIA) { 17 if (vendor == PCI_VENDOR_ID_NVIDIA) {
16 acpi_skip_timer_override = 1; 18 acpi_skip_timer_override = 1;
17 } 19 }
20#endif
21 if (vendor == PCI_VENDOR_ID_ATI && timer_over_8254 == 1) {
22 timer_over_8254 = 0;
23 printk(KERN_INFO "ATI board detected. Disabling timer routing "
24 "over 8254.\n");
25 }
18 return 0; 26 return 0;
19} 27}
20 28
diff --git a/arch/i386/kernel/acpi/processor.c b/arch/i386/kernel/acpi/processor.c
new file mode 100644
index 000000000000..9f4cc02717ec
--- /dev/null
+++ b/arch/i386/kernel/acpi/processor.c
@@ -0,0 +1,75 @@
1/*
2 * arch/i386/kernel/acpi/processor.c
3 *
4 * Copyright (C) 2005 Intel Corporation
5 * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
6 * - Added _PDC for platforms with Intel CPUs
7 */
8
9#include <linux/kernel.h>
10#include <linux/module.h>
11#include <linux/init.h>
12#include <linux/acpi.h>
13
14#include <acpi/processor.h>
15#include <asm/acpi.h>
16
17static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
18{
19 struct acpi_object_list *obj_list;
20 union acpi_object *obj;
21 u32 *buf;
22
23 /* allocate and initialize pdc. It will be used later. */
24 obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
25 if (!obj_list) {
26 printk(KERN_ERR "Memory allocation error\n");
27 return;
28 }
29
30 obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
31 if (!obj) {
32 printk(KERN_ERR "Memory allocation error\n");
33 kfree(obj_list);
34 return;
35 }
36
37 buf = kmalloc(12, GFP_KERNEL);
38 if (!buf) {
39 printk(KERN_ERR "Memory allocation error\n");
40 kfree(obj);
41 kfree(obj_list);
42 return;
43 }
44
45 buf[0] = ACPI_PDC_REVISION_ID;
46 buf[1] = 1;
47 buf[2] = ACPI_PDC_C_CAPABILITY_SMP;
48
49 if (cpu_has(c, X86_FEATURE_EST))
50 buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP;
51
52 obj->type = ACPI_TYPE_BUFFER;
53 obj->buffer.length = 12;
54 obj->buffer.pointer = (u8 *) buf;
55 obj_list->count = 1;
56 obj_list->pointer = obj;
57 pr->pdc = obj_list;
58
59 return;
60}
61
62/* Initialize _PDC data based on the CPU vendor */
63void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
64{
65 unsigned int cpu = pr->id;
66 struct cpuinfo_x86 *c = cpu_data + cpu;
67
68 pr->pdc = NULL;
69 if (c->x86_vendor == X86_VENDOR_INTEL)
70 init_intel_pdc(pr, c);
71
72 return;
73}
74
75EXPORT_SYMBOL(arch_acpi_processor_init_pdc);
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c
index acd3f1e34ca6..776c90989e06 100644
--- a/arch/i386/kernel/apic.c
+++ b/arch/i386/kernel/apic.c
@@ -75,8 +75,10 @@ void ack_bad_irq(unsigned int irq)
75 * holds up an irq slot - in excessive cases (when multiple 75 * holds up an irq slot - in excessive cases (when multiple
76 * unexpected vectors occur) that might lock up the APIC 76 * unexpected vectors occur) that might lock up the APIC
77 * completely. 77 * completely.
78 * But only ack when the APIC is enabled -AK
78 */ 79 */
79 ack_APIC_irq(); 80 if (cpu_has_apic)
81 ack_APIC_irq();
80} 82}
81 83
82void __init apic_intr_init(void) 84void __init apic_intr_init(void)
@@ -568,16 +570,18 @@ void __devinit setup_local_APIC(void)
568 */ 570 */
569void lapic_shutdown(void) 571void lapic_shutdown(void)
570{ 572{
573 unsigned long flags;
574
571 if (!cpu_has_apic) 575 if (!cpu_has_apic)
572 return; 576 return;
573 577
574 local_irq_disable(); 578 local_irq_save(flags);
575 clear_local_APIC(); 579 clear_local_APIC();
576 580
577 if (enabled_via_apicbase) 581 if (enabled_via_apicbase)
578 disable_local_APIC(); 582 disable_local_APIC();
579 583
580 local_irq_enable(); 584 local_irq_restore(flags);
581} 585}
582 586
583#ifdef CONFIG_PM 587#ifdef CONFIG_PM
@@ -1303,6 +1307,7 @@ int __init APIC_init_uniprocessor (void)
1303 if (!cpu_has_apic && APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) { 1307 if (!cpu_has_apic && APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
1304 printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n", 1308 printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n",
1305 boot_cpu_physical_apicid); 1309 boot_cpu_physical_apicid);
1310 clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability);
1306 return -1; 1311 return -1;
1307 } 1312 }
1308 1313
diff --git a/arch/i386/kernel/cpu/amd.c b/arch/i386/kernel/cpu/amd.c
index 333578a4e91a..0810f81f2a05 100644
--- a/arch/i386/kernel/cpu/amd.c
+++ b/arch/i386/kernel/cpu/amd.c
@@ -282,3 +282,11 @@ int __init amd_init_cpu(void)
282} 282}
283 283
284//early_arch_initcall(amd_init_cpu); 284//early_arch_initcall(amd_init_cpu);
285
286static int __init amd_exit_cpu(void)
287{
288 cpu_devs[X86_VENDOR_AMD] = NULL;
289 return 0;
290}
291
292late_initcall(amd_exit_cpu);
diff --git a/arch/i386/kernel/cpu/centaur.c b/arch/i386/kernel/cpu/centaur.c
index 394814e57672..f52669ecb93f 100644
--- a/arch/i386/kernel/cpu/centaur.c
+++ b/arch/i386/kernel/cpu/centaur.c
@@ -405,10 +405,6 @@ static void __init init_centaur(struct cpuinfo_x86 *c)
405 winchip2_protect_mcr(); 405 winchip2_protect_mcr();
406#endif 406#endif
407 break; 407 break;
408 case 10:
409 name="4";
410 /* no info on the WC4 yet */
411 break;
412 default: 408 default:
413 name="??"; 409 name="??";
414 } 410 }
@@ -474,3 +470,11 @@ int __init centaur_init_cpu(void)
474} 470}
475 471
476//early_arch_initcall(centaur_init_cpu); 472//early_arch_initcall(centaur_init_cpu);
473
474static int __init centaur_exit_cpu(void)
475{
476 cpu_devs[X86_VENDOR_CENTAUR] = NULL;
477 return 0;
478}
479
480late_initcall(centaur_exit_cpu);
diff --git a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c
index 15aee26ec2b6..e6bd095ae108 100644
--- a/arch/i386/kernel/cpu/common.c
+++ b/arch/i386/kernel/cpu/common.c
@@ -4,6 +4,7 @@
4#include <linux/smp.h> 4#include <linux/smp.h>
5#include <linux/module.h> 5#include <linux/module.h>
6#include <linux/percpu.h> 6#include <linux/percpu.h>
7#include <linux/bootmem.h>
7#include <asm/semaphore.h> 8#include <asm/semaphore.h>
8#include <asm/processor.h> 9#include <asm/processor.h>
9#include <asm/i387.h> 10#include <asm/i387.h>
@@ -18,6 +19,9 @@
18 19
19#include "cpu.h" 20#include "cpu.h"
20 21
22DEFINE_PER_CPU(struct Xgt_desc_struct, cpu_gdt_descr);
23EXPORT_PER_CPU_SYMBOL(cpu_gdt_descr);
24
21DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]); 25DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]);
22EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack); 26EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack);
23 27
@@ -44,6 +48,7 @@ static void default_init(struct cpuinfo_x86 * c)
44 48
45static struct cpu_dev default_cpu = { 49static struct cpu_dev default_cpu = {
46 .c_init = default_init, 50 .c_init = default_init,
51 .c_vendor = "Unknown",
47}; 52};
48static struct cpu_dev * this_cpu = &default_cpu; 53static struct cpu_dev * this_cpu = &default_cpu;
49 54
@@ -150,6 +155,7 @@ static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early)
150{ 155{
151 char *v = c->x86_vendor_id; 156 char *v = c->x86_vendor_id;
152 int i; 157 int i;
158 static int printed;
153 159
154 for (i = 0; i < X86_VENDOR_NUM; i++) { 160 for (i = 0; i < X86_VENDOR_NUM; i++) {
155 if (cpu_devs[i]) { 161 if (cpu_devs[i]) {
@@ -159,10 +165,17 @@ static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early)
159 c->x86_vendor = i; 165 c->x86_vendor = i;
160 if (!early) 166 if (!early)
161 this_cpu = cpu_devs[i]; 167 this_cpu = cpu_devs[i];
162 break; 168 return;
163 } 169 }
164 } 170 }
165 } 171 }
172 if (!printed) {
173 printed++;
174 printk(KERN_ERR "CPU: Vendor unknown, using generic init.\n");
175 printk(KERN_ERR "CPU: Your system may be unstable.\n");
176 }
177 c->x86_vendor = X86_VENDOR_UNKNOWN;
178 this_cpu = &default_cpu;
166} 179}
167 180
168 181
@@ -265,10 +278,10 @@ void __devinit generic_identify(struct cpuinfo_x86 * c)
265 c->x86_capability[4] = excap; 278 c->x86_capability[4] = excap;
266 c->x86 = (tfms >> 8) & 15; 279 c->x86 = (tfms >> 8) & 15;
267 c->x86_model = (tfms >> 4) & 15; 280 c->x86_model = (tfms >> 4) & 15;
268 if (c->x86 == 0xf) { 281 if (c->x86 == 0xf)
269 c->x86 += (tfms >> 20) & 0xff; 282 c->x86 += (tfms >> 20) & 0xff;
283 if (c->x86 >= 0x6)
270 c->x86_model += ((tfms >> 16) & 0xF) << 4; 284 c->x86_model += ((tfms >> 16) & 0xF) << 4;
271 }
272 c->x86_mask = tfms & 15; 285 c->x86_mask = tfms & 15;
273 } else { 286 } else {
274 /* Have CPUID level 0 only - unheard of */ 287 /* Have CPUID level 0 only - unheard of */
@@ -562,8 +575,9 @@ void __devinit cpu_init(void)
562 int cpu = smp_processor_id(); 575 int cpu = smp_processor_id();
563 struct tss_struct * t = &per_cpu(init_tss, cpu); 576 struct tss_struct * t = &per_cpu(init_tss, cpu);
564 struct thread_struct *thread = &current->thread; 577 struct thread_struct *thread = &current->thread;
565 struct desc_struct *gdt = get_cpu_gdt_table(cpu); 578 struct desc_struct *gdt;
566 __u32 stk16_off = (__u32)&per_cpu(cpu_16bit_stack, cpu); 579 __u32 stk16_off = (__u32)&per_cpu(cpu_16bit_stack, cpu);
580 struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu);
567 581
568 if (cpu_test_and_set(cpu, cpu_initialized)) { 582 if (cpu_test_and_set(cpu, cpu_initialized)) {
569 printk(KERN_WARNING "CPU#%d already initialized!\n", cpu); 583 printk(KERN_WARNING "CPU#%d already initialized!\n", cpu);
@@ -581,6 +595,25 @@ void __devinit cpu_init(void)
581 } 595 }
582 596
583 /* 597 /*
598 * This is a horrible hack to allocate the GDT. The problem
599 * is that cpu_init() is called really early for the boot CPU
600 * (and hence needs bootmem) but much later for the secondary
601 * CPUs, when bootmem will have gone away
602 */
603 if (NODE_DATA(0)->bdata->node_bootmem_map) {
604 gdt = (struct desc_struct *)alloc_bootmem_pages(PAGE_SIZE);
605 /* alloc_bootmem_pages panics on failure, so no check */
606 memset(gdt, 0, PAGE_SIZE);
607 } else {
608 gdt = (struct desc_struct *)get_zeroed_page(GFP_KERNEL);
609 if (unlikely(!gdt)) {
610 printk(KERN_CRIT "CPU%d failed to allocate GDT\n", cpu);
611 for (;;)
612 local_irq_enable();
613 }
614 }
615
616 /*
584 * Initialize the per-CPU GDT with the boot GDT, 617 * Initialize the per-CPU GDT with the boot GDT,
585 * and set up the GDT descriptor: 618 * and set up the GDT descriptor:
586 */ 619 */
@@ -592,10 +625,10 @@ void __devinit cpu_init(void)
592 ((((__u64)stk16_off) << 32) & 0xff00000000000000ULL) | 625 ((((__u64)stk16_off) << 32) & 0xff00000000000000ULL) |
593 (CPU_16BIT_STACK_SIZE - 1); 626 (CPU_16BIT_STACK_SIZE - 1);
594 627
595 cpu_gdt_descr[cpu].size = GDT_SIZE - 1; 628 cpu_gdt_descr->size = GDT_SIZE - 1;
596 cpu_gdt_descr[cpu].address = (unsigned long)gdt; 629 cpu_gdt_descr->address = (unsigned long)gdt;
597 630
598 load_gdt(&cpu_gdt_descr[cpu]); 631 load_gdt(cpu_gdt_descr);
599 load_idt(&idt_descr); 632 load_idt(&idt_descr);
600 633
601 /* 634 /*
diff --git a/arch/i386/kernel/cpu/cpufreq/Kconfig b/arch/i386/kernel/cpu/cpufreq/Kconfig
index 0f1eb507233b..26892d2099b0 100644
--- a/arch/i386/kernel/cpu/cpufreq/Kconfig
+++ b/arch/i386/kernel/cpu/cpufreq/Kconfig
@@ -96,6 +96,7 @@ config X86_POWERNOW_K8_ACPI
96 96
97config X86_GX_SUSPMOD 97config X86_GX_SUSPMOD
98 tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation" 98 tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation"
99 depends on PCI
99 help 100 help
100 This add the CPUFreq driver for NatSemi Geode processors which 101 This add the CPUFreq driver for NatSemi Geode processors which
101 support suspend modulation. 102 support suspend modulation.
diff --git a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
index 7975e79d5fa4..3852d0a4c1b5 100644
--- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
+++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
@@ -295,68 +295,6 @@ acpi_cpufreq_guess_freq (
295} 295}
296 296
297 297
298/*
299 * acpi_processor_cpu_init_pdc_est - let BIOS know about the SMP capabilities
300 * of this driver
301 * @perf: processor-specific acpi_io_data struct
302 * @cpu: CPU being initialized
303 *
304 * To avoid issues with legacy OSes, some BIOSes require to be informed of
305 * the SMP capabilities of OS P-state driver. Here we set the bits in _PDC
306 * accordingly, for Enhanced Speedstep. Actual call to _PDC is done in
307 * driver/acpi/processor.c
308 */
309static void
310acpi_processor_cpu_init_pdc_est(
311 struct acpi_processor_performance *perf,
312 unsigned int cpu,
313 struct acpi_object_list *obj_list
314 )
315{
316 union acpi_object *obj;
317 u32 *buf;
318 struct cpuinfo_x86 *c = cpu_data + cpu;
319 dprintk("acpi_processor_cpu_init_pdc_est\n");
320
321 if (!cpu_has(c, X86_FEATURE_EST))
322 return;
323
324 /* Initialize pdc. It will be used later. */
325 if (!obj_list)
326 return;
327
328 if (!(obj_list->count && obj_list->pointer))
329 return;
330
331 obj = obj_list->pointer;
332 if ((obj->buffer.length == 12) && obj->buffer.pointer) {
333 buf = (u32 *)obj->buffer.pointer;
334 buf[0] = ACPI_PDC_REVISION_ID;
335 buf[1] = 1;
336 buf[2] = ACPI_PDC_EST_CAPABILITY_SMP;
337 perf->pdc = obj_list;
338 }
339 return;
340}
341
342
343/* CPU specific PDC initialization */
344static void
345acpi_processor_cpu_init_pdc(
346 struct acpi_processor_performance *perf,
347 unsigned int cpu,
348 struct acpi_object_list *obj_list
349 )
350{
351 struct cpuinfo_x86 *c = cpu_data + cpu;
352 dprintk("acpi_processor_cpu_init_pdc\n");
353 perf->pdc = NULL;
354 if (cpu_has(c, X86_FEATURE_EST))
355 acpi_processor_cpu_init_pdc_est(perf, cpu, obj_list);
356 return;
357}
358
359
360static int 298static int
361acpi_cpufreq_cpu_init ( 299acpi_cpufreq_cpu_init (
362 struct cpufreq_policy *policy) 300 struct cpufreq_policy *policy)
@@ -367,14 +305,7 @@ acpi_cpufreq_cpu_init (
367 unsigned int result = 0; 305 unsigned int result = 0;
368 struct cpuinfo_x86 *c = &cpu_data[policy->cpu]; 306 struct cpuinfo_x86 *c = &cpu_data[policy->cpu];
369 307
370 union acpi_object arg0 = {ACPI_TYPE_BUFFER};
371 u32 arg0_buf[3];
372 struct acpi_object_list arg_list = {1, &arg0};
373
374 dprintk("acpi_cpufreq_cpu_init\n"); 308 dprintk("acpi_cpufreq_cpu_init\n");
375 /* setup arg_list for _PDC settings */
376 arg0.buffer.length = 12;
377 arg0.buffer.pointer = (u8 *) arg0_buf;
378 309
379 data = kzalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); 310 data = kzalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL);
380 if (!data) 311 if (!data)
@@ -382,9 +313,7 @@ acpi_cpufreq_cpu_init (
382 313
383 acpi_io_data[cpu] = data; 314 acpi_io_data[cpu] = data;
384 315
385 acpi_processor_cpu_init_pdc(&data->acpi_data, cpu, &arg_list);
386 result = acpi_processor_register_performance(&data->acpi_data, cpu); 316 result = acpi_processor_register_performance(&data->acpi_data, cpu);
387 data->acpi_data.pdc = NULL;
388 317
389 if (result) 318 if (result)
390 goto err_free; 319 goto err_free;
diff --git a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
index 270f2188d68b..cc73a7ae34bc 100644
--- a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
+++ b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
@@ -52,6 +52,7 @@ enum {
52 52
53 53
54static int has_N44_O17_errata[NR_CPUS]; 54static int has_N44_O17_errata[NR_CPUS];
55static int has_N60_errata[NR_CPUS];
55static unsigned int stock_freq; 56static unsigned int stock_freq;
56static struct cpufreq_driver p4clockmod_driver; 57static struct cpufreq_driver p4clockmod_driver;
57static unsigned int cpufreq_p4_get(unsigned int cpu); 58static unsigned int cpufreq_p4_get(unsigned int cpu);
@@ -226,6 +227,12 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
226 case 0x0f12: 227 case 0x0f12:
227 has_N44_O17_errata[policy->cpu] = 1; 228 has_N44_O17_errata[policy->cpu] = 1;
228 dprintk("has errata -- disabling low frequencies\n"); 229 dprintk("has errata -- disabling low frequencies\n");
230 break;
231
232 case 0x0f29:
233 has_N60_errata[policy->cpu] = 1;
234 dprintk("has errata -- disabling frequencies lower than 2ghz\n");
235 break;
229 } 236 }
230 237
231 /* get max frequency */ 238 /* get max frequency */
@@ -237,6 +244,8 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
237 for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) { 244 for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) {
238 if ((i<2) && (has_N44_O17_errata[policy->cpu])) 245 if ((i<2) && (has_N44_O17_errata[policy->cpu]))
239 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID; 246 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
247 else if (has_N60_errata[policy->cpu] && p4clockmod_table[i].frequency < 2000000)
248 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
240 else 249 else
241 p4clockmod_table[i].frequency = (stock_freq * i)/8; 250 p4clockmod_table[i].frequency = (stock_freq * i)/8;
242 } 251 }
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
index 9a826cde4fd1..c173c0fa117a 100644
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
@@ -362,22 +362,10 @@ static struct acpi_processor_performance p;
362 */ 362 */
363static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) 363static int centrino_cpu_init_acpi(struct cpufreq_policy *policy)
364{ 364{
365 union acpi_object arg0 = {ACPI_TYPE_BUFFER};
366 u32 arg0_buf[3];
367 struct acpi_object_list arg_list = {1, &arg0};
368 unsigned long cur_freq; 365 unsigned long cur_freq;
369 int result = 0, i; 366 int result = 0, i;
370 unsigned int cpu = policy->cpu; 367 unsigned int cpu = policy->cpu;
371 368
372 /* _PDC settings */
373 arg0.buffer.length = 12;
374 arg0.buffer.pointer = (u8 *) arg0_buf;
375 arg0_buf[0] = ACPI_PDC_REVISION_ID;
376 arg0_buf[1] = 1;
377 arg0_buf[2] = ACPI_PDC_EST_CAPABILITY_SMP_MSR;
378
379 p.pdc = &arg_list;
380
381 /* register with ACPI core */ 369 /* register with ACPI core */
382 if (acpi_processor_register_performance(&p, cpu)) { 370 if (acpi_processor_register_performance(&p, cpu)) {
383 dprintk(KERN_INFO PFX "obtaining ACPI data failed\n"); 371 dprintk(KERN_INFO PFX "obtaining ACPI data failed\n");
diff --git a/arch/i386/kernel/cpu/cyrix.c b/arch/i386/kernel/cpu/cyrix.c
index 75015975d038..00f2e058797c 100644
--- a/arch/i386/kernel/cpu/cyrix.c
+++ b/arch/i386/kernel/cpu/cyrix.c
@@ -345,7 +345,7 @@ static void __init init_cyrix(struct cpuinfo_x86 *c)
345/* 345/*
346 * Handle National Semiconductor branded processors 346 * Handle National Semiconductor branded processors
347 */ 347 */
348static void __devinit init_nsc(struct cpuinfo_x86 *c) 348static void __init init_nsc(struct cpuinfo_x86 *c)
349{ 349{
350 /* There may be GX1 processors in the wild that are branded 350 /* There may be GX1 processors in the wild that are branded
351 * NSC and not Cyrix. 351 * NSC and not Cyrix.
@@ -444,6 +444,14 @@ int __init cyrix_init_cpu(void)
444 444
445//early_arch_initcall(cyrix_init_cpu); 445//early_arch_initcall(cyrix_init_cpu);
446 446
447static int __init cyrix_exit_cpu(void)
448{
449 cpu_devs[X86_VENDOR_CYRIX] = NULL;
450 return 0;
451}
452
453late_initcall(cyrix_exit_cpu);
454
447static struct cpu_dev nsc_cpu_dev __initdata = { 455static struct cpu_dev nsc_cpu_dev __initdata = {
448 .c_vendor = "NSC", 456 .c_vendor = "NSC",
449 .c_ident = { "Geode by NSC" }, 457 .c_ident = { "Geode by NSC" },
@@ -458,3 +466,11 @@ int __init nsc_init_cpu(void)
458} 466}
459 467
460//early_arch_initcall(nsc_init_cpu); 468//early_arch_initcall(nsc_init_cpu);
469
470static int __init nsc_exit_cpu(void)
471{
472 cpu_devs[X86_VENDOR_NSC] = NULL;
473 return 0;
474}
475
476late_initcall(nsc_exit_cpu);
diff --git a/arch/i386/kernel/cpu/intel_cacheinfo.c b/arch/i386/kernel/cpu/intel_cacheinfo.c
index fbfd374aa336..ffe58cee0c48 100644
--- a/arch/i386/kernel/cpu/intel_cacheinfo.c
+++ b/arch/i386/kernel/cpu/intel_cacheinfo.c
@@ -43,13 +43,23 @@ static struct _cache_table cache_table[] __cpuinitdata =
43 { 0x2c, LVL_1_DATA, 32 }, /* 8-way set assoc, 64 byte line size */ 43 { 0x2c, LVL_1_DATA, 32 }, /* 8-way set assoc, 64 byte line size */
44 { 0x30, LVL_1_INST, 32 }, /* 8-way set assoc, 64 byte line size */ 44 { 0x30, LVL_1_INST, 32 }, /* 8-way set assoc, 64 byte line size */
45 { 0x39, LVL_2, 128 }, /* 4-way set assoc, sectored cache, 64 byte line size */ 45 { 0x39, LVL_2, 128 }, /* 4-way set assoc, sectored cache, 64 byte line size */
46 { 0x3a, LVL_2, 192 }, /* 6-way set assoc, sectored cache, 64 byte line size */
46 { 0x3b, LVL_2, 128 }, /* 2-way set assoc, sectored cache, 64 byte line size */ 47 { 0x3b, LVL_2, 128 }, /* 2-way set assoc, sectored cache, 64 byte line size */
47 { 0x3c, LVL_2, 256 }, /* 4-way set assoc, sectored cache, 64 byte line size */ 48 { 0x3c, LVL_2, 256 }, /* 4-way set assoc, sectored cache, 64 byte line size */
49 { 0x3d, LVL_2, 384 }, /* 6-way set assoc, sectored cache, 64 byte line size */
50 { 0x3e, LVL_2, 512 }, /* 4-way set assoc, sectored cache, 64 byte line size */
48 { 0x41, LVL_2, 128 }, /* 4-way set assoc, 32 byte line size */ 51 { 0x41, LVL_2, 128 }, /* 4-way set assoc, 32 byte line size */
49 { 0x42, LVL_2, 256 }, /* 4-way set assoc, 32 byte line size */ 52 { 0x42, LVL_2, 256 }, /* 4-way set assoc, 32 byte line size */
50 { 0x43, LVL_2, 512 }, /* 4-way set assoc, 32 byte line size */ 53 { 0x43, LVL_2, 512 }, /* 4-way set assoc, 32 byte line size */
51 { 0x44, LVL_2, 1024 }, /* 4-way set assoc, 32 byte line size */ 54 { 0x44, LVL_2, 1024 }, /* 4-way set assoc, 32 byte line size */
52 { 0x45, LVL_2, 2048 }, /* 4-way set assoc, 32 byte line size */ 55 { 0x45, LVL_2, 2048 }, /* 4-way set assoc, 32 byte line size */
56 { 0x46, LVL_3, 4096 }, /* 4-way set assoc, 64 byte line size */
57 { 0x47, LVL_3, 8192 }, /* 8-way set assoc, 64 byte line size */
58 { 0x49, LVL_3, 4096 }, /* 16-way set assoc, 64 byte line size */
59 { 0x4a, LVL_3, 6144 }, /* 12-way set assoc, 64 byte line size */
60 { 0x4b, LVL_3, 8192 }, /* 16-way set assoc, 64 byte line size */
61 { 0x4c, LVL_3, 12288 }, /* 12-way set assoc, 64 byte line size */
62 { 0x4d, LVL_3, 16384 }, /* 16-way set assoc, 64 byte line size */
53 { 0x60, LVL_1_DATA, 16 }, /* 8-way set assoc, sectored cache, 64 byte line size */ 63 { 0x60, LVL_1_DATA, 16 }, /* 8-way set assoc, sectored cache, 64 byte line size */
54 { 0x66, LVL_1_DATA, 8 }, /* 4-way set assoc, sectored cache, 64 byte line size */ 64 { 0x66, LVL_1_DATA, 8 }, /* 4-way set assoc, sectored cache, 64 byte line size */
55 { 0x67, LVL_1_DATA, 16 }, /* 4-way set assoc, sectored cache, 64 byte line size */ 65 { 0x67, LVL_1_DATA, 16 }, /* 4-way set assoc, sectored cache, 64 byte line size */
@@ -57,6 +67,7 @@ static struct _cache_table cache_table[] __cpuinitdata =
57 { 0x70, LVL_TRACE, 12 }, /* 8-way set assoc */ 67 { 0x70, LVL_TRACE, 12 }, /* 8-way set assoc */
58 { 0x71, LVL_TRACE, 16 }, /* 8-way set assoc */ 68 { 0x71, LVL_TRACE, 16 }, /* 8-way set assoc */
59 { 0x72, LVL_TRACE, 32 }, /* 8-way set assoc */ 69 { 0x72, LVL_TRACE, 32 }, /* 8-way set assoc */
70 { 0x73, LVL_TRACE, 64 }, /* 8-way set assoc */
60 { 0x78, LVL_2, 1024 }, /* 4-way set assoc, 64 byte line size */ 71 { 0x78, LVL_2, 1024 }, /* 4-way set assoc, 64 byte line size */
61 { 0x79, LVL_2, 128 }, /* 8-way set assoc, sectored cache, 64 byte line size */ 72 { 0x79, LVL_2, 128 }, /* 8-way set assoc, sectored cache, 64 byte line size */
62 { 0x7a, LVL_2, 256 }, /* 8-way set assoc, sectored cache, 64 byte line size */ 73 { 0x7a, LVL_2, 256 }, /* 8-way set assoc, sectored cache, 64 byte line size */
@@ -141,6 +152,7 @@ static int __cpuinit cpuid4_cache_lookup(int index, struct _cpuid4_info *this_le
141 return 0; 152 return 0;
142} 153}
143 154
155/* will only be called once; __init is safe here */
144static int __init find_num_cache_leaves(void) 156static int __init find_num_cache_leaves(void)
145{ 157{
146 unsigned int eax, ebx, ecx, edx; 158 unsigned int eax, ebx, ecx, edx;
diff --git a/arch/i386/kernel/cpu/mtrr/main.c b/arch/i386/kernel/cpu/mtrr/main.c
index 1e9db198c440..3b4618bed70d 100644
--- a/arch/i386/kernel/cpu/mtrr/main.c
+++ b/arch/i386/kernel/cpu/mtrr/main.c
@@ -44,12 +44,10 @@
44#include <asm/msr.h> 44#include <asm/msr.h>
45#include "mtrr.h" 45#include "mtrr.h"
46 46
47#define MTRR_VERSION "2.0 (20020519)"
48
49u32 num_var_ranges = 0; 47u32 num_var_ranges = 0;
50 48
51unsigned int *usage_table; 49unsigned int *usage_table;
52static DECLARE_MUTEX(main_lock); 50static DECLARE_MUTEX(mtrr_sem);
53 51
54u32 size_or_mask, size_and_mask; 52u32 size_or_mask, size_and_mask;
55 53
@@ -335,7 +333,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
335 /* No CPU hotplug when we change MTRR entries */ 333 /* No CPU hotplug when we change MTRR entries */
336 lock_cpu_hotplug(); 334 lock_cpu_hotplug();
337 /* Search for existing MTRR */ 335 /* Search for existing MTRR */
338 down(&main_lock); 336 down(&mtrr_sem);
339 for (i = 0; i < num_var_ranges; ++i) { 337 for (i = 0; i < num_var_ranges; ++i) {
340 mtrr_if->get(i, &lbase, &lsize, &ltype); 338 mtrr_if->get(i, &lbase, &lsize, &ltype);
341 if (base >= lbase + lsize) 339 if (base >= lbase + lsize)
@@ -373,7 +371,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
373 printk(KERN_INFO "mtrr: no more MTRRs available\n"); 371 printk(KERN_INFO "mtrr: no more MTRRs available\n");
374 error = i; 372 error = i;
375 out: 373 out:
376 up(&main_lock); 374 up(&mtrr_sem);
377 unlock_cpu_hotplug(); 375 unlock_cpu_hotplug();
378 return error; 376 return error;
379} 377}
@@ -466,7 +464,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size)
466 max = num_var_ranges; 464 max = num_var_ranges;
467 /* No CPU hotplug when we change MTRR entries */ 465 /* No CPU hotplug when we change MTRR entries */
468 lock_cpu_hotplug(); 466 lock_cpu_hotplug();
469 down(&main_lock); 467 down(&mtrr_sem);
470 if (reg < 0) { 468 if (reg < 0) {
471 /* Search for existing MTRR */ 469 /* Search for existing MTRR */
472 for (i = 0; i < max; ++i) { 470 for (i = 0; i < max; ++i) {
@@ -505,7 +503,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size)
505 set_mtrr(reg, 0, 0, 0); 503 set_mtrr(reg, 0, 0, 0);
506 error = reg; 504 error = reg;
507 out: 505 out:
508 up(&main_lock); 506 up(&mtrr_sem);
509 unlock_cpu_hotplug(); 507 unlock_cpu_hotplug();
510 return error; 508 return error;
511} 509}
@@ -671,7 +669,6 @@ void __init mtrr_bp_init(void)
671 break; 669 break;
672 } 670 }
673 } 671 }
674 printk(KERN_INFO "mtrr: v%s\n",MTRR_VERSION);
675 672
676 if (mtrr_if) { 673 if (mtrr_if) {
677 set_num_var_ranges(); 674 set_num_var_ranges();
@@ -688,7 +685,7 @@ void mtrr_ap_init(void)
688 if (!mtrr_if || !use_intel()) 685 if (!mtrr_if || !use_intel())
689 return; 686 return;
690 /* 687 /*
691 * Ideally we should hold main_lock here to avoid mtrr entries changed, 688 * Ideally we should hold mtrr_sem here to avoid mtrr entries changed,
692 * but this routine will be called in cpu boot time, holding the lock 689 * but this routine will be called in cpu boot time, holding the lock
693 * breaks it. This routine is called in two cases: 1.very earily time 690 * breaks it. This routine is called in two cases: 1.very earily time
694 * of software resume, when there absolutely isn't mtrr entry changes; 691 * of software resume, when there absolutely isn't mtrr entry changes;
diff --git a/arch/i386/kernel/cpu/nexgen.c b/arch/i386/kernel/cpu/nexgen.c
index 30898a260a5c..ad87fa58058d 100644
--- a/arch/i386/kernel/cpu/nexgen.c
+++ b/arch/i386/kernel/cpu/nexgen.c
@@ -61,3 +61,11 @@ int __init nexgen_init_cpu(void)
61} 61}
62 62
63//early_arch_initcall(nexgen_init_cpu); 63//early_arch_initcall(nexgen_init_cpu);
64
65static int __init nexgen_exit_cpu(void)
66{
67 cpu_devs[X86_VENDOR_NEXGEN] = NULL;
68 return 0;
69}
70
71late_initcall(nexgen_exit_cpu);
diff --git a/arch/i386/kernel/cpu/rise.c b/arch/i386/kernel/cpu/rise.c
index 8602425628ca..d08d5a2811c8 100644
--- a/arch/i386/kernel/cpu/rise.c
+++ b/arch/i386/kernel/cpu/rise.c
@@ -51,3 +51,11 @@ int __init rise_init_cpu(void)
51} 51}
52 52
53//early_arch_initcall(rise_init_cpu); 53//early_arch_initcall(rise_init_cpu);
54
55static int __init rise_exit_cpu(void)
56{
57 cpu_devs[X86_VENDOR_RISE] = NULL;
58 return 0;
59}
60
61late_initcall(rise_exit_cpu);
diff --git a/arch/i386/kernel/cpu/transmeta.c b/arch/i386/kernel/cpu/transmeta.c
index fc426380366b..7214c9b577ab 100644
--- a/arch/i386/kernel/cpu/transmeta.c
+++ b/arch/i386/kernel/cpu/transmeta.c
@@ -1,4 +1,5 @@
1#include <linux/kernel.h> 1#include <linux/kernel.h>
2#include <linux/mm.h>
2#include <linux/init.h> 3#include <linux/init.h>
3#include <asm/processor.h> 4#include <asm/processor.h>
4#include <asm/msr.h> 5#include <asm/msr.h>
@@ -84,7 +85,7 @@ static void __init init_transmeta(struct cpuinfo_x86 *c)
84#endif 85#endif
85} 86}
86 87
87static void transmeta_identify(struct cpuinfo_x86 * c) 88static void __init transmeta_identify(struct cpuinfo_x86 * c)
88{ 89{
89 u32 xlvl; 90 u32 xlvl;
90 generic_identify(c); 91 generic_identify(c);
@@ -111,3 +112,11 @@ int __init transmeta_init_cpu(void)
111} 112}
112 113
113//early_arch_initcall(transmeta_init_cpu); 114//early_arch_initcall(transmeta_init_cpu);
115
116static int __init transmeta_exit_cpu(void)
117{
118 cpu_devs[X86_VENDOR_TRANSMETA] = NULL;
119 return 0;
120}
121
122late_initcall(transmeta_exit_cpu);
diff --git a/arch/i386/kernel/cpu/umc.c b/arch/i386/kernel/cpu/umc.c
index 264fcad559d5..2cd988f6dc55 100644
--- a/arch/i386/kernel/cpu/umc.c
+++ b/arch/i386/kernel/cpu/umc.c
@@ -31,3 +31,11 @@ int __init umc_init_cpu(void)
31} 31}
32 32
33//early_arch_initcall(umc_init_cpu); 33//early_arch_initcall(umc_init_cpu);
34
35static int __init umc_exit_cpu(void)
36{
37 cpu_devs[X86_VENDOR_UMC] = NULL;
38 return 0;
39}
40
41late_initcall(umc_exit_cpu);
diff --git a/arch/i386/kernel/efi.c b/arch/i386/kernel/efi.c
index ecad519fd395..c9cad7ba0d2d 100644
--- a/arch/i386/kernel/efi.c
+++ b/arch/i386/kernel/efi.c
@@ -70,10 +70,13 @@ static void efi_call_phys_prelog(void)
70{ 70{
71 unsigned long cr4; 71 unsigned long cr4;
72 unsigned long temp; 72 unsigned long temp;
73 struct Xgt_desc_struct *cpu_gdt_descr;
73 74
74 spin_lock(&efi_rt_lock); 75 spin_lock(&efi_rt_lock);
75 local_irq_save(efi_rt_eflags); 76 local_irq_save(efi_rt_eflags);
76 77
78 cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0);
79
77 /* 80 /*
78 * If I don't have PSE, I should just duplicate two entries in page 81 * If I don't have PSE, I should just duplicate two entries in page
79 * directory. If I have PSE, I just need to duplicate one entry in 82 * directory. If I have PSE, I just need to duplicate one entry in
@@ -103,17 +106,18 @@ static void efi_call_phys_prelog(void)
103 */ 106 */
104 local_flush_tlb(); 107 local_flush_tlb();
105 108
106 cpu_gdt_descr[0].address = __pa(cpu_gdt_descr[0].address); 109 cpu_gdt_descr->address = __pa(cpu_gdt_descr->address);
107 load_gdt((struct Xgt_desc_struct *) __pa(&cpu_gdt_descr[0])); 110 load_gdt(cpu_gdt_descr);
108} 111}
109 112
110static void efi_call_phys_epilog(void) 113static void efi_call_phys_epilog(void)
111{ 114{
112 unsigned long cr4; 115 unsigned long cr4;
116 struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0);
117
118 cpu_gdt_descr->address = __va(cpu_gdt_descr->address);
119 load_gdt(cpu_gdt_descr);
113 120
114 cpu_gdt_descr[0].address =
115 (unsigned long) __va(cpu_gdt_descr[0].address);
116 load_gdt(&cpu_gdt_descr[0]);
117 cr4 = read_cr4(); 121 cr4 = read_cr4();
118 122
119 if (cr4 & X86_CR4_PSE) { 123 if (cr4 & X86_CR4_PSE) {
diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S
index 5884469f6bfe..e0b7c632efbc 100644
--- a/arch/i386/kernel/head.S
+++ b/arch/i386/kernel/head.S
@@ -398,7 +398,11 @@ ignore_int:
398 pushl 32(%esp) 398 pushl 32(%esp)
399 pushl 40(%esp) 399 pushl 40(%esp)
400 pushl $int_msg 400 pushl $int_msg
401#ifdef CONFIG_EARLY_PRINTK
402 call early_printk
403#else
401 call printk 404 call printk
405#endif
402 addl $(5*4),%esp 406 addl $(5*4),%esp
403 popl %ds 407 popl %ds
404 popl %es 408 popl %es
@@ -530,5 +534,3 @@ ENTRY(cpu_gdt_table)
530 .quad 0x0000000000000000 /* 0xf0 - unused */ 534 .quad 0x0000000000000000 /* 0xf0 - unused */
531 .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */ 535 .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */
532 536
533 /* Be sure this is zeroed to avoid false validations in Xen */
534 .fill PAGE_SIZE_asm / 8 - GDT_ENTRIES,8,0
diff --git a/arch/i386/kernel/i386_ksyms.c b/arch/i386/kernel/i386_ksyms.c
index 3999bec50c33..055325056a74 100644
--- a/arch/i386/kernel/i386_ksyms.c
+++ b/arch/i386/kernel/i386_ksyms.c
@@ -3,8 +3,6 @@
3#include <asm/checksum.h> 3#include <asm/checksum.h>
4#include <asm/desc.h> 4#include <asm/desc.h>
5 5
6EXPORT_SYMBOL_GPL(cpu_gdt_descr);
7
8EXPORT_SYMBOL(__down_failed); 6EXPORT_SYMBOL(__down_failed);
9EXPORT_SYMBOL(__down_failed_interruptible); 7EXPORT_SYMBOL(__down_failed_interruptible);
10EXPORT_SYMBOL(__down_failed_trylock); 8EXPORT_SYMBOL(__down_failed_trylock);
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
index f2dd218d88cb..39d9a5fa907e 100644
--- a/arch/i386/kernel/io_apic.c
+++ b/arch/i386/kernel/io_apic.c
@@ -51,6 +51,8 @@ static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
51 51
52static DEFINE_SPINLOCK(ioapic_lock); 52static DEFINE_SPINLOCK(ioapic_lock);
53 53
54int timer_over_8254 __initdata = 1;
55
54/* 56/*
55 * Is the SiS APIC rmw bug present ? 57 * Is the SiS APIC rmw bug present ?
56 * -1 = don't know, 0 = no, 1 = yes 58 * -1 = don't know, 0 = no, 1 = yes
@@ -2267,7 +2269,8 @@ static inline void check_timer(void)
2267 apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); 2269 apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
2268 init_8259A(1); 2270 init_8259A(1);
2269 timer_ack = 1; 2271 timer_ack = 1;
2270 enable_8259A_irq(0); 2272 if (timer_over_8254 > 0)
2273 enable_8259A_irq(0);
2271 2274
2272 pin1 = find_isa_irq_pin(0, mp_INT); 2275 pin1 = find_isa_irq_pin(0, mp_INT);
2273 apic1 = find_isa_irq_apic(0, mp_INT); 2276 apic1 = find_isa_irq_apic(0, mp_INT);
@@ -2392,6 +2395,20 @@ void __init setup_IO_APIC(void)
2392 print_IO_APIC(); 2395 print_IO_APIC();
2393} 2396}
2394 2397
2398static int __init setup_disable_8254_timer(char *s)
2399{
2400 timer_over_8254 = -1;
2401 return 1;
2402}
2403static int __init setup_enable_8254_timer(char *s)
2404{
2405 timer_over_8254 = 2;
2406 return 1;
2407}
2408
2409__setup("disable_8254_timer", setup_disable_8254_timer);
2410__setup("enable_8254_timer", setup_enable_8254_timer);
2411
2395/* 2412/*
2396 * Called after all the initialization is done. If we didnt find any 2413 * Called after all the initialization is done. If we didnt find any
2397 * APIC bugs then we can allow the modify fast path 2414 * APIC bugs then we can allow the modify fast path
@@ -2566,8 +2583,10 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
2566 spin_unlock_irqrestore(&ioapic_lock, flags); 2583 spin_unlock_irqrestore(&ioapic_lock, flags);
2567 2584
2568 /* Sanity check */ 2585 /* Sanity check */
2569 if (reg_00.bits.ID != apic_id) 2586 if (reg_00.bits.ID != apic_id) {
2570 panic("IOAPIC[%d]: Unable change apic_id!\n", ioapic); 2587 printk("IOAPIC[%d]: Unable to change apic_id!\n", ioapic);
2588 return -1;
2589 }
2571 } 2590 }
2572 2591
2573 apic_printk(APIC_VERBOSE, KERN_INFO 2592 apic_printk(APIC_VERBOSE, KERN_INFO
diff --git a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c
index 6483eeb1a4e8..694a13997637 100644
--- a/arch/i386/kernel/kprobes.c
+++ b/arch/i386/kernel/kprobes.c
@@ -58,6 +58,11 @@ static inline int is_IF_modifier(kprobe_opcode_t opcode)
58 58
59int __kprobes arch_prepare_kprobe(struct kprobe *p) 59int __kprobes arch_prepare_kprobe(struct kprobe *p)
60{ 60{
61 /* insn: must be on special executable page on i386. */
62 p->ainsn.insn = get_insn_slot();
63 if (!p->ainsn.insn)
64 return -ENOMEM;
65
61 memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); 66 memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
62 p->opcode = *p->addr; 67 p->opcode = *p->addr;
63 return 0; 68 return 0;
@@ -77,6 +82,13 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
77 (unsigned long) p->addr + sizeof(kprobe_opcode_t)); 82 (unsigned long) p->addr + sizeof(kprobe_opcode_t));
78} 83}
79 84
85void __kprobes arch_remove_kprobe(struct kprobe *p)
86{
87 down(&kprobe_mutex);
88 free_insn_slot(p->ainsn.insn);
89 up(&kprobe_mutex);
90}
91
80static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) 92static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
81{ 93{
82 kcb->prev_kprobe.kp = kprobe_running(); 94 kcb->prev_kprobe.kp = kprobe_running();
@@ -111,7 +123,7 @@ static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
111 if (p->opcode == BREAKPOINT_INSTRUCTION) 123 if (p->opcode == BREAKPOINT_INSTRUCTION)
112 regs->eip = (unsigned long)p->addr; 124 regs->eip = (unsigned long)p->addr;
113 else 125 else
114 regs->eip = (unsigned long)&p->ainsn.insn; 126 regs->eip = (unsigned long)p->ainsn.insn;
115} 127}
116 128
117/* Called with kretprobe_lock held */ 129/* Called with kretprobe_lock held */
@@ -351,7 +363,7 @@ static void __kprobes resume_execution(struct kprobe *p,
351{ 363{
352 unsigned long *tos = (unsigned long *)&regs->esp; 364 unsigned long *tos = (unsigned long *)&regs->esp;
353 unsigned long next_eip = 0; 365 unsigned long next_eip = 0;
354 unsigned long copy_eip = (unsigned long)&p->ainsn.insn; 366 unsigned long copy_eip = (unsigned long)p->ainsn.insn;
355 unsigned long orig_eip = (unsigned long)p->addr; 367 unsigned long orig_eip = (unsigned long)p->addr;
356 368
357 switch (p->ainsn.insn[0]) { 369 switch (p->ainsn.insn[0]) {
diff --git a/arch/i386/kernel/machine_kexec.c b/arch/i386/kernel/machine_kexec.c
index a912fed48482..f73d7374a2ba 100644
--- a/arch/i386/kernel/machine_kexec.c
+++ b/arch/i386/kernel/machine_kexec.c
@@ -116,13 +116,13 @@ static void load_segments(void)
116 __asm__ __volatile__ ( 116 __asm__ __volatile__ (
117 "\tljmp $"STR(__KERNEL_CS)",$1f\n" 117 "\tljmp $"STR(__KERNEL_CS)",$1f\n"
118 "\t1:\n" 118 "\t1:\n"
119 "\tmovl $"STR(__KERNEL_DS)",%eax\n" 119 "\tmovl $"STR(__KERNEL_DS)",%%eax\n"
120 "\tmovl %eax,%ds\n" 120 "\tmovl %%eax,%%ds\n"
121 "\tmovl %eax,%es\n" 121 "\tmovl %%eax,%%es\n"
122 "\tmovl %eax,%fs\n" 122 "\tmovl %%eax,%%fs\n"
123 "\tmovl %eax,%gs\n" 123 "\tmovl %%eax,%%gs\n"
124 "\tmovl %eax,%ss\n" 124 "\tmovl %%eax,%%ss\n"
125 ); 125 ::: "eax", "memory");
126#undef STR 126#undef STR
127#undef __STR 127#undef __STR
128} 128}
diff --git a/arch/i386/kernel/microcode.c b/arch/i386/kernel/microcode.c
index d3fdf0057d82..5390b521aca0 100644
--- a/arch/i386/kernel/microcode.c
+++ b/arch/i386/kernel/microcode.c
@@ -74,6 +74,7 @@
74#include <linux/kernel.h> 74#include <linux/kernel.h>
75#include <linux/init.h> 75#include <linux/init.h>
76#include <linux/sched.h> 76#include <linux/sched.h>
77#include <linux/cpumask.h>
77#include <linux/module.h> 78#include <linux/module.h>
78#include <linux/slab.h> 79#include <linux/slab.h>
79#include <linux/vmalloc.h> 80#include <linux/vmalloc.h>
@@ -250,8 +251,8 @@ static int find_matching_ucodes (void)
250 error = -EINVAL; 251 error = -EINVAL;
251 goto out; 252 goto out;
252 } 253 }
253 254
254 for (cpu_num = 0; cpu_num < num_online_cpus(); cpu_num++) { 255 for_each_online_cpu(cpu_num) {
255 struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; 256 struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num;
256 if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/ 257 if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/
257 continue; 258 continue;
@@ -293,7 +294,7 @@ static int find_matching_ucodes (void)
293 error = -EFAULT; 294 error = -EFAULT;
294 goto out; 295 goto out;
295 } 296 }
296 for (cpu_num = 0; cpu_num < num_online_cpus(); cpu_num++) { 297 for_each_online_cpu(cpu_num) {
297 struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; 298 struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num;
298 if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/ 299 if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/
299 continue; 300 continue;
@@ -304,7 +305,9 @@ static int find_matching_ucodes (void)
304 } 305 }
305 } 306 }
306 /* now check if any cpu has matched */ 307 /* now check if any cpu has matched */
307 for (cpu_num = 0, allocated_flag = 0, sum = 0; cpu_num < num_online_cpus(); cpu_num++) { 308 allocated_flag = 0;
309 sum = 0;
310 for_each_online_cpu(cpu_num) {
308 if (ucode_cpu_info[cpu_num].err == MC_MARKED) { 311 if (ucode_cpu_info[cpu_num].err == MC_MARKED) {
309 struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; 312 struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num;
310 if (!allocated_flag) { 313 if (!allocated_flag) {
@@ -415,12 +418,12 @@ static int do_microcode_update (void)
415 } 418 }
416 419
417out_free: 420out_free:
418 for (i = 0; i < num_online_cpus(); i++) { 421 for_each_online_cpu(i) {
419 if (ucode_cpu_info[i].mc) { 422 if (ucode_cpu_info[i].mc) {
420 int j; 423 int j;
421 void *tmp = ucode_cpu_info[i].mc; 424 void *tmp = ucode_cpu_info[i].mc;
422 vfree(tmp); 425 vfree(tmp);
423 for (j = i; j < num_online_cpus(); j++) { 426 for_each_online_cpu(j) {
424 if (ucode_cpu_info[j].mc == tmp) 427 if (ucode_cpu_info[j].mc == tmp)
425 ucode_cpu_info[j].mc = NULL; 428 ucode_cpu_info[j].mc = NULL;
426 } 429 }
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c
index 91a64016956e..e6e2f43db85e 100644
--- a/arch/i386/kernel/mpparse.c
+++ b/arch/i386/kernel/mpparse.c
@@ -710,7 +710,7 @@ void __init get_smp_config (void)
710 * Read the physical hardware table. Anything here will 710 * Read the physical hardware table. Anything here will
711 * override the defaults. 711 * override the defaults.
712 */ 712 */
713 if (!smp_read_mpc((void *)mpf->mpf_physptr)) { 713 if (!smp_read_mpc(phys_to_virt(mpf->mpf_physptr))) {
714 smp_found_config = 0; 714 smp_found_config = 0;
715 printk(KERN_ERR "BIOS bug, MP table errors detected!...\n"); 715 printk(KERN_ERR "BIOS bug, MP table errors detected!...\n");
716 printk(KERN_ERR "... disabling SMP support. (tell your hw vendor)\n"); 716 printk(KERN_ERR "... disabling SMP support. (tell your hw vendor)\n");
@@ -915,6 +915,7 @@ void __init mp_register_ioapic (
915 u32 gsi_base) 915 u32 gsi_base)
916{ 916{
917 int idx = 0; 917 int idx = 0;
918 int tmpid;
918 919
919 if (nr_ioapics >= MAX_IO_APICS) { 920 if (nr_ioapics >= MAX_IO_APICS) {
920 printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded " 921 printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded "
@@ -935,9 +936,14 @@ void __init mp_register_ioapic (
935 936
936 set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address); 937 set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
937 if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15)) 938 if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15))
938 mp_ioapics[idx].mpc_apicid = io_apic_get_unique_id(idx, id); 939 tmpid = io_apic_get_unique_id(idx, id);
939 else 940 else
940 mp_ioapics[idx].mpc_apicid = id; 941 tmpid = id;
942 if (tmpid == -1) {
943 nr_ioapics--;
944 return;
945 }
946 mp_ioapics[idx].mpc_apicid = tmpid;
941 mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx); 947 mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx);
942 948
943 /* 949 /*
@@ -1080,7 +1086,7 @@ void __init mp_config_acpi_legacy_irqs (void)
1080 1086
1081#define MAX_GSI_NUM 4096 1087#define MAX_GSI_NUM 4096
1082 1088
1083int mp_register_gsi (u32 gsi, int edge_level, int active_high_low) 1089int mp_register_gsi (u32 gsi, int triggering, int polarity)
1084{ 1090{
1085 int ioapic = -1; 1091 int ioapic = -1;
1086 int ioapic_pin = 0; 1092 int ioapic_pin = 0;
@@ -1129,7 +1135,7 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low)
1129 1135
1130 mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit); 1136 mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit);
1131 1137
1132 if (edge_level) { 1138 if (triggering == ACPI_LEVEL_SENSITIVE) {
1133 /* 1139 /*
1134 * For PCI devices assign IRQs in order, avoiding gaps 1140 * For PCI devices assign IRQs in order, avoiding gaps
1135 * due to unused I/O APIC pins. 1141 * due to unused I/O APIC pins.
@@ -1151,8 +1157,8 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low)
1151 } 1157 }
1152 1158
1153 io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, 1159 io_apic_set_pci_routing(ioapic, ioapic_pin, gsi,
1154 edge_level == ACPI_EDGE_SENSITIVE ? 0 : 1, 1160 triggering == ACPI_EDGE_SENSITIVE ? 0 : 1,
1155 active_high_low == ACPI_ACTIVE_HIGH ? 0 : 1); 1161 polarity == ACPI_ACTIVE_HIGH ? 0 : 1);
1156 return gsi; 1162 return gsi;
1157} 1163}
1158 1164
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c
index d661703ac1cb..be87c5e2ee95 100644
--- a/arch/i386/kernel/nmi.c
+++ b/arch/i386/kernel/nmi.c
@@ -138,7 +138,7 @@ static int __init check_nmi_watchdog(void)
138 if (nmi_watchdog == NMI_LOCAL_APIC) 138 if (nmi_watchdog == NMI_LOCAL_APIC)
139 smp_call_function(nmi_cpu_busy, (void *)&endflag, 0, 0); 139 smp_call_function(nmi_cpu_busy, (void *)&endflag, 0, 0);
140 140
141 for (cpu = 0; cpu < NR_CPUS; cpu++) 141 for_each_cpu(cpu)
142 prev_nmi_count[cpu] = per_cpu(irq_stat, cpu).__nmi_count; 142 prev_nmi_count[cpu] = per_cpu(irq_stat, cpu).__nmi_count;
143 local_irq_enable(); 143 local_irq_enable();
144 mdelay((10*1000)/nmi_hz); // wait 10 ticks 144 mdelay((10*1000)/nmi_hz); // wait 10 ticks
@@ -357,7 +357,7 @@ static void clear_msr_range(unsigned int base, unsigned int n)
357 wrmsr(base+i, 0, 0); 357 wrmsr(base+i, 0, 0);
358} 358}
359 359
360static inline void write_watchdog_counter(const char *descr) 360static void write_watchdog_counter(const char *descr)
361{ 361{
362 u64 count = (u64)cpu_khz * 1000; 362 u64 count = (u64)cpu_khz * 1000;
363 363
@@ -544,7 +544,7 @@ void nmi_watchdog_tick (struct pt_regs * regs)
544 * die_nmi will return ONLY if NOTIFY_STOP happens.. 544 * die_nmi will return ONLY if NOTIFY_STOP happens..
545 */ 545 */
546 die_nmi(regs, "NMI Watchdog detected LOCKUP"); 546 die_nmi(regs, "NMI Watchdog detected LOCKUP");
547 547 } else {
548 last_irq_sums[cpu] = sum; 548 last_irq_sums[cpu] = sum;
549 alert_counter[cpu] = 0; 549 alert_counter[cpu] = 0;
550 } 550 }
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
index 2185377fdde1..0480454ebffa 100644
--- a/arch/i386/kernel/process.c
+++ b/arch/i386/kernel/process.c
@@ -297,8 +297,10 @@ void show_regs(struct pt_regs * regs)
297 297
298 if (user_mode(regs)) 298 if (user_mode(regs))
299 printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); 299 printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
300 printk(" EFLAGS: %08lx %s (%s)\n", 300 printk(" EFLAGS: %08lx %s (%s %.*s)\n",
301 regs->eflags, print_tainted(), system_utsname.release); 301 regs->eflags, print_tainted(), system_utsname.release,
302 (int)strcspn(system_utsname.version, " "),
303 system_utsname.version);
302 printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", 304 printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
303 regs->eax,regs->ebx,regs->ecx,regs->edx); 305 regs->eax,regs->ebx,regs->ecx,regs->edx);
304 printk("ESI: %08lx EDI: %08lx EBP: %08lx", 306 printk("ESI: %08lx EDI: %08lx EBP: %08lx",
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c
index 51e513b4f72d..ab62a9f4701e 100644
--- a/arch/i386/kernel/setup.c
+++ b/arch/i386/kernel/setup.c
@@ -1599,6 +1599,10 @@ void __init setup_arch(char **cmdline_p)
1599 if (efi_enabled) 1599 if (efi_enabled)
1600 efi_map_memmap(); 1600 efi_map_memmap();
1601 1601
1602#ifdef CONFIG_X86_IO_APIC
1603 check_acpi_pci(); /* Checks more than just ACPI actually */
1604#endif
1605
1602#ifdef CONFIG_ACPI 1606#ifdef CONFIG_ACPI
1603 /* 1607 /*
1604 * Parse the ACPI tables for possible boot-time SMP configuration. 1608 * Parse the ACPI tables for possible boot-time SMP configuration.
diff --git a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c
index 255adb498268..7007e1783797 100644
--- a/arch/i386/kernel/smpboot.c
+++ b/arch/i386/kernel/smpboot.c
@@ -87,11 +87,7 @@ EXPORT_SYMBOL(cpu_online_map);
87cpumask_t cpu_callin_map; 87cpumask_t cpu_callin_map;
88cpumask_t cpu_callout_map; 88cpumask_t cpu_callout_map;
89EXPORT_SYMBOL(cpu_callout_map); 89EXPORT_SYMBOL(cpu_callout_map);
90#ifdef CONFIG_HOTPLUG_CPU
91cpumask_t cpu_possible_map = CPU_MASK_ALL;
92#else
93cpumask_t cpu_possible_map; 90cpumask_t cpu_possible_map;
94#endif
95EXPORT_SYMBOL(cpu_possible_map); 91EXPORT_SYMBOL(cpu_possible_map);
96static cpumask_t smp_commenced_mask; 92static cpumask_t smp_commenced_mask;
97 93
@@ -902,12 +898,6 @@ static int __devinit do_boot_cpu(int apicid, int cpu)
902 unsigned long start_eip; 898 unsigned long start_eip;
903 unsigned short nmi_high = 0, nmi_low = 0; 899 unsigned short nmi_high = 0, nmi_low = 0;
904 900
905 if (!cpu_gdt_descr[cpu].address &&
906 !(cpu_gdt_descr[cpu].address = get_zeroed_page(GFP_KERNEL))) {
907 printk("Failed to allocate GDT for CPU %d\n", cpu);
908 return 1;
909 }
910
911 ++cpucount; 901 ++cpucount;
912 902
913 /* 903 /*
@@ -1039,6 +1029,16 @@ int __devinit smp_prepare_cpu(int cpu)
1039 int apicid, ret; 1029 int apicid, ret;
1040 1030
1041 lock_cpu_hotplug(); 1031 lock_cpu_hotplug();
1032
1033 /*
1034 * On x86, CPU0 is never offlined. Trying to bring up an
1035 * already-booted CPU will hang. So check for that case.
1036 */
1037 if (cpu_online(cpu)) {
1038 ret = -EINVAL;
1039 goto exit;
1040 }
1041
1042 apicid = x86_cpu_to_apicid[cpu]; 1042 apicid = x86_cpu_to_apicid[cpu];
1043 if (apicid == BAD_APICID) { 1043 if (apicid == BAD_APICID) {
1044 ret = -ENODEV; 1044 ret = -ENODEV;
diff --git a/arch/i386/kernel/syscall_table.S b/arch/i386/kernel/syscall_table.S
index 1b665928336b..ac687d00a1ce 100644
--- a/arch/i386/kernel/syscall_table.S
+++ b/arch/i386/kernel/syscall_table.S
@@ -299,7 +299,7 @@ ENTRY(sys_call_table)
299 .long sys_mknodat 299 .long sys_mknodat
300 .long sys_fchownat 300 .long sys_fchownat
301 .long sys_futimesat 301 .long sys_futimesat
302 .long sys_newfstatat /* 300 */ 302 .long sys_fstatat64 /* 300 */
303 .long sys_unlinkat 303 .long sys_unlinkat
304 .long sys_renameat 304 .long sys_renameat
305 .long sys_linkat 305 .long sys_linkat
@@ -309,3 +309,4 @@ ENTRY(sys_call_table)
309 .long sys_faccessat 309 .long sys_faccessat
310 .long sys_pselect6 310 .long sys_pselect6
311 .long sys_ppoll 311 .long sys_ppoll
312 .long sys_unshare /* 310 */
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c
index a14d594bfbeb..9d3074759856 100644
--- a/arch/i386/kernel/time.c
+++ b/arch/i386/kernel/time.c
@@ -412,9 +412,9 @@ static int timer_resume(struct sys_device *dev)
412 write_seqlock_irqsave(&xtime_lock, flags); 412 write_seqlock_irqsave(&xtime_lock, flags);
413 xtime.tv_sec = sec; 413 xtime.tv_sec = sec;
414 xtime.tv_nsec = 0; 414 xtime.tv_nsec = 0;
415 write_sequnlock_irqrestore(&xtime_lock, flags); 415 jiffies_64 += sleep_length;
416 jiffies += sleep_length;
417 wall_jiffies += sleep_length; 416 wall_jiffies += sleep_length;
417 write_sequnlock_irqrestore(&xtime_lock, flags);
418 if (last_timer->resume) 418 if (last_timer->resume)
419 last_timer->resume(); 419 last_timer->resume();
420 cur_timer = last_timer; 420 cur_timer = last_timer;
diff --git a/arch/i386/kernel/timers/timer_tsc.c b/arch/i386/kernel/timers/timer_tsc.c
index 47675bbbb316..a7f5a2aceba2 100644
--- a/arch/i386/kernel/timers/timer_tsc.c
+++ b/arch/i386/kernel/timers/timer_tsc.c
@@ -45,6 +45,15 @@ static unsigned long last_tsc_high; /* msb 32 bits of Time Stamp Counter */
45static unsigned long long monotonic_base; 45static unsigned long long monotonic_base;
46static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED; 46static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED;
47 47
48/* Avoid compensating for lost ticks before TSCs are synched */
49static int detect_lost_ticks;
50static int __init start_lost_tick_compensation(void)
51{
52 detect_lost_ticks = 1;
53 return 0;
54}
55late_initcall(start_lost_tick_compensation);
56
48/* convert from cycles(64bits) => nanoseconds (64bits) 57/* convert from cycles(64bits) => nanoseconds (64bits)
49 * basic equation: 58 * basic equation:
50 * ns = cycles / (freq / ns_per_sec) 59 * ns = cycles / (freq / ns_per_sec)
@@ -196,7 +205,8 @@ static void mark_offset_tsc_hpet(void)
196 205
197 /* lost tick compensation */ 206 /* lost tick compensation */
198 offset = hpet_readl(HPET_T0_CMP) - hpet_tick; 207 offset = hpet_readl(HPET_T0_CMP) - hpet_tick;
199 if (unlikely(((offset - hpet_last) > hpet_tick) && (hpet_last != 0))) { 208 if (unlikely(((offset - hpet_last) > hpet_tick) && (hpet_last != 0))
209 && detect_lost_ticks) {
200 int lost_ticks = (offset - hpet_last) / hpet_tick; 210 int lost_ticks = (offset - hpet_last) / hpet_tick;
201 jiffies_64 += lost_ticks; 211 jiffies_64 += lost_ticks;
202 } 212 }
@@ -272,6 +282,10 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
272 if (val != CPUFREQ_RESUMECHANGE) 282 if (val != CPUFREQ_RESUMECHANGE)
273 write_seqlock_irq(&xtime_lock); 283 write_seqlock_irq(&xtime_lock);
274 if (!ref_freq) { 284 if (!ref_freq) {
285 if (!freq->old){
286 ref_freq = freq->new;
287 goto end;
288 }
275 ref_freq = freq->old; 289 ref_freq = freq->old;
276 loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy; 290 loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
277#ifndef CONFIG_SMP 291#ifndef CONFIG_SMP
@@ -297,6 +311,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
297#endif 311#endif
298 } 312 }
299 313
314end:
300 if (val != CPUFREQ_RESUMECHANGE) 315 if (val != CPUFREQ_RESUMECHANGE)
301 write_sequnlock_irq(&xtime_lock); 316 write_sequnlock_irq(&xtime_lock);
302 317
@@ -421,7 +436,7 @@ static void mark_offset_tsc(void)
421 delta += delay_at_last_interrupt; 436 delta += delay_at_last_interrupt;
422 lost = delta/(1000000/HZ); 437 lost = delta/(1000000/HZ);
423 delay = delta%(1000000/HZ); 438 delay = delta%(1000000/HZ);
424 if (lost >= 2) { 439 if (lost >= 2 && detect_lost_ticks) {
425 jiffies_64 += lost-1; 440 jiffies_64 += lost-1;
426 441
427 /* sanity check to ensure we're not always losing ticks */ 442 /* sanity check to ensure we're not always losing ticks */
diff --git a/arch/i386/mach-default/topology.c b/arch/i386/kernel/topology.c
index b64314069e78..67a0e1baa28b 100644
--- a/arch/i386/mach-default/topology.c
+++ b/arch/i386/kernel/topology.c
@@ -1,12 +1,12 @@
1/* 1/*
2 * arch/i386/mach-generic/topology.c - Populate driverfs with topology information 2 * arch/i386/kernel/topology.c - Populate driverfs with topology information
3 * 3 *
4 * Written by: Matthew Dobson, IBM Corporation 4 * Written by: Matthew Dobson, IBM Corporation
5 * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL 5 * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
6 * 6 *
7 * Copyright (C) 2002, IBM Corp. 7 * Copyright (C) 2002, IBM Corp.
8 * 8 *
9 * All rights reserved. 9 * All rights reserved.
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by 12 * it under the terms of the GNU General Public License as published by
@@ -34,7 +34,7 @@ static struct i386_cpu cpu_devices[NR_CPUS];
34 34
35int arch_register_cpu(int num){ 35int arch_register_cpu(int num){
36 struct node *parent = NULL; 36 struct node *parent = NULL;
37 37
38#ifdef CONFIG_NUMA 38#ifdef CONFIG_NUMA
39 int node = cpu_to_node(num); 39 int node = cpu_to_node(num);
40 if (node_online(node)) 40 if (node_online(node))
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c
index 0aaebf3e1cfa..b814dbdcc91e 100644
--- a/arch/i386/kernel/traps.c
+++ b/arch/i386/kernel/traps.c
@@ -166,7 +166,8 @@ static void show_trace_log_lvl(struct task_struct *task,
166 stack = (unsigned long*)context->previous_esp; 166 stack = (unsigned long*)context->previous_esp;
167 if (!stack) 167 if (!stack)
168 break; 168 break;
169 printk(KERN_EMERG " =======================\n"); 169 printk(log_lvl);
170 printk(" =======================\n");
170 } 171 }
171} 172}
172 173
@@ -239,9 +240,11 @@ void show_registers(struct pt_regs *regs)
239 } 240 }
240 print_modules(); 241 print_modules();
241 printk(KERN_EMERG "CPU: %d\nEIP: %04x:[<%08lx>] %s VLI\n" 242 printk(KERN_EMERG "CPU: %d\nEIP: %04x:[<%08lx>] %s VLI\n"
242 "EFLAGS: %08lx (%s) \n", 243 "EFLAGS: %08lx (%s %.*s) \n",
243 smp_processor_id(), 0xffff & regs->xcs, regs->eip, 244 smp_processor_id(), 0xffff & regs->xcs, regs->eip,
244 print_tainted(), regs->eflags, system_utsname.release); 245 print_tainted(), regs->eflags, system_utsname.release,
246 (int)strcspn(system_utsname.version, " "),
247 system_utsname.version);
245 print_symbol(KERN_EMERG "EIP is at %s\n", regs->eip); 248 print_symbol(KERN_EMERG "EIP is at %s\n", regs->eip);
246 printk(KERN_EMERG "eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n", 249 printk(KERN_EMERG "eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n",
247 regs->eax, regs->ebx, regs->ecx, regs->edx); 250 regs->eax, regs->ebx, regs->ecx, regs->edx);
diff --git a/arch/i386/kernel/vsyscall-sysenter.S b/arch/i386/kernel/vsyscall-sysenter.S
index 4daefb2ec1b2..76b728159403 100644
--- a/arch/i386/kernel/vsyscall-sysenter.S
+++ b/arch/i386/kernel/vsyscall-sysenter.S
@@ -7,6 +7,21 @@
7 * for details. 7 * for details.
8 */ 8 */
9 9
10/*
11 * The caller puts arg2 in %ecx, which gets pushed. The kernel will use
12 * %ecx itself for arg2. The pushing is because the sysexit instruction
13 * (found in entry.S) requires that we clobber %ecx with the desired %esp.
14 * User code might expect that %ecx is unclobbered though, as it would be
15 * for returning via the iret instruction, so we must push and pop.
16 *
17 * The caller puts arg3 in %edx, which the sysexit instruction requires
18 * for %eip. Thus, exactly as for arg2, we must push and pop.
19 *
20 * Arg6 is different. The caller puts arg6 in %ebp. Since the sysenter
21 * instruction clobbers %esp, the user's %esp won't even survive entry
22 * into the kernel. We store %esp in %ebp. Code in entry.S must fetch
23 * arg6 from the stack.
24 */
10 .text 25 .text
11 .globl __kernel_vsyscall 26 .globl __kernel_vsyscall
12 .type __kernel_vsyscall,@function 27 .type __kernel_vsyscall,@function
diff --git a/arch/i386/mach-default/Makefile b/arch/i386/mach-default/Makefile
index e95bb0237921..012fe34459e6 100644
--- a/arch/i386/mach-default/Makefile
+++ b/arch/i386/mach-default/Makefile
@@ -2,4 +2,4 @@
2# Makefile for the linux kernel. 2# Makefile for the linux kernel.
3# 3#
4 4
5obj-y := setup.o topology.o 5obj-y := setup.o
diff --git a/arch/i386/mach-voyager/voyager_basic.c b/arch/i386/mach-voyager/voyager_basic.c
index aa49a33a572c..b584060ec004 100644
--- a/arch/i386/mach-voyager/voyager_basic.c
+++ b/arch/i386/mach-voyager/voyager_basic.c
@@ -23,6 +23,8 @@
23#include <linux/delay.h> 23#include <linux/delay.h>
24#include <linux/reboot.h> 24#include <linux/reboot.h>
25#include <linux/sysrq.h> 25#include <linux/sysrq.h>
26#include <linux/smp.h>
27#include <linux/nodemask.h>
26#include <asm/io.h> 28#include <asm/io.h>
27#include <asm/voyager.h> 29#include <asm/voyager.h>
28#include <asm/vic.h> 30#include <asm/vic.h>
@@ -328,4 +330,3 @@ void machine_power_off(void)
328 if (pm_power_off) 330 if (pm_power_off)
329 pm_power_off(); 331 pm_power_off();
330} 332}
331
diff --git a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c
index 72a1b9cae2e4..8165626a5c30 100644
--- a/arch/i386/mach-voyager/voyager_smp.c
+++ b/arch/i386/mach-voyager/voyager_smp.c
@@ -240,7 +240,7 @@ static cpumask_t smp_commenced_mask = CPU_MASK_NONE;
240cpumask_t cpu_callin_map = CPU_MASK_NONE; 240cpumask_t cpu_callin_map = CPU_MASK_NONE;
241cpumask_t cpu_callout_map = CPU_MASK_NONE; 241cpumask_t cpu_callout_map = CPU_MASK_NONE;
242EXPORT_SYMBOL(cpu_callout_map); 242EXPORT_SYMBOL(cpu_callout_map);
243cpumask_t cpu_possible_map = CPU_MASK_ALL; 243cpumask_t cpu_possible_map = CPU_MASK_NONE;
244EXPORT_SYMBOL(cpu_possible_map); 244EXPORT_SYMBOL(cpu_possible_map);
245 245
246/* The per processor IRQ masks (these are usually kept in sync) */ 246/* The per processor IRQ masks (these are usually kept in sync) */
@@ -402,6 +402,7 @@ find_smp_config(void)
402 cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8; 402 cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8;
403 cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16; 403 cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16;
404 cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24; 404 cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24;
405 cpu_possible_map = phys_cpu_present_map;
405 printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", cpus_addr(phys_cpu_present_map)[0]); 406 printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", cpus_addr(phys_cpu_present_map)[0]);
406 /* Here we set up the VIC to enable SMP */ 407 /* Here we set up the VIC to enable SMP */
407 /* enable the CPIs by writing the base vector to their register */ 408 /* enable the CPIs by writing the base vector to their register */
diff --git a/arch/i386/oprofile/backtrace.c b/arch/i386/oprofile/backtrace.c
index 21654be3f73f..c049ce414f01 100644
--- a/arch/i386/oprofile/backtrace.c
+++ b/arch/i386/oprofile/backtrace.c
@@ -20,7 +20,20 @@ struct frame_head {
20} __attribute__((packed)); 20} __attribute__((packed));
21 21
22static struct frame_head * 22static struct frame_head *
23dump_backtrace(struct frame_head * head) 23dump_kernel_backtrace(struct frame_head * head)
24{
25 oprofile_add_trace(head->ret);
26
27 /* frame pointers should strictly progress back up the stack
28 * (towards higher addresses) */
29 if (head >= head->ebp)
30 return NULL;
31
32 return head->ebp;
33}
34
35static struct frame_head *
36dump_user_backtrace(struct frame_head * head)
24{ 37{
25 struct frame_head bufhead[2]; 38 struct frame_head bufhead[2];
26 39
@@ -49,7 +62,9 @@ dump_backtrace(struct frame_head * head)
49 * | stack | 62 * | stack |
50 * --------------- saved regs->ebp value if valid (frame_head address) 63 * --------------- saved regs->ebp value if valid (frame_head address)
51 * . . 64 * . .
52 * --------------- struct pt_regs stored on stack (struct pt_regs *) 65 * --------------- saved regs->rsp value if x86_64
66 * | |
67 * --------------- struct pt_regs * stored on stack if 32-bit
53 * | | 68 * | |
54 * . . 69 * . .
55 * | | 70 * | |
@@ -57,13 +72,26 @@ dump_backtrace(struct frame_head * head)
57 * | | 72 * | |
58 * | | \/ Lower addresses 73 * | | \/ Lower addresses
59 * 74 *
60 * Thus, &pt_regs <-> stack base restricts the valid(ish) ebp values 75 * Thus, regs (or regs->rsp for x86_64) <-> stack base restricts the
76 * valid(ish) ebp values. Note: (1) for x86_64, NMI and several other
77 * exceptions use special stacks, maintained by the interrupt stack table
78 * (IST). These stacks are set up in trap_init() in
79 * arch/x86_64/kernel/traps.c. Thus, for x86_64, regs now does not point
80 * to the kernel stack; instead, it points to some location on the NMI
81 * stack. On the other hand, regs->rsp is the stack pointer saved when the
82 * NMI occurred. (2) For 32-bit, regs->esp is not valid because the
83 * processor does not save %esp on the kernel stack when interrupts occur
84 * in the kernel mode.
61 */ 85 */
62#ifdef CONFIG_FRAME_POINTER 86#ifdef CONFIG_FRAME_POINTER
63static int valid_kernel_stack(struct frame_head * head, struct pt_regs * regs) 87static int valid_kernel_stack(struct frame_head * head, struct pt_regs * regs)
64{ 88{
65 unsigned long headaddr = (unsigned long)head; 89 unsigned long headaddr = (unsigned long)head;
90#ifdef CONFIG_X86_64
91 unsigned long stack = (unsigned long)regs->rsp;
92#else
66 unsigned long stack = (unsigned long)regs; 93 unsigned long stack = (unsigned long)regs;
94#endif
67 unsigned long stack_base = (stack & ~(THREAD_SIZE - 1)) + THREAD_SIZE; 95 unsigned long stack_base = (stack & ~(THREAD_SIZE - 1)) + THREAD_SIZE;
68 96
69 return headaddr > stack && headaddr < stack_base; 97 return headaddr > stack && headaddr < stack_base;
@@ -90,10 +118,10 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth)
90 118
91 if (!user_mode_vm(regs)) { 119 if (!user_mode_vm(regs)) {
92 while (depth-- && valid_kernel_stack(head, regs)) 120 while (depth-- && valid_kernel_stack(head, regs))
93 head = dump_backtrace(head); 121 head = dump_kernel_backtrace(head);
94 return; 122 return;
95 } 123 }
96 124
97 while (depth-- && head) 125 while (depth-- && head)
98 head = dump_backtrace(head); 126 head = dump_user_backtrace(head);
99} 127}
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c
index e715aa930036..3ca59cad05f3 100644
--- a/arch/i386/pci/irq.c
+++ b/arch/i386/pci/irq.c
@@ -539,6 +539,11 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
539 case PCI_DEVICE_ID_INTEL_ICH7_30: 539 case PCI_DEVICE_ID_INTEL_ICH7_30:
540 case PCI_DEVICE_ID_INTEL_ICH7_31: 540 case PCI_DEVICE_ID_INTEL_ICH7_31:
541 case PCI_DEVICE_ID_INTEL_ESB2_0: 541 case PCI_DEVICE_ID_INTEL_ESB2_0:
542 case PCI_DEVICE_ID_INTEL_ICH8_0:
543 case PCI_DEVICE_ID_INTEL_ICH8_1:
544 case PCI_DEVICE_ID_INTEL_ICH8_2:
545 case PCI_DEVICE_ID_INTEL_ICH8_3:
546 case PCI_DEVICE_ID_INTEL_ICH8_4:
542 r->name = "PIIX/ICH"; 547 r->name = "PIIX/ICH";
543 r->get = pirq_piix_get; 548 r->get = pirq_piix_get;
544 r->set = pirq_piix_set; 549 r->set = pirq_piix_set;
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c
index 4bb4d4b0f73a..0ee8a983708c 100644
--- a/arch/i386/pci/mmconfig.c
+++ b/arch/i386/pci/mmconfig.c
@@ -36,8 +36,7 @@ static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn)
36 while (1) { 36 while (1) {
37 ++cfg_num; 37 ++cfg_num;
38 if (cfg_num >= pci_mmcfg_config_num) { 38 if (cfg_num >= pci_mmcfg_config_num) {
39 /* Not found - fallback to type 1 */ 39 break;
40 return 0;
41 } 40 }
42 cfg = &pci_mmcfg_config[cfg_num]; 41 cfg = &pci_mmcfg_config[cfg_num];
43 if (cfg->pci_segment_group_number != seg) 42 if (cfg->pci_segment_group_number != seg)
@@ -46,6 +45,18 @@ static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn)
46 (cfg->end_bus_number >= bus)) 45 (cfg->end_bus_number >= bus))
47 return cfg->base_address; 46 return cfg->base_address;
48 } 47 }
48
49 /* Handle more broken MCFG tables on Asus etc.
50 They only contain a single entry for bus 0-0. Assume
51 this applies to all busses. */
52 cfg = &pci_mmcfg_config[0];
53 if (pci_mmcfg_config_num == 1 &&
54 cfg->pci_segment_group_number == 0 &&
55 (cfg->start_bus_number | cfg->end_bus_number) == 0)
56 return cfg->base_address;
57
58 /* Fall back to type 0 */
59 return 0;
49} 60}
50 61
51static inline void pci_exp_set_dev_base(unsigned int base, int bus, int devfn) 62static inline void pci_exp_set_dev_base(unsigned int base, int bus, int devfn)
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 199eeaf0f4e3..a85ea9d37f05 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -194,7 +194,6 @@ config IA64_L1_CACHE_SHIFT
194 default "7" if MCKINLEY 194 default "7" if MCKINLEY
195 default "6" if ITANIUM 195 default "6" if ITANIUM
196 196
197# align cache-sensitive data to 64 bytes
198config IA64_CYCLONE 197config IA64_CYCLONE
199 bool "Cyclone (EXA) Time Source support" 198 bool "Cyclone (EXA) Time Source support"
200 help 199 help
@@ -374,6 +373,9 @@ config IA64_PALINFO
374 To use this option, you have to ensure that the "/proc file system 373 To use this option, you have to ensure that the "/proc file system
375 support" (CONFIG_PROC_FS) is enabled, too. 374 support" (CONFIG_PROC_FS) is enabled, too.
376 375
376config SGI_SN
377 def_bool y if (IA64_SGI_SN2 || IA64_GENERIC)
378
377source "drivers/firmware/Kconfig" 379source "drivers/firmware/Kconfig"
378 380
379source "fs/Kconfig.binfmt" 381source "fs/Kconfig.binfmt"
@@ -451,6 +453,7 @@ source "arch/ia64/oprofile/Kconfig"
451 453
452config KPROBES 454config KPROBES
453 bool "Kprobes (EXPERIMENTAL)" 455 bool "Kprobes (EXPERIMENTAL)"
456 depends on EXPERIMENTAL && MODULES
454 help 457 help
455 Kprobes allows you to trap at almost any kernel address and 458 Kprobes allows you to trap at almost any kernel address and
456 execute a callback function. register_kprobe() establishes 459 execute a callback function. register_kprobe() establishes
diff --git a/arch/ia64/configs/bigsur_defconfig b/arch/ia64/configs/bigsur_defconfig
index b40672bb3ab0..90e9c2e61bf4 100644
--- a/arch/ia64/configs/bigsur_defconfig
+++ b/arch/ia64/configs/bigsur_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc1 3# Linux kernel version: 2.6.16-rc5
4# Wed Sep 14 15:18:49 2005 4# Mon Feb 27 16:10:42 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,17 +22,18 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28# CONFIG_IKCONFIG is not set 25# CONFIG_IKCONFIG is not set
29# CONFIG_CPUSETS is not set 26# CONFIG_CPUSETS is not set
30CONFIG_INITRAMFS_SOURCE="" 27CONFIG_INITRAMFS_SOURCE=""
28CONFIG_CC_OPTIMIZE_FOR_SIZE=y
31# CONFIG_EMBEDDED is not set 29# CONFIG_EMBEDDED is not set
32CONFIG_KALLSYMS=y 30CONFIG_KALLSYMS=y
33# CONFIG_KALLSYMS_ALL is not set 31# CONFIG_KALLSYMS_ALL is not set
34# CONFIG_KALLSYMS_EXTRA_PASS is not set 32# CONFIG_KALLSYMS_EXTRA_PASS is not set
33CONFIG_HOTPLUG=y
35CONFIG_PRINTK=y 34CONFIG_PRINTK=y
36CONFIG_BUG=y 35CONFIG_BUG=y
36CONFIG_ELF_CORE=y
37CONFIG_BASE_FULL=y 37CONFIG_BASE_FULL=y
38CONFIG_FUTEX=y 38CONFIG_FUTEX=y
39CONFIG_EPOLL=y 39CONFIG_EPOLL=y
@@ -42,8 +42,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
42CONFIG_CC_ALIGN_LABELS=0 42CONFIG_CC_ALIGN_LABELS=0
43CONFIG_CC_ALIGN_LOOPS=0 43CONFIG_CC_ALIGN_LOOPS=0
44CONFIG_CC_ALIGN_JUMPS=0 44CONFIG_CC_ALIGN_JUMPS=0
45CONFIG_SLAB=y
45# CONFIG_TINY_SHMEM is not set 46# CONFIG_TINY_SHMEM is not set
46CONFIG_BASE_SMALL=0 47CONFIG_BASE_SMALL=0
48# CONFIG_SLOB is not set
47 49
48# 50#
49# Loadable module support 51# Loadable module support
@@ -58,17 +60,36 @@ CONFIG_KMOD=y
58CONFIG_STOP_MACHINE=y 60CONFIG_STOP_MACHINE=y
59 61
60# 62#
63# Block layer
64#
65
66#
67# IO Schedulers
68#
69CONFIG_IOSCHED_NOOP=y
70CONFIG_IOSCHED_AS=y
71CONFIG_IOSCHED_DEADLINE=y
72CONFIG_IOSCHED_CFQ=y
73CONFIG_DEFAULT_AS=y
74# CONFIG_DEFAULT_DEADLINE is not set
75# CONFIG_DEFAULT_CFQ is not set
76# CONFIG_DEFAULT_NOOP is not set
77CONFIG_DEFAULT_IOSCHED="anticipatory"
78
79#
61# Processor type and features 80# Processor type and features
62# 81#
63CONFIG_IA64=y 82CONFIG_IA64=y
64CONFIG_64BIT=y 83CONFIG_64BIT=y
65CONFIG_MMU=y 84CONFIG_MMU=y
85CONFIG_SWIOTLB=y
66CONFIG_RWSEM_XCHGADD_ALGORITHM=y 86CONFIG_RWSEM_XCHGADD_ALGORITHM=y
67CONFIG_GENERIC_CALIBRATE_DELAY=y 87CONFIG_GENERIC_CALIBRATE_DELAY=y
68CONFIG_TIME_INTERPOLATION=y 88CONFIG_TIME_INTERPOLATION=y
69CONFIG_EFI=y 89CONFIG_EFI=y
70CONFIG_GENERIC_IOMAP=y 90CONFIG_GENERIC_IOMAP=y
71CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 91CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
92CONFIG_DMA_IS_DMA32=y
72# CONFIG_IA64_GENERIC is not set 93# CONFIG_IA64_GENERIC is not set
73CONFIG_IA64_DIG=y 94CONFIG_IA64_DIG=y
74# CONFIG_IA64_HP_ZX1 is not set 95# CONFIG_IA64_HP_ZX1 is not set
@@ -81,18 +102,17 @@ CONFIG_ITANIUM=y
81# CONFIG_IA64_PAGE_SIZE_8KB is not set 102# CONFIG_IA64_PAGE_SIZE_8KB is not set
82CONFIG_IA64_PAGE_SIZE_16KB=y 103CONFIG_IA64_PAGE_SIZE_16KB=y
83# CONFIG_IA64_PAGE_SIZE_64KB is not set 104# CONFIG_IA64_PAGE_SIZE_64KB is not set
105CONFIG_PGTABLE_3=y
106# CONFIG_PGTABLE_4 is not set
84# CONFIG_HZ_100 is not set 107# CONFIG_HZ_100 is not set
85CONFIG_HZ_250=y 108CONFIG_HZ_250=y
86# CONFIG_HZ_1000 is not set 109# CONFIG_HZ_1000 is not set
87CONFIG_HZ=250 110CONFIG_HZ=250
88CONFIG_IA64_BRL_EMU=y 111CONFIG_IA64_BRL_EMU=y
89CONFIG_IA64_L1_CACHE_SHIFT=6 112CONFIG_IA64_L1_CACHE_SHIFT=6
90# CONFIG_NUMA is not set
91# CONFIG_VIRTUAL_MEM_MAP is not set
92# CONFIG_IA64_CYCLONE is not set 113# CONFIG_IA64_CYCLONE is not set
93CONFIG_IOSAPIC=y 114CONFIG_IOSAPIC=y
94# CONFIG_IA64_SGI_SN_XP is not set 115CONFIG_FORCE_MAX_ZONEORDER=17
95CONFIG_FORCE_MAX_ZONEORDER=18
96CONFIG_SMP=y 116CONFIG_SMP=y
97CONFIG_NR_CPUS=2 117CONFIG_NR_CPUS=2
98# CONFIG_HOTPLUG_CPU is not set 118# CONFIG_HOTPLUG_CPU is not set
@@ -105,7 +125,12 @@ CONFIG_FLATMEM_MANUAL=y
105CONFIG_FLATMEM=y 125CONFIG_FLATMEM=y
106CONFIG_FLAT_NODE_MEM_MAP=y 126CONFIG_FLAT_NODE_MEM_MAP=y
107# CONFIG_SPARSEMEM_STATIC is not set 127# CONFIG_SPARSEMEM_STATIC is not set
108CONFIG_HAVE_DEC_LOCK=y 128CONFIG_SPLIT_PTLOCK_CPUS=4
129CONFIG_ARCH_SELECT_MEMORY_MODEL=y
130CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
131CONFIG_ARCH_FLATMEM_ENABLE=y
132CONFIG_ARCH_SPARSEMEM_ENABLE=y
133# CONFIG_VIRTUAL_MEM_MAP is not set
109CONFIG_IA32_SUPPORT=y 134CONFIG_IA32_SUPPORT=y
110CONFIG_COMPAT=y 135CONFIG_COMPAT=y
111# CONFIG_IA64_MCA_RECOVERY is not set 136# CONFIG_IA64_MCA_RECOVERY is not set
@@ -117,7 +142,6 @@ CONFIG_IA64_PALINFO=y
117# 142#
118CONFIG_EFI_VARS=y 143CONFIG_EFI_VARS=y
119CONFIG_EFI_PCDP=y 144CONFIG_EFI_PCDP=y
120# CONFIG_DELL_RBU is not set
121CONFIG_BINFMT_ELF=y 145CONFIG_BINFMT_ELF=y
122CONFIG_BINFMT_MISC=m 146CONFIG_BINFMT_MISC=m
123 147
@@ -125,6 +149,7 @@ CONFIG_BINFMT_MISC=m
125# Power management and ACPI 149# Power management and ACPI
126# 150#
127CONFIG_PM=y 151CONFIG_PM=y
152CONFIG_PM_LEGACY=y
128# CONFIG_PM_DEBUG is not set 153# CONFIG_PM_DEBUG is not set
129 154
130# 155#
@@ -137,6 +162,7 @@ CONFIG_ACPI_PROCESSOR=m
137CONFIG_ACPI_THERMAL=m 162CONFIG_ACPI_THERMAL=m
138CONFIG_ACPI_BLACKLIST_YEAR=0 163CONFIG_ACPI_BLACKLIST_YEAR=0
139# CONFIG_ACPI_DEBUG is not set 164# CONFIG_ACPI_DEBUG is not set
165CONFIG_ACPI_EC=y
140CONFIG_ACPI_POWER=y 166CONFIG_ACPI_POWER=y
141CONFIG_ACPI_SYSTEM=y 167CONFIG_ACPI_SYSTEM=y
142# CONFIG_ACPI_CONTAINER is not set 168# CONFIG_ACPI_CONTAINER is not set
@@ -173,6 +199,7 @@ CONFIG_NET=y
173# 199#
174# Networking options 200# Networking options
175# 201#
202# CONFIG_NETDEBUG is not set
176CONFIG_PACKET=y 203CONFIG_PACKET=y
177CONFIG_PACKET_MMAP=y 204CONFIG_PACKET_MMAP=y
178CONFIG_UNIX=y 205CONFIG_UNIX=y
@@ -206,6 +233,11 @@ CONFIG_TCP_CONG_BIC=y
206# SCTP Configuration (EXPERIMENTAL) 233# SCTP Configuration (EXPERIMENTAL)
207# 234#
208# CONFIG_IP_SCTP is not set 235# CONFIG_IP_SCTP is not set
236
237#
238# TIPC Configuration (EXPERIMENTAL)
239#
240# CONFIG_TIPC is not set
209# CONFIG_ATM is not set 241# CONFIG_ATM is not set
210# CONFIG_BRIDGE is not set 242# CONFIG_BRIDGE is not set
211# CONFIG_VLAN_8021Q is not set 243# CONFIG_VLAN_8021Q is not set
@@ -218,14 +250,16 @@ CONFIG_TCP_CONG_BIC=y
218# CONFIG_NET_DIVERT is not set 250# CONFIG_NET_DIVERT is not set
219# CONFIG_ECONET is not set 251# CONFIG_ECONET is not set
220# CONFIG_WAN_ROUTER is not set 252# CONFIG_WAN_ROUTER is not set
253
254#
255# QoS and/or fair queueing
256#
221# CONFIG_NET_SCHED is not set 257# CONFIG_NET_SCHED is not set
222# CONFIG_NET_CLS_ROUTE is not set
223 258
224# 259#
225# Network testing 260# Network testing
226# 261#
227# CONFIG_NET_PKTGEN is not set 262# CONFIG_NET_PKTGEN is not set
228# CONFIG_NETFILTER_NETLINK is not set
229# CONFIG_HAMRADIO is not set 263# CONFIG_HAMRADIO is not set
230# CONFIG_IRDA is not set 264# CONFIG_IRDA is not set
231# CONFIG_BT is not set 265# CONFIG_BT is not set
@@ -286,20 +320,13 @@ CONFIG_BLK_DEV_RAM=m
286CONFIG_BLK_DEV_RAM_COUNT=16 320CONFIG_BLK_DEV_RAM_COUNT=16
287CONFIG_BLK_DEV_RAM_SIZE=4096 321CONFIG_BLK_DEV_RAM_SIZE=4096
288# CONFIG_CDROM_PKTCDVD is not set 322# CONFIG_CDROM_PKTCDVD is not set
289
290#
291# IO Schedulers
292#
293CONFIG_IOSCHED_NOOP=y
294CONFIG_IOSCHED_AS=y
295CONFIG_IOSCHED_DEADLINE=y
296CONFIG_IOSCHED_CFQ=y
297# CONFIG_ATA_OVER_ETH is not set 323# CONFIG_ATA_OVER_ETH is not set
298 324
299# 325#
300# ATA/ATAPI/MFM/RLL support 326# ATA/ATAPI/MFM/RLL support
301# 327#
302CONFIG_IDE=m 328CONFIG_IDE=m
329CONFIG_IDE_MAX_HWIFS=4
303CONFIG_BLK_DEV_IDE=m 330CONFIG_BLK_DEV_IDE=m
304 331
305# 332#
@@ -390,6 +417,7 @@ CONFIG_SCSI_SPI_ATTRS=m
390# 417#
391# SCSI low-level drivers 418# SCSI low-level drivers
392# 419#
420# CONFIG_ISCSI_TCP is not set
393# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 421# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
394# CONFIG_SCSI_3W_9XXX is not set 422# CONFIG_SCSI_3W_9XXX is not set
395# CONFIG_SCSI_ACARD is not set 423# CONFIG_SCSI_ACARD is not set
@@ -399,6 +427,7 @@ CONFIG_SCSI_SPI_ATTRS=m
399# CONFIG_SCSI_AIC79XX is not set 427# CONFIG_SCSI_AIC79XX is not set
400# CONFIG_MEGARAID_NEWGEN is not set 428# CONFIG_MEGARAID_NEWGEN is not set
401# CONFIG_MEGARAID_LEGACY is not set 429# CONFIG_MEGARAID_LEGACY is not set
430# CONFIG_MEGARAID_SAS is not set
402# CONFIG_SCSI_SATA is not set 431# CONFIG_SCSI_SATA is not set
403# CONFIG_SCSI_DMX3191D is not set 432# CONFIG_SCSI_DMX3191D is not set
404# CONFIG_SCSI_FUTURE_DOMAIN is not set 433# CONFIG_SCSI_FUTURE_DOMAIN is not set
@@ -409,14 +438,7 @@ CONFIG_SCSI_SPI_ATTRS=m
409# CONFIG_SCSI_IPR is not set 438# CONFIG_SCSI_IPR is not set
410# CONFIG_SCSI_QLOGIC_FC is not set 439# CONFIG_SCSI_QLOGIC_FC is not set
411CONFIG_SCSI_QLOGIC_1280=y 440CONFIG_SCSI_QLOGIC_1280=y
412# CONFIG_SCSI_QLOGIC_1280_1040 is not set 441# CONFIG_SCSI_QLA_FC is not set
413CONFIG_SCSI_QLA2XXX=y
414# CONFIG_SCSI_QLA21XX is not set
415# CONFIG_SCSI_QLA22XX is not set
416# CONFIG_SCSI_QLA2300 is not set
417# CONFIG_SCSI_QLA2322 is not set
418# CONFIG_SCSI_QLA6312 is not set
419# CONFIG_SCSI_QLA24XX is not set
420# CONFIG_SCSI_LPFC is not set 442# CONFIG_SCSI_LPFC is not set
421# CONFIG_SCSI_DC395x is not set 443# CONFIG_SCSI_DC395x is not set
422# CONFIG_SCSI_DC390T is not set 444# CONFIG_SCSI_DC390T is not set
@@ -448,6 +470,7 @@ CONFIG_DM_ZERO=m
448# CONFIG_FUSION is not set 470# CONFIG_FUSION is not set
449# CONFIG_FUSION_SPI is not set 471# CONFIG_FUSION_SPI is not set
450# CONFIG_FUSION_FC is not set 472# CONFIG_FUSION_FC is not set
473# CONFIG_FUSION_SAS is not set
451 474
452# 475#
453# IEEE 1394 (FireWire) support 476# IEEE 1394 (FireWire) support
@@ -486,6 +509,7 @@ CONFIG_NET_ETHERNET=y
486CONFIG_MII=y 509CONFIG_MII=y
487# CONFIG_HAPPYMEAL is not set 510# CONFIG_HAPPYMEAL is not set
488# CONFIG_SUNGEM is not set 511# CONFIG_SUNGEM is not set
512# CONFIG_CASSINI is not set
489# CONFIG_NET_VENDOR_3COM is not set 513# CONFIG_NET_VENDOR_3COM is not set
490 514
491# 515#
@@ -524,6 +548,7 @@ CONFIG_EEPRO100=y
524# CONFIG_R8169 is not set 548# CONFIG_R8169 is not set
525# CONFIG_SIS190 is not set 549# CONFIG_SIS190 is not set
526# CONFIG_SKGE is not set 550# CONFIG_SKGE is not set
551# CONFIG_SKY2 is not set
527# CONFIG_SK98LIN is not set 552# CONFIG_SK98LIN is not set
528# CONFIG_VIA_VELOCITY is not set 553# CONFIG_VIA_VELOCITY is not set
529# CONFIG_TIGON3 is not set 554# CONFIG_TIGON3 is not set
@@ -630,6 +655,7 @@ CONFIG_SERIAL_8250=y
630CONFIG_SERIAL_8250_CONSOLE=y 655CONFIG_SERIAL_8250_CONSOLE=y
631CONFIG_SERIAL_8250_ACPI=y 656CONFIG_SERIAL_8250_ACPI=y
632CONFIG_SERIAL_8250_NR_UARTS=4 657CONFIG_SERIAL_8250_NR_UARTS=4
658CONFIG_SERIAL_8250_RUNTIME_UARTS=4
633CONFIG_SERIAL_8250_EXTENDED=y 659CONFIG_SERIAL_8250_EXTENDED=y
634CONFIG_SERIAL_8250_SHARE_IRQ=y 660CONFIG_SERIAL_8250_SHARE_IRQ=y
635# CONFIG_SERIAL_8250_DETECT_IRQ is not set 661# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -681,6 +707,7 @@ CONFIG_DRM_R128=m
681# TPM devices 707# TPM devices
682# 708#
683# CONFIG_TCG_TPM is not set 709# CONFIG_TCG_TPM is not set
710# CONFIG_TELCLOCK is not set
684 711
685# 712#
686# I2C support 713# I2C support
@@ -731,12 +758,19 @@ CONFIG_I2C_ALGOBIT=y
731# CONFIG_SENSORS_PCF8591 is not set 758# CONFIG_SENSORS_PCF8591 is not set
732# CONFIG_SENSORS_RTC8564 is not set 759# CONFIG_SENSORS_RTC8564 is not set
733# CONFIG_SENSORS_MAX6875 is not set 760# CONFIG_SENSORS_MAX6875 is not set
761# CONFIG_RTC_X1205_I2C is not set
734# CONFIG_I2C_DEBUG_CORE is not set 762# CONFIG_I2C_DEBUG_CORE is not set
735# CONFIG_I2C_DEBUG_ALGO is not set 763# CONFIG_I2C_DEBUG_ALGO is not set
736# CONFIG_I2C_DEBUG_BUS is not set 764# CONFIG_I2C_DEBUG_BUS is not set
737# CONFIG_I2C_DEBUG_CHIP is not set 765# CONFIG_I2C_DEBUG_CHIP is not set
738 766
739# 767#
768# SPI support
769#
770# CONFIG_SPI is not set
771# CONFIG_SPI_MASTER is not set
772
773#
740# Dallas's 1-wire bus 774# Dallas's 1-wire bus
741# 775#
742# CONFIG_W1 is not set 776# CONFIG_W1 is not set
@@ -754,6 +788,7 @@ CONFIG_HWMON=y
754# CONFIG_SENSORS_ASB100 is not set 788# CONFIG_SENSORS_ASB100 is not set
755# CONFIG_SENSORS_ATXP1 is not set 789# CONFIG_SENSORS_ATXP1 is not set
756# CONFIG_SENSORS_DS1621 is not set 790# CONFIG_SENSORS_DS1621 is not set
791# CONFIG_SENSORS_F71805F is not set
757# CONFIG_SENSORS_FSCHER is not set 792# CONFIG_SENSORS_FSCHER is not set
758# CONFIG_SENSORS_FSCPOS is not set 793# CONFIG_SENSORS_FSCPOS is not set
759# CONFIG_SENSORS_GL518SM is not set 794# CONFIG_SENSORS_GL518SM is not set
@@ -775,6 +810,7 @@ CONFIG_HWMON=y
775# CONFIG_SENSORS_SMSC47M1 is not set 810# CONFIG_SENSORS_SMSC47M1 is not set
776# CONFIG_SENSORS_SMSC47B397 is not set 811# CONFIG_SENSORS_SMSC47B397 is not set
777# CONFIG_SENSORS_VIA686A is not set 812# CONFIG_SENSORS_VIA686A is not set
813# CONFIG_SENSORS_VT8231 is not set
778# CONFIG_SENSORS_W83781D is not set 814# CONFIG_SENSORS_W83781D is not set
779# CONFIG_SENSORS_W83792D is not set 815# CONFIG_SENSORS_W83792D is not set
780# CONFIG_SENSORS_W83L785TS is not set 816# CONFIG_SENSORS_W83L785TS is not set
@@ -830,6 +866,8 @@ CONFIG_SND_OSSEMUL=y
830CONFIG_SND_MIXER_OSS=m 866CONFIG_SND_MIXER_OSS=m
831CONFIG_SND_PCM_OSS=m 867CONFIG_SND_PCM_OSS=m
832# CONFIG_SND_SEQUENCER_OSS is not set 868# CONFIG_SND_SEQUENCER_OSS is not set
869# CONFIG_SND_DYNAMIC_MINORS is not set
870CONFIG_SND_SUPPORT_OLD_API=y
833# CONFIG_SND_VERBOSE_PRINTK is not set 871# CONFIG_SND_VERBOSE_PRINTK is not set
834# CONFIG_SND_DEBUG is not set 872# CONFIG_SND_DEBUG is not set
835 873
@@ -837,17 +875,18 @@ CONFIG_SND_PCM_OSS=m
837# Generic devices 875# Generic devices
838# 876#
839CONFIG_SND_OPL3_LIB=m 877CONFIG_SND_OPL3_LIB=m
878CONFIG_SND_AC97_CODEC=m
879CONFIG_SND_AC97_BUS=m
840# CONFIG_SND_DUMMY is not set 880# CONFIG_SND_DUMMY is not set
841# CONFIG_SND_VIRMIDI is not set 881# CONFIG_SND_VIRMIDI is not set
842# CONFIG_SND_MTPAV is not set 882# CONFIG_SND_MTPAV is not set
843# CONFIG_SND_SERIAL_U16550 is not set 883# CONFIG_SND_SERIAL_U16550 is not set
844# CONFIG_SND_MPU401 is not set 884# CONFIG_SND_MPU401 is not set
845CONFIG_SND_AC97_CODEC=m
846CONFIG_SND_AC97_BUS=m
847 885
848# 886#
849# PCI devices 887# PCI devices
850# 888#
889# CONFIG_SND_AD1889 is not set
851# CONFIG_SND_ALI5451 is not set 890# CONFIG_SND_ALI5451 is not set
852# CONFIG_SND_ATIIXP is not set 891# CONFIG_SND_ATIIXP is not set
853# CONFIG_SND_ATIIXP_MODEM is not set 892# CONFIG_SND_ATIIXP_MODEM is not set
@@ -856,38 +895,38 @@ CONFIG_SND_AC97_BUS=m
856# CONFIG_SND_AU8830 is not set 895# CONFIG_SND_AU8830 is not set
857# CONFIG_SND_AZT3328 is not set 896# CONFIG_SND_AZT3328 is not set
858# CONFIG_SND_BT87X is not set 897# CONFIG_SND_BT87X is not set
859# CONFIG_SND_CS46XX is not set 898# CONFIG_SND_CA0106 is not set
899# CONFIG_SND_CMIPCI is not set
860CONFIG_SND_CS4281=m 900CONFIG_SND_CS4281=m
901# CONFIG_SND_CS46XX is not set
861# CONFIG_SND_EMU10K1 is not set 902# CONFIG_SND_EMU10K1 is not set
862# CONFIG_SND_EMU10K1X is not set 903# CONFIG_SND_EMU10K1X is not set
863# CONFIG_SND_CA0106 is not set
864# CONFIG_SND_KORG1212 is not set
865# CONFIG_SND_MIXART is not set
866# CONFIG_SND_NM256 is not set
867# CONFIG_SND_RME32 is not set
868# CONFIG_SND_RME96 is not set
869# CONFIG_SND_RME9652 is not set
870# CONFIG_SND_HDSP is not set
871# CONFIG_SND_HDSPM is not set
872# CONFIG_SND_TRIDENT is not set
873# CONFIG_SND_YMFPCI is not set
874# CONFIG_SND_AD1889 is not set
875# CONFIG_SND_CMIPCI is not set
876# CONFIG_SND_ENS1370 is not set 904# CONFIG_SND_ENS1370 is not set
877# CONFIG_SND_ENS1371 is not set 905# CONFIG_SND_ENS1371 is not set
878# CONFIG_SND_ES1938 is not set 906# CONFIG_SND_ES1938 is not set
879# CONFIG_SND_ES1968 is not set 907# CONFIG_SND_ES1968 is not set
880# CONFIG_SND_MAESTRO3 is not set
881# CONFIG_SND_FM801 is not set 908# CONFIG_SND_FM801 is not set
909# CONFIG_SND_HDA_INTEL is not set
910# CONFIG_SND_HDSP is not set
911# CONFIG_SND_HDSPM is not set
882# CONFIG_SND_ICE1712 is not set 912# CONFIG_SND_ICE1712 is not set
883# CONFIG_SND_ICE1724 is not set 913# CONFIG_SND_ICE1724 is not set
884# CONFIG_SND_INTEL8X0 is not set 914# CONFIG_SND_INTEL8X0 is not set
885# CONFIG_SND_INTEL8X0M is not set 915# CONFIG_SND_INTEL8X0M is not set
916# CONFIG_SND_KORG1212 is not set
917# CONFIG_SND_MAESTRO3 is not set
918# CONFIG_SND_MIXART is not set
919# CONFIG_SND_NM256 is not set
920# CONFIG_SND_PCXHR is not set
921# CONFIG_SND_RME32 is not set
922# CONFIG_SND_RME96 is not set
923# CONFIG_SND_RME9652 is not set
886# CONFIG_SND_SONICVIBES is not set 924# CONFIG_SND_SONICVIBES is not set
925# CONFIG_SND_TRIDENT is not set
887# CONFIG_SND_VIA82XX is not set 926# CONFIG_SND_VIA82XX is not set
888# CONFIG_SND_VIA82XX_MODEM is not set 927# CONFIG_SND_VIA82XX_MODEM is not set
889# CONFIG_SND_VX222 is not set 928# CONFIG_SND_VX222 is not set
890# CONFIG_SND_HDA_INTEL is not set 929# CONFIG_SND_YMFPCI is not set
891 930
892# 931#
893# USB devices 932# USB devices
@@ -929,12 +968,15 @@ CONFIG_USB_UHCI_HCD=m
929# USB Device Class drivers 968# USB Device Class drivers
930# 969#
931# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set 970# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
932CONFIG_USB_BLUETOOTH_TTY=m
933CONFIG_USB_ACM=m 971CONFIG_USB_ACM=m
934CONFIG_USB_PRINTER=m 972CONFIG_USB_PRINTER=m
935 973
936# 974#
937# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 975# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
976#
977
978#
979# may also be needed; see USB_STORAGE Help for more information
938# 980#
939CONFIG_USB_STORAGE=m 981CONFIG_USB_STORAGE=m
940# CONFIG_USB_STORAGE_DEBUG is not set 982# CONFIG_USB_STORAGE_DEBUG is not set
@@ -946,13 +988,15 @@ CONFIG_USB_STORAGE=m
946# CONFIG_USB_STORAGE_SDDR09 is not set 988# CONFIG_USB_STORAGE_SDDR09 is not set
947# CONFIG_USB_STORAGE_SDDR55 is not set 989# CONFIG_USB_STORAGE_SDDR55 is not set
948# CONFIG_USB_STORAGE_JUMPSHOT is not set 990# CONFIG_USB_STORAGE_JUMPSHOT is not set
949# CONFIG_USB_STORAGE_ONETOUCH is not set 991# CONFIG_USB_STORAGE_ALAUDA is not set
992# CONFIG_USB_LIBUSUAL is not set
950 993
951# 994#
952# USB Input Devices 995# USB Input Devices
953# 996#
954CONFIG_USB_HID=m 997CONFIG_USB_HID=m
955CONFIG_USB_HIDINPUT=y 998CONFIG_USB_HIDINPUT=y
999# CONFIG_USB_HIDINPUT_POWERBOOK is not set
956# CONFIG_HID_FF is not set 1000# CONFIG_HID_FF is not set
957CONFIG_USB_HIDDEV=y 1001CONFIG_USB_HIDDEV=y
958 1002
@@ -972,6 +1016,7 @@ CONFIG_USB_HIDDEV=y
972# CONFIG_USB_YEALINK is not set 1016# CONFIG_USB_YEALINK is not set
973# CONFIG_USB_XPAD is not set 1017# CONFIG_USB_XPAD is not set
974# CONFIG_USB_ATI_REMOTE is not set 1018# CONFIG_USB_ATI_REMOTE is not set
1019# CONFIG_USB_ATI_REMOTE2 is not set
975# CONFIG_USB_KEYSPAN_REMOTE is not set 1020# CONFIG_USB_KEYSPAN_REMOTE is not set
976# CONFIG_USB_APPLETOUCH is not set 1021# CONFIG_USB_APPLETOUCH is not set
977 1022
@@ -1046,7 +1091,7 @@ CONFIG_USB_MON=y
1046# CONFIG_INFINIBAND is not set 1091# CONFIG_INFINIBAND is not set
1047 1092
1048# 1093#
1049# SN Devices 1094# EDAC - error detection and reporting (RAS)
1050# 1095#
1051 1096
1052# 1097#
@@ -1071,6 +1116,7 @@ CONFIG_XFS_QUOTA=y
1071CONFIG_XFS_SECURITY=y 1116CONFIG_XFS_SECURITY=y
1072CONFIG_XFS_POSIX_ACL=y 1117CONFIG_XFS_POSIX_ACL=y
1073# CONFIG_XFS_RT is not set 1118# CONFIG_XFS_RT is not set
1119# CONFIG_OCFS2_FS is not set
1074# CONFIG_MINIX_FS is not set 1120# CONFIG_MINIX_FS is not set
1075# CONFIG_ROMFS_FS is not set 1121# CONFIG_ROMFS_FS is not set
1076CONFIG_INOTIFY=y 1122CONFIG_INOTIFY=y
@@ -1111,6 +1157,7 @@ CONFIG_HUGETLBFS=y
1111CONFIG_HUGETLB_PAGE=y 1157CONFIG_HUGETLB_PAGE=y
1112CONFIG_RAMFS=y 1158CONFIG_RAMFS=y
1113# CONFIG_RELAYFS_FS is not set 1159# CONFIG_RELAYFS_FS is not set
1160# CONFIG_CONFIGFS_FS is not set
1114 1161
1115# 1162#
1116# Miscellaneous filesystems 1163# Miscellaneous filesystems
@@ -1153,6 +1200,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
1153# CONFIG_SMB_FS is not set 1200# CONFIG_SMB_FS is not set
1154CONFIG_CIFS=m 1201CONFIG_CIFS=m
1155CONFIG_CIFS_STATS=y 1202CONFIG_CIFS_STATS=y
1203# CONFIG_CIFS_STATS2 is not set
1156CONFIG_CIFS_XATTR=y 1204CONFIG_CIFS_XATTR=y
1157CONFIG_CIFS_POSIX=y 1205CONFIG_CIFS_POSIX=y
1158# CONFIG_CIFS_EXPERIMENTAL is not set 1206# CONFIG_CIFS_EXPERIMENTAL is not set
@@ -1179,6 +1227,7 @@ CONFIG_MSDOS_PARTITION=y
1179CONFIG_SGI_PARTITION=y 1227CONFIG_SGI_PARTITION=y
1180# CONFIG_ULTRIX_PARTITION is not set 1228# CONFIG_ULTRIX_PARTITION is not set
1181# CONFIG_SUN_PARTITION is not set 1229# CONFIG_SUN_PARTITION is not set
1230# CONFIG_KARMA_PARTITION is not set
1182CONFIG_EFI_PARTITION=y 1231CONFIG_EFI_PARTITION=y
1183 1232
1184# 1233#
@@ -1237,28 +1286,32 @@ CONFIG_GENERIC_IRQ_PROBE=y
1237CONFIG_GENERIC_PENDING_IRQ=y 1286CONFIG_GENERIC_PENDING_IRQ=y
1238 1287
1239# 1288#
1240# Profiling support 1289# Instrumentation Support
1241# 1290#
1242CONFIG_PROFILING=y 1291CONFIG_PROFILING=y
1243CONFIG_OPROFILE=y 1292CONFIG_OPROFILE=y
1293# CONFIG_KPROBES is not set
1244 1294
1245# 1295#
1246# Kernel hacking 1296# Kernel hacking
1247# 1297#
1248# CONFIG_PRINTK_TIME is not set 1298# CONFIG_PRINTK_TIME is not set
1249CONFIG_DEBUG_KERNEL=y
1250CONFIG_MAGIC_SYSRQ=y 1299CONFIG_MAGIC_SYSRQ=y
1300CONFIG_DEBUG_KERNEL=y
1251CONFIG_LOG_BUF_SHIFT=16 1301CONFIG_LOG_BUF_SHIFT=16
1252CONFIG_DETECT_SOFTLOCKUP=y 1302CONFIG_DETECT_SOFTLOCKUP=y
1253# CONFIG_SCHEDSTATS is not set 1303# CONFIG_SCHEDSTATS is not set
1254# CONFIG_DEBUG_SLAB is not set 1304# CONFIG_DEBUG_SLAB is not set
1255CONFIG_DEBUG_PREEMPT=y 1305CONFIG_DEBUG_PREEMPT=y
1306CONFIG_DEBUG_MUTEXES=y
1256# CONFIG_DEBUG_SPINLOCK is not set 1307# CONFIG_DEBUG_SPINLOCK is not set
1257# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1308# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1258# CONFIG_DEBUG_KOBJECT is not set 1309# CONFIG_DEBUG_KOBJECT is not set
1259# CONFIG_DEBUG_INFO is not set 1310# CONFIG_DEBUG_INFO is not set
1260# CONFIG_DEBUG_FS is not set 1311# CONFIG_DEBUG_FS is not set
1261# CONFIG_KPROBES is not set 1312# CONFIG_DEBUG_VM is not set
1313CONFIG_FORCED_INLINING=y
1314# CONFIG_RCU_TORTURE_TEST is not set
1262# CONFIG_IA64_GRANULE_16MB is not set 1315# CONFIG_IA64_GRANULE_16MB is not set
1263CONFIG_IA64_GRANULE_64MB=y 1316CONFIG_IA64_GRANULE_64MB=y
1264# CONFIG_IA64_PRINT_HAZARDS is not set 1317# CONFIG_IA64_PRINT_HAZARDS is not set
diff --git a/arch/ia64/configs/gensparse_defconfig b/arch/ia64/configs/gensparse_defconfig
index 991c07b57c24..744fd2f79f61 100644
--- a/arch/ia64/configs/gensparse_defconfig
+++ b/arch/ia64/configs/gensparse_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc2 3# Linux kernel version: 2.6.16-rc5
4# Wed Sep 28 08:27:29 2005 4# Thu Mar 2 16:39:10 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28CONFIG_IKCONFIG=y 25CONFIG_IKCONFIG=y
29CONFIG_IKCONFIG_PROC=y 26CONFIG_IKCONFIG_PROC=y
30# CONFIG_CPUSETS is not set 27# CONFIG_CPUSETS is not set
31CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
32# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
33CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
34CONFIG_KALLSYMS_ALL=y 32CONFIG_KALLSYMS_ALL=y
35# CONFIG_KALLSYMS_EXTRA_PASS is not set 33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
36CONFIG_PRINTK=y 35CONFIG_PRINTK=y
37CONFIG_BUG=y 36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y 38CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 39CONFIG_FUTEX=y
40CONFIG_EPOLL=y 40CONFIG_EPOLL=y
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
43CONFIG_CC_ALIGN_LABELS=0 43CONFIG_CC_ALIGN_LABELS=0
44CONFIG_CC_ALIGN_LOOPS=0 44CONFIG_CC_ALIGN_LOOPS=0
45CONFIG_CC_ALIGN_JUMPS=0 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
46# CONFIG_TINY_SHMEM is not set 47# CONFIG_TINY_SHMEM is not set
47CONFIG_BASE_SMALL=0 48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
48 50
49# 51#
50# Loadable module support 52# Loadable module support
@@ -59,17 +61,36 @@ CONFIG_KMOD=y
59CONFIG_STOP_MACHINE=y 61CONFIG_STOP_MACHINE=y
60 62
61# 63#
64# Block layer
65#
66
67#
68# IO Schedulers
69#
70CONFIG_IOSCHED_NOOP=y
71CONFIG_IOSCHED_AS=y
72CONFIG_IOSCHED_DEADLINE=y
73CONFIG_IOSCHED_CFQ=y
74CONFIG_DEFAULT_AS=y
75# CONFIG_DEFAULT_DEADLINE is not set
76# CONFIG_DEFAULT_CFQ is not set
77# CONFIG_DEFAULT_NOOP is not set
78CONFIG_DEFAULT_IOSCHED="anticipatory"
79
80#
62# Processor type and features 81# Processor type and features
63# 82#
64CONFIG_IA64=y 83CONFIG_IA64=y
65CONFIG_64BIT=y 84CONFIG_64BIT=y
66CONFIG_MMU=y 85CONFIG_MMU=y
86CONFIG_SWIOTLB=y
67CONFIG_RWSEM_XCHGADD_ALGORITHM=y 87CONFIG_RWSEM_XCHGADD_ALGORITHM=y
68CONFIG_GENERIC_CALIBRATE_DELAY=y 88CONFIG_GENERIC_CALIBRATE_DELAY=y
69CONFIG_TIME_INTERPOLATION=y 89CONFIG_TIME_INTERPOLATION=y
70CONFIG_EFI=y 90CONFIG_EFI=y
71CONFIG_GENERIC_IOMAP=y 91CONFIG_GENERIC_IOMAP=y
72CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 92CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
93CONFIG_DMA_IS_DMA32=y
73CONFIG_IA64_GENERIC=y 94CONFIG_IA64_GENERIC=y
74# CONFIG_IA64_DIG is not set 95# CONFIG_IA64_DIG is not set
75# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
@@ -82,6 +103,8 @@ CONFIG_MCKINLEY=y
82# CONFIG_IA64_PAGE_SIZE_8KB is not set 103# CONFIG_IA64_PAGE_SIZE_8KB is not set
83CONFIG_IA64_PAGE_SIZE_16KB=y 104CONFIG_IA64_PAGE_SIZE_16KB=y
84# CONFIG_IA64_PAGE_SIZE_64KB is not set 105# CONFIG_IA64_PAGE_SIZE_64KB is not set
106CONFIG_PGTABLE_3=y
107# CONFIG_PGTABLE_4 is not set
85# CONFIG_HZ_100 is not set 108# CONFIG_HZ_100 is not set
86CONFIG_HZ_250=y 109CONFIG_HZ_250=y
87# CONFIG_HZ_1000 is not set 110# CONFIG_HZ_1000 is not set
@@ -105,6 +128,9 @@ CONFIG_NEED_MULTIPLE_NODES=y
105CONFIG_HAVE_MEMORY_PRESENT=y 128CONFIG_HAVE_MEMORY_PRESENT=y
106# CONFIG_SPARSEMEM_STATIC is not set 129# CONFIG_SPARSEMEM_STATIC is not set
107CONFIG_SPARSEMEM_EXTREME=y 130CONFIG_SPARSEMEM_EXTREME=y
131# CONFIG_MEMORY_HOTPLUG is not set
132CONFIG_SPLIT_PTLOCK_CPUS=4
133CONFIG_MIGRATION=y
108CONFIG_ARCH_SELECT_MEMORY_MODEL=y 134CONFIG_ARCH_SELECT_MEMORY_MODEL=y
109CONFIG_ARCH_DISCONTIGMEM_ENABLE=y 135CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
110CONFIG_ARCH_FLATMEM_ENABLE=y 136CONFIG_ARCH_FLATMEM_ENABLE=y
@@ -117,13 +143,13 @@ CONFIG_COMPAT=y
117CONFIG_IA64_MCA_RECOVERY=y 143CONFIG_IA64_MCA_RECOVERY=y
118CONFIG_PERFMON=y 144CONFIG_PERFMON=y
119CONFIG_IA64_PALINFO=y 145CONFIG_IA64_PALINFO=y
146CONFIG_SGI_SN=y
120 147
121# 148#
122# Firmware Drivers 149# Firmware Drivers
123# 150#
124CONFIG_EFI_VARS=y 151CONFIG_EFI_VARS=y
125CONFIG_EFI_PCDP=y 152CONFIG_EFI_PCDP=y
126# CONFIG_DELL_RBU is not set
127CONFIG_BINFMT_ELF=y 153CONFIG_BINFMT_ELF=y
128CONFIG_BINFMT_MISC=m 154CONFIG_BINFMT_MISC=m
129 155
@@ -131,6 +157,7 @@ CONFIG_BINFMT_MISC=m
131# Power management and ACPI 157# Power management and ACPI
132# 158#
133CONFIG_PM=y 159CONFIG_PM=y
160CONFIG_PM_LEGACY=y
134# CONFIG_PM_DEBUG is not set 161# CONFIG_PM_DEBUG is not set
135 162
136# 163#
@@ -145,6 +172,7 @@ CONFIG_ACPI_THERMAL=m
145CONFIG_ACPI_NUMA=y 172CONFIG_ACPI_NUMA=y
146CONFIG_ACPI_BLACKLIST_YEAR=0 173CONFIG_ACPI_BLACKLIST_YEAR=0
147# CONFIG_ACPI_DEBUG is not set 174# CONFIG_ACPI_DEBUG is not set
175CONFIG_ACPI_EC=y
148CONFIG_ACPI_POWER=y 176CONFIG_ACPI_POWER=y
149CONFIG_ACPI_SYSTEM=y 177CONFIG_ACPI_SYSTEM=y
150CONFIG_ACPI_CONTAINER=m 178CONFIG_ACPI_CONTAINER=m
@@ -187,6 +215,7 @@ CONFIG_NET=y
187# 215#
188# Networking options 216# Networking options
189# 217#
218# CONFIG_NETDEBUG is not set
190CONFIG_PACKET=y 219CONFIG_PACKET=y
191# CONFIG_PACKET_MMAP is not set 220# CONFIG_PACKET_MMAP is not set
192CONFIG_UNIX=y 221CONFIG_UNIX=y
@@ -221,6 +250,11 @@ CONFIG_TCP_CONG_BIC=y
221# SCTP Configuration (EXPERIMENTAL) 250# SCTP Configuration (EXPERIMENTAL)
222# 251#
223# CONFIG_IP_SCTP is not set 252# CONFIG_IP_SCTP is not set
253
254#
255# TIPC Configuration (EXPERIMENTAL)
256#
257# CONFIG_TIPC is not set
224# CONFIG_ATM is not set 258# CONFIG_ATM is not set
225# CONFIG_BRIDGE is not set 259# CONFIG_BRIDGE is not set
226# CONFIG_VLAN_8021Q is not set 260# CONFIG_VLAN_8021Q is not set
@@ -233,8 +267,11 @@ CONFIG_TCP_CONG_BIC=y
233# CONFIG_NET_DIVERT is not set 267# CONFIG_NET_DIVERT is not set
234# CONFIG_ECONET is not set 268# CONFIG_ECONET is not set
235# CONFIG_WAN_ROUTER is not set 269# CONFIG_WAN_ROUTER is not set
270
271#
272# QoS and/or fair queueing
273#
236# CONFIG_NET_SCHED is not set 274# CONFIG_NET_SCHED is not set
237# CONFIG_NET_CLS_ROUTE is not set
238 275
239# 276#
240# Network testing 277# Network testing
@@ -275,7 +312,13 @@ CONFIG_FW_LOADER=m
275# 312#
276# Plug and Play support 313# Plug and Play support
277# 314#
278# CONFIG_PNP is not set 315CONFIG_PNP=y
316# CONFIG_PNP_DEBUG is not set
317
318#
319# Protocols
320#
321CONFIG_PNPACPI=y
279 322
280# 323#
281# Block devices 324# Block devices
@@ -295,20 +338,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16
295CONFIG_BLK_DEV_RAM_SIZE=4096 338CONFIG_BLK_DEV_RAM_SIZE=4096
296CONFIG_BLK_DEV_INITRD=y 339CONFIG_BLK_DEV_INITRD=y
297# CONFIG_CDROM_PKTCDVD is not set 340# CONFIG_CDROM_PKTCDVD is not set
298
299#
300# IO Schedulers
301#
302CONFIG_IOSCHED_NOOP=y
303CONFIG_IOSCHED_AS=y
304CONFIG_IOSCHED_DEADLINE=y
305CONFIG_IOSCHED_CFQ=y
306# CONFIG_ATA_OVER_ETH is not set 341# CONFIG_ATA_OVER_ETH is not set
307 342
308# 343#
309# ATA/ATAPI/MFM/RLL support 344# ATA/ATAPI/MFM/RLL support
310# 345#
311CONFIG_IDE=y 346CONFIG_IDE=y
347CONFIG_IDE_MAX_HWIFS=4
312CONFIG_BLK_DEV_IDE=y 348CONFIG_BLK_DEV_IDE=y
313 349
314# 350#
@@ -327,6 +363,7 @@ CONFIG_BLK_DEV_IDESCSI=m
327# IDE chipset support/bugfixes 363# IDE chipset support/bugfixes
328# 364#
329CONFIG_IDE_GENERIC=y 365CONFIG_IDE_GENERIC=y
366# CONFIG_BLK_DEV_IDEPNP is not set
330CONFIG_BLK_DEV_IDEPCI=y 367CONFIG_BLK_DEV_IDEPCI=y
331# CONFIG_IDEPCI_SHARE_IRQ is not set 368# CONFIG_IDEPCI_SHARE_IRQ is not set
332# CONFIG_BLK_DEV_OFFBOARD is not set 369# CONFIG_BLK_DEV_OFFBOARD is not set
@@ -400,6 +437,7 @@ CONFIG_SCSI_FC_ATTRS=y
400# 437#
401# SCSI low-level drivers 438# SCSI low-level drivers
402# 439#
440# CONFIG_ISCSI_TCP is not set
403# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 441# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
404# CONFIG_SCSI_3W_9XXX is not set 442# CONFIG_SCSI_3W_9XXX is not set
405# CONFIG_SCSI_ACARD is not set 443# CONFIG_SCSI_ACARD is not set
@@ -409,16 +447,19 @@ CONFIG_SCSI_FC_ATTRS=y
409# CONFIG_SCSI_AIC79XX is not set 447# CONFIG_SCSI_AIC79XX is not set
410# CONFIG_MEGARAID_NEWGEN is not set 448# CONFIG_MEGARAID_NEWGEN is not set
411# CONFIG_MEGARAID_LEGACY is not set 449# CONFIG_MEGARAID_LEGACY is not set
450# CONFIG_MEGARAID_SAS is not set
412CONFIG_SCSI_SATA=y 451CONFIG_SCSI_SATA=y
413# CONFIG_SCSI_SATA_AHCI is not set 452# CONFIG_SCSI_SATA_AHCI is not set
414# CONFIG_SCSI_SATA_SVW is not set 453# CONFIG_SCSI_SATA_SVW is not set
415# CONFIG_SCSI_ATA_PIIX is not set 454# CONFIG_SCSI_ATA_PIIX is not set
416# CONFIG_SCSI_SATA_MV is not set 455# CONFIG_SCSI_SATA_MV is not set
417# CONFIG_SCSI_SATA_NV is not set 456# CONFIG_SCSI_SATA_NV is not set
418# CONFIG_SCSI_SATA_PROMISE is not set 457# CONFIG_SCSI_PDC_ADMA is not set
419# CONFIG_SCSI_SATA_QSTOR is not set 458# CONFIG_SCSI_SATA_QSTOR is not set
459# CONFIG_SCSI_SATA_PROMISE is not set
420# CONFIG_SCSI_SATA_SX4 is not set 460# CONFIG_SCSI_SATA_SX4 is not set
421# CONFIG_SCSI_SATA_SIL is not set 461# CONFIG_SCSI_SATA_SIL is not set
462# CONFIG_SCSI_SATA_SIL24 is not set
422# CONFIG_SCSI_SATA_SIS is not set 463# CONFIG_SCSI_SATA_SIS is not set
423# CONFIG_SCSI_SATA_ULI is not set 464# CONFIG_SCSI_SATA_ULI is not set
424# CONFIG_SCSI_SATA_VIA is not set 465# CONFIG_SCSI_SATA_VIA is not set
@@ -436,14 +477,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
436# CONFIG_SCSI_IPR is not set 477# CONFIG_SCSI_IPR is not set
437# CONFIG_SCSI_QLOGIC_FC is not set 478# CONFIG_SCSI_QLOGIC_FC is not set
438CONFIG_SCSI_QLOGIC_1280=y 479CONFIG_SCSI_QLOGIC_1280=y
439# CONFIG_SCSI_QLOGIC_1280_1040 is not set 480# CONFIG_SCSI_QLA_FC is not set
440CONFIG_SCSI_QLA2XXX=y
441CONFIG_SCSI_QLA21XX=m
442CONFIG_SCSI_QLA22XX=m
443CONFIG_SCSI_QLA2300=m
444CONFIG_SCSI_QLA2322=m
445# CONFIG_SCSI_QLA6312 is not set
446# CONFIG_SCSI_QLA24XX is not set
447# CONFIG_SCSI_LPFC is not set 481# CONFIG_SCSI_LPFC is not set
448# CONFIG_SCSI_DC395x is not set 482# CONFIG_SCSI_DC395x is not set
449# CONFIG_SCSI_DC390T is not set 483# CONFIG_SCSI_DC390T is not set
@@ -476,6 +510,7 @@ CONFIG_DM_MULTIPATH=m
476CONFIG_FUSION=y 510CONFIG_FUSION=y
477CONFIG_FUSION_SPI=y 511CONFIG_FUSION_SPI=y
478CONFIG_FUSION_FC=m 512CONFIG_FUSION_FC=m
513# CONFIG_FUSION_SAS is not set
479CONFIG_FUSION_MAX_SGE=128 514CONFIG_FUSION_MAX_SGE=128
480# CONFIG_FUSION_CTL is not set 515# CONFIG_FUSION_CTL is not set
481 516
@@ -497,6 +532,7 @@ CONFIG_DUMMY=m
497# CONFIG_BONDING is not set 532# CONFIG_BONDING is not set
498# CONFIG_EQUALIZER is not set 533# CONFIG_EQUALIZER is not set
499# CONFIG_TUN is not set 534# CONFIG_TUN is not set
535# CONFIG_NET_SB1000 is not set
500 536
501# 537#
502# ARCnet devices 538# ARCnet devices
@@ -515,6 +551,7 @@ CONFIG_NET_ETHERNET=y
515CONFIG_MII=m 551CONFIG_MII=m
516# CONFIG_HAPPYMEAL is not set 552# CONFIG_HAPPYMEAL is not set
517# CONFIG_SUNGEM is not set 553# CONFIG_SUNGEM is not set
554# CONFIG_CASSINI is not set
518# CONFIG_NET_VENDOR_3COM is not set 555# CONFIG_NET_VENDOR_3COM is not set
519 556
520# 557#
@@ -564,6 +601,7 @@ CONFIG_E1000=y
564# CONFIG_R8169 is not set 601# CONFIG_R8169 is not set
565# CONFIG_SIS190 is not set 602# CONFIG_SIS190 is not set
566# CONFIG_SKGE is not set 603# CONFIG_SKGE is not set
604# CONFIG_SKY2 is not set
567# CONFIG_SK98LIN is not set 605# CONFIG_SK98LIN is not set
568# CONFIG_VIA_VELOCITY is not set 606# CONFIG_VIA_VELOCITY is not set
569CONFIG_TIGON3=y 607CONFIG_TIGON3=y
@@ -668,12 +706,15 @@ CONFIG_VT=y
668CONFIG_VT_CONSOLE=y 706CONFIG_VT_CONSOLE=y
669CONFIG_HW_CONSOLE=y 707CONFIG_HW_CONSOLE=y
670CONFIG_SERIAL_NONSTANDARD=y 708CONFIG_SERIAL_NONSTANDARD=y
709# CONFIG_COMPUTONE is not set
671# CONFIG_ROCKETPORT is not set 710# CONFIG_ROCKETPORT is not set
672# CONFIG_CYCLADES is not set 711# CONFIG_CYCLADES is not set
673# CONFIG_DIGIEPCA is not set 712# CONFIG_DIGIEPCA is not set
713# CONFIG_MOXA_INTELLIO is not set
674# CONFIG_MOXA_SMARTIO is not set 714# CONFIG_MOXA_SMARTIO is not set
675# CONFIG_ISI is not set 715# CONFIG_ISI is not set
676# CONFIG_SYNCLINKMP is not set 716# CONFIG_SYNCLINKMP is not set
717# CONFIG_SYNCLINK_GT is not set
677# CONFIG_N_HDLC is not set 718# CONFIG_N_HDLC is not set
678# CONFIG_SPECIALIX is not set 719# CONFIG_SPECIALIX is not set
679# CONFIG_SX is not set 720# CONFIG_SX is not set
@@ -689,6 +730,7 @@ CONFIG_SERIAL_8250=y
689CONFIG_SERIAL_8250_CONSOLE=y 730CONFIG_SERIAL_8250_CONSOLE=y
690CONFIG_SERIAL_8250_ACPI=y 731CONFIG_SERIAL_8250_ACPI=y
691CONFIG_SERIAL_8250_NR_UARTS=6 732CONFIG_SERIAL_8250_NR_UARTS=6
733CONFIG_SERIAL_8250_RUNTIME_UARTS=4
692CONFIG_SERIAL_8250_EXTENDED=y 734CONFIG_SERIAL_8250_EXTENDED=y
693CONFIG_SERIAL_8250_SHARE_IRQ=y 735CONFIG_SERIAL_8250_SHARE_IRQ=y
694# CONFIG_SERIAL_8250_DETECT_IRQ is not set 736# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -738,10 +780,10 @@ CONFIG_DRM_SIS=m
738# CONFIG_DRM_VIA is not set 780# CONFIG_DRM_VIA is not set
739# CONFIG_DRM_SAVAGE is not set 781# CONFIG_DRM_SAVAGE is not set
740CONFIG_RAW_DRIVER=m 782CONFIG_RAW_DRIVER=m
783CONFIG_MAX_RAW_DEVS=256
741CONFIG_HPET=y 784CONFIG_HPET=y
742# CONFIG_HPET_RTC_IRQ is not set 785# CONFIG_HPET_RTC_IRQ is not set
743CONFIG_HPET_MMAP=y 786CONFIG_HPET_MMAP=y
744CONFIG_MAX_RAW_DEVS=256
745# CONFIG_HANGCHECK_TIMER is not set 787# CONFIG_HANGCHECK_TIMER is not set
746CONFIG_MMTIMER=y 788CONFIG_MMTIMER=y
747 789
@@ -749,6 +791,7 @@ CONFIG_MMTIMER=y
749# TPM devices 791# TPM devices
750# 792#
751# CONFIG_TCG_TPM is not set 793# CONFIG_TCG_TPM is not set
794# CONFIG_TELCLOCK is not set
752 795
753# 796#
754# I2C support 797# I2C support
@@ -756,6 +799,12 @@ CONFIG_MMTIMER=y
756# CONFIG_I2C is not set 799# CONFIG_I2C is not set
757 800
758# 801#
802# SPI support
803#
804# CONFIG_SPI is not set
805# CONFIG_SPI_MASTER is not set
806
807#
759# Dallas's 1-wire bus 808# Dallas's 1-wire bus
760# 809#
761# CONFIG_W1 is not set 810# CONFIG_W1 is not set
@@ -765,6 +814,7 @@ CONFIG_MMTIMER=y
765# 814#
766CONFIG_HWMON=y 815CONFIG_HWMON=y
767# CONFIG_HWMON_VID is not set 816# CONFIG_HWMON_VID is not set
817# CONFIG_SENSORS_F71805F is not set
768# CONFIG_HWMON_DEBUG_CHIP is not set 818# CONFIG_HWMON_DEBUG_CHIP is not set
769 819
770# 820#
@@ -815,26 +865,28 @@ CONFIG_SND_OSSEMUL=y
815CONFIG_SND_MIXER_OSS=m 865CONFIG_SND_MIXER_OSS=m
816CONFIG_SND_PCM_OSS=m 866CONFIG_SND_PCM_OSS=m
817CONFIG_SND_SEQUENCER_OSS=y 867CONFIG_SND_SEQUENCER_OSS=y
868# CONFIG_SND_DYNAMIC_MINORS is not set
869CONFIG_SND_SUPPORT_OLD_API=y
818CONFIG_SND_VERBOSE_PRINTK=y 870CONFIG_SND_VERBOSE_PRINTK=y
819# CONFIG_SND_DEBUG is not set 871# CONFIG_SND_DEBUG is not set
820CONFIG_SND_GENERIC_DRIVER=y
821 872
822# 873#
823# Generic devices 874# Generic devices
824# 875#
825CONFIG_SND_MPU401_UART=m 876CONFIG_SND_MPU401_UART=m
826CONFIG_SND_OPL3_LIB=m 877CONFIG_SND_OPL3_LIB=m
878CONFIG_SND_AC97_CODEC=m
879CONFIG_SND_AC97_BUS=m
827CONFIG_SND_DUMMY=m 880CONFIG_SND_DUMMY=m
828CONFIG_SND_VIRMIDI=m 881CONFIG_SND_VIRMIDI=m
829CONFIG_SND_MTPAV=m 882CONFIG_SND_MTPAV=m
830CONFIG_SND_SERIAL_U16550=m 883CONFIG_SND_SERIAL_U16550=m
831CONFIG_SND_MPU401=m 884CONFIG_SND_MPU401=m
832CONFIG_SND_AC97_CODEC=m
833CONFIG_SND_AC97_BUS=m
834 885
835# 886#
836# PCI devices 887# PCI devices
837# 888#
889# CONFIG_SND_AD1889 is not set
838# CONFIG_SND_ALI5451 is not set 890# CONFIG_SND_ALI5451 is not set
839# CONFIG_SND_ATIIXP is not set 891# CONFIG_SND_ATIIXP is not set
840# CONFIG_SND_ATIIXP_MODEM is not set 892# CONFIG_SND_ATIIXP_MODEM is not set
@@ -843,40 +895,40 @@ CONFIG_SND_AC97_BUS=m
843# CONFIG_SND_AU8830 is not set 895# CONFIG_SND_AU8830 is not set
844# CONFIG_SND_AZT3328 is not set 896# CONFIG_SND_AZT3328 is not set
845# CONFIG_SND_BT87X is not set 897# CONFIG_SND_BT87X is not set
898# CONFIG_SND_CA0106 is not set
899# CONFIG_SND_CMIPCI is not set
900CONFIG_SND_CS4281=m
846CONFIG_SND_CS46XX=m 901CONFIG_SND_CS46XX=m
847CONFIG_SND_CS46XX_NEW_DSP=y 902CONFIG_SND_CS46XX_NEW_DSP=y
848CONFIG_SND_CS4281=m
849CONFIG_SND_EMU10K1=m 903CONFIG_SND_EMU10K1=m
850# CONFIG_SND_EMU10K1X is not set 904# CONFIG_SND_EMU10K1X is not set
851# CONFIG_SND_CA0106 is not set
852# CONFIG_SND_KORG1212 is not set
853# CONFIG_SND_MIXART is not set
854# CONFIG_SND_NM256 is not set
855# CONFIG_SND_RME32 is not set
856# CONFIG_SND_RME96 is not set
857# CONFIG_SND_RME9652 is not set
858# CONFIG_SND_HDSP is not set
859# CONFIG_SND_HDSPM is not set
860# CONFIG_SND_TRIDENT is not set
861# CONFIG_SND_YMFPCI is not set
862# CONFIG_SND_AD1889 is not set
863# CONFIG_SND_CMIPCI is not set
864# CONFIG_SND_ENS1370 is not set 905# CONFIG_SND_ENS1370 is not set
865# CONFIG_SND_ENS1371 is not set 906# CONFIG_SND_ENS1371 is not set
866# CONFIG_SND_ES1938 is not set 907# CONFIG_SND_ES1938 is not set
867# CONFIG_SND_ES1968 is not set 908# CONFIG_SND_ES1968 is not set
868# CONFIG_SND_MAESTRO3 is not set
869CONFIG_SND_FM801=m 909CONFIG_SND_FM801=m
870# CONFIG_SND_FM801_TEA575X is not set 910# CONFIG_SND_FM801_TEA575X is not set
911# CONFIG_SND_HDA_INTEL is not set
912# CONFIG_SND_HDSP is not set
913# CONFIG_SND_HDSPM is not set
871# CONFIG_SND_ICE1712 is not set 914# CONFIG_SND_ICE1712 is not set
872# CONFIG_SND_ICE1724 is not set 915# CONFIG_SND_ICE1724 is not set
873# CONFIG_SND_INTEL8X0 is not set 916# CONFIG_SND_INTEL8X0 is not set
874# CONFIG_SND_INTEL8X0M is not set 917# CONFIG_SND_INTEL8X0M is not set
918# CONFIG_SND_KORG1212 is not set
919# CONFIG_SND_MAESTRO3 is not set
920# CONFIG_SND_MIXART is not set
921# CONFIG_SND_NM256 is not set
922# CONFIG_SND_PCXHR is not set
923# CONFIG_SND_RME32 is not set
924# CONFIG_SND_RME96 is not set
925# CONFIG_SND_RME9652 is not set
875# CONFIG_SND_SONICVIBES is not set 926# CONFIG_SND_SONICVIBES is not set
927# CONFIG_SND_TRIDENT is not set
876# CONFIG_SND_VIA82XX is not set 928# CONFIG_SND_VIA82XX is not set
877# CONFIG_SND_VIA82XX_MODEM is not set 929# CONFIG_SND_VIA82XX_MODEM is not set
878# CONFIG_SND_VX222 is not set 930# CONFIG_SND_VX222 is not set
879# CONFIG_SND_HDA_INTEL is not set 931# CONFIG_SND_YMFPCI is not set
880 932
881# 933#
882# USB devices 934# USB devices
@@ -922,12 +974,15 @@ CONFIG_USB_UHCI_HCD=m
922# USB Device Class drivers 974# USB Device Class drivers
923# 975#
924# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set 976# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
925# CONFIG_USB_BLUETOOTH_TTY is not set
926# CONFIG_USB_ACM is not set 977# CONFIG_USB_ACM is not set
927# CONFIG_USB_PRINTER is not set 978# CONFIG_USB_PRINTER is not set
928 979
929# 980#
930# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 981# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
982#
983
984#
985# may also be needed; see USB_STORAGE Help for more information
931# 986#
932CONFIG_USB_STORAGE=m 987CONFIG_USB_STORAGE=m
933# CONFIG_USB_STORAGE_DEBUG is not set 988# CONFIG_USB_STORAGE_DEBUG is not set
@@ -939,12 +994,15 @@ CONFIG_USB_STORAGE=m
939# CONFIG_USB_STORAGE_SDDR09 is not set 994# CONFIG_USB_STORAGE_SDDR09 is not set
940# CONFIG_USB_STORAGE_SDDR55 is not set 995# CONFIG_USB_STORAGE_SDDR55 is not set
941# CONFIG_USB_STORAGE_JUMPSHOT is not set 996# CONFIG_USB_STORAGE_JUMPSHOT is not set
997# CONFIG_USB_STORAGE_ALAUDA is not set
998# CONFIG_USB_LIBUSUAL is not set
942 999
943# 1000#
944# USB Input Devices 1001# USB Input Devices
945# 1002#
946CONFIG_USB_HID=m 1003CONFIG_USB_HID=m
947CONFIG_USB_HIDINPUT=y 1004CONFIG_USB_HIDINPUT=y
1005# CONFIG_USB_HIDINPUT_POWERBOOK is not set
948# CONFIG_HID_FF is not set 1006# CONFIG_HID_FF is not set
949# CONFIG_USB_HIDDEV is not set 1007# CONFIG_USB_HIDDEV is not set
950 1008
@@ -964,6 +1022,7 @@ CONFIG_USB_HIDINPUT=y
964# CONFIG_USB_YEALINK is not set 1022# CONFIG_USB_YEALINK is not set
965# CONFIG_USB_XPAD is not set 1023# CONFIG_USB_XPAD is not set
966# CONFIG_USB_ATI_REMOTE is not set 1024# CONFIG_USB_ATI_REMOTE is not set
1025# CONFIG_USB_ATI_REMOTE2 is not set
967# CONFIG_USB_KEYSPAN_REMOTE is not set 1026# CONFIG_USB_KEYSPAN_REMOTE is not set
968# CONFIG_USB_APPLETOUCH is not set 1027# CONFIG_USB_APPLETOUCH is not set
969 1028
@@ -1043,6 +1102,7 @@ CONFIG_INFINIBAND_MTHCA=m
1043# CONFIG_INFINIBAND_MTHCA_DEBUG is not set 1102# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
1044CONFIG_INFINIBAND_IPOIB=m 1103CONFIG_INFINIBAND_IPOIB=m
1045# CONFIG_INFINIBAND_IPOIB_DEBUG is not set 1104# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
1105# CONFIG_INFINIBAND_SRP is not set
1046 1106
1047# 1107#
1048# SN Devices 1108# SN Devices
@@ -1051,6 +1111,10 @@ CONFIG_SGI_IOC4=y
1051CONFIG_SGI_IOC3=y 1111CONFIG_SGI_IOC3=y
1052 1112
1053# 1113#
1114# EDAC - error detection and reporting (RAS)
1115#
1116
1117#
1054# File systems 1118# File systems
1055# 1119#
1056CONFIG_EXT2_FS=y 1120CONFIG_EXT2_FS=y
@@ -1079,6 +1143,7 @@ CONFIG_XFS_EXPORT=y
1079# CONFIG_XFS_SECURITY is not set 1143# CONFIG_XFS_SECURITY is not set
1080# CONFIG_XFS_POSIX_ACL is not set 1144# CONFIG_XFS_POSIX_ACL is not set
1081# CONFIG_XFS_RT is not set 1145# CONFIG_XFS_RT is not set
1146# CONFIG_OCFS2_FS is not set
1082# CONFIG_MINIX_FS is not set 1147# CONFIG_MINIX_FS is not set
1083# CONFIG_ROMFS_FS is not set 1148# CONFIG_ROMFS_FS is not set
1084CONFIG_INOTIFY=y 1149CONFIG_INOTIFY=y
@@ -1120,6 +1185,7 @@ CONFIG_HUGETLBFS=y
1120CONFIG_HUGETLB_PAGE=y 1185CONFIG_HUGETLB_PAGE=y
1121CONFIG_RAMFS=y 1186CONFIG_RAMFS=y
1122# CONFIG_RELAYFS_FS is not set 1187# CONFIG_RELAYFS_FS is not set
1188# CONFIG_CONFIGFS_FS is not set
1123 1189
1124# 1190#
1125# Miscellaneous filesystems 1191# Miscellaneous filesystems
@@ -1189,6 +1255,7 @@ CONFIG_MSDOS_PARTITION=y
1189CONFIG_SGI_PARTITION=y 1255CONFIG_SGI_PARTITION=y
1190# CONFIG_ULTRIX_PARTITION is not set 1256# CONFIG_ULTRIX_PARTITION is not set
1191# CONFIG_SUN_PARTITION is not set 1257# CONFIG_SUN_PARTITION is not set
1258# CONFIG_KARMA_PARTITION is not set
1192CONFIG_EFI_PARTITION=y 1259CONFIG_EFI_PARTITION=y
1193 1260
1194# 1261#
@@ -1254,26 +1321,30 @@ CONFIG_GENERIC_PENDING_IRQ=y
1254# CONFIG_HP_SIMSCSI is not set 1321# CONFIG_HP_SIMSCSI is not set
1255 1322
1256# 1323#
1257# Profiling support 1324# Instrumentation Support
1258# 1325#
1259# CONFIG_PROFILING is not set 1326# CONFIG_PROFILING is not set
1327# CONFIG_KPROBES is not set
1260 1328
1261# 1329#
1262# Kernel hacking 1330# Kernel hacking
1263# 1331#
1264# CONFIG_PRINTK_TIME is not set 1332# CONFIG_PRINTK_TIME is not set
1265CONFIG_DEBUG_KERNEL=y
1266CONFIG_MAGIC_SYSRQ=y 1333CONFIG_MAGIC_SYSRQ=y
1334CONFIG_DEBUG_KERNEL=y
1267CONFIG_LOG_BUF_SHIFT=20 1335CONFIG_LOG_BUF_SHIFT=20
1268CONFIG_DETECT_SOFTLOCKUP=y 1336CONFIG_DETECT_SOFTLOCKUP=y
1269# CONFIG_SCHEDSTATS is not set 1337# CONFIG_SCHEDSTATS is not set
1270# CONFIG_DEBUG_SLAB is not set 1338# CONFIG_DEBUG_SLAB is not set
1339CONFIG_DEBUG_MUTEXES=y
1271# CONFIG_DEBUG_SPINLOCK is not set 1340# CONFIG_DEBUG_SPINLOCK is not set
1272# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1341# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1273# CONFIG_DEBUG_KOBJECT is not set 1342# CONFIG_DEBUG_KOBJECT is not set
1274# CONFIG_DEBUG_INFO is not set 1343# CONFIG_DEBUG_INFO is not set
1275# CONFIG_DEBUG_FS is not set 1344# CONFIG_DEBUG_FS is not set
1276# CONFIG_KPROBES is not set 1345# CONFIG_DEBUG_VM is not set
1346CONFIG_FORCED_INLINING=y
1347# CONFIG_RCU_TORTURE_TEST is not set
1277CONFIG_IA64_GRANULE_16MB=y 1348CONFIG_IA64_GRANULE_16MB=y
1278# CONFIG_IA64_GRANULE_64MB is not set 1349# CONFIG_IA64_GRANULE_64MB is not set
1279# CONFIG_IA64_PRINT_HAZARDS is not set 1350# CONFIG_IA64_PRINT_HAZARDS is not set
diff --git a/arch/ia64/configs/sim_defconfig b/arch/ia64/configs/sim_defconfig
index a26781cfe8bf..d9146c31ea13 100644
--- a/arch/ia64/configs/sim_defconfig
+++ b/arch/ia64/configs/sim_defconfig
@@ -1,39 +1,52 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.16-rc5
4# Mon Feb 27 16:13:41 2006
3# 5#
4 6
5# 7#
6# Code maturity level options 8# Code maturity level options
7# 9#
8CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
9# CONFIG_CLEAN_COMPILE is not set 11CONFIG_LOCK_KERNEL=y
10# CONFIG_STANDALONE is not set 12CONFIG_INIT_ENV_ARG_LIMIT=32
11CONFIG_BROKEN=y
12CONFIG_BROKEN_ON_SMP=y
13 13
14# 14#
15# General setup 15# General setup
16# 16#
17CONFIG_LOCALVERSION=""
18CONFIG_LOCALVERSION_AUTO=y
17CONFIG_SWAP=y 19CONFIG_SWAP=y
18CONFIG_SYSVIPC=y 20CONFIG_SYSVIPC=y
19# CONFIG_POSIX_MQUEUE is not set 21# CONFIG_POSIX_MQUEUE is not set
20# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
21CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
22# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
23CONFIG_LOG_BUF_SHIFT=16
24# CONFIG_HOTPLUG is not set
25CONFIG_IKCONFIG=y 25CONFIG_IKCONFIG=y
26CONFIG_IKCONFIG_PROC=y 26CONFIG_IKCONFIG_PROC=y
27# CONFIG_CPUSETS is not set
28CONFIG_INITRAMFS_SOURCE=""
29# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
27# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
28CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
29# CONFIG_KALLSYMS_ALL is not set 32# CONFIG_KALLSYMS_ALL is not set
33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
35CONFIG_PRINTK=y
36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y
30CONFIG_FUTEX=y 39CONFIG_FUTEX=y
31CONFIG_EPOLL=y 40CONFIG_EPOLL=y
32CONFIG_IOSCHED_NOOP=y 41CONFIG_SHMEM=y
33CONFIG_IOSCHED_AS=y 42CONFIG_CC_ALIGN_FUNCTIONS=0
34CONFIG_IOSCHED_DEADLINE=y 43CONFIG_CC_ALIGN_LABELS=0
35CONFIG_IOSCHED_CFQ=y 44CONFIG_CC_ALIGN_LOOPS=0
36# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
47# CONFIG_TINY_SHMEM is not set
48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
37 50
38# 51#
39# Loadable module support 52# Loadable module support
@@ -43,21 +56,45 @@ CONFIG_MODULE_UNLOAD=y
43CONFIG_MODULE_FORCE_UNLOAD=y 56CONFIG_MODULE_FORCE_UNLOAD=y
44CONFIG_OBSOLETE_MODPARM=y 57CONFIG_OBSOLETE_MODPARM=y
45CONFIG_MODVERSIONS=y 58CONFIG_MODVERSIONS=y
59# CONFIG_MODULE_SRCVERSION_ALL is not set
46CONFIG_KMOD=y 60CONFIG_KMOD=y
47CONFIG_STOP_MACHINE=y 61CONFIG_STOP_MACHINE=y
48 62
49# 63#
64# Block layer
65#
66
67#
68# IO Schedulers
69#
70CONFIG_IOSCHED_NOOP=y
71CONFIG_IOSCHED_AS=y
72CONFIG_IOSCHED_DEADLINE=y
73CONFIG_IOSCHED_CFQ=y
74CONFIG_DEFAULT_AS=y
75# CONFIG_DEFAULT_DEADLINE is not set
76# CONFIG_DEFAULT_CFQ is not set
77# CONFIG_DEFAULT_NOOP is not set
78CONFIG_DEFAULT_IOSCHED="anticipatory"
79
80#
50# Processor type and features 81# Processor type and features
51# 82#
52CONFIG_IA64=y 83CONFIG_IA64=y
53CONFIG_64BIT=y 84CONFIG_64BIT=y
54CONFIG_MMU=y 85CONFIG_MMU=y
86CONFIG_SWIOTLB=y
55CONFIG_RWSEM_XCHGADD_ALGORITHM=y 87CONFIG_RWSEM_XCHGADD_ALGORITHM=y
88CONFIG_GENERIC_CALIBRATE_DELAY=y
56CONFIG_TIME_INTERPOLATION=y 89CONFIG_TIME_INTERPOLATION=y
57CONFIG_EFI=y 90CONFIG_EFI=y
91CONFIG_GENERIC_IOMAP=y
92CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
93CONFIG_DMA_IS_DMA32=y
58# CONFIG_IA64_GENERIC is not set 94# CONFIG_IA64_GENERIC is not set
59# CONFIG_IA64_DIG is not set 95# CONFIG_IA64_DIG is not set
60# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
97# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
61# CONFIG_IA64_SGI_SN2 is not set 98# CONFIG_IA64_SGI_SN2 is not set
62CONFIG_IA64_HP_SIM=y 99CONFIG_IA64_HP_SIM=y
63# CONFIG_ITANIUM is not set 100# CONFIG_ITANIUM is not set
@@ -66,17 +103,36 @@ CONFIG_MCKINLEY=y
66# CONFIG_IA64_PAGE_SIZE_8KB is not set 103# CONFIG_IA64_PAGE_SIZE_8KB is not set
67# CONFIG_IA64_PAGE_SIZE_16KB is not set 104# CONFIG_IA64_PAGE_SIZE_16KB is not set
68CONFIG_IA64_PAGE_SIZE_64KB=y 105CONFIG_IA64_PAGE_SIZE_64KB=y
106CONFIG_PGTABLE_3=y
107# CONFIG_PGTABLE_4 is not set
108# CONFIG_HZ_100 is not set
109CONFIG_HZ_250=y
110# CONFIG_HZ_1000 is not set
111CONFIG_HZ=250
69CONFIG_IA64_L1_CACHE_SHIFT=7 112CONFIG_IA64_L1_CACHE_SHIFT=7
70# CONFIG_MCKINLEY_ASTEP_SPECIFIC is not set
71# CONFIG_VIRTUAL_MEM_MAP is not set
72# CONFIG_IA64_CYCLONE is not set 113# CONFIG_IA64_CYCLONE is not set
73CONFIG_FORCE_MAX_ZONEORDER=18 114CONFIG_FORCE_MAX_ZONEORDER=17
74CONFIG_SMP=y 115CONFIG_SMP=y
75CONFIG_NR_CPUS=64 116CONFIG_NR_CPUS=64
117# CONFIG_HOTPLUG_CPU is not set
118# CONFIG_SCHED_SMT is not set
76CONFIG_PREEMPT=y 119CONFIG_PREEMPT=y
77CONFIG_HAVE_DEC_LOCK=y 120CONFIG_SELECT_MEMORY_MODEL=y
121CONFIG_FLATMEM_MANUAL=y
122# CONFIG_DISCONTIGMEM_MANUAL is not set
123# CONFIG_SPARSEMEM_MANUAL is not set
124CONFIG_FLATMEM=y
125CONFIG_FLAT_NODE_MEM_MAP=y
126# CONFIG_SPARSEMEM_STATIC is not set
127CONFIG_SPLIT_PTLOCK_CPUS=4
128CONFIG_ARCH_SELECT_MEMORY_MODEL=y
129CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
130CONFIG_ARCH_FLATMEM_ENABLE=y
131CONFIG_ARCH_SPARSEMEM_ENABLE=y
132# CONFIG_VIRTUAL_MEM_MAP is not set
78CONFIG_IA32_SUPPORT=y 133CONFIG_IA32_SUPPORT=y
79CONFIG_COMPAT=y 134CONFIG_COMPAT=y
135# CONFIG_IA64_MCA_RECOVERY is not set
80# CONFIG_PERFMON is not set 136# CONFIG_PERFMON is not set
81CONFIG_IA64_PALINFO=m 137CONFIG_IA64_PALINFO=m
82 138
@@ -84,7 +140,6 @@ CONFIG_IA64_PALINFO=m
84# Firmware Drivers 140# Firmware Drivers
85# 141#
86CONFIG_EFI_VARS=y 142CONFIG_EFI_VARS=y
87# CONFIG_SMBIOS is not set
88CONFIG_BINFMT_ELF=y 143CONFIG_BINFMT_ELF=y
89CONFIG_BINFMT_MISC=y 144CONFIG_BINFMT_MISC=y
90 145
@@ -93,15 +148,98 @@ CONFIG_BINFMT_MISC=y
93# 148#
94 149
95# 150#
151# Networking
152#
153CONFIG_NET=y
154
155#
156# Networking options
157#
158# CONFIG_NETDEBUG is not set
159CONFIG_PACKET=y
160# CONFIG_PACKET_MMAP is not set
161# CONFIG_UNIX is not set
162# CONFIG_NET_KEY is not set
163CONFIG_INET=y
164CONFIG_IP_MULTICAST=y
165# CONFIG_IP_ADVANCED_ROUTER is not set
166CONFIG_IP_FIB_HASH=y
167# CONFIG_IP_PNP is not set
168# CONFIG_NET_IPIP is not set
169# CONFIG_NET_IPGRE is not set
170# CONFIG_IP_MROUTE is not set
171# CONFIG_ARPD is not set
172# CONFIG_SYN_COOKIES is not set
173# CONFIG_INET_AH is not set
174# CONFIG_INET_ESP is not set
175# CONFIG_INET_IPCOMP is not set
176# CONFIG_INET_TUNNEL is not set
177CONFIG_INET_DIAG=y
178CONFIG_INET_TCP_DIAG=y
179# CONFIG_TCP_CONG_ADVANCED is not set
180CONFIG_TCP_CONG_BIC=y
181# CONFIG_IPV6 is not set
182# CONFIG_NETFILTER is not set
183
184#
185# DCCP Configuration (EXPERIMENTAL)
186#
187# CONFIG_IP_DCCP is not set
188
189#
190# SCTP Configuration (EXPERIMENTAL)
191#
192# CONFIG_IP_SCTP is not set
193
194#
195# TIPC Configuration (EXPERIMENTAL)
196#
197# CONFIG_TIPC is not set
198# CONFIG_ATM is not set
199# CONFIG_BRIDGE is not set
200# CONFIG_VLAN_8021Q is not set
201# CONFIG_DECNET is not set
202# CONFIG_LLC2 is not set
203# CONFIG_IPX is not set
204# CONFIG_ATALK is not set
205# CONFIG_X25 is not set
206# CONFIG_LAPB is not set
207# CONFIG_NET_DIVERT is not set
208# CONFIG_ECONET is not set
209# CONFIG_WAN_ROUTER is not set
210
211#
212# QoS and/or fair queueing
213#
214# CONFIG_NET_SCHED is not set
215
216#
217# Network testing
218#
219# CONFIG_NET_PKTGEN is not set
220# CONFIG_HAMRADIO is not set
221# CONFIG_IRDA is not set
222# CONFIG_BT is not set
223# CONFIG_IEEE80211 is not set
224
225#
96# Device Drivers 226# Device Drivers
97# 227#
98 228
99# 229#
100# Generic Driver Options 230# Generic Driver Options
101# 231#
232# CONFIG_STANDALONE is not set
233CONFIG_PREVENT_FIRMWARE_BUILD=y
234# CONFIG_FW_LOADER is not set
102# CONFIG_DEBUG_DRIVER is not set 235# CONFIG_DEBUG_DRIVER is not set
103 236
104# 237#
238# Connector - unified userspace <-> kernelspace linker
239#
240# CONFIG_CONNECTOR is not set
241
242#
105# Memory Technology Devices (MTD) 243# Memory Technology Devices (MTD)
106# 244#
107# CONFIG_MTD is not set 245# CONFIG_MTD is not set
@@ -118,12 +256,16 @@ CONFIG_BINFMT_MISC=y
118# 256#
119# Block devices 257# Block devices
120# 258#
259# CONFIG_BLK_DEV_COW_COMMON is not set
121CONFIG_BLK_DEV_LOOP=y 260CONFIG_BLK_DEV_LOOP=y
122# CONFIG_BLK_DEV_CRYPTOLOOP is not set 261# CONFIG_BLK_DEV_CRYPTOLOOP is not set
123# CONFIG_BLK_DEV_NBD is not set 262# CONFIG_BLK_DEV_NBD is not set
124CONFIG_BLK_DEV_RAM=y 263CONFIG_BLK_DEV_RAM=y
264CONFIG_BLK_DEV_RAM_COUNT=16
125CONFIG_BLK_DEV_RAM_SIZE=4096 265CONFIG_BLK_DEV_RAM_SIZE=4096
126# CONFIG_BLK_DEV_INITRD is not set 266# CONFIG_BLK_DEV_INITRD is not set
267# CONFIG_CDROM_PKTCDVD is not set
268# CONFIG_ATA_OVER_ETH is not set
127 269
128# 270#
129# ATA/ATAPI/MFM/RLL support 271# ATA/ATAPI/MFM/RLL support
@@ -133,6 +275,7 @@ CONFIG_BLK_DEV_RAM_SIZE=4096
133# 275#
134# SCSI device support 276# SCSI device support
135# 277#
278# CONFIG_RAID_ATTRS is not set
136CONFIG_SCSI=y 279CONFIG_SCSI=y
137CONFIG_SCSI_PROC_FS=y 280CONFIG_SCSI_PROC_FS=y
138 281
@@ -144,6 +287,7 @@ CONFIG_BLK_DEV_SD=y
144# CONFIG_CHR_DEV_OSST is not set 287# CONFIG_CHR_DEV_OSST is not set
145# CONFIG_BLK_DEV_SR is not set 288# CONFIG_BLK_DEV_SR is not set
146# CONFIG_CHR_DEV_SG is not set 289# CONFIG_CHR_DEV_SG is not set
290# CONFIG_CHR_DEV_SCH is not set
147 291
148# 292#
149# Some SCSI devices (e.g. CD jukebox) support multiple LUNs 293# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
@@ -157,13 +301,14 @@ CONFIG_SCSI_LOGGING=y
157# 301#
158CONFIG_SCSI_SPI_ATTRS=y 302CONFIG_SCSI_SPI_ATTRS=y
159# CONFIG_SCSI_FC_ATTRS is not set 303# CONFIG_SCSI_FC_ATTRS is not set
304# CONFIG_SCSI_ISCSI_ATTRS is not set
305# CONFIG_SCSI_SAS_ATTRS is not set
160 306
161# 307#
162# SCSI low-level drivers 308# SCSI low-level drivers
163# 309#
164# CONFIG_SCSI_AIC7XXX_OLD is not set 310# CONFIG_ISCSI_TCP is not set
165# CONFIG_SCSI_SATA is not set 311# CONFIG_SCSI_SATA is not set
166# CONFIG_SCSI_EATA_PIO is not set
167# CONFIG_SCSI_DEBUG is not set 312# CONFIG_SCSI_DEBUG is not set
168 313
169# 314#
@@ -174,77 +319,47 @@ CONFIG_SCSI_SPI_ATTRS=y
174# 319#
175# Fusion MPT device support 320# Fusion MPT device support
176# 321#
322# CONFIG_FUSION is not set
177 323
178# 324#
179# IEEE 1394 (FireWire) support 325# IEEE 1394 (FireWire) support
180# 326#
181# CONFIG_IEEE1394 is not set
182 327
183# 328#
184# I2O device support 329# I2O device support
185# 330#
186 331
187# 332#
188# Networking support 333# Network device support
189# 334#
190CONFIG_NET=y 335# CONFIG_NETDEVICES is not set
336# CONFIG_DUMMY is not set
337# CONFIG_BONDING is not set
338# CONFIG_EQUALIZER is not set
339# CONFIG_TUN is not set
191 340
192# 341#
193# Networking options 342# PHY device support
194# 343#
195CONFIG_PACKET=y
196# CONFIG_PACKET_MMAP is not set
197# CONFIG_NETLINK_DEV is not set
198# CONFIG_UNIX is not set
199# CONFIG_NET_KEY is not set
200CONFIG_INET=y
201CONFIG_IP_MULTICAST=y
202# CONFIG_IP_ADVANCED_ROUTER is not set
203# CONFIG_IP_PNP is not set
204# CONFIG_NET_IPIP is not set
205# CONFIG_NET_IPGRE is not set
206# CONFIG_IP_MROUTE is not set
207# CONFIG_ARPD is not set
208# CONFIG_SYN_COOKIES is not set
209# CONFIG_INET_AH is not set
210# CONFIG_INET_ESP is not set
211# CONFIG_INET_IPCOMP is not set
212# CONFIG_IPV6 is not set
213# CONFIG_NETFILTER is not set
214 344
215# 345#
216# SCTP Configuration (EXPERIMENTAL) 346# Ethernet (10 or 100Mbit)
217# 347#
218# CONFIG_IP_SCTP is not set 348# CONFIG_NET_ETHERNET is not set
219# CONFIG_ATM is not set
220# CONFIG_BRIDGE is not set
221# CONFIG_VLAN_8021Q is not set
222# CONFIG_DECNET is not set
223# CONFIG_LLC2 is not set
224# CONFIG_IPX is not set
225# CONFIG_ATALK is not set
226# CONFIG_X25 is not set
227# CONFIG_LAPB is not set
228# CONFIG_NET_DIVERT is not set
229# CONFIG_ECONET is not set
230# CONFIG_WAN_ROUTER is not set
231# CONFIG_NET_HW_FLOWCONTROL is not set
232 349
233# 350#
234# QoS and/or fair queueing 351# Ethernet (1000 Mbit)
235# 352#
236# CONFIG_NET_SCHED is not set
237 353
238# 354#
239# Network testing 355# Ethernet (10000 Mbit)
240# 356#
241# CONFIG_NET_PKTGEN is not set 357# CONFIG_PPP is not set
358# CONFIG_SLIP is not set
359# CONFIG_SHAPER is not set
360# CONFIG_NETCONSOLE is not set
242# CONFIG_NETPOLL is not set 361# CONFIG_NETPOLL is not set
243# CONFIG_NET_POLL_CONTROLLER is not set 362# CONFIG_NET_POLL_CONTROLLER is not set
244# CONFIG_HAMRADIO is not set
245# CONFIG_IRDA is not set
246# CONFIG_BT is not set
247# CONFIG_NETDEVICES is not set
248 363
249# 364#
250# ISDN subsystem 365# ISDN subsystem
@@ -274,16 +389,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
274# CONFIG_INPUT_EVBUG is not set 389# CONFIG_INPUT_EVBUG is not set
275 390
276# 391#
277# Input I/O drivers
278#
279# CONFIG_GAMEPORT is not set
280CONFIG_SOUND_GAMEPORT=y
281CONFIG_SERIO=y
282# CONFIG_SERIO_I8042 is not set
283CONFIG_SERIO_SERPORT=y
284# CONFIG_SERIO_CT82C710 is not set
285
286#
287# Input Device Drivers 392# Input Device Drivers
288# 393#
289# CONFIG_INPUT_KEYBOARD is not set 394# CONFIG_INPUT_KEYBOARD is not set
@@ -293,6 +398,15 @@ CONFIG_SERIO_SERPORT=y
293# CONFIG_INPUT_MISC is not set 398# CONFIG_INPUT_MISC is not set
294 399
295# 400#
401# Hardware I/O ports
402#
403CONFIG_SERIO=y
404# CONFIG_SERIO_I8042 is not set
405CONFIG_SERIO_SERPORT=y
406# CONFIG_SERIO_RAW is not set
407# CONFIG_GAMEPORT is not set
408
409#
296# Character devices 410# Character devices
297# 411#
298CONFIG_VT=y 412CONFIG_VT=y
@@ -310,7 +424,6 @@ CONFIG_HW_CONSOLE=y
310# 424#
311CONFIG_UNIX98_PTYS=y 425CONFIG_UNIX98_PTYS=y
312# CONFIG_LEGACY_PTYS is not set 426# CONFIG_LEGACY_PTYS is not set
313# CONFIG_QIC02_TAPE is not set
314 427
315# 428#
316# IPMI 429# IPMI
@@ -324,15 +437,19 @@ CONFIG_UNIX98_PTYS=y
324CONFIG_EFI_RTC=y 437CONFIG_EFI_RTC=y
325# CONFIG_DTLK is not set 438# CONFIG_DTLK is not set
326# CONFIG_R3964 is not set 439# CONFIG_R3964 is not set
327# CONFIG_APPLICOM is not set
328 440
329# 441#
330# Ftape, the floppy tape device driver 442# Ftape, the floppy tape device driver
331# 443#
332# CONFIG_FTAPE is not set
333# CONFIG_AGP is not set 444# CONFIG_AGP is not set
334# CONFIG_DRM is not set
335# CONFIG_RAW_DRIVER is not set 445# CONFIG_RAW_DRIVER is not set
446# CONFIG_HANGCHECK_TIMER is not set
447
448#
449# TPM devices
450#
451# CONFIG_TCG_TPM is not set
452# CONFIG_TELCLOCK is not set
336 453
337# 454#
338# I2C support 455# I2C support
@@ -340,10 +457,33 @@ CONFIG_EFI_RTC=y
340# CONFIG_I2C is not set 457# CONFIG_I2C is not set
341 458
342# 459#
460# SPI support
461#
462# CONFIG_SPI is not set
463# CONFIG_SPI_MASTER is not set
464
465#
466# Dallas's 1-wire bus
467#
468# CONFIG_W1 is not set
469
470#
471# Hardware Monitoring support
472#
473CONFIG_HWMON=y
474# CONFIG_HWMON_VID is not set
475# CONFIG_SENSORS_F71805F is not set
476# CONFIG_HWMON_DEBUG_CHIP is not set
477
478#
343# Misc devices 479# Misc devices
344# 480#
345 481
346# 482#
483# Multimedia Capabilities Port drivers
484#
485
486#
347# Multimedia devices 487# Multimedia devices
348# 488#
349# CONFIG_VIDEO_DEV is not set 489# CONFIG_VIDEO_DEV is not set
@@ -362,7 +502,6 @@ CONFIG_EFI_RTC=y
362# Console display driver support 502# Console display driver support
363# 503#
364# CONFIG_VGA_CONSOLE is not set 504# CONFIG_VGA_CONSOLE is not set
365# CONFIG_MDA_CONSOLE is not set
366CONFIG_DUMMY_CONSOLE=y 505CONFIG_DUMMY_CONSOLE=y
367 506
368# 507#
@@ -373,6 +512,12 @@ CONFIG_DUMMY_CONSOLE=y
373# 512#
374# USB support 513# USB support
375# 514#
515# CONFIG_USB_ARCH_HAS_HCD is not set
516# CONFIG_USB_ARCH_HAS_OHCI is not set
517
518#
519# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
520#
376 521
377# 522#
378# USB Gadget Support 523# USB Gadget Support
@@ -380,22 +525,41 @@ CONFIG_DUMMY_CONSOLE=y
380# CONFIG_USB_GADGET is not set 525# CONFIG_USB_GADGET is not set
381 526
382# 527#
528# MMC/SD Card support
529#
530# CONFIG_MMC is not set
531
532#
533# InfiniBand support
534#
535
536#
537# EDAC - error detection and reporting (RAS)
538#
539
540#
383# File systems 541# File systems
384# 542#
385CONFIG_EXT2_FS=y 543CONFIG_EXT2_FS=y
386# CONFIG_EXT2_FS_XATTR is not set 544# CONFIG_EXT2_FS_XATTR is not set
545# CONFIG_EXT2_FS_XIP is not set
387CONFIG_EXT3_FS=y 546CONFIG_EXT3_FS=y
388# CONFIG_EXT3_FS_XATTR is not set 547# CONFIG_EXT3_FS_XATTR is not set
389CONFIG_JBD=y 548CONFIG_JBD=y
390# CONFIG_JBD_DEBUG is not set 549# CONFIG_JBD_DEBUG is not set
391# CONFIG_REISERFS_FS is not set 550# CONFIG_REISERFS_FS is not set
392# CONFIG_JFS_FS is not set 551# CONFIG_JFS_FS is not set
552# CONFIG_FS_POSIX_ACL is not set
393# CONFIG_XFS_FS is not set 553# CONFIG_XFS_FS is not set
554# CONFIG_OCFS2_FS is not set
394# CONFIG_MINIX_FS is not set 555# CONFIG_MINIX_FS is not set
395# CONFIG_ROMFS_FS is not set 556# CONFIG_ROMFS_FS is not set
557CONFIG_INOTIFY=y
396# CONFIG_QUOTA is not set 558# CONFIG_QUOTA is not set
559CONFIG_DNOTIFY=y
397# CONFIG_AUTOFS_FS is not set 560# CONFIG_AUTOFS_FS is not set
398# CONFIG_AUTOFS4_FS is not set 561# CONFIG_AUTOFS4_FS is not set
562# CONFIG_FUSE_FS is not set
399 563
400# 564#
401# CD-ROM/DVD Filesystems 565# CD-ROM/DVD Filesystems
@@ -406,7 +570,8 @@ CONFIG_JBD=y
406# 570#
407# DOS/FAT/NT Filesystems 571# DOS/FAT/NT Filesystems
408# 572#
409# CONFIG_FAT_FS is not set 573# CONFIG_MSDOS_FS is not set
574# CONFIG_VFAT_FS is not set
410# CONFIG_NTFS_FS is not set 575# CONFIG_NTFS_FS is not set
411 576
412# 577#
@@ -415,12 +580,12 @@ CONFIG_JBD=y
415CONFIG_PROC_FS=y 580CONFIG_PROC_FS=y
416CONFIG_PROC_KCORE=y 581CONFIG_PROC_KCORE=y
417CONFIG_SYSFS=y 582CONFIG_SYSFS=y
418# CONFIG_DEVFS_FS is not set
419# CONFIG_DEVPTS_FS_XATTR is not set
420# CONFIG_TMPFS is not set 583# CONFIG_TMPFS is not set
421CONFIG_HUGETLBFS=y 584CONFIG_HUGETLBFS=y
422CONFIG_HUGETLB_PAGE=y 585CONFIG_HUGETLB_PAGE=y
423CONFIG_RAMFS=y 586CONFIG_RAMFS=y
587# CONFIG_RELAYFS_FS is not set
588# CONFIG_CONFIGFS_FS is not set
424 589
425# 590#
426# Miscellaneous filesystems 591# Miscellaneous filesystems
@@ -448,18 +613,22 @@ CONFIG_NFS_FS=y
448CONFIG_NFS_DIRECTIO=y 613CONFIG_NFS_DIRECTIO=y
449CONFIG_NFSD=y 614CONFIG_NFSD=y
450CONFIG_NFSD_V3=y 615CONFIG_NFSD_V3=y
616# CONFIG_NFSD_V3_ACL is not set
451# CONFIG_NFSD_V4 is not set 617# CONFIG_NFSD_V4 is not set
452# CONFIG_NFSD_TCP is not set 618# CONFIG_NFSD_TCP is not set
453CONFIG_LOCKD=y 619CONFIG_LOCKD=y
454CONFIG_LOCKD_V4=y 620CONFIG_LOCKD_V4=y
455CONFIG_EXPORTFS=y 621CONFIG_EXPORTFS=y
622CONFIG_NFS_COMMON=y
456CONFIG_SUNRPC=y 623CONFIG_SUNRPC=y
457# CONFIG_RPCSEC_GSS_KRB5 is not set 624# CONFIG_RPCSEC_GSS_KRB5 is not set
625# CONFIG_RPCSEC_GSS_SPKM3 is not set
458# CONFIG_SMB_FS is not set 626# CONFIG_SMB_FS is not set
459# CONFIG_CIFS is not set 627# CONFIG_CIFS is not set
460# CONFIG_NCP_FS is not set 628# CONFIG_NCP_FS is not set
461# CONFIG_CODA_FS is not set 629# CONFIG_CODA_FS is not set
462# CONFIG_AFS_FS is not set 630# CONFIG_AFS_FS is not set
631# CONFIG_9P_FS is not set
463 632
464# 633#
465# Partition Types 634# Partition Types
@@ -476,10 +645,10 @@ CONFIG_MSDOS_PARTITION=y
476# CONFIG_SOLARIS_X86_PARTITION is not set 645# CONFIG_SOLARIS_X86_PARTITION is not set
477# CONFIG_UNIXWARE_DISKLABEL is not set 646# CONFIG_UNIXWARE_DISKLABEL is not set
478# CONFIG_LDM_PARTITION is not set 647# CONFIG_LDM_PARTITION is not set
479# CONFIG_NEC98_PARTITION is not set
480# CONFIG_SGI_PARTITION is not set 648# CONFIG_SGI_PARTITION is not set
481# CONFIG_ULTRIX_PARTITION is not set 649# CONFIG_ULTRIX_PARTITION is not set
482# CONFIG_SUN_PARTITION is not set 650# CONFIG_SUN_PARTITION is not set
651# CONFIG_KARMA_PARTITION is not set
483CONFIG_EFI_PARTITION=y 652CONFIG_EFI_PARTITION=y
484 653
485# 654#
@@ -490,8 +659,13 @@ CONFIG_EFI_PARTITION=y
490# 659#
491# Library routines 660# Library routines
492# 661#
662# CONFIG_CRC_CCITT is not set
663# CONFIG_CRC16 is not set
493CONFIG_CRC32=y 664CONFIG_CRC32=y
494# CONFIG_LIBCRC32C is not set 665# CONFIG_LIBCRC32C is not set
666CONFIG_GENERIC_HARDIRQS=y
667CONFIG_GENERIC_IRQ_PROBE=y
668CONFIG_GENERIC_PENDING_IRQ=y
495 669
496# 670#
497# HP Simulator drivers 671# HP Simulator drivers
@@ -502,33 +676,50 @@ CONFIG_HP_SIMSERIAL_CONSOLE=y
502CONFIG_HP_SIMSCSI=y 676CONFIG_HP_SIMSCSI=y
503 677
504# 678#
505# Profiling support 679# Instrumentation Support
506# 680#
507# CONFIG_PROFILING is not set 681# CONFIG_PROFILING is not set
682# CONFIG_KPROBES is not set
508 683
509# 684#
510# Kernel hacking 685# Kernel hacking
511# 686#
512# CONFIG_IA64_GRANULE_16MB is not set 687# CONFIG_PRINTK_TIME is not set
513CONFIG_IA64_GRANULE_64MB=y
514CONFIG_DEBUG_KERNEL=y
515# CONFIG_IA64_PRINT_HAZARDS is not set
516# CONFIG_DISABLE_VHPT is not set
517# CONFIG_MAGIC_SYSRQ is not set 688# CONFIG_MAGIC_SYSRQ is not set
689CONFIG_DEBUG_KERNEL=y
690CONFIG_LOG_BUF_SHIFT=16
691CONFIG_DETECT_SOFTLOCKUP=y
692# CONFIG_SCHEDSTATS is not set
518# CONFIG_DEBUG_SLAB is not set 693# CONFIG_DEBUG_SLAB is not set
694CONFIG_DEBUG_PREEMPT=y
695CONFIG_DEBUG_MUTEXES=y
519# CONFIG_DEBUG_SPINLOCK is not set 696# CONFIG_DEBUG_SPINLOCK is not set
520# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 697# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
698# CONFIG_DEBUG_KOBJECT is not set
699CONFIG_DEBUG_INFO=y
700# CONFIG_DEBUG_FS is not set
701# CONFIG_DEBUG_VM is not set
702CONFIG_FORCED_INLINING=y
703# CONFIG_RCU_TORTURE_TEST is not set
704# CONFIG_IA64_GRANULE_16MB is not set
705CONFIG_IA64_GRANULE_64MB=y
706# CONFIG_IA64_PRINT_HAZARDS is not set
707# CONFIG_DISABLE_VHPT is not set
521# CONFIG_IA64_DEBUG_CMPXCHG is not set 708# CONFIG_IA64_DEBUG_CMPXCHG is not set
522# CONFIG_IA64_DEBUG_IRQ is not set 709# CONFIG_IA64_DEBUG_IRQ is not set
523CONFIG_DEBUG_INFO=y
524CONFIG_SYSVIPC_COMPAT=y 710CONFIG_SYSVIPC_COMPAT=y
525 711
526# 712#
527# Security options 713# Security options
528# 714#
715# CONFIG_KEYS is not set
529# CONFIG_SECURITY is not set 716# CONFIG_SECURITY is not set
530 717
531# 718#
532# Cryptographic options 719# Cryptographic options
533# 720#
534# CONFIG_CRYPTO is not set 721# CONFIG_CRYPTO is not set
722
723#
724# Hardware crypto devices
725#
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig
index 3cb503b659e6..8206752161bb 100644
--- a/arch/ia64/configs/sn2_defconfig
+++ b/arch/ia64/configs/sn2_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc4 3# Linux kernel version: 2.6.16-rc5
4# Fri Dec 2 10:33:48 2005 4# Mon Feb 27 16:06:38 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,17 +22,18 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28# CONFIG_IKCONFIG is not set 25# CONFIG_IKCONFIG is not set
29CONFIG_CPUSETS=y 26CONFIG_CPUSETS=y
30CONFIG_INITRAMFS_SOURCE="" 27CONFIG_INITRAMFS_SOURCE=""
28CONFIG_CC_OPTIMIZE_FOR_SIZE=y
31# CONFIG_EMBEDDED is not set 29# CONFIG_EMBEDDED is not set
32CONFIG_KALLSYMS=y 30CONFIG_KALLSYMS=y
33CONFIG_KALLSYMS_ALL=y 31CONFIG_KALLSYMS_ALL=y
34# CONFIG_KALLSYMS_EXTRA_PASS is not set 32# CONFIG_KALLSYMS_EXTRA_PASS is not set
33CONFIG_HOTPLUG=y
35CONFIG_PRINTK=y 34CONFIG_PRINTK=y
36CONFIG_BUG=y 35CONFIG_BUG=y
36CONFIG_ELF_CORE=y
37CONFIG_BASE_FULL=y 37CONFIG_BASE_FULL=y
38CONFIG_FUTEX=y 38CONFIG_FUTEX=y
39CONFIG_EPOLL=y 39CONFIG_EPOLL=y
@@ -42,8 +42,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
42CONFIG_CC_ALIGN_LABELS=0 42CONFIG_CC_ALIGN_LABELS=0
43CONFIG_CC_ALIGN_LOOPS=0 43CONFIG_CC_ALIGN_LOOPS=0
44CONFIG_CC_ALIGN_JUMPS=0 44CONFIG_CC_ALIGN_JUMPS=0
45CONFIG_SLAB=y
45# CONFIG_TINY_SHMEM is not set 46# CONFIG_TINY_SHMEM is not set
46CONFIG_BASE_SMALL=0 47CONFIG_BASE_SMALL=0
48# CONFIG_SLOB is not set
47 49
48# 50#
49# Loadable module support 51# Loadable module support
@@ -88,7 +90,7 @@ CONFIG_EFI=y
88CONFIG_GENERIC_IOMAP=y 90CONFIG_GENERIC_IOMAP=y
89CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 91CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
90CONFIG_IA64_UNCACHED_ALLOCATOR=y 92CONFIG_IA64_UNCACHED_ALLOCATOR=y
91CONFIG_ZONE_DMA_IS_DMA32=y 93CONFIG_DMA_IS_DMA32=y
92# CONFIG_IA64_GENERIC is not set 94# CONFIG_IA64_GENERIC is not set
93# CONFIG_IA64_DIG is not set 95# CONFIG_IA64_DIG is not set
94# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
@@ -126,6 +128,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
126CONFIG_NEED_MULTIPLE_NODES=y 128CONFIG_NEED_MULTIPLE_NODES=y
127# CONFIG_SPARSEMEM_STATIC is not set 129# CONFIG_SPARSEMEM_STATIC is not set
128CONFIG_SPLIT_PTLOCK_CPUS=4 130CONFIG_SPLIT_PTLOCK_CPUS=4
131CONFIG_MIGRATION=y
129CONFIG_ARCH_SELECT_MEMORY_MODEL=y 132CONFIG_ARCH_SELECT_MEMORY_MODEL=y
130CONFIG_ARCH_DISCONTIGMEM_ENABLE=y 133CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
131CONFIG_ARCH_FLATMEM_ENABLE=y 134CONFIG_ARCH_FLATMEM_ENABLE=y
@@ -140,6 +143,7 @@ CONFIG_COMPAT=y
140CONFIG_IA64_MCA_RECOVERY=y 143CONFIG_IA64_MCA_RECOVERY=y
141CONFIG_PERFMON=y 144CONFIG_PERFMON=y
142CONFIG_IA64_PALINFO=y 145CONFIG_IA64_PALINFO=y
146CONFIG_SGI_SN=y
143 147
144# 148#
145# Firmware Drivers 149# Firmware Drivers
@@ -166,6 +170,7 @@ CONFIG_ACPI=y
166CONFIG_ACPI_NUMA=y 170CONFIG_ACPI_NUMA=y
167CONFIG_ACPI_BLACKLIST_YEAR=0 171CONFIG_ACPI_BLACKLIST_YEAR=0
168# CONFIG_ACPI_DEBUG is not set 172# CONFIG_ACPI_DEBUG is not set
173CONFIG_ACPI_EC=y
169CONFIG_ACPI_POWER=y 174CONFIG_ACPI_POWER=y
170CONFIG_ACPI_SYSTEM=y 175CONFIG_ACPI_SYSTEM=y
171# CONFIG_ACPI_CONTAINER is not set 176# CONFIG_ACPI_CONTAINER is not set
@@ -207,6 +212,7 @@ CONFIG_NET=y
207# 212#
208# Networking options 213# Networking options
209# 214#
215# CONFIG_NETDEBUG is not set
210CONFIG_PACKET=y 216CONFIG_PACKET=y
211CONFIG_PACKET_MMAP=y 217CONFIG_PACKET_MMAP=y
212CONFIG_UNIX=y 218CONFIG_UNIX=y
@@ -247,6 +253,11 @@ CONFIG_IPV6=m
247# SCTP Configuration (EXPERIMENTAL) 253# SCTP Configuration (EXPERIMENTAL)
248# 254#
249# CONFIG_IP_SCTP is not set 255# CONFIG_IP_SCTP is not set
256
257#
258# TIPC Configuration (EXPERIMENTAL)
259#
260# CONFIG_TIPC is not set
250# CONFIG_ATM is not set 261# CONFIG_ATM is not set
251# CONFIG_BRIDGE is not set 262# CONFIG_BRIDGE is not set
252# CONFIG_VLAN_8021Q is not set 263# CONFIG_VLAN_8021Q is not set
@@ -330,6 +341,7 @@ CONFIG_ATA_OVER_ETH=m
330# ATA/ATAPI/MFM/RLL support 341# ATA/ATAPI/MFM/RLL support
331# 342#
332CONFIG_IDE=y 343CONFIG_IDE=y
344CONFIG_IDE_MAX_HWIFS=4
333CONFIG_BLK_DEV_IDE=y 345CONFIG_BLK_DEV_IDE=y
334 346
335# 347#
@@ -457,13 +469,7 @@ CONFIG_SCSI_SATA_VITESSE=y
457# CONFIG_SCSI_IPR is not set 469# CONFIG_SCSI_IPR is not set
458# CONFIG_SCSI_QLOGIC_FC is not set 470# CONFIG_SCSI_QLOGIC_FC is not set
459CONFIG_SCSI_QLOGIC_1280=y 471CONFIG_SCSI_QLOGIC_1280=y
460CONFIG_SCSI_QLA2XXX=y 472# CONFIG_SCSI_QLA_FC is not set
461# CONFIG_SCSI_QLA21XX is not set
462CONFIG_SCSI_QLA22XX=y
463CONFIG_SCSI_QLA2300=y
464CONFIG_SCSI_QLA2322=y
465# CONFIG_SCSI_QLA6312 is not set
466# CONFIG_SCSI_QLA24XX is not set
467# CONFIG_SCSI_LPFC is not set 473# CONFIG_SCSI_LPFC is not set
468# CONFIG_SCSI_DC395x is not set 474# CONFIG_SCSI_DC395x is not set
469# CONFIG_SCSI_DC390T is not set 475# CONFIG_SCSI_DC390T is not set
@@ -545,6 +551,7 @@ CONFIG_NETDEVICES=y
545# CONFIG_R8169 is not set 551# CONFIG_R8169 is not set
546# CONFIG_SIS190 is not set 552# CONFIG_SIS190 is not set
547# CONFIG_SKGE is not set 553# CONFIG_SKGE is not set
554# CONFIG_SKY2 is not set
548# CONFIG_SK98LIN is not set 555# CONFIG_SK98LIN is not set
549CONFIG_TIGON3=y 556CONFIG_TIGON3=y
550# CONFIG_BNX2 is not set 557# CONFIG_BNX2 is not set
@@ -632,12 +639,15 @@ CONFIG_VT=y
632CONFIG_VT_CONSOLE=y 639CONFIG_VT_CONSOLE=y
633CONFIG_HW_CONSOLE=y 640CONFIG_HW_CONSOLE=y
634CONFIG_SERIAL_NONSTANDARD=y 641CONFIG_SERIAL_NONSTANDARD=y
642# CONFIG_COMPUTONE is not set
635# CONFIG_ROCKETPORT is not set 643# CONFIG_ROCKETPORT is not set
636# CONFIG_CYCLADES is not set 644# CONFIG_CYCLADES is not set
637# CONFIG_DIGIEPCA is not set 645# CONFIG_DIGIEPCA is not set
646# CONFIG_MOXA_INTELLIO is not set
638# CONFIG_MOXA_SMARTIO is not set 647# CONFIG_MOXA_SMARTIO is not set
639# CONFIG_ISI is not set 648# CONFIG_ISI is not set
640# CONFIG_SYNCLINKMP is not set 649# CONFIG_SYNCLINKMP is not set
650# CONFIG_SYNCLINK_GT is not set
641# CONFIG_N_HDLC is not set 651# CONFIG_N_HDLC is not set
642# CONFIG_SPECIALIX is not set 652# CONFIG_SPECIALIX is not set
643# CONFIG_SX is not set 653# CONFIG_SX is not set
@@ -686,8 +696,8 @@ CONFIG_AGP=y
686CONFIG_AGP_SGI_TIOCA=y 696CONFIG_AGP_SGI_TIOCA=y
687# CONFIG_DRM is not set 697# CONFIG_DRM is not set
688CONFIG_RAW_DRIVER=m 698CONFIG_RAW_DRIVER=m
689# CONFIG_HPET is not set
690CONFIG_MAX_RAW_DEVS=256 699CONFIG_MAX_RAW_DEVS=256
700# CONFIG_HPET is not set
691# CONFIG_HANGCHECK_TIMER is not set 701# CONFIG_HANGCHECK_TIMER is not set
692CONFIG_MMTIMER=y 702CONFIG_MMTIMER=y
693 703
@@ -703,6 +713,12 @@ CONFIG_MMTIMER=y
703# CONFIG_I2C is not set 713# CONFIG_I2C is not set
704 714
705# 715#
716# SPI support
717#
718# CONFIG_SPI is not set
719# CONFIG_SPI_MASTER is not set
720
721#
706# Dallas's 1-wire bus 722# Dallas's 1-wire bus
707# 723#
708# CONFIG_W1 is not set 724# CONFIG_W1 is not set
@@ -791,12 +807,14 @@ CONFIG_USB_UHCI_HCD=m
791# may also be needed; see USB_STORAGE Help for more information 807# may also be needed; see USB_STORAGE Help for more information
792# 808#
793# CONFIG_USB_STORAGE is not set 809# CONFIG_USB_STORAGE is not set
810# CONFIG_USB_LIBUSUAL is not set
794 811
795# 812#
796# USB Input Devices 813# USB Input Devices
797# 814#
798CONFIG_USB_HID=m 815CONFIG_USB_HID=m
799CONFIG_USB_HIDINPUT=y 816CONFIG_USB_HIDINPUT=y
817# CONFIG_USB_HIDINPUT_POWERBOOK is not set
800# CONFIG_HID_FF is not set 818# CONFIG_HID_FF is not set
801# CONFIG_USB_HIDDEV is not set 819# CONFIG_USB_HIDDEV is not set
802 820
@@ -816,6 +834,7 @@ CONFIG_USB_HIDINPUT=y
816# CONFIG_USB_YEALINK is not set 834# CONFIG_USB_YEALINK is not set
817# CONFIG_USB_XPAD is not set 835# CONFIG_USB_XPAD is not set
818# CONFIG_USB_ATI_REMOTE is not set 836# CONFIG_USB_ATI_REMOTE is not set
837# CONFIG_USB_ATI_REMOTE2 is not set
819# CONFIG_USB_KEYSPAN_REMOTE is not set 838# CONFIG_USB_KEYSPAN_REMOTE is not set
820# CONFIG_USB_APPLETOUCH is not set 839# CONFIG_USB_APPLETOUCH is not set
821 840
@@ -903,6 +922,10 @@ CONFIG_SGI_IOC4=y
903CONFIG_SGI_IOC3=y 922CONFIG_SGI_IOC3=y
904 923
905# 924#
925# EDAC - error detection and reporting (RAS)
926#
927
928#
906# File systems 929# File systems
907# 930#
908CONFIG_EXT2_FS=y 931CONFIG_EXT2_FS=y
@@ -931,6 +954,7 @@ CONFIG_XFS_QUOTA=y
931# CONFIG_XFS_SECURITY is not set 954# CONFIG_XFS_SECURITY is not set
932CONFIG_XFS_POSIX_ACL=y 955CONFIG_XFS_POSIX_ACL=y
933CONFIG_XFS_RT=y 956CONFIG_XFS_RT=y
957# CONFIG_OCFS2_FS is not set
934# CONFIG_MINIX_FS is not set 958# CONFIG_MINIX_FS is not set
935# CONFIG_ROMFS_FS is not set 959# CONFIG_ROMFS_FS is not set
936CONFIG_INOTIFY=y 960CONFIG_INOTIFY=y
@@ -973,6 +997,7 @@ CONFIG_HUGETLBFS=y
973CONFIG_HUGETLB_PAGE=y 997CONFIG_HUGETLB_PAGE=y
974CONFIG_RAMFS=y 998CONFIG_RAMFS=y
975CONFIG_RELAYFS_FS=m 999CONFIG_RELAYFS_FS=m
1000# CONFIG_CONFIGFS_FS is not set
976 1001
977# 1002#
978# Miscellaneous filesystems 1003# Miscellaneous filesystems
@@ -1041,6 +1066,7 @@ CONFIG_MSDOS_PARTITION=y
1041CONFIG_SGI_PARTITION=y 1066CONFIG_SGI_PARTITION=y
1042# CONFIG_ULTRIX_PARTITION is not set 1067# CONFIG_ULTRIX_PARTITION is not set
1043# CONFIG_SUN_PARTITION is not set 1068# CONFIG_SUN_PARTITION is not set
1069# CONFIG_KARMA_PARTITION is not set
1044CONFIG_EFI_PARTITION=y 1070CONFIG_EFI_PARTITION=y
1045 1071
1046# 1072#
@@ -1111,19 +1137,21 @@ CONFIG_GENERIC_PENDING_IRQ=y
1111# Kernel hacking 1137# Kernel hacking
1112# 1138#
1113# CONFIG_PRINTK_TIME is not set 1139# CONFIG_PRINTK_TIME is not set
1114CONFIG_DEBUG_KERNEL=y
1115CONFIG_MAGIC_SYSRQ=y 1140CONFIG_MAGIC_SYSRQ=y
1141CONFIG_DEBUG_KERNEL=y
1116CONFIG_LOG_BUF_SHIFT=20 1142CONFIG_LOG_BUF_SHIFT=20
1117CONFIG_DETECT_SOFTLOCKUP=y 1143CONFIG_DETECT_SOFTLOCKUP=y
1118# CONFIG_SCHEDSTATS is not set 1144# CONFIG_SCHEDSTATS is not set
1119# CONFIG_DEBUG_SLAB is not set 1145# CONFIG_DEBUG_SLAB is not set
1120CONFIG_DEBUG_PREEMPT=y 1146CONFIG_DEBUG_PREEMPT=y
1147CONFIG_DEBUG_MUTEXES=y
1121# CONFIG_DEBUG_SPINLOCK is not set 1148# CONFIG_DEBUG_SPINLOCK is not set
1122# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1149# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1123# CONFIG_DEBUG_KOBJECT is not set 1150# CONFIG_DEBUG_KOBJECT is not set
1124CONFIG_DEBUG_INFO=y 1151CONFIG_DEBUG_INFO=y
1125# CONFIG_DEBUG_FS is not set 1152# CONFIG_DEBUG_FS is not set
1126# CONFIG_DEBUG_VM is not set 1153# CONFIG_DEBUG_VM is not set
1154CONFIG_FORCED_INLINING=y
1127# CONFIG_RCU_TORTURE_TEST is not set 1155# CONFIG_RCU_TORTURE_TEST is not set
1128CONFIG_IA64_GRANULE_16MB=y 1156CONFIG_IA64_GRANULE_16MB=y
1129# CONFIG_IA64_GRANULE_64MB is not set 1157# CONFIG_IA64_GRANULE_64MB is not set
diff --git a/arch/ia64/configs/tiger_defconfig b/arch/ia64/configs/tiger_defconfig
index 6859119bc9dd..125568118b84 100644
--- a/arch/ia64/configs/tiger_defconfig
+++ b/arch/ia64/configs/tiger_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc4 3# Linux kernel version: 2.6.16-rc5
4# Fri Dec 2 16:06:32 2005 4# Mon Feb 27 15:49:18 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28CONFIG_IKCONFIG=y 25CONFIG_IKCONFIG=y
29CONFIG_IKCONFIG_PROC=y 26CONFIG_IKCONFIG_PROC=y
30# CONFIG_CPUSETS is not set 27# CONFIG_CPUSETS is not set
31CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
32# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
33CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
34CONFIG_KALLSYMS_ALL=y 32CONFIG_KALLSYMS_ALL=y
35# CONFIG_KALLSYMS_EXTRA_PASS is not set 33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
36CONFIG_PRINTK=y 35CONFIG_PRINTK=y
37CONFIG_BUG=y 36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y 38CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 39CONFIG_FUTEX=y
40CONFIG_EPOLL=y 40CONFIG_EPOLL=y
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
43CONFIG_CC_ALIGN_LABELS=0 43CONFIG_CC_ALIGN_LABELS=0
44CONFIG_CC_ALIGN_LOOPS=0 44CONFIG_CC_ALIGN_LOOPS=0
45CONFIG_CC_ALIGN_JUMPS=0 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
46# CONFIG_TINY_SHMEM is not set 47# CONFIG_TINY_SHMEM is not set
47CONFIG_BASE_SMALL=0 48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
48 50
49# 51#
50# Loadable module support 52# Loadable module support
@@ -88,7 +90,7 @@ CONFIG_TIME_INTERPOLATION=y
88CONFIG_EFI=y 90CONFIG_EFI=y
89CONFIG_GENERIC_IOMAP=y 91CONFIG_GENERIC_IOMAP=y
90CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 92CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
91CONFIG_ZONE_DMA_IS_DMA32=y 93CONFIG_DMA_IS_DMA32=y
92# CONFIG_IA64_GENERIC is not set 94# CONFIG_IA64_GENERIC is not set
93CONFIG_IA64_DIG=y 95CONFIG_IA64_DIG=y
94# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
@@ -162,6 +164,7 @@ CONFIG_ACPI_HOTPLUG_CPU=y
162CONFIG_ACPI_THERMAL=m 164CONFIG_ACPI_THERMAL=m
163CONFIG_ACPI_BLACKLIST_YEAR=0 165CONFIG_ACPI_BLACKLIST_YEAR=0
164# CONFIG_ACPI_DEBUG is not set 166# CONFIG_ACPI_DEBUG is not set
167CONFIG_ACPI_EC=y
165CONFIG_ACPI_POWER=y 168CONFIG_ACPI_POWER=y
166CONFIG_ACPI_SYSTEM=y 169CONFIG_ACPI_SYSTEM=y
167CONFIG_ACPI_CONTAINER=m 170CONFIG_ACPI_CONTAINER=m
@@ -203,6 +206,7 @@ CONFIG_NET=y
203# 206#
204# Networking options 207# Networking options
205# 208#
209# CONFIG_NETDEBUG is not set
206CONFIG_PACKET=y 210CONFIG_PACKET=y
207# CONFIG_PACKET_MMAP is not set 211# CONFIG_PACKET_MMAP is not set
208CONFIG_UNIX=y 212CONFIG_UNIX=y
@@ -237,6 +241,11 @@ CONFIG_TCP_CONG_BIC=y
237# SCTP Configuration (EXPERIMENTAL) 241# SCTP Configuration (EXPERIMENTAL)
238# 242#
239# CONFIG_IP_SCTP is not set 243# CONFIG_IP_SCTP is not set
244
245#
246# TIPC Configuration (EXPERIMENTAL)
247#
248# CONFIG_TIPC is not set
240# CONFIG_ATM is not set 249# CONFIG_ATM is not set
241# CONFIG_BRIDGE is not set 250# CONFIG_BRIDGE is not set
242# CONFIG_VLAN_8021Q is not set 251# CONFIG_VLAN_8021Q is not set
@@ -326,6 +335,7 @@ CONFIG_BLK_DEV_INITRD=y
326# ATA/ATAPI/MFM/RLL support 335# ATA/ATAPI/MFM/RLL support
327# 336#
328CONFIG_IDE=y 337CONFIG_IDE=y
338CONFIG_IDE_MAX_HWIFS=4
329CONFIG_BLK_DEV_IDE=y 339CONFIG_BLK_DEV_IDE=y
330 340
331# 341#
@@ -443,13 +453,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
443CONFIG_SCSI_QLOGIC_FC=y 453CONFIG_SCSI_QLOGIC_FC=y
444# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set 454# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
445CONFIG_SCSI_QLOGIC_1280=y 455CONFIG_SCSI_QLOGIC_1280=y
446CONFIG_SCSI_QLA2XXX=y 456# CONFIG_SCSI_QLA_FC is not set
447CONFIG_SCSI_QLA21XX=m
448CONFIG_SCSI_QLA22XX=m
449CONFIG_SCSI_QLA2300=m
450CONFIG_SCSI_QLA2322=m
451# CONFIG_SCSI_QLA6312 is not set
452# CONFIG_SCSI_QLA24XX is not set
453# CONFIG_SCSI_LPFC is not set 457# CONFIG_SCSI_LPFC is not set
454# CONFIG_SCSI_DC395x is not set 458# CONFIG_SCSI_DC395x is not set
455# CONFIG_SCSI_DC390T is not set 459# CONFIG_SCSI_DC390T is not set
@@ -572,6 +576,7 @@ CONFIG_E1000=y
572# CONFIG_R8169 is not set 576# CONFIG_R8169 is not set
573# CONFIG_SIS190 is not set 577# CONFIG_SIS190 is not set
574# CONFIG_SKGE is not set 578# CONFIG_SKGE is not set
579# CONFIG_SKY2 is not set
575# CONFIG_SK98LIN is not set 580# CONFIG_SK98LIN is not set
576# CONFIG_VIA_VELOCITY is not set 581# CONFIG_VIA_VELOCITY is not set
577CONFIG_TIGON3=y 582CONFIG_TIGON3=y
@@ -676,12 +681,15 @@ CONFIG_VT=y
676CONFIG_VT_CONSOLE=y 681CONFIG_VT_CONSOLE=y
677CONFIG_HW_CONSOLE=y 682CONFIG_HW_CONSOLE=y
678CONFIG_SERIAL_NONSTANDARD=y 683CONFIG_SERIAL_NONSTANDARD=y
684# CONFIG_COMPUTONE is not set
679# CONFIG_ROCKETPORT is not set 685# CONFIG_ROCKETPORT is not set
680# CONFIG_CYCLADES is not set 686# CONFIG_CYCLADES is not set
681# CONFIG_DIGIEPCA is not set 687# CONFIG_DIGIEPCA is not set
688# CONFIG_MOXA_INTELLIO is not set
682# CONFIG_MOXA_SMARTIO is not set 689# CONFIG_MOXA_SMARTIO is not set
683# CONFIG_ISI is not set 690# CONFIG_ISI is not set
684# CONFIG_SYNCLINKMP is not set 691# CONFIG_SYNCLINKMP is not set
692# CONFIG_SYNCLINK_GT is not set
685# CONFIG_N_HDLC is not set 693# CONFIG_N_HDLC is not set
686# CONFIG_SPECIALIX is not set 694# CONFIG_SPECIALIX is not set
687# CONFIG_SX is not set 695# CONFIG_SX is not set
@@ -694,6 +702,7 @@ CONFIG_SERIAL_8250=y
694CONFIG_SERIAL_8250_CONSOLE=y 702CONFIG_SERIAL_8250_CONSOLE=y
695CONFIG_SERIAL_8250_ACPI=y 703CONFIG_SERIAL_8250_ACPI=y
696CONFIG_SERIAL_8250_NR_UARTS=6 704CONFIG_SERIAL_8250_NR_UARTS=6
705CONFIG_SERIAL_8250_RUNTIME_UARTS=4
697CONFIG_SERIAL_8250_EXTENDED=y 706CONFIG_SERIAL_8250_EXTENDED=y
698CONFIG_SERIAL_8250_SHARE_IRQ=y 707CONFIG_SERIAL_8250_SHARE_IRQ=y
699# CONFIG_SERIAL_8250_DETECT_IRQ is not set 708# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -738,10 +747,10 @@ CONFIG_DRM_SIS=m
738# CONFIG_DRM_VIA is not set 747# CONFIG_DRM_VIA is not set
739# CONFIG_DRM_SAVAGE is not set 748# CONFIG_DRM_SAVAGE is not set
740CONFIG_RAW_DRIVER=m 749CONFIG_RAW_DRIVER=m
750CONFIG_MAX_RAW_DEVS=256
741CONFIG_HPET=y 751CONFIG_HPET=y
742# CONFIG_HPET_RTC_IRQ is not set 752# CONFIG_HPET_RTC_IRQ is not set
743CONFIG_HPET_MMAP=y 753CONFIG_HPET_MMAP=y
744CONFIG_MAX_RAW_DEVS=256
745# CONFIG_HANGCHECK_TIMER is not set 754# CONFIG_HANGCHECK_TIMER is not set
746 755
747# 756#
@@ -756,6 +765,12 @@ CONFIG_MAX_RAW_DEVS=256
756# CONFIG_I2C is not set 765# CONFIG_I2C is not set
757 766
758# 767#
768# SPI support
769#
770# CONFIG_SPI is not set
771# CONFIG_SPI_MASTER is not set
772
773#
759# Dallas's 1-wire bus 774# Dallas's 1-wire bus
760# 775#
761# CONFIG_W1 is not set 776# CONFIG_W1 is not set
@@ -765,6 +780,7 @@ CONFIG_MAX_RAW_DEVS=256
765# 780#
766CONFIG_HWMON=y 781CONFIG_HWMON=y
767# CONFIG_HWMON_VID is not set 782# CONFIG_HWMON_VID is not set
783# CONFIG_SENSORS_F71805F is not set
768# CONFIG_HWMON_DEBUG_CHIP is not set 784# CONFIG_HWMON_DEBUG_CHIP is not set
769 785
770# 786#
@@ -854,12 +870,15 @@ CONFIG_USB_STORAGE=m
854# CONFIG_USB_STORAGE_SDDR09 is not set 870# CONFIG_USB_STORAGE_SDDR09 is not set
855# CONFIG_USB_STORAGE_SDDR55 is not set 871# CONFIG_USB_STORAGE_SDDR55 is not set
856# CONFIG_USB_STORAGE_JUMPSHOT is not set 872# CONFIG_USB_STORAGE_JUMPSHOT is not set
873# CONFIG_USB_STORAGE_ALAUDA is not set
874# CONFIG_USB_LIBUSUAL is not set
857 875
858# 876#
859# USB Input Devices 877# USB Input Devices
860# 878#
861CONFIG_USB_HID=y 879CONFIG_USB_HID=y
862CONFIG_USB_HIDINPUT=y 880CONFIG_USB_HIDINPUT=y
881# CONFIG_USB_HIDINPUT_POWERBOOK is not set
863# CONFIG_HID_FF is not set 882# CONFIG_HID_FF is not set
864# CONFIG_USB_HIDDEV is not set 883# CONFIG_USB_HIDDEV is not set
865# CONFIG_USB_AIPTEK is not set 884# CONFIG_USB_AIPTEK is not set
@@ -873,6 +892,7 @@ CONFIG_USB_HIDINPUT=y
873# CONFIG_USB_YEALINK is not set 892# CONFIG_USB_YEALINK is not set
874# CONFIG_USB_XPAD is not set 893# CONFIG_USB_XPAD is not set
875# CONFIG_USB_ATI_REMOTE is not set 894# CONFIG_USB_ATI_REMOTE is not set
895# CONFIG_USB_ATI_REMOTE2 is not set
876# CONFIG_USB_KEYSPAN_REMOTE is not set 896# CONFIG_USB_KEYSPAN_REMOTE is not set
877# CONFIG_USB_APPLETOUCH is not set 897# CONFIG_USB_APPLETOUCH is not set
878 898
@@ -948,7 +968,7 @@ CONFIG_USB_HIDINPUT=y
948# CONFIG_INFINIBAND is not set 968# CONFIG_INFINIBAND is not set
949 969
950# 970#
951# SN Devices 971# EDAC - error detection and reporting (RAS)
952# 972#
953 973
954# 974#
@@ -980,6 +1000,7 @@ CONFIG_XFS_EXPORT=y
980# CONFIG_XFS_SECURITY is not set 1000# CONFIG_XFS_SECURITY is not set
981# CONFIG_XFS_POSIX_ACL is not set 1001# CONFIG_XFS_POSIX_ACL is not set
982# CONFIG_XFS_RT is not set 1002# CONFIG_XFS_RT is not set
1003# CONFIG_OCFS2_FS is not set
983# CONFIG_MINIX_FS is not set 1004# CONFIG_MINIX_FS is not set
984# CONFIG_ROMFS_FS is not set 1005# CONFIG_ROMFS_FS is not set
985CONFIG_INOTIFY=y 1006CONFIG_INOTIFY=y
@@ -1021,6 +1042,7 @@ CONFIG_HUGETLBFS=y
1021CONFIG_HUGETLB_PAGE=y 1042CONFIG_HUGETLB_PAGE=y
1022CONFIG_RAMFS=y 1043CONFIG_RAMFS=y
1023# CONFIG_RELAYFS_FS is not set 1044# CONFIG_RELAYFS_FS is not set
1045# CONFIG_CONFIGFS_FS is not set
1024 1046
1025# 1047#
1026# Miscellaneous filesystems 1048# Miscellaneous filesystems
@@ -1090,6 +1112,7 @@ CONFIG_MSDOS_PARTITION=y
1090CONFIG_SGI_PARTITION=y 1112CONFIG_SGI_PARTITION=y
1091# CONFIG_ULTRIX_PARTITION is not set 1113# CONFIG_ULTRIX_PARTITION is not set
1092# CONFIG_SUN_PARTITION is not set 1114# CONFIG_SUN_PARTITION is not set
1115# CONFIG_KARMA_PARTITION is not set
1093CONFIG_EFI_PARTITION=y 1116CONFIG_EFI_PARTITION=y
1094 1117
1095# 1118#
@@ -1157,18 +1180,20 @@ CONFIG_GENERIC_PENDING_IRQ=y
1157# Kernel hacking 1180# Kernel hacking
1158# 1181#
1159# CONFIG_PRINTK_TIME is not set 1182# CONFIG_PRINTK_TIME is not set
1160CONFIG_DEBUG_KERNEL=y
1161CONFIG_MAGIC_SYSRQ=y 1183CONFIG_MAGIC_SYSRQ=y
1184CONFIG_DEBUG_KERNEL=y
1162CONFIG_LOG_BUF_SHIFT=20 1185CONFIG_LOG_BUF_SHIFT=20
1163CONFIG_DETECT_SOFTLOCKUP=y 1186CONFIG_DETECT_SOFTLOCKUP=y
1164# CONFIG_SCHEDSTATS is not set 1187# CONFIG_SCHEDSTATS is not set
1165# CONFIG_DEBUG_SLAB is not set 1188# CONFIG_DEBUG_SLAB is not set
1189CONFIG_DEBUG_MUTEXES=y
1166# CONFIG_DEBUG_SPINLOCK is not set 1190# CONFIG_DEBUG_SPINLOCK is not set
1167# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1191# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1168# CONFIG_DEBUG_KOBJECT is not set 1192# CONFIG_DEBUG_KOBJECT is not set
1169# CONFIG_DEBUG_INFO is not set 1193# CONFIG_DEBUG_INFO is not set
1170# CONFIG_DEBUG_FS is not set 1194# CONFIG_DEBUG_FS is not set
1171# CONFIG_DEBUG_VM is not set 1195# CONFIG_DEBUG_VM is not set
1196CONFIG_FORCED_INLINING=y
1172# CONFIG_RCU_TORTURE_TEST is not set 1197# CONFIG_RCU_TORTURE_TEST is not set
1173CONFIG_IA64_GRANULE_16MB=y 1198CONFIG_IA64_GRANULE_16MB=y
1174# CONFIG_IA64_GRANULE_64MB is not set 1199# CONFIG_IA64_GRANULE_64MB is not set
diff --git a/arch/ia64/configs/zx1_defconfig b/arch/ia64/configs/zx1_defconfig
index 53899dc8eb53..949dc4670a0c 100644
--- a/arch/ia64/configs/zx1_defconfig
+++ b/arch/ia64/configs/zx1_defconfig
@@ -1,16 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc1 3# Linux kernel version: 2.6.16-rc5
4# Wed Sep 14 15:15:01 2005 4# Mon Feb 27 15:55:36 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11# CONFIG_CLEAN_COMPILE is not set
12CONFIG_BROKEN=y
13CONFIG_BROKEN_ON_SMP=y
14CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
15CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
16 13
@@ -26,17 +23,18 @@ CONFIG_BSD_PROCESS_ACCT=y
26# CONFIG_BSD_PROCESS_ACCT_V3 is not set 23# CONFIG_BSD_PROCESS_ACCT_V3 is not set
27CONFIG_SYSCTL=y 24CONFIG_SYSCTL=y
28# CONFIG_AUDIT is not set 25# CONFIG_AUDIT is not set
29CONFIG_HOTPLUG=y
30CONFIG_KOBJECT_UEVENT=y
31# CONFIG_IKCONFIG is not set 26# CONFIG_IKCONFIG is not set
32# CONFIG_CPUSETS is not set 27# CONFIG_CPUSETS is not set
33CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
34# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
35CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_ALL is not set 32# CONFIG_KALLSYMS_ALL is not set
37# CONFIG_KALLSYMS_EXTRA_PASS is not set 33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
38CONFIG_PRINTK=y 35CONFIG_PRINTK=y
39CONFIG_BUG=y 36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
40CONFIG_BASE_FULL=y 38CONFIG_BASE_FULL=y
41CONFIG_FUTEX=y 39CONFIG_FUTEX=y
42CONFIG_EPOLL=y 40CONFIG_EPOLL=y
@@ -45,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
45CONFIG_CC_ALIGN_LABELS=0 43CONFIG_CC_ALIGN_LABELS=0
46CONFIG_CC_ALIGN_LOOPS=0 44CONFIG_CC_ALIGN_LOOPS=0
47CONFIG_CC_ALIGN_JUMPS=0 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
48# CONFIG_TINY_SHMEM is not set 47# CONFIG_TINY_SHMEM is not set
49CONFIG_BASE_SMALL=0 48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
50 50
51# 51#
52# Loadable module support 52# Loadable module support
@@ -59,17 +59,36 @@ CONFIG_OBSOLETE_MODPARM=y
59# CONFIG_KMOD is not set 59# CONFIG_KMOD is not set
60 60
61# 61#
62# Block layer
63#
64
65#
66# IO Schedulers
67#
68CONFIG_IOSCHED_NOOP=y
69CONFIG_IOSCHED_AS=y
70CONFIG_IOSCHED_DEADLINE=y
71CONFIG_IOSCHED_CFQ=y
72CONFIG_DEFAULT_AS=y
73# CONFIG_DEFAULT_DEADLINE is not set
74# CONFIG_DEFAULT_CFQ is not set
75# CONFIG_DEFAULT_NOOP is not set
76CONFIG_DEFAULT_IOSCHED="anticipatory"
77
78#
62# Processor type and features 79# Processor type and features
63# 80#
64CONFIG_IA64=y 81CONFIG_IA64=y
65CONFIG_64BIT=y 82CONFIG_64BIT=y
66CONFIG_MMU=y 83CONFIG_MMU=y
84CONFIG_SWIOTLB=y
67CONFIG_RWSEM_XCHGADD_ALGORITHM=y 85CONFIG_RWSEM_XCHGADD_ALGORITHM=y
68CONFIG_GENERIC_CALIBRATE_DELAY=y 86CONFIG_GENERIC_CALIBRATE_DELAY=y
69CONFIG_TIME_INTERPOLATION=y 87CONFIG_TIME_INTERPOLATION=y
70CONFIG_EFI=y 88CONFIG_EFI=y
71CONFIG_GENERIC_IOMAP=y 89CONFIG_GENERIC_IOMAP=y
72CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 90CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
91CONFIG_DMA_IS_DMA32=y
73# CONFIG_IA64_GENERIC is not set 92# CONFIG_IA64_GENERIC is not set
74# CONFIG_IA64_DIG is not set 93# CONFIG_IA64_DIG is not set
75CONFIG_IA64_HP_ZX1=y 94CONFIG_IA64_HP_ZX1=y
@@ -82,18 +101,16 @@ CONFIG_MCKINLEY=y
82# CONFIG_IA64_PAGE_SIZE_8KB is not set 101# CONFIG_IA64_PAGE_SIZE_8KB is not set
83CONFIG_IA64_PAGE_SIZE_16KB=y 102CONFIG_IA64_PAGE_SIZE_16KB=y
84# CONFIG_IA64_PAGE_SIZE_64KB is not set 103# CONFIG_IA64_PAGE_SIZE_64KB is not set
104CONFIG_PGTABLE_3=y
105# CONFIG_PGTABLE_4 is not set
85# CONFIG_HZ_100 is not set 106# CONFIG_HZ_100 is not set
86CONFIG_HZ_250=y 107CONFIG_HZ_250=y
87# CONFIG_HZ_1000 is not set 108# CONFIG_HZ_1000 is not set
88CONFIG_HZ=250 109CONFIG_HZ=250
89CONFIG_IA64_L1_CACHE_SHIFT=7 110CONFIG_IA64_L1_CACHE_SHIFT=7
90# CONFIG_NUMA is not set
91CONFIG_VIRTUAL_MEM_MAP=y
92CONFIG_HOLES_IN_ZONE=y
93# CONFIG_IA64_CYCLONE is not set 111# CONFIG_IA64_CYCLONE is not set
94CONFIG_IOSAPIC=y 112CONFIG_IOSAPIC=y
95# CONFIG_IA64_SGI_SN_XP is not set 113CONFIG_FORCE_MAX_ZONEORDER=17
96CONFIG_FORCE_MAX_ZONEORDER=18
97CONFIG_SMP=y 114CONFIG_SMP=y
98CONFIG_NR_CPUS=16 115CONFIG_NR_CPUS=16
99# CONFIG_HOTPLUG_CPU is not set 116# CONFIG_HOTPLUG_CPU is not set
@@ -106,7 +123,14 @@ CONFIG_FLATMEM_MANUAL=y
106CONFIG_FLATMEM=y 123CONFIG_FLATMEM=y
107CONFIG_FLAT_NODE_MEM_MAP=y 124CONFIG_FLAT_NODE_MEM_MAP=y
108# CONFIG_SPARSEMEM_STATIC is not set 125# CONFIG_SPARSEMEM_STATIC is not set
109CONFIG_HAVE_DEC_LOCK=y 126CONFIG_SPLIT_PTLOCK_CPUS=4
127CONFIG_ARCH_SELECT_MEMORY_MODEL=y
128CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
129CONFIG_ARCH_FLATMEM_ENABLE=y
130CONFIG_ARCH_SPARSEMEM_ENABLE=y
131CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
132CONFIG_VIRTUAL_MEM_MAP=y
133CONFIG_HOLES_IN_ZONE=y
110CONFIG_IA32_SUPPORT=y 134CONFIG_IA32_SUPPORT=y
111CONFIG_COMPAT=y 135CONFIG_COMPAT=y
112CONFIG_IA64_MCA_RECOVERY=y 136CONFIG_IA64_MCA_RECOVERY=y
@@ -118,7 +142,6 @@ CONFIG_IA64_PALINFO=y
118# 142#
119CONFIG_EFI_VARS=y 143CONFIG_EFI_VARS=y
120CONFIG_EFI_PCDP=y 144CONFIG_EFI_PCDP=y
121# CONFIG_DELL_RBU is not set
122CONFIG_BINFMT_ELF=y 145CONFIG_BINFMT_ELF=y
123CONFIG_BINFMT_MISC=y 146CONFIG_BINFMT_MISC=y
124 147
@@ -126,6 +149,7 @@ CONFIG_BINFMT_MISC=y
126# Power management and ACPI 149# Power management and ACPI
127# 150#
128CONFIG_PM=y 151CONFIG_PM=y
152CONFIG_PM_LEGACY=y
129# CONFIG_PM_DEBUG is not set 153# CONFIG_PM_DEBUG is not set
130 154
131# 155#
@@ -138,6 +162,7 @@ CONFIG_ACPI_PROCESSOR=y
138CONFIG_ACPI_THERMAL=y 162CONFIG_ACPI_THERMAL=y
139CONFIG_ACPI_BLACKLIST_YEAR=0 163CONFIG_ACPI_BLACKLIST_YEAR=0
140# CONFIG_ACPI_DEBUG is not set 164# CONFIG_ACPI_DEBUG is not set
165CONFIG_ACPI_EC=y
141CONFIG_ACPI_POWER=y 166CONFIG_ACPI_POWER=y
142CONFIG_ACPI_SYSTEM=y 167CONFIG_ACPI_SYSTEM=y
143# CONFIG_ACPI_CONTAINER is not set 168# CONFIG_ACPI_CONTAINER is not set
@@ -179,6 +204,7 @@ CONFIG_NET=y
179# 204#
180# Networking options 205# Networking options
181# 206#
207# CONFIG_NETDEBUG is not set
182CONFIG_PACKET=y 208CONFIG_PACKET=y
183# CONFIG_PACKET_MMAP is not set 209# CONFIG_PACKET_MMAP is not set
184CONFIG_UNIX=y 210CONFIG_UNIX=y
@@ -211,14 +237,17 @@ CONFIG_NETFILTER=y
211# CONFIG_NETFILTER_DEBUG is not set 237# CONFIG_NETFILTER_DEBUG is not set
212 238
213# 239#
240# Core Netfilter Configuration
241#
242# CONFIG_NETFILTER_NETLINK is not set
243# CONFIG_NF_CONNTRACK is not set
244# CONFIG_NETFILTER_XTABLES is not set
245
246#
214# IP: Netfilter Configuration 247# IP: Netfilter Configuration
215# 248#
216# CONFIG_IP_NF_CONNTRACK is not set 249# CONFIG_IP_NF_CONNTRACK is not set
217# CONFIG_IP_NF_QUEUE is not set 250# CONFIG_IP_NF_QUEUE is not set
218# CONFIG_IP_NF_IPTABLES is not set
219CONFIG_IP_NF_ARPTABLES=y
220# CONFIG_IP_NF_ARPFILTER is not set
221# CONFIG_IP_NF_ARP_MANGLE is not set
222 251
223# 252#
224# DCCP Configuration (EXPERIMENTAL) 253# DCCP Configuration (EXPERIMENTAL)
@@ -229,6 +258,11 @@ CONFIG_IP_NF_ARPTABLES=y
229# SCTP Configuration (EXPERIMENTAL) 258# SCTP Configuration (EXPERIMENTAL)
230# 259#
231# CONFIG_IP_SCTP is not set 260# CONFIG_IP_SCTP is not set
261
262#
263# TIPC Configuration (EXPERIMENTAL)
264#
265# CONFIG_TIPC is not set
232# CONFIG_ATM is not set 266# CONFIG_ATM is not set
233# CONFIG_BRIDGE is not set 267# CONFIG_BRIDGE is not set
234# CONFIG_VLAN_8021Q is not set 268# CONFIG_VLAN_8021Q is not set
@@ -241,14 +275,16 @@ CONFIG_IP_NF_ARPTABLES=y
241# CONFIG_NET_DIVERT is not set 275# CONFIG_NET_DIVERT is not set
242# CONFIG_ECONET is not set 276# CONFIG_ECONET is not set
243# CONFIG_WAN_ROUTER is not set 277# CONFIG_WAN_ROUTER is not set
278
279#
280# QoS and/or fair queueing
281#
244# CONFIG_NET_SCHED is not set 282# CONFIG_NET_SCHED is not set
245# CONFIG_NET_CLS_ROUTE is not set
246 283
247# 284#
248# Network testing 285# Network testing
249# 286#
250# CONFIG_NET_PKTGEN is not set 287# CONFIG_NET_PKTGEN is not set
251# CONFIG_NETFILTER_NETLINK is not set
252# CONFIG_HAMRADIO is not set 288# CONFIG_HAMRADIO is not set
253# CONFIG_IRDA is not set 289# CONFIG_IRDA is not set
254# CONFIG_BT is not set 290# CONFIG_BT is not set
@@ -310,20 +346,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16
310CONFIG_BLK_DEV_RAM_SIZE=4096 346CONFIG_BLK_DEV_RAM_SIZE=4096
311CONFIG_BLK_DEV_INITRD=y 347CONFIG_BLK_DEV_INITRD=y
312# CONFIG_CDROM_PKTCDVD is not set 348# CONFIG_CDROM_PKTCDVD is not set
313
314#
315# IO Schedulers
316#
317CONFIG_IOSCHED_NOOP=y
318CONFIG_IOSCHED_AS=y
319CONFIG_IOSCHED_DEADLINE=y
320CONFIG_IOSCHED_CFQ=y
321# CONFIG_ATA_OVER_ETH is not set 349# CONFIG_ATA_OVER_ETH is not set
322 350
323# 351#
324# ATA/ATAPI/MFM/RLL support 352# ATA/ATAPI/MFM/RLL support
325# 353#
326CONFIG_IDE=y 354CONFIG_IDE=y
355CONFIG_IDE_MAX_HWIFS=4
327CONFIG_BLK_DEV_IDE=y 356CONFIG_BLK_DEV_IDE=y
328 357
329# 358#
@@ -407,13 +436,14 @@ CONFIG_SCSI_LOGGING=y
407# SCSI Transport Attributes 436# SCSI Transport Attributes
408# 437#
409CONFIG_SCSI_SPI_ATTRS=y 438CONFIG_SCSI_SPI_ATTRS=y
410# CONFIG_SCSI_FC_ATTRS is not set 439CONFIG_SCSI_FC_ATTRS=y
411# CONFIG_SCSI_ISCSI_ATTRS is not set 440# CONFIG_SCSI_ISCSI_ATTRS is not set
412# CONFIG_SCSI_SAS_ATTRS is not set 441# CONFIG_SCSI_SAS_ATTRS is not set
413 442
414# 443#
415# SCSI low-level drivers 444# SCSI low-level drivers
416# 445#
446# CONFIG_ISCSI_TCP is not set
417# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 447# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
418# CONFIG_SCSI_3W_9XXX is not set 448# CONFIG_SCSI_3W_9XXX is not set
419# CONFIG_SCSI_ACARD is not set 449# CONFIG_SCSI_ACARD is not set
@@ -421,13 +451,11 @@ CONFIG_SCSI_SPI_ATTRS=y
421# CONFIG_SCSI_AIC7XXX is not set 451# CONFIG_SCSI_AIC7XXX is not set
422# CONFIG_SCSI_AIC7XXX_OLD is not set 452# CONFIG_SCSI_AIC7XXX_OLD is not set
423# CONFIG_SCSI_AIC79XX is not set 453# CONFIG_SCSI_AIC79XX is not set
424# CONFIG_SCSI_ADVANSYS is not set
425# CONFIG_MEGARAID_NEWGEN is not set 454# CONFIG_MEGARAID_NEWGEN is not set
426# CONFIG_MEGARAID_LEGACY is not set 455# CONFIG_MEGARAID_LEGACY is not set
456# CONFIG_MEGARAID_SAS is not set
427# CONFIG_SCSI_SATA is not set 457# CONFIG_SCSI_SATA is not set
428# CONFIG_SCSI_CPQFCTS is not set
429# CONFIG_SCSI_DMX3191D is not set 458# CONFIG_SCSI_DMX3191D is not set
430# CONFIG_SCSI_EATA_PIO is not set
431# CONFIG_SCSI_FUTURE_DOMAIN is not set 459# CONFIG_SCSI_FUTURE_DOMAIN is not set
432# CONFIG_SCSI_IPS is not set 460# CONFIG_SCSI_IPS is not set
433# CONFIG_SCSI_INITIO is not set 461# CONFIG_SCSI_INITIO is not set
@@ -438,17 +466,9 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
438CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 466CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
439# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set 467# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
440# CONFIG_SCSI_IPR is not set 468# CONFIG_SCSI_IPR is not set
441# CONFIG_SCSI_QLOGIC_ISP is not set
442# CONFIG_SCSI_QLOGIC_FC is not set 469# CONFIG_SCSI_QLOGIC_FC is not set
443CONFIG_SCSI_QLOGIC_1280=y 470CONFIG_SCSI_QLOGIC_1280=y
444# CONFIG_SCSI_QLOGIC_1280_1040 is not set 471# CONFIG_SCSI_QLA_FC is not set
445CONFIG_SCSI_QLA2XXX=y
446# CONFIG_SCSI_QLA21XX is not set
447# CONFIG_SCSI_QLA22XX is not set
448# CONFIG_SCSI_QLA2300 is not set
449# CONFIG_SCSI_QLA2322 is not set
450# CONFIG_SCSI_QLA6312 is not set
451# CONFIG_SCSI_QLA24XX is not set
452# CONFIG_SCSI_LPFC is not set 472# CONFIG_SCSI_LPFC is not set
453# CONFIG_SCSI_DC395x is not set 473# CONFIG_SCSI_DC395x is not set
454# CONFIG_SCSI_DC390T is not set 474# CONFIG_SCSI_DC390T is not set
@@ -465,6 +485,7 @@ CONFIG_SCSI_QLA2XXX=y
465CONFIG_FUSION=y 485CONFIG_FUSION=y
466CONFIG_FUSION_SPI=y 486CONFIG_FUSION_SPI=y
467CONFIG_FUSION_FC=y 487CONFIG_FUSION_FC=y
488# CONFIG_FUSION_SAS is not set
468CONFIG_FUSION_MAX_SGE=128 489CONFIG_FUSION_MAX_SGE=128
469CONFIG_FUSION_CTL=m 490CONFIG_FUSION_CTL=m
470 491
@@ -505,6 +526,7 @@ CONFIG_NET_ETHERNET=y
505CONFIG_MII=y 526CONFIG_MII=y
506# CONFIG_HAPPYMEAL is not set 527# CONFIG_HAPPYMEAL is not set
507# CONFIG_SUNGEM is not set 528# CONFIG_SUNGEM is not set
529# CONFIG_CASSINI is not set
508# CONFIG_NET_VENDOR_3COM is not set 530# CONFIG_NET_VENDOR_3COM is not set
509 531
510# 532#
@@ -555,6 +577,7 @@ CONFIG_E1000=y
555# CONFIG_R8169 is not set 577# CONFIG_R8169 is not set
556# CONFIG_SIS190 is not set 578# CONFIG_SIS190 is not set
557# CONFIG_SKGE is not set 579# CONFIG_SKGE is not set
580# CONFIG_SKY2 is not set
558# CONFIG_SK98LIN is not set 581# CONFIG_SK98LIN is not set
559# CONFIG_VIA_VELOCITY is not set 582# CONFIG_VIA_VELOCITY is not set
560CONFIG_TIGON3=y 583CONFIG_TIGON3=y
@@ -652,6 +675,7 @@ CONFIG_SERIAL_8250=y
652CONFIG_SERIAL_8250_CONSOLE=y 675CONFIG_SERIAL_8250_CONSOLE=y
653CONFIG_SERIAL_8250_ACPI=y 676CONFIG_SERIAL_8250_ACPI=y
654CONFIG_SERIAL_8250_NR_UARTS=8 677CONFIG_SERIAL_8250_NR_UARTS=8
678CONFIG_SERIAL_8250_RUNTIME_UARTS=4
655CONFIG_SERIAL_8250_EXTENDED=y 679CONFIG_SERIAL_8250_EXTENDED=y
656CONFIG_SERIAL_8250_SHARE_IRQ=y 680CONFIG_SERIAL_8250_SHARE_IRQ=y
657# CONFIG_SERIAL_8250_DETECT_IRQ is not set 681# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -703,6 +727,7 @@ CONFIG_DRM_RADEON=y
703# TPM devices 727# TPM devices
704# 728#
705# CONFIG_TCG_TPM is not set 729# CONFIG_TCG_TPM is not set
730# CONFIG_TELCLOCK is not set
706 731
707# 732#
708# I2C support 733# I2C support
@@ -753,12 +778,19 @@ CONFIG_I2C_ALGOPCF=y
753# CONFIG_SENSORS_PCF8591 is not set 778# CONFIG_SENSORS_PCF8591 is not set
754# CONFIG_SENSORS_RTC8564 is not set 779# CONFIG_SENSORS_RTC8564 is not set
755# CONFIG_SENSORS_MAX6875 is not set 780# CONFIG_SENSORS_MAX6875 is not set
781# CONFIG_RTC_X1205_I2C is not set
756# CONFIG_I2C_DEBUG_CORE is not set 782# CONFIG_I2C_DEBUG_CORE is not set
757# CONFIG_I2C_DEBUG_ALGO is not set 783# CONFIG_I2C_DEBUG_ALGO is not set
758# CONFIG_I2C_DEBUG_BUS is not set 784# CONFIG_I2C_DEBUG_BUS is not set
759# CONFIG_I2C_DEBUG_CHIP is not set 785# CONFIG_I2C_DEBUG_CHIP is not set
760 786
761# 787#
788# SPI support
789#
790# CONFIG_SPI is not set
791# CONFIG_SPI_MASTER is not set
792
793#
762# Dallas's 1-wire bus 794# Dallas's 1-wire bus
763# 795#
764# CONFIG_W1 is not set 796# CONFIG_W1 is not set
@@ -789,6 +821,7 @@ CONFIG_VIDEO_DEV=y
789# 821#
790# Video Adapters 822# Video Adapters
791# 823#
824# CONFIG_VIDEO_ADV_DEBUG is not set
792# CONFIG_VIDEO_BT848 is not set 825# CONFIG_VIDEO_BT848 is not set
793# CONFIG_VIDEO_CPIA is not set 826# CONFIG_VIDEO_CPIA is not set
794# CONFIG_VIDEO_SAA5246A is not set 827# CONFIG_VIDEO_SAA5246A is not set
@@ -796,14 +829,16 @@ CONFIG_VIDEO_DEV=y
796# CONFIG_TUNER_3036 is not set 829# CONFIG_TUNER_3036 is not set
797# CONFIG_VIDEO_STRADIS is not set 830# CONFIG_VIDEO_STRADIS is not set
798# CONFIG_VIDEO_ZORAN is not set 831# CONFIG_VIDEO_ZORAN is not set
799# CONFIG_VIDEO_ZR36120 is not set
800# CONFIG_VIDEO_SAA7134 is not set 832# CONFIG_VIDEO_SAA7134 is not set
801# CONFIG_VIDEO_MXB is not set 833# CONFIG_VIDEO_MXB is not set
802# CONFIG_VIDEO_DPC is not set 834# CONFIG_VIDEO_DPC is not set
803# CONFIG_VIDEO_HEXIUM_ORION is not set 835# CONFIG_VIDEO_HEXIUM_ORION is not set
804# CONFIG_VIDEO_HEXIUM_GEMINI is not set 836# CONFIG_VIDEO_HEXIUM_GEMINI is not set
805# CONFIG_VIDEO_CX88 is not set 837# CONFIG_VIDEO_CX88 is not set
838# CONFIG_VIDEO_EM28XX is not set
806# CONFIG_VIDEO_OVCAMCHIP is not set 839# CONFIG_VIDEO_OVCAMCHIP is not set
840# CONFIG_VIDEO_AUDIO_DECODER is not set
841# CONFIG_VIDEO_DECODER is not set
807 842
808# 843#
809# Radio Adapters 844# Radio Adapters
@@ -824,7 +859,6 @@ CONFIG_FB=y
824CONFIG_FB_CFB_FILLRECT=y 859CONFIG_FB_CFB_FILLRECT=y
825CONFIG_FB_CFB_COPYAREA=y 860CONFIG_FB_CFB_COPYAREA=y
826CONFIG_FB_CFB_IMAGEBLIT=y 861CONFIG_FB_CFB_IMAGEBLIT=y
827CONFIG_FB_SOFT_CURSOR=y
828# CONFIG_FB_MACMODES is not set 862# CONFIG_FB_MACMODES is not set
829CONFIG_FB_MODE_HELPERS=y 863CONFIG_FB_MODE_HELPERS=y
830# CONFIG_FB_TILEBLITTING is not set 864# CONFIG_FB_TILEBLITTING is not set
@@ -833,6 +867,7 @@ CONFIG_FB_MODE_HELPERS=y
833# CONFIG_FB_CYBER2000 is not set 867# CONFIG_FB_CYBER2000 is not set
834# CONFIG_FB_ASILIANT is not set 868# CONFIG_FB_ASILIANT is not set
835# CONFIG_FB_IMSTT is not set 869# CONFIG_FB_IMSTT is not set
870# CONFIG_FB_S1D13XXX is not set
836# CONFIG_FB_NVIDIA is not set 871# CONFIG_FB_NVIDIA is not set
837# CONFIG_FB_RIVA is not set 872# CONFIG_FB_RIVA is not set
838# CONFIG_FB_MATROX is not set 873# CONFIG_FB_MATROX is not set
@@ -848,10 +883,7 @@ CONFIG_FB_RADEON_DEBUG=y
848# CONFIG_FB_KYRO is not set 883# CONFIG_FB_KYRO is not set
849# CONFIG_FB_3DFX is not set 884# CONFIG_FB_3DFX is not set
850# CONFIG_FB_VOODOO1 is not set 885# CONFIG_FB_VOODOO1 is not set
851# CONFIG_FB_CYBLA is not set
852# CONFIG_FB_TRIDENT is not set 886# CONFIG_FB_TRIDENT is not set
853# CONFIG_FB_PM3 is not set
854# CONFIG_FB_S1D13XXX is not set
855# CONFIG_FB_VIRTUAL is not set 887# CONFIG_FB_VIRTUAL is not set
856 888
857# 889#
@@ -860,6 +892,7 @@ CONFIG_FB_RADEON_DEBUG=y
860CONFIG_VGA_CONSOLE=y 892CONFIG_VGA_CONSOLE=y
861CONFIG_DUMMY_CONSOLE=y 893CONFIG_DUMMY_CONSOLE=y
862CONFIG_FRAMEBUFFER_CONSOLE=y 894CONFIG_FRAMEBUFFER_CONSOLE=y
895# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
863# CONFIG_FONTS is not set 896# CONFIG_FONTS is not set
864CONFIG_FONT_8x8=y 897CONFIG_FONT_8x8=y
865CONFIG_FONT_8x16=y 898CONFIG_FONT_8x16=y
@@ -892,6 +925,8 @@ CONFIG_SND_OSSEMUL=y
892CONFIG_SND_MIXER_OSS=y 925CONFIG_SND_MIXER_OSS=y
893CONFIG_SND_PCM_OSS=y 926CONFIG_SND_PCM_OSS=y
894CONFIG_SND_SEQUENCER_OSS=y 927CONFIG_SND_SEQUENCER_OSS=y
928# CONFIG_SND_DYNAMIC_MINORS is not set
929CONFIG_SND_SUPPORT_OLD_API=y
895# CONFIG_SND_VERBOSE_PRINTK is not set 930# CONFIG_SND_VERBOSE_PRINTK is not set
896# CONFIG_SND_DEBUG is not set 931# CONFIG_SND_DEBUG is not set
897 932
@@ -900,17 +935,18 @@ CONFIG_SND_SEQUENCER_OSS=y
900# 935#
901CONFIG_SND_MPU401_UART=y 936CONFIG_SND_MPU401_UART=y
902CONFIG_SND_OPL3_LIB=y 937CONFIG_SND_OPL3_LIB=y
938CONFIG_SND_AC97_CODEC=y
939CONFIG_SND_AC97_BUS=y
903# CONFIG_SND_DUMMY is not set 940# CONFIG_SND_DUMMY is not set
904# CONFIG_SND_VIRMIDI is not set 941# CONFIG_SND_VIRMIDI is not set
905# CONFIG_SND_MTPAV is not set 942# CONFIG_SND_MTPAV is not set
906# CONFIG_SND_SERIAL_U16550 is not set 943# CONFIG_SND_SERIAL_U16550 is not set
907# CONFIG_SND_MPU401 is not set 944# CONFIG_SND_MPU401 is not set
908CONFIG_SND_AC97_CODEC=y
909CONFIG_SND_AC97_BUS=y
910 945
911# 946#
912# PCI devices 947# PCI devices
913# 948#
949# CONFIG_SND_AD1889 is not set
914# CONFIG_SND_ALI5451 is not set 950# CONFIG_SND_ALI5451 is not set
915# CONFIG_SND_ATIIXP is not set 951# CONFIG_SND_ATIIXP is not set
916# CONFIG_SND_ATIIXP_MODEM is not set 952# CONFIG_SND_ATIIXP_MODEM is not set
@@ -919,39 +955,39 @@ CONFIG_SND_AC97_BUS=y
919# CONFIG_SND_AU8830 is not set 955# CONFIG_SND_AU8830 is not set
920# CONFIG_SND_AZT3328 is not set 956# CONFIG_SND_AZT3328 is not set
921# CONFIG_SND_BT87X is not set 957# CONFIG_SND_BT87X is not set
922# CONFIG_SND_CS46XX is not set 958# CONFIG_SND_CA0106 is not set
959# CONFIG_SND_CMIPCI is not set
923# CONFIG_SND_CS4281 is not set 960# CONFIG_SND_CS4281 is not set
961# CONFIG_SND_CS46XX is not set
924# CONFIG_SND_EMU10K1 is not set 962# CONFIG_SND_EMU10K1 is not set
925# CONFIG_SND_EMU10K1X is not set 963# CONFIG_SND_EMU10K1X is not set
926# CONFIG_SND_CA0106 is not set
927# CONFIG_SND_KORG1212 is not set
928# CONFIG_SND_MIXART is not set
929# CONFIG_SND_NM256 is not set
930# CONFIG_SND_RME32 is not set
931# CONFIG_SND_RME96 is not set
932# CONFIG_SND_RME9652 is not set
933# CONFIG_SND_HDSP is not set
934# CONFIG_SND_HDSPM is not set
935# CONFIG_SND_TRIDENT is not set
936# CONFIG_SND_YMFPCI is not set
937# CONFIG_SND_AD1889 is not set
938# CONFIG_SND_CMIPCI is not set
939# CONFIG_SND_ENS1370 is not set 964# CONFIG_SND_ENS1370 is not set
940# CONFIG_SND_ENS1371 is not set 965# CONFIG_SND_ENS1371 is not set
941# CONFIG_SND_ES1938 is not set 966# CONFIG_SND_ES1938 is not set
942# CONFIG_SND_ES1968 is not set 967# CONFIG_SND_ES1968 is not set
943# CONFIG_SND_MAESTRO3 is not set
944CONFIG_SND_FM801=y 968CONFIG_SND_FM801=y
945CONFIG_SND_FM801_TEA575X=y 969CONFIG_SND_FM801_TEA575X=y
970# CONFIG_SND_HDA_INTEL is not set
971# CONFIG_SND_HDSP is not set
972# CONFIG_SND_HDSPM is not set
946# CONFIG_SND_ICE1712 is not set 973# CONFIG_SND_ICE1712 is not set
947# CONFIG_SND_ICE1724 is not set 974# CONFIG_SND_ICE1724 is not set
948# CONFIG_SND_INTEL8X0 is not set 975# CONFIG_SND_INTEL8X0 is not set
949# CONFIG_SND_INTEL8X0M is not set 976# CONFIG_SND_INTEL8X0M is not set
977# CONFIG_SND_KORG1212 is not set
978# CONFIG_SND_MAESTRO3 is not set
979# CONFIG_SND_MIXART is not set
980# CONFIG_SND_NM256 is not set
981# CONFIG_SND_PCXHR is not set
982# CONFIG_SND_RME32 is not set
983# CONFIG_SND_RME96 is not set
984# CONFIG_SND_RME9652 is not set
950# CONFIG_SND_SONICVIBES is not set 985# CONFIG_SND_SONICVIBES is not set
986# CONFIG_SND_TRIDENT is not set
951# CONFIG_SND_VIA82XX is not set 987# CONFIG_SND_VIA82XX is not set
952# CONFIG_SND_VIA82XX_MODEM is not set 988# CONFIG_SND_VIA82XX_MODEM is not set
953# CONFIG_SND_VX222 is not set 989# CONFIG_SND_VX222 is not set
954# CONFIG_SND_HDA_INTEL is not set 990# CONFIG_SND_YMFPCI is not set
955 991
956# 992#
957# USB devices 993# USB devices
@@ -997,12 +1033,15 @@ CONFIG_USB_UHCI_HCD=y
997# USB Device Class drivers 1033# USB Device Class drivers
998# 1034#
999# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set 1035# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
1000# CONFIG_USB_BLUETOOTH_TTY is not set
1001# CONFIG_USB_ACM is not set 1036# CONFIG_USB_ACM is not set
1002# CONFIG_USB_PRINTER is not set 1037# CONFIG_USB_PRINTER is not set
1003 1038
1004# 1039#
1005# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 1040# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1041#
1042
1043#
1044# may also be needed; see USB_STORAGE Help for more information
1006# 1045#
1007CONFIG_USB_STORAGE=y 1046CONFIG_USB_STORAGE=y
1008# CONFIG_USB_STORAGE_DEBUG is not set 1047# CONFIG_USB_STORAGE_DEBUG is not set
@@ -1014,13 +1053,15 @@ CONFIG_USB_STORAGE=y
1014# CONFIG_USB_STORAGE_SDDR09 is not set 1053# CONFIG_USB_STORAGE_SDDR09 is not set
1015# CONFIG_USB_STORAGE_SDDR55 is not set 1054# CONFIG_USB_STORAGE_SDDR55 is not set
1016# CONFIG_USB_STORAGE_JUMPSHOT is not set 1055# CONFIG_USB_STORAGE_JUMPSHOT is not set
1017# CONFIG_USB_STORAGE_ONETOUCH is not set 1056# CONFIG_USB_STORAGE_ALAUDA is not set
1057# CONFIG_USB_LIBUSUAL is not set
1018 1058
1019# 1059#
1020# USB Input Devices 1060# USB Input Devices
1021# 1061#
1022CONFIG_USB_HID=y 1062CONFIG_USB_HID=y
1023CONFIG_USB_HIDINPUT=y 1063CONFIG_USB_HIDINPUT=y
1064# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1024# CONFIG_HID_FF is not set 1065# CONFIG_HID_FF is not set
1025CONFIG_USB_HIDDEV=y 1066CONFIG_USB_HIDDEV=y
1026# CONFIG_USB_AIPTEK is not set 1067# CONFIG_USB_AIPTEK is not set
@@ -1034,6 +1075,7 @@ CONFIG_USB_HIDDEV=y
1034# CONFIG_USB_YEALINK is not set 1075# CONFIG_USB_YEALINK is not set
1035# CONFIG_USB_XPAD is not set 1076# CONFIG_USB_XPAD is not set
1036# CONFIG_USB_ATI_REMOTE is not set 1077# CONFIG_USB_ATI_REMOTE is not set
1078# CONFIG_USB_ATI_REMOTE2 is not set
1037# CONFIG_USB_KEYSPAN_REMOTE is not set 1079# CONFIG_USB_KEYSPAN_REMOTE is not set
1038# CONFIG_USB_APPLETOUCH is not set 1080# CONFIG_USB_APPLETOUCH is not set
1039 1081
@@ -1049,6 +1091,7 @@ CONFIG_USB_HIDDEV=y
1049# CONFIG_USB_DABUSB is not set 1091# CONFIG_USB_DABUSB is not set
1050# CONFIG_USB_VICAM is not set 1092# CONFIG_USB_VICAM is not set
1051# CONFIG_USB_DSBR is not set 1093# CONFIG_USB_DSBR is not set
1094# CONFIG_USB_ET61X251 is not set
1052# CONFIG_USB_IBMCAM is not set 1095# CONFIG_USB_IBMCAM is not set
1053# CONFIG_USB_KONICAWC is not set 1096# CONFIG_USB_KONICAWC is not set
1054# CONFIG_USB_OV511 is not set 1097# CONFIG_USB_OV511 is not set
@@ -1113,7 +1156,7 @@ CONFIG_USB_MON=y
1113# CONFIG_INFINIBAND is not set 1156# CONFIG_INFINIBAND is not set
1114 1157
1115# 1158#
1116# SN Devices 1159# EDAC - error detection and reporting (RAS)
1117# 1160#
1118 1161
1119# 1162#
@@ -1135,6 +1178,7 @@ CONFIG_FS_MBCACHE=y
1135# CONFIG_JFS_FS is not set 1178# CONFIG_JFS_FS is not set
1136# CONFIG_FS_POSIX_ACL is not set 1179# CONFIG_FS_POSIX_ACL is not set
1137# CONFIG_XFS_FS is not set 1180# CONFIG_XFS_FS is not set
1181# CONFIG_OCFS2_FS is not set
1138# CONFIG_MINIX_FS is not set 1182# CONFIG_MINIX_FS is not set
1139# CONFIG_ROMFS_FS is not set 1183# CONFIG_ROMFS_FS is not set
1140# CONFIG_INOTIFY is not set 1184# CONFIG_INOTIFY is not set
@@ -1174,6 +1218,7 @@ CONFIG_HUGETLBFS=y
1174CONFIG_HUGETLB_PAGE=y 1218CONFIG_HUGETLB_PAGE=y
1175CONFIG_RAMFS=y 1219CONFIG_RAMFS=y
1176# CONFIG_RELAYFS_FS is not set 1220# CONFIG_RELAYFS_FS is not set
1221# CONFIG_CONFIGFS_FS is not set
1177 1222
1178# 1223#
1179# Miscellaneous filesystems 1224# Miscellaneous filesystems
@@ -1238,6 +1283,7 @@ CONFIG_MSDOS_PARTITION=y
1238# CONFIG_SGI_PARTITION is not set 1283# CONFIG_SGI_PARTITION is not set
1239# CONFIG_ULTRIX_PARTITION is not set 1284# CONFIG_ULTRIX_PARTITION is not set
1240# CONFIG_SUN_PARTITION is not set 1285# CONFIG_SUN_PARTITION is not set
1286# CONFIG_KARMA_PARTITION is not set
1241CONFIG_EFI_PARTITION=y 1287CONFIG_EFI_PARTITION=y
1242 1288
1243# 1289#
@@ -1296,26 +1342,30 @@ CONFIG_GENERIC_IRQ_PROBE=y
1296CONFIG_GENERIC_PENDING_IRQ=y 1342CONFIG_GENERIC_PENDING_IRQ=y
1297 1343
1298# 1344#
1299# Profiling support 1345# Instrumentation Support
1300# 1346#
1301# CONFIG_PROFILING is not set 1347# CONFIG_PROFILING is not set
1348CONFIG_KPROBES=y
1302 1349
1303# 1350#
1304# Kernel hacking 1351# Kernel hacking
1305# 1352#
1306# CONFIG_PRINTK_TIME is not set 1353# CONFIG_PRINTK_TIME is not set
1307CONFIG_DEBUG_KERNEL=y
1308CONFIG_MAGIC_SYSRQ=y 1354CONFIG_MAGIC_SYSRQ=y
1355CONFIG_DEBUG_KERNEL=y
1309CONFIG_LOG_BUF_SHIFT=17 1356CONFIG_LOG_BUF_SHIFT=17
1310CONFIG_DETECT_SOFTLOCKUP=y 1357CONFIG_DETECT_SOFTLOCKUP=y
1311# CONFIG_SCHEDSTATS is not set 1358# CONFIG_SCHEDSTATS is not set
1312# CONFIG_DEBUG_SLAB is not set 1359# CONFIG_DEBUG_SLAB is not set
1360CONFIG_DEBUG_MUTEXES=y
1313# CONFIG_DEBUG_SPINLOCK is not set 1361# CONFIG_DEBUG_SPINLOCK is not set
1314# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1362# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1315# CONFIG_DEBUG_KOBJECT is not set 1363# CONFIG_DEBUG_KOBJECT is not set
1316# CONFIG_DEBUG_INFO is not set 1364# CONFIG_DEBUG_INFO is not set
1317# CONFIG_DEBUG_FS is not set 1365# CONFIG_DEBUG_FS is not set
1318CONFIG_KPROBES=y 1366# CONFIG_DEBUG_VM is not set
1367CONFIG_FORCED_INLINING=y
1368# CONFIG_RCU_TORTURE_TEST is not set
1319CONFIG_IA64_GRANULE_16MB=y 1369CONFIG_IA64_GRANULE_16MB=y
1320# CONFIG_IA64_GRANULE_64MB is not set 1370# CONFIG_IA64_GRANULE_64MB is not set
1321CONFIG_IA64_PRINT_HAZARDS=y 1371CONFIG_IA64_PRINT_HAZARDS=y
diff --git a/arch/ia64/defconfig b/arch/ia64/defconfig
index dcbc78a4cfa4..3e767288a745 100644
--- a/arch/ia64/defconfig
+++ b/arch/ia64/defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc1 3# Linux kernel version: 2.6.16-rc5
4# Wed Sep 14 15:13:03 2005 4# Mon Feb 27 16:02:28 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28CONFIG_IKCONFIG=y 25CONFIG_IKCONFIG=y
29CONFIG_IKCONFIG_PROC=y 26CONFIG_IKCONFIG_PROC=y
30# CONFIG_CPUSETS is not set 27# CONFIG_CPUSETS is not set
31CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
32# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
33CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
34CONFIG_KALLSYMS_ALL=y 32CONFIG_KALLSYMS_ALL=y
35# CONFIG_KALLSYMS_EXTRA_PASS is not set 33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
36CONFIG_PRINTK=y 35CONFIG_PRINTK=y
37CONFIG_BUG=y 36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y 38CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 39CONFIG_FUTEX=y
40CONFIG_EPOLL=y 40CONFIG_EPOLL=y
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
43CONFIG_CC_ALIGN_LABELS=0 43CONFIG_CC_ALIGN_LABELS=0
44CONFIG_CC_ALIGN_LOOPS=0 44CONFIG_CC_ALIGN_LOOPS=0
45CONFIG_CC_ALIGN_JUMPS=0 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
46# CONFIG_TINY_SHMEM is not set 47# CONFIG_TINY_SHMEM is not set
47CONFIG_BASE_SMALL=0 48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
48 50
49# 51#
50# Loadable module support 52# Loadable module support
@@ -59,17 +61,36 @@ CONFIG_KMOD=y
59CONFIG_STOP_MACHINE=y 61CONFIG_STOP_MACHINE=y
60 62
61# 63#
64# Block layer
65#
66
67#
68# IO Schedulers
69#
70CONFIG_IOSCHED_NOOP=y
71CONFIG_IOSCHED_AS=y
72CONFIG_IOSCHED_DEADLINE=y
73CONFIG_IOSCHED_CFQ=y
74CONFIG_DEFAULT_AS=y
75# CONFIG_DEFAULT_DEADLINE is not set
76# CONFIG_DEFAULT_CFQ is not set
77# CONFIG_DEFAULT_NOOP is not set
78CONFIG_DEFAULT_IOSCHED="anticipatory"
79
80#
62# Processor type and features 81# Processor type and features
63# 82#
64CONFIG_IA64=y 83CONFIG_IA64=y
65CONFIG_64BIT=y 84CONFIG_64BIT=y
66CONFIG_MMU=y 85CONFIG_MMU=y
86CONFIG_SWIOTLB=y
67CONFIG_RWSEM_XCHGADD_ALGORITHM=y 87CONFIG_RWSEM_XCHGADD_ALGORITHM=y
68CONFIG_GENERIC_CALIBRATE_DELAY=y 88CONFIG_GENERIC_CALIBRATE_DELAY=y
69CONFIG_TIME_INTERPOLATION=y 89CONFIG_TIME_INTERPOLATION=y
70CONFIG_EFI=y 90CONFIG_EFI=y
71CONFIG_GENERIC_IOMAP=y 91CONFIG_GENERIC_IOMAP=y
72CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 92CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
93CONFIG_DMA_IS_DMA32=y
73CONFIG_IA64_GENERIC=y 94CONFIG_IA64_GENERIC=y
74# CONFIG_IA64_DIG is not set 95# CONFIG_IA64_DIG is not set
75# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
@@ -89,14 +110,10 @@ CONFIG_HZ_250=y
89# CONFIG_HZ_1000 is not set 110# CONFIG_HZ_1000 is not set
90CONFIG_HZ=250 111CONFIG_HZ=250
91CONFIG_IA64_L1_CACHE_SHIFT=7 112CONFIG_IA64_L1_CACHE_SHIFT=7
92CONFIG_NUMA=y
93CONFIG_VIRTUAL_MEM_MAP=y
94CONFIG_HOLES_IN_ZONE=y
95CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
96CONFIG_IA64_CYCLONE=y 113CONFIG_IA64_CYCLONE=y
97CONFIG_IOSAPIC=y 114CONFIG_IOSAPIC=y
98# CONFIG_IA64_SGI_SN_XP is not set 115# CONFIG_IA64_SGI_SN_XP is not set
99CONFIG_FORCE_MAX_ZONEORDER=18 116CONFIG_FORCE_MAX_ZONEORDER=17
100CONFIG_SMP=y 117CONFIG_SMP=y
101CONFIG_NR_CPUS=512 118CONFIG_NR_CPUS=512
102CONFIG_HOTPLUG_CPU=y 119CONFIG_HOTPLUG_CPU=y
@@ -110,19 +127,29 @@ CONFIG_DISCONTIGMEM=y
110CONFIG_FLAT_NODE_MEM_MAP=y 127CONFIG_FLAT_NODE_MEM_MAP=y
111CONFIG_NEED_MULTIPLE_NODES=y 128CONFIG_NEED_MULTIPLE_NODES=y
112# CONFIG_SPARSEMEM_STATIC is not set 129# CONFIG_SPARSEMEM_STATIC is not set
113CONFIG_HAVE_DEC_LOCK=y 130CONFIG_SPLIT_PTLOCK_CPUS=4
131CONFIG_MIGRATION=y
132CONFIG_ARCH_SELECT_MEMORY_MODEL=y
133CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
134CONFIG_ARCH_FLATMEM_ENABLE=y
135CONFIG_ARCH_SPARSEMEM_ENABLE=y
136CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
137CONFIG_NUMA=y
138CONFIG_VIRTUAL_MEM_MAP=y
139CONFIG_HOLES_IN_ZONE=y
140CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
114CONFIG_IA32_SUPPORT=y 141CONFIG_IA32_SUPPORT=y
115CONFIG_COMPAT=y 142CONFIG_COMPAT=y
116CONFIG_IA64_MCA_RECOVERY=y 143CONFIG_IA64_MCA_RECOVERY=y
117CONFIG_PERFMON=y 144CONFIG_PERFMON=y
118CONFIG_IA64_PALINFO=y 145CONFIG_IA64_PALINFO=y
146CONFIG_SGI_SN=y
119 147
120# 148#
121# Firmware Drivers 149# Firmware Drivers
122# 150#
123CONFIG_EFI_VARS=y 151CONFIG_EFI_VARS=y
124CONFIG_EFI_PCDP=y 152CONFIG_EFI_PCDP=y
125# CONFIG_DELL_RBU is not set
126CONFIG_BINFMT_ELF=y 153CONFIG_BINFMT_ELF=y
127CONFIG_BINFMT_MISC=m 154CONFIG_BINFMT_MISC=m
128 155
@@ -130,6 +157,7 @@ CONFIG_BINFMT_MISC=m
130# Power management and ACPI 157# Power management and ACPI
131# 158#
132CONFIG_PM=y 159CONFIG_PM=y
160CONFIG_PM_LEGACY=y
133# CONFIG_PM_DEBUG is not set 161# CONFIG_PM_DEBUG is not set
134 162
135# 163#
@@ -144,6 +172,7 @@ CONFIG_ACPI_THERMAL=m
144CONFIG_ACPI_NUMA=y 172CONFIG_ACPI_NUMA=y
145CONFIG_ACPI_BLACKLIST_YEAR=0 173CONFIG_ACPI_BLACKLIST_YEAR=0
146# CONFIG_ACPI_DEBUG is not set 174# CONFIG_ACPI_DEBUG is not set
175CONFIG_ACPI_EC=y
147CONFIG_ACPI_POWER=y 176CONFIG_ACPI_POWER=y
148CONFIG_ACPI_SYSTEM=y 177CONFIG_ACPI_SYSTEM=y
149CONFIG_ACPI_CONTAINER=m 178CONFIG_ACPI_CONTAINER=m
@@ -186,6 +215,7 @@ CONFIG_NET=y
186# 215#
187# Networking options 216# Networking options
188# 217#
218# CONFIG_NETDEBUG is not set
189CONFIG_PACKET=y 219CONFIG_PACKET=y
190# CONFIG_PACKET_MMAP is not set 220# CONFIG_PACKET_MMAP is not set
191CONFIG_UNIX=y 221CONFIG_UNIX=y
@@ -220,6 +250,11 @@ CONFIG_TCP_CONG_BIC=y
220# SCTP Configuration (EXPERIMENTAL) 250# SCTP Configuration (EXPERIMENTAL)
221# 251#
222# CONFIG_IP_SCTP is not set 252# CONFIG_IP_SCTP is not set
253
254#
255# TIPC Configuration (EXPERIMENTAL)
256#
257# CONFIG_TIPC is not set
223# CONFIG_ATM is not set 258# CONFIG_ATM is not set
224# CONFIG_BRIDGE is not set 259# CONFIG_BRIDGE is not set
225# CONFIG_VLAN_8021Q is not set 260# CONFIG_VLAN_8021Q is not set
@@ -232,14 +267,16 @@ CONFIG_TCP_CONG_BIC=y
232# CONFIG_NET_DIVERT is not set 267# CONFIG_NET_DIVERT is not set
233# CONFIG_ECONET is not set 268# CONFIG_ECONET is not set
234# CONFIG_WAN_ROUTER is not set 269# CONFIG_WAN_ROUTER is not set
270
271#
272# QoS and/or fair queueing
273#
235# CONFIG_NET_SCHED is not set 274# CONFIG_NET_SCHED is not set
236# CONFIG_NET_CLS_ROUTE is not set
237 275
238# 276#
239# Network testing 277# Network testing
240# 278#
241# CONFIG_NET_PKTGEN is not set 279# CONFIG_NET_PKTGEN is not set
242# CONFIG_NETFILTER_NETLINK is not set
243# CONFIG_HAMRADIO is not set 280# CONFIG_HAMRADIO is not set
244# CONFIG_IRDA is not set 281# CONFIG_IRDA is not set
245# CONFIG_BT is not set 282# CONFIG_BT is not set
@@ -301,20 +338,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16
301CONFIG_BLK_DEV_RAM_SIZE=4096 338CONFIG_BLK_DEV_RAM_SIZE=4096
302CONFIG_BLK_DEV_INITRD=y 339CONFIG_BLK_DEV_INITRD=y
303# CONFIG_CDROM_PKTCDVD is not set 340# CONFIG_CDROM_PKTCDVD is not set
304
305#
306# IO Schedulers
307#
308CONFIG_IOSCHED_NOOP=y
309CONFIG_IOSCHED_AS=y
310CONFIG_IOSCHED_DEADLINE=y
311CONFIG_IOSCHED_CFQ=y
312# CONFIG_ATA_OVER_ETH is not set 341# CONFIG_ATA_OVER_ETH is not set
313 342
314# 343#
315# ATA/ATAPI/MFM/RLL support 344# ATA/ATAPI/MFM/RLL support
316# 345#
317CONFIG_IDE=y 346CONFIG_IDE=y
347CONFIG_IDE_MAX_HWIFS=4
318CONFIG_BLK_DEV_IDE=y 348CONFIG_BLK_DEV_IDE=y
319 349
320# 350#
@@ -407,6 +437,7 @@ CONFIG_SCSI_FC_ATTRS=y
407# 437#
408# SCSI low-level drivers 438# SCSI low-level drivers
409# 439#
440# CONFIG_ISCSI_TCP is not set
410# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 441# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
411# CONFIG_SCSI_3W_9XXX is not set 442# CONFIG_SCSI_3W_9XXX is not set
412# CONFIG_SCSI_ACARD is not set 443# CONFIG_SCSI_ACARD is not set
@@ -416,16 +447,19 @@ CONFIG_SCSI_FC_ATTRS=y
416# CONFIG_SCSI_AIC79XX is not set 447# CONFIG_SCSI_AIC79XX is not set
417# CONFIG_MEGARAID_NEWGEN is not set 448# CONFIG_MEGARAID_NEWGEN is not set
418# CONFIG_MEGARAID_LEGACY is not set 449# CONFIG_MEGARAID_LEGACY is not set
450# CONFIG_MEGARAID_SAS is not set
419CONFIG_SCSI_SATA=y 451CONFIG_SCSI_SATA=y
420# CONFIG_SCSI_SATA_AHCI is not set 452# CONFIG_SCSI_SATA_AHCI is not set
421# CONFIG_SCSI_SATA_SVW is not set 453# CONFIG_SCSI_SATA_SVW is not set
422# CONFIG_SCSI_ATA_PIIX is not set 454# CONFIG_SCSI_ATA_PIIX is not set
423# CONFIG_SCSI_SATA_MV is not set 455# CONFIG_SCSI_SATA_MV is not set
424# CONFIG_SCSI_SATA_NV is not set 456# CONFIG_SCSI_SATA_NV is not set
425# CONFIG_SCSI_SATA_PROMISE is not set 457# CONFIG_SCSI_PDC_ADMA is not set
426# CONFIG_SCSI_SATA_QSTOR is not set 458# CONFIG_SCSI_SATA_QSTOR is not set
459# CONFIG_SCSI_SATA_PROMISE is not set
427# CONFIG_SCSI_SATA_SX4 is not set 460# CONFIG_SCSI_SATA_SX4 is not set
428# CONFIG_SCSI_SATA_SIL is not set 461# CONFIG_SCSI_SATA_SIL is not set
462# CONFIG_SCSI_SATA_SIL24 is not set
429# CONFIG_SCSI_SATA_SIS is not set 463# CONFIG_SCSI_SATA_SIS is not set
430# CONFIG_SCSI_SATA_ULI is not set 464# CONFIG_SCSI_SATA_ULI is not set
431# CONFIG_SCSI_SATA_VIA is not set 465# CONFIG_SCSI_SATA_VIA is not set
@@ -443,14 +477,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
443# CONFIG_SCSI_IPR is not set 477# CONFIG_SCSI_IPR is not set
444# CONFIG_SCSI_QLOGIC_FC is not set 478# CONFIG_SCSI_QLOGIC_FC is not set
445CONFIG_SCSI_QLOGIC_1280=y 479CONFIG_SCSI_QLOGIC_1280=y
446# CONFIG_SCSI_QLOGIC_1280_1040 is not set 480# CONFIG_SCSI_QLA_FC is not set
447CONFIG_SCSI_QLA2XXX=y
448CONFIG_SCSI_QLA21XX=m
449CONFIG_SCSI_QLA22XX=m
450CONFIG_SCSI_QLA2300=m
451CONFIG_SCSI_QLA2322=m
452# CONFIG_SCSI_QLA6312 is not set
453# CONFIG_SCSI_QLA24XX is not set
454# CONFIG_SCSI_LPFC is not set 481# CONFIG_SCSI_LPFC is not set
455# CONFIG_SCSI_DC395x is not set 482# CONFIG_SCSI_DC395x is not set
456# CONFIG_SCSI_DC390T is not set 483# CONFIG_SCSI_DC390T is not set
@@ -483,6 +510,7 @@ CONFIG_DM_MULTIPATH=m
483CONFIG_FUSION=y 510CONFIG_FUSION=y
484CONFIG_FUSION_SPI=y 511CONFIG_FUSION_SPI=y
485CONFIG_FUSION_FC=m 512CONFIG_FUSION_FC=m
513# CONFIG_FUSION_SAS is not set
486CONFIG_FUSION_MAX_SGE=128 514CONFIG_FUSION_MAX_SGE=128
487# CONFIG_FUSION_CTL is not set 515# CONFIG_FUSION_CTL is not set
488 516
@@ -523,6 +551,7 @@ CONFIG_NET_ETHERNET=y
523CONFIG_MII=m 551CONFIG_MII=m
524# CONFIG_HAPPYMEAL is not set 552# CONFIG_HAPPYMEAL is not set
525# CONFIG_SUNGEM is not set 553# CONFIG_SUNGEM is not set
554# CONFIG_CASSINI is not set
526# CONFIG_NET_VENDOR_3COM is not set 555# CONFIG_NET_VENDOR_3COM is not set
527 556
528# 557#
@@ -572,6 +601,7 @@ CONFIG_E1000=y
572# CONFIG_R8169 is not set 601# CONFIG_R8169 is not set
573# CONFIG_SIS190 is not set 602# CONFIG_SIS190 is not set
574# CONFIG_SKGE is not set 603# CONFIG_SKGE is not set
604# CONFIG_SKY2 is not set
575# CONFIG_SK98LIN is not set 605# CONFIG_SK98LIN is not set
576# CONFIG_VIA_VELOCITY is not set 606# CONFIG_VIA_VELOCITY is not set
577CONFIG_TIGON3=y 607CONFIG_TIGON3=y
@@ -676,12 +706,15 @@ CONFIG_VT=y
676CONFIG_VT_CONSOLE=y 706CONFIG_VT_CONSOLE=y
677CONFIG_HW_CONSOLE=y 707CONFIG_HW_CONSOLE=y
678CONFIG_SERIAL_NONSTANDARD=y 708CONFIG_SERIAL_NONSTANDARD=y
709# CONFIG_COMPUTONE is not set
679# CONFIG_ROCKETPORT is not set 710# CONFIG_ROCKETPORT is not set
680# CONFIG_CYCLADES is not set 711# CONFIG_CYCLADES is not set
681# CONFIG_DIGIEPCA is not set 712# CONFIG_DIGIEPCA is not set
713# CONFIG_MOXA_INTELLIO is not set
682# CONFIG_MOXA_SMARTIO is not set 714# CONFIG_MOXA_SMARTIO is not set
683# CONFIG_ISI is not set 715# CONFIG_ISI is not set
684# CONFIG_SYNCLINKMP is not set 716# CONFIG_SYNCLINKMP is not set
717# CONFIG_SYNCLINK_GT is not set
685# CONFIG_N_HDLC is not set 718# CONFIG_N_HDLC is not set
686# CONFIG_SPECIALIX is not set 719# CONFIG_SPECIALIX is not set
687# CONFIG_SX is not set 720# CONFIG_SX is not set
@@ -697,6 +730,7 @@ CONFIG_SERIAL_8250=y
697CONFIG_SERIAL_8250_CONSOLE=y 730CONFIG_SERIAL_8250_CONSOLE=y
698CONFIG_SERIAL_8250_ACPI=y 731CONFIG_SERIAL_8250_ACPI=y
699CONFIG_SERIAL_8250_NR_UARTS=6 732CONFIG_SERIAL_8250_NR_UARTS=6
733CONFIG_SERIAL_8250_RUNTIME_UARTS=4
700CONFIG_SERIAL_8250_EXTENDED=y 734CONFIG_SERIAL_8250_EXTENDED=y
701CONFIG_SERIAL_8250_SHARE_IRQ=y 735CONFIG_SERIAL_8250_SHARE_IRQ=y
702# CONFIG_SERIAL_8250_DETECT_IRQ is not set 736# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -710,6 +744,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
710CONFIG_SERIAL_SGI_L1_CONSOLE=y 744CONFIG_SERIAL_SGI_L1_CONSOLE=y
711# CONFIG_SERIAL_JSM is not set 745# CONFIG_SERIAL_JSM is not set
712CONFIG_SERIAL_SGI_IOC4=y 746CONFIG_SERIAL_SGI_IOC4=y
747# CONFIG_SERIAL_SGI_IOC3 is not set
713CONFIG_UNIX98_PTYS=y 748CONFIG_UNIX98_PTYS=y
714CONFIG_LEGACY_PTYS=y 749CONFIG_LEGACY_PTYS=y
715CONFIG_LEGACY_PTY_COUNT=256 750CONFIG_LEGACY_PTY_COUNT=256
@@ -745,10 +780,10 @@ CONFIG_DRM_SIS=m
745# CONFIG_DRM_VIA is not set 780# CONFIG_DRM_VIA is not set
746# CONFIG_DRM_SAVAGE is not set 781# CONFIG_DRM_SAVAGE is not set
747CONFIG_RAW_DRIVER=m 782CONFIG_RAW_DRIVER=m
783CONFIG_MAX_RAW_DEVS=256
748CONFIG_HPET=y 784CONFIG_HPET=y
749# CONFIG_HPET_RTC_IRQ is not set 785# CONFIG_HPET_RTC_IRQ is not set
750CONFIG_HPET_MMAP=y 786CONFIG_HPET_MMAP=y
751CONFIG_MAX_RAW_DEVS=256
752# CONFIG_HANGCHECK_TIMER is not set 787# CONFIG_HANGCHECK_TIMER is not set
753CONFIG_MMTIMER=y 788CONFIG_MMTIMER=y
754 789
@@ -756,6 +791,7 @@ CONFIG_MMTIMER=y
756# TPM devices 791# TPM devices
757# 792#
758# CONFIG_TCG_TPM is not set 793# CONFIG_TCG_TPM is not set
794# CONFIG_TELCLOCK is not set
759 795
760# 796#
761# I2C support 797# I2C support
@@ -763,6 +799,12 @@ CONFIG_MMTIMER=y
763# CONFIG_I2C is not set 799# CONFIG_I2C is not set
764 800
765# 801#
802# SPI support
803#
804# CONFIG_SPI is not set
805# CONFIG_SPI_MASTER is not set
806
807#
766# Dallas's 1-wire bus 808# Dallas's 1-wire bus
767# 809#
768# CONFIG_W1 is not set 810# CONFIG_W1 is not set
@@ -772,6 +814,7 @@ CONFIG_MMTIMER=y
772# 814#
773CONFIG_HWMON=y 815CONFIG_HWMON=y
774# CONFIG_HWMON_VID is not set 816# CONFIG_HWMON_VID is not set
817# CONFIG_SENSORS_F71805F is not set
775# CONFIG_HWMON_DEBUG_CHIP is not set 818# CONFIG_HWMON_DEBUG_CHIP is not set
776 819
777# 820#
@@ -822,26 +865,28 @@ CONFIG_SND_OSSEMUL=y
822CONFIG_SND_MIXER_OSS=m 865CONFIG_SND_MIXER_OSS=m
823CONFIG_SND_PCM_OSS=m 866CONFIG_SND_PCM_OSS=m
824CONFIG_SND_SEQUENCER_OSS=y 867CONFIG_SND_SEQUENCER_OSS=y
868# CONFIG_SND_DYNAMIC_MINORS is not set
869CONFIG_SND_SUPPORT_OLD_API=y
825CONFIG_SND_VERBOSE_PRINTK=y 870CONFIG_SND_VERBOSE_PRINTK=y
826# CONFIG_SND_DEBUG is not set 871# CONFIG_SND_DEBUG is not set
827CONFIG_SND_GENERIC_DRIVER=y
828 872
829# 873#
830# Generic devices 874# Generic devices
831# 875#
832CONFIG_SND_MPU401_UART=m 876CONFIG_SND_MPU401_UART=m
833CONFIG_SND_OPL3_LIB=m 877CONFIG_SND_OPL3_LIB=m
878CONFIG_SND_AC97_CODEC=m
879CONFIG_SND_AC97_BUS=m
834CONFIG_SND_DUMMY=m 880CONFIG_SND_DUMMY=m
835CONFIG_SND_VIRMIDI=m 881CONFIG_SND_VIRMIDI=m
836CONFIG_SND_MTPAV=m 882CONFIG_SND_MTPAV=m
837CONFIG_SND_SERIAL_U16550=m 883CONFIG_SND_SERIAL_U16550=m
838CONFIG_SND_MPU401=m 884CONFIG_SND_MPU401=m
839CONFIG_SND_AC97_CODEC=m
840CONFIG_SND_AC97_BUS=m
841 885
842# 886#
843# PCI devices 887# PCI devices
844# 888#
889# CONFIG_SND_AD1889 is not set
845# CONFIG_SND_ALI5451 is not set 890# CONFIG_SND_ALI5451 is not set
846# CONFIG_SND_ATIIXP is not set 891# CONFIG_SND_ATIIXP is not set
847# CONFIG_SND_ATIIXP_MODEM is not set 892# CONFIG_SND_ATIIXP_MODEM is not set
@@ -850,40 +895,40 @@ CONFIG_SND_AC97_BUS=m
850# CONFIG_SND_AU8830 is not set 895# CONFIG_SND_AU8830 is not set
851# CONFIG_SND_AZT3328 is not set 896# CONFIG_SND_AZT3328 is not set
852# CONFIG_SND_BT87X is not set 897# CONFIG_SND_BT87X is not set
898# CONFIG_SND_CA0106 is not set
899# CONFIG_SND_CMIPCI is not set
900CONFIG_SND_CS4281=m
853CONFIG_SND_CS46XX=m 901CONFIG_SND_CS46XX=m
854CONFIG_SND_CS46XX_NEW_DSP=y 902CONFIG_SND_CS46XX_NEW_DSP=y
855CONFIG_SND_CS4281=m
856CONFIG_SND_EMU10K1=m 903CONFIG_SND_EMU10K1=m
857# CONFIG_SND_EMU10K1X is not set 904# CONFIG_SND_EMU10K1X is not set
858# CONFIG_SND_CA0106 is not set
859# CONFIG_SND_KORG1212 is not set
860# CONFIG_SND_MIXART is not set
861# CONFIG_SND_NM256 is not set
862# CONFIG_SND_RME32 is not set
863# CONFIG_SND_RME96 is not set
864# CONFIG_SND_RME9652 is not set
865# CONFIG_SND_HDSP is not set
866# CONFIG_SND_HDSPM is not set
867# CONFIG_SND_TRIDENT is not set
868# CONFIG_SND_YMFPCI is not set
869# CONFIG_SND_AD1889 is not set
870# CONFIG_SND_CMIPCI is not set
871# CONFIG_SND_ENS1370 is not set 905# CONFIG_SND_ENS1370 is not set
872# CONFIG_SND_ENS1371 is not set 906# CONFIG_SND_ENS1371 is not set
873# CONFIG_SND_ES1938 is not set 907# CONFIG_SND_ES1938 is not set
874# CONFIG_SND_ES1968 is not set 908# CONFIG_SND_ES1968 is not set
875# CONFIG_SND_MAESTRO3 is not set
876CONFIG_SND_FM801=m 909CONFIG_SND_FM801=m
877# CONFIG_SND_FM801_TEA575X is not set 910# CONFIG_SND_FM801_TEA575X is not set
911# CONFIG_SND_HDA_INTEL is not set
912# CONFIG_SND_HDSP is not set
913# CONFIG_SND_HDSPM is not set
878# CONFIG_SND_ICE1712 is not set 914# CONFIG_SND_ICE1712 is not set
879# CONFIG_SND_ICE1724 is not set 915# CONFIG_SND_ICE1724 is not set
880# CONFIG_SND_INTEL8X0 is not set 916# CONFIG_SND_INTEL8X0 is not set
881# CONFIG_SND_INTEL8X0M is not set 917# CONFIG_SND_INTEL8X0M is not set
918# CONFIG_SND_KORG1212 is not set
919# CONFIG_SND_MAESTRO3 is not set
920# CONFIG_SND_MIXART is not set
921# CONFIG_SND_NM256 is not set
922# CONFIG_SND_PCXHR is not set
923# CONFIG_SND_RME32 is not set
924# CONFIG_SND_RME96 is not set
925# CONFIG_SND_RME9652 is not set
882# CONFIG_SND_SONICVIBES is not set 926# CONFIG_SND_SONICVIBES is not set
927# CONFIG_SND_TRIDENT is not set
883# CONFIG_SND_VIA82XX is not set 928# CONFIG_SND_VIA82XX is not set
884# CONFIG_SND_VIA82XX_MODEM is not set 929# CONFIG_SND_VIA82XX_MODEM is not set
885# CONFIG_SND_VX222 is not set 930# CONFIG_SND_VX222 is not set
886# CONFIG_SND_HDA_INTEL is not set 931# CONFIG_SND_YMFPCI is not set
887 932
888# 933#
889# USB devices 934# USB devices
@@ -929,12 +974,15 @@ CONFIG_USB_UHCI_HCD=m
929# USB Device Class drivers 974# USB Device Class drivers
930# 975#
931# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set 976# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
932# CONFIG_USB_BLUETOOTH_TTY is not set
933# CONFIG_USB_ACM is not set 977# CONFIG_USB_ACM is not set
934# CONFIG_USB_PRINTER is not set 978# CONFIG_USB_PRINTER is not set
935 979
936# 980#
937# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 981# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
982#
983
984#
985# may also be needed; see USB_STORAGE Help for more information
938# 986#
939CONFIG_USB_STORAGE=m 987CONFIG_USB_STORAGE=m
940# CONFIG_USB_STORAGE_DEBUG is not set 988# CONFIG_USB_STORAGE_DEBUG is not set
@@ -946,12 +994,15 @@ CONFIG_USB_STORAGE=m
946# CONFIG_USB_STORAGE_SDDR09 is not set 994# CONFIG_USB_STORAGE_SDDR09 is not set
947# CONFIG_USB_STORAGE_SDDR55 is not set 995# CONFIG_USB_STORAGE_SDDR55 is not set
948# CONFIG_USB_STORAGE_JUMPSHOT is not set 996# CONFIG_USB_STORAGE_JUMPSHOT is not set
997# CONFIG_USB_STORAGE_ALAUDA is not set
998# CONFIG_USB_LIBUSUAL is not set
949 999
950# 1000#
951# USB Input Devices 1001# USB Input Devices
952# 1002#
953CONFIG_USB_HID=m 1003CONFIG_USB_HID=m
954CONFIG_USB_HIDINPUT=y 1004CONFIG_USB_HIDINPUT=y
1005# CONFIG_USB_HIDINPUT_POWERBOOK is not set
955# CONFIG_HID_FF is not set 1006# CONFIG_HID_FF is not set
956# CONFIG_USB_HIDDEV is not set 1007# CONFIG_USB_HIDDEV is not set
957 1008
@@ -971,6 +1022,7 @@ CONFIG_USB_HIDINPUT=y
971# CONFIG_USB_YEALINK is not set 1022# CONFIG_USB_YEALINK is not set
972# CONFIG_USB_XPAD is not set 1023# CONFIG_USB_XPAD is not set
973# CONFIG_USB_ATI_REMOTE is not set 1024# CONFIG_USB_ATI_REMOTE is not set
1025# CONFIG_USB_ATI_REMOTE2 is not set
974# CONFIG_USB_KEYSPAN_REMOTE is not set 1026# CONFIG_USB_KEYSPAN_REMOTE is not set
975# CONFIG_USB_APPLETOUCH is not set 1027# CONFIG_USB_APPLETOUCH is not set
976 1028
@@ -1050,11 +1102,17 @@ CONFIG_INFINIBAND_MTHCA=m
1050# CONFIG_INFINIBAND_MTHCA_DEBUG is not set 1102# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
1051CONFIG_INFINIBAND_IPOIB=m 1103CONFIG_INFINIBAND_IPOIB=m
1052# CONFIG_INFINIBAND_IPOIB_DEBUG is not set 1104# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
1105# CONFIG_INFINIBAND_SRP is not set
1053 1106
1054# 1107#
1055# SN Devices 1108# SN Devices
1056# 1109#
1057CONFIG_SGI_IOC4=y 1110CONFIG_SGI_IOC4=y
1111CONFIG_SGI_IOC3=m
1112
1113#
1114# EDAC - error detection and reporting (RAS)
1115#
1058 1116
1059# 1117#
1060# File systems 1118# File systems
@@ -1085,6 +1143,7 @@ CONFIG_XFS_EXPORT=y
1085# CONFIG_XFS_SECURITY is not set 1143# CONFIG_XFS_SECURITY is not set
1086# CONFIG_XFS_POSIX_ACL is not set 1144# CONFIG_XFS_POSIX_ACL is not set
1087# CONFIG_XFS_RT is not set 1145# CONFIG_XFS_RT is not set
1146# CONFIG_OCFS2_FS is not set
1088# CONFIG_MINIX_FS is not set 1147# CONFIG_MINIX_FS is not set
1089# CONFIG_ROMFS_FS is not set 1148# CONFIG_ROMFS_FS is not set
1090CONFIG_INOTIFY=y 1149CONFIG_INOTIFY=y
@@ -1126,6 +1185,7 @@ CONFIG_HUGETLBFS=y
1126CONFIG_HUGETLB_PAGE=y 1185CONFIG_HUGETLB_PAGE=y
1127CONFIG_RAMFS=y 1186CONFIG_RAMFS=y
1128# CONFIG_RELAYFS_FS is not set 1187# CONFIG_RELAYFS_FS is not set
1188# CONFIG_CONFIGFS_FS is not set
1129 1189
1130# 1190#
1131# Miscellaneous filesystems 1191# Miscellaneous filesystems
@@ -1195,6 +1255,7 @@ CONFIG_MSDOS_PARTITION=y
1195CONFIG_SGI_PARTITION=y 1255CONFIG_SGI_PARTITION=y
1196# CONFIG_ULTRIX_PARTITION is not set 1256# CONFIG_ULTRIX_PARTITION is not set
1197# CONFIG_SUN_PARTITION is not set 1257# CONFIG_SUN_PARTITION is not set
1258# CONFIG_KARMA_PARTITION is not set
1198CONFIG_EFI_PARTITION=y 1259CONFIG_EFI_PARTITION=y
1199 1260
1200# 1261#
@@ -1260,26 +1321,30 @@ CONFIG_GENERIC_PENDING_IRQ=y
1260# CONFIG_HP_SIMSCSI is not set 1321# CONFIG_HP_SIMSCSI is not set
1261 1322
1262# 1323#
1263# Profiling support 1324# Instrumentation Support
1264# 1325#
1265# CONFIG_PROFILING is not set 1326# CONFIG_PROFILING is not set
1327# CONFIG_KPROBES is not set
1266 1328
1267# 1329#
1268# Kernel hacking 1330# Kernel hacking
1269# 1331#
1270# CONFIG_PRINTK_TIME is not set 1332# CONFIG_PRINTK_TIME is not set
1271CONFIG_DEBUG_KERNEL=y
1272CONFIG_MAGIC_SYSRQ=y 1333CONFIG_MAGIC_SYSRQ=y
1334CONFIG_DEBUG_KERNEL=y
1273CONFIG_LOG_BUF_SHIFT=20 1335CONFIG_LOG_BUF_SHIFT=20
1274CONFIG_DETECT_SOFTLOCKUP=y 1336CONFIG_DETECT_SOFTLOCKUP=y
1275# CONFIG_SCHEDSTATS is not set 1337# CONFIG_SCHEDSTATS is not set
1276# CONFIG_DEBUG_SLAB is not set 1338# CONFIG_DEBUG_SLAB is not set
1339CONFIG_DEBUG_MUTEXES=y
1277# CONFIG_DEBUG_SPINLOCK is not set 1340# CONFIG_DEBUG_SPINLOCK is not set
1278# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1341# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1279# CONFIG_DEBUG_KOBJECT is not set 1342# CONFIG_DEBUG_KOBJECT is not set
1280# CONFIG_DEBUG_INFO is not set 1343# CONFIG_DEBUG_INFO is not set
1281# CONFIG_DEBUG_FS is not set 1344# CONFIG_DEBUG_FS is not set
1282# CONFIG_KPROBES is not set 1345# CONFIG_DEBUG_VM is not set
1346CONFIG_FORCED_INLINING=y
1347# CONFIG_RCU_TORTURE_TEST is not set
1283CONFIG_IA64_GRANULE_16MB=y 1348CONFIG_IA64_GRANULE_16MB=y
1284# CONFIG_IA64_GRANULE_64MB is not set 1349# CONFIG_IA64_GRANULE_64MB is not set
1285# CONFIG_IA64_PRINT_HAZARDS is not set 1350# CONFIG_IA64_PRINT_HAZARDS is not set
diff --git a/arch/ia64/dig/setup.c b/arch/ia64/dig/setup.c
index d58003f1ad02..c9104bfff667 100644
--- a/arch/ia64/dig/setup.c
+++ b/arch/ia64/dig/setup.c
@@ -25,16 +25,6 @@
25#include <asm/machvec.h> 25#include <asm/machvec.h>
26#include <asm/system.h> 26#include <asm/system.h>
27 27
28/*
29 * This is here so we can use the CMOS detection in ide-probe.c to
30 * determine what drives are present. In theory, we don't need this
31 * as the auto-detection could be done via ide-probe.c:do_probe() but
32 * in practice that would be much slower, which is painful when
33 * running in the simulator. Note that passing zeroes in DRIVE_INFO
34 * is sufficient (the IDE driver will autodetect the drive geometry).
35 */
36char drive_info[4*16];
37
38void __init 28void __init
39dig_setup (char **cmdline_p) 29dig_setup (char **cmdline_p)
40{ 30{
diff --git a/arch/ia64/ia32/ia32_signal.c b/arch/ia64/ia32/ia32_signal.c
index 5856510210fa..b3355a9ca2c3 100644
--- a/arch/ia64/ia32/ia32_signal.c
+++ b/arch/ia64/ia32/ia32_signal.c
@@ -515,6 +515,7 @@ sys32_signal (int sig, unsigned int handler)
515 515
516 sigact_set_handler(&new_sa, handler, 0); 516 sigact_set_handler(&new_sa, handler, 0);
517 new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK; 517 new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
518 sigemptyset(&new_sa.sa.sa_mask);
518 519
519 ret = do_sigaction(sig, &new_sa, &old_sa); 520 ret = do_sigaction(sig, &new_sa, &old_sa);
520 521
diff --git a/arch/ia64/kernel/Makefile b/arch/ia64/kernel/Makefile
index 307514f7a282..09a0dbc17fb6 100644
--- a/arch/ia64/kernel/Makefile
+++ b/arch/ia64/kernel/Makefile
@@ -13,6 +13,11 @@ obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o
13obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o 13obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o
14obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o 14obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o
15obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o 15obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o
16
17ifneq ($(CONFIG_ACPI_PROCESSOR),)
18obj-y += acpi-processor.o
19endif
20
16obj-$(CONFIG_IA64_PALINFO) += palinfo.o 21obj-$(CONFIG_IA64_PALINFO) += palinfo.o
17obj-$(CONFIG_IOSAPIC) += iosapic.o 22obj-$(CONFIG_IOSAPIC) += iosapic.o
18obj-$(CONFIG_MODULES) += module.o 23obj-$(CONFIG_MODULES) += module.o
diff --git a/arch/ia64/kernel/acpi-ext.c b/arch/ia64/kernel/acpi-ext.c
index 13a5b3b49bf8..4a5574ff007b 100644
--- a/arch/ia64/kernel/acpi-ext.c
+++ b/arch/ia64/kernel/acpi-ext.c
@@ -33,33 +33,33 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
33 struct acpi_vendor_info *info = (struct acpi_vendor_info *)context; 33 struct acpi_vendor_info *info = (struct acpi_vendor_info *)context;
34 struct acpi_resource_vendor *vendor; 34 struct acpi_resource_vendor *vendor;
35 struct acpi_vendor_descriptor *descriptor; 35 struct acpi_vendor_descriptor *descriptor;
36 u32 length; 36 u32 byte_length;
37 37
38 if (resource->id != ACPI_RSTYPE_VENDOR) 38 if (resource->type != ACPI_RESOURCE_TYPE_VENDOR)
39 return AE_OK; 39 return AE_OK;
40 40
41 vendor = (struct acpi_resource_vendor *)&resource->data; 41 vendor = (struct acpi_resource_vendor *)&resource->data;
42 descriptor = (struct acpi_vendor_descriptor *)vendor->reserved; 42 descriptor = (struct acpi_vendor_descriptor *)vendor->byte_data;
43 if (vendor->length <= sizeof(*info->descriptor) || 43 if (vendor->byte_length <= sizeof(*info->descriptor) ||
44 descriptor->guid_id != info->descriptor->guid_id || 44 descriptor->guid_id != info->descriptor->guid_id ||
45 efi_guidcmp(descriptor->guid, info->descriptor->guid)) 45 efi_guidcmp(descriptor->guid, info->descriptor->guid))
46 return AE_OK; 46 return AE_OK;
47 47
48 length = vendor->length - sizeof(struct acpi_vendor_descriptor); 48 byte_length = vendor->byte_length - sizeof(struct acpi_vendor_descriptor);
49 info->data = acpi_os_allocate(length); 49 info->data = acpi_os_allocate(byte_length);
50 if (!info->data) 50 if (!info->data)
51 return AE_NO_MEMORY; 51 return AE_NO_MEMORY;
52 52
53 memcpy(info->data, 53 memcpy(info->data,
54 vendor->reserved + sizeof(struct acpi_vendor_descriptor), 54 vendor->byte_data + sizeof(struct acpi_vendor_descriptor),
55 length); 55 byte_length);
56 info->length = length; 56 info->length = byte_length;
57 return AE_CTRL_TERMINATE; 57 return AE_CTRL_TERMINATE;
58} 58}
59 59
60acpi_status 60acpi_status
61acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id, 61acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id,
62 u8 ** data, u32 * length) 62 u8 ** data, u32 * byte_length)
63{ 63{
64 struct acpi_vendor_info info; 64 struct acpi_vendor_info info;
65 65
@@ -72,7 +72,7 @@ acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id,
72 return AE_NOT_FOUND; 72 return AE_NOT_FOUND;
73 73
74 *data = info.data; 74 *data = info.data;
75 *length = info.length; 75 *byte_length = info.length;
76 return AE_OK; 76 return AE_OK;
77} 77}
78 78
diff --git a/arch/ia64/kernel/acpi-processor.c b/arch/ia64/kernel/acpi-processor.c
new file mode 100644
index 000000000000..e683630c8ce2
--- /dev/null
+++ b/arch/ia64/kernel/acpi-processor.c
@@ -0,0 +1,67 @@
1/*
2 * arch/ia64/kernel/cpufreq/processor.c
3 *
4 * Copyright (C) 2005 Intel Corporation
5 * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
6 * - Added _PDC for platforms with Intel CPUs
7 */
8
9#include <linux/kernel.h>
10#include <linux/module.h>
11#include <linux/init.h>
12#include <linux/acpi.h>
13
14#include <acpi/processor.h>
15#include <asm/acpi.h>
16
17static void init_intel_pdc(struct acpi_processor *pr)
18{
19 struct acpi_object_list *obj_list;
20 union acpi_object *obj;
21 u32 *buf;
22
23 /* allocate and initialize pdc. It will be used later. */
24 obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
25 if (!obj_list) {
26 printk(KERN_ERR "Memory allocation error\n");
27 return;
28 }
29
30 obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
31 if (!obj) {
32 printk(KERN_ERR "Memory allocation error\n");
33 kfree(obj_list);
34 return;
35 }
36
37 buf = kmalloc(12, GFP_KERNEL);
38 if (!buf) {
39 printk(KERN_ERR "Memory allocation error\n");
40 kfree(obj);
41 kfree(obj_list);
42 return;
43 }
44
45 buf[0] = ACPI_PDC_REVISION_ID;
46 buf[1] = 1;
47 buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP;
48
49 obj->type = ACPI_TYPE_BUFFER;
50 obj->buffer.length = 12;
51 obj->buffer.pointer = (u8 *) buf;
52 obj_list->count = 1;
53 obj_list->pointer = obj;
54 pr->pdc = obj_list;
55
56 return;
57}
58
59/* Initialize _PDC data based on the CPU vendor */
60void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
61{
62 pr->pdc = NULL;
63 init_intel_pdc(pr);
64 return;
65}
66
67EXPORT_SYMBOL(arch_acpi_processor_init_pdc);
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
index 9ad94ddf6687..ecd44bdc8394 100644
--- a/arch/ia64/kernel/acpi.c
+++ b/arch/ia64/kernel/acpi.c
@@ -567,16 +567,16 @@ void __init acpi_numa_arch_fixup(void)
567 * success: return IRQ number (>=0) 567 * success: return IRQ number (>=0)
568 * failure: return < 0 568 * failure: return < 0
569 */ 569 */
570int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) 570int acpi_register_gsi(u32 gsi, int triggering, int polarity)
571{ 571{
572 if (has_8259 && gsi < 16) 572 if (has_8259 && gsi < 16)
573 return isa_irq_to_vector(gsi); 573 return isa_irq_to_vector(gsi);
574 574
575 return iosapic_register_intr(gsi, 575 return iosapic_register_intr(gsi,
576 (active_high_low == 576 (polarity ==
577 ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : 577 ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH :
578 IOSAPIC_POL_LOW, 578 IOSAPIC_POL_LOW,
579 (edge_level == 579 (triggering ==
580 ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : 580 ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE :
581 IOSAPIC_LEVEL); 581 IOSAPIC_LEVEL);
582} 582}
@@ -761,6 +761,59 @@ int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
761 return (0); 761 return (0);
762} 762}
763 763
764int additional_cpus __initdata = -1;
765
766static __init int setup_additional_cpus(char *s)
767{
768 if (s)
769 additional_cpus = simple_strtol(s, NULL, 0);
770
771 return 0;
772}
773
774early_param("additional_cpus", setup_additional_cpus);
775
776/*
777 * cpu_possible_map should be static, it cannot change as cpu's
778 * are onlined, or offlined. The reason is per-cpu data-structures
779 * are allocated by some modules at init time, and dont expect to
780 * do this dynamically on cpu arrival/departure.
781 * cpu_present_map on the other hand can change dynamically.
782 * In case when cpu_hotplug is not compiled, then we resort to current
783 * behaviour, which is cpu_possible == cpu_present.
784 * - Ashok Raj
785 *
786 * Three ways to find out the number of additional hotplug CPUs:
787 * - If the BIOS specified disabled CPUs in ACPI/mptables use that.
788 * - The user can overwrite it with additional_cpus=NUM
789 * - Otherwise don't reserve additional CPUs.
790 */
791__init void prefill_possible_map(void)
792{
793 int i;
794 int possible, disabled_cpus;
795
796 disabled_cpus = total_cpus - available_cpus;
797
798 if (additional_cpus == -1) {
799 if (disabled_cpus > 0)
800 additional_cpus = disabled_cpus;
801 else
802 additional_cpus = 0;
803 }
804
805 possible = available_cpus + additional_cpus;
806
807 if (possible > NR_CPUS)
808 possible = NR_CPUS;
809
810 printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
811 possible, max((possible - available_cpus), 0));
812
813 for (i = 0; i < possible; i++)
814 cpu_set(i, cpu_possible_map);
815}
816
764int acpi_map_lsapic(acpi_handle handle, int *pcpu) 817int acpi_map_lsapic(acpi_handle handle, int *pcpu)
765{ 818{
766 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 819 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
diff --git a/arch/ia64/kernel/cpufreq/Makefile b/arch/ia64/kernel/cpufreq/Makefile
index f748d34c02f0..4838f2a57c7a 100644
--- a/arch/ia64/kernel/cpufreq/Makefile
+++ b/arch/ia64/kernel/cpufreq/Makefile
@@ -1 +1,2 @@
1obj-$(CONFIG_IA64_ACPI_CPUFREQ) += acpi-cpufreq.o 1obj-$(CONFIG_IA64_ACPI_CPUFREQ) += acpi-cpufreq.o
2
diff --git a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
index da4d5cf80a48..5a1bf815282d 100644
--- a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
+++ b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
@@ -269,48 +269,6 @@ acpi_cpufreq_verify (
269} 269}
270 270
271 271
272/*
273 * processor_init_pdc - let BIOS know about the SMP capabilities
274 * of this driver
275 * @perf: processor-specific acpi_io_data struct
276 * @cpu: CPU being initialized
277 *
278 * To avoid issues with legacy OSes, some BIOSes require to be informed of
279 * the SMP capabilities of OS P-state driver. Here we set the bits in _PDC
280 * accordingly. Actual call to _PDC is done in driver/acpi/processor.c
281 */
282static void
283processor_init_pdc (
284 struct acpi_processor_performance *perf,
285 unsigned int cpu,
286 struct acpi_object_list *obj_list
287 )
288{
289 union acpi_object *obj;
290 u32 *buf;
291
292 dprintk("processor_init_pdc\n");
293
294 perf->pdc = NULL;
295 /* Initialize pdc. It will be used later. */
296 if (!obj_list)
297 return;
298
299 if (!(obj_list->count && obj_list->pointer))
300 return;
301
302 obj = obj_list->pointer;
303 if ((obj->buffer.length == 12) && obj->buffer.pointer) {
304 buf = (u32 *)obj->buffer.pointer;
305 buf[0] = ACPI_PDC_REVISION_ID;
306 buf[1] = 1;
307 buf[2] = ACPI_PDC_EST_CAPABILITY_SMP;
308 perf->pdc = obj_list;
309 }
310 return;
311}
312
313
314static int 272static int
315acpi_cpufreq_cpu_init ( 273acpi_cpufreq_cpu_init (
316 struct cpufreq_policy *policy) 274 struct cpufreq_policy *policy)
@@ -320,14 +278,7 @@ acpi_cpufreq_cpu_init (
320 struct cpufreq_acpi_io *data; 278 struct cpufreq_acpi_io *data;
321 unsigned int result = 0; 279 unsigned int result = 0;
322 280
323 union acpi_object arg0 = {ACPI_TYPE_BUFFER};
324 u32 arg0_buf[3];
325 struct acpi_object_list arg_list = {1, &arg0};
326
327 dprintk("acpi_cpufreq_cpu_init\n"); 281 dprintk("acpi_cpufreq_cpu_init\n");
328 /* setup arg_list for _PDC settings */
329 arg0.buffer.length = 12;
330 arg0.buffer.pointer = (u8 *) arg0_buf;
331 282
332 data = kmalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); 283 data = kmalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL);
333 if (!data) 284 if (!data)
@@ -337,9 +288,7 @@ acpi_cpufreq_cpu_init (
337 288
338 acpi_io_data[cpu] = data; 289 acpi_io_data[cpu] = data;
339 290
340 processor_init_pdc(&data->acpi_data, cpu, &arg_list);
341 result = acpi_processor_register_performance(&data->acpi_data, cpu); 291 result = acpi_processor_register_performance(&data->acpi_data, cpu);
342 data->acpi_data.pdc = NULL;
343 292
344 if (result) 293 if (result)
345 goto err_free; 294 goto err_free;
diff --git a/arch/ia64/kernel/cyclone.c b/arch/ia64/kernel/cyclone.c
index 6ade3790ce07..e00b21514f7c 100644
--- a/arch/ia64/kernel/cyclone.c
+++ b/arch/ia64/kernel/cyclone.c
@@ -36,7 +36,7 @@ int __init init_cyclone_clock(void)
36 u32* volatile cyclone_timer; /* Cyclone MPMC0 register */ 36 u32* volatile cyclone_timer; /* Cyclone MPMC0 register */
37 37
38 if (!use_cyclone) 38 if (!use_cyclone)
39 return -ENODEV; 39 return 0;
40 40
41 printk(KERN_INFO "Summit chipset: Starting Cyclone Counter.\n"); 41 printk(KERN_INFO "Summit chipset: Starting Cyclone Counter.\n");
42 42
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c
index c485a3b32ba8..9990320b6f9a 100644
--- a/arch/ia64/kernel/efi.c
+++ b/arch/ia64/kernel/efi.c
@@ -410,24 +410,16 @@ efi_init (void)
410 efi_config_table_t *config_tables; 410 efi_config_table_t *config_tables;
411 efi_char16_t *c16; 411 efi_char16_t *c16;
412 u64 efi_desc_size; 412 u64 efi_desc_size;
413 char *cp, *end, vendor[100] = "unknown"; 413 char *cp, vendor[100] = "unknown";
414 extern char saved_command_line[]; 414 extern char saved_command_line[];
415 int i; 415 int i;
416 416
417 /* it's too early to be able to use the standard kernel command line support... */ 417 /* it's too early to be able to use the standard kernel command line support... */
418 for (cp = saved_command_line; *cp; ) { 418 for (cp = saved_command_line; *cp; ) {
419 if (memcmp(cp, "mem=", 4) == 0) { 419 if (memcmp(cp, "mem=", 4) == 0) {
420 cp += 4; 420 mem_limit = memparse(cp + 4, &cp);
421 mem_limit = memparse(cp, &end);
422 if (end != cp)
423 break;
424 cp = end;
425 } else if (memcmp(cp, "max_addr=", 9) == 0) { 421 } else if (memcmp(cp, "max_addr=", 9) == 0) {
426 cp += 9; 422 max_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp));
427 max_addr = GRANULEROUNDDOWN(memparse(cp, &end));
428 if (end != cp)
429 break;
430 cp = end;
431 } else { 423 } else {
432 while (*cp != ' ' && *cp) 424 while (*cp != ' ' && *cp)
433 ++cp; 425 ++cp;
@@ -458,7 +450,7 @@ efi_init (void)
458 /* Show what we know for posterity */ 450 /* Show what we know for posterity */
459 c16 = __va(efi.systab->fw_vendor); 451 c16 = __va(efi.systab->fw_vendor);
460 if (c16) { 452 if (c16) {
461 for (i = 0;i < (int) sizeof(vendor) && *c16; ++i) 453 for (i = 0;i < (int) sizeof(vendor) - 1 && *c16; ++i)
462 vendor[i] = *c16++; 454 vendor[i] = *c16++;
463 vendor[i] = '\0'; 455 vendor[i] = '\0';
464 } 456 }
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S
index 7a6ffd613789..930fdfca6ddb 100644
--- a/arch/ia64/kernel/entry.S
+++ b/arch/ia64/kernel/entry.S
@@ -569,7 +569,9 @@ GLOBAL_ENTRY(ia64_trace_syscall)
569.mem.offset 0,0; st8.spill [r2]=r8 // store return value in slot for r8 569.mem.offset 0,0; st8.spill [r2]=r8 // store return value in slot for r8
570.mem.offset 8,0; st8.spill [r3]=r10 // clear error indication in slot for r10 570.mem.offset 8,0; st8.spill [r3]=r10 // clear error indication in slot for r10
571 br.call.sptk.many rp=syscall_trace_leave // give parent a chance to catch return value 571 br.call.sptk.many rp=syscall_trace_leave // give parent a chance to catch return value
572.ret3: br.cond.sptk .work_pending_syscall_end 572.ret3:
573(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk
574 br.cond.sptk .work_pending_syscall_end
573 575
574strace_error: 576strace_error:
575 ld8 r3=[r2] // load pt_regs.r8 577 ld8 r3=[r2] // load pt_regs.r8
@@ -1601,5 +1603,21 @@ sys_call_table:
1601 data8 sys_inotify_add_watch 1603 data8 sys_inotify_add_watch
1602 data8 sys_inotify_rm_watch 1604 data8 sys_inotify_rm_watch
1603 data8 sys_migrate_pages // 1280 1605 data8 sys_migrate_pages // 1280
1606 data8 sys_openat
1607 data8 sys_mkdirat
1608 data8 sys_mknodat
1609 data8 sys_fchownat
1610 data8 sys_futimesat // 1285
1611 data8 sys_newfstatat
1612 data8 sys_unlinkat
1613 data8 sys_renameat
1614 data8 sys_linkat
1615 data8 sys_symlinkat // 1290
1616 data8 sys_readlinkat
1617 data8 sys_fchmodat
1618 data8 sys_faccessat
1619 data8 sys_ni_syscall // reserved for pselect
1620 data8 sys_ni_syscall // 1295 reserved for ppoll
1621 data8 sys_unshare
1604 1622
1605 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls 1623 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
diff --git a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S
index ce423910ca97..7a05b1cb2ad5 100644
--- a/arch/ia64/kernel/fsys.S
+++ b/arch/ia64/kernel/fsys.S
@@ -878,31 +878,7 @@ fsyscall_table:
878 data8 0 // timer_delete 878 data8 0 // timer_delete
879 data8 0 // clock_settime 879 data8 0 // clock_settime
880 data8 fsys_clock_gettime // clock_gettime 880 data8 fsys_clock_gettime // clock_gettime
881 data8 0 // clock_getres // 1255
882 data8 0 // clock_nanosleep
883 data8 0 // fstatfs64
884 data8 0 // statfs64
885 data8 0
886 data8 0 // 1260
887 data8 0
888 data8 0 // mq_open
889 data8 0 // mq_unlink
890 data8 0 // mq_timedsend
891 data8 0 // mq_timedreceive // 1265
892 data8 0 // mq_notify
893 data8 0 // mq_getsetattr
894 data8 0 // kexec_load
895 data8 0
896 data8 0 // 1270
897 data8 0
898 data8 0
899 data8 0
900 data8 0
901 data8 0 // 1275
902 data8 0
903 data8 0
904 data8 0
905 data8 0
906 data8 0 // 1280
907 881
908 .org fsyscall_table + 8*NR_syscalls // guard against failures to increase NR_syscalls 882 // fill in zeros for the remaining entries
883 .zero:
884 .space fsyscall_table + 8*NR_syscalls - .zero, 0
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S
index fbc7ea35dd57..f1778a84ea61 100644
--- a/arch/ia64/kernel/head.S
+++ b/arch/ia64/kernel/head.S
@@ -352,6 +352,7 @@ start_ap:
352 mov ar.rsc=0 // place RSE in enforced lazy mode 352 mov ar.rsc=0 // place RSE in enforced lazy mode
353 ;; 353 ;;
354 loadrs // clear the dirty partition 354 loadrs // clear the dirty partition
355 mov IA64_KR(PER_CPU_DATA)=r0 // clear physical per-CPU base
355 ;; 356 ;;
356 mov ar.bspstore=r2 // establish the new RSE stack 357 mov ar.bspstore=r2 // establish the new RSE stack
357 ;; 358 ;;
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c
index e72de580ebbf..bbcfd08378a6 100644
--- a/arch/ia64/kernel/ia64_ksyms.c
+++ b/arch/ia64/kernel/ia64_ksyms.c
@@ -10,23 +10,8 @@
10 10
11#include <linux/string.h> 11#include <linux/string.h>
12EXPORT_SYMBOL(memset); 12EXPORT_SYMBOL(memset);
13EXPORT_SYMBOL(memchr);
14EXPORT_SYMBOL(memcmp);
15EXPORT_SYMBOL(memcpy); 13EXPORT_SYMBOL(memcpy);
16EXPORT_SYMBOL(memmove);
17EXPORT_SYMBOL(memscan);
18EXPORT_SYMBOL(strcat);
19EXPORT_SYMBOL(strchr);
20EXPORT_SYMBOL(strcmp);
21EXPORT_SYMBOL(strcpy);
22EXPORT_SYMBOL(strlen); 14EXPORT_SYMBOL(strlen);
23EXPORT_SYMBOL(strncat);
24EXPORT_SYMBOL(strncmp);
25EXPORT_SYMBOL(strncpy);
26EXPORT_SYMBOL(strnlen);
27EXPORT_SYMBOL(strrchr);
28EXPORT_SYMBOL(strstr);
29EXPORT_SYMBOL(strpbrk);
30 15
31#include <asm/checksum.h> 16#include <asm/checksum.h>
32EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */ 17EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S
index 301f2e9d262e..dcd906fe5749 100644
--- a/arch/ia64/kernel/ivt.S
+++ b/arch/ia64/kernel/ivt.S
@@ -561,11 +561,12 @@ ENTRY(dirty_bit)
561 ;; // avoid RAW on r18 561 ;; // avoid RAW on r18
562 mov ar.ccv=r18 // set compare value for cmpxchg 562 mov ar.ccv=r18 // set compare value for cmpxchg
563 or r25=_PAGE_D|_PAGE_A,r18 // set the dirty and accessed bits 563 or r25=_PAGE_D|_PAGE_A,r18 // set the dirty and accessed bits
564 tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit
564 ;; 565 ;;
565 cmpxchg8.acq r26=[r17],r25,ar.ccv 566(p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only update if page is present
566 mov r24=PAGE_SHIFT<<2 567 mov r24=PAGE_SHIFT<<2
567 ;; 568 ;;
568 cmp.eq p6,p7=r26,r18 569(p6) cmp.eq p6,p7=r26,r18 // Only compare if page is present
569 ;; 570 ;;
570(p6) itc.d r25 // install updated PTE 571(p6) itc.d r25 // install updated PTE
571 ;; 572 ;;
@@ -626,11 +627,12 @@ ENTRY(iaccess_bit)
626 ;; 627 ;;
627 mov ar.ccv=r18 // set compare value for cmpxchg 628 mov ar.ccv=r18 // set compare value for cmpxchg
628 or r25=_PAGE_A,r18 // set the accessed bit 629 or r25=_PAGE_A,r18 // set the accessed bit
630 tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit
629 ;; 631 ;;
630 cmpxchg8.acq r26=[r17],r25,ar.ccv 632(p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only if page present
631 mov r24=PAGE_SHIFT<<2 633 mov r24=PAGE_SHIFT<<2
632 ;; 634 ;;
633 cmp.eq p6,p7=r26,r18 635(p6) cmp.eq p6,p7=r26,r18 // Only if page present
634 ;; 636 ;;
635(p6) itc.i r25 // install updated PTE 637(p6) itc.i r25 // install updated PTE
636 ;; 638 ;;
@@ -680,11 +682,12 @@ ENTRY(daccess_bit)
680 ;; // avoid RAW on r18 682 ;; // avoid RAW on r18
681 mov ar.ccv=r18 // set compare value for cmpxchg 683 mov ar.ccv=r18 // set compare value for cmpxchg
682 or r25=_PAGE_A,r18 // set the dirty bit 684 or r25=_PAGE_A,r18 // set the dirty bit
685 tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit
683 ;; 686 ;;
684 cmpxchg8.acq r26=[r17],r25,ar.ccv 687(p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only if page is present
685 mov r24=PAGE_SHIFT<<2 688 mov r24=PAGE_SHIFT<<2
686 ;; 689 ;;
687 cmp.eq p6,p7=r26,r18 690(p6) cmp.eq p6,p7=r26,r18 // Only if page is present
688 ;; 691 ;;
689(p6) itc.d r25 // install updated PTE 692(p6) itc.d r25 // install updated PTE
690 /* 693 /*
@@ -1362,7 +1365,6 @@ END(debug_vector)
1362// 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57) 1365// 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57)
1363ENTRY(unaligned_access) 1366ENTRY(unaligned_access)
1364 DBG_FAULT(30) 1367 DBG_FAULT(30)
1365 mov r16=cr.ipsr
1366 mov r31=pr // prepare to save predicates 1368 mov r31=pr // prepare to save predicates
1367 ;; 1369 ;;
1368 br.sptk.many dispatch_unaligned_handler 1370 br.sptk.many dispatch_unaligned_handler
diff --git a/arch/ia64/kernel/mca_asm.S b/arch/ia64/kernel/mca_asm.S
index 403a80a58c13..60a464bfd9e2 100644
--- a/arch/ia64/kernel/mca_asm.S
+++ b/arch/ia64/kernel/mca_asm.S
@@ -512,7 +512,7 @@ ia64_state_save:
512 st8 [temp1]=r12 // os_status, default is cold boot 512 st8 [temp1]=r12 // os_status, default is cold boot
513 mov r6=IA64_MCA_SAME_CONTEXT 513 mov r6=IA64_MCA_SAME_CONTEXT
514 ;; 514 ;;
515 st8 [temp1]=r6 // context, default is same context 515 st8 [temp2]=r6 // context, default is same context
516 516
517 // Save the pt_regs data that is not in minstate. The previous code 517 // Save the pt_regs data that is not in minstate. The previous code
518 // left regs at sos. 518 // left regs at sos.
diff --git a/arch/ia64/kernel/mca_drv.c b/arch/ia64/kernel/mca_drv.c
index 3492e3211a44..e883d85906db 100644
--- a/arch/ia64/kernel/mca_drv.c
+++ b/arch/ia64/kernel/mca_drv.c
@@ -123,8 +123,9 @@ mca_page_isolate(unsigned long paddr)
123void 123void
124mca_handler_bh(unsigned long paddr) 124mca_handler_bh(unsigned long paddr)
125{ 125{
126 printk(KERN_DEBUG "OS_MCA: process [pid: %d](%s) encounters MCA.\n", 126 printk(KERN_ERR
127 current->pid, current->comm); 127 "OS_MCA: process [pid: %d](%s) encounters MCA (paddr=%lx)\n",
128 current->pid, current->comm, paddr);
128 129
129 spin_lock(&mca_bh_lock); 130 spin_lock(&mca_bh_lock);
130 switch (mca_page_isolate(paddr)) { 131 switch (mca_page_isolate(paddr)) {
@@ -132,7 +133,7 @@ mca_handler_bh(unsigned long paddr)
132 printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr); 133 printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr);
133 break; 134 break;
134 case ISOLATE_NG: 135 case ISOLATE_NG:
135 printk(KERN_DEBUG "Page isolation: ( %lx ) failure.\n", paddr); 136 printk(KERN_CRIT "Page isolation: ( %lx ) failure.\n", paddr);
136 break; 137 break;
137 default: 138 default:
138 break; 139 break;
@@ -437,6 +438,9 @@ recover_from_read_error(slidx_table_t *slidx,
437 * the process not have any locks of kernel. 438 * the process not have any locks of kernel.
438 */ 439 */
439 440
441 /* Is minstate valid? */
442 if (!peidx_bottom(peidx) || !(peidx_bottom(peidx)->valid.minstate))
443 return 0;
440 psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr); 444 psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr);
441 445
442 /* 446 /*
@@ -564,10 +568,15 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
564 return 0; 568 return 0;
565 569
566 /* 570 /*
567 * If there is no bus error, record is weird but we need not to recover. 571 * The cache check and bus check bits have four possible states
572 * cc bc
573 * 0 0 Weird record, not recovered
574 * 1 0 Cache error, not recovered
575 * 0 1 I/O error, attempt recovery
576 * 1 1 Memory error, attempt recovery
568 */ 577 */
569 if (psp->bc == 0 || pbci == NULL) 578 if (psp->bc == 0 || pbci == NULL)
570 return 1; 579 return 0;
571 580
572 /* 581 /*
573 * Sorry, we cannot handle so many. 582 * Sorry, we cannot handle so many.
diff --git a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c
index acc0f132f86c..056f7a6eedc7 100644
--- a/arch/ia64/kernel/sal.c
+++ b/arch/ia64/kernel/sal.c
@@ -14,6 +14,7 @@
14#include <linux/spinlock.h> 14#include <linux/spinlock.h>
15#include <linux/string.h> 15#include <linux/string.h>
16 16
17#include <asm/delay.h>
17#include <asm/page.h> 18#include <asm/page.h>
18#include <asm/sal.h> 19#include <asm/sal.h>
19#include <asm/pal.h> 20#include <asm/pal.h>
@@ -214,6 +215,78 @@ chk_nointroute_opt(void)
214static void __init sal_desc_ap_wakeup(void *p) { } 215static void __init sal_desc_ap_wakeup(void *p) { }
215#endif 216#endif
216 217
218/*
219 * HP rx5670 firmware polls for interrupts during SAL_CACHE_FLUSH by reading
220 * cr.ivr, but it never writes cr.eoi. This leaves any interrupt marked as
221 * "in-service" and masks other interrupts of equal or lower priority.
222 *
223 * HP internal defect reports: F1859, F2775, F3031.
224 */
225static int sal_cache_flush_drops_interrupts;
226
227static void __init
228check_sal_cache_flush (void)
229{
230 unsigned long flags, itv;
231 int cpu;
232 u64 vector;
233
234 cpu = get_cpu();
235 local_irq_save(flags);
236
237 /*
238 * Schedule a timer interrupt, wait until it's reported, and see if
239 * SAL_CACHE_FLUSH drops it.
240 */
241 itv = ia64_get_itv();
242 BUG_ON((itv & (1 << 16)) == 0);
243
244 ia64_set_itv(IA64_TIMER_VECTOR);
245 ia64_set_itm(ia64_get_itc() + 1000);
246
247 while (!ia64_get_irr(IA64_TIMER_VECTOR))
248 cpu_relax();
249
250 ia64_sal_cache_flush(3);
251
252 if (ia64_get_irr(IA64_TIMER_VECTOR)) {
253 vector = ia64_get_ivr();
254 ia64_eoi();
255 WARN_ON(vector != IA64_TIMER_VECTOR);
256 } else {
257 sal_cache_flush_drops_interrupts = 1;
258 printk(KERN_ERR "SAL: SAL_CACHE_FLUSH drops interrupts; "
259 "PAL_CACHE_FLUSH will be used instead\n");
260 ia64_eoi();
261 }
262
263 ia64_set_itv(itv);
264 local_irq_restore(flags);
265 put_cpu();
266}
267
268s64
269ia64_sal_cache_flush (u64 cache_type)
270{
271 struct ia64_sal_retval isrv;
272
273 if (sal_cache_flush_drops_interrupts) {
274 unsigned long flags;
275 u64 progress;
276 s64 rc;
277
278 progress = 0;
279 local_irq_save(flags);
280 rc = ia64_pal_cache_flush(cache_type,
281 PAL_CACHE_FLUSH_INVALIDATE, &progress, NULL);
282 local_irq_restore(flags);
283 return rc;
284 }
285
286 SAL_CALL(isrv, SAL_CACHE_FLUSH, cache_type, 0, 0, 0, 0, 0, 0);
287 return isrv.status;
288}
289
217void __init 290void __init
218ia64_sal_init (struct ia64_sal_systab *systab) 291ia64_sal_init (struct ia64_sal_systab *systab)
219{ 292{
@@ -262,6 +335,8 @@ ia64_sal_init (struct ia64_sal_systab *systab)
262 } 335 }
263 p += SAL_DESC_SIZE(*p); 336 p += SAL_DESC_SIZE(*p);
264 } 337 }
338
339 check_sal_cache_flush();
265} 340}
266 341
267int 342int
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
index c0766575a3a2..3258e09278d0 100644
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -71,6 +71,8 @@ unsigned long __per_cpu_offset[NR_CPUS];
71EXPORT_SYMBOL(__per_cpu_offset); 71EXPORT_SYMBOL(__per_cpu_offset);
72#endif 72#endif
73 73
74extern void ia64_setup_printk_clock(void);
75
74DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); 76DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
75DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); 77DEFINE_PER_CPU(unsigned long, local_per_cpu_offset);
76DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); 78DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
@@ -428,6 +430,7 @@ setup_arch (char **cmdline_p)
428 if (early_console_setup(*cmdline_p) == 0) 430 if (early_console_setup(*cmdline_p) == 0)
429 mark_bsp_online(); 431 mark_bsp_online();
430 432
433 parse_early_param();
431#ifdef CONFIG_ACPI 434#ifdef CONFIG_ACPI
432 /* Initialize the ACPI boot-time table parser */ 435 /* Initialize the ACPI boot-time table parser */
433 acpi_table_init(); 436 acpi_table_init();
@@ -445,6 +448,8 @@ setup_arch (char **cmdline_p)
445 /* process SAL system table: */ 448 /* process SAL system table: */
446 ia64_sal_init(efi.sal_systab); 449 ia64_sal_init(efi.sal_systab);
447 450
451 ia64_setup_printk_clock();
452
448#ifdef CONFIG_SMP 453#ifdef CONFIG_SMP
449 cpu_physical_id(0) = hard_smp_processor_id(); 454 cpu_physical_id(0) = hard_smp_processor_id();
450 455
@@ -684,6 +689,9 @@ void
684setup_per_cpu_areas (void) 689setup_per_cpu_areas (void)
685{ 690{
686 /* start_kernel() requires this... */ 691 /* start_kernel() requires this... */
692#ifdef CONFIG_ACPI_HOTPLUG_CPU
693 prefill_possible_map();
694#endif
687} 695}
688 696
689/* 697/*
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c
index 8f44e7d2df66..b681ef34a86e 100644
--- a/arch/ia64/kernel/smpboot.c
+++ b/arch/ia64/kernel/smpboot.c
@@ -129,7 +129,7 @@ DEFINE_PER_CPU(int, cpu_state);
129/* Bitmasks of currently online, and possible CPUs */ 129/* Bitmasks of currently online, and possible CPUs */
130cpumask_t cpu_online_map; 130cpumask_t cpu_online_map;
131EXPORT_SYMBOL(cpu_online_map); 131EXPORT_SYMBOL(cpu_online_map);
132cpumask_t cpu_possible_map; 132cpumask_t cpu_possible_map = CPU_MASK_NONE;
133EXPORT_SYMBOL(cpu_possible_map); 133EXPORT_SYMBOL(cpu_possible_map);
134 134
135cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; 135cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;
@@ -506,9 +506,6 @@ smp_build_cpu_map (void)
506 506
507 for (cpu = 0; cpu < NR_CPUS; cpu++) { 507 for (cpu = 0; cpu < NR_CPUS; cpu++) {
508 ia64_cpu_to_sapicid[cpu] = -1; 508 ia64_cpu_to_sapicid[cpu] = -1;
509#ifdef CONFIG_HOTPLUG_CPU
510 cpu_set(cpu, cpu_possible_map);
511#endif
512 } 509 }
513 510
514 ia64_cpu_to_sapicid[0] = boot_cpu_id; 511 ia64_cpu_to_sapicid[0] = boot_cpu_id;
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
index 028a2b95936c..307d01e15b2e 100644
--- a/arch/ia64/kernel/time.c
+++ b/arch/ia64/kernel/time.c
@@ -250,31 +250,53 @@ time_init (void)
250 set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); 250 set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec);
251} 251}
252 252
253#define SMALLUSECS 100 253/*
254 * Generic udelay assumes that if preemption is allowed and the thread
255 * migrates to another CPU, that the ITC values are synchronized across
256 * all CPUs.
257 */
258static void
259ia64_itc_udelay (unsigned long usecs)
260{
261 unsigned long start = ia64_get_itc();
262 unsigned long end = start + usecs*local_cpu_data->cyc_per_usec;
263
264 while (time_before(ia64_get_itc(), end))
265 cpu_relax();
266}
267
268void (*ia64_udelay)(unsigned long usecs) = &ia64_itc_udelay;
254 269
255void 270void
256udelay (unsigned long usecs) 271udelay (unsigned long usecs)
257{ 272{
258 unsigned long start; 273 (*ia64_udelay)(usecs);
259 unsigned long cycles; 274}
260 unsigned long smallusecs; 275EXPORT_SYMBOL(udelay);
261 276
262 /* 277static unsigned long long ia64_itc_printk_clock(void)
263 * Execute the non-preemptible delay loop (because the ITC might 278{
264 * not be synchronized between CPUS) in relatively short time 279 if (ia64_get_kr(IA64_KR_PER_CPU_DATA))
265 * chunks, allowing preemption between the chunks. 280 return sched_clock();
266 */ 281 return 0;
267 while (usecs > 0) { 282}
268 smallusecs = (usecs > SMALLUSECS) ? SMALLUSECS : usecs; 283
269 preempt_disable(); 284static unsigned long long ia64_default_printk_clock(void)
270 cycles = smallusecs*local_cpu_data->cyc_per_usec; 285{
271 start = ia64_get_itc(); 286 return (unsigned long long)(jiffies_64 - INITIAL_JIFFIES) *
287 (1000000000/HZ);
288}
272 289
273 while (ia64_get_itc() - start < cycles) 290unsigned long long (*ia64_printk_clock)(void) = &ia64_default_printk_clock;
274 cpu_relax();
275 291
276 preempt_enable(); 292unsigned long long printk_clock(void)
277 usecs -= smallusecs; 293{
278 } 294 return ia64_printk_clock();
295}
296
297void __init
298ia64_setup_printk_clock(void)
299{
300 if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT))
301 ia64_printk_clock = ia64_itc_printk_clock;
279} 302}
280EXPORT_SYMBOL(udelay);
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c
index 706b7734e191..6e5eea19fa67 100644
--- a/arch/ia64/kernel/topology.c
+++ b/arch/ia64/kernel/topology.c
@@ -71,31 +71,33 @@ static int __init topology_init(void)
71 int i, err = 0; 71 int i, err = 0;
72 72
73#ifdef CONFIG_NUMA 73#ifdef CONFIG_NUMA
74 sysfs_nodes = kmalloc(sizeof(struct node) * MAX_NUMNODES, GFP_KERNEL); 74 sysfs_nodes = kzalloc(sizeof(struct node) * MAX_NUMNODES, GFP_KERNEL);
75 if (!sysfs_nodes) { 75 if (!sysfs_nodes) {
76 err = -ENOMEM; 76 err = -ENOMEM;
77 goto out; 77 goto out;
78 } 78 }
79 memset(sysfs_nodes, 0, sizeof(struct node) * MAX_NUMNODES);
80 79
81 /* MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes? */ 80 /*
82 for_each_online_node(i) 81 * MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes?
82 */
83 for_each_online_node(i) {
83 if ((err = register_node(&sysfs_nodes[i], i, 0))) 84 if ((err = register_node(&sysfs_nodes[i], i, 0)))
84 goto out; 85 goto out;
86 }
85#endif 87#endif
86 88
87 sysfs_cpus = kmalloc(sizeof(struct ia64_cpu) * NR_CPUS, GFP_KERNEL); 89 sysfs_cpus = kzalloc(sizeof(struct ia64_cpu) * NR_CPUS, GFP_KERNEL);
88 if (!sysfs_cpus) { 90 if (!sysfs_cpus) {
89 err = -ENOMEM; 91 err = -ENOMEM;
90 goto out; 92 goto out;
91 } 93 }
92 memset(sysfs_cpus, 0, sizeof(struct ia64_cpu) * NR_CPUS);
93 94
94 for_each_present_cpu(i) 95 for_each_present_cpu(i) {
95 if((err = arch_register_cpu(i))) 96 if((err = arch_register_cpu(i)))
96 goto out; 97 goto out;
98 }
97out: 99out:
98 return err; 100 return err;
99} 101}
100 102
101__initcall(topology_init); 103subsys_initcall(topology_init);
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c
index 55391901b013..dabd6c32641e 100644
--- a/arch/ia64/kernel/traps.c
+++ b/arch/ia64/kernel/traps.c
@@ -16,6 +16,7 @@
16#include <linux/module.h> /* for EXPORT_SYMBOL */ 16#include <linux/module.h> /* for EXPORT_SYMBOL */
17#include <linux/hardirq.h> 17#include <linux/hardirq.h>
18#include <linux/kprobes.h> 18#include <linux/kprobes.h>
19#include <linux/delay.h> /* for ssleep() */
19 20
20#include <asm/fpswa.h> 21#include <asm/fpswa.h>
21#include <asm/ia32.h> 22#include <asm/ia32.h>
@@ -116,6 +117,13 @@ die (const char *str, struct pt_regs *regs, long err)
116 bust_spinlocks(0); 117 bust_spinlocks(0);
117 die.lock_owner = -1; 118 die.lock_owner = -1;
118 spin_unlock_irq(&die.lock); 119 spin_unlock_irq(&die.lock);
120
121 if (panic_on_oops) {
122 printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
123 ssleep(5);
124 panic("Fatal exception");
125 }
126
119 do_exit(SIGSEGV); 127 do_exit(SIGSEGV);
120} 128}
121 129
diff --git a/arch/ia64/kernel/unaligned.c b/arch/ia64/kernel/unaligned.c
index 43b45b65ee5a..1e357550c776 100644
--- a/arch/ia64/kernel/unaligned.c
+++ b/arch/ia64/kernel/unaligned.c
@@ -24,7 +24,7 @@
24#include <asm/uaccess.h> 24#include <asm/uaccess.h>
25#include <asm/unaligned.h> 25#include <asm/unaligned.h>
26 26
27extern void die_if_kernel(char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn)); 27extern void die_if_kernel(char *str, struct pt_regs *regs, long err);
28 28
29#undef DEBUG_UNALIGNED_TRAP 29#undef DEBUG_UNALIGNED_TRAP
30 30
@@ -53,6 +53,15 @@ dump (const char *str, void *vp, size_t len)
53#define SIGN_EXT9 0xffffffffffffff00ul 53#define SIGN_EXT9 0xffffffffffffff00ul
54 54
55/* 55/*
56 * sysctl settable hook which tells the kernel whether to honor the
57 * IA64_THREAD_UAC_NOPRINT prctl. Because this is user settable, we want
58 * to allow the super user to enable/disable this for security reasons
59 * (i.e. don't allow attacker to fill up logs with unaligned accesses).
60 */
61int no_unaligned_warning;
62static int noprint_warning;
63
64/*
56 * For M-unit: 65 * For M-unit:
57 * 66 *
58 * opcode | m | x6 | 67 * opcode | m | x6 |
@@ -1283,8 +1292,9 @@ within_logging_rate_limit (void)
1283 1292
1284 if (jiffies - last_time > 5*HZ) 1293 if (jiffies - last_time > 5*HZ)
1285 count = 0; 1294 count = 0;
1286 if (++count < 5) { 1295 if (count < 5) {
1287 last_time = jiffies; 1296 last_time = jiffies;
1297 count++;
1288 return 1; 1298 return 1;
1289 } 1299 }
1290 return 0; 1300 return 0;
@@ -1323,8 +1333,9 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
1323 if ((current->thread.flags & IA64_THREAD_UAC_SIGBUS) != 0) 1333 if ((current->thread.flags & IA64_THREAD_UAC_SIGBUS) != 0)
1324 goto force_sigbus; 1334 goto force_sigbus;
1325 1335
1326 if (!(current->thread.flags & IA64_THREAD_UAC_NOPRINT) 1336 if (!no_unaligned_warning &&
1327 && within_logging_rate_limit()) 1337 !(current->thread.flags & IA64_THREAD_UAC_NOPRINT) &&
1338 within_logging_rate_limit())
1328 { 1339 {
1329 char buf[200]; /* comm[] is at most 16 bytes... */ 1340 char buf[200]; /* comm[] is at most 16 bytes... */
1330 size_t len; 1341 size_t len;
@@ -1339,7 +1350,22 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
1339 if (user_mode(regs)) 1350 if (user_mode(regs))
1340 tty_write_message(current->signal->tty, buf); 1351 tty_write_message(current->signal->tty, buf);
1341 buf[len-1] = '\0'; /* drop '\r' */ 1352 buf[len-1] = '\0'; /* drop '\r' */
1342 printk(KERN_WARNING "%s", buf); /* watch for command names containing %s */ 1353 /* watch for command names containing %s */
1354 printk(KERN_WARNING "%s", buf);
1355 } else {
1356 if (no_unaligned_warning && !noprint_warning) {
1357 noprint_warning = 1;
1358 printk(KERN_WARNING "%s(%d) encountered an "
1359 "unaligned exception which required\n"
1360 "kernel assistance, which degrades "
1361 "the performance of the application.\n"
1362 "Unaligned exception warnings have "
1363 "been disabled by the system "
1364 "administrator\n"
1365 "echo 0 > /proc/sys/kernel/ignore-"
1366 "unaligned-usertrap to re-enable\n",
1367 current->comm, current->pid);
1368 }
1343 } 1369 }
1344 } else { 1370 } else {
1345 if (within_logging_rate_limit()) 1371 if (within_logging_rate_limit())
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index d27ecdcb6fca..9ba32b2d96d0 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -193,12 +193,12 @@ add_io_space (struct pci_root_info *info, struct acpi_resource_address64 *addr)
193 goto free_resource; 193 goto free_resource;
194 } 194 }
195 195
196 min = addr->min_address_range; 196 min = addr->minimum;
197 max = min + addr->address_length - 1; 197 max = min + addr->address_length - 1;
198 if (addr->attribute.io.translation_attribute == ACPI_SPARSE_TRANSLATION) 198 if (addr->info.io.translation_type == ACPI_SPARSE_TRANSLATION)
199 sparse = 1; 199 sparse = 1;
200 200
201 space_nr = new_space(addr->address_translation_offset, sparse); 201 space_nr = new_space(addr->translation_offset, sparse);
202 if (space_nr == ~0) 202 if (space_nr == ~0)
203 goto free_name; 203 goto free_name;
204 204
@@ -285,7 +285,7 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data)
285 if (addr.resource_type == ACPI_MEMORY_RANGE) { 285 if (addr.resource_type == ACPI_MEMORY_RANGE) {
286 flags = IORESOURCE_MEM; 286 flags = IORESOURCE_MEM;
287 root = &iomem_resource; 287 root = &iomem_resource;
288 offset = addr.address_translation_offset; 288 offset = addr.translation_offset;
289 } else if (addr.resource_type == ACPI_IO_RANGE) { 289 } else if (addr.resource_type == ACPI_IO_RANGE) {
290 flags = IORESOURCE_IO; 290 flags = IORESOURCE_IO;
291 root = &ioport_resource; 291 root = &ioport_resource;
@@ -298,7 +298,7 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data)
298 window = &info->controller->window[info->controller->windows++]; 298 window = &info->controller->window[info->controller->windows++];
299 window->resource.name = info->name; 299 window->resource.name = info->name;
300 window->resource.flags = flags; 300 window->resource.flags = flags;
301 window->resource.start = addr.min_address_range + offset; 301 window->resource.start = addr.minimum + offset;
302 window->resource.end = window->resource.start + addr.address_length - 1; 302 window->resource.end = window->resource.start + addr.address_length - 1;
303 window->resource.child = NULL; 303 window->resource.child = NULL;
304 window->offset = offset; 304 window->offset = offset;
@@ -579,7 +579,7 @@ pcibios_align_resource (void *data, struct resource *res,
579char * __init 579char * __init
580pcibios_setup (char *str) 580pcibios_setup (char *str)
581{ 581{
582 return NULL; 582 return str;
583} 583}
584 584
585int 585int
diff --git a/arch/ia64/sn/Makefile b/arch/ia64/sn/Makefile
index a269f6d84c29..79a7df02e812 100644
--- a/arch/ia64/sn/Makefile
+++ b/arch/ia64/sn/Makefile
@@ -9,6 +9,4 @@
9# Makefile for the sn ia64 subplatform 9# Makefile for the sn ia64 subplatform
10# 10#
11 11
12CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
13
14obj-y += kernel/ pci/ 12obj-y += kernel/ pci/
diff --git a/arch/ia64/sn/kernel/Makefile b/arch/ia64/sn/kernel/Makefile
index 4351c4ff9845..3e9b4eea7418 100644
--- a/arch/ia64/sn/kernel/Makefile
+++ b/arch/ia64/sn/kernel/Makefile
@@ -7,6 +7,8 @@
7# Copyright (C) 1999,2001-2005 Silicon Graphics, Inc. All Rights Reserved. 7# Copyright (C) 1999,2001-2005 Silicon Graphics, Inc. All Rights Reserved.
8# 8#
9 9
10CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
11
10obj-y += setup.o bte.o bte_error.o irq.o mca.o idle.o \ 12obj-y += setup.o bte.o bte_error.o irq.o mca.o idle.o \
11 huberror.o io_init.o iomv.o klconflib.o sn2/ 13 huberror.o io_init.o iomv.o klconflib.o sn2/
12obj-$(CONFIG_IA64_GENERIC) += machvec.o 14obj-$(CONFIG_IA64_GENERIC) += machvec.o
diff --git a/arch/ia64/sn/kernel/bte.c b/arch/ia64/sn/kernel/bte.c
index dd73c0cb754b..1f11db470d90 100644
--- a/arch/ia64/sn/kernel/bte.c
+++ b/arch/ia64/sn/kernel/bte.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9#include <linux/config.h> 9#include <linux/config.h>
@@ -186,18 +186,13 @@ retry_bteop:
186 186
187 /* Initialize the notification to a known value. */ 187 /* Initialize the notification to a known value. */
188 *bte->most_rcnt_na = BTE_WORD_BUSY; 188 *bte->most_rcnt_na = BTE_WORD_BUSY;
189 notif_phys_addr = TO_PHYS(ia64_tpa((unsigned long)bte->most_rcnt_na)); 189 notif_phys_addr = (u64)bte->most_rcnt_na;
190 190
191 if (is_shub2()) {
192 src = SH2_TIO_PHYS_TO_DMA(src);
193 dest = SH2_TIO_PHYS_TO_DMA(dest);
194 notif_phys_addr = SH2_TIO_PHYS_TO_DMA(notif_phys_addr);
195 }
196 /* Set the source and destination registers */ 191 /* Set the source and destination registers */
197 BTE_PRINTKV(("IBSA = 0x%lx)\n", (TO_PHYS(src)))); 192 BTE_PRINTKV(("IBSA = 0x%lx)\n", src));
198 BTE_SRC_STORE(bte, TO_PHYS(src)); 193 BTE_SRC_STORE(bte, src);
199 BTE_PRINTKV(("IBDA = 0x%lx)\n", (TO_PHYS(dest)))); 194 BTE_PRINTKV(("IBDA = 0x%lx)\n", dest));
200 BTE_DEST_STORE(bte, TO_PHYS(dest)); 195 BTE_DEST_STORE(bte, dest);
201 196
202 /* Set the notification register */ 197 /* Set the notification register */
203 BTE_PRINTKV(("IBNA = 0x%lx)\n", notif_phys_addr)); 198 BTE_PRINTKV(("IBNA = 0x%lx)\n", notif_phys_addr));
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c
index 00700f7e6837..dfb3f2902379 100644
--- a/arch/ia64/sn/kernel/io_init.c
+++ b/arch/ia64/sn/kernel/io_init.c
@@ -10,6 +10,7 @@
10#include <linux/nodemask.h> 10#include <linux/nodemask.h>
11#include <asm/sn/types.h> 11#include <asm/sn/types.h>
12#include <asm/sn/addrs.h> 12#include <asm/sn/addrs.h>
13#include <asm/sn/sn_feature_sets.h>
13#include <asm/sn/geo.h> 14#include <asm/sn/geo.h>
14#include <asm/sn/io.h> 15#include <asm/sn/io.h>
15#include <asm/sn/pcibr_provider.h> 16#include <asm/sn/pcibr_provider.h>
@@ -22,6 +23,10 @@
22#include "xtalk/hubdev.h" 23#include "xtalk/hubdev.h"
23#include "xtalk/xwidgetdev.h" 24#include "xtalk/xwidgetdev.h"
24 25
26
27extern void sn_init_cpei_timer(void);
28extern void register_sn_procfs(void);
29
25static struct list_head sn_sysdata_list; 30static struct list_head sn_sysdata_list;
26 31
27/* sysdata list struct */ 32/* sysdata list struct */
@@ -39,12 +44,12 @@ struct brick {
39 struct slab_info slab_info[MAX_SLABS + 1]; 44 struct slab_info slab_info[MAX_SLABS + 1];
40}; 45};
41 46
42int sn_ioif_inited = 0; /* SN I/O infrastructure initialized? */ 47int sn_ioif_inited; /* SN I/O infrastructure initialized? */
43 48
44struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */ 49struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */
45 50
46static int max_segment_number = 0; /* Default highest segment number */ 51static int max_segment_number; /* Default highest segment number */
47static int max_pcibus_number = 255; /* Default highest pci bus number */ 52static int max_pcibus_number = 255; /* Default highest pci bus number */
48 53
49/* 54/*
50 * Hooks and struct for unsupported pci providers 55 * Hooks and struct for unsupported pci providers
@@ -83,7 +88,6 @@ static inline u64
83sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num, 88sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
84 u64 address) 89 u64 address)
85{ 90{
86
87 struct ia64_sal_retval ret_stuff; 91 struct ia64_sal_retval ret_stuff;
88 ret_stuff.status = 0; 92 ret_stuff.status = 0;
89 ret_stuff.v0 = 0; 93 ret_stuff.v0 = 0;
@@ -93,7 +97,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
93 (u64) nasid, (u64) widget_num, 97 (u64) nasid, (u64) widget_num,
94 (u64) device_num, (u64) address, 0, 0, 0); 98 (u64) device_num, (u64) address, 0, 0, 0);
95 return ret_stuff.status; 99 return ret_stuff.status;
96
97} 100}
98 101
99/* 102/*
@@ -101,7 +104,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
101 */ 104 */
102static inline u64 sal_get_hubdev_info(u64 handle, u64 address) 105static inline u64 sal_get_hubdev_info(u64 handle, u64 address)
103{ 106{
104
105 struct ia64_sal_retval ret_stuff; 107 struct ia64_sal_retval ret_stuff;
106 ret_stuff.status = 0; 108 ret_stuff.status = 0;
107 ret_stuff.v0 = 0; 109 ret_stuff.v0 = 0;
@@ -117,7 +119,6 @@ static inline u64 sal_get_hubdev_info(u64 handle, u64 address)
117 */ 119 */
118static inline u64 sal_get_pcibus_info(u64 segment, u64 busnum, u64 address) 120static inline u64 sal_get_pcibus_info(u64 segment, u64 busnum, u64 address)
119{ 121{
120
121 struct ia64_sal_retval ret_stuff; 122 struct ia64_sal_retval ret_stuff;
122 ret_stuff.status = 0; 123 ret_stuff.status = 0;
123 ret_stuff.v0 = 0; 124 ret_stuff.v0 = 0;
@@ -173,8 +174,8 @@ sn_pcidev_info_get(struct pci_dev *dev)
173 */ 174 */
174static u8 war_implemented = 0; 175static u8 war_implemented = 0;
175 176
176static void sn_device_fixup_war(u64 nasid, u64 widget, int device, 177static s64 sn_device_fixup_war(u64 nasid, u64 widget, int device,
177 struct sn_flush_device_common *common) 178 struct sn_flush_device_common *common)
178{ 179{
179 struct sn_flush_device_war *war_list; 180 struct sn_flush_device_war *war_list;
180 struct sn_flush_device_war *dev_entry; 181 struct sn_flush_device_war *dev_entry;
@@ -198,22 +199,23 @@ static void sn_device_fixup_war(u64 nasid, u64 widget, int device,
198 199
199 dev_entry = war_list + device; 200 dev_entry = war_list + device;
200 memcpy(common,dev_entry, sizeof(*common)); 201 memcpy(common,dev_entry, sizeof(*common));
201
202 kfree(war_list); 202 kfree(war_list);
203
204 return isrv.status;
203} 205}
204 206
205/* 207/*
206 * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for 208 * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for
207 * each node in the system. 209 * each node in the system.
208 */ 210 */
209static void sn_fixup_ionodes(void) 211static void __init sn_fixup_ionodes(void)
210{ 212{
211 struct sn_flush_device_kernel *sn_flush_device_kernel; 213 struct sn_flush_device_kernel *sn_flush_device_kernel;
212 struct sn_flush_device_kernel *dev_entry; 214 struct sn_flush_device_kernel *dev_entry;
213 struct hubdev_info *hubdev; 215 struct hubdev_info *hubdev;
214 u64 status; 216 u64 status;
215 u64 nasid; 217 u64 nasid;
216 int i, widget, device; 218 int i, widget, device, size;
217 219
218 /* 220 /*
219 * Get SGI Specific HUB chipset information. 221 * Get SGI Specific HUB chipset information.
@@ -249,53 +251,40 @@ static void sn_fixup_ionodes(void)
249 if (!hubdev->hdi_flush_nasid_list.widget_p) 251 if (!hubdev->hdi_flush_nasid_list.widget_p)
250 continue; 252 continue;
251 253
254 size = (HUB_WIDGET_ID_MAX + 1) *
255 sizeof(struct sn_flush_device_kernel *);
252 hubdev->hdi_flush_nasid_list.widget_p = 256 hubdev->hdi_flush_nasid_list.widget_p =
253 kmalloc((HUB_WIDGET_ID_MAX + 1) * 257 kzalloc(size, GFP_KERNEL);
254 sizeof(struct sn_flush_device_kernel *), 258 if (!hubdev->hdi_flush_nasid_list.widget_p)
255 GFP_KERNEL); 259 BUG();
256 memset(hubdev->hdi_flush_nasid_list.widget_p, 0x0,
257 (HUB_WIDGET_ID_MAX + 1) *
258 sizeof(struct sn_flush_device_kernel *));
259 260
260 for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) { 261 for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) {
261 sn_flush_device_kernel = kmalloc(DEV_PER_WIDGET * 262 size = DEV_PER_WIDGET *
262 sizeof(struct 263 sizeof(struct sn_flush_device_kernel);
263 sn_flush_device_kernel), 264 sn_flush_device_kernel = kzalloc(size, GFP_KERNEL);
264 GFP_KERNEL);
265 if (!sn_flush_device_kernel) 265 if (!sn_flush_device_kernel)
266 BUG(); 266 BUG();
267 memset(sn_flush_device_kernel, 0x0,
268 DEV_PER_WIDGET *
269 sizeof(struct sn_flush_device_kernel));
270 267
271 dev_entry = sn_flush_device_kernel; 268 dev_entry = sn_flush_device_kernel;
272 for (device = 0; device < DEV_PER_WIDGET; 269 for (device = 0; device < DEV_PER_WIDGET;
273 device++,dev_entry++) { 270 device++,dev_entry++) {
274 dev_entry->common = kmalloc(sizeof(struct 271 size = sizeof(struct sn_flush_device_common);
275 sn_flush_device_common), 272 dev_entry->common = kzalloc(size, GFP_KERNEL);
276 GFP_KERNEL);
277 if (!dev_entry->common) 273 if (!dev_entry->common)
278 BUG(); 274 BUG();
279 memset(dev_entry->common, 0x0, sizeof(struct 275
280 sn_flush_device_common)); 276 if (sn_prom_feature_available(
281 277 PRF_DEVICE_FLUSH_LIST))
282 status = sal_get_device_dmaflush_list(nasid, 278 status = sal_get_device_dmaflush_list(
283 widget, 279 nasid, widget, device,
284 device, 280 (u64)(dev_entry->common));
285 (u64)(dev_entry->common)); 281 else
286 if (status) { 282 status = sn_device_fixup_war(nasid,
287 if (sn_sal_rev() < 0x0450) { 283 widget, device,
288 /* shortlived WAR for older 284 dev_entry->common);
289 * PROM images 285 if (status != SALRET_OK)
290 */ 286 panic("SAL call failed: %s\n",
291 sn_device_fixup_war(nasid, 287 ia64_sal_strerror(status));
292 widget,
293 device,
294 dev_entry->common);
295 }
296 else
297 BUG();
298 }
299 288
300 spin_lock_init(&dev_entry->sfdl_flush_lock); 289 spin_lock_init(&dev_entry->sfdl_flush_lock);
301 } 290 }
@@ -383,13 +372,12 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
383 372
384 pci_dev_get(dev); /* for the sysdata pointer */ 373 pci_dev_get(dev); /* for the sysdata pointer */
385 pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL); 374 pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL);
386 if (pcidev_info <= 0) 375 if (!pcidev_info)
387 BUG(); /* Cannot afford to run out of memory */ 376 BUG(); /* Cannot afford to run out of memory */
388 377
389 sn_irq_info = kmalloc(sizeof(struct sn_irq_info), GFP_KERNEL); 378 sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL);
390 if (sn_irq_info <= 0) 379 if (!sn_irq_info)
391 BUG(); /* Cannot afford to run out of memory */ 380 BUG(); /* Cannot afford to run out of memory */
392 memset(sn_irq_info, 0, sizeof(struct sn_irq_info));
393 381
394 /* Call to retrieve pci device information needed by kernel. */ 382 /* Call to retrieve pci device information needed by kernel. */
395 status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number, 383 status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number,
@@ -467,6 +455,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
467 pcidev_info->pdi_sn_irq_info = NULL; 455 pcidev_info->pdi_sn_irq_info = NULL;
468 kfree(sn_irq_info); 456 kfree(sn_irq_info);
469 } 457 }
458
459 /*
460 * MSI currently not supported on altix. Remove this when
461 * the MSI abstraction patches are integrated into the kernel
462 * (sometime after 2.6.16 releases)
463 */
464 dev->no_msi = 1;
470} 465}
471 466
472/* 467/*
@@ -475,13 +470,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
475 */ 470 */
476void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus) 471void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
477{ 472{
478 int status = 0; 473 int status;
479 int nasid, cnode; 474 int nasid, cnode;
480 struct pci_controller *controller; 475 struct pci_controller *controller;
481 struct sn_pci_controller *sn_controller; 476 struct sn_pci_controller *sn_controller;
482 struct pcibus_bussoft *prom_bussoft_ptr; 477 struct pcibus_bussoft *prom_bussoft_ptr;
483 struct hubdev_info *hubdev_info; 478 struct hubdev_info *hubdev_info;
484 void *provider_soft = NULL; 479 void *provider_soft;
485 struct sn_pcibus_provider *provider; 480 struct sn_pcibus_provider *provider;
486 481
487 status = sal_get_pcibus_info((u64) segment, (u64) busnum, 482 status = sal_get_pcibus_info((u64) segment, (u64) busnum,
@@ -528,6 +523,8 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
528 bus->sysdata = controller; 523 bus->sysdata = controller;
529 if (provider->bus_fixup) 524 if (provider->bus_fixup)
530 provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller); 525 provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller);
526 else
527 provider_soft = NULL;
531 528
532 if (provider_soft == NULL) { 529 if (provider_soft == NULL) {
533 /* fixup failed or not applicable */ 530 /* fixup failed or not applicable */
@@ -610,15 +607,15 @@ void sn_bus_store_sysdata(struct pci_dev *dev)
610void sn_bus_free_sysdata(void) 607void sn_bus_free_sysdata(void)
611{ 608{
612 struct sysdata_el *element; 609 struct sysdata_el *element;
613 struct list_head *list; 610 struct list_head *list, *safe;
614 611
615sn_sysdata_free_start: 612 list_for_each_safe(list, safe, &sn_sysdata_list) {
616 list_for_each(list, &sn_sysdata_list) {
617 element = list_entry(list, struct sysdata_el, entry); 613 element = list_entry(list, struct sysdata_el, entry);
618 list_del(&element->entry); 614 list_del(&element->entry);
615 list_del(&(((struct pcidev_info *)
616 (element->sysdata))->pdi_list));
619 kfree(element->sysdata); 617 kfree(element->sysdata);
620 kfree(element); 618 kfree(element);
621 goto sn_sysdata_free_start;
622 } 619 }
623 return; 620 return;
624} 621}
@@ -631,13 +628,8 @@ sn_sysdata_free_start:
631 628
632static int __init sn_pci_init(void) 629static int __init sn_pci_init(void)
633{ 630{
634 int i = 0; 631 int i, j;
635 int j = 0;
636 struct pci_dev *pci_dev = NULL; 632 struct pci_dev *pci_dev = NULL;
637 extern void sn_init_cpei_timer(void);
638#ifdef CONFIG_PROC_FS
639 extern void register_sn_procfs(void);
640#endif
641 633
642 if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM()) 634 if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
643 return 0; 635 return 0;
@@ -693,32 +685,29 @@ static int __init sn_pci_init(void)
693 */ 685 */
694void hubdev_init_node(nodepda_t * npda, cnodeid_t node) 686void hubdev_init_node(nodepda_t * npda, cnodeid_t node)
695{ 687{
696
697 struct hubdev_info *hubdev_info; 688 struct hubdev_info *hubdev_info;
689 int size;
690 pg_data_t *pg;
691
692 size = sizeof(struct hubdev_info);
698 693
699 if (node >= num_online_nodes()) /* Headless/memless IO nodes */ 694 if (node >= num_online_nodes()) /* Headless/memless IO nodes */
700 hubdev_info = 695 pg = NODE_DATA(0);
701 (struct hubdev_info *)alloc_bootmem_node(NODE_DATA(0),
702 sizeof(struct
703 hubdev_info));
704 else 696 else
705 hubdev_info = 697 pg = NODE_DATA(node);
706 (struct hubdev_info *)alloc_bootmem_node(NODE_DATA(node), 698
707 sizeof(struct 699 hubdev_info = (struct hubdev_info *)alloc_bootmem_node(pg, size);
708 hubdev_info));
709 npda->pdinfo = (void *)hubdev_info;
710 700
701 npda->pdinfo = (void *)hubdev_info;
711} 702}
712 703
713geoid_t 704geoid_t
714cnodeid_get_geoid(cnodeid_t cnode) 705cnodeid_get_geoid(cnodeid_t cnode)
715{ 706{
716
717 struct hubdev_info *hubdev; 707 struct hubdev_info *hubdev;
718 708
719 hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo); 709 hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
720 return hubdev->hdi_geoid; 710 return hubdev->hdi_geoid;
721
722} 711}
723 712
724subsys_initcall(sn_pci_init); 713subsys_initcall(sn_pci_init);
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c
index ec37084bdc17..c373113d073a 100644
--- a/arch/ia64/sn/kernel/irq.c
+++ b/arch/ia64/sn/kernel/irq.c
@@ -5,11 +5,12 @@
5 * License. See the file "COPYING" in the main directory of this archive 5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 6 * for more details.
7 * 7 *
8 * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. 8 * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
9 */ 9 */
10 10
11#include <linux/irq.h> 11#include <linux/irq.h>
12#include <linux/spinlock.h> 12#include <linux/spinlock.h>
13#include <linux/init.h>
13#include <asm/sn/addrs.h> 14#include <asm/sn/addrs.h>
14#include <asm/sn/arch.h> 15#include <asm/sn/arch.h>
15#include <asm/sn/intr.h> 16#include <asm/sn/intr.h>
@@ -76,17 +77,15 @@ static void sn_enable_irq(unsigned int irq)
76 77
77static void sn_ack_irq(unsigned int irq) 78static void sn_ack_irq(unsigned int irq)
78{ 79{
79 u64 event_occurred, mask = 0; 80 u64 event_occurred, mask;
80 81
81 irq = irq & 0xff; 82 irq = irq & 0xff;
82 event_occurred = 83 event_occurred = HUB_L((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED));
83 HUB_L((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED));
84 mask = event_occurred & SH_ALL_INT_MASK; 84 mask = event_occurred & SH_ALL_INT_MASK;
85 HUB_S((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED_ALIAS), 85 HUB_S((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED_ALIAS), mask);
86 mask);
87 __set_bit(irq, (volatile void *)pda->sn_in_service_ivecs); 86 __set_bit(irq, (volatile void *)pda->sn_in_service_ivecs);
88 87
89 move_irq(irq); 88 move_native_irq(irq);
90} 89}
91 90
92static void sn_end_irq(unsigned int irq) 91static void sn_end_irq(unsigned int irq)
@@ -219,9 +218,8 @@ static void register_intr_pda(struct sn_irq_info *sn_irq_info)
219 pdacpu(cpu)->sn_last_irq = irq; 218 pdacpu(cpu)->sn_last_irq = irq;
220 } 219 }
221 220
222 if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq) { 221 if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq)
223 pdacpu(cpu)->sn_first_irq = irq; 222 pdacpu(cpu)->sn_first_irq = irq;
224 }
225} 223}
226 224
227static void unregister_intr_pda(struct sn_irq_info *sn_irq_info) 225static void unregister_intr_pda(struct sn_irq_info *sn_irq_info)
@@ -289,7 +287,7 @@ void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info)
289 list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]); 287 list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]);
290 spin_unlock(&sn_irq_info_lock); 288 spin_unlock(&sn_irq_info_lock);
291 289
292 (void)register_intr_pda(sn_irq_info); 290 register_intr_pda(sn_irq_info);
293} 291}
294 292
295void sn_irq_unfixup(struct pci_dev *pci_dev) 293void sn_irq_unfixup(struct pci_dev *pci_dev)
@@ -301,7 +299,9 @@ void sn_irq_unfixup(struct pci_dev *pci_dev)
301 return; 299 return;
302 300
303 sn_irq_info = SN_PCIDEV_INFO(pci_dev)->pdi_sn_irq_info; 301 sn_irq_info = SN_PCIDEV_INFO(pci_dev)->pdi_sn_irq_info;
304 if (!sn_irq_info || !sn_irq_info->irq_irq) { 302 if (!sn_irq_info)
303 return;
304 if (!sn_irq_info->irq_irq) {
305 kfree(sn_irq_info); 305 kfree(sn_irq_info);
306 return; 306 return;
307 } 307 }
@@ -419,7 +419,7 @@ void sn_lb_int_war_check(void)
419 rcu_read_unlock(); 419 rcu_read_unlock();
420} 420}
421 421
422void sn_irq_lh_init(void) 422void __init sn_irq_lh_init(void)
423{ 423{
424 int i; 424 int i;
425 425
@@ -434,5 +434,4 @@ void sn_irq_lh_init(void)
434 434
435 INIT_LIST_HEAD(sn_irq_lh[i]); 435 INIT_LIST_HEAD(sn_irq_lh[i]);
436 } 436 }
437
438} 437}
diff --git a/arch/ia64/sn/kernel/klconflib.c b/arch/ia64/sn/kernel/klconflib.c
index 0f11a3299cd2..87682b48ef83 100644
--- a/arch/ia64/sn/kernel/klconflib.c
+++ b/arch/ia64/sn/kernel/klconflib.c
@@ -78,31 +78,30 @@ format_module_id(char *buffer, moduleid_t m, int fmt)
78 position = MODULE_GET_BPOS(m); 78 position = MODULE_GET_BPOS(m);
79 79
80 if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) { 80 if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) {
81 /* Brief module number format, eg. 002c15 */ 81 /* Brief module number format, eg. 002c15 */
82 82
83 /* Decompress the rack number */ 83 /* Decompress the rack number */
84 *buffer++ = '0' + RACK_GET_CLASS(rack); 84 *buffer++ = '0' + RACK_GET_CLASS(rack);
85 *buffer++ = '0' + RACK_GET_GROUP(rack); 85 *buffer++ = '0' + RACK_GET_GROUP(rack);
86 *buffer++ = '0' + RACK_GET_NUM(rack); 86 *buffer++ = '0' + RACK_GET_NUM(rack);
87 87
88 /* Add the brick type */ 88 /* Add the brick type */
89 *buffer++ = brickchar; 89 *buffer++ = brickchar;
90 } 90 }
91 else if (fmt == MODULE_FORMAT_LONG) { 91 else if (fmt == MODULE_FORMAT_LONG) {
92 /* Fuller hwgraph format, eg. rack/002/bay/15 */ 92 /* Fuller hwgraph format, eg. rack/002/bay/15 */
93 93
94 strcpy(buffer, "rack" "/"); buffer += strlen(buffer); 94 strcpy(buffer, "rack" "/"); buffer += strlen(buffer);
95 95
96 *buffer++ = '0' + RACK_GET_CLASS(rack); 96 *buffer++ = '0' + RACK_GET_CLASS(rack);
97 *buffer++ = '0' + RACK_GET_GROUP(rack); 97 *buffer++ = '0' + RACK_GET_GROUP(rack);
98 *buffer++ = '0' + RACK_GET_NUM(rack); 98 *buffer++ = '0' + RACK_GET_NUM(rack);
99 99
100 strcpy(buffer, "/" "bay" "/"); buffer += strlen(buffer); 100 strcpy(buffer, "/" "bay" "/"); buffer += strlen(buffer);
101 } 101 }
102 102
103 /* Add the bay position, using at least two digits */ 103 /* Add the bay position, using at least two digits */
104 if (position < 10) 104 if (position < 10)
105 *buffer++ = '0'; 105 *buffer++ = '0';
106 sprintf(buffer, "%d", position); 106 sprintf(buffer, "%d", position);
107
108} 107}
diff --git a/arch/ia64/sn/kernel/mca.c b/arch/ia64/sn/kernel/mca.c
index 9ab684d1bb55..3db62f24596c 100644
--- a/arch/ia64/sn/kernel/mca.c
+++ b/arch/ia64/sn/kernel/mca.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9#include <linux/types.h> 9#include <linux/types.h>
@@ -137,7 +137,8 @@ int sn_salinfo_platform_oemdata(const u8 *sect_header, u8 **oemdata, u64 *oemdat
137 137
138static int __init sn_salinfo_init(void) 138static int __init sn_salinfo_init(void)
139{ 139{
140 salinfo_platform_oemdata = &sn_salinfo_platform_oemdata; 140 if (ia64_platform_is("sn2"))
141 salinfo_platform_oemdata = &sn_salinfo_platform_oemdata;
141 return 0; 142 return 0;
142} 143}
143 144
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c
index e510dce9971f..5b84836c2171 100644
--- a/arch/ia64/sn/kernel/setup.c
+++ b/arch/ia64/sn/kernel/setup.c
@@ -67,6 +67,7 @@ extern unsigned long last_time_offset;
67extern void (*ia64_mark_idle) (int); 67extern void (*ia64_mark_idle) (int);
68extern void snidle(int); 68extern void snidle(int);
69extern unsigned char acpi_kbd_controller_present; 69extern unsigned char acpi_kbd_controller_present;
70extern unsigned long long (*ia64_printk_clock)(void);
70 71
71unsigned long sn_rtc_cycles_per_second; 72unsigned long sn_rtc_cycles_per_second;
72EXPORT_SYMBOL(sn_rtc_cycles_per_second); 73EXPORT_SYMBOL(sn_rtc_cycles_per_second);
@@ -74,7 +75,7 @@ EXPORT_SYMBOL(sn_rtc_cycles_per_second);
74DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); 75DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info);
75EXPORT_PER_CPU_SYMBOL(__sn_hub_info); 76EXPORT_PER_CPU_SYMBOL(__sn_hub_info);
76 77
77DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_NUMNODES]); 78DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_COMPACT_NODES]);
78EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid); 79EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid);
79 80
80DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda); 81DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda);
@@ -125,20 +126,6 @@ struct screen_info sn_screen_info = {
125}; 126};
126 127
127/* 128/*
128 * This is here so we can use the CMOS detection in ide-probe.c to
129 * determine what drives are present. In theory, we don't need this
130 * as the auto-detection could be done via ide-probe.c:do_probe() but
131 * in practice that would be much slower, which is painful when
132 * running in the simulator. Note that passing zeroes in DRIVE_INFO
133 * is sufficient (the IDE driver will autodetect the drive geometry).
134 */
135#ifdef CONFIG_IA64_GENERIC
136extern char drive_info[4 * 16];
137#else
138char drive_info[4 * 16];
139#endif
140
141/*
142 * This routine can only be used during init, since 129 * This routine can only be used during init, since
143 * smp_boot_data is an init data structure. 130 * smp_boot_data is an init data structure.
144 * We have to use smp_boot_data.cpu_phys_id to find 131 * We have to use smp_boot_data.cpu_phys_id to find
@@ -209,7 +196,7 @@ void __init early_sn_setup(void)
209} 196}
210 197
211extern int platform_intr_list[]; 198extern int platform_intr_list[];
212static int __initdata shub_1_1_found = 0; 199static int __initdata shub_1_1_found;
213 200
214/* 201/*
215 * sn_check_for_wars 202 * sn_check_for_wars
@@ -330,6 +317,7 @@ struct pcdp_vga_device {
330#define PCDP_PCI_TRANS_IOPORT 0x02 317#define PCDP_PCI_TRANS_IOPORT 0x02
331#define PCDP_PCI_TRANS_MMIO 0x01 318#define PCDP_PCI_TRANS_MMIO 0x01
332 319
320#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
333static void 321static void
334sn_scan_pcdp(void) 322sn_scan_pcdp(void)
335{ 323{
@@ -371,6 +359,17 @@ sn_scan_pcdp(void)
371 break; /* once we find the primary, we're done */ 359 break; /* once we find the primary, we're done */
372 } 360 }
373} 361}
362#endif
363
364static unsigned long sn2_rtc_initial;
365
366static unsigned long long ia64_sn2_printk_clock(void)
367{
368 unsigned long rtc_now = rtc_time();
369
370 return (rtc_now - sn2_rtc_initial) *
371 (1000000000 / sn_rtc_cycles_per_second);
372}
374 373
375/** 374/**
376 * sn_setup - SN platform setup routine 375 * sn_setup - SN platform setup routine
@@ -386,6 +385,7 @@ void __init sn_setup(char **cmdline_p)
386 u32 version = sn_sal_rev(); 385 u32 version = sn_sal_rev();
387 extern void sn_cpu_init(void); 386 extern void sn_cpu_init(void);
388 387
388 sn2_rtc_initial = rtc_time();
389 ia64_sn_plat_set_error_handling_features(); // obsolete 389 ia64_sn_plat_set_error_handling_features(); // obsolete
390 ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV); 390 ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV);
391 ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES); 391 ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES);
@@ -437,19 +437,6 @@ void __init sn_setup(char **cmdline_p)
437 */ 437 */
438 build_cnode_tables(); 438 build_cnode_tables();
439 439
440 /*
441 * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
442 * support here so we don't have to listen to failed keyboard probe
443 * messages.
444 */
445 if (version <= 0x0209 && acpi_kbd_controller_present) {
446 printk(KERN_INFO "Disabling legacy keyboard support as prom "
447 "is too old and doesn't provide FADT\n");
448 acpi_kbd_controller_present = 0;
449 }
450
451 printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
452
453 status = 440 status =
454 ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, 441 ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec,
455 &drift); 442 &drift);
@@ -463,6 +450,21 @@ void __init sn_setup(char **cmdline_p)
463 450
464 platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR; 451 platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR;
465 452
453 ia64_printk_clock = ia64_sn2_printk_clock;
454
455 /*
456 * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
457 * support here so we don't have to listen to failed keyboard probe
458 * messages.
459 */
460 if (version <= 0x0209 && acpi_kbd_controller_present) {
461 printk(KERN_INFO "Disabling legacy keyboard support as prom "
462 "is too old and doesn't provide FADT\n");
463 acpi_kbd_controller_present = 0;
464 }
465
466 printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
467
466 /* 468 /*
467 * we set the default root device to /dev/hda 469 * we set the default root device to /dev/hda
468 * to make simulation easy 470 * to make simulation easy
@@ -578,13 +580,17 @@ void __init sn_cpu_init(void)
578 sn_prom_type = 2; 580 sn_prom_type = 2;
579 else 581 else
580 sn_prom_type = 1; 582 sn_prom_type = 1;
581 printk("Running on medusa with %s PROM\n", (sn_prom_type == 1) ? "real" : "fake"); 583 printk(KERN_INFO "Running on medusa with %s PROM\n",
584 (sn_prom_type == 1) ? "real" : "fake");
582 } 585 }
583 586
584 memset(pda, 0, sizeof(pda)); 587 memset(pda, 0, sizeof(pda));
585 if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift, 588 if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2,
586 &sn_system_size, &sn_sharing_domain_size, &sn_partition_id, 589 &sn_hub_info->nasid_bitmask,
587 &sn_coherency_id, &sn_region_size)) 590 &sn_hub_info->nasid_shift,
591 &sn_system_size, &sn_sharing_domain_size,
592 &sn_partition_id, &sn_coherency_id,
593 &sn_region_size))
588 BUG(); 594 BUG();
589 sn_hub_info->as_shift = sn_hub_info->nasid_shift - 2; 595 sn_hub_info->as_shift = sn_hub_info->nasid_shift - 2;
590 596
@@ -716,7 +722,8 @@ void __init build_cnode_tables(void)
716 for_each_online_node(node) { 722 for_each_online_node(node) {
717 kl_config_hdr_t *klgraph_header; 723 kl_config_hdr_t *klgraph_header;
718 nasid = cnodeid_to_nasid(node); 724 nasid = cnodeid_to_nasid(node);
719 if ((klgraph_header = ia64_sn_get_klconfig_addr(nasid)) == NULL) 725 klgraph_header = ia64_sn_get_klconfig_addr(nasid);
726 if (klgraph_header == NULL)
720 BUG(); 727 BUG();
721 brd = NODE_OFFSET_TO_LBOARD(nasid, klgraph_header->ch_board_info); 728 brd = NODE_OFFSET_TO_LBOARD(nasid, klgraph_header->ch_board_info);
722 while (brd) { 729 while (brd) {
@@ -734,7 +741,7 @@ nasid_slice_to_cpuid(int nasid, int slice)
734{ 741{
735 long cpu; 742 long cpu;
736 743
737 for (cpu=0; cpu < NR_CPUS; cpu++) 744 for (cpu = 0; cpu < NR_CPUS; cpu++)
738 if (cpuid_to_nasid(cpu) == nasid && 745 if (cpuid_to_nasid(cpu) == nasid &&
739 cpuid_to_slice(cpu) == slice) 746 cpuid_to_slice(cpu) == slice)
740 return cpu; 747 return cpu;
diff --git a/arch/ia64/sn/kernel/sn2/Makefile b/arch/ia64/sn/kernel/sn2/Makefile
index 170bde4549da..99e177693234 100644
--- a/arch/ia64/sn/kernel/sn2/Makefile
+++ b/arch/ia64/sn/kernel/sn2/Makefile
@@ -9,5 +9,7 @@
9# sn2 specific kernel files 9# sn2 specific kernel files
10# 10#
11 11
12CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
13
12obj-y += cache.o io.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o \ 14obj-y += cache.o io.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o \
13 prominfo_proc.o timer.o timer_interrupt.o sn_hwperf.o 15 prominfo_proc.o timer.o timer_interrupt.o sn_hwperf.o
diff --git a/arch/ia64/sn/kernel/sn2/prominfo_proc.c b/arch/ia64/sn/kernel/sn2/prominfo_proc.c
index 81c63b2f8ae9..6ae276d5d50c 100644
--- a/arch/ia64/sn/kernel/sn2/prominfo_proc.c
+++ b/arch/ia64/sn/kernel/sn2/prominfo_proc.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1999,2001-2004 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (C) 1999,2001-2004, 2006 Silicon Graphics, Inc. All Rights Reserved.
7 * 7 *
8 * Module to export the system's Firmware Interface Tables, including 8 * Module to export the system's Firmware Interface Tables, including
9 * PROM revision numbers and banners, in /proc 9 * PROM revision numbers and banners, in /proc
@@ -190,7 +190,7 @@ static int
190read_version_entry(char *page, char **start, off_t off, int count, int *eof, 190read_version_entry(char *page, char **start, off_t off, int count, int *eof,
191 void *data) 191 void *data)
192{ 192{
193 int len = 0; 193 int len;
194 194
195 /* data holds the NASID of the node */ 195 /* data holds the NASID of the node */
196 len = dump_version(page, (unsigned long)data); 196 len = dump_version(page, (unsigned long)data);
@@ -202,7 +202,7 @@ static int
202read_fit_entry(char *page, char **start, off_t off, int count, int *eof, 202read_fit_entry(char *page, char **start, off_t off, int count, int *eof,
203 void *data) 203 void *data)
204{ 204{
205 int len = 0; 205 int len;
206 206
207 /* data holds the NASID of the node */ 207 /* data holds the NASID of the node */
208 len = dump_fit(page, (unsigned long)data); 208 len = dump_fit(page, (unsigned long)data);
@@ -229,13 +229,16 @@ int __init prominfo_init(void)
229 struct proc_dir_entry *p; 229 struct proc_dir_entry *p;
230 cnodeid_t cnodeid; 230 cnodeid_t cnodeid;
231 unsigned long nasid; 231 unsigned long nasid;
232 int size;
232 char name[NODE_NAME_LEN]; 233 char name[NODE_NAME_LEN];
233 234
234 if (!ia64_platform_is("sn2")) 235 if (!ia64_platform_is("sn2"))
235 return 0; 236 return 0;
236 237
237 proc_entries = kmalloc(num_online_nodes() * sizeof(struct proc_dir_entry *), 238 size = num_online_nodes() * sizeof(struct proc_dir_entry *);
238 GFP_KERNEL); 239 proc_entries = kzalloc(size, GFP_KERNEL);
240 if (!proc_entries)
241 return -ENOMEM;
239 242
240 sgi_prominfo_entry = proc_mkdir("sgi_prominfo", NULL); 243 sgi_prominfo_entry = proc_mkdir("sgi_prominfo", NULL);
241 244
@@ -244,14 +247,12 @@ int __init prominfo_init(void)
244 sprintf(name, "node%d", cnodeid); 247 sprintf(name, "node%d", cnodeid);
245 *entp = proc_mkdir(name, sgi_prominfo_entry); 248 *entp = proc_mkdir(name, sgi_prominfo_entry);
246 nasid = cnodeid_to_nasid(cnodeid); 249 nasid = cnodeid_to_nasid(cnodeid);
247 p = create_proc_read_entry( 250 p = create_proc_read_entry("fit", 0, *entp, read_fit_entry,
248 "fit", 0, *entp, read_fit_entry, 251 (void *)nasid);
249 (void *)nasid);
250 if (p) 252 if (p)
251 p->owner = THIS_MODULE; 253 p->owner = THIS_MODULE;
252 p = create_proc_read_entry( 254 p = create_proc_read_entry("version", 0, *entp,
253 "version", 0, *entp, read_version_entry, 255 read_version_entry, (void *)nasid);
254 (void *)nasid);
255 if (p) 256 if (p)
256 p->owner = THIS_MODULE; 257 p->owner = THIS_MODULE;
257 entp++; 258 entp++;
@@ -263,7 +264,7 @@ int __init prominfo_init(void)
263void __exit prominfo_exit(void) 264void __exit prominfo_exit(void)
264{ 265{
265 struct proc_dir_entry **entp; 266 struct proc_dir_entry **entp;
266 unsigned cnodeid; 267 unsigned int cnodeid;
267 char name[NODE_NAME_LEN]; 268 char name[NODE_NAME_LEN];
268 269
269 entp = proc_entries; 270 entp = proc_entries;
diff --git a/arch/ia64/sn/kernel/sn2/sn2_smp.c b/arch/ia64/sn/kernel/sn2/sn2_smp.c
index 471bbaa65d1b..b2e1e746b47f 100644
--- a/arch/ia64/sn/kernel/sn2/sn2_smp.c
+++ b/arch/ia64/sn/kernel/sn2/sn2_smp.c
@@ -5,7 +5,7 @@
5 * License. See the file "COPYING" in the main directory of this archive 5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 6 * for more details.
7 * 7 *
8 * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved. 8 * Copyright (C) 2000-2006 Silicon Graphics, Inc. All rights reserved.
9 */ 9 */
10 10
11#include <linux/init.h> 11#include <linux/init.h>
@@ -46,104 +46,24 @@ DECLARE_PER_CPU(struct ptc_stats, ptcstats);
46 46
47static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock); 47static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock);
48 48
49void sn2_ptc_deadlock_recovery(short *, short, int, volatile unsigned long *, unsigned long data0, 49extern unsigned long
50 volatile unsigned long *, unsigned long data1); 50sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long,
51 volatile unsigned long *, unsigned long,
52 volatile unsigned long *, unsigned long);
53void
54sn2_ptc_deadlock_recovery(short *, short, short, int,
55 volatile unsigned long *, unsigned long,
56 volatile unsigned long *, unsigned long);
51 57
52#ifdef DEBUG_PTC
53/* 58/*
54 * ptctest: 59 * Note: some is the following is captured here to make degugging easier
55 * 60 * (the macros make more sense if you see the debug patch - not posted)
56 * xyz - 3 digit hex number:
57 * x - Force PTC purges to use shub:
58 * 0 - no force
59 * 1 - force
60 * y - interupt enable
61 * 0 - disable interrupts
62 * 1 - leave interuupts enabled
63 * z - type of lock:
64 * 0 - global lock
65 * 1 - node local lock
66 * 2 - no lock
67 *
68 * Note: on shub1, only ptctest == 0 is supported. Don't try other values!
69 */ 61 */
70
71static unsigned int sn2_ptctest = 0;
72
73static int __init ptc_test(char *str)
74{
75 get_option(&str, &sn2_ptctest);
76 return 1;
77}
78__setup("ptctest=", ptc_test);
79
80static inline int ptc_lock(unsigned long *flagp)
81{
82 unsigned long opt = sn2_ptctest & 255;
83
84 switch (opt) {
85 case 0x00:
86 spin_lock_irqsave(&sn2_global_ptc_lock, *flagp);
87 break;
88 case 0x01:
89 spin_lock_irqsave(&sn_nodepda->ptc_lock, *flagp);
90 break;
91 case 0x02:
92 local_irq_save(*flagp);
93 break;
94 case 0x10:
95 spin_lock(&sn2_global_ptc_lock);
96 break;
97 case 0x11:
98 spin_lock(&sn_nodepda->ptc_lock);
99 break;
100 case 0x12:
101 break;
102 default:
103 BUG();
104 }
105 return opt;
106}
107
108static inline void ptc_unlock(unsigned long flags, int opt)
109{
110 switch (opt) {
111 case 0x00:
112 spin_unlock_irqrestore(&sn2_global_ptc_lock, flags);
113 break;
114 case 0x01:
115 spin_unlock_irqrestore(&sn_nodepda->ptc_lock, flags);
116 break;
117 case 0x02:
118 local_irq_restore(flags);
119 break;
120 case 0x10:
121 spin_unlock(&sn2_global_ptc_lock);
122 break;
123 case 0x11:
124 spin_unlock(&sn_nodepda->ptc_lock);
125 break;
126 case 0x12:
127 break;
128 default:
129 BUG();
130 }
131}
132#else
133
134#define sn2_ptctest 0 62#define sn2_ptctest 0
135 63#define local_node_uses_ptc_ga(sh1) ((sh1) ? 1 : 0)
136static inline int ptc_lock(unsigned long *flagp) 64#define max_active_pio(sh1) ((sh1) ? 32 : 7)
137{ 65#define reset_max_active_on_deadlock() 1
138 spin_lock_irqsave(&sn2_global_ptc_lock, *flagp); 66#define PTC_LOCK(sh1) ((sh1) ? &sn2_global_ptc_lock : &sn_nodepda->ptc_lock)
139 return 0;
140}
141
142static inline void ptc_unlock(unsigned long flags, int opt)
143{
144 spin_unlock_irqrestore(&sn2_global_ptc_lock, flags);
145}
146#endif
147 67
148struct ptc_stats { 68struct ptc_stats {
149 unsigned long ptc_l; 69 unsigned long ptc_l;
@@ -151,27 +71,32 @@ struct ptc_stats {
151 unsigned long shub_ptc_flushes; 71 unsigned long shub_ptc_flushes;
152 unsigned long nodes_flushed; 72 unsigned long nodes_flushed;
153 unsigned long deadlocks; 73 unsigned long deadlocks;
74 unsigned long deadlocks2;
154 unsigned long lock_itc_clocks; 75 unsigned long lock_itc_clocks;
155 unsigned long shub_itc_clocks; 76 unsigned long shub_itc_clocks;
156 unsigned long shub_itc_clocks_max; 77 unsigned long shub_itc_clocks_max;
78 unsigned long shub_ptc_flushes_not_my_mm;
157}; 79};
158 80
81#define sn2_ptctest 0
82
159static inline unsigned long wait_piowc(void) 83static inline unsigned long wait_piowc(void)
160{ 84{
161 volatile unsigned long *piows, zeroval; 85 volatile unsigned long *piows;
162 unsigned long ws; 86 unsigned long zeroval, ws;
163 87
164 piows = pda->pio_write_status_addr; 88 piows = pda->pio_write_status_addr;
165 zeroval = pda->pio_write_status_val; 89 zeroval = pda->pio_write_status_val;
166 do { 90 do {
167 cpu_relax(); 91 cpu_relax();
168 } while (((ws = *piows) & SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK) != zeroval); 92 } while (((ws = *piows) & SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK) != zeroval);
169 return ws; 93 return (ws & SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK) != 0;
170} 94}
171 95
172void sn_tlb_migrate_finish(struct mm_struct *mm) 96void sn_tlb_migrate_finish(struct mm_struct *mm)
173{ 97{
174 if (mm == current->mm) 98 /* flush_tlb_mm is inefficient if more than 1 users of mm */
99 if (mm == current->mm && mm && atomic_read(&mm->mm_users) == 1)
175 flush_tlb_mm(mm); 100 flush_tlb_mm(mm);
176} 101}
177 102
@@ -201,12 +126,14 @@ void
201sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start, 126sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
202 unsigned long end, unsigned long nbits) 127 unsigned long end, unsigned long nbits)
203{ 128{
204 int i, opt, shub1, cnode, mynasid, cpu, lcpu = 0, nasid, flushed = 0; 129 int i, ibegin, shub1, cnode, mynasid, cpu, lcpu = 0, nasid;
205 int mymm = (mm == current->active_mm && current->mm); 130 int mymm = (mm == current->active_mm && mm == current->mm);
131 int use_cpu_ptcga;
206 volatile unsigned long *ptc0, *ptc1; 132 volatile unsigned long *ptc0, *ptc1;
207 unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value; 133 unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value, old_rr = 0;
208 short nasids[MAX_NUMNODES], nix; 134 short nasids[MAX_NUMNODES], nix;
209 nodemask_t nodes_flushed; 135 nodemask_t nodes_flushed;
136 int active, max_active, deadlock;
210 137
211 nodes_clear(nodes_flushed); 138 nodes_clear(nodes_flushed);
212 i = 0; 139 i = 0;
@@ -267,41 +194,56 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
267 194
268 195
269 mynasid = get_nasid(); 196 mynasid = get_nasid();
197 use_cpu_ptcga = local_node_uses_ptc_ga(shub1);
198 max_active = max_active_pio(shub1);
270 199
271 itc = ia64_get_itc(); 200 itc = ia64_get_itc();
272 opt = ptc_lock(&flags); 201 spin_lock_irqsave(PTC_LOCK(shub1), flags);
273 itc2 = ia64_get_itc(); 202 itc2 = ia64_get_itc();
203
274 __get_cpu_var(ptcstats).lock_itc_clocks += itc2 - itc; 204 __get_cpu_var(ptcstats).lock_itc_clocks += itc2 - itc;
275 __get_cpu_var(ptcstats).shub_ptc_flushes++; 205 __get_cpu_var(ptcstats).shub_ptc_flushes++;
276 __get_cpu_var(ptcstats).nodes_flushed += nix; 206 __get_cpu_var(ptcstats).nodes_flushed += nix;
207 if (!mymm)
208 __get_cpu_var(ptcstats).shub_ptc_flushes_not_my_mm++;
277 209
210 if (use_cpu_ptcga && !mymm) {
211 old_rr = ia64_get_rr(start);
212 ia64_set_rr(start, (old_rr & 0xff) | (rr_value << 8));
213 ia64_srlz_d();
214 }
215
216 wait_piowc();
278 do { 217 do {
279 if (shub1) 218 if (shub1)
280 data1 = start | (1UL << SH1_PTC_1_START_SHFT); 219 data1 = start | (1UL << SH1_PTC_1_START_SHFT);
281 else 220 else
282 data0 = (data0 & ~SH2_PTC_ADDR_MASK) | (start & SH2_PTC_ADDR_MASK); 221 data0 = (data0 & ~SH2_PTC_ADDR_MASK) | (start & SH2_PTC_ADDR_MASK);
283 for (i = 0; i < nix; i++) { 222 deadlock = 0;
223 active = 0;
224 for (ibegin = 0, i = 0; i < nix; i++) {
284 nasid = nasids[i]; 225 nasid = nasids[i];
285 if ((!(sn2_ptctest & 3)) && unlikely(nasid == mynasid && mymm)) { 226 if (use_cpu_ptcga && unlikely(nasid == mynasid)) {
286 ia64_ptcga(start, nbits << 2); 227 ia64_ptcga(start, nbits << 2);
287 ia64_srlz_i(); 228 ia64_srlz_i();
288 } else { 229 } else {
289 ptc0 = CHANGE_NASID(nasid, ptc0); 230 ptc0 = CHANGE_NASID(nasid, ptc0);
290 if (ptc1) 231 if (ptc1)
291 ptc1 = CHANGE_NASID(nasid, ptc1); 232 ptc1 = CHANGE_NASID(nasid, ptc1);
292 pio_atomic_phys_write_mmrs(ptc0, data0, ptc1, 233 pio_atomic_phys_write_mmrs(ptc0, data0, ptc1, data1);
293 data1); 234 active++;
294 flushed = 1; 235 }
236 if (active >= max_active || i == (nix - 1)) {
237 if ((deadlock = wait_piowc())) {
238 sn2_ptc_deadlock_recovery(nasids, ibegin, i, mynasid, ptc0, data0, ptc1, data1);
239 if (reset_max_active_on_deadlock())
240 max_active = 1;
241 }
242 active = 0;
243 ibegin = i + 1;
295 } 244 }
296 } 245 }
297 if (flushed
298 && (wait_piowc() &
299 (SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK))) {
300 sn2_ptc_deadlock_recovery(nasids, nix, mynasid, ptc0, data0, ptc1, data1);
301 }
302
303 start += (1UL << nbits); 246 start += (1UL << nbits);
304
305 } while (start < end); 247 } while (start < end);
306 248
307 itc2 = ia64_get_itc() - itc2; 249 itc2 = ia64_get_itc() - itc2;
@@ -309,7 +251,12 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
309 if (itc2 > __get_cpu_var(ptcstats).shub_itc_clocks_max) 251 if (itc2 > __get_cpu_var(ptcstats).shub_itc_clocks_max)
310 __get_cpu_var(ptcstats).shub_itc_clocks_max = itc2; 252 __get_cpu_var(ptcstats).shub_itc_clocks_max = itc2;
311 253
312 ptc_unlock(flags, opt); 254 if (old_rr) {
255 ia64_set_rr(start, old_rr);
256 ia64_srlz_d();
257 }
258
259 spin_unlock_irqrestore(PTC_LOCK(shub1), flags);
313 260
314 preempt_enable(); 261 preempt_enable();
315} 262}
@@ -321,27 +268,31 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
321 * TLB flush transaction. The recovery sequence is somewhat tricky & is 268 * TLB flush transaction. The recovery sequence is somewhat tricky & is
322 * coded in assembly language. 269 * coded in assembly language.
323 */ 270 */
324void sn2_ptc_deadlock_recovery(short *nasids, short nix, int mynasid, volatile unsigned long *ptc0, unsigned long data0, 271
325 volatile unsigned long *ptc1, unsigned long data1) 272void
273sn2_ptc_deadlock_recovery(short *nasids, short ib, short ie, int mynasid,
274 volatile unsigned long *ptc0, unsigned long data0,
275 volatile unsigned long *ptc1, unsigned long data1)
326{ 276{
327 extern void sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long,
328 volatile unsigned long *, unsigned long, volatile unsigned long *, unsigned long);
329 short nasid, i; 277 short nasid, i;
330 unsigned long *piows, zeroval; 278 unsigned long *piows, zeroval, n;
331 279
332 __get_cpu_var(ptcstats).deadlocks++; 280 __get_cpu_var(ptcstats).deadlocks++;
333 281
334 piows = (unsigned long *) pda->pio_write_status_addr; 282 piows = (unsigned long *) pda->pio_write_status_addr;
335 zeroval = pda->pio_write_status_val; 283 zeroval = pda->pio_write_status_val;
336 284
337 for (i=0; i < nix; i++) { 285
286 for (i=ib; i <= ie; i++) {
338 nasid = nasids[i]; 287 nasid = nasids[i];
339 if (!(sn2_ptctest & 3) && nasid == mynasid) 288 if (local_node_uses_ptc_ga(is_shub1()) && nasid == mynasid)
340 continue; 289 continue;
341 ptc0 = CHANGE_NASID(nasid, ptc0); 290 ptc0 = CHANGE_NASID(nasid, ptc0);
342 if (ptc1) 291 if (ptc1)
343 ptc1 = CHANGE_NASID(nasid, ptc1); 292 ptc1 = CHANGE_NASID(nasid, ptc1);
344 sn2_ptc_deadlock_recovery_core(ptc0, data0, ptc1, data1, piows, zeroval); 293
294 n = sn2_ptc_deadlock_recovery_core(ptc0, data0, ptc1, data1, piows, zeroval);
295 __get_cpu_var(ptcstats).deadlocks2 += n;
345 } 296 }
346 297
347} 298}
@@ -452,20 +403,22 @@ static int sn2_ptc_seq_show(struct seq_file *file, void *data)
452 cpu = *(loff_t *) data; 403 cpu = *(loff_t *) data;
453 404
454 if (!cpu) { 405 if (!cpu) {
455 seq_printf(file, "# ptc_l change_rid shub_ptc_flushes shub_nodes_flushed deadlocks lock_nsec shub_nsec shub_nsec_max\n"); 406 seq_printf(file,
407 "# cpu ptc_l newrid ptc_flushes nodes_flushed deadlocks lock_nsec shub_nsec shub_nsec_max not_my_mm deadlock2\n");
456 seq_printf(file, "# ptctest %d\n", sn2_ptctest); 408 seq_printf(file, "# ptctest %d\n", sn2_ptctest);
457 } 409 }
458 410
459 if (cpu < NR_CPUS && cpu_online(cpu)) { 411 if (cpu < NR_CPUS && cpu_online(cpu)) {
460 stat = &per_cpu(ptcstats, cpu); 412 stat = &per_cpu(ptcstats, cpu);
461 seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l, 413 seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l,
462 stat->change_rid, stat->shub_ptc_flushes, stat->nodes_flushed, 414 stat->change_rid, stat->shub_ptc_flushes, stat->nodes_flushed,
463 stat->deadlocks, 415 stat->deadlocks,
464 1000 * stat->lock_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec, 416 1000 * stat->lock_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec,
465 1000 * stat->shub_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec, 417 1000 * stat->shub_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec,
466 1000 * stat->shub_itc_clocks_max / per_cpu(cpu_info, cpu).cyc_per_usec); 418 1000 * stat->shub_itc_clocks_max / per_cpu(cpu_info, cpu).cyc_per_usec,
419 stat->shub_ptc_flushes_not_my_mm,
420 stat->deadlocks2);
467 } 421 }
468
469 return 0; 422 return 0;
470} 423}
471 424
@@ -476,7 +429,7 @@ static struct seq_operations sn2_ptc_seq_ops = {
476 .show = sn2_ptc_seq_show 429 .show = sn2_ptc_seq_show
477}; 430};
478 431
479int sn2_ptc_proc_open(struct inode *inode, struct file *file) 432static int sn2_ptc_proc_open(struct inode *inode, struct file *file)
480{ 433{
481 return seq_open(file, &sn2_ptc_seq_ops); 434 return seq_open(file, &sn2_ptc_seq_ops);
482} 435}
@@ -493,7 +446,7 @@ static struct proc_dir_entry *proc_sn2_ptc;
493static int __init sn2_ptc_init(void) 446static int __init sn2_ptc_init(void)
494{ 447{
495 if (!ia64_platform_is("sn2")) 448 if (!ia64_platform_is("sn2"))
496 return -ENOSYS; 449 return 0;
497 450
498 if (!(proc_sn2_ptc = create_proc_entry(PTC_BASENAME, 0444, NULL))) { 451 if (!(proc_sn2_ptc = create_proc_entry(PTC_BASENAME, 0444, NULL))) {
499 printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME); 452 printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME);
diff --git a/arch/ia64/sn/kernel/sn2/sn_hwperf.c b/arch/ia64/sn/kernel/sn2/sn_hwperf.c
index 19b54fbcd7ea..70db21f3df21 100644
--- a/arch/ia64/sn/kernel/sn2/sn_hwperf.c
+++ b/arch/ia64/sn/kernel/sn2/sn_hwperf.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 2004-2005 Silicon Graphics, Inc. All rights reserved. 6 * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved.
7 * 7 *
8 * SGI Altix topology and hardware performance monitoring API. 8 * SGI Altix topology and hardware performance monitoring API.
9 * Mark Goodwin <markgw@sgi.com>. 9 * Mark Goodwin <markgw@sgi.com>.
@@ -973,6 +973,9 @@ static int __devinit sn_hwperf_misc_register_init(void)
973{ 973{
974 int e; 974 int e;
975 975
976 if (!ia64_platform_is("sn2"))
977 return 0;
978
976 sn_hwperf_init(); 979 sn_hwperf_init();
977 980
978 /* 981 /*
diff --git a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c
index a06719d752a0..c686d9c12f7b 100644
--- a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c
+++ b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c
@@ -6,11 +6,11 @@
6 * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved. 6 * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved.
7 */ 7 */
8#include <linux/config.h> 8#include <linux/config.h>
9#include <asm/uaccess.h>
10 9
11#ifdef CONFIG_PROC_FS 10#ifdef CONFIG_PROC_FS
12#include <linux/proc_fs.h> 11#include <linux/proc_fs.h>
13#include <linux/seq_file.h> 12#include <linux/seq_file.h>
13#include <asm/uaccess.h>
14#include <asm/sn/sn_sal.h> 14#include <asm/sn/sn_sal.h>
15 15
16static int partition_id_show(struct seq_file *s, void *p) 16static int partition_id_show(struct seq_file *s, void *p)
@@ -90,10 +90,10 @@ static int coherence_id_open(struct inode *inode, struct file *file)
90 return single_open(file, coherence_id_show, NULL); 90 return single_open(file, coherence_id_show, NULL);
91} 91}
92 92
93static struct proc_dir_entry *sn_procfs_create_entry( 93static struct proc_dir_entry
94 const char *name, struct proc_dir_entry *parent, 94*sn_procfs_create_entry(const char *name, struct proc_dir_entry *parent,
95 int (*openfunc)(struct inode *, struct file *), 95 int (*openfunc)(struct inode *, struct file *),
96 int (*releasefunc)(struct inode *, struct file *)) 96 int (*releasefunc)(struct inode *, struct file *))
97{ 97{
98 struct proc_dir_entry *e = create_proc_entry(name, 0444, parent); 98 struct proc_dir_entry *e = create_proc_entry(name, 0444, parent);
99 99
@@ -126,24 +126,24 @@ void register_sn_procfs(void)
126 return; 126 return;
127 127
128 sn_procfs_create_entry("partition_id", sgi_proc_dir, 128 sn_procfs_create_entry("partition_id", sgi_proc_dir,
129 partition_id_open, single_release); 129 partition_id_open, single_release);
130 130
131 sn_procfs_create_entry("system_serial_number", sgi_proc_dir, 131 sn_procfs_create_entry("system_serial_number", sgi_proc_dir,
132 system_serial_number_open, single_release); 132 system_serial_number_open, single_release);
133 133
134 sn_procfs_create_entry("licenseID", sgi_proc_dir, 134 sn_procfs_create_entry("licenseID", sgi_proc_dir,
135 licenseID_open, single_release); 135 licenseID_open, single_release);
136 136
137 e = sn_procfs_create_entry("sn_force_interrupt", sgi_proc_dir, 137 e = sn_procfs_create_entry("sn_force_interrupt", sgi_proc_dir,
138 sn_force_interrupt_open, single_release); 138 sn_force_interrupt_open, single_release);
139 if (e) 139 if (e)
140 e->proc_fops->write = sn_force_interrupt_write_proc; 140 e->proc_fops->write = sn_force_interrupt_write_proc;
141 141
142 sn_procfs_create_entry("coherence_id", sgi_proc_dir, 142 sn_procfs_create_entry("coherence_id", sgi_proc_dir,
143 coherence_id_open, single_release); 143 coherence_id_open, single_release);
144 144
145 sn_procfs_create_entry("sn_topology", sgi_proc_dir, 145 sn_procfs_create_entry("sn_topology", sgi_proc_dir,
146 sn_topology_open, sn_topology_release); 146 sn_topology_open, sn_topology_release);
147} 147}
148 148
149#endif /* CONFIG_PROC_FS */ 149#endif /* CONFIG_PROC_FS */
diff --git a/arch/ia64/sn/kernel/sn2/timer.c b/arch/ia64/sn/kernel/sn2/timer.c
index deb9baf4d473..56a88b6df4b4 100644
--- a/arch/ia64/sn/kernel/sn2/timer.c
+++ b/arch/ia64/sn/kernel/sn2/timer.c
@@ -14,6 +14,7 @@
14 14
15#include <asm/hw_irq.h> 15#include <asm/hw_irq.h>
16#include <asm/system.h> 16#include <asm/system.h>
17#include <asm/timex.h>
17 18
18#include <asm/sn/leds.h> 19#include <asm/sn/leds.h>
19#include <asm/sn/shub_mmr.h> 20#include <asm/sn/shub_mmr.h>
@@ -28,9 +29,27 @@ static struct time_interpolator sn2_interpolator = {
28 .source = TIME_SOURCE_MMIO64 29 .source = TIME_SOURCE_MMIO64
29}; 30};
30 31
32/*
33 * sn udelay uses the RTC instead of the ITC because the ITC is not
34 * synchronized across all CPUs, and the thread may migrate to another CPU
35 * if preemption is enabled.
36 */
37static void
38ia64_sn_udelay (unsigned long usecs)
39{
40 unsigned long start = rtc_time();
41 unsigned long end = start +
42 usecs * sn_rtc_cycles_per_second / 1000000;
43
44 while (time_before((unsigned long)rtc_time(), end))
45 cpu_relax();
46}
47
31void __init sn_timer_init(void) 48void __init sn_timer_init(void)
32{ 49{
33 sn2_interpolator.frequency = sn_rtc_cycles_per_second; 50 sn2_interpolator.frequency = sn_rtc_cycles_per_second;
34 sn2_interpolator.addr = RTC_COUNTER_ADDR; 51 sn2_interpolator.addr = RTC_COUNTER_ADDR;
35 register_time_interpolator(&sn2_interpolator); 52 register_time_interpolator(&sn2_interpolator);
53
54 ia64_udelay = &ia64_sn_udelay;
36} 55}
diff --git a/arch/ia64/sn/kernel/sn2/timer_interrupt.c b/arch/ia64/sn/kernel/sn2/timer_interrupt.c
index adf5db2e2afe..fa7f69945917 100644
--- a/arch/ia64/sn/kernel/sn2/timer_interrupt.c
+++ b/arch/ia64/sn/kernel/sn2/timer_interrupt.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * 2 *
3 * 3 *
4 * Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved. 4 * Copyright (c) 2005, 2006 Silicon Graphics, Inc. All Rights Reserved.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of version 2 of the GNU General Public License 7 * under the terms of version 2 of the GNU General Public License
@@ -22,11 +22,6 @@
22 * License along with this program; if not, write the Free Software 22 * License along with this program; if not, write the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
24 * 24 *
25 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
26 * Mountain View, CA 94043, or:
27 *
28 * http://www.sgi.com
29 *
30 * For further information regarding this notice, see: 25 * For further information regarding this notice, see:
31 * 26 *
32 * http://oss.sgi.com/projects/GenInfo/NoticeExplan 27 * http://oss.sgi.com/projects/GenInfo/NoticeExplan
diff --git a/arch/ia64/sn/kernel/tiocx.c b/arch/ia64/sn/kernel/tiocx.c
index d263d3e8fbb9..99cb28e74295 100644
--- a/arch/ia64/sn/kernel/tiocx.c
+++ b/arch/ia64/sn/kernel/tiocx.c
@@ -284,12 +284,10 @@ struct sn_irq_info *tiocx_irq_alloc(nasid_t nasid, int widget, int irq,
284 if ((nasid & 1) == 0) 284 if ((nasid & 1) == 0)
285 return NULL; 285 return NULL;
286 286
287 sn_irq_info = kmalloc(sn_irq_size, GFP_KERNEL); 287 sn_irq_info = kzalloc(sn_irq_size, GFP_KERNEL);
288 if (sn_irq_info == NULL) 288 if (sn_irq_info == NULL)
289 return NULL; 289 return NULL;
290 290
291 memset(sn_irq_info, 0x0, sn_irq_size);
292
293 status = tiocx_intr_alloc(nasid, widget, __pa(sn_irq_info), irq, 291 status = tiocx_intr_alloc(nasid, widget, __pa(sn_irq_info), irq,
294 req_nasid, slice); 292 req_nasid, slice);
295 if (status) { 293 if (status) {
@@ -486,7 +484,7 @@ static int __init tiocx_init(void)
486 int found_tiocx_device = 0; 484 int found_tiocx_device = 0;
487 485
488 if (!ia64_platform_is("sn2")) 486 if (!ia64_platform_is("sn2"))
489 return -ENODEV; 487 return 0;
490 488
491 bus_register(&tiocx_bus_type); 489 bus_register(&tiocx_bus_type);
492 490
diff --git a/arch/ia64/sn/kernel/xpc_channel.c b/arch/ia64/sn/kernel/xpc_channel.c
index 8d950c778bb6..cdf6856ce089 100644
--- a/arch/ia64/sn/kernel/xpc_channel.c
+++ b/arch/ia64/sn/kernel/xpc_channel.c
@@ -447,7 +447,7 @@ xpc_allocate_local_msgqueue(struct xpc_channel *ch)
447 447
448 nbytes = nentries * ch->msg_size; 448 nbytes = nentries * ch->msg_size;
449 ch->local_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes, 449 ch->local_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes,
450 (GFP_KERNEL | GFP_DMA), 450 GFP_KERNEL,
451 &ch->local_msgqueue_base); 451 &ch->local_msgqueue_base);
452 if (ch->local_msgqueue == NULL) { 452 if (ch->local_msgqueue == NULL) {
453 continue; 453 continue;
@@ -455,7 +455,7 @@ xpc_allocate_local_msgqueue(struct xpc_channel *ch)
455 memset(ch->local_msgqueue, 0, nbytes); 455 memset(ch->local_msgqueue, 0, nbytes);
456 456
457 nbytes = nentries * sizeof(struct xpc_notify); 457 nbytes = nentries * sizeof(struct xpc_notify);
458 ch->notify_queue = kmalloc(nbytes, (GFP_KERNEL | GFP_DMA)); 458 ch->notify_queue = kmalloc(nbytes, GFP_KERNEL);
459 if (ch->notify_queue == NULL) { 459 if (ch->notify_queue == NULL) {
460 kfree(ch->local_msgqueue_base); 460 kfree(ch->local_msgqueue_base);
461 ch->local_msgqueue = NULL; 461 ch->local_msgqueue = NULL;
@@ -502,7 +502,7 @@ xpc_allocate_remote_msgqueue(struct xpc_channel *ch)
502 502
503 nbytes = nentries * ch->msg_size; 503 nbytes = nentries * ch->msg_size;
504 ch->remote_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes, 504 ch->remote_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes,
505 (GFP_KERNEL | GFP_DMA), 505 GFP_KERNEL,
506 &ch->remote_msgqueue_base); 506 &ch->remote_msgqueue_base);
507 if (ch->remote_msgqueue == NULL) { 507 if (ch->remote_msgqueue == NULL) {
508 continue; 508 continue;
@@ -738,7 +738,9 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
738 738
739 /* make sure all activity has settled down first */ 739 /* make sure all activity has settled down first */
740 740
741 if (atomic_read(&ch->references) > 0) { 741 if (atomic_read(&ch->references) > 0 ||
742 ((ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) &&
743 !(ch->flags & XPC_C_DISCONNECTINGCALLOUT_MADE))) {
742 return; 744 return;
743 } 745 }
744 DBUG_ON(atomic_read(&ch->kthreads_assigned) != 0); 746 DBUG_ON(atomic_read(&ch->kthreads_assigned) != 0);
@@ -775,7 +777,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
775 777
776 /* both sides are disconnected now */ 778 /* both sides are disconnected now */
777 779
778 if (ch->flags & XPC_C_CONNECTCALLOUT) { 780 if (ch->flags & XPC_C_DISCONNECTINGCALLOUT_MADE) {
779 spin_unlock_irqrestore(&ch->lock, *irq_flags); 781 spin_unlock_irqrestore(&ch->lock, *irq_flags);
780 xpc_disconnect_callout(ch, xpcDisconnected); 782 xpc_disconnect_callout(ch, xpcDisconnected);
781 spin_lock_irqsave(&ch->lock, *irq_flags); 783 spin_lock_irqsave(&ch->lock, *irq_flags);
@@ -1300,7 +1302,7 @@ xpc_process_msg_IPI(struct xpc_partition *part, int ch_number)
1300 "delivered=%d, partid=%d, channel=%d\n", 1302 "delivered=%d, partid=%d, channel=%d\n",
1301 nmsgs_sent, ch->partid, ch->number); 1303 nmsgs_sent, ch->partid, ch->number);
1302 1304
1303 if (ch->flags & XPC_C_CONNECTCALLOUT) { 1305 if (ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) {
1304 xpc_activate_kthreads(ch, nmsgs_sent); 1306 xpc_activate_kthreads(ch, nmsgs_sent);
1305 } 1307 }
1306 } 1308 }
diff --git a/arch/ia64/sn/kernel/xpc_main.c b/arch/ia64/sn/kernel/xpc_main.c
index c75f8aeefc2b..8cbf16432570 100644
--- a/arch/ia64/sn/kernel/xpc_main.c
+++ b/arch/ia64/sn/kernel/xpc_main.c
@@ -575,18 +575,21 @@ xpc_activate_partition(struct xpc_partition *part)
575 575
576 spin_lock_irqsave(&part->act_lock, irq_flags); 576 spin_lock_irqsave(&part->act_lock, irq_flags);
577 577
578 pid = kernel_thread(xpc_activating, (void *) ((u64) partid), 0);
579
580 DBUG_ON(part->act_state != XPC_P_INACTIVE); 578 DBUG_ON(part->act_state != XPC_P_INACTIVE);
581 579
582 if (pid > 0) { 580 part->act_state = XPC_P_ACTIVATION_REQ;
583 part->act_state = XPC_P_ACTIVATION_REQ; 581 XPC_SET_REASON(part, xpcCloneKThread, __LINE__);
584 XPC_SET_REASON(part, xpcCloneKThread, __LINE__);
585 } else {
586 XPC_SET_REASON(part, xpcCloneKThreadFailed, __LINE__);
587 }
588 582
589 spin_unlock_irqrestore(&part->act_lock, irq_flags); 583 spin_unlock_irqrestore(&part->act_lock, irq_flags);
584
585 pid = kernel_thread(xpc_activating, (void *) ((u64) partid), 0);
586
587 if (unlikely(pid <= 0)) {
588 spin_lock_irqsave(&part->act_lock, irq_flags);
589 part->act_state = XPC_P_INACTIVE;
590 XPC_SET_REASON(part, xpcCloneKThreadFailed, __LINE__);
591 spin_unlock_irqrestore(&part->act_lock, irq_flags);
592 }
590} 593}
591 594
592 595
@@ -747,12 +750,16 @@ xpc_daemonize_kthread(void *args)
747 /* let registerer know that connection has been established */ 750 /* let registerer know that connection has been established */
748 751
749 spin_lock_irqsave(&ch->lock, irq_flags); 752 spin_lock_irqsave(&ch->lock, irq_flags);
750 if (!(ch->flags & XPC_C_CONNECTCALLOUT)) { 753 if (!(ch->flags & XPC_C_CONNECTEDCALLOUT)) {
751 ch->flags |= XPC_C_CONNECTCALLOUT; 754 ch->flags |= XPC_C_CONNECTEDCALLOUT;
752 spin_unlock_irqrestore(&ch->lock, irq_flags); 755 spin_unlock_irqrestore(&ch->lock, irq_flags);
753 756
754 xpc_connected_callout(ch); 757 xpc_connected_callout(ch);
755 758
759 spin_lock_irqsave(&ch->lock, irq_flags);
760 ch->flags |= XPC_C_CONNECTEDCALLOUT_MADE;
761 spin_unlock_irqrestore(&ch->lock, irq_flags);
762
756 /* 763 /*
757 * It is possible that while the callout was being 764 * It is possible that while the callout was being
758 * made that the remote partition sent some messages. 765 * made that the remote partition sent some messages.
@@ -774,15 +781,17 @@ xpc_daemonize_kthread(void *args)
774 781
775 if (atomic_dec_return(&ch->kthreads_assigned) == 0) { 782 if (atomic_dec_return(&ch->kthreads_assigned) == 0) {
776 spin_lock_irqsave(&ch->lock, irq_flags); 783 spin_lock_irqsave(&ch->lock, irq_flags);
777 if ((ch->flags & XPC_C_CONNECTCALLOUT) && 784 if ((ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) &&
778 !(ch->flags & XPC_C_DISCONNECTCALLOUT)) { 785 !(ch->flags & XPC_C_DISCONNECTINGCALLOUT)) {
779 ch->flags |= XPC_C_DISCONNECTCALLOUT; 786 ch->flags |= XPC_C_DISCONNECTINGCALLOUT;
780 spin_unlock_irqrestore(&ch->lock, irq_flags); 787 spin_unlock_irqrestore(&ch->lock, irq_flags);
781 788
782 xpc_disconnect_callout(ch, xpcDisconnecting); 789 xpc_disconnect_callout(ch, xpcDisconnecting);
783 } else { 790
784 spin_unlock_irqrestore(&ch->lock, irq_flags); 791 spin_lock_irqsave(&ch->lock, irq_flags);
792 ch->flags |= XPC_C_DISCONNECTINGCALLOUT_MADE;
785 } 793 }
794 spin_unlock_irqrestore(&ch->lock, irq_flags);
786 if (atomic_dec_return(&part->nchannels_engaged) == 0) { 795 if (atomic_dec_return(&part->nchannels_engaged) == 0) {
787 xpc_mark_partition_disengaged(part); 796 xpc_mark_partition_disengaged(part);
788 xpc_IPI_send_disengage(part); 797 xpc_IPI_send_disengage(part);
diff --git a/arch/ia64/sn/pci/Makefile b/arch/ia64/sn/pci/Makefile
index 321576b1b425..c6946784a6a8 100644
--- a/arch/ia64/sn/pci/Makefile
+++ b/arch/ia64/sn/pci/Makefile
@@ -7,4 +7,6 @@
7# 7#
8# Makefile for the sn pci general routines. 8# Makefile for the sn pci general routines.
9 9
10CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
11
10obj-y := pci_dma.o tioca_provider.o tioce_provider.o pcibr/ 12obj-y := pci_dma.o tioca_provider.o tioce_provider.o pcibr/
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c
index 9bf9f23b9a1f..b4b84c269210 100644
--- a/arch/ia64/sn/pci/pci_dma.c
+++ b/arch/ia64/sn/pci/pci_dma.c
@@ -90,14 +90,14 @@ void *sn_dma_alloc_coherent(struct device *dev, size_t size,
90 */ 90 */
91 node = pcibus_to_node(pdev->bus); 91 node = pcibus_to_node(pdev->bus);
92 if (likely(node >=0)) { 92 if (likely(node >=0)) {
93 struct page *p = alloc_pages_node(node, GFP_ATOMIC, get_order(size)); 93 struct page *p = alloc_pages_node(node, flags, get_order(size));
94 94
95 if (likely(p)) 95 if (likely(p))
96 cpuaddr = page_address(p); 96 cpuaddr = page_address(p);
97 else 97 else
98 return NULL; 98 return NULL;
99 } else 99 } else
100 cpuaddr = (void *)__get_free_pages(GFP_ATOMIC, get_order(size)); 100 cpuaddr = (void *)__get_free_pages(flags, get_order(size));
101 101
102 if (unlikely(!cpuaddr)) 102 if (unlikely(!cpuaddr))
103 return NULL; 103 return NULL;
@@ -335,10 +335,10 @@ int sn_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
335 */ 335 */
336 336
337 SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, 337 SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE,
338 pci_domain_nr(bus), bus->number, 338 pci_domain_nr(bus), bus->number,
339 0, /* io */ 339 0, /* io */
340 0, /* read */ 340 0, /* read */
341 port, size, __pa(val)); 341 port, size, __pa(val));
342 342
343 if (isrv.status == 0) 343 if (isrv.status == 0)
344 return size; 344 return size;
@@ -381,10 +381,10 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
381 */ 381 */
382 382
383 SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, 383 SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE,
384 pci_domain_nr(bus), bus->number, 384 pci_domain_nr(bus), bus->number,
385 0, /* io */ 385 0, /* io */
386 1, /* write */ 386 1, /* write */
387 port, size, __pa(&val)); 387 port, size, __pa(&val));
388 388
389 if (isrv.status == 0) 389 if (isrv.status == 0)
390 return size; 390 return size;
diff --git a/arch/ia64/sn/pci/pcibr/Makefile b/arch/ia64/sn/pci/pcibr/Makefile
index 1850c4a94c41..3b403ea456f9 100644
--- a/arch/ia64/sn/pci/pcibr/Makefile
+++ b/arch/ia64/sn/pci/pcibr/Makefile
@@ -7,5 +7,7 @@
7# 7#
8# Makefile for the sn2 io routines. 8# Makefile for the sn2 io routines.
9 9
10CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
11
10obj-y += pcibr_dma.o pcibr_reg.o \ 12obj-y += pcibr_dma.o pcibr_reg.o \
11 pcibr_ate.o pcibr_provider.o 13 pcibr_ate.o pcibr_provider.o
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_ate.c b/arch/ia64/sn/pci/pcibr/pcibr_ate.c
index aa3fa5152a32..1f0253bfe0a0 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_ate.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_ate.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 2001-2004 Silicon Graphics, Inc. All rights reserved. 6 * Copyright (C) 2001-2006 Silicon Graphics, Inc. All rights reserved.
7 */ 7 */
8 8
9#include <linux/types.h> 9#include <linux/types.h>
@@ -12,7 +12,7 @@
12#include <asm/sn/pcibus_provider_defs.h> 12#include <asm/sn/pcibus_provider_defs.h>
13#include <asm/sn/pcidev.h> 13#include <asm/sn/pcidev.h>
14 14
15int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */ 15int pcibr_invalidate_ate; /* by default don't invalidate ATE on free */
16 16
17/* 17/*
18 * mark_ate: Mark the ate as either free or inuse. 18 * mark_ate: Mark the ate as either free or inuse.
@@ -20,14 +20,12 @@ int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */
20static void mark_ate(struct ate_resource *ate_resource, int start, int number, 20static void mark_ate(struct ate_resource *ate_resource, int start, int number,
21 u64 value) 21 u64 value)
22{ 22{
23
24 u64 *ate = ate_resource->ate; 23 u64 *ate = ate_resource->ate;
25 int index; 24 int index;
26 int length = 0; 25 int length = 0;
27 26
28 for (index = start; length < number; index++, length++) 27 for (index = start; length < number; index++, length++)
29 ate[index] = value; 28 ate[index] = value;
30
31} 29}
32 30
33/* 31/*
@@ -37,7 +35,6 @@ static void mark_ate(struct ate_resource *ate_resource, int start, int number,
37static int find_free_ate(struct ate_resource *ate_resource, int start, 35static int find_free_ate(struct ate_resource *ate_resource, int start,
38 int count) 36 int count)
39{ 37{
40
41 u64 *ate = ate_resource->ate; 38 u64 *ate = ate_resource->ate;
42 int index; 39 int index;
43 int start_free; 40 int start_free;
@@ -70,12 +67,10 @@ static int find_free_ate(struct ate_resource *ate_resource, int start,
70static inline void free_ate_resource(struct ate_resource *ate_resource, 67static inline void free_ate_resource(struct ate_resource *ate_resource,
71 int start) 68 int start)
72{ 69{
73
74 mark_ate(ate_resource, start, ate_resource->ate[start], 0); 70 mark_ate(ate_resource, start, ate_resource->ate[start], 0);
75 if ((ate_resource->lowest_free_index > start) || 71 if ((ate_resource->lowest_free_index > start) ||
76 (ate_resource->lowest_free_index < 0)) 72 (ate_resource->lowest_free_index < 0))
77 ate_resource->lowest_free_index = start; 73 ate_resource->lowest_free_index = start;
78
79} 74}
80 75
81/* 76/*
@@ -84,7 +79,6 @@ static inline void free_ate_resource(struct ate_resource *ate_resource,
84static inline int alloc_ate_resource(struct ate_resource *ate_resource, 79static inline int alloc_ate_resource(struct ate_resource *ate_resource,
85 int ate_needed) 80 int ate_needed)
86{ 81{
87
88 int start_index; 82 int start_index;
89 83
90 /* 84 /*
@@ -118,19 +112,12 @@ static inline int alloc_ate_resource(struct ate_resource *ate_resource,
118 */ 112 */
119int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count) 113int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count)
120{ 114{
121 int status = 0; 115 int status;
122 u64 flag; 116 unsigned long flags;
123 117
124 flag = pcibr_lock(pcibus_info); 118 spin_lock_irqsave(&pcibus_info->pbi_lock, flags);
125 status = alloc_ate_resource(&pcibus_info->pbi_int_ate_resource, count); 119 status = alloc_ate_resource(&pcibus_info->pbi_int_ate_resource, count);
126 120 spin_unlock_irqrestore(&pcibus_info->pbi_lock, flags);
127 if (status < 0) {
128 /* Failed to allocate */
129 pcibr_unlock(pcibus_info, flag);
130 return -1;
131 }
132
133 pcibr_unlock(pcibus_info, flag);
134 121
135 return status; 122 return status;
136} 123}
@@ -182,7 +169,7 @@ void pcibr_ate_free(struct pcibus_info *pcibus_info, int index)
182 ate_write(pcibus_info, index, count, (ate & ~PCI32_ATE_V)); 169 ate_write(pcibus_info, index, count, (ate & ~PCI32_ATE_V));
183 } 170 }
184 171
185 flags = pcibr_lock(pcibus_info); 172 spin_lock_irqsave(&pcibus_info->pbi_lock, flags);
186 free_ate_resource(&pcibus_info->pbi_int_ate_resource, index); 173 free_ate_resource(&pcibus_info->pbi_int_ate_resource, index);
187 pcibr_unlock(pcibus_info, flags); 174 spin_unlock_irqrestore(&pcibus_info->pbi_lock, flags);
188} 175}
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_dma.c b/arch/ia64/sn/pci/pcibr/pcibr_dma.c
index 54ce5b7ceed2..9f86bb6519aa 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_dma.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_dma.c
@@ -137,14 +137,12 @@ pcibr_dmatrans_direct64(struct pcidev_info * info, u64 paddr,
137 pci_addr |= PCI64_ATTR_VIRTUAL; 137 pci_addr |= PCI64_ATTR_VIRTUAL;
138 138
139 return pci_addr; 139 return pci_addr;
140
141} 140}
142 141
143static dma_addr_t 142static dma_addr_t
144pcibr_dmatrans_direct32(struct pcidev_info * info, 143pcibr_dmatrans_direct32(struct pcidev_info * info,
145 u64 paddr, size_t req_size, u64 flags) 144 u64 paddr, size_t req_size, u64 flags)
146{ 145{
147
148 struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info; 146 struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info;
149 struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info-> 147 struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info->
150 pdi_pcibus_info; 148 pdi_pcibus_info;
@@ -171,7 +169,6 @@ pcibr_dmatrans_direct32(struct pcidev_info * info,
171 } 169 }
172 170
173 return PCI32_DIRECT_BASE | offset; 171 return PCI32_DIRECT_BASE | offset;
174
175} 172}
176 173
177/* 174/*
@@ -218,9 +215,8 @@ void sn_dma_flush(u64 addr)
218 u64 flags; 215 u64 flags;
219 u64 itte; 216 u64 itte;
220 struct hubdev_info *hubinfo; 217 struct hubdev_info *hubinfo;
221 volatile struct sn_flush_device_kernel *p; 218 struct sn_flush_device_kernel *p;
222 volatile struct sn_flush_device_common *common; 219 struct sn_flush_device_common *common;
223
224 struct sn_flush_nasid_entry *flush_nasid_list; 220 struct sn_flush_nasid_entry *flush_nasid_list;
225 221
226 if (!sn_ioif_inited) 222 if (!sn_ioif_inited)
@@ -310,8 +306,7 @@ void sn_dma_flush(u64 addr)
310 (common->sfdl_slot - 1)); 306 (common->sfdl_slot - 1));
311 } 307 }
312 } else { 308 } else {
313 spin_lock_irqsave((spinlock_t *)&p->sfdl_flush_lock, 309 spin_lock_irqsave(&p->sfdl_flush_lock, flags);
314 flags);
315 *common->sfdl_flush_addr = 0; 310 *common->sfdl_flush_addr = 0;
316 311
317 /* force an interrupt. */ 312 /* force an interrupt. */
@@ -322,8 +317,7 @@ void sn_dma_flush(u64 addr)
322 cpu_relax(); 317 cpu_relax();
323 318
324 /* okay, everything is synched up. */ 319 /* okay, everything is synched up. */
325 spin_unlock_irqrestore((spinlock_t *)&p->sfdl_flush_lock, 320 spin_unlock_irqrestore(&p->sfdl_flush_lock, flags);
326 flags);
327 } 321 }
328 return; 322 return;
329} 323}
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
index 2fac27049bf6..98f716bd92f0 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_provider.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
@@ -163,9 +163,12 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
163 /* Setup the PMU ATE map */ 163 /* Setup the PMU ATE map */
164 soft->pbi_int_ate_resource.lowest_free_index = 0; 164 soft->pbi_int_ate_resource.lowest_free_index = 0;
165 soft->pbi_int_ate_resource.ate = 165 soft->pbi_int_ate_resource.ate =
166 kmalloc(soft->pbi_int_ate_size * sizeof(u64), GFP_KERNEL); 166 kzalloc(soft->pbi_int_ate_size * sizeof(u64), GFP_KERNEL);
167 memset(soft->pbi_int_ate_resource.ate, 0, 167
168 (soft->pbi_int_ate_size * sizeof(u64))); 168 if (!soft->pbi_int_ate_resource.ate) {
169 kfree(soft);
170 return NULL;
171 }
169 172
170 if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) { 173 if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) {
171 /* TIO PCI Bridge: find nearest node with CPUs */ 174 /* TIO PCI Bridge: find nearest node with CPUs */
diff --git a/arch/m32r/Makefile b/arch/m32r/Makefile
index 983d438b14b6..4b3c90ba926c 100644
--- a/arch/m32r/Makefile
+++ b/arch/m32r/Makefile
@@ -12,14 +12,14 @@ CFLAGS_MODULE += -mmodel=large
12 12
13ifdef CONFIG_CHIP_VDEC2 13ifdef CONFIG_CHIP_VDEC2
14cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -Wa,-bitinst 14cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -Wa,-bitinst
15aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -Wa,-bitinst 15aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -O2 -Wa,-bitinst -Wa,-no-parallel
16else 16else
17cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2 17cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2
18aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2 18aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2 -O2
19endif 19endif
20 20
21cflags-$(CONFIG_ISA_M32R) += -DNO_FPU 21cflags-$(CONFIG_ISA_M32R) += -DNO_FPU
22aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -Wa,-no-bitinst 22aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -O2 -Wa,-no-bitinst
23 23
24CFLAGS += $(cflags-y) 24CFLAGS += $(cflags-y)
25AFLAGS += $(aflags-y) 25AFLAGS += $(aflags-y)
diff --git a/arch/m32r/kernel/m32r_ksyms.c b/arch/m32r/kernel/m32r_ksyms.c
index dbc8a392105f..be8b711367ec 100644
--- a/arch/m32r/kernel/m32r_ksyms.c
+++ b/arch/m32r/kernel/m32r_ksyms.c
@@ -18,11 +18,6 @@
18#include <asm/irq.h> 18#include <asm/irq.h>
19#include <asm/tlbflush.h> 19#include <asm/tlbflush.h>
20 20
21#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
22extern struct drive_info_struct drive_info;
23EXPORT_SYMBOL(drive_info);
24#endif
25
26/* platform dependent support */ 21/* platform dependent support */
27EXPORT_SYMBOL(boot_cpu_data); 22EXPORT_SYMBOL(boot_cpu_data);
28EXPORT_SYMBOL(dump_fpu); 23EXPORT_SYMBOL(dump_fpu);
diff --git a/arch/m32r/kernel/setup.c b/arch/m32r/kernel/setup.c
index c2e4dccf0112..d742037a7ccb 100644
--- a/arch/m32r/kernel/setup.c
+++ b/arch/m32r/kernel/setup.c
@@ -37,12 +37,6 @@
37extern void init_mmu(void); 37extern void init_mmu(void);
38#endif 38#endif
39 39
40#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) \
41 || defined(CONFIG_BLK_DEV_IDE_MODULE) \
42 || defined(CONFIG_BLK_DEV_HD_MODULE)
43struct drive_info_struct { char dummy[32]; } drive_info;
44#endif
45
46extern char _end[]; 40extern char _end[];
47 41
48/* 42/*
diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c
index 71763f7a1d19..cb33097fefc4 100644
--- a/arch/m32r/kernel/signal.c
+++ b/arch/m32r/kernel/signal.c
@@ -36,7 +36,7 @@ int do_signal(struct pt_regs *, sigset_t *);
36asmlinkage int 36asmlinkage int
37sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, 37sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize,
38 unsigned long r2, unsigned long r3, unsigned long r4, 38 unsigned long r2, unsigned long r3, unsigned long r4,
39 unsigned long r5, unsigned long r6, struct pt_regs regs) 39 unsigned long r5, unsigned long r6, struct pt_regs *regs)
40{ 40{
41 sigset_t saveset, newset; 41 sigset_t saveset, newset;
42 42
@@ -54,21 +54,21 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize,
54 recalc_sigpending(); 54 recalc_sigpending();
55 spin_unlock_irq(&current->sighand->siglock); 55 spin_unlock_irq(&current->sighand->siglock);
56 56
57 regs.r0 = -EINTR; 57 regs->r0 = -EINTR;
58 while (1) { 58 while (1) {
59 current->state = TASK_INTERRUPTIBLE; 59 current->state = TASK_INTERRUPTIBLE;
60 schedule(); 60 schedule();
61 if (do_signal(&regs, &saveset)) 61 if (do_signal(regs, &saveset))
62 return regs.r0; 62 return regs->r0;
63 } 63 }
64} 64}
65 65
66asmlinkage int 66asmlinkage int
67sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, 67sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
68 unsigned long r2, unsigned long r3, unsigned long r4, 68 unsigned long r2, unsigned long r3, unsigned long r4,
69 unsigned long r5, unsigned long r6, struct pt_regs regs) 69 unsigned long r5, unsigned long r6, struct pt_regs *regs)
70{ 70{
71 return do_sigaltstack(uss, uoss, regs.spu); 71 return do_sigaltstack(uss, uoss, regs->spu);
72} 72}
73 73
74 74
@@ -140,11 +140,10 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
140asmlinkage int 140asmlinkage int
141sys_rt_sigreturn(unsigned long r0, unsigned long r1, 141sys_rt_sigreturn(unsigned long r0, unsigned long r1,
142 unsigned long r2, unsigned long r3, unsigned long r4, 142 unsigned long r2, unsigned long r3, unsigned long r4,
143 unsigned long r5, unsigned long r6, struct pt_regs regs) 143 unsigned long r5, unsigned long r6, struct pt_regs *regs)
144{ 144{
145 struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs.spu; 145 struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->spu;
146 sigset_t set; 146 sigset_t set;
147 stack_t st;
148 int result; 147 int result;
149 148
150 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 149 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
@@ -158,14 +157,11 @@ sys_rt_sigreturn(unsigned long r0, unsigned long r1,
158 recalc_sigpending(); 157 recalc_sigpending();
159 spin_unlock_irq(&current->sighand->siglock); 158 spin_unlock_irq(&current->sighand->siglock);
160 159
161 if (restore_sigcontext(&regs, &frame->uc.uc_mcontext, &result)) 160 if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result))
162 goto badframe; 161 goto badframe;
163 162
164 if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st))) 163 if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->spu) == -EFAULT)
165 goto badframe; 164 goto badframe;
166 /* It is more difficult to avoid calling this function than to
167 call it and ignore errors. */
168 do_sigaltstack(&st, NULL, regs.spu);
169 165
170 return result; 166 return result;
171 167
diff --git a/arch/m32r/kernel/sys_m32r.c b/arch/m32r/kernel/sys_m32r.c
index fe55b28d3725..670cb49210af 100644
--- a/arch/m32r/kernel/sys_m32r.c
+++ b/arch/m32r/kernel/sys_m32r.c
@@ -29,28 +29,7 @@
29 29
30/* 30/*
31 * sys_tas() - test-and-set 31 * sys_tas() - test-and-set
32 * linuxthreads testing version
33 */ 32 */
34#ifndef CONFIG_SMP
35asmlinkage int sys_tas(int *addr)
36{
37 int oldval;
38 unsigned long flags;
39
40 if (!access_ok(VERIFY_WRITE, addr, sizeof (int)))
41 return -EFAULT;
42 local_irq_save(flags);
43 oldval = *addr;
44 if (!oldval)
45 *addr = 1;
46 local_irq_restore(flags);
47 return oldval;
48}
49#else /* CONFIG_SMP */
50#include <linux/spinlock.h>
51
52static DEFINE_SPINLOCK(tas_lock);
53
54asmlinkage int sys_tas(int *addr) 33asmlinkage int sys_tas(int *addr)
55{ 34{
56 int oldval; 35 int oldval;
@@ -58,15 +37,43 @@ asmlinkage int sys_tas(int *addr)
58 if (!access_ok(VERIFY_WRITE, addr, sizeof (int))) 37 if (!access_ok(VERIFY_WRITE, addr, sizeof (int)))
59 return -EFAULT; 38 return -EFAULT;
60 39
61 _raw_spin_lock(&tas_lock); 40 /* atomic operation:
62 oldval = *addr; 41 * oldval = *addr; *addr = 1;
63 if (!oldval) 42 */
64 *addr = 1; 43 __asm__ __volatile__ (
65 _raw_spin_unlock(&tas_lock); 44 DCACHE_CLEAR("%0", "r4", "%1")
45 " .fillinsn\n"
46 "1:\n"
47 " lock %0, @%1 -> unlock %2, @%1\n"
48 "2:\n"
49 /* NOTE:
50 * The m32r processor can accept interrupts only
51 * at the 32-bit instruction boundary.
52 * So, in the above code, the "unlock" instruction
53 * can be executed continuously after the "lock"
54 * instruction execution without any interruptions.
55 */
56 ".section .fixup,\"ax\"\n"
57 " .balign 4\n"
58 "3: ldi %0, #%3\n"
59 " seth r14, #high(2b)\n"
60 " or3 r14, r14, #low(2b)\n"
61 " jmp r14\n"
62 ".previous\n"
63 ".section __ex_table,\"a\"\n"
64 " .balign 4\n"
65 " .long 1b,3b\n"
66 ".previous\n"
67 : "=&r" (oldval)
68 : "r" (addr), "r" (1), "i"(-EFAULT)
69 : "r14", "memory"
70#ifdef CONFIG_CHIP_M32700_TS1
71 , "r4"
72#endif /* CONFIG_CHIP_M32700_TS1 */
73 );
66 74
67 return oldval; 75 return oldval;
68} 76}
69#endif /* CONFIG_SMP */
70 77
71/* 78/*
72 * sys_pipe() is the normal C calling standard for creating 79 * sys_pipe() is the normal C calling standard for creating
diff --git a/arch/m32r/lib/usercopy.c b/arch/m32r/lib/usercopy.c
index ce16bbe26a52..2d1dd2106c4d 100644
--- a/arch/m32r/lib/usercopy.c
+++ b/arch/m32r/lib/usercopy.c
@@ -64,7 +64,7 @@ do { \
64 " .balign 4\n" \ 64 " .balign 4\n" \
65 " .long 0b,3b\n" \ 65 " .long 0b,3b\n" \
66 ".previous" \ 66 ".previous" \
67 : "=r"(res), "=r"(count), "=&r" (__d0), "=&r" (__d1), \ 67 : "=&r"(res), "=&r"(count), "=&r" (__d0), "=&r" (__d1), \
68 "=&r" (__d2) \ 68 "=&r" (__d2) \
69 : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \ 69 : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \
70 "4"(dst) \ 70 "4"(dst) \
@@ -101,7 +101,7 @@ do { \
101 " .balign 4\n" \ 101 " .balign 4\n" \
102 " .long 0b,3b\n" \ 102 " .long 0b,3b\n" \
103 ".previous" \ 103 ".previous" \
104 : "=r"(res), "=r"(count), "=&r" (__d0), "=&r" (__d1), \ 104 : "=&r"(res), "=&r"(count), "=&r" (__d0), "=&r" (__d1), \
105 "=&r" (__d2) \ 105 "=&r" (__d2) \
106 : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \ 106 : "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \
107 "4"(dst) \ 107 "4"(dst) \
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index 96b919828053..8849439e88dd 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -21,6 +21,10 @@ config GENERIC_CALIBRATE_DELAY
21 bool 21 bool
22 default y 22 default y
23 23
24config TIME_LOW_RES
25 bool
26 default y
27
24config ARCH_MAY_HAVE_PC_FDC 28config ARCH_MAY_HAVE_PC_FDC
25 bool 29 bool
26 depends on Q40 || (BROKEN && SUN3X) 30 depends on Q40 || (BROKEN && SUN3X)
diff --git a/arch/m68k/fpsp040/bindec.S b/arch/m68k/fpsp040/bindec.S
index 3ba446a99a12..72f1159cb804 100644
--- a/arch/m68k/fpsp040/bindec.S
+++ b/arch/m68k/fpsp040/bindec.S
@@ -131,9 +131,8 @@
131| Copyright (C) Motorola, Inc. 1990 131| Copyright (C) Motorola, Inc. 1990
132| All Rights Reserved 132| All Rights Reserved
133| 133|
134| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 134| For details on the license for this file, please see the
135| The copyright notice above does not evidence any 135| file, README, in this same directory.
136| actual or intended publication of such source code.
137 136
138|BINDEC idnt 2,1 | Motorola 040 Floating Point Software Package 137|BINDEC idnt 2,1 | Motorola 040 Floating Point Software Package
139 138
diff --git a/arch/m68k/fpsp040/binstr.S b/arch/m68k/fpsp040/binstr.S
index d53555c0a2b6..8a05ba92a8a0 100644
--- a/arch/m68k/fpsp040/binstr.S
+++ b/arch/m68k/fpsp040/binstr.S
@@ -60,9 +60,8 @@
60| Copyright (C) Motorola, Inc. 1990 60| Copyright (C) Motorola, Inc. 1990
61| All Rights Reserved 61| All Rights Reserved
62| 62|
63| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 63| For details on the license for this file, please see the
64| The copyright notice above does not evidence any 64| file, README, in this same directory.
65| actual or intended publication of such source code.
66 65
67|BINSTR idnt 2,1 | Motorola 040 Floating Point Software Package 66|BINSTR idnt 2,1 | Motorola 040 Floating Point Software Package
68 67
diff --git a/arch/m68k/fpsp040/bugfix.S b/arch/m68k/fpsp040/bugfix.S
index 942c4f6f4fd1..3bb9c84bb058 100644
--- a/arch/m68k/fpsp040/bugfix.S
+++ b/arch/m68k/fpsp040/bugfix.S
@@ -152,9 +152,8 @@
152| Copyright (C) Motorola, Inc. 1990 152| Copyright (C) Motorola, Inc. 1990
153| All Rights Reserved 153| All Rights Reserved
154| 154|
155| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 155| For details on the license for this file, please see the
156| The copyright notice above does not evidence any 156| file, README, in this same directory.
157| actual or intended publication of such source code.
158 157
159|BUGFIX idnt 2,1 | Motorola 040 Floating Point Software Package 158|BUGFIX idnt 2,1 | Motorola 040 Floating Point Software Package
160 159
diff --git a/arch/m68k/fpsp040/decbin.S b/arch/m68k/fpsp040/decbin.S
index 2160609e328d..16ed796bad87 100644
--- a/arch/m68k/fpsp040/decbin.S
+++ b/arch/m68k/fpsp040/decbin.S
@@ -69,9 +69,8 @@
69| Copyright (C) Motorola, Inc. 1990 69| Copyright (C) Motorola, Inc. 1990
70| All Rights Reserved 70| All Rights Reserved
71| 71|
72| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 72| For details on the license for this file, please see the
73| The copyright notice above does not evidence any 73| file, README, in this same directory.
74| actual or intended publication of such source code.
75 74
76|DECBIN idnt 2,1 | Motorola 040 Floating Point Software Package 75|DECBIN idnt 2,1 | Motorola 040 Floating Point Software Package
77 76
diff --git a/arch/m68k/fpsp040/do_func.S b/arch/m68k/fpsp040/do_func.S
index 81f6a9856dce..3eff99a80413 100644
--- a/arch/m68k/fpsp040/do_func.S
+++ b/arch/m68k/fpsp040/do_func.S
@@ -22,9 +22,8 @@
22| Copyright (C) Motorola, Inc. 1990 22| Copyright (C) Motorola, Inc. 1990
23| All Rights Reserved 23| All Rights Reserved
24| 24|
25| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 25| For details on the license for this file, please see the
26| The copyright notice above does not evidence any 26| file, README, in this same directory.
27| actual or intended publication of such source code.
28 27
29DO_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package 28DO_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package
30 29
diff --git a/arch/m68k/fpsp040/fpsp.h b/arch/m68k/fpsp040/fpsp.h
index 984a4eb8010a..5df4cd772934 100644
--- a/arch/m68k/fpsp040/fpsp.h
+++ b/arch/m68k/fpsp040/fpsp.h
@@ -5,9 +5,8 @@
5| Copyright (C) Motorola, Inc. 1990 5| Copyright (C) Motorola, Inc. 1990
6| All Rights Reserved 6| All Rights Reserved
7| 7|
8| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 8| For details on the license for this file, please see the
9| The copyright notice above does not evidence any 9| file, README, in this same directory.
10| actual or intended publication of such source code.
11 10
12| fpsp.h --- stack frame offsets during FPSP exception handling 11| fpsp.h --- stack frame offsets during FPSP exception handling
13| 12|
diff --git a/arch/m68k/fpsp040/gen_except.S b/arch/m68k/fpsp040/gen_except.S
index 401d06f39f73..3642cb7e3641 100644
--- a/arch/m68k/fpsp040/gen_except.S
+++ b/arch/m68k/fpsp040/gen_except.S
@@ -29,9 +29,8 @@
29| Copyright (C) Motorola, Inc. 1990 29| Copyright (C) Motorola, Inc. 1990
30| All Rights Reserved 30| All Rights Reserved
31| 31|
32| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 32| For details on the license for this file, please see the
33| The copyright notice above does not evidence any 33| file, README, in this same directory.
34| actual or intended publication of such source code.
35 34
36GEN_EXCEPT: |idnt 2,1 | Motorola 040 Floating Point Software Package 35GEN_EXCEPT: |idnt 2,1 | Motorola 040 Floating Point Software Package
37 36
diff --git a/arch/m68k/fpsp040/get_op.S b/arch/m68k/fpsp040/get_op.S
index c7c2f3727425..64c36d79ef83 100644
--- a/arch/m68k/fpsp040/get_op.S
+++ b/arch/m68k/fpsp040/get_op.S
@@ -54,9 +54,8 @@
54| Copyright (C) Motorola, Inc. 1990 54| Copyright (C) Motorola, Inc. 1990
55| All Rights Reserved 55| All Rights Reserved
56| 56|
57| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 57| For details on the license for this file, please see the
58| The copyright notice above does not evidence any 58| file, README, in this same directory.
59| actual or intended publication of such source code.
60 59
61GET_OP: |idnt 2,1 | Motorola 040 Floating Point Software Package 60GET_OP: |idnt 2,1 | Motorola 040 Floating Point Software Package
62 61
diff --git a/arch/m68k/fpsp040/kernel_ex.S b/arch/m68k/fpsp040/kernel_ex.S
index 476b711967ce..45bcf3455d34 100644
--- a/arch/m68k/fpsp040/kernel_ex.S
+++ b/arch/m68k/fpsp040/kernel_ex.S
@@ -12,9 +12,8 @@
12| Copyright (C) Motorola, Inc. 1990 12| Copyright (C) Motorola, Inc. 1990
13| All Rights Reserved 13| All Rights Reserved
14| 14|
15| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 15| For details on the license for this file, please see the
16| The copyright notice above does not evidence any 16| file, README, in this same directory.
17| actual or intended publication of such source code.
18 17
19KERNEL_EX: |idnt 2,1 | Motorola 040 Floating Point Software Package 18KERNEL_EX: |idnt 2,1 | Motorola 040 Floating Point Software Package
20 19
diff --git a/arch/m68k/fpsp040/res_func.S b/arch/m68k/fpsp040/res_func.S
index 8f6b95217865..d9cdf4383545 100644
--- a/arch/m68k/fpsp040/res_func.S
+++ b/arch/m68k/fpsp040/res_func.S
@@ -16,9 +16,8 @@
16| Copyright (C) Motorola, Inc. 1990 16| Copyright (C) Motorola, Inc. 1990
17| All Rights Reserved 17| All Rights Reserved
18| 18|
19| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 19| For details on the license for this file, please see the
20| The copyright notice above does not evidence any 20| file, README, in this same directory.
21| actual or intended publication of such source code.
22 21
23RES_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package 22RES_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package
24 23
diff --git a/arch/m68k/fpsp040/round.S b/arch/m68k/fpsp040/round.S
index 00f98068783f..f84ae0dd4358 100644
--- a/arch/m68k/fpsp040/round.S
+++ b/arch/m68k/fpsp040/round.S
@@ -8,9 +8,8 @@
8| Copyright (C) Motorola, Inc. 1990 8| Copyright (C) Motorola, Inc. 1990
9| All Rights Reserved 9| All Rights Reserved
10| 10|
11| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 11| For details on the license for this file, please see the
12| The copyright notice above does not evidence any 12| file, README, in this same directory.
13| actual or intended publication of such source code.
14 13
15|ROUND idnt 2,1 | Motorola 040 Floating Point Software Package 14|ROUND idnt 2,1 | Motorola 040 Floating Point Software Package
16 15
diff --git a/arch/m68k/fpsp040/sacos.S b/arch/m68k/fpsp040/sacos.S
index 83b00ab1c48f..513c7cca7318 100644
--- a/arch/m68k/fpsp040/sacos.S
+++ b/arch/m68k/fpsp040/sacos.S
@@ -38,9 +38,8 @@
38| Copyright (C) Motorola, Inc. 1990 38| Copyright (C) Motorola, Inc. 1990
39| All Rights Reserved 39| All Rights Reserved
40| 40|
41| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 41| For details on the license for this file, please see the
42| The copyright notice above does not evidence any 42| file, README, in this same directory.
43| actual or intended publication of such source code.
44 43
45|SACOS idnt 2,1 | Motorola 040 Floating Point Software Package 44|SACOS idnt 2,1 | Motorola 040 Floating Point Software Package
46 45
diff --git a/arch/m68k/fpsp040/sasin.S b/arch/m68k/fpsp040/sasin.S
index 5647a6043903..2a269a58ceaa 100644
--- a/arch/m68k/fpsp040/sasin.S
+++ b/arch/m68k/fpsp040/sasin.S
@@ -38,9 +38,8 @@
38| Copyright (C) Motorola, Inc. 1990 38| Copyright (C) Motorola, Inc. 1990
39| All Rights Reserved 39| All Rights Reserved
40| 40|
41| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 41| For details on the license for this file, please see the
42| The copyright notice above does not evidence any 42| file, README, in this same directory.
43| actual or intended publication of such source code.
44 43
45|SASIN idnt 2,1 | Motorola 040 Floating Point Software Package 44|SASIN idnt 2,1 | Motorola 040 Floating Point Software Package
46 45
diff --git a/arch/m68k/fpsp040/satan.S b/arch/m68k/fpsp040/satan.S
index 20dae222d51e..c8a664998f92 100644
--- a/arch/m68k/fpsp040/satan.S
+++ b/arch/m68k/fpsp040/satan.S
@@ -43,9 +43,8 @@
43| Copyright (C) Motorola, Inc. 1990 43| Copyright (C) Motorola, Inc. 1990
44| All Rights Reserved 44| All Rights Reserved
45| 45|
46| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 46| For details on the license for this file, please see the
47| The copyright notice above does not evidence any 47| file, README, in this same directory.
48| actual or intended publication of such source code.
49 48
50|satan idnt 2,1 | Motorola 040 Floating Point Software Package 49|satan idnt 2,1 | Motorola 040 Floating Point Software Package
51 50
diff --git a/arch/m68k/fpsp040/satanh.S b/arch/m68k/fpsp040/satanh.S
index 20f07810bcda..ba91f77a7571 100644
--- a/arch/m68k/fpsp040/satanh.S
+++ b/arch/m68k/fpsp040/satanh.S
@@ -45,9 +45,8 @@
45| Copyright (C) Motorola, Inc. 1990 45| Copyright (C) Motorola, Inc. 1990
46| All Rights Reserved 46| All Rights Reserved
47| 47|
48| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 48| For details on the license for this file, please see the
49| The copyright notice above does not evidence any 49| file, README, in this same directory.
50| actual or intended publication of such source code.
51 50
52|satanh idnt 2,1 | Motorola 040 Floating Point Software Package 51|satanh idnt 2,1 | Motorola 040 Floating Point Software Package
53 52
diff --git a/arch/m68k/fpsp040/scale.S b/arch/m68k/fpsp040/scale.S
index 5c9b805265f2..04829dd4f1f4 100644
--- a/arch/m68k/fpsp040/scale.S
+++ b/arch/m68k/fpsp040/scale.S
@@ -21,9 +21,8 @@
21| Copyright (C) Motorola, Inc. 1990 21| Copyright (C) Motorola, Inc. 1990
22| All Rights Reserved 22| All Rights Reserved
23| 23|
24| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 24| For details on the license for this file, please see the
25| The copyright notice above does not evidence any 25| file, README, in this same directory.
26| actual or intended publication of such source code.
27 26
28|SCALE idnt 2,1 | Motorola 040 Floating Point Software Package 27|SCALE idnt 2,1 | Motorola 040 Floating Point Software Package
29 28
diff --git a/arch/m68k/fpsp040/scosh.S b/arch/m68k/fpsp040/scosh.S
index e81edbb87642..07d3a4d7c86d 100644
--- a/arch/m68k/fpsp040/scosh.S
+++ b/arch/m68k/fpsp040/scosh.S
@@ -49,9 +49,8 @@
49| Copyright (C) Motorola, Inc. 1990 49| Copyright (C) Motorola, Inc. 1990
50| All Rights Reserved 50| All Rights Reserved
51| 51|
52| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 52| For details on the license for this file, please see the
53| The copyright notice above does not evidence any 53| file, README, in this same directory.
54| actual or intended publication of such source code.
55 54
56|SCOSH idnt 2,1 | Motorola 040 Floating Point Software Package 55|SCOSH idnt 2,1 | Motorola 040 Floating Point Software Package
57 56
diff --git a/arch/m68k/fpsp040/setox.S b/arch/m68k/fpsp040/setox.S
index 0aa75f9bf7d1..145af5447581 100644
--- a/arch/m68k/fpsp040/setox.S
+++ b/arch/m68k/fpsp040/setox.S
@@ -331,9 +331,8 @@
331| Copyright (C) Motorola, Inc. 1990 331| Copyright (C) Motorola, Inc. 1990
332| All Rights Reserved 332| All Rights Reserved
333| 333|
334| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 334| For details on the license for this file, please see the
335| The copyright notice above does not evidence any 335| file, README, in this same directory.
336| actual or intended publication of such source code.
337 336
338|setox idnt 2,1 | Motorola 040 Floating Point Software Package 337|setox idnt 2,1 | Motorola 040 Floating Point Software Package
339 338
diff --git a/arch/m68k/fpsp040/sgetem.S b/arch/m68k/fpsp040/sgetem.S
index 0fcbd045ba75..d9234f4aed57 100644
--- a/arch/m68k/fpsp040/sgetem.S
+++ b/arch/m68k/fpsp040/sgetem.S
@@ -24,9 +24,8 @@
24| Copyright (C) Motorola, Inc. 1990 24| Copyright (C) Motorola, Inc. 1990
25| All Rights Reserved 25| All Rights Reserved
26| 26|
27| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 27| For details on the license for this file, please see the
28| The copyright notice above does not evidence any 28| file, README, in this same directory.
29| actual or intended publication of such source code.
30 29
31|SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package 30|SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package
32 31
diff --git a/arch/m68k/fpsp040/sint.S b/arch/m68k/fpsp040/sint.S
index 0f9bd28e55a0..0e92d4e5d231 100644
--- a/arch/m68k/fpsp040/sint.S
+++ b/arch/m68k/fpsp040/sint.S
@@ -51,9 +51,8 @@
51| Copyright (C) Motorola, Inc. 1990 51| Copyright (C) Motorola, Inc. 1990
52| All Rights Reserved 52| All Rights Reserved
53| 53|
54| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 54| For details on the license for this file, please see the
55| The copyright notice above does not evidence any 55| file, README, in this same directory.
56| actual or intended publication of such source code.
57 56
58|SINT idnt 2,1 | Motorola 040 Floating Point Software Package 57|SINT idnt 2,1 | Motorola 040 Floating Point Software Package
59 58
diff --git a/arch/m68k/fpsp040/skeleton.S b/arch/m68k/fpsp040/skeleton.S
index a1629194e3fd..a8f41615d94a 100644
--- a/arch/m68k/fpsp040/skeleton.S
+++ b/arch/m68k/fpsp040/skeleton.S
@@ -30,9 +30,8 @@
30| Copyright (C) Motorola, Inc. 1990 30| Copyright (C) Motorola, Inc. 1990
31| All Rights Reserved 31| All Rights Reserved
32| 32|
33| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 33| For details on the license for this file, please see the
34| The copyright notice above does not evidence any 34| file, README, in this same directory.
35| actual or intended publication of such source code.
36 35
37| 36|
38| Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk) 37| Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk)
diff --git a/arch/m68k/fpsp040/slog2.S b/arch/m68k/fpsp040/slog2.S
index 517fa4563246..fac2c738382e 100644
--- a/arch/m68k/fpsp040/slog2.S
+++ b/arch/m68k/fpsp040/slog2.S
@@ -96,9 +96,8 @@
96| Copyright (C) Motorola, Inc. 1990 96| Copyright (C) Motorola, Inc. 1990
97| All Rights Reserved 97| All Rights Reserved
98| 98|
99| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 99| For details on the license for this file, please see the
100| The copyright notice above does not evidence any 100| file, README, in this same directory.
101| actual or intended publication of such source code.
102 101
103|SLOG2 idnt 2,1 | Motorola 040 Floating Point Software Package 102|SLOG2 idnt 2,1 | Motorola 040 Floating Point Software Package
104 103
diff --git a/arch/m68k/fpsp040/slogn.S b/arch/m68k/fpsp040/slogn.S
index 2aaa0725c035..d98eaf641ec4 100644
--- a/arch/m68k/fpsp040/slogn.S
+++ b/arch/m68k/fpsp040/slogn.S
@@ -63,9 +63,8 @@
63| Copyright (C) Motorola, Inc. 1990 63| Copyright (C) Motorola, Inc. 1990
64| All Rights Reserved 64| All Rights Reserved
65| 65|
66| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 66| For details on the license for this file, please see the
67| The copyright notice above does not evidence any 67| file, README, in this same directory.
68| actual or intended publication of such source code.
69 68
70|slogn idnt 2,1 | Motorola 040 Floating Point Software Package 69|slogn idnt 2,1 | Motorola 040 Floating Point Software Package
71 70
diff --git a/arch/m68k/fpsp040/smovecr.S b/arch/m68k/fpsp040/smovecr.S
index a0127fa55e9c..73c36512081b 100644
--- a/arch/m68k/fpsp040/smovecr.S
+++ b/arch/m68k/fpsp040/smovecr.S
@@ -15,9 +15,8 @@
15| Copyright (C) Motorola, Inc. 1990 15| Copyright (C) Motorola, Inc. 1990
16| All Rights Reserved 16| All Rights Reserved
17| 17|
18| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 18| For details on the license for this file, please see the
19| The copyright notice above does not evidence any 19| file, README, in this same directory.
20| actual or intended publication of such source code.
21 20
22|SMOVECR idnt 2,1 | Motorola 040 Floating Point Software Package 21|SMOVECR idnt 2,1 | Motorola 040 Floating Point Software Package
23 22
diff --git a/arch/m68k/fpsp040/srem_mod.S b/arch/m68k/fpsp040/srem_mod.S
index 8c8d7f50cc68..a27e70c9a0eb 100644
--- a/arch/m68k/fpsp040/srem_mod.S
+++ b/arch/m68k/fpsp040/srem_mod.S
@@ -66,9 +66,8 @@
66| Copyright (C) Motorola, Inc. 1990 66| Copyright (C) Motorola, Inc. 1990
67| All Rights Reserved 67| All Rights Reserved
68| 68|
69| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 69| For details on the license for this file, please see the
70| The copyright notice above does not evidence any 70| file, README, in this same directory.
71| actual or intended publication of such source code.
72 71
73SREM_MOD: |idnt 2,1 | Motorola 040 Floating Point Software Package 72SREM_MOD: |idnt 2,1 | Motorola 040 Floating Point Software Package
74 73
diff --git a/arch/m68k/fpsp040/ssin.S b/arch/m68k/fpsp040/ssin.S
index 043c91cdd657..a1ef8e01bf06 100644
--- a/arch/m68k/fpsp040/ssin.S
+++ b/arch/m68k/fpsp040/ssin.S
@@ -83,9 +83,8 @@
83| Copyright (C) Motorola, Inc. 1990 83| Copyright (C) Motorola, Inc. 1990
84| All Rights Reserved 84| All Rights Reserved
85| 85|
86| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 86| For details on the license for this file, please see the
87| The copyright notice above does not evidence any 87| file, README, in this same directory.
88| actual or intended publication of such source code.
89 88
90|SSIN idnt 2,1 | Motorola 040 Floating Point Software Package 89|SSIN idnt 2,1 | Motorola 040 Floating Point Software Package
91 90
diff --git a/arch/m68k/fpsp040/ssinh.S b/arch/m68k/fpsp040/ssinh.S
index c8b3308bb143..8a560edc7653 100644
--- a/arch/m68k/fpsp040/ssinh.S
+++ b/arch/m68k/fpsp040/ssinh.S
@@ -49,9 +49,8 @@
49| Copyright (C) Motorola, Inc. 1990 49| Copyright (C) Motorola, Inc. 1990
50| All Rights Reserved 50| All Rights Reserved
51| 51|
52| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 52| For details on the license for this file, please see the
53| The copyright notice above does not evidence any 53| file, README, in this same directory.
54| actual or intended publication of such source code.
55 54
56|SSINH idnt 2,1 | Motorola 040 Floating Point Software Package 55|SSINH idnt 2,1 | Motorola 040 Floating Point Software Package
57 56
diff --git a/arch/m68k/fpsp040/stan.S b/arch/m68k/fpsp040/stan.S
index b5c2a196e617..f8553aaececb 100644
--- a/arch/m68k/fpsp040/stan.S
+++ b/arch/m68k/fpsp040/stan.S
@@ -50,9 +50,8 @@
50| Copyright (C) Motorola, Inc. 1990 50| Copyright (C) Motorola, Inc. 1990
51| All Rights Reserved 51| All Rights Reserved
52| 52|
53| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 53| For details on the license for this file, please see the
54| The copyright notice above does not evidence any 54| file, README, in this same directory.
55| actual or intended publication of such source code.
56 55
57|STAN idnt 2,1 | Motorola 040 Floating Point Software Package 56|STAN idnt 2,1 | Motorola 040 Floating Point Software Package
58 57
diff --git a/arch/m68k/fpsp040/stanh.S b/arch/m68k/fpsp040/stanh.S
index 33b009802243..7e12e59ee8c7 100644
--- a/arch/m68k/fpsp040/stanh.S
+++ b/arch/m68k/fpsp040/stanh.S
@@ -49,9 +49,8 @@
49| Copyright (C) Motorola, Inc. 1990 49| Copyright (C) Motorola, Inc. 1990
50| All Rights Reserved 50| All Rights Reserved
51| 51|
52| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 52| For details on the license for this file, please see the
53| The copyright notice above does not evidence any 53| file, README, in this same directory.
54| actual or intended publication of such source code.
55 54
56|STANH idnt 2,1 | Motorola 040 Floating Point Software Package 55|STANH idnt 2,1 | Motorola 040 Floating Point Software Package
57 56
diff --git a/arch/m68k/fpsp040/sto_res.S b/arch/m68k/fpsp040/sto_res.S
index 0cdca3b060ad..484b47d4eaad 100644
--- a/arch/m68k/fpsp040/sto_res.S
+++ b/arch/m68k/fpsp040/sto_res.S
@@ -19,9 +19,8 @@
19| Copyright (C) Motorola, Inc. 1990 19| Copyright (C) Motorola, Inc. 1990
20| All Rights Reserved 20| All Rights Reserved
21| 21|
22| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 22| For details on the license for this file, please see the
23| The copyright notice above does not evidence any 23| file, README, in this same directory.
24| actual or intended publication of such source code.
25 24
26STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package 25STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package
27 26
diff --git a/arch/m68k/fpsp040/stwotox.S b/arch/m68k/fpsp040/stwotox.S
index 4e3c1407d3df..0d5e6a1436a6 100644
--- a/arch/m68k/fpsp040/stwotox.S
+++ b/arch/m68k/fpsp040/stwotox.S
@@ -76,9 +76,8 @@
76| Copyright (C) Motorola, Inc. 1990 76| Copyright (C) Motorola, Inc. 1990
77| All Rights Reserved 77| All Rights Reserved
78| 78|
79| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 79| For details on the license for this file, please see the
80| The copyright notice above does not evidence any 80| file, README, in this same directory.
81| actual or intended publication of such source code.
82 81
83|STWOTOX idnt 2,1 | Motorola 040 Floating Point Software Package 82|STWOTOX idnt 2,1 | Motorola 040 Floating Point Software Package
84 83
diff --git a/arch/m68k/fpsp040/tbldo.S b/arch/m68k/fpsp040/tbldo.S
index fe60cf4d20d7..fd5c37a5a2b9 100644
--- a/arch/m68k/fpsp040/tbldo.S
+++ b/arch/m68k/fpsp040/tbldo.S
@@ -17,9 +17,8 @@
17| Copyright (C) Motorola, Inc. 1990 17| Copyright (C) Motorola, Inc. 1990
18| All Rights Reserved 18| All Rights Reserved
19| 19|
20| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 20| For details on the license for this file, please see the
21| The copyright notice above does not evidence any 21| file, README, in this same directory.
22| actual or intended publication of such source code.
23 22
24|TBLDO idnt 2,1 | Motorola 040 Floating Point Software Package 23|TBLDO idnt 2,1 | Motorola 040 Floating Point Software Package
25 24
diff --git a/arch/m68k/fpsp040/util.S b/arch/m68k/fpsp040/util.S
index 452f3d65857b..65b26fa88c60 100644
--- a/arch/m68k/fpsp040/util.S
+++ b/arch/m68k/fpsp040/util.S
@@ -16,9 +16,8 @@
16| Copyright (C) Motorola, Inc. 1990 16| Copyright (C) Motorola, Inc. 1990
17| All Rights Reserved 17| All Rights Reserved
18| 18|
19| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 19| For details on the license for this file, please see the
20| The copyright notice above does not evidence any 20| file, README, in this same directory.
21| actual or intended publication of such source code.
22 21
23|UTIL idnt 2,1 | Motorola 040 Floating Point Software Package 22|UTIL idnt 2,1 | Motorola 040 Floating Point Software Package
24 23
diff --git a/arch/m68k/fpsp040/x_bsun.S b/arch/m68k/fpsp040/x_bsun.S
index 039247b09c8b..d5a576bfac79 100644
--- a/arch/m68k/fpsp040/x_bsun.S
+++ b/arch/m68k/fpsp040/x_bsun.S
@@ -13,9 +13,8 @@
13| Copyright (C) Motorola, Inc. 1990 13| Copyright (C) Motorola, Inc. 1990
14| All Rights Reserved 14| All Rights Reserved
15| 15|
16| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 16| For details on the license for this file, please see the
17| The copyright notice above does not evidence any 17| file, README, in this same directory.
18| actual or intended publication of such source code.
19 18
20X_BSUN: |idnt 2,1 | Motorola 040 Floating Point Software Package 19X_BSUN: |idnt 2,1 | Motorola 040 Floating Point Software Package
21 20
diff --git a/arch/m68k/fpsp040/x_fline.S b/arch/m68k/fpsp040/x_fline.S
index 3917710b0fde..264e126d1db7 100644
--- a/arch/m68k/fpsp040/x_fline.S
+++ b/arch/m68k/fpsp040/x_fline.S
@@ -13,9 +13,8 @@
13| Copyright (C) Motorola, Inc. 1990 13| Copyright (C) Motorola, Inc. 1990
14| All Rights Reserved 14| All Rights Reserved
15| 15|
16| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 16| For details on the license for this file, please see the
17| The copyright notice above does not evidence any 17| file, README, in this same directory.
18| actual or intended publication of such source code.
19 18
20X_FLINE: |idnt 2,1 | Motorola 040 Floating Point Software Package 19X_FLINE: |idnt 2,1 | Motorola 040 Floating Point Software Package
21 20
diff --git a/arch/m68k/fpsp040/x_operr.S b/arch/m68k/fpsp040/x_operr.S
index b0f54bcb49a7..e2c371c3a45d 100644
--- a/arch/m68k/fpsp040/x_operr.S
+++ b/arch/m68k/fpsp040/x_operr.S
@@ -43,9 +43,8 @@
43| Copyright (C) Motorola, Inc. 1990 43| Copyright (C) Motorola, Inc. 1990
44| All Rights Reserved 44| All Rights Reserved
45| 45|
46| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 46| For details on the license for this file, please see the
47| The copyright notice above does not evidence any 47| file, README, in this same directory.
48| actual or intended publication of such source code.
49 48
50X_OPERR: |idnt 2,1 | Motorola 040 Floating Point Software Package 49X_OPERR: |idnt 2,1 | Motorola 040 Floating Point Software Package
51 50
diff --git a/arch/m68k/fpsp040/x_ovfl.S b/arch/m68k/fpsp040/x_ovfl.S
index 22cb8b42c7b6..6fe4989ee31f 100644
--- a/arch/m68k/fpsp040/x_ovfl.S
+++ b/arch/m68k/fpsp040/x_ovfl.S
@@ -35,9 +35,8 @@
35| Copyright (C) Motorola, Inc. 1990 35| Copyright (C) Motorola, Inc. 1990
36| All Rights Reserved 36| All Rights Reserved
37| 37|
38| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 38| For details on the license for this file, please see the
39| The copyright notice above does not evidence any 39| file, README, in this same directory.
40| actual or intended publication of such source code.
41 40
42X_OVFL: |idnt 2,1 | Motorola 040 Floating Point Software Package 41X_OVFL: |idnt 2,1 | Motorola 040 Floating Point Software Package
43 42
diff --git a/arch/m68k/fpsp040/x_snan.S b/arch/m68k/fpsp040/x_snan.S
index 039af573312e..4ed766416378 100644
--- a/arch/m68k/fpsp040/x_snan.S
+++ b/arch/m68k/fpsp040/x_snan.S
@@ -22,9 +22,8 @@
22| Copyright (C) Motorola, Inc. 1990 22| Copyright (C) Motorola, Inc. 1990
23| All Rights Reserved 23| All Rights Reserved
24| 24|
25| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 25| For details on the license for this file, please see the
26| The copyright notice above does not evidence any 26| file, README, in this same directory.
27| actual or intended publication of such source code.
28 27
29X_SNAN: |idnt 2,1 | Motorola 040 Floating Point Software Package 28X_SNAN: |idnt 2,1 | Motorola 040 Floating Point Software Package
30 29
diff --git a/arch/m68k/fpsp040/x_store.S b/arch/m68k/fpsp040/x_store.S
index 4282fa67d449..402dc0c0ebc0 100644
--- a/arch/m68k/fpsp040/x_store.S
+++ b/arch/m68k/fpsp040/x_store.S
@@ -11,9 +11,8 @@
11| Copyright (C) Motorola, Inc. 1990 11| Copyright (C) Motorola, Inc. 1990
12| All Rights Reserved 12| All Rights Reserved
13| 13|
14| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 14| For details on the license for this file, please see the
15| The copyright notice above does not evidence any 15| file, README, in this same directory.
16| actual or intended publication of such source code.
17 16
18X_STORE: |idnt 2,1 | Motorola 040 Floating Point Software Package 17X_STORE: |idnt 2,1 | Motorola 040 Floating Point Software Package
19 18
diff --git a/arch/m68k/fpsp040/x_unfl.S b/arch/m68k/fpsp040/x_unfl.S
index 077fcc230fcc..eb772ff3b812 100644
--- a/arch/m68k/fpsp040/x_unfl.S
+++ b/arch/m68k/fpsp040/x_unfl.S
@@ -21,9 +21,8 @@
21| Copyright (C) Motorola, Inc. 1990 21| Copyright (C) Motorola, Inc. 1990
22| All Rights Reserved 22| All Rights Reserved
23| 23|
24| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 24| For details on the license for this file, please see the
25| The copyright notice above does not evidence any 25| file, README, in this same directory.
26| actual or intended publication of such source code.
27 26
28X_UNFL: |idnt 2,1 | Motorola 040 Floating Point Software Package 27X_UNFL: |idnt 2,1 | Motorola 040 Floating Point Software Package
29 28
diff --git a/arch/m68k/fpsp040/x_unimp.S b/arch/m68k/fpsp040/x_unimp.S
index 920cb9410e9e..6f382b21228b 100644
--- a/arch/m68k/fpsp040/x_unimp.S
+++ b/arch/m68k/fpsp040/x_unimp.S
@@ -22,9 +22,8 @@
22| Copyright (C) Motorola, Inc. 1990 22| Copyright (C) Motorola, Inc. 1990
23| All Rights Reserved 23| All Rights Reserved
24| 24|
25| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 25| For details on the license for this file, please see the
26| The copyright notice above does not evidence any 26| file, README, in this same directory.
27| actual or intended publication of such source code.
28 27
29X_UNIMP: |idnt 2,1 | Motorola 040 Floating Point Software Package 28X_UNIMP: |idnt 2,1 | Motorola 040 Floating Point Software Package
30 29
diff --git a/arch/m68k/fpsp040/x_unsupp.S b/arch/m68k/fpsp040/x_unsupp.S
index 4ec57285b683..d7cf46208c62 100644
--- a/arch/m68k/fpsp040/x_unsupp.S
+++ b/arch/m68k/fpsp040/x_unsupp.S
@@ -23,9 +23,8 @@
23| Copyright (C) Motorola, Inc. 1990 23| Copyright (C) Motorola, Inc. 1990
24| All Rights Reserved 24| All Rights Reserved
25| 25|
26| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 26| For details on the license for this file, please see the
27| The copyright notice above does not evidence any 27| file, README, in this same directory.
28| actual or intended publication of such source code.
29 28
30X_UNSUPP: |idnt 2,1 | Motorola 040 Floating Point Software Package 29X_UNSUPP: |idnt 2,1 | Motorola 040 Floating Point Software Package
31 30
diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c
index 3f9cb55d0356..2d8ad0727b6b 100644
--- a/arch/m68k/kernel/process.c
+++ b/arch/m68k/kernel/process.c
@@ -129,6 +129,9 @@ void machine_power_off(void)
129 for (;;); 129 for (;;);
130} 130}
131 131
132void (*pm_power_off)(void) = machine_power_off;
133EXPORT_SYMBOL(pm_power_off);
134
132void show_regs(struct pt_regs * regs) 135void show_regs(struct pt_regs * regs)
133{ 136{
134 printk("\n"); 137 printk("\n");
diff --git a/arch/m68knommu/Kconfig b/arch/m68knommu/Kconfig
index e2a6e8648960..e50858dbc237 100644
--- a/arch/m68knommu/Kconfig
+++ b/arch/m68knommu/Kconfig
@@ -29,6 +29,10 @@ config GENERIC_CALIBRATE_DELAY
29 bool 29 bool
30 default y 30 default y
31 31
32config TIME_LOW_RES
33 bool
34 default y
35
32source "init/Kconfig" 36source "init/Kconfig"
33 37
34menu "Processor type and features" 38menu "Processor type and features"
diff --git a/arch/m68knommu/kernel/process.c b/arch/m68knommu/kernel/process.c
index 99bf43824795..63c117dae0c3 100644
--- a/arch/m68knommu/kernel/process.c
+++ b/arch/m68knommu/kernel/process.c
@@ -39,6 +39,14 @@
39 39
40asmlinkage void ret_from_fork(void); 40asmlinkage void ret_from_fork(void);
41 41
42/*
43 * The following aren't currently used.
44 */
45void (*pm_idle)(void);
46EXPORT_SYMBOL(pm_idle);
47
48void (*pm_power_off)(void);
49EXPORT_SYMBOL(pm_power_off);
42 50
43/* 51/*
44 * The idle loop on an m68knommu.. 52 * The idle loop on an m68knommu..
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index c3e852e9953e..3a0f89d2c8dc 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -595,6 +595,7 @@ config SGI_IP32
595 select SYS_HAS_CPU_R5000 595 select SYS_HAS_CPU_R5000
596 select SYS_HAS_CPU_R10000 if BROKEN 596 select SYS_HAS_CPU_R10000 if BROKEN
597 select SYS_HAS_CPU_RM7000 597 select SYS_HAS_CPU_RM7000
598 select SYS_HAS_CPU_NEVADA
598 select SYS_SUPPORTS_64BIT_KERNEL 599 select SYS_SUPPORTS_64BIT_KERNEL
599 select SYS_SUPPORTS_BIG_ENDIAN 600 select SYS_SUPPORTS_BIG_ENDIAN
600 help 601 help
@@ -1052,6 +1053,7 @@ config CPU_MIPS32_R1
1052 depends on SYS_HAS_CPU_MIPS32_R1 1053 depends on SYS_HAS_CPU_MIPS32_R1
1053 select CPU_HAS_PREFETCH 1054 select CPU_HAS_PREFETCH
1054 select CPU_SUPPORTS_32BIT_KERNEL 1055 select CPU_SUPPORTS_32BIT_KERNEL
1056 select CPU_SUPPORTS_HIGHMEM
1055 help 1057 help
1056 Choose this option to build a kernel for release 1 or later of the 1058 Choose this option to build a kernel for release 1 or later of the
1057 MIPS32 architecture. Most modern embedded systems with a 32-bit 1059 MIPS32 architecture. Most modern embedded systems with a 32-bit
@@ -1068,6 +1070,7 @@ config CPU_MIPS32_R2
1068 depends on SYS_HAS_CPU_MIPS32_R2 1070 depends on SYS_HAS_CPU_MIPS32_R2
1069 select CPU_HAS_PREFETCH 1071 select CPU_HAS_PREFETCH
1070 select CPU_SUPPORTS_32BIT_KERNEL 1072 select CPU_SUPPORTS_32BIT_KERNEL
1073 select CPU_SUPPORTS_HIGHMEM
1071 help 1074 help
1072 Choose this option to build a kernel for release 2 or later of the 1075 Choose this option to build a kernel for release 2 or later of the
1073 MIPS32 architecture. Most modern embedded systems with a 32-bit 1076 MIPS32 architecture. Most modern embedded systems with a 32-bit
@@ -1081,6 +1084,7 @@ config CPU_MIPS64_R1
1081 select CPU_HAS_PREFETCH 1084 select CPU_HAS_PREFETCH
1082 select CPU_SUPPORTS_32BIT_KERNEL 1085 select CPU_SUPPORTS_32BIT_KERNEL
1083 select CPU_SUPPORTS_64BIT_KERNEL 1086 select CPU_SUPPORTS_64BIT_KERNEL
1087 select CPU_SUPPORTS_HIGHMEM
1084 help 1088 help
1085 Choose this option to build a kernel for release 1 or later of the 1089 Choose this option to build a kernel for release 1 or later of the
1086 MIPS64 architecture. Many modern embedded systems with a 64-bit 1090 MIPS64 architecture. Many modern embedded systems with a 64-bit
@@ -1098,6 +1102,7 @@ config CPU_MIPS64_R2
1098 select CPU_HAS_PREFETCH 1102 select CPU_HAS_PREFETCH
1099 select CPU_SUPPORTS_32BIT_KERNEL 1103 select CPU_SUPPORTS_32BIT_KERNEL
1100 select CPU_SUPPORTS_64BIT_KERNEL 1104 select CPU_SUPPORTS_64BIT_KERNEL
1105 select CPU_SUPPORTS_HIGHMEM
1101 help 1106 help
1102 Choose this option to build a kernel for release 2 or later of the 1107 Choose this option to build a kernel for release 2 or later of the
1103 MIPS64 architecture. Many modern embedded systems with a 64-bit 1108 MIPS64 architecture. Many modern embedded systems with a 64-bit
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index 2a9f2ef27b29..3d8dac681c63 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -53,14 +53,17 @@ CROSS_COMPILE := $(tool-prefix)
53endif 53endif
54 54
55CHECKFLAGS-y += -D__linux__ -D__mips__ \ 55CHECKFLAGS-y += -D__linux__ -D__mips__ \
56 -D_MIPS_SZINT=32 \
56 -D_ABIO32=1 \ 57 -D_ABIO32=1 \
57 -D_ABIN32=2 \ 58 -D_ABIN32=2 \
58 -D_ABI64=3 59 -D_ABI64=3
59CHECKFLAGS-$(CONFIG_32BIT) += -D_MIPS_SIM=_ABIO32 \ 60CHECKFLAGS-$(CONFIG_32BIT) += -D_MIPS_SIM=_ABIO32 \
60 -D_MIPS_SZLONG=32 \ 61 -D_MIPS_SZLONG=32 \
62 -D_MIPS_SZPTR=32 \
61 -D__PTRDIFF_TYPE__=int 63 -D__PTRDIFF_TYPE__=int
62CHECKFLAGS-$(CONFIG_64BIT) += -m64 -D_MIPS_SIM=_ABI64 \ 64CHECKFLAGS-$(CONFIG_64BIT) += -m64 -D_MIPS_SIM=_ABI64 \
63 -D_MIPS_SZLONG=64 \ 65 -D_MIPS_SZLONG=64 \
66 -D_MIPS_SZPTR=64 \
64 -D__PTRDIFF_TYPE__="long int" 67 -D__PTRDIFF_TYPE__="long int"
65CHECKFLAGS-$(CONFIG_CPU_BIG_ENDIAN) += -D__MIPSEB__ 68CHECKFLAGS-$(CONFIG_CPU_BIG_ENDIAN) += -D__MIPSEB__
66CHECKFLAGS-$(CONFIG_CPU_LITTLE_ENDIAN) += -D__MIPSEL__ 69CHECKFLAGS-$(CONFIG_CPU_LITTLE_ENDIAN) += -D__MIPSEL__
@@ -91,8 +94,8 @@ endif
91# machines may also. Since BFD is incredibly buggy with respect to 94# machines may also. Since BFD is incredibly buggy with respect to
92# crossformat linking we rely on the elf2ecoff tool for format conversion. 95# crossformat linking we rely on the elf2ecoff tool for format conversion.
93# 96#
94cflags-y += -I $(TOPDIR)/include/asm/gcc
95cflags-y += -G 0 -mno-abicalls -fno-pic -pipe 97cflags-y += -G 0 -mno-abicalls -fno-pic -pipe
98cflags-y += -msoft-float
96LDFLAGS_vmlinux += -G 0 -static -n -nostdlib 99LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
97MODFLAGS += -mlong-calls 100MODFLAGS += -mlong-calls
98 101
@@ -105,7 +108,8 @@ MODFLAGS += -mlong-calls
105cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB) 108cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB)
106cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL) 109cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL)
107 110
108cflags-$(CONFIG_SB1XXX_CORELIS) += -mno-sched-prolog -fno-omit-frame-pointer 111cflags-$(CONFIG_SB1XXX_CORELIS) += $(call cc-option,-mno-sched-prolog) \
112 -fno-omit-frame-pointer
109 113
110# 114#
111# Use: $(call set_gccflags,<cpu0>,<isa0>,<cpu1>,<isa1>,<isa2>) 115# Use: $(call set_gccflags,<cpu0>,<isa0>,<cpu1>,<isa1>,<isa2>)
@@ -166,79 +170,97 @@ echo $$gcc_abi $$gcc_opt$$gcc_cpu $$gcc_isa $$gas_abi $$gas_opt$$gas_cpu $$gas_i
166# 170#
167cflags-$(CONFIG_CPU_R3000) += \ 171cflags-$(CONFIG_CPU_R3000) += \
168 $(call set_gccflags,r3000,mips1,r3000,mips1,mips1) 172 $(call set_gccflags,r3000,mips1,r3000,mips1,mips1)
173CHECKFLAGS-$(CONFIG_CPU_R3000) += -D_MIPS_ISA=_MIPS_ISA_MIPS1
169 174
170cflags-$(CONFIG_CPU_TX39XX) += \ 175cflags-$(CONFIG_CPU_TX39XX) += \
171 $(call set_gccflags,r3900,mips1,r3000,mips1,mips1) 176 $(call set_gccflags,r3900,mips1,r3000,mips1,mips1)
177CHECKFLAGS-$(CONFIG_CPU_TX39XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS1
172 178
173cflags-$(CONFIG_CPU_R6000) += \ 179cflags-$(CONFIG_CPU_R6000) += \
174 $(call set_gccflags,r6000,mips2,r6000,mips2,mips2) \ 180 $(call set_gccflags,r6000,mips2,r6000,mips2,mips2) \
175 -Wa,--trap 181 -Wa,--trap
182CHECKFLAGS-$(CONFIG_CPU_R6000) += -D_MIPS_ISA=_MIPS_ISA_MIPS2
176 183
177cflags-$(CONFIG_CPU_R4300) += \ 184cflags-$(CONFIG_CPU_R4300) += \
178 $(call set_gccflags,r4300,mips3,r4300,mips3,mips2) \ 185 $(call set_gccflags,r4300,mips3,r4300,mips3,mips2) \
179 -Wa,--trap 186 -Wa,--trap
187CHECKFLAGS-$(CONFIG_CPU_R4300) += -D_MIPS_ISA=_MIPS_ISA_MIPS3
180 188
181cflags-$(CONFIG_CPU_VR41XX) += \ 189cflags-$(CONFIG_CPU_VR41XX) += \
182 $(call set_gccflags,r4100,mips3,r4600,mips3,mips2) \ 190 $(call set_gccflags,r4100,mips3,r4600,mips3,mips2) \
183 -Wa,--trap 191 -Wa,--trap
192CHECKFLAGS-$(CONFIG_CPU_VR41XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS3
184 193
185cflags-$(CONFIG_CPU_R4X00) += \ 194cflags-$(CONFIG_CPU_R4X00) += \
186 $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \ 195 $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \
187 -Wa,--trap 196 -Wa,--trap
197CHECKFLAGS-$(CONFIG_CPU_R4X00) += -D_MIPS_ISA=_MIPS_ISA_MIPS3
188 198
189cflags-$(CONFIG_CPU_TX49XX) += \ 199cflags-$(CONFIG_CPU_TX49XX) += \
190 $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \ 200 $(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \
191 -Wa,--trap 201 -Wa,--trap
202CHECKFLAGS-$(CONFIG_CPU_TX49XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS3
192 203
193cflags-$(CONFIG_CPU_MIPS32_R1) += \ 204cflags-$(CONFIG_CPU_MIPS32_R1) += \
194 $(call set_gccflags,mips32,mips32,r4600,mips3,mips2) \ 205 $(call set_gccflags,mips32,mips32,r4600,mips3,mips2) \
195 -Wa,--trap 206 -Wa,--trap
207CHECKFLAGS-$(CONFIG_CPU_MIPS32_R1) += -D_MIPS_ISA=_MIPS_ISA_MIPS32
196 208
197cflags-$(CONFIG_CPU_MIPS32_R2) += \ 209cflags-$(CONFIG_CPU_MIPS32_R2) += \
198 $(call set_gccflags,mips32r2,mips32r2,r4600,mips3,mips2) \ 210 $(call set_gccflags,mips32r2,mips32r2,r4600,mips3,mips2) \
199 -Wa,--trap 211 -Wa,--trap
212CHECKFLAGS-$(CONFIG_CPU_MIPS32_R2) += -D_MIPS_ISA=_MIPS_ISA_MIPS32
200 213
201cflags-$(CONFIG_CPU_MIPS64_R1) += \ 214cflags-$(CONFIG_CPU_MIPS64_R1) += \
202 $(call set_gccflags,mips64,mips64,r4600,mips3,mips2) \ 215 $(call set_gccflags,mips64,mips64,r4600,mips3,mips2) \
203 -Wa,--trap 216 -Wa,--trap
217CHECKFLAGS-$(CONFIG_CPU_MIPS64_R1) += -D_MIPS_ISA=_MIPS_ISA_MIPS64
204 218
205cflags-$(CONFIG_CPU_MIPS64_R2) += \ 219cflags-$(CONFIG_CPU_MIPS64_R2) += \
206 $(call set_gccflags,mips64r2,mips64r2,r4600,mips3,mips2) \ 220 $(call set_gccflags,mips64r2,mips64r2,r4600,mips3,mips2) \
207 -Wa,--trap 221 -Wa,--trap
222CHECKFLAGS-$(CONFIG_CPU_MIPS64_R2) += -D_MIPS_ISA=_MIPS_ISA_MIPS64
208 223
209cflags-$(CONFIG_CPU_R5000) += \ 224cflags-$(CONFIG_CPU_R5000) += \
210 $(call set_gccflags,r5000,mips4,r5000,mips4,mips2) \ 225 $(call set_gccflags,r5000,mips4,r5000,mips4,mips2) \
211 -Wa,--trap 226 -Wa,--trap
227CHECKFLAGS-$(CONFIG_CPU_R5000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
212 228
213cflags-$(CONFIG_CPU_R5432) += \ 229cflags-$(CONFIG_CPU_R5432) += \
214 $(call set_gccflags,r5400,mips4,r5000,mips4,mips2) \ 230 $(call set_gccflags,r5400,mips4,r5000,mips4,mips2) \
215 -Wa,--trap 231 -Wa,--trap
232CHECKFLAGS-$(CONFIG_CPU_R5432) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
216 233
217cflags-$(CONFIG_CPU_NEVADA) += \ 234cflags-$(CONFIG_CPU_NEVADA) += \
218 $(call set_gccflags,rm5200,mips4,r5000,mips4,mips2) \ 235 $(call set_gccflags,rm5200,mips4,r5000,mips4,mips2) \
219 -Wa,--trap 236 -Wa,--trap
220# $(call cc-option,-mmad) 237CHECKFLAGS-$(CONFIG_CPU_NEVADA) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
221 238
222cflags-$(CONFIG_CPU_RM7000) += \ 239cflags-$(CONFIG_CPU_RM7000) += \
223 $(call set_gccflags,rm7000,mips4,r5000,mips4,mips2) \ 240 $(call set_gccflags,rm7000,mips4,r5000,mips4,mips2) \
224 -Wa,--trap 241 -Wa,--trap
242CHECKFLAGS-$(CONFIG_CPU_RM7000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
225 243
226cflags-$(CONFIG_CPU_RM9000) += \ 244cflags-$(CONFIG_CPU_RM9000) += \
227 $(call set_gccflags,rm9000,mips4,r5000,mips4,mips2) \ 245 $(call set_gccflags,rm9000,mips4,r5000,mips4,mips2) \
228 -Wa,--trap 246 -Wa,--trap
247CHECKFLAGS-$(CONFIG_CPU_RM9000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
229 248
230 249
231cflags-$(CONFIG_CPU_SB1) += \ 250cflags-$(CONFIG_CPU_SB1) += \
232 $(call set_gccflags,sb1,mips64,r5000,mips4,mips2) \ 251 $(call set_gccflags,sb1,mips64,r5000,mips4,mips2) \
233 -Wa,--trap 252 -Wa,--trap
253CHECKFLAGS-$(CONFIG_CPU_SB1) += -D_MIPS_ISA=_MIPS_ISA_MIPS64
234 254
235cflags-$(CONFIG_CPU_R8000) += \ 255cflags-$(CONFIG_CPU_R8000) += \
236 $(call set_gccflags,r8000,mips4,r8000,mips4,mips2) \ 256 $(call set_gccflags,r8000,mips4,r8000,mips4,mips2) \
237 -Wa,--trap 257 -Wa,--trap
258CHECKFLAGS-$(CONFIG_CPU_R8000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
238 259
239cflags-$(CONFIG_CPU_R10000) += \ 260cflags-$(CONFIG_CPU_R10000) += \
240 $(call set_gccflags,r10000,mips4,r8000,mips4,mips2) \ 261 $(call set_gccflags,r10000,mips4,r8000,mips4,mips2) \
241 -Wa,--trap 262 -Wa,--trap
263CHECKFLAGS-$(CONFIG_CPU_R10000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
242 264
243ifdef CONFIG_CPU_SB1 265ifdef CONFIG_CPU_SB1
244ifdef CONFIG_SB1_PASS_1_WORKAROUNDS 266ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
@@ -369,7 +391,7 @@ load-$(CONFIG_MIPS_XXS1500) += 0xffffffff80100000
369# Cobalt Server 391# Cobalt Server
370# 392#
371core-$(CONFIG_MIPS_COBALT) += arch/mips/cobalt/ 393core-$(CONFIG_MIPS_COBALT) += arch/mips/cobalt/
372cflags-$(CONFIG_MIPS_COBALT) += -Iinclude/asm-mips/cobalt 394cflags-$(CONFIG_MIPS_COBALT) += -Iinclude/asm-mips/mach-cobalt
373load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000 395load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000
374 396
375# 397#
diff --git a/arch/mips/arc/arc_con.c b/arch/mips/arc/arc_con.c
index 51785a6a7328..bc32fe64f42a 100644
--- a/arch/mips/arc/arc_con.c
+++ b/arch/mips/arc/arc_con.c
@@ -24,7 +24,7 @@ static void prom_console_write(struct console *co, const char *s,
24 } 24 }
25} 25}
26 26
27static int __init prom_console_setup(struct console *co, char *options) 27static int prom_console_setup(struct console *co, char *options)
28{ 28{
29 return !(prom_flags & PROM_FLAG_USE_AS_CONSOLE); 29 return !(prom_flags & PROM_FLAG_USE_AS_CONSOLE);
30} 30}
diff --git a/arch/mips/arc/misc.c b/arch/mips/arc/misc.c
index 84867de22028..b2e10b9e9452 100644
--- a/arch/mips/arc/misc.c
+++ b/arch/mips/arc/misc.c
@@ -9,7 +9,6 @@
9 * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org) 9 * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org)
10 * Copyright (C) 1999 Silicon Graphics, Inc. 10 * Copyright (C) 1999 Silicon Graphics, Inc.
11 */ 11 */
12#include <linux/config.h>
13#include <linux/init.h> 12#include <linux/init.h>
14#include <linux/kernel.h> 13#include <linux/kernel.h>
15 14
@@ -20,17 +19,11 @@
20#include <asm/bootinfo.h> 19#include <asm/bootinfo.h>
21#include <asm/system.h> 20#include <asm/system.h>
22 21
23extern void *sgiwd93_host;
24extern void reset_wd33c93(void *instance);
25
26VOID 22VOID
27ArcHalt(VOID) 23ArcHalt(VOID)
28{ 24{
29 bc_disable(); 25 bc_disable();
30 local_irq_disable(); 26 local_irq_disable();
31#ifdef CONFIG_SCSI_SGIWD93
32 reset_wd33c93(sgiwd93_host);
33#endif
34 ARC_CALL0(halt); 27 ARC_CALL0(halt);
35never: goto never; 28never: goto never;
36} 29}
@@ -40,9 +33,6 @@ ArcPowerDown(VOID)
40{ 33{
41 bc_disable(); 34 bc_disable();
42 local_irq_disable(); 35 local_irq_disable();
43#ifdef CONFIG_SCSI_SGIWD93
44 reset_wd33c93(sgiwd93_host);
45#endif
46 ARC_CALL0(pdown); 36 ARC_CALL0(pdown);
47never: goto never; 37never: goto never;
48} 38}
@@ -53,9 +43,6 @@ ArcRestart(VOID)
53{ 43{
54 bc_disable(); 44 bc_disable();
55 local_irq_disable(); 45 local_irq_disable();
56#ifdef CONFIG_SCSI_SGIWD93
57 reset_wd33c93(sgiwd93_host);
58#endif
59 ARC_CALL0(restart); 46 ARC_CALL0(restart);
60never: goto never; 47never: goto never;
61} 48}
@@ -65,9 +52,6 @@ ArcReboot(VOID)
65{ 52{
66 bc_disable(); 53 bc_disable();
67 local_irq_disable(); 54 local_irq_disable();
68#ifdef CONFIG_SCSI_SGIWD93
69 reset_wd33c93(sgiwd93_host);
70#endif
71 ARC_CALL0(reboot); 55 ARC_CALL0(reboot);
72never: goto never; 56never: goto never;
73} 57}
@@ -77,9 +61,6 @@ ArcEnterInteractiveMode(VOID)
77{ 61{
78 bc_disable(); 62 bc_disable();
79 local_irq_disable(); 63 local_irq_disable();
80#ifdef CONFIG_SCSI_SGIWD93
81 reset_wd33c93(sgiwd93_host);
82#endif
83 ARC_CALL0(imode); 64 ARC_CALL0(imode);
84never: goto never; 65never: goto never;
85} 66}
diff --git a/arch/mips/au1000/common/reset.c b/arch/mips/au1000/common/reset.c
index 65b84db800e4..c93af224c1b3 100644
--- a/arch/mips/au1000/common/reset.c
+++ b/arch/mips/au1000/common/reset.c
@@ -151,7 +151,7 @@ void au1000_restart(char *command)
151 } 151 }
152 152
153 set_c0_status(ST0_BEV | ST0_ERL); 153 set_c0_status(ST0_BEV | ST0_ERL);
154 set_c0_config(CONF_CM_UNCACHED); 154 change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
155 flush_cache_all(); 155 flush_cache_all();
156 write_c0_wired(0); 156 write_c0_wired(0);
157 157
@@ -164,17 +164,20 @@ void au1000_restart(char *command)
164 164
165void au1000_halt(void) 165void au1000_halt(void)
166{ 166{
167#if defined(CONFIG_MIPS_PB1550) 167#if defined(CONFIG_MIPS_PB1550) || defined(CONFIG_MIPS_DB1550)
168 /* power off system */ 168 /* power off system */
169 printk("\n** Powering off Pb1550\n"); 169 printk("\n** Powering off...\n");
170 au_writew(au_readw(0xAF00001C) | (3<<14), 0xAF00001C); 170 au_writew(au_readw(0xAF00001C) | (3<<14), 0xAF00001C);
171 au_sync(); 171 au_sync();
172 while(1); /* should not get here */ 172 while(1); /* should not get here */
173#endif 173#else
174 printk(KERN_NOTICE "\n** You can safely turn off the power\n"); 174 printk(KERN_NOTICE "\n** You can safely turn off the power\n");
175#ifdef CONFIG_MIPS_MIRAGE 175#ifdef CONFIG_MIPS_MIRAGE
176 au_writel((1 << 26) | (1 << 10), GPIO2_OUTPUT); 176 au_writel((1 << 26) | (1 << 10), GPIO2_OUTPUT);
177#endif 177#endif
178#ifdef CONFIG_MIPS_DB1200
179 au_writew(au_readw(0xB980001C) | (1<<14), 0xB980001C);
180#endif
178#ifdef CONFIG_PM 181#ifdef CONFIG_PM
179 au_sleep(); 182 au_sleep();
180 183
@@ -187,6 +190,7 @@ void au1000_halt(void)
187 "wait\n\t" 190 "wait\n\t"
188 ".set\tmips0"); 191 ".set\tmips0");
189#endif 192#endif
193#endif /* defined(CONFIG_MIPS_PB1550) || defined(CONFIG_MIPS_DB1550) */
190} 194}
191 195
192void au1000_power_off(void) 196void au1000_power_off(void)
diff --git a/arch/mips/au1000/common/setup.c b/arch/mips/au1000/common/setup.c
index 08c8c855cc9c..eb155c071aa6 100644
--- a/arch/mips/au1000/common/setup.c
+++ b/arch/mips/au1000/common/setup.c
@@ -33,6 +33,7 @@
33#include <linux/delay.h> 33#include <linux/delay.h>
34#include <linux/interrupt.h> 34#include <linux/interrupt.h>
35#include <linux/module.h> 35#include <linux/module.h>
36#include <linux/pm.h>
36 37
37#include <asm/cpu.h> 38#include <asm/cpu.h>
38#include <asm/bootinfo.h> 39#include <asm/bootinfo.h>
@@ -125,7 +126,7 @@ void __init plat_setup(void)
125#endif 126#endif
126 _machine_restart = au1000_restart; 127 _machine_restart = au1000_restart;
127 _machine_halt = au1000_halt; 128 _machine_halt = au1000_halt;
128 _machine_power_off = au1000_power_off; 129 pm_power_off = au1000_power_off;
129 board_time_init = au1xxx_time_init; 130 board_time_init = au1xxx_time_init;
130 board_timer_setup = au1xxx_timer_setup; 131 board_timer_setup = au1xxx_timer_setup;
131 132
diff --git a/arch/mips/cobalt/int-handler.S b/arch/mips/cobalt/int-handler.S
index f92608e8d84f..e75d5e3ca868 100644
--- a/arch/mips/cobalt/int-handler.S
+++ b/arch/mips/cobalt/int-handler.S
@@ -8,7 +8,7 @@
8 */ 8 */
9#include <asm/asm.h> 9#include <asm/asm.h>
10#include <asm/mipsregs.h> 10#include <asm/mipsregs.h>
11#include <asm/cobalt/cobalt.h> 11#include <asm/mach-cobalt/cobalt.h>
12#include <asm/regdef.h> 12#include <asm/regdef.h>
13#include <asm/stackframe.h> 13#include <asm/stackframe.h>
14 14
diff --git a/arch/mips/cobalt/irq.c b/arch/mips/cobalt/irq.c
index 0d90851f925e..f9a108820d6e 100644
--- a/arch/mips/cobalt/irq.c
+++ b/arch/mips/cobalt/irq.c
@@ -18,7 +18,7 @@
18#include <asm/gt64120.h> 18#include <asm/gt64120.h>
19#include <asm/ptrace.h> 19#include <asm/ptrace.h>
20 20
21#include <asm/cobalt/cobalt.h> 21#include <asm/mach-cobalt/cobalt.h>
22 22
23extern void cobalt_handle_int(void); 23extern void cobalt_handle_int(void);
24 24
diff --git a/arch/mips/cobalt/reset.c b/arch/mips/cobalt/reset.c
index 805a0e88507b..753dfccae6fa 100644
--- a/arch/mips/cobalt/reset.c
+++ b/arch/mips/cobalt/reset.c
@@ -16,7 +16,7 @@
16#include <asm/reboot.h> 16#include <asm/reboot.h>
17#include <asm/system.h> 17#include <asm/system.h>
18#include <asm/mipsregs.h> 18#include <asm/mipsregs.h>
19#include <asm/cobalt/cobalt.h> 19#include <asm/mach-cobalt/cobalt.h>
20 20
21void cobalt_machine_halt(void) 21void cobalt_machine_halt(void)
22{ 22{
diff --git a/arch/mips/cobalt/setup.c b/arch/mips/cobalt/setup.c
index d358a118fa31..b9713a723053 100644
--- a/arch/mips/cobalt/setup.c
+++ b/arch/mips/cobalt/setup.c
@@ -5,7 +5,7 @@
5 * License. See the file "COPYING" in the main directory of this archive 5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 6 * for more details.
7 * 7 *
8 * Copyright (C) 1996, 1997, 2004 by Ralf Baechle (ralf@linux-mips.org) 8 * Copyright (C) 1996, 1997, 2004, 05 by Ralf Baechle (ralf@linux-mips.org)
9 * Copyright (C) 2001, 2002, 2003 by Liam Davies (ldavies@agile.tv) 9 * Copyright (C) 2001, 2002, 2003 by Liam Davies (ldavies@agile.tv)
10 * 10 *
11 */ 11 */
@@ -13,6 +13,7 @@
13#include <linux/interrupt.h> 13#include <linux/interrupt.h>
14#include <linux/pci.h> 14#include <linux/pci.h>
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/pm.h>
16#include <linux/serial.h> 17#include <linux/serial.h>
17#include <linux/serial_core.h> 18#include <linux/serial_core.h>
18 19
@@ -25,7 +26,7 @@
25#include <asm/gt64120.h> 26#include <asm/gt64120.h>
26#include <asm/serial.h> 27#include <asm/serial.h>
27 28
28#include <asm/cobalt/cobalt.h> 29#include <asm/mach-cobalt/cobalt.h>
29 30
30extern void cobalt_machine_restart(char *command); 31extern void cobalt_machine_restart(char *command);
31extern void cobalt_machine_halt(void); 32extern void cobalt_machine_halt(void);
@@ -99,7 +100,7 @@ void __init plat_setup(void)
99 100
100 _machine_restart = cobalt_machine_restart; 101 _machine_restart = cobalt_machine_restart;
101 _machine_halt = cobalt_machine_halt; 102 _machine_halt = cobalt_machine_halt;
102 _machine_power_off = cobalt_machine_power_off; 103 pm_power_off = cobalt_machine_power_off;
103 104
104 board_timer_setup = cobalt_timer_setup; 105 board_timer_setup = cobalt_timer_setup;
105 106
@@ -139,7 +140,7 @@ void __init plat_setup(void)
139 uart.type = PORT_UNKNOWN; 140 uart.type = PORT_UNKNOWN;
140 uart.uartclk = 18432000; 141 uart.uartclk = 18432000;
141 uart.irq = COBALT_SERIAL_IRQ; 142 uart.irq = COBALT_SERIAL_IRQ;
142 uart.flags = STD_COM_FLAGS; 143 uart.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
143 uart.iobase = 0xc800000; 144 uart.iobase = 0xc800000;
144 uart.iotype = UPIO_PORT; 145 uart.iotype = UPIO_PORT;
145 146
diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig
index e17d3adff021..58c22cd344d3 100644
--- a/arch/mips/configs/ip27_defconfig
+++ b/arch/mips/configs/ip27_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc2 3# Linux kernel version: 2.6.16-rc4
4# Thu Nov 24 01:06:21 2005 4# Tue Feb 21 13:44:31 2006
5# 5#
6CONFIG_MIPS=y 6CONFIG_MIPS=y
7 7
@@ -144,7 +144,6 @@ CONFIG_PREEMPT_BKL=y
144# Code maturity level options 144# Code maturity level options
145# 145#
146CONFIG_EXPERIMENTAL=y 146CONFIG_EXPERIMENTAL=y
147CONFIG_CLEAN_COMPILE=y
148CONFIG_LOCK_KERNEL=y 147CONFIG_LOCK_KERNEL=y
149CONFIG_INIT_ENV_ARG_LIMIT=32 148CONFIG_INIT_ENV_ARG_LIMIT=32
150 149
@@ -250,6 +249,7 @@ CONFIG_NET=y
250# 249#
251# Networking options 250# Networking options
252# 251#
252# CONFIG_NETDEBUG is not set
253CONFIG_PACKET=y 253CONFIG_PACKET=y
254CONFIG_PACKET_MMAP=y 254CONFIG_PACKET_MMAP=y
255CONFIG_UNIX=y 255CONFIG_UNIX=y
@@ -289,6 +289,7 @@ CONFIG_TCP_CONG_BIC=y
289# SCTP Configuration (EXPERIMENTAL) 289# SCTP Configuration (EXPERIMENTAL)
290# 290#
291# CONFIG_IP_SCTP is not set 291# CONFIG_IP_SCTP is not set
292
292# CONFIG_ATM is not set 293# CONFIG_ATM is not set
293# CONFIG_BRIDGE is not set 294# CONFIG_BRIDGE is not set
294# CONFIG_VLAN_8021Q is not set 295# CONFIG_VLAN_8021Q is not set
@@ -448,7 +449,7 @@ CONFIG_SCSI_SAS_ATTRS=m
448# 449#
449# SCSI low-level drivers 450# SCSI low-level drivers
450# 451#
451CONFIG_ISCSI_TCP=m 452# CONFIG_ISCSI_TCP is not set
452# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 453# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
453# CONFIG_SCSI_3W_9XXX is not set 454# CONFIG_SCSI_3W_9XXX is not set
454# CONFIG_SCSI_ACARD is not set 455# CONFIG_SCSI_ACARD is not set
@@ -774,6 +775,10 @@ CONFIG_USB_ARCH_HAS_OHCI=y
774# 775#
775 776
776# 777#
778# EDAC - error detection and reporting (RAS)
779#
780
781#
777# File systems 782# File systems
778# 783#
779CONFIG_EXT2_FS=y 784CONFIG_EXT2_FS=y
diff --git a/arch/mips/configs/ip32_defconfig b/arch/mips/configs/ip32_defconfig
index 967e7acd8e1f..a34db6e82b27 100644
--- a/arch/mips/configs/ip32_defconfig
+++ b/arch/mips/configs/ip32_defconfig
@@ -102,6 +102,7 @@ CONFIG_CPU_R5000=y
102# CONFIG_CPU_RM9000 is not set 102# CONFIG_CPU_RM9000 is not set
103# CONFIG_CPU_SB1 is not set 103# CONFIG_CPU_SB1 is not set
104CONFIG_SYS_HAS_CPU_R5000=y 104CONFIG_SYS_HAS_CPU_R5000=y
105CONFIG_SYS_HAS_CPU_NEVADA=y
105CONFIG_SYS_HAS_CPU_RM7000=y 106CONFIG_SYS_HAS_CPU_RM7000=y
106CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y 107CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y
107CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y 108CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
diff --git a/arch/mips/configs/qemu_defconfig b/arch/mips/configs/qemu_defconfig
index dee44606164c..c02becab850b 100644
--- a/arch/mips/configs/qemu_defconfig
+++ b/arch/mips/configs/qemu_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc2 3# Linux kernel version: 2.6.16-rc2
4# Thu Nov 24 01:07:00 2005 4# Fri Feb 3 17:14:27 2006
5# 5#
6CONFIG_MIPS=y 6CONFIG_MIPS=y
7 7
@@ -147,26 +147,27 @@ CONFIG_LOCALVERSION_AUTO=y
147# CONFIG_BSD_PROCESS_ACCT is not set 147# CONFIG_BSD_PROCESS_ACCT is not set
148# CONFIG_SYSCTL is not set 148# CONFIG_SYSCTL is not set
149# CONFIG_AUDIT is not set 149# CONFIG_AUDIT is not set
150# CONFIG_HOTPLUG is not set
151CONFIG_KOBJECT_UEVENT=y
152# CONFIG_IKCONFIG is not set 150# CONFIG_IKCONFIG is not set
153CONFIG_INITRAMFS_SOURCE="" 151CONFIG_INITRAMFS_SOURCE=""
154CONFIG_EMBEDDED=y 152CONFIG_EMBEDDED=y
155CONFIG_KALLSYMS=y 153CONFIG_KALLSYMS=y
156# CONFIG_KALLSYMS_EXTRA_PASS is not set 154# CONFIG_KALLSYMS_EXTRA_PASS is not set
155# CONFIG_HOTPLUG is not set
157CONFIG_PRINTK=y 156CONFIG_PRINTK=y
158# CONFIG_BUG is not set 157# CONFIG_BUG is not set
158CONFIG_ELF_CORE=y
159# CONFIG_BASE_FULL is not set 159# CONFIG_BASE_FULL is not set
160# CONFIG_FUTEX is not set 160# CONFIG_FUTEX is not set
161# CONFIG_EPOLL is not set 161# CONFIG_EPOLL is not set
162# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
163# CONFIG_SHMEM is not set 162# CONFIG_SHMEM is not set
164CONFIG_CC_ALIGN_FUNCTIONS=0 163CONFIG_CC_ALIGN_FUNCTIONS=0
165CONFIG_CC_ALIGN_LABELS=0 164CONFIG_CC_ALIGN_LABELS=0
166CONFIG_CC_ALIGN_LOOPS=0 165CONFIG_CC_ALIGN_LOOPS=0
167CONFIG_CC_ALIGN_JUMPS=0 166CONFIG_CC_ALIGN_JUMPS=0
167CONFIG_SLAB=y
168CONFIG_TINY_SHMEM=y 168CONFIG_TINY_SHMEM=y
169CONFIG_BASE_SMALL=1 169CONFIG_BASE_SMALL=1
170# CONFIG_SLOB is not set
170 171
171# 172#
172# Loadable module support 173# Loadable module support
@@ -266,11 +267,7 @@ CONFIG_TCP_CONG_BIC=y
266# CONFIG_HAMRADIO is not set 267# CONFIG_HAMRADIO is not set
267# CONFIG_IRDA is not set 268# CONFIG_IRDA is not set
268# CONFIG_BT is not set 269# CONFIG_BT is not set
269CONFIG_IEEE80211=y 270# CONFIG_IEEE80211 is not set
270# CONFIG_IEEE80211_DEBUG is not set
271CONFIG_IEEE80211_CRYPT_WEP=y
272CONFIG_IEEE80211_CRYPT_CCMP=y
273CONFIG_IEEE80211_CRYPT_TKIP=y
274 271
275# 272#
276# Device Drivers 273# Device Drivers
@@ -323,7 +320,7 @@ CONFIG_BLK_DEV_RAM_COUNT=16
323# 320#
324# SCSI device support 321# SCSI device support
325# 322#
326CONFIG_RAID_ATTRS=y 323# CONFIG_RAID_ATTRS is not set
327# CONFIG_SCSI is not set 324# CONFIG_SCSI is not set
328 325
329# 326#
@@ -366,24 +363,16 @@ CONFIG_NETDEVICES=y
366# 363#
367# PHY device support 364# PHY device support
368# 365#
369CONFIG_PHYLIB=y 366# CONFIG_PHYLIB is not set
370
371#
372# MII PHY device drivers
373#
374CONFIG_MARVELL_PHY=y
375CONFIG_DAVICOM_PHY=y
376CONFIG_QSEMI_PHY=y
377CONFIG_LXT_PHY=y
378CONFIG_CICADA_PHY=y
379 367
380# 368#
381# Ethernet (10 or 100Mbit) 369# Ethernet (10 or 100Mbit)
382# 370#
383CONFIG_NET_ETHERNET=y 371CONFIG_NET_ETHERNET=y
384CONFIG_MII=y 372# CONFIG_MII is not set
385# CONFIG_NET_VENDOR_3COM is not set 373# CONFIG_NET_VENDOR_3COM is not set
386# CONFIG_NET_VENDOR_SMC is not set 374# CONFIG_NET_VENDOR_SMC is not set
375# CONFIG_DM9000 is not set
387# CONFIG_NET_VENDOR_RACAL is not set 376# CONFIG_NET_VENDOR_RACAL is not set
388# CONFIG_DEPCA is not set 377# CONFIG_DEPCA is not set
389# CONFIG_HP100 is not set 378# CONFIG_HP100 is not set
@@ -479,6 +468,7 @@ CONFIG_HW_CONSOLE=y
479CONFIG_SERIAL_8250=y 468CONFIG_SERIAL_8250=y
480CONFIG_SERIAL_8250_CONSOLE=y 469CONFIG_SERIAL_8250_CONSOLE=y
481CONFIG_SERIAL_8250_NR_UARTS=4 470CONFIG_SERIAL_8250_NR_UARTS=4
471CONFIG_SERIAL_8250_RUNTIME_UARTS=4
482# CONFIG_SERIAL_8250_EXTENDED is not set 472# CONFIG_SERIAL_8250_EXTENDED is not set
483 473
484# 474#
@@ -518,6 +508,12 @@ CONFIG_SERIAL_CORE_CONSOLE=y
518# CONFIG_I2C is not set 508# CONFIG_I2C is not set
519 509
520# 510#
511# SPI support
512#
513# CONFIG_SPI is not set
514# CONFIG_SPI_MASTER is not set
515
516#
521# Dallas's 1-wire bus 517# Dallas's 1-wire bus
522# 518#
523# CONFIG_W1 is not set 519# CONFIG_W1 is not set
@@ -592,11 +588,14 @@ CONFIG_DUMMY_CONSOLE=y
592# 588#
593 589
594# 590#
591# EDAC - error detection and reporting (RAS)
592#
593
594#
595# File systems 595# File systems
596# 596#
597# CONFIG_EXT2_FS is not set 597# CONFIG_EXT2_FS is not set
598# CONFIG_EXT3_FS is not set 598# CONFIG_EXT3_FS is not set
599# CONFIG_JBD is not set
600# CONFIG_REISERFS_FS is not set 599# CONFIG_REISERFS_FS is not set
601# CONFIG_JFS_FS is not set 600# CONFIG_JFS_FS is not set
602# CONFIG_FS_POSIX_ACL is not set 601# CONFIG_FS_POSIX_ACL is not set
@@ -677,6 +676,7 @@ CONFIG_MSDOS_PARTITION=y
677# Kernel hacking 676# Kernel hacking
678# 677#
679# CONFIG_PRINTK_TIME is not set 678# CONFIG_PRINTK_TIME is not set
679# CONFIG_MAGIC_SYSRQ is not set
680# CONFIG_DEBUG_KERNEL is not set 680# CONFIG_DEBUG_KERNEL is not set
681CONFIG_LOG_BUF_SHIFT=14 681CONFIG_LOG_BUF_SHIFT=14
682CONFIG_CROSSCOMPILE=y 682CONFIG_CROSSCOMPILE=y
@@ -690,31 +690,7 @@ CONFIG_CMDLINE="console=ttyS0 debug ip=172.20.0.2:172.20.0.1::255.255.0.0"
690# 690#
691# Cryptographic options 691# Cryptographic options
692# 692#
693CONFIG_CRYPTO=y 693# CONFIG_CRYPTO is not set
694CONFIG_CRYPTO_HMAC=y
695CONFIG_CRYPTO_NULL=y
696CONFIG_CRYPTO_MD4=y
697CONFIG_CRYPTO_MD5=y
698CONFIG_CRYPTO_SHA1=y
699CONFIG_CRYPTO_SHA256=y
700CONFIG_CRYPTO_SHA512=y
701CONFIG_CRYPTO_WP512=y
702CONFIG_CRYPTO_TGR192=y
703CONFIG_CRYPTO_DES=y
704CONFIG_CRYPTO_BLOWFISH=y
705CONFIG_CRYPTO_TWOFISH=y
706CONFIG_CRYPTO_SERPENT=y
707CONFIG_CRYPTO_AES=y
708CONFIG_CRYPTO_CAST5=y
709CONFIG_CRYPTO_CAST6=y
710CONFIG_CRYPTO_TEA=y
711CONFIG_CRYPTO_ARC4=y
712CONFIG_CRYPTO_KHAZAD=y
713CONFIG_CRYPTO_ANUBIS=y
714CONFIG_CRYPTO_DEFLATE=y
715CONFIG_CRYPTO_MICHAEL_MIC=y
716CONFIG_CRYPTO_CRC32C=y
717# CONFIG_CRYPTO_TEST is not set
718 694
719# 695#
720# Hardware crypto devices 696# Hardware crypto devices
@@ -724,8 +700,6 @@ CONFIG_CRYPTO_CRC32C=y
724# Library routines 700# Library routines
725# 701#
726# CONFIG_CRC_CCITT is not set 702# CONFIG_CRC_CCITT is not set
727CONFIG_CRC16=y 703# CONFIG_CRC16 is not set
728CONFIG_CRC32=y 704CONFIG_CRC32=y
729CONFIG_LIBCRC32C=y 705# CONFIG_LIBCRC32C is not set
730CONFIG_ZLIB_INFLATE=y
731CONFIG_ZLIB_DEFLATE=y
diff --git a/arch/mips/ddb5xxx/ddb5074/setup.c b/arch/mips/ddb5xxx/ddb5074/setup.c
index 11535be265b9..91456b068c2e 100644
--- a/arch/mips/ddb5xxx/ddb5074/setup.c
+++ b/arch/mips/ddb5xxx/ddb5074/setup.c
@@ -14,6 +14,7 @@
14#include <linux/ide.h> 14#include <linux/ide.h>
15#include <linux/ioport.h> 15#include <linux/ioport.h>
16#include <linux/irq.h> 16#include <linux/irq.h>
17#include <linux/pm.h>
17 18
18#include <asm/addrspace.h> 19#include <asm/addrspace.h>
19#include <asm/bcache.h> 20#include <asm/bcache.h>
@@ -95,7 +96,7 @@ void __init plat_setup(void)
95 96
96 _machine_restart = ddb_machine_restart; 97 _machine_restart = ddb_machine_restart;
97 _machine_halt = ddb_machine_halt; 98 _machine_halt = ddb_machine_halt;
98 _machine_power_off = ddb_machine_power_off; 99 pm_power_off = ddb_machine_power_off;
99 100
100 ddb_out32(DDB_BAR0, 0); 101 ddb_out32(DDB_BAR0, 0);
101 102
diff --git a/arch/mips/ddb5xxx/ddb5476/setup.c b/arch/mips/ddb5xxx/ddb5476/setup.c
index f4e480a74edf..c902adef5942 100644
--- a/arch/mips/ddb5xxx/ddb5476/setup.c
+++ b/arch/mips/ddb5xxx/ddb5476/setup.c
@@ -11,6 +11,7 @@
11#include <linux/types.h> 11#include <linux/types.h>
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/pci.h> 13#include <linux/pci.h>
14#include <linux/pm.h>
14 15
15#include <asm/addrspace.h> 16#include <asm/addrspace.h>
16#include <asm/bcache.h> 17#include <asm/bcache.h>
@@ -133,7 +134,7 @@ void __init plat_setup(void)
133 134
134 _machine_restart = ddb_machine_restart; 135 _machine_restart = ddb_machine_restart;
135 _machine_halt = ddb_machine_halt; 136 _machine_halt = ddb_machine_halt;
136 _machine_power_off = ddb_machine_power_off; 137 pm_power_off = ddb_machine_power_off;
137 138
138 /* request io port/mem resources */ 139 /* request io port/mem resources */
139 if (request_resource(&ioport_resource, &ddb5476_ioport.dma1) || 140 if (request_resource(&ioport_resource, &ddb5476_ioport.dma1) ||
diff --git a/arch/mips/ddb5xxx/ddb5477/setup.c b/arch/mips/ddb5xxx/ddb5477/setup.c
index 81163353c4a8..2f566034cc44 100644
--- a/arch/mips/ddb5xxx/ddb5477/setup.c
+++ b/arch/mips/ddb5xxx/ddb5477/setup.c
@@ -26,6 +26,7 @@
26#include <linux/major.h> 26#include <linux/major.h>
27#include <linux/kdev_t.h> 27#include <linux/kdev_t.h>
28#include <linux/root_dev.h> 28#include <linux/root_dev.h>
29#include <linux/pm.h>
29 30
30#include <asm/cpu.h> 31#include <asm/cpu.h>
31#include <asm/bootinfo.h> 32#include <asm/bootinfo.h>
@@ -182,7 +183,7 @@ void __init plat_setup(void)
182 183
183 _machine_restart = ddb_machine_restart; 184 _machine_restart = ddb_machine_restart;
184 _machine_halt = ddb_machine_halt; 185 _machine_halt = ddb_machine_halt;
185 _machine_power_off = ddb_machine_power_off; 186 pm_power_off = ddb_machine_power_off;
186 187
187 /* setup resource limits */ 188 /* setup resource limits */
188 ioport_resource.end = DDB_PCI0_IO_SIZE + DDB_PCI1_IO_SIZE - 1; 189 ioport_resource.end = DDB_PCI0_IO_SIZE + DDB_PCI1_IO_SIZE - 1;
diff --git a/arch/mips/dec/setup.c b/arch/mips/dec/setup.c
index 9ef54fe1feaa..7c1ca8f6330e 100644
--- a/arch/mips/dec/setup.c
+++ b/arch/mips/dec/setup.c
@@ -17,6 +17,7 @@
17#include <linux/sched.h> 17#include <linux/sched.h>
18#include <linux/spinlock.h> 18#include <linux/spinlock.h>
19#include <linux/types.h> 19#include <linux/types.h>
20#include <linux/pm.h>
20 21
21#include <asm/bootinfo.h> 22#include <asm/bootinfo.h>
22#include <asm/cpu.h> 23#include <asm/cpu.h>
@@ -158,7 +159,7 @@ void __init plat_setup(void)
158 159
159 _machine_restart = dec_machine_restart; 160 _machine_restart = dec_machine_restart;
160 _machine_halt = dec_machine_halt; 161 _machine_halt = dec_machine_halt;
161 _machine_power_off = dec_machine_power_off; 162 pm_power_off = dec_machine_power_off;
162 163
163 ioport_resource.start = ~0UL; 164 ioport_resource.start = ~0UL;
164 ioport_resource.end = 0UL; 165 ioport_resource.end = 0UL;
diff --git a/arch/mips/gt64120/ev64120/setup.c b/arch/mips/gt64120/ev64120/setup.c
index 98b5a96cc039..6d859d1e7a2d 100644
--- a/arch/mips/gt64120/ev64120/setup.c
+++ b/arch/mips/gt64120/ev64120/setup.c
@@ -34,6 +34,8 @@
34#include <linux/interrupt.h> 34#include <linux/interrupt.h>
35#include <linux/pci.h> 35#include <linux/pci.h>
36#include <linux/timex.h> 36#include <linux/timex.h>
37#include <linux/pm.h>
38
37#include <asm/bootinfo.h> 39#include <asm/bootinfo.h>
38#include <asm/page.h> 40#include <asm/page.h>
39#include <asm/io.h> 41#include <asm/io.h>
@@ -73,7 +75,7 @@ void __init plat_setup(void)
73{ 75{
74 _machine_restart = galileo_machine_restart; 76 _machine_restart = galileo_machine_restart;
75 _machine_halt = galileo_machine_halt; 77 _machine_halt = galileo_machine_halt;
76 _machine_power_off = galileo_machine_power_off; 78 pm_power_off = galileo_machine_power_off;
77 79
78 board_time_init = gt64120_time_init; 80 board_time_init = gt64120_time_init;
79 set_io_port_base(KSEG1); 81 set_io_port_base(KSEG1);
diff --git a/arch/mips/gt64120/momenco_ocelot/setup.c b/arch/mips/gt64120/momenco_ocelot/setup.c
index 0d07c33112d0..20b65d3d2151 100644
--- a/arch/mips/gt64120/momenco_ocelot/setup.c
+++ b/arch/mips/gt64120/momenco_ocelot/setup.c
@@ -4,7 +4,7 @@
4 * BRIEF MODULE DESCRIPTION 4 * BRIEF MODULE DESCRIPTION
5 * Momentum Computer Ocelot (CP7000) - board dependent boot routines 5 * Momentum Computer Ocelot (CP7000) - board dependent boot routines
6 * 6 *
7 * Copyright (C) 1996, 1997, 2001 Ralf Baechle 7 * Copyright (C) 1996, 1997, 2001, 06 Ralf Baechle (ralf@linux-mips.org)
8 * Copyright (C) 2000 RidgeRun, Inc. 8 * Copyright (C) 2000 RidgeRun, Inc.
9 * Copyright (C) 2001 Red Hat, Inc. 9 * Copyright (C) 2001 Red Hat, Inc.
10 * Copyright (C) 2002 Momentum Computer 10 * Copyright (C) 2002 Momentum Computer
@@ -47,6 +47,8 @@
47#include <linux/pci.h> 47#include <linux/pci.h>
48#include <linux/timex.h> 48#include <linux/timex.h>
49#include <linux/vmalloc.h> 49#include <linux/vmalloc.h>
50#include <linux/pm.h>
51
50#include <asm/time.h> 52#include <asm/time.h>
51#include <asm/bootinfo.h> 53#include <asm/bootinfo.h>
52#include <asm/page.h> 54#include <asm/page.h>
@@ -159,7 +161,7 @@ void __init plat_setup(void)
159 161
160 _machine_restart = momenco_ocelot_restart; 162 _machine_restart = momenco_ocelot_restart;
161 _machine_halt = momenco_ocelot_halt; 163 _machine_halt = momenco_ocelot_halt;
162 _machine_power_off = momenco_ocelot_power_off; 164 pm_power_off = momenco_ocelot_power_off;
163 165
164 /* 166 /*
165 * initrd_start = (ulong)ocelot_initrd_start; 167 * initrd_start = (ulong)ocelot_initrd_start;
diff --git a/arch/mips/ite-boards/generic/it8172_setup.c b/arch/mips/ite-boards/generic/it8172_setup.c
index 062429dd7ca0..fc73c8d69df7 100644
--- a/arch/mips/ite-boards/generic/it8172_setup.c
+++ b/arch/mips/ite-boards/generic/it8172_setup.c
@@ -34,6 +34,7 @@
34#include <linux/major.h> 34#include <linux/major.h>
35#include <linux/kdev_t.h> 35#include <linux/kdev_t.h>
36#include <linux/root_dev.h> 36#include <linux/root_dev.h>
37#include <linux/pm.h>
37 38
38#include <asm/cpu.h> 39#include <asm/cpu.h>
39#include <asm/time.h> 40#include <asm/time.h>
@@ -125,7 +126,7 @@ void __init plat_setup(void)
125 126
126 _machine_restart = it8172_restart; 127 _machine_restart = it8172_restart;
127 _machine_halt = it8172_halt; 128 _machine_halt = it8172_halt;
128 _machine_power_off = it8172_power_off; 129 pm_power_off = it8172_power_off;
129 130
130 /* 131 /*
131 * IO/MEM resources. 132 * IO/MEM resources.
diff --git a/arch/mips/jazz/setup.c b/arch/mips/jazz/setup.c
index 044df9d4ab7c..4036dc434551 100644
--- a/arch/mips/jazz/setup.c
+++ b/arch/mips/jazz/setup.c
@@ -19,6 +19,8 @@
19#include <linux/console.h> 19#include <linux/console.h>
20#include <linux/fb.h> 20#include <linux/fb.h>
21#include <linux/ide.h> 21#include <linux/ide.h>
22#include <linux/pm.h>
23
22#include <asm/bootinfo.h> 24#include <asm/bootinfo.h>
23#include <asm/irq.h> 25#include <asm/irq.h>
24#include <asm/jazz.h> 26#include <asm/jazz.h>
@@ -79,7 +81,7 @@ void __init plat_setup(void)
79 81
80 _machine_restart = jazz_machine_restart; 82 _machine_restart = jazz_machine_restart;
81 _machine_halt = jazz_machine_halt; 83 _machine_halt = jazz_machine_halt;
82 _machine_power_off = jazz_machine_power_off; 84 pm_power_off = jazz_machine_power_off;
83 85
84#warning "Somebody should check if screen_info is ok for Jazz." 86#warning "Somebody should check if screen_info is ok for Jazz."
85 87
diff --git a/arch/mips/jmr3927/rbhma3100/setup.c b/arch/mips/jmr3927/rbhma3100/setup.c
index 4763957df8fc..9359cc413494 100644
--- a/arch/mips/jmr3927/rbhma3100/setup.c
+++ b/arch/mips/jmr3927/rbhma3100/setup.c
@@ -44,6 +44,7 @@
44#include <linux/ioport.h> 44#include <linux/ioport.h>
45#include <linux/param.h> /* for HZ */ 45#include <linux/param.h> /* for HZ */
46#include <linux/delay.h> 46#include <linux/delay.h>
47#include <linux/pm.h>
47#ifdef CONFIG_SERIAL_TXX9 48#ifdef CONFIG_SERIAL_TXX9
48#include <linux/tty.h> 49#include <linux/tty.h>
49#include <linux/serial.h> 50#include <linux/serial.h>
@@ -211,7 +212,7 @@ void __init plat_setup(void)
211 212
212 _machine_restart = jmr3927_machine_restart; 213 _machine_restart = jmr3927_machine_restart;
213 _machine_halt = jmr3927_machine_halt; 214 _machine_halt = jmr3927_machine_halt;
214 _machine_power_off = jmr3927_machine_power_off; 215 pm_power_off = jmr3927_machine_power_off;
215 216
216 /* 217 /*
217 * IO/MEM resources. 218 * IO/MEM resources.
diff --git a/arch/mips/kernel/binfmt_elfn32.c b/arch/mips/kernel/binfmt_elfn32.c
index d8e2674a1543..4a9f1ecefaf2 100644
--- a/arch/mips/kernel/binfmt_elfn32.c
+++ b/arch/mips/kernel/binfmt_elfn32.c
@@ -103,8 +103,9 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
103 * one divide. 103 * one divide.
104 */ 104 */
105 u64 nsec = (u64)jiffies * TICK_NSEC; 105 u64 nsec = (u64)jiffies * TICK_NSEC;
106 value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_usec); 106 long rem;
107 value->tv_usec /= NSEC_PER_USEC; 107 value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &rem);
108 value->tv_usec = rem / NSEC_PER_USEC;
108} 109}
109 110
110#define ELF_CORE_EFLAGS EF_MIPS_ABI2 111#define ELF_CORE_EFLAGS EF_MIPS_ABI2
diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c
index cec5f327e360..e31813779895 100644
--- a/arch/mips/kernel/binfmt_elfo32.c
+++ b/arch/mips/kernel/binfmt_elfo32.c
@@ -105,8 +105,9 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
105 * one divide. 105 * one divide.
106 */ 106 */
107 u64 nsec = (u64)jiffies * TICK_NSEC; 107 u64 nsec = (u64)jiffies * TICK_NSEC;
108 value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_usec); 108 long rem;
109 value->tv_usec /= NSEC_PER_USEC; 109 value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &rem);
110 value->tv_usec = rem / NSEC_PER_USEC;
110} 111}
111 112
112#undef ELF_CORE_COPY_REGS 113#undef ELF_CORE_COPY_REGS
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index fac48ad27b34..292f8b243a5e 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -2,8 +2,8 @@
2 * Processor capabilities determination functions. 2 * Processor capabilities determination functions.
3 * 3 *
4 * Copyright (C) xxxx the Anonymous 4 * Copyright (C) xxxx the Anonymous
5 * Copyright (C) 1994 - 2006 Ralf Baechle
5 * Copyright (C) 2003, 2004 Maciej W. Rozycki 6 * Copyright (C) 2003, 2004 Maciej W. Rozycki
6 * Copyright (C) 1994 - 2003 Ralf Baechle
7 * Copyright (C) 2001, 2004 MIPS Inc. 7 * Copyright (C) 2001, 2004 MIPS Inc.
8 * 8 *
9 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
@@ -641,10 +641,9 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c)
641 switch (c->processor_id & 0xff00) { 641 switch (c->processor_id & 0xff00) {
642 case PRID_IMP_SB1: 642 case PRID_IMP_SB1:
643 c->cputype = CPU_SB1; 643 c->cputype = CPU_SB1;
644#ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
645 /* FPU in pass1 is known to have issues. */ 644 /* FPU in pass1 is known to have issues. */
646 c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR); 645 if ((c->processor_id & 0xff) < 0x20)
647#endif 646 c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR);
648 break; 647 break;
649 case PRID_IMP_SB1A: 648 case PRID_IMP_SB1A:
650 c->cputype = CPU_SB1A; 649 c->cputype = CPU_SB1A;
diff --git a/arch/mips/kernel/gdb-stub.c b/arch/mips/kernel/gdb-stub.c
index 96d18c43dca0..d4f88e0af24c 100644
--- a/arch/mips/kernel/gdb-stub.c
+++ b/arch/mips/kernel/gdb-stub.c
@@ -178,7 +178,7 @@ int kgdb_enabled;
178 */ 178 */
179static DEFINE_SPINLOCK(kgdb_lock); 179static DEFINE_SPINLOCK(kgdb_lock);
180static raw_spinlock_t kgdb_cpulock[NR_CPUS] = { 180static raw_spinlock_t kgdb_cpulock[NR_CPUS] = {
181 [0 ... NR_CPUS-1] = __RAW_SPIN_LOCK_UNLOCKED; 181 [0 ... NR_CPUS-1] = __RAW_SPIN_LOCK_UNLOCKED,
182}; 182};
183 183
184/* 184/*
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S
index aa18a8b7b380..13f22d1d0e8b 100644
--- a/arch/mips/kernel/genex.S
+++ b/arch/mips/kernel/genex.S
@@ -233,11 +233,11 @@ NESTED(except_vec_nmi, 0, sp)
233NESTED(nmi_handler, PT_SIZE, sp) 233NESTED(nmi_handler, PT_SIZE, sp)
234 .set push 234 .set push
235 .set noat 235 .set noat
236 .set mips3
237 SAVE_ALL 236 SAVE_ALL
238 move a0, sp 237 move a0, sp
239 jal nmi_exception_handler 238 jal nmi_exception_handler
240 RESTORE_ALL 239 RESTORE_ALL
240 .set mips3
241 eret 241 eret
242 .set pop 242 .set pop
243 END(nmi_handler) 243 END(nmi_handler)
diff --git a/arch/mips/kernel/irq-mv6434x.c b/arch/mips/kernel/irq-mv6434x.c
index 0ac067f45cf5..0613f1f36b1b 100644
--- a/arch/mips/kernel/irq-mv6434x.c
+++ b/arch/mips/kernel/irq-mv6434x.c
@@ -11,12 +11,14 @@
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/interrupt.h> 12#include <linux/interrupt.h>
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <asm/ptrace.h>
15#include <linux/sched.h>
16#include <linux/kernel_stat.h> 14#include <linux/kernel_stat.h>
15#include <linux/mv643xx.h>
16#include <linux/sched.h>
17
18#include <asm/ptrace.h>
17#include <asm/io.h> 19#include <asm/io.h>
18#include <asm/irq.h> 20#include <asm/irq.h>
19#include <linux/mv643xx.h> 21#include <asm/marvell.h>
20 22
21static unsigned int irq_base; 23static unsigned int irq_base;
22 24
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c
index 60353f5acc48..e00e5f6e7fdd 100644
--- a/arch/mips/kernel/linux32.c
+++ b/arch/mips/kernel/linux32.c
@@ -161,60 +161,6 @@ out:
161 return error; 161 return error;
162} 162}
163 163
164struct dirent32 {
165 unsigned int d_ino;
166 unsigned int d_off;
167 unsigned short d_reclen;
168 char d_name[NAME_MAX + 1];
169};
170
171static void
172xlate_dirent(void *dirent64, void *dirent32, long n)
173{
174 long off;
175 struct dirent *dirp;
176 struct dirent32 *dirp32;
177
178 off = 0;
179 while (off < n) {
180 dirp = (struct dirent *)(dirent64 + off);
181 dirp32 = (struct dirent32 *)(dirent32 + off);
182 off += dirp->d_reclen;
183 dirp32->d_ino = dirp->d_ino;
184 dirp32->d_off = (unsigned int)dirp->d_off;
185 dirp32->d_reclen = dirp->d_reclen;
186 strncpy(dirp32->d_name, dirp->d_name, dirp->d_reclen - ((3 * 4) + 2));
187 }
188 return;
189}
190
191asmlinkage long
192sys32_getdents(unsigned int fd, void * dirent32, unsigned int count)
193{
194 long n;
195 void *dirent64;
196
197 dirent64 = (void *)((unsigned long)(dirent32 + (sizeof(long) - 1)) & ~(sizeof(long) - 1));
198 if ((n = sys_getdents(fd, dirent64, count - (dirent64 - dirent32))) < 0)
199 return(n);
200 xlate_dirent(dirent64, dirent32, n);
201 return(n);
202}
203
204asmlinkage int old_readdir(unsigned int fd, void * dirent, unsigned int count);
205
206asmlinkage int
207sys32_readdir(unsigned int fd, void * dirent32, unsigned int count)
208{
209 int n;
210 struct dirent dirent64;
211
212 if ((n = old_readdir(fd, &dirent64, count)) < 0)
213 return(n);
214 xlate_dirent(&dirent64, dirent32, dirent64.d_reclen);
215 return(n);
216}
217
218asmlinkage int 164asmlinkage int
219sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, int options) 165sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, int options)
220{ 166{
@@ -230,6 +176,9 @@ sysn32_waitid(int which, compat_pid_t pid,
230 long ret; 176 long ret;
231 mm_segment_t old_fs = get_fs(); 177 mm_segment_t old_fs = get_fs();
232 178
179 if (!access_ok(VERIFY_WRITE, uinfo, sizeof(*uinfo)))
180 return -EFAULT;
181
233 set_fs (KERNEL_DS); 182 set_fs (KERNEL_DS);
234 ret = sys_waitid(which, pid, uinfo, options, 183 ret = sys_waitid(which, pid, uinfo, options,
235 uru ? (struct rusage __user *) &ru : NULL); 184 uru ? (struct rusage __user *) &ru : NULL);
@@ -1450,25 +1399,6 @@ sys32_timer_create(u32 clock, struct sigevent32 __user *se32, timer_t __user *ti
1450 return sys_timer_create(clock, p, timer_id); 1399 return sys_timer_create(clock, p, timer_id);
1451} 1400}
1452 1401
1453asmlinkage long
1454sysn32_rt_sigtimedwait(const sigset_t __user *uthese,
1455 siginfo_t __user *uinfo,
1456 const struct compat_timespec __user *uts32,
1457 size_t sigsetsize)
1458{
1459 struct timespec __user *uts = NULL;
1460
1461 if (uts32) {
1462 struct timespec ts;
1463 uts = compat_alloc_user_space(sizeof(struct timespec));
1464 if (get_user(ts.tv_sec, &uts32->tv_sec) ||
1465 get_user(ts.tv_nsec, &uts32->tv_nsec) ||
1466 copy_to_user (uts, &ts, sizeof (ts)))
1467 return -EFAULT;
1468 }
1469 return sys_rt_sigtimedwait(uthese, uinfo, uts, sigsetsize);
1470}
1471
1472save_static_function(sys32_clone); 1402save_static_function(sys32_clone);
1473__attribute_used__ noinline static int 1403__attribute_used__ noinline static int
1474_sys32_clone(nabi_no_regargs struct pt_regs regs) 1404_sys32_clone(nabi_no_regargs struct pt_regs regs)
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index fa98f10d0132..092679c2dca9 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -4,6 +4,7 @@
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1994 - 1999, 2000 by Ralf Baechle and others. 6 * Copyright (C) 1994 - 1999, 2000 by Ralf Baechle and others.
7 * Copyright (C) 2005, 2006 by Ralf Baechle (ralf@linux-mips.org)
7 * Copyright (C) 1999, 2000 Silicon Graphics, Inc. 8 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
8 * Copyright (C) 2004 Thiemo Seufer 9 * Copyright (C) 2004 Thiemo Seufer
9 */ 10 */
@@ -24,6 +25,7 @@
24#include <linux/a.out.h> 25#include <linux/a.out.h>
25#include <linux/init.h> 26#include <linux/init.h>
26#include <linux/completion.h> 27#include <linux/completion.h>
28#include <linux/kallsyms.h>
27 29
28#include <asm/abi.h> 30#include <asm/abi.h>
29#include <asm/bootinfo.h> 31#include <asm/bootinfo.h>
@@ -58,8 +60,8 @@ ATTRIB_NORET void cpu_idle(void)
58 } 60 }
59} 61}
60 62
61extern int do_signal(sigset_t *oldset, struct pt_regs *regs); 63extern void do_signal(struct pt_regs *regs);
62extern int do_signal32(sigset_t *oldset, struct pt_regs *regs); 64extern void do_signal32(struct pt_regs *regs);
63 65
64/* 66/*
65 * Native o32 and N64 ABI without DSP ASE 67 * Native o32 and N64 ABI without DSP ASE
@@ -271,46 +273,19 @@ long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
271 273
272static struct mips_frame_info { 274static struct mips_frame_info {
273 void *func; 275 void *func;
274 int omit_fp; /* compiled without fno-omit-frame-pointer */ 276 unsigned long func_size;
275 int frame_offset; 277 int frame_size;
276 int pc_offset; 278 int pc_offset;
277} schedule_frame, mfinfo[] = { 279} *schedule_frame, mfinfo[64];
278 { schedule, 0 }, /* must be first */ 280static int mfinfo_num;
279 /* arch/mips/kernel/semaphore.c */
280 { __down, 1 },
281 { __down_interruptible, 1 },
282 /* kernel/sched.c */
283#ifdef CONFIG_PREEMPT
284 { preempt_schedule, 0 },
285#endif
286 { wait_for_completion, 0 },
287 { interruptible_sleep_on, 0 },
288 { interruptible_sleep_on_timeout, 0 },
289 { sleep_on, 0 },
290 { sleep_on_timeout, 0 },
291 { yield, 0 },
292 { io_schedule, 0 },
293 { io_schedule_timeout, 0 },
294#if defined(CONFIG_SMP) && defined(CONFIG_PREEMPT)
295 { __preempt_spin_lock, 0 },
296 { __preempt_write_lock, 0 },
297#endif
298 /* kernel/timer.c */
299 { schedule_timeout, 1 },
300/* { nanosleep_restart, 1 }, */
301 /* lib/rwsem-spinlock.c */
302 { __down_read, 1 },
303 { __down_write, 1 },
304};
305 281
306static int mips_frame_info_initialized;
307static int __init get_frame_info(struct mips_frame_info *info) 282static int __init get_frame_info(struct mips_frame_info *info)
308{ 283{
309 int i; 284 int i;
310 void *func = info->func; 285 void *func = info->func;
311 union mips_instruction *ip = (union mips_instruction *)func; 286 union mips_instruction *ip = (union mips_instruction *)func;
312 info->pc_offset = -1; 287 info->pc_offset = -1;
313 info->frame_offset = info->omit_fp ? 0 : -1; 288 info->frame_size = 0;
314 for (i = 0; i < 128; i++, ip++) { 289 for (i = 0; i < 128; i++, ip++) {
315 /* if jal, jalr, jr, stop. */ 290 /* if jal, jalr, jr, stop. */
316 if (ip->j_format.opcode == jal_op || 291 if (ip->j_format.opcode == jal_op ||
@@ -319,6 +294,23 @@ static int __init get_frame_info(struct mips_frame_info *info)
319 ip->r_format.func == jr_op))) 294 ip->r_format.func == jr_op)))
320 break; 295 break;
321 296
297 if (info->func_size && i >= info->func_size / 4)
298 break;
299 if (
300#ifdef CONFIG_32BIT
301 ip->i_format.opcode == addiu_op &&
302#endif
303#ifdef CONFIG_64BIT
304 ip->i_format.opcode == daddiu_op &&
305#endif
306 ip->i_format.rs == 29 &&
307 ip->i_format.rt == 29) {
308 /* addiu/daddiu sp,sp,-imm */
309 if (info->frame_size)
310 continue;
311 info->frame_size = - ip->i_format.simmediate;
312 }
313
322 if ( 314 if (
323#ifdef CONFIG_32BIT 315#ifdef CONFIG_32BIT
324 ip->i_format.opcode == sw_op && 316 ip->i_format.opcode == sw_op &&
@@ -326,31 +318,20 @@ static int __init get_frame_info(struct mips_frame_info *info)
326#ifdef CONFIG_64BIT 318#ifdef CONFIG_64BIT
327 ip->i_format.opcode == sd_op && 319 ip->i_format.opcode == sd_op &&
328#endif 320#endif
329 ip->i_format.rs == 29) 321 ip->i_format.rs == 29 &&
330 { 322 ip->i_format.rt == 31) {
331 /* sw / sd $ra, offset($sp) */ 323 /* sw / sd $ra, offset($sp) */
332 if (ip->i_format.rt == 31) { 324 if (info->pc_offset != -1)
333 if (info->pc_offset != -1) 325 continue;
334 continue; 326 info->pc_offset =
335 info->pc_offset = 327 ip->i_format.simmediate / sizeof(long);
336 ip->i_format.simmediate / sizeof(long);
337 }
338 /* sw / sd $s8, offset($sp) */
339 if (ip->i_format.rt == 30) {
340//#if 0 /* gcc 3.4 does aggressive optimization... */
341 if (info->frame_offset != -1)
342 continue;
343//#endif
344 info->frame_offset =
345 ip->i_format.simmediate / sizeof(long);
346 }
347 } 328 }
348 } 329 }
349 if (info->pc_offset == -1 || info->frame_offset == -1) { 330 if (info->pc_offset == -1 || info->frame_size == 0) {
350 printk("Can't analyze prologue code at %p\n", func); 331 if (func == schedule)
332 printk("Can't analyze prologue code at %p\n", func);
351 info->pc_offset = -1; 333 info->pc_offset = -1;
352 info->frame_offset = -1; 334 info->frame_size = 0;
353 return -1;
354 } 335 }
355 336
356 return 0; 337 return 0;
@@ -358,25 +339,36 @@ static int __init get_frame_info(struct mips_frame_info *info)
358 339
359static int __init frame_info_init(void) 340static int __init frame_info_init(void)
360{ 341{
361 int i, found; 342 int i;
362 for (i = 0; i < ARRAY_SIZE(mfinfo); i++) 343#ifdef CONFIG_KALLSYMS
363 if (get_frame_info(&mfinfo[i])) 344 char *modname;
364 return -1; 345 char namebuf[KSYM_NAME_LEN + 1];
365 schedule_frame = mfinfo[0]; 346 unsigned long start, size, ofs;
366 /* bubble sort */ 347 extern char __sched_text_start[], __sched_text_end[];
367 do { 348 extern char __lock_text_start[], __lock_text_end[];
368 struct mips_frame_info tmp; 349
369 found = 0; 350 start = (unsigned long)__sched_text_start;
370 for (i = 1; i < ARRAY_SIZE(mfinfo); i++) { 351 for (i = 0; i < ARRAY_SIZE(mfinfo); i++) {
371 if (mfinfo[i-1].func > mfinfo[i].func) { 352 if (start == (unsigned long)schedule)
372 tmp = mfinfo[i]; 353 schedule_frame = &mfinfo[i];
373 mfinfo[i] = mfinfo[i-1]; 354 if (!kallsyms_lookup(start, &size, &ofs, &modname, namebuf))
374 mfinfo[i-1] = tmp; 355 break;
375 found = 1; 356 mfinfo[i].func = (void *)(start + ofs);
376 } 357 mfinfo[i].func_size = size;
377 } 358 start += size - ofs;
378 } while (found); 359 if (start >= (unsigned long)__lock_text_end)
379 mips_frame_info_initialized = 1; 360 break;
361 if (start == (unsigned long)__sched_text_end)
362 start = (unsigned long)__lock_text_start;
363 }
364#else
365 mfinfo[0].func = schedule;
366 schedule_frame = &mfinfo[0];
367#endif
368 for (i = 0; i < ARRAY_SIZE(mfinfo) && mfinfo[i].func; i++)
369 get_frame_info(&mfinfo[i]);
370
371 mfinfo_num = i;
380 return 0; 372 return 0;
381} 373}
382 374
@@ -393,47 +385,52 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
393 if (t->reg31 == (unsigned long) ret_from_fork) 385 if (t->reg31 == (unsigned long) ret_from_fork)
394 return t->reg31; 386 return t->reg31;
395 387
396 if (schedule_frame.pc_offset < 0) 388 if (!schedule_frame || schedule_frame->pc_offset < 0)
397 return 0; 389 return 0;
398 return ((unsigned long *)t->reg29)[schedule_frame.pc_offset]; 390 return ((unsigned long *)t->reg29)[schedule_frame->pc_offset];
399} 391}
400 392
401/* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */ 393/* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */
402unsigned long get_wchan(struct task_struct *p) 394unsigned long get_wchan(struct task_struct *p)
403{ 395{
404 unsigned long stack_page; 396 unsigned long stack_page;
405 unsigned long frame, pc; 397 unsigned long pc;
398#ifdef CONFIG_KALLSYMS
399 unsigned long frame;
400#endif
406 401
407 if (!p || p == current || p->state == TASK_RUNNING) 402 if (!p || p == current || p->state == TASK_RUNNING)
408 return 0; 403 return 0;
409 404
410 stack_page = (unsigned long)task_stack_page(p); 405 stack_page = (unsigned long)task_stack_page(p);
411 if (!stack_page || !mips_frame_info_initialized) 406 if (!stack_page || !mfinfo_num)
412 return 0; 407 return 0;
413 408
414 pc = thread_saved_pc(p); 409 pc = thread_saved_pc(p);
410#ifdef CONFIG_KALLSYMS
415 if (!in_sched_functions(pc)) 411 if (!in_sched_functions(pc))
416 return pc; 412 return pc;
417 413
418 frame = ((unsigned long *)p->thread.reg30)[schedule_frame.frame_offset]; 414 frame = p->thread.reg29 + schedule_frame->frame_size;
419 do { 415 do {
420 int i; 416 int i;
421 417
422 if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32) 418 if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32)
423 return 0; 419 return 0;
424 420
425 for (i = ARRAY_SIZE(mfinfo) - 1; i >= 0; i--) { 421 for (i = mfinfo_num - 1; i >= 0; i--) {
426 if (pc >= (unsigned long) mfinfo[i].func) 422 if (pc >= (unsigned long) mfinfo[i].func)
427 break; 423 break;
428 } 424 }
429 if (i < 0) 425 if (i < 0)
430 break; 426 break;
431 427
432 if (mfinfo[i].omit_fp)
433 break;
434 pc = ((unsigned long *)frame)[mfinfo[i].pc_offset]; 428 pc = ((unsigned long *)frame)[mfinfo[i].pc_offset];
435 frame = ((unsigned long *)frame)[mfinfo[i].frame_offset]; 429 if (!mfinfo[i].frame_size)
430 break;
431 frame += mfinfo[i].frame_size;
436 } while (in_sched_functions(pc)); 432 } while (in_sched_functions(pc));
433#endif
437 434
438 return pc; 435 return pc;
439} 436}
diff --git a/arch/mips/kernel/ptrace32.c b/arch/mips/kernel/ptrace32.c
index 0c82b25d8c6d..0d5cf97af727 100644
--- a/arch/mips/kernel/ptrace32.c
+++ b/arch/mips/kernel/ptrace32.c
@@ -88,7 +88,7 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
88 ret = -EIO; 88 ret = -EIO;
89 if (copied != sizeof(tmp)) 89 if (copied != sizeof(tmp))
90 break; 90 break;
91 ret = put_user(tmp, (unsigned int *) (unsigned long) data); 91 ret = put_user(tmp, (unsigned int __user *) (unsigned long) data);
92 break; 92 break;
93 } 93 }
94 94
@@ -174,8 +174,10 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
174 case FPC_EIR: { /* implementation / version register */ 174 case FPC_EIR: { /* implementation / version register */
175 unsigned int flags; 175 unsigned int flags;
176 176
177 if (!cpu_has_fpu) 177 if (!cpu_has_fpu) {
178 tmp = 0;
178 break; 179 break;
180 }
179 181
180 preempt_disable(); 182 preempt_disable();
181 if (cpu_has_mipsmt) { 183 if (cpu_has_mipsmt) {
@@ -194,15 +196,18 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
194 preempt_enable(); 196 preempt_enable();
195 break; 197 break;
196 } 198 }
197 case DSP_BASE ... DSP_BASE + 5: 199 case DSP_BASE ... DSP_BASE + 5: {
200 dspreg_t *dregs;
201
198 if (!cpu_has_dsp) { 202 if (!cpu_has_dsp) {
199 tmp = 0; 203 tmp = 0;
200 ret = -EIO; 204 ret = -EIO;
201 goto out_tsk; 205 goto out_tsk;
202 } 206 }
203 dspreg_t *dregs = __get_dsp_regs(child); 207 dregs = __get_dsp_regs(child);
204 tmp = (unsigned long) (dregs[addr - DSP_BASE]); 208 tmp = (unsigned long) (dregs[addr - DSP_BASE]);
205 break; 209 break;
210 }
206 case DSP_CONTROL: 211 case DSP_CONTROL:
207 if (!cpu_has_dsp) { 212 if (!cpu_has_dsp) {
208 tmp = 0; 213 tmp = 0;
@@ -216,7 +221,7 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
216 ret = -EIO; 221 ret = -EIO;
217 goto out_tsk; 222 goto out_tsk;
218 } 223 }
219 ret = put_user(tmp, (unsigned *) (unsigned long) data); 224 ret = put_user(tmp, (unsigned __user *) (unsigned long) data);
220 break; 225 break;
221 } 226 }
222 227
@@ -304,15 +309,18 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
304 else 309 else
305 child->thread.fpu.soft.fcr31 = data; 310 child->thread.fpu.soft.fcr31 = data;
306 break; 311 break;
307 case DSP_BASE ... DSP_BASE + 5: 312 case DSP_BASE ... DSP_BASE + 5: {
313 dspreg_t *dregs;
314
308 if (!cpu_has_dsp) { 315 if (!cpu_has_dsp) {
309 ret = -EIO; 316 ret = -EIO;
310 break; 317 break;
311 } 318 }
312 319
313 dspreg_t *dregs = __get_dsp_regs(child); 320 dregs = __get_dsp_regs(child);
314 dregs[addr - DSP_BASE] = data; 321 dregs[addr - DSP_BASE] = data;
315 break; 322 break;
323 }
316 case DSP_CONTROL: 324 case DSP_CONTROL:
317 if (!cpu_has_dsp) { 325 if (!cpu_has_dsp) {
318 ret = -EIO; 326 ret = -EIO;
diff --git a/arch/mips/kernel/reset.c b/arch/mips/kernel/reset.c
index 5e37df3111ad..621037db2290 100644
--- a/arch/mips/kernel/reset.c
+++ b/arch/mips/kernel/reset.c
@@ -3,17 +3,16 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 2001 by Ralf Baechle 6 * Copyright (C) 2001, 06 by Ralf Baechle (ralf@linux-mips.org)
7 * Copyright (C) 2001 MIPS Technologies, Inc. 7 * Copyright (C) 2001 MIPS Technologies, Inc.
8 */ 8 */
9#include <linux/kernel.h> 9#include <linux/kernel.h>
10#include <linux/module.h> 10#include <linux/module.h>
11#include <linux/pm.h>
11#include <linux/types.h> 12#include <linux/types.h>
12#include <linux/reboot.h> 13#include <linux/reboot.h>
13#include <asm/reboot.h>
14 14
15void (*pm_power_off)(void); 15#include <asm/reboot.h>
16EXPORT_SYMBOL(pm_power_off);
17 16
18/* 17/*
19 * Urgs ... Too many MIPS machines to handle this in a generic way. 18 * Urgs ... Too many MIPS machines to handle this in a generic way.
@@ -22,23 +21,22 @@ EXPORT_SYMBOL(pm_power_off);
22 */ 21 */
23void (*_machine_restart)(char *command); 22void (*_machine_restart)(char *command);
24void (*_machine_halt)(void); 23void (*_machine_halt)(void);
25void (*_machine_power_off)(void); 24void (*pm_power_off)(void);
26 25
27void machine_restart(char *command) 26void machine_restart(char *command)
28{ 27{
29 _machine_restart(command); 28 if (_machine_restart)
29 _machine_restart(command);
30} 30}
31 31
32void machine_halt(void) 32void machine_halt(void)
33{ 33{
34 _machine_halt(); 34 if (_machine_halt)
35 _machine_halt();
35} 36}
36 37
37void machine_power_off(void) 38void machine_power_off(void)
38{ 39{
39 if (pm_power_off) 40 if (pm_power_off)
40 pm_power_off(); 41 pm_power_off();
41
42 _machine_power_off();
43} 42}
44
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c
index 1d855112bac2..986a9cf23067 100644
--- a/arch/mips/kernel/rtlx.c
+++ b/arch/mips/kernel/rtlx.c
@@ -1,5 +1,6 @@
1/* 1/*
2 * Copyright (C) 2005 MIPS Technologies, Inc. All rights reserved. 2 * Copyright (C) 2005 MIPS Technologies, Inc. All rights reserved.
3 * Copyright (C) 2005, 06 Ralf Baechle (ralf@linux-mips.org)
3 * 4 *
4 * This program is free software; you can distribute it and/or modify it 5 * This program is free software; you can distribute it and/or modify it
5 * under the terms of the GNU General Public License (Version 2) as 6 * under the terms of the GNU General Public License (Version 2) as
@@ -20,9 +21,12 @@
20#include <linux/module.h> 21#include <linux/module.h>
21#include <linux/fs.h> 22#include <linux/fs.h>
22#include <linux/init.h> 23#include <linux/init.h>
24#include <linux/interrupt.h>
25#include <linux/irq.h>
23#include <linux/poll.h> 26#include <linux/poll.h>
24#include <linux/sched.h> 27#include <linux/sched.h>
25#include <linux/wait.h> 28#include <linux/wait.h>
29
26#include <asm/mipsmtregs.h> 30#include <asm/mipsmtregs.h>
27#include <asm/bitops.h> 31#include <asm/bitops.h>
28#include <asm/cpu.h> 32#include <asm/cpu.h>
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
index a42e0e8caa7b..2f2dc54b2e26 100644
--- a/arch/mips/kernel/scall32-o32.S
+++ b/arch/mips/kernel/scall32-o32.S
@@ -617,6 +617,23 @@ einval: li v0, -EINVAL
617 sys sys_inotify_init 0 617 sys sys_inotify_init 0
618 sys sys_inotify_add_watch 3 /* 4285 */ 618 sys sys_inotify_add_watch 3 /* 4285 */
619 sys sys_inotify_rm_watch 2 619 sys sys_inotify_rm_watch 2
620 sys sys_migrate_pages 4
621 sys sys_openat 4
622 sys sys_mkdirat 3
623 sys sys_mknodat 4 /* 4290 */
624 sys sys_fchownat 5
625 sys sys_futimesat 3
626 sys sys_fstatat64 4
627 sys sys_unlinkat 3
628 sys sys_renameat 4 /* 4295 */
629 sys sys_linkat 5
630 sys sys_symlinkat 3
631 sys sys_readlinkat 4
632 sys sys_fchmodat 3
633 sys sys_faccessat 3 /* 4300 */
634 sys sys_pselect6 6
635 sys sys_ppoll 5
636 sys sys_unshare 1
620 .endm 637 .endm
621 638
622 /* We pre-compute the number of _instruction_ bytes needed to 639 /* We pre-compute the number of _instruction_ bytes needed to
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
index 47bfbd416709..98bf25df56f3 100644
--- a/arch/mips/kernel/scall64-64.S
+++ b/arch/mips/kernel/scall64-64.S
@@ -443,3 +443,20 @@ sys_call_table:
443 PTR sys_inotify_init 443 PTR sys_inotify_init
444 PTR sys_inotify_add_watch 444 PTR sys_inotify_add_watch
445 PTR sys_inotify_rm_watch /* 5245 */ 445 PTR sys_inotify_rm_watch /* 5245 */
446 PTR sys_migrate_pages
447 PTR sys_openat
448 PTR sys_mkdirat
449 PTR sys_mknodat
450 PTR sys_fchownat /* 5250 */
451 PTR sys_futimesat
452 PTR sys_newfstatat
453 PTR sys_unlinkat
454 PTR sys_renameat
455 PTR sys_linkat /* 5255 */
456 PTR sys_symlinkat
457 PTR sys_readlinkat
458 PTR sys_fchmodat
459 PTR sys_faccessat
460 PTR sys_pselect6 /* 5260 */
461 PTR sys_ppoll
462 PTR sys_unshare
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index b465ced1758f..02c8267e45e7 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -195,7 +195,7 @@ EXPORT(sysn32_call_table)
195 PTR sys_fdatasync 195 PTR sys_fdatasync
196 PTR sys_truncate 196 PTR sys_truncate
197 PTR sys_ftruncate /* 6075 */ 197 PTR sys_ftruncate /* 6075 */
198 PTR sys32_getdents 198 PTR compat_sys_getdents
199 PTR sys_getcwd 199 PTR sys_getcwd
200 PTR sys_chdir 200 PTR sys_chdir
201 PTR sys_fchdir 201 PTR sys_fchdir
@@ -245,9 +245,9 @@ EXPORT(sysn32_call_table)
245 PTR sys_capget 245 PTR sys_capget
246 PTR sys_capset 246 PTR sys_capset
247 PTR sys32_rt_sigpending /* 6125 */ 247 PTR sys32_rt_sigpending /* 6125 */
248 PTR sysn32_rt_sigtimedwait 248 PTR compat_sys_rt_sigtimedwait
249 PTR sys_rt_sigqueueinfo 249 PTR sys_rt_sigqueueinfo
250 PTR sys32_rt_sigsuspend 250 PTR sysn32_rt_sigsuspend
251 PTR sys32_sigaltstack 251 PTR sys32_sigaltstack
252 PTR compat_sys_utime /* 6130 */ 252 PTR compat_sys_utime /* 6130 */
253 PTR sys_mknod 253 PTR sys_mknod
@@ -369,3 +369,20 @@ EXPORT(sysn32_call_table)
369 PTR sys_inotify_init 369 PTR sys_inotify_init
370 PTR sys_inotify_add_watch 370 PTR sys_inotify_add_watch
371 PTR sys_inotify_rm_watch 371 PTR sys_inotify_rm_watch
372 PTR sys_migrate_pages /* 6250 */
373 PTR sys_openat
374 PTR sys_mkdirat
375 PTR sys_mknodat
376 PTR sys_fchownat
377 PTR sys_futimesat /* 6255 */
378 PTR sys_newfstatat
379 PTR sys_unlinkat
380 PTR sys_renameat
381 PTR sys_linkat
382 PTR sys_symlinkat /* 6260 */
383 PTR sys_readlinkat
384 PTR sys_fchmodat
385 PTR sys_faccessat
386 PTR sys_pselect6
387 PTR sys_ppoll /* 6265 */
388 PTR sys_unshare
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index 3d338ca7eeeb..797e0d874889 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -293,7 +293,7 @@ sys_call_table:
293 PTR sys_uselib 293 PTR sys_uselib
294 PTR sys_swapon 294 PTR sys_swapon
295 PTR sys_reboot 295 PTR sys_reboot
296 PTR sys32_readdir 296 PTR compat_sys_old_readdir
297 PTR old_mmap /* 4090 */ 297 PTR old_mmap /* 4090 */
298 PTR sys_munmap 298 PTR sys_munmap
299 PTR sys_truncate 299 PTR sys_truncate
@@ -345,7 +345,7 @@ sys_call_table:
345 PTR sys_setfsuid 345 PTR sys_setfsuid
346 PTR sys_setfsgid 346 PTR sys_setfsgid
347 PTR sys32_llseek /* 4140 */ 347 PTR sys32_llseek /* 4140 */
348 PTR sys32_getdents 348 PTR compat_sys_getdents
349 PTR compat_sys_select 349 PTR compat_sys_select
350 PTR sys_flock 350 PTR sys_flock
351 PTR sys_msync 351 PTR sys_msync
@@ -491,4 +491,21 @@ sys_call_table:
491 PTR sys_inotify_init 491 PTR sys_inotify_init
492 PTR sys_inotify_add_watch /* 4285 */ 492 PTR sys_inotify_add_watch /* 4285 */
493 PTR sys_inotify_rm_watch 493 PTR sys_inotify_rm_watch
494 PTR sys_migrate_pages
495 PTR compat_sys_openat
496 PTR sys_mkdirat
497 PTR sys_mknodat /* 4290 */
498 PTR sys_fchownat
499 PTR compat_sys_futimesat
500 PTR compat_sys_newfstatat
501 PTR sys_unlinkat
502 PTR sys_renameat /* 4295 */
503 PTR sys_linkat
504 PTR sys_symlinkat
505 PTR sys_readlinkat
506 PTR sys_fchmodat
507 PTR sys_faccessat /* 4300 */
508 PTR sys_pselect6
509 PTR sys_ppoll
510 PTR sys_unshare
494 .size sys_call_table,.-sys_call_table 511 .size sys_call_table,.-sys_call_table
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index d86affa21278..d9293c558e41 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -540,6 +540,9 @@ void __init setup_arch(char **cmdline_p)
540 sparse_init(); 540 sparse_init();
541 paging_init(); 541 paging_init();
542 resource_init(); 542 resource_init();
543#ifdef CONFIG_SMP
544 plat_smp_setup();
545#endif
543} 546}
544 547
545int __init fpu_disable(char *s) 548int __init fpu_disable(char *s)
diff --git a/arch/mips/kernel/signal-common.h b/arch/mips/kernel/signal-common.h
index 0f66ae5838b9..36bfc2588aa3 100644
--- a/arch/mips/kernel/signal-common.h
+++ b/arch/mips/kernel/signal-common.h
@@ -11,7 +11,7 @@
11#include <linux/config.h> 11#include <linux/config.h>
12 12
13static inline int 13static inline int
14setup_sigcontext(struct pt_regs *regs, struct sigcontext *sc) 14setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
15{ 15{
16 int err = 0; 16 int err = 0;
17 17
@@ -82,7 +82,7 @@ out:
82} 82}
83 83
84static inline int 84static inline int
85restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc) 85restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
86{ 86{
87 unsigned int used_math; 87 unsigned int used_math;
88 unsigned long treg; 88 unsigned long treg;
@@ -157,7 +157,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc)
157/* 157/*
158 * Determine which stack to use.. 158 * Determine which stack to use..
159 */ 159 */
160static inline void * 160static inline void __user *
161get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) 161get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size)
162{ 162{
163 unsigned long sp; 163 unsigned long sp;
@@ -176,7 +176,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size)
176 if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0)) 176 if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0))
177 sp = current->sas_ss_sp + current->sas_ss_size; 177 sp = current->sas_ss_sp + current->sas_ss_size;
178 178
179 return (void *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? 32 : ALMASK)); 179 return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? ~(cpu_icache_line_size()-1) : ALMASK));
180} 180}
181 181
182static inline int install_sigtramp(unsigned int __user *tramp, 182static inline int install_sigtramp(unsigned int __user *tramp,
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index 7d1800fe7038..c974cc9b30eb 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -39,8 +39,6 @@
39 39
40#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) 40#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
41 41
42int do_signal(sigset_t *oldset, struct pt_regs *regs);
43
44/* 42/*
45 * Atomically swap in the new signal mask, and wait for a signal. 43 * Atomically swap in the new signal mask, and wait for a signal.
46 */ 44 */
@@ -50,7 +48,7 @@ save_static_function(sys_sigsuspend);
50__attribute_used__ noinline static int 48__attribute_used__ noinline static int
51_sys_sigsuspend(nabi_no_regargs struct pt_regs regs) 49_sys_sigsuspend(nabi_no_regargs struct pt_regs regs)
52{ 50{
53 sigset_t saveset, newset; 51 sigset_t newset;
54 sigset_t __user *uset; 52 sigset_t __user *uset;
55 53
56 uset = (sigset_t __user *) regs.regs[4]; 54 uset = (sigset_t __user *) regs.regs[4];
@@ -59,19 +57,15 @@ _sys_sigsuspend(nabi_no_regargs struct pt_regs regs)
59 sigdelsetmask(&newset, ~_BLOCKABLE); 57 sigdelsetmask(&newset, ~_BLOCKABLE);
60 58
61 spin_lock_irq(&current->sighand->siglock); 59 spin_lock_irq(&current->sighand->siglock);
62 saveset = current->blocked; 60 current->saved_sigmask = current->blocked;
63 current->blocked = newset; 61 current->blocked = newset;
64 recalc_sigpending(); 62 recalc_sigpending();
65 spin_unlock_irq(&current->sighand->siglock); 63 spin_unlock_irq(&current->sighand->siglock);
66 64
67 regs.regs[2] = EINTR; 65 current->state = TASK_INTERRUPTIBLE;
68 regs.regs[7] = 1; 66 schedule();
69 while (1) { 67 set_thread_flag(TIF_RESTORE_SIGMASK);
70 current->state = TASK_INTERRUPTIBLE; 68 return -ERESTARTNOHAND;
71 schedule();
72 if (do_signal(&saveset, &regs))
73 return -EINTR;
74 }
75} 69}
76#endif 70#endif
77 71
@@ -79,7 +73,7 @@ save_static_function(sys_rt_sigsuspend);
79__attribute_used__ noinline static int 73__attribute_used__ noinline static int
80_sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) 74_sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
81{ 75{
82 sigset_t saveset, newset; 76 sigset_t newset;
83 sigset_t __user *unewset; 77 sigset_t __user *unewset;
84 size_t sigsetsize; 78 size_t sigsetsize;
85 79
@@ -94,19 +88,15 @@ _sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
94 sigdelsetmask(&newset, ~_BLOCKABLE); 88 sigdelsetmask(&newset, ~_BLOCKABLE);
95 89
96 spin_lock_irq(&current->sighand->siglock); 90 spin_lock_irq(&current->sighand->siglock);
97 saveset = current->blocked; 91 current->saved_sigmask = current->blocked;
98 current->blocked = newset; 92 current->blocked = newset;
99 recalc_sigpending(); 93 recalc_sigpending();
100 spin_unlock_irq(&current->sighand->siglock); 94 spin_unlock_irq(&current->sighand->siglock);
101 95
102 regs.regs[2] = EINTR; 96 current->state = TASK_INTERRUPTIBLE;
103 regs.regs[7] = 1; 97 schedule();
104 while (1) { 98 set_thread_flag(TIF_RESTORE_SIGMASK);
105 current->state = TASK_INTERRUPTIBLE; 99 return -ERESTARTNOHAND;
106 schedule();
107 if (do_signal(&saveset, &regs))
108 return -EINTR;
109 }
110} 100}
111 101
112#ifdef CONFIG_TRAD_SIGNALS 102#ifdef CONFIG_TRAD_SIGNALS
@@ -199,10 +189,10 @@ save_static_function(sys_sigreturn);
199__attribute_used__ noinline static void 189__attribute_used__ noinline static void
200_sys_sigreturn(nabi_no_regargs struct pt_regs regs) 190_sys_sigreturn(nabi_no_regargs struct pt_regs regs)
201{ 191{
202 struct sigframe *frame; 192 struct sigframe __user *frame;
203 sigset_t blocked; 193 sigset_t blocked;
204 194
205 frame = (struct sigframe *) regs.regs[29]; 195 frame = (struct sigframe __user *) regs.regs[29];
206 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 196 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
207 goto badframe; 197 goto badframe;
208 if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked))) 198 if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked)))
@@ -236,11 +226,11 @@ save_static_function(sys_rt_sigreturn);
236__attribute_used__ noinline static void 226__attribute_used__ noinline static void
237_sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs) 227_sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
238{ 228{
239 struct rt_sigframe *frame; 229 struct rt_sigframe __user *frame;
240 sigset_t set; 230 sigset_t set;
241 stack_t st; 231 stack_t st;
242 232
243 frame = (struct rt_sigframe *) regs.regs[29]; 233 frame = (struct rt_sigframe __user *) regs.regs[29];
244 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 234 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
245 goto badframe; 235 goto badframe;
246 if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) 236 if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
@@ -259,7 +249,7 @@ _sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
259 goto badframe; 249 goto badframe;
260 /* It is more difficult to avoid calling this function than to 250 /* It is more difficult to avoid calling this function than to
261 call it and ignore errors. */ 251 call it and ignore errors. */
262 do_sigaltstack(&st, NULL, regs.regs[29]); 252 do_sigaltstack((stack_t __user *)&st, NULL, regs.regs[29]);
263 253
264 /* 254 /*
265 * Don't let your children do this ... 255 * Don't let your children do this ...
@@ -279,7 +269,7 @@ badframe:
279int setup_frame(struct k_sigaction * ka, struct pt_regs *regs, 269int setup_frame(struct k_sigaction * ka, struct pt_regs *regs,
280 int signr, sigset_t *set) 270 int signr, sigset_t *set)
281{ 271{
282 struct sigframe *frame; 272 struct sigframe __user *frame;
283 int err = 0; 273 int err = 0;
284 274
285 frame = get_sigframe(ka, regs, sizeof(*frame)); 275 frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -315,18 +305,18 @@ int setup_frame(struct k_sigaction * ka, struct pt_regs *regs,
315 current->comm, current->pid, 305 current->comm, current->pid,
316 frame, regs->cp0_epc, frame->regs[31]); 306 frame, regs->cp0_epc, frame->regs[31]);
317#endif 307#endif
318 return 1; 308 return 0;
319 309
320give_sigsegv: 310give_sigsegv:
321 force_sigsegv(signr, current); 311 force_sigsegv(signr, current);
322 return 0; 312 return -EFAULT;
323} 313}
324#endif 314#endif
325 315
326int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs, 316int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs,
327 int signr, sigset_t *set, siginfo_t *info) 317 int signr, sigset_t *set, siginfo_t *info)
328{ 318{
329 struct rt_sigframe *frame; 319 struct rt_sigframe __user *frame;
330 int err = 0; 320 int err = 0;
331 321
332 frame = get_sigframe(ka, regs, sizeof(*frame)); 322 frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -340,7 +330,7 @@ int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs,
340 330
341 /* Create the ucontext. */ 331 /* Create the ucontext. */
342 err |= __put_user(0, &frame->rs_uc.uc_flags); 332 err |= __put_user(0, &frame->rs_uc.uc_flags);
343 err |= __put_user(0, &frame->rs_uc.uc_link); 333 err |= __put_user(NULL, &frame->rs_uc.uc_link);
344 err |= __put_user((void *)current->sas_ss_sp, 334 err |= __put_user((void *)current->sas_ss_sp,
345 &frame->rs_uc.uc_stack.ss_sp); 335 &frame->rs_uc.uc_stack.ss_sp);
346 err |= __put_user(sas_ss_flags(regs->regs[29]), 336 err |= __put_user(sas_ss_flags(regs->regs[29]),
@@ -375,11 +365,11 @@ int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs,
375 current->comm, current->pid, 365 current->comm, current->pid,
376 frame, regs->cp0_epc, regs->regs[31]); 366 frame, regs->cp0_epc, regs->regs[31]);
377#endif 367#endif
378 return 1; 368 return 0;
379 369
380give_sigsegv: 370give_sigsegv:
381 force_sigsegv(signr, current); 371 force_sigsegv(signr, current);
382 return 0; 372 return -EFAULT;
383} 373}
384 374
385static inline int handle_signal(unsigned long sig, siginfo_t *info, 375static inline int handle_signal(unsigned long sig, siginfo_t *info,
@@ -393,7 +383,7 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info,
393 regs->regs[2] = EINTR; 383 regs->regs[2] = EINTR;
394 break; 384 break;
395 case ERESTARTSYS: 385 case ERESTARTSYS:
396 if(!(ka->sa.sa_flags & SA_RESTART)) { 386 if (!(ka->sa.sa_flags & SA_RESTART)) {
397 regs->regs[2] = EINTR; 387 regs->regs[2] = EINTR;
398 break; 388 break;
399 } 389 }
@@ -420,9 +410,10 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info,
420 return ret; 410 return ret;
421} 411}
422 412
423int do_signal(sigset_t *oldset, struct pt_regs *regs) 413void do_signal(struct pt_regs *regs)
424{ 414{
425 struct k_sigaction ka; 415 struct k_sigaction ka;
416 sigset_t *oldset;
426 siginfo_t info; 417 siginfo_t info;
427 int signr; 418 int signr;
428 419
@@ -432,17 +423,31 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
432 * if so. 423 * if so.
433 */ 424 */
434 if (!user_mode(regs)) 425 if (!user_mode(regs))
435 return 1; 426 return;
436 427
437 if (try_to_freeze()) 428 if (try_to_freeze())
438 goto no_signal; 429 goto no_signal;
439 430
440 if (!oldset) 431 if (test_thread_flag(TIF_RESTORE_SIGMASK))
432 oldset = &current->saved_sigmask;
433 else
441 oldset = &current->blocked; 434 oldset = &current->blocked;
442 435
436
443 signr = get_signal_to_deliver(&info, &ka, regs, NULL); 437 signr = get_signal_to_deliver(&info, &ka, regs, NULL);
444 if (signr > 0) 438 if (signr > 0) {
445 return handle_signal(signr, &info, &ka, oldset, regs); 439 /* Whee! Actually deliver the signal. */
440 if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
441 /*
442 * A signal was successfully delivered; the saved
443 * sigmask will have been stored in the signal frame,
444 * and will be restored by sigreturn, so we can simply
445 * clear the TIF_RESTORE_SIGMASK flag.
446 */
447 if (test_thread_flag(TIF_RESTORE_SIGMASK))
448 clear_thread_flag(TIF_RESTORE_SIGMASK);
449 }
450 }
446 451
447no_signal: 452no_signal:
448 /* 453 /*
@@ -463,18 +468,25 @@ no_signal:
463 regs->cp0_epc -= 4; 468 regs->cp0_epc -= 4;
464 } 469 }
465 } 470 }
466 return 0; 471
472 /*
473 * If there's no signal to deliver, we just put the saved sigmask
474 * back
475 */
476 if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
477 clear_thread_flag(TIF_RESTORE_SIGMASK);
478 sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
479 }
467} 480}
468 481
469/* 482/*
470 * notification of userspace execution resumption 483 * notification of userspace execution resumption
471 * - triggered by current->work.notify_resume 484 * - triggered by the TIF_WORK_MASK flags
472 */ 485 */
473asmlinkage void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, 486asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused,
474 __u32 thread_info_flags) 487 __u32 thread_info_flags)
475{ 488{
476 /* deal with pending signal delivery */ 489 /* deal with pending signal delivery */
477 if (thread_info_flags & _TIF_SIGPENDING) { 490 if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
478 current->thread.abi->do_signal(oldset, regs); 491 current->thread.abi->do_signal(regs);
479 }
480} 492}
diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c
index 98b185bbc947..237cd8a2cd32 100644
--- a/arch/mips/kernel/signal32.c
+++ b/arch/mips/kernel/signal32.c
@@ -4,7 +4,7 @@
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1991, 1992 Linus Torvalds 6 * Copyright (C) 1991, 1992 Linus Torvalds
7 * Copyright (C) 1994 - 2000 Ralf Baechle 7 * Copyright (C) 1994 - 2000, 2006 Ralf Baechle
8 * Copyright (C) 1999, 2000 Silicon Graphics, Inc. 8 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
9 */ 9 */
10#include <linux/cache.h> 10#include <linux/cache.h>
@@ -106,8 +106,6 @@ typedef struct compat_siginfo {
106 106
107#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) 107#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
108 108
109extern int do_signal32(sigset_t *oldset, struct pt_regs *regs);
110
111/* 32-bit compatibility types */ 109/* 32-bit compatibility types */
112 110
113#define _NSIG_BPW32 32 111#define _NSIG_BPW32 32
@@ -144,7 +142,7 @@ struct ucontext32 {
144extern void __put_sigset_unknown_nsig(void); 142extern void __put_sigset_unknown_nsig(void);
145extern void __get_sigset_unknown_nsig(void); 143extern void __get_sigset_unknown_nsig(void);
146 144
147static inline int put_sigset(const sigset_t *kbuf, compat_sigset_t *ubuf) 145static inline int put_sigset(const sigset_t *kbuf, compat_sigset_t __user *ubuf)
148{ 146{
149 int err = 0; 147 int err = 0;
150 148
@@ -198,7 +196,7 @@ __attribute_used__ noinline static int
198_sys32_sigsuspend(nabi_no_regargs struct pt_regs regs) 196_sys32_sigsuspend(nabi_no_regargs struct pt_regs regs)
199{ 197{
200 compat_sigset_t *uset; 198 compat_sigset_t *uset;
201 sigset_t newset, saveset; 199 sigset_t newset;
202 200
203 uset = (compat_sigset_t *) regs.regs[4]; 201 uset = (compat_sigset_t *) regs.regs[4];
204 if (get_sigset(&newset, uset)) 202 if (get_sigset(&newset, uset))
@@ -206,19 +204,15 @@ _sys32_sigsuspend(nabi_no_regargs struct pt_regs regs)
206 sigdelsetmask(&newset, ~_BLOCKABLE); 204 sigdelsetmask(&newset, ~_BLOCKABLE);
207 205
208 spin_lock_irq(&current->sighand->siglock); 206 spin_lock_irq(&current->sighand->siglock);
209 saveset = current->blocked; 207 current->saved_sigmask = current->blocked;
210 current->blocked = newset; 208 current->blocked = newset;
211 recalc_sigpending(); 209 recalc_sigpending();
212 spin_unlock_irq(&current->sighand->siglock); 210 spin_unlock_irq(&current->sighand->siglock);
213 211
214 regs.regs[2] = EINTR; 212 current->state = TASK_INTERRUPTIBLE;
215 regs.regs[7] = 1; 213 schedule();
216 while (1) { 214 set_thread_flag(TIF_RESTORE_SIGMASK);
217 current->state = TASK_INTERRUPTIBLE; 215 return -ERESTARTNOHAND;
218 schedule();
219 if (do_signal32(&saveset, &regs))
220 return -EINTR;
221 }
222} 216}
223 217
224save_static_function(sys32_rt_sigsuspend); 218save_static_function(sys32_rt_sigsuspend);
@@ -226,8 +220,8 @@ __attribute_used__ noinline static int
226_sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) 220_sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
227{ 221{
228 compat_sigset_t *uset; 222 compat_sigset_t *uset;
229 sigset_t newset, saveset; 223 sigset_t newset;
230 size_t sigsetsize; 224 size_t sigsetsize;
231 225
232 /* XXX Don't preclude handling different sized sigset_t's. */ 226 /* XXX Don't preclude handling different sized sigset_t's. */
233 sigsetsize = regs.regs[5]; 227 sigsetsize = regs.regs[5];
@@ -240,19 +234,15 @@ _sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
240 sigdelsetmask(&newset, ~_BLOCKABLE); 234 sigdelsetmask(&newset, ~_BLOCKABLE);
241 235
242 spin_lock_irq(&current->sighand->siglock); 236 spin_lock_irq(&current->sighand->siglock);
243 saveset = current->blocked; 237 current->saved_sigmask = current->blocked;
244 current->blocked = newset; 238 current->blocked = newset;
245 recalc_sigpending(); 239 recalc_sigpending();
246 spin_unlock_irq(&current->sighand->siglock); 240 spin_unlock_irq(&current->sighand->siglock);
247 241
248 regs.regs[2] = EINTR; 242 current->state = TASK_INTERRUPTIBLE;
249 regs.regs[7] = 1; 243 schedule();
250 while (1) { 244 set_thread_flag(TIF_RESTORE_SIGMASK);
251 current->state = TASK_INTERRUPTIBLE; 245 return -ERESTARTNOHAND;
252 schedule();
253 if (do_signal32(&saveset, &regs))
254 return -EINTR;
255 }
256} 246}
257 247
258asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act, 248asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act,
@@ -269,7 +259,7 @@ asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act,
269 if (!access_ok(VERIFY_READ, act, sizeof(*act))) 259 if (!access_ok(VERIFY_READ, act, sizeof(*act)))
270 return -EFAULT; 260 return -EFAULT;
271 err |= __get_user(handler, &act->sa_handler); 261 err |= __get_user(handler, &act->sa_handler);
272 new_ka.sa.sa_handler = (void*)(s64)handler; 262 new_ka.sa.sa_handler = (void __user *)(s64)handler;
273 err |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); 263 err |= __get_user(new_ka.sa.sa_flags, &act->sa_flags);
274 err |= __get_user(mask, &act->sa_mask.sig[0]); 264 err |= __get_user(mask, &act->sa_mask.sig[0]);
275 if (err) 265 if (err)
@@ -299,8 +289,8 @@ asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act,
299 289
300asmlinkage int sys32_sigaltstack(nabi_no_regargs struct pt_regs regs) 290asmlinkage int sys32_sigaltstack(nabi_no_regargs struct pt_regs regs)
301{ 291{
302 const stack32_t *uss = (const stack32_t *) regs.regs[4]; 292 const stack32_t __user *uss = (const stack32_t __user *) regs.regs[4];
303 stack32_t *uoss = (stack32_t *) regs.regs[5]; 293 stack32_t __user *uoss = (stack32_t __user *) regs.regs[5];
304 unsigned long usp = regs.regs[29]; 294 unsigned long usp = regs.regs[29];
305 stack_t kss, koss; 295 stack_t kss, koss;
306 int ret, err = 0; 296 int ret, err = 0;
@@ -319,7 +309,8 @@ asmlinkage int sys32_sigaltstack(nabi_no_regargs struct pt_regs regs)
319 } 309 }
320 310
321 set_fs (KERNEL_DS); 311 set_fs (KERNEL_DS);
322 ret = do_sigaltstack(uss ? &kss : NULL , uoss ? &koss : NULL, usp); 312 ret = do_sigaltstack(uss ? (stack_t __user *)&kss : NULL,
313 uoss ? (stack_t __user *)&koss : NULL, usp);
323 set_fs (old_fs); 314 set_fs (old_fs);
324 315
325 if (!ret && uoss) { 316 if (!ret && uoss) {
@@ -335,7 +326,7 @@ asmlinkage int sys32_sigaltstack(nabi_no_regargs struct pt_regs regs)
335 return ret; 326 return ret;
336} 327}
337 328
338static int restore_sigcontext32(struct pt_regs *regs, struct sigcontext32 *sc) 329static int restore_sigcontext32(struct pt_regs *regs, struct sigcontext32 __user *sc)
339{ 330{
340 u32 used_math; 331 u32 used_math;
341 int err = 0; 332 int err = 0;
@@ -420,7 +411,7 @@ struct rt_sigframe32 {
420#endif 411#endif
421}; 412};
422 413
423int copy_siginfo_to_user32(compat_siginfo_t *to, siginfo_t *from) 414int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
424{ 415{
425 int err; 416 int err;
426 417
@@ -455,7 +446,7 @@ int copy_siginfo_to_user32(compat_siginfo_t *to, siginfo_t *from)
455 err |= __put_user(from->si_uid, &to->si_uid); 446 err |= __put_user(from->si_uid, &to->si_uid);
456 break; 447 break;
457 case __SI_FAULT >> 16: 448 case __SI_FAULT >> 16:
458 err |= __put_user((long)from->si_addr, &to->si_addr); 449 err |= __put_user((unsigned long)from->si_addr, &to->si_addr);
459 break; 450 break;
460 case __SI_POLL >> 16: 451 case __SI_POLL >> 16:
461 err |= __put_user(from->si_band, &to->si_band); 452 err |= __put_user(from->si_band, &to->si_band);
@@ -476,10 +467,10 @@ save_static_function(sys32_sigreturn);
476__attribute_used__ noinline static void 467__attribute_used__ noinline static void
477_sys32_sigreturn(nabi_no_regargs struct pt_regs regs) 468_sys32_sigreturn(nabi_no_regargs struct pt_regs regs)
478{ 469{
479 struct sigframe *frame; 470 struct sigframe __user *frame;
480 sigset_t blocked; 471 sigset_t blocked;
481 472
482 frame = (struct sigframe *) regs.regs[29]; 473 frame = (struct sigframe __user *) regs.regs[29];
483 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 474 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
484 goto badframe; 475 goto badframe;
485 if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked))) 476 if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked)))
@@ -512,13 +503,13 @@ save_static_function(sys32_rt_sigreturn);
512__attribute_used__ noinline static void 503__attribute_used__ noinline static void
513_sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) 504_sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
514{ 505{
515 struct rt_sigframe32 *frame; 506 struct rt_sigframe32 __user *frame;
516 mm_segment_t old_fs; 507 mm_segment_t old_fs;
517 sigset_t set; 508 sigset_t set;
518 stack_t st; 509 stack_t st;
519 s32 sp; 510 s32 sp;
520 511
521 frame = (struct rt_sigframe32 *) regs.regs[29]; 512 frame = (struct rt_sigframe32 __user *) regs.regs[29];
522 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 513 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
523 goto badframe; 514 goto badframe;
524 if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) 515 if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
@@ -536,7 +527,7 @@ _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
536 /* The ucontext contains a stack32_t, so we must convert! */ 527 /* The ucontext contains a stack32_t, so we must convert! */
537 if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp)) 528 if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
538 goto badframe; 529 goto badframe;
539 st.ss_size = (long) sp; 530 st.ss_sp = (void *)(long) sp;
540 if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size)) 531 if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
541 goto badframe; 532 goto badframe;
542 if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags)) 533 if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
@@ -546,7 +537,7 @@ _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
546 call it and ignore errors. */ 537 call it and ignore errors. */
547 old_fs = get_fs(); 538 old_fs = get_fs();
548 set_fs (KERNEL_DS); 539 set_fs (KERNEL_DS);
549 do_sigaltstack(&st, NULL, regs.regs[29]); 540 do_sigaltstack((stack_t __user *)&st, NULL, regs.regs[29]);
550 set_fs (old_fs); 541 set_fs (old_fs);
551 542
552 /* 543 /*
@@ -564,7 +555,7 @@ badframe:
564} 555}
565 556
566static inline int setup_sigcontext32(struct pt_regs *regs, 557static inline int setup_sigcontext32(struct pt_regs *regs,
567 struct sigcontext32 *sc) 558 struct sigcontext32 __user *sc)
568{ 559{
569 int err = 0; 560 int err = 0;
570 561
@@ -623,8 +614,9 @@ out:
623/* 614/*
624 * Determine which stack to use.. 615 * Determine which stack to use..
625 */ 616 */
626static inline void *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, 617static inline void __user *get_sigframe(struct k_sigaction *ka,
627 size_t frame_size) 618 struct pt_regs *regs,
619 size_t frame_size)
628{ 620{
629 unsigned long sp; 621 unsigned long sp;
630 622
@@ -642,13 +634,13 @@ static inline void *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
642 if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0)) 634 if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0))
643 sp = current->sas_ss_sp + current->sas_ss_size; 635 sp = current->sas_ss_sp + current->sas_ss_size;
644 636
645 return (void *)((sp - frame_size) & ALMASK); 637 return (void __user *)((sp - frame_size) & ALMASK);
646} 638}
647 639
648int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs, 640int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
649 int signr, sigset_t *set) 641 int signr, sigset_t *set)
650{ 642{
651 struct sigframe *frame; 643 struct sigframe __user *frame;
652 int err = 0; 644 int err = 0;
653 645
654 frame = get_sigframe(ka, regs, sizeof(*frame)); 646 frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -692,17 +684,17 @@ int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
692 current->comm, current->pid, 684 current->comm, current->pid,
693 frame, regs->cp0_epc, frame->sf_code); 685 frame, regs->cp0_epc, frame->sf_code);
694#endif 686#endif
695 return 1; 687 return 0;
696 688
697give_sigsegv: 689give_sigsegv:
698 force_sigsegv(signr, current); 690 force_sigsegv(signr, current);
699 return 0; 691 return -EFAULT;
700} 692}
701 693
702int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs, 694int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
703 int signr, sigset_t *set, siginfo_t *info) 695 int signr, sigset_t *set, siginfo_t *info)
704{ 696{
705 struct rt_sigframe32 *frame; 697 struct rt_sigframe32 __user *frame;
706 int err = 0; 698 int err = 0;
707 s32 sp; 699 s32 sp;
708 700
@@ -763,11 +755,11 @@ int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
763 current->comm, current->pid, 755 current->comm, current->pid,
764 frame, regs->cp0_epc, frame->rs_code); 756 frame, regs->cp0_epc, frame->rs_code);
765#endif 757#endif
766 return 1; 758 return 0;
767 759
768give_sigsegv: 760give_sigsegv:
769 force_sigsegv(signr, current); 761 force_sigsegv(signr, current);
770 return 0; 762 return -EFAULT;
771} 763}
772 764
773static inline int handle_signal(unsigned long sig, siginfo_t *info, 765static inline int handle_signal(unsigned long sig, siginfo_t *info,
@@ -781,7 +773,7 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info,
781 regs->regs[2] = EINTR; 773 regs->regs[2] = EINTR;
782 break; 774 break;
783 case ERESTARTSYS: 775 case ERESTARTSYS:
784 if(!(ka->sa.sa_flags & SA_RESTART)) { 776 if (!(ka->sa.sa_flags & SA_RESTART)) {
785 regs->regs[2] = EINTR; 777 regs->regs[2] = EINTR;
786 break; 778 break;
787 } 779 }
@@ -808,9 +800,10 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info,
808 return ret; 800 return ret;
809} 801}
810 802
811int do_signal32(sigset_t *oldset, struct pt_regs *regs) 803void do_signal32(struct pt_regs *regs)
812{ 804{
813 struct k_sigaction ka; 805 struct k_sigaction ka;
806 sigset_t *oldset;
814 siginfo_t info; 807 siginfo_t info;
815 int signr; 808 int signr;
816 809
@@ -820,17 +813,30 @@ int do_signal32(sigset_t *oldset, struct pt_regs *regs)
820 * if so. 813 * if so.
821 */ 814 */
822 if (!user_mode(regs)) 815 if (!user_mode(regs))
823 return 1; 816 return;
824 817
825 if (try_to_freeze()) 818 if (try_to_freeze())
826 goto no_signal; 819 goto no_signal;
827 820
828 if (!oldset) 821 if (test_thread_flag(TIF_RESTORE_SIGMASK))
822 oldset = &current->saved_sigmask;
823 else
829 oldset = &current->blocked; 824 oldset = &current->blocked;
830 825
831 signr = get_signal_to_deliver(&info, &ka, regs, NULL); 826 signr = get_signal_to_deliver(&info, &ka, regs, NULL);
832 if (signr > 0) 827 if (signr > 0) {
833 return handle_signal(signr, &info, &ka, oldset, regs); 828 /* Whee! Actually deliver the signal. */
829 if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
830 /*
831 * A signal was successfully delivered; the saved
832 * sigmask will have been stored in the signal frame,
833 * and will be restored by sigreturn, so we can simply
834 * clear the TIF_RESTORE_SIGMASK flag.
835 */
836 if (test_thread_flag(TIF_RESTORE_SIGMASK))
837 clear_thread_flag(TIF_RESTORE_SIGMASK);
838 }
839 }
834 840
835no_signal: 841no_signal:
836 /* 842 /*
@@ -851,11 +857,19 @@ no_signal:
851 regs->cp0_epc -= 4; 857 regs->cp0_epc -= 4;
852 } 858 }
853 } 859 }
854 return 0; 860
861 /*
862 * If there's no signal to deliver, we just put the saved sigmask
863 * back
864 */
865 if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
866 clear_thread_flag(TIF_RESTORE_SIGMASK);
867 sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
868 }
855} 869}
856 870
857asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 *act, 871asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 *act,
858 struct sigaction32 *oact, 872 struct sigaction32 __user *oact,
859 unsigned int sigsetsize) 873 unsigned int sigsetsize)
860{ 874{
861 struct k_sigaction new_sa, old_sa; 875 struct k_sigaction new_sa, old_sa;
@@ -872,7 +886,7 @@ asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 *act,
872 if (!access_ok(VERIFY_READ, act, sizeof(*act))) 886 if (!access_ok(VERIFY_READ, act, sizeof(*act)))
873 return -EFAULT; 887 return -EFAULT;
874 err |= __get_user(handler, &act->sa_handler); 888 err |= __get_user(handler, &act->sa_handler);
875 new_sa.sa.sa_handler = (void*)(s64)handler; 889 new_sa.sa.sa_handler = (void __user *)(s64)handler;
876 err |= __get_user(new_sa.sa.sa_flags, &act->sa_flags); 890 err |= __get_user(new_sa.sa.sa_flags, &act->sa_flags);
877 err |= get_sigset(&new_sa.sa.sa_mask, &act->sa_mask); 891 err |= get_sigset(&new_sa.sa.sa_mask, &act->sa_mask);
878 if (err) 892 if (err)
@@ -899,7 +913,7 @@ out:
899} 913}
900 914
901asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t *set, 915asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t *set,
902 compat_sigset_t *oset, unsigned int sigsetsize) 916 compat_sigset_t __user *oset, unsigned int sigsetsize)
903{ 917{
904 sigset_t old_set, new_set; 918 sigset_t old_set, new_set;
905 int ret; 919 int ret;
@@ -909,8 +923,9 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t *set,
909 return -EFAULT; 923 return -EFAULT;
910 924
911 set_fs (KERNEL_DS); 925 set_fs (KERNEL_DS);
912 ret = sys_rt_sigprocmask(how, set ? &new_set : NULL, 926 ret = sys_rt_sigprocmask(how, set ? (sigset_t __user *)&new_set : NULL,
913 oset ? &old_set : NULL, sigsetsize); 927 oset ? (sigset_t __user *)&old_set : NULL,
928 sigsetsize);
914 set_fs (old_fs); 929 set_fs (old_fs);
915 930
916 if (!ret && oset && put_sigset(&old_set, oset)) 931 if (!ret && oset && put_sigset(&old_set, oset))
@@ -919,7 +934,7 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t *set,
919 return ret; 934 return ret;
920} 935}
921 936
922asmlinkage int sys32_rt_sigpending(compat_sigset_t *uset, 937asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset,
923 unsigned int sigsetsize) 938 unsigned int sigsetsize)
924{ 939{
925 int ret; 940 int ret;
@@ -927,7 +942,7 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t *uset,
927 mm_segment_t old_fs = get_fs(); 942 mm_segment_t old_fs = get_fs();
928 943
929 set_fs (KERNEL_DS); 944 set_fs (KERNEL_DS);
930 ret = sys_rt_sigpending(&set, sigsetsize); 945 ret = sys_rt_sigpending((sigset_t __user *)&set, sigsetsize);
931 set_fs (old_fs); 946 set_fs (old_fs);
932 947
933 if (!ret && put_sigset(&set, uset)) 948 if (!ret && put_sigset(&set, uset))
@@ -936,7 +951,7 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t *uset,
936 return ret; 951 return ret;
937} 952}
938 953
939asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t *uinfo) 954asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo)
940{ 955{
941 siginfo_t info; 956 siginfo_t info;
942 int ret; 957 int ret;
@@ -946,7 +961,7 @@ asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t *uinfo)
946 copy_from_user (info._sifields._pad, uinfo->_sifields._pad, SI_PAD_SIZE)) 961 copy_from_user (info._sifields._pad, uinfo->_sifields._pad, SI_PAD_SIZE))
947 return -EFAULT; 962 return -EFAULT;
948 set_fs (KERNEL_DS); 963 set_fs (KERNEL_DS);
949 ret = sys_rt_sigqueueinfo(pid, sig, &info); 964 ret = sys_rt_sigqueueinfo(pid, sig, (siginfo_t __user *)&info);
950 set_fs (old_fs); 965 set_fs (old_fs);
951 return ret; 966 return ret;
952} 967}
diff --git a/arch/mips/kernel/signal_n32.c b/arch/mips/kernel/signal_n32.c
index ec61b2670ba6..3e168c08a3a8 100644
--- a/arch/mips/kernel/signal_n32.c
+++ b/arch/mips/kernel/signal_n32.c
@@ -48,6 +48,8 @@
48#define __NR_N32_rt_sigreturn 6211 48#define __NR_N32_rt_sigreturn 6211
49#define __NR_N32_restart_syscall 6214 49#define __NR_N32_restart_syscall 6214
50 50
51#define DEBUG_SIG 0
52
51#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) 53#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
52 54
53/* IRIX compatible stack_t */ 55/* IRIX compatible stack_t */
@@ -79,16 +81,49 @@ struct rt_sigframe_n32 {
79#endif 81#endif
80}; 82};
81 83
84extern void sigset_from_compat (sigset_t *set, compat_sigset_t *compat);
85
86save_static_function(sysn32_rt_sigsuspend);
87__attribute_used__ noinline static int
88_sysn32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
89{
90 compat_sigset_t __user *unewset, uset;
91 size_t sigsetsize;
92 sigset_t newset;
93
94 /* XXX Don't preclude handling different sized sigset_t's. */
95 sigsetsize = regs.regs[5];
96 if (sigsetsize != sizeof(sigset_t))
97 return -EINVAL;
98
99 unewset = (compat_sigset_t __user *) regs.regs[4];
100 if (copy_from_user(&uset, unewset, sizeof(uset)))
101 return -EFAULT;
102 sigset_from_compat (&newset, &uset);
103 sigdelsetmask(&newset, ~_BLOCKABLE);
104
105 spin_lock_irq(&current->sighand->siglock);
106 current->saved_sigmask = current->blocked;
107 current->blocked = newset;
108 recalc_sigpending();
109 spin_unlock_irq(&current->sighand->siglock);
110
111 current->state = TASK_INTERRUPTIBLE;
112 schedule();
113 set_thread_flag(TIF_RESTORE_SIGMASK);
114 return -ERESTARTNOHAND;
115}
116
82save_static_function(sysn32_rt_sigreturn); 117save_static_function(sysn32_rt_sigreturn);
83__attribute_used__ noinline static void 118__attribute_used__ noinline static void
84_sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) 119_sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
85{ 120{
86 struct rt_sigframe_n32 *frame; 121 struct rt_sigframe_n32 __user *frame;
87 sigset_t set; 122 sigset_t set;
88 stack_t st; 123 stack_t st;
89 s32 sp; 124 s32 sp;
90 125
91 frame = (struct rt_sigframe_n32 *) regs.regs[29]; 126 frame = (struct rt_sigframe_n32 __user *) regs.regs[29];
92 if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) 127 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
93 goto badframe; 128 goto badframe;
94 if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) 129 if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
@@ -106,7 +141,7 @@ _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
106 /* The ucontext contains a stack32_t, so we must convert! */ 141 /* The ucontext contains a stack32_t, so we must convert! */
107 if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp)) 142 if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
108 goto badframe; 143 goto badframe;
109 st.ss_size = (long) sp; 144 st.ss_sp = (void *)(long) sp;
110 if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size)) 145 if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
111 goto badframe; 146 goto badframe;
112 if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags)) 147 if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
@@ -114,7 +149,7 @@ _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
114 149
115 /* It is more difficult to avoid calling this function than to 150 /* It is more difficult to avoid calling this function than to
116 call it and ignore errors. */ 151 call it and ignore errors. */
117 do_sigaltstack(&st, NULL, regs.regs[29]); 152 do_sigaltstack((stack_t __user *)&st, NULL, regs.regs[29]);
118 153
119 /* 154 /*
120 * Don't let your children do this ... 155 * Don't let your children do this ...
@@ -133,7 +168,7 @@ badframe:
133int setup_rt_frame_n32(struct k_sigaction * ka, 168int setup_rt_frame_n32(struct k_sigaction * ka,
134 struct pt_regs *regs, int signr, sigset_t *set, siginfo_t *info) 169 struct pt_regs *regs, int signr, sigset_t *set, siginfo_t *info)
135{ 170{
136 struct rt_sigframe_n32 *frame; 171 struct rt_sigframe_n32 __user *frame;
137 int err = 0; 172 int err = 0;
138 s32 sp; 173 s32 sp;
139 174
@@ -184,9 +219,9 @@ int setup_rt_frame_n32(struct k_sigaction * ka,
184 current->comm, current->pid, 219 current->comm, current->pid,
185 frame, regs->cp0_epc, regs->regs[31]); 220 frame, regs->cp0_epc, regs->regs[31]);
186#endif 221#endif
187 return 1; 222 return 0;
188 223
189give_sigsegv: 224give_sigsegv:
190 force_sigsegv(signr, current); 225 force_sigsegv(signr, current);
191 return 0; 226 return -EFAULT;
192} 227}
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index 25472fcaf715..06ed90752424 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -29,6 +29,7 @@
29#include <linux/timex.h> 29#include <linux/timex.h>
30#include <linux/sched.h> 30#include <linux/sched.h>
31#include <linux/cpumask.h> 31#include <linux/cpumask.h>
32#include <linux/cpu.h>
32 33
33#include <asm/atomic.h> 34#include <asm/atomic.h>
34#include <asm/cpu.h> 35#include <asm/cpu.h>
@@ -235,7 +236,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
235 init_new_context(current, &init_mm); 236 init_new_context(current, &init_mm);
236 current_thread_info()->cpu = 0; 237 current_thread_info()->cpu = 0;
237 smp_tune_scheduling(); 238 smp_tune_scheduling();
238 prom_prepare_cpus(max_cpus); 239 plat_prepare_cpus(max_cpus);
239} 240}
240 241
241/* preload SMP state for boot cpu */ 242/* preload SMP state for boot cpu */
@@ -424,6 +425,25 @@ void flush_tlb_one(unsigned long vaddr)
424 local_flush_tlb_one(vaddr); 425 local_flush_tlb_one(vaddr);
425} 426}
426 427
428static DEFINE_PER_CPU(struct cpu, cpu_devices);
429
430static int __init topology_init(void)
431{
432 int cpu;
433 int ret;
434
435 for_each_cpu(cpu) {
436 ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu, NULL);
437 if (ret)
438 printk(KERN_WARNING "topology_init: register_cpu %d "
439 "failed (%d)\n", cpu, ret);
440 }
441
442 return 0;
443}
444
445subsys_initcall(topology_init);
446
427EXPORT_SYMBOL(flush_tlb_page); 447EXPORT_SYMBOL(flush_tlb_page);
428EXPORT_SYMBOL(flush_tlb_one); 448EXPORT_SYMBOL(flush_tlb_one);
429EXPORT_SYMBOL(cpu_data); 449EXPORT_SYMBOL(cpu_data);
diff --git a/arch/mips/kernel/smp_mt.c b/arch/mips/kernel/smp_mt.c
index 794a1c3de2a4..993b8bf56aaf 100644
--- a/arch/mips/kernel/smp_mt.c
+++ b/arch/mips/kernel/smp_mt.c
@@ -68,6 +68,8 @@ void __init sanitize_tlb_entries(void)
68 68
69 set_c0_mvpcontrol(MVPCONTROL_VPC); 69 set_c0_mvpcontrol(MVPCONTROL_VPC);
70 70
71 back_to_back_c0_hazard();
72
71 /* Disable TLB sharing */ 73 /* Disable TLB sharing */
72 clear_c0_mvpcontrol(MVPCONTROL_STLB); 74 clear_c0_mvpcontrol(MVPCONTROL_STLB);
73 75
@@ -102,35 +104,6 @@ void __init sanitize_tlb_entries(void)
102 clear_c0_mvpcontrol(MVPCONTROL_VPC); 104 clear_c0_mvpcontrol(MVPCONTROL_VPC);
103} 105}
104 106
105#if 0
106/*
107 * Use c0_MVPConf0 to find out how many CPUs are available, setting up
108 * phys_cpu_present_map and the logical/physical mappings.
109 */
110void __init prom_build_cpu_map(void)
111{
112 int i, num, ncpus;
113
114 cpus_clear(phys_cpu_present_map);
115
116 /* assume we boot on cpu 0.... */
117 cpu_set(0, phys_cpu_present_map);
118 __cpu_number_map[0] = 0;
119 __cpu_logical_map[0] = 0;
120
121 if (cpu_has_mipsmt) {
122 ncpus = ((read_c0_mvpconf0() & (MVPCONF0_PVPE)) >> MVPCONF0_PVPE_SHIFT) + 1;
123 for (i=1, num=0; i< NR_CPUS && i<ncpus; i++) {
124 cpu_set(i, phys_cpu_present_map);
125 __cpu_number_map[i] = ++num;
126 __cpu_logical_map[num] = i;
127 }
128
129 printk(KERN_INFO "%i available secondary CPU(s)\n", num);
130 }
131}
132#endif
133
134static void ipi_resched_dispatch (struct pt_regs *regs) 107static void ipi_resched_dispatch (struct pt_regs *regs)
135{ 108{
136 do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs); 109 do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs);
@@ -170,7 +143,7 @@ static struct irqaction irq_call = {
170 * Make sure all CPU's are in a sensible state before we boot any of the 143 * Make sure all CPU's are in a sensible state before we boot any of the
171 * secondarys 144 * secondarys
172 */ 145 */
173void prom_prepare_cpus(unsigned int max_cpus) 146void plat_smp_setup(void)
174{ 147{
175 unsigned long val; 148 unsigned long val;
176 int i, num; 149 int i, num;
@@ -206,11 +179,9 @@ void prom_prepare_cpus(unsigned int max_cpus)
206 write_vpe_c0_vpeconf0(tmp); 179 write_vpe_c0_vpeconf0(tmp);
207 180
208 /* Record this as available CPU */ 181 /* Record this as available CPU */
209 if (i < max_cpus) { 182 cpu_set(i, phys_cpu_present_map);
210 cpu_set(i, phys_cpu_present_map); 183 __cpu_number_map[i] = ++num;
211 __cpu_number_map[i] = ++num; 184 __cpu_logical_map[num] = i;
212 __cpu_logical_map[num] = i;
213 }
214 } 185 }
215 186
216 /* disable multi-threading with TC's */ 187 /* disable multi-threading with TC's */
@@ -222,6 +193,9 @@ void prom_prepare_cpus(unsigned int max_cpus)
222 193
223 /* set config to be the same as vpe0, particularly kseg0 coherency alg */ 194 /* set config to be the same as vpe0, particularly kseg0 coherency alg */
224 write_vpe_c0_config( read_c0_config()); 195 write_vpe_c0_config( read_c0_config());
196
197 /* Propagate Config7 */
198 write_vpe_c0_config7(read_c0_config7());
225 } 199 }
226 200
227 } 201 }
@@ -265,7 +239,10 @@ void prom_prepare_cpus(unsigned int max_cpus)
265 set_vi_handler (MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch); 239 set_vi_handler (MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch);
266 set_vi_handler (MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch); 240 set_vi_handler (MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch);
267 } 241 }
242}
268 243
244void __init plat_prepare_cpus(unsigned int max_cpus)
245{
269 cpu_ipi_resched_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ; 246 cpu_ipi_resched_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ;
270 cpu_ipi_call_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ; 247 cpu_ipi_call_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ;
271 248
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c
index 332358430ff5..1da2eeb3ef9e 100644
--- a/arch/mips/kernel/syscall.c
+++ b/arch/mips/kernel/syscall.c
@@ -212,12 +212,12 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs)
212 int error; 212 int error;
213 char * filename; 213 char * filename;
214 214
215 filename = getname((char *) (long)regs.regs[4]); 215 filename = getname((char __user *) (long)regs.regs[4]);
216 error = PTR_ERR(filename); 216 error = PTR_ERR(filename);
217 if (IS_ERR(filename)) 217 if (IS_ERR(filename))
218 goto out; 218 goto out;
219 error = do_execve(filename, (char **) (long)regs.regs[5], 219 error = do_execve(filename, (char __user *__user *) (long)regs.regs[5],
220 (char **) (long)regs.regs[6], &regs); 220 (char __user *__user *) (long)regs.regs[6], &regs);
221 putname(filename); 221 putname(filename);
222 222
223out: 223out:
@@ -227,7 +227,7 @@ out:
227/* 227/*
228 * Compacrapability ... 228 * Compacrapability ...
229 */ 229 */
230asmlinkage int sys_uname(struct old_utsname * name) 230asmlinkage int sys_uname(struct old_utsname __user * name)
231{ 231{
232 if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) 232 if (name && !copy_to_user(name, &system_utsname, sizeof (*name)))
233 return 0; 233 return 0;
@@ -237,7 +237,7 @@ asmlinkage int sys_uname(struct old_utsname * name)
237/* 237/*
238 * Compacrapability ... 238 * Compacrapability ...
239 */ 239 */
240asmlinkage int sys_olduname(struct oldold_utsname * name) 240asmlinkage int sys_olduname(struct oldold_utsname __user * name)
241{ 241{
242 int error; 242 int error;
243 243
@@ -274,7 +274,7 @@ void sys_set_thread_area(unsigned long addr)
274asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) 274asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
275{ 275{
276 int tmp, len; 276 int tmp, len;
277 char *name; 277 char __user *name;
278 278
279 switch(cmd) { 279 switch(cmd) {
280 case SETNAME: { 280 case SETNAME: {
@@ -283,7 +283,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
283 if (!capable(CAP_SYS_ADMIN)) 283 if (!capable(CAP_SYS_ADMIN))
284 return -EPERM; 284 return -EPERM;
285 285
286 name = (char *) arg1; 286 name = (char __user *) arg1;
287 287
288 len = strncpy_from_user(nodename, name, __NEW_UTS_LEN); 288 len = strncpy_from_user(nodename, name, __NEW_UTS_LEN);
289 if (len < 0) 289 if (len < 0)
@@ -324,7 +324,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
324 * This is really horribly ugly. 324 * This is really horribly ugly.
325 */ 325 */
326asmlinkage int sys_ipc (uint call, int first, int second, 326asmlinkage int sys_ipc (uint call, int first, int second,
327 unsigned long third, void *ptr, long fifth) 327 unsigned long third, void __user *ptr, long fifth)
328{ 328{
329 int version, ret; 329 int version, ret;
330 330
@@ -333,24 +333,25 @@ asmlinkage int sys_ipc (uint call, int first, int second,
333 333
334 switch (call) { 334 switch (call) {
335 case SEMOP: 335 case SEMOP:
336 return sys_semtimedop (first, (struct sembuf *)ptr, second, 336 return sys_semtimedop (first, (struct sembuf __user *)ptr,
337 NULL); 337 second, NULL);
338 case SEMTIMEDOP: 338 case SEMTIMEDOP:
339 return sys_semtimedop (first, (struct sembuf *)ptr, second, 339 return sys_semtimedop (first, (struct sembuf __user *)ptr,
340 (const struct timespec __user *)fifth); 340 second,
341 (const struct timespec __user *)fifth);
341 case SEMGET: 342 case SEMGET:
342 return sys_semget (first, second, third); 343 return sys_semget (first, second, third);
343 case SEMCTL: { 344 case SEMCTL: {
344 union semun fourth; 345 union semun fourth;
345 if (!ptr) 346 if (!ptr)
346 return -EINVAL; 347 return -EINVAL;
347 if (get_user(fourth.__pad, (void **) ptr)) 348 if (get_user(fourth.__pad, (void *__user *) ptr))
348 return -EFAULT; 349 return -EFAULT;
349 return sys_semctl (first, second, third, fourth); 350 return sys_semctl (first, second, third, fourth);
350 } 351 }
351 352
352 case MSGSND: 353 case MSGSND:
353 return sys_msgsnd (first, (struct msgbuf *) ptr, 354 return sys_msgsnd (first, (struct msgbuf __user *) ptr,
354 second, third); 355 second, third);
355 case MSGRCV: 356 case MSGRCV:
356 switch (version) { 357 switch (version) {
@@ -360,7 +361,7 @@ asmlinkage int sys_ipc (uint call, int first, int second,
360 return -EINVAL; 361 return -EINVAL;
361 362
362 if (copy_from_user(&tmp, 363 if (copy_from_user(&tmp,
363 (struct ipc_kludge *) ptr, 364 (struct ipc_kludge __user *) ptr,
364 sizeof (tmp))) 365 sizeof (tmp)))
365 return -EFAULT; 366 return -EFAULT;
366 return sys_msgrcv (first, tmp.msgp, second, 367 return sys_msgrcv (first, tmp.msgp, second,
@@ -368,35 +369,38 @@ asmlinkage int sys_ipc (uint call, int first, int second,
368 } 369 }
369 default: 370 default:
370 return sys_msgrcv (first, 371 return sys_msgrcv (first,
371 (struct msgbuf *) ptr, 372 (struct msgbuf __user *) ptr,
372 second, fifth, third); 373 second, fifth, third);
373 } 374 }
374 case MSGGET: 375 case MSGGET:
375 return sys_msgget ((key_t) first, second); 376 return sys_msgget ((key_t) first, second);
376 case MSGCTL: 377 case MSGCTL:
377 return sys_msgctl (first, second, (struct msqid_ds *) ptr); 378 return sys_msgctl (first, second,
379 (struct msqid_ds __user *) ptr);
378 380
379 case SHMAT: 381 case SHMAT:
380 switch (version) { 382 switch (version) {
381 default: { 383 default: {
382 ulong raddr; 384 ulong raddr;
383 ret = do_shmat (first, (char *) ptr, second, &raddr); 385 ret = do_shmat (first, (char __user *) ptr, second,
386 &raddr);
384 if (ret) 387 if (ret)
385 return ret; 388 return ret;
386 return put_user (raddr, (ulong *) third); 389 return put_user (raddr, (ulong __user *) third);
387 } 390 }
388 case 1: /* iBCS2 emulator entry point */ 391 case 1: /* iBCS2 emulator entry point */
389 if (!segment_eq(get_fs(), get_ds())) 392 if (!segment_eq(get_fs(), get_ds()))
390 return -EINVAL; 393 return -EINVAL;
391 return do_shmat (first, (char *) ptr, second, (ulong *) third); 394 return do_shmat (first, (char __user *) ptr, second,
395 (ulong *) third);
392 } 396 }
393 case SHMDT: 397 case SHMDT:
394 return sys_shmdt ((char *)ptr); 398 return sys_shmdt ((char __user *)ptr);
395 case SHMGET: 399 case SHMGET:
396 return sys_shmget (first, second, third); 400 return sys_shmget (first, second, third);
397 case SHMCTL: 401 case SHMCTL:
398 return sys_shmctl (first, second, 402 return sys_shmctl (first, second,
399 (struct shmid_ds *) ptr); 403 (struct shmid_ds __user *) ptr);
400 default: 404 default:
401 return -ENOSYS; 405 return -ENOSYS;
402 } 406 }
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c
index 7050b4ffffcd..51273b7297a7 100644
--- a/arch/mips/kernel/time.c
+++ b/arch/mips/kernel/time.c
@@ -163,7 +163,7 @@ void do_gettimeofday(struct timeval *tv)
163 unsigned long seq; 163 unsigned long seq;
164 unsigned long lost; 164 unsigned long lost;
165 unsigned long usec, sec; 165 unsigned long usec, sec;
166 unsigned long max_ntp_tick = tick_usec - tickadj; 166 unsigned long max_ntp_tick;
167 167
168 do { 168 do {
169 seq = read_seqbegin(&xtime_lock); 169 seq = read_seqbegin(&xtime_lock);
@@ -178,12 +178,13 @@ void do_gettimeofday(struct timeval *tv)
178 * Better to lose some accuracy than have time go backwards.. 178 * Better to lose some accuracy than have time go backwards..
179 */ 179 */
180 if (unlikely(time_adjust < 0)) { 180 if (unlikely(time_adjust < 0)) {
181 max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj;
181 usec = min(usec, max_ntp_tick); 182 usec = min(usec, max_ntp_tick);
182 183
183 if (lost) 184 if (lost)
184 usec += lost * max_ntp_tick; 185 usec += lost * max_ntp_tick;
185 } else if (unlikely(lost)) 186 } else if (unlikely(lost))
186 usec += lost * tick_usec; 187 usec += lost * (USEC_PER_SEC / HZ);
187 188
188 sec = xtime.tv_sec; 189 sec = xtime.tv_sec;
189 usec += (xtime.tv_nsec / 1000); 190 usec += (xtime.tv_nsec / 1000);
@@ -423,6 +424,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
423 unsigned long j; 424 unsigned long j;
424 unsigned int count; 425 unsigned int count;
425 426
427 write_seqlock(&xtime_lock);
428
426 count = mips_hpt_read(); 429 count = mips_hpt_read();
427 mips_timer_ack(); 430 mips_timer_ack();
428 431
@@ -440,7 +443,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
440 * CMOS clock accordingly every ~11 minutes. rtc_set_time() has to be 443 * CMOS clock accordingly every ~11 minutes. rtc_set_time() has to be
441 * called as close as possible to 500 ms before the new second starts. 444 * called as close as possible to 500 ms before the new second starts.
442 */ 445 */
443 write_seqlock(&xtime_lock);
444 if (ntp_synced() && 446 if (ntp_synced() &&
445 xtime.tv_sec > last_rtc_update + 660 && 447 xtime.tv_sec > last_rtc_update + 660 &&
446 (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 && 448 (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
@@ -452,7 +454,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
452 last_rtc_update = xtime.tv_sec - 600; 454 last_rtc_update = xtime.tv_sec - 600;
453 } 455 }
454 } 456 }
455 write_sequnlock(&xtime_lock);
456 457
457 /* 458 /*
458 * If jiffies has overflown in this timer_interrupt, we must 459 * If jiffies has overflown in this timer_interrupt, we must
@@ -495,6 +496,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
495 } 496 }
496 } 497 }
497 498
499 write_sequnlock(&xtime_lock);
500
498 /* 501 /*
499 * In UP mode, we call local_timer_interrupt() to do profiling 502 * In UP mode, we call local_timer_interrupt() to do profiling
500 * and process accouting. 503 * and process accouting.
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 59a187956de0..005debbfbe84 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1994 - 1999, 2000, 01 Ralf Baechle 6 * Copyright (C) 1994 - 1999, 2000, 01, 06 Ralf Baechle
7 * Copyright (C) 1995, 1996 Paul M. Antoine 7 * Copyright (C) 1995, 1996 Paul M. Antoine
8 * Copyright (C) 1998 Ulf Carlsson 8 * Copyright (C) 1998 Ulf Carlsson
9 * Copyright (C) 1999 Silicon Graphics, Inc. 9 * Copyright (C) 1999 Silicon Graphics, Inc.
@@ -548,6 +548,8 @@ asmlinkage void do_ov(struct pt_regs *regs)
548{ 548{
549 siginfo_t info; 549 siginfo_t info;
550 550
551 die_if_kernel("Integer overflow", regs);
552
551 info.si_code = FPE_INTOVF; 553 info.si_code = FPE_INTOVF;
552 info.si_signo = SIGFPE; 554 info.si_signo = SIGFPE;
553 info.si_errno = 0; 555 info.si_errno = 0;
@@ -1168,7 +1170,7 @@ void __init per_cpu_trap_init(void)
1168#endif 1170#endif
1169 if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV) 1171 if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV)
1170 status_set |= ST0_XX; 1172 status_set |= ST0_XX;
1171 change_c0_status(ST0_CU|ST0_MX|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX, 1173 change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX,
1172 status_set); 1174 status_set);
1173 1175
1174 if (cpu_has_dsp) 1176 if (cpu_has_dsp)
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
index 25cc856d8e7e..2ad0cedf29fe 100644
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -1,4 +1,5 @@
1#include <linux/config.h> 1#include <linux/config.h>
2#include <asm/asm-offsets.h>
2#include <asm-generic/vmlinux.lds.h> 3#include <asm-generic/vmlinux.lds.h>
3 4
4#undef mips /* CPP really sucks for this job */ 5#undef mips /* CPP really sucks for this job */
@@ -64,10 +65,10 @@ SECTIONS
64 we can shorten the on-disk segment size. */ 65 we can shorten the on-disk segment size. */
65 .sdata : { *(.sdata) } 66 .sdata : { *(.sdata) }
66 67
67 . = ALIGN(4096); 68 . = ALIGN(_PAGE_SIZE);
68 __nosave_begin = .; 69 __nosave_begin = .;
69 .data_nosave : { *(.data.nosave) } 70 .data_nosave : { *(.data.nosave) }
70 . = ALIGN(4096); 71 . = ALIGN(_PAGE_SIZE);
71 __nosave_end = .; 72 __nosave_end = .;
72 73
73 . = ALIGN(32); 74 . = ALIGN(32);
@@ -76,7 +77,7 @@ SECTIONS
76 _edata = .; /* End of data section */ 77 _edata = .; /* End of data section */
77 78
78 /* will be freed after init */ 79 /* will be freed after init */
79 . = ALIGN(4096); /* Init code and data */ 80 . = ALIGN(_PAGE_SIZE); /* Init code and data */
80 __init_begin = .; 81 __init_begin = .;
81 .init.text : { 82 .init.text : {
82 _sinittext = .; 83 _sinittext = .;
@@ -105,7 +106,10 @@ SECTIONS
105 .con_initcall.init : { *(.con_initcall.init) } 106 .con_initcall.init : { *(.con_initcall.init) }
106 __con_initcall_end = .; 107 __con_initcall_end = .;
107 SECURITY_INIT 108 SECURITY_INIT
108 . = ALIGN(4096); 109 /* .exit.text is discarded at runtime, not link time, to deal with
110 references from .rodata */
111 .exit.text : { *(.exit.text) }
112 . = ALIGN(_PAGE_SIZE);
109 __initramfs_start = .; 113 __initramfs_start = .;
110 .init.ramfs : { *(.init.ramfs) } 114 .init.ramfs : { *(.init.ramfs) }
111 __initramfs_end = .; 115 __initramfs_end = .;
@@ -113,7 +117,7 @@ SECTIONS
113 __per_cpu_start = .; 117 __per_cpu_start = .;
114 .data.percpu : { *(.data.percpu) } 118 .data.percpu : { *(.data.percpu) }
115 __per_cpu_end = .; 119 __per_cpu_end = .;
116 . = ALIGN(4096); 120 . = ALIGN(_PAGE_SIZE);
117 __init_end = .; 121 __init_end = .;
118 /* freed after init ends here */ 122 /* freed after init ends here */
119 123
@@ -132,7 +136,6 @@ SECTIONS
132 136
133 /* Sections to be discarded */ 137 /* Sections to be discarded */
134 /DISCARD/ : { 138 /DISCARD/ : {
135 *(.exit.text)
136 *(.exit.data) 139 *(.exit.data)
137 *(.exitcall.exit) 140 *(.exitcall.exit)
138 141
diff --git a/arch/mips/lasat/reset.c b/arch/mips/lasat/reset.c
index 8d7d7a454f9a..181bf68175fc 100644
--- a/arch/mips/lasat/reset.c
+++ b/arch/mips/lasat/reset.c
@@ -19,9 +19,12 @@
19 */ 19 */
20#include <linux/config.h> 20#include <linux/config.h>
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/pm.h>
23
22#include <asm/reboot.h> 24#include <asm/reboot.h>
23#include <asm/system.h> 25#include <asm/system.h>
24#include <asm/lasat/lasat.h> 26#include <asm/lasat/lasat.h>
27
25#include "picvue.h" 28#include "picvue.h"
26#include "prom.h" 29#include "prom.h"
27 30
@@ -63,5 +66,5 @@ void lasat_reboot_setup(void)
63{ 66{
64 _machine_restart = lasat_machine_restart; 67 _machine_restart = lasat_machine_restart;
65 _machine_halt = lasat_machine_halt; 68 _machine_halt = lasat_machine_halt;
66 _machine_power_off = lasat_machine_halt; 69 pm_power_off = lasat_machine_halt;
67} 70}
diff --git a/arch/mips/lasat/setup.c b/arch/mips/lasat/setup.c
index dcd819d57dae..83eb08b7a072 100644
--- a/arch/mips/lasat/setup.c
+++ b/arch/mips/lasat/setup.c
@@ -134,8 +134,8 @@ void __init serial_init(void)
134 134
135 memset(&s, 0, sizeof(s)); 135 memset(&s, 0, sizeof(s));
136 136
137 s.flags = STD_COM_FLAGS; 137 s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
138 s.iotype = SERIAL_IO_MEM; 138 s.iotype = UPIO_MEM;
139 139
140 if (mips_machtype == MACH_LASAT_100) { 140 if (mips_machtype == MACH_LASAT_100) {
141 s.uartclk = LASAT_BASE_BAUD_100 * 16; 141 s.uartclk = LASAT_BASE_BAUD_100 * 16;
diff --git a/arch/mips/lib-32/dump_tlb.c b/arch/mips/lib-32/dump_tlb.c
index 46519f4331eb..c49a925d0169 100644
--- a/arch/mips/lib-32/dump_tlb.c
+++ b/arch/mips/lib-32/dump_tlb.c
@@ -158,29 +158,26 @@ void dump_list_process(struct task_struct *t, void *address)
158 printk("task->mm == %8p\n", t->mm); 158 printk("task->mm == %8p\n", t->mm);
159 //printk("tasks->mm.pgd == %08x\n", (unsigned int) t->mm->pgd); 159 //printk("tasks->mm.pgd == %08x\n", (unsigned int) t->mm->pgd);
160 160
161 if (addr > KSEG0) 161 if (addr > KSEG0) {
162 page_dir = pgd_offset_k(0); 162 page_dir = pgd_offset_k(0);
163 else if (t->mm) {
164 page_dir = pgd_offset(t->mm, 0);
165 printk("page_dir == %08x\n", (unsigned int) page_dir);
166 } else
167 printk("Current thread has no mm\n");
168
169 if (addr > KSEG0)
170 pgd = pgd_offset_k(addr); 163 pgd = pgd_offset_k(addr);
171 else if (t->mm) { 164 } else if (t->mm) {
165 page_dir = pgd_offset(t->mm, 0);
172 pgd = pgd_offset(t->mm, addr); 166 pgd = pgd_offset(t->mm, addr);
173 printk("pgd == %08x, ", (unsigned int) pgd); 167 } else {
174 pud = pud_offset(pgd, addr); 168 printk("Current thread has no mm\n");
175 printk("pud == %08x, ", (unsigned int) pud); 169 return;
170 }
171 printk("page_dir == %08x\n", (unsigned int) page_dir);
172 printk("pgd == %08x, ", (unsigned int) pgd);
173 pud = pud_offset(pgd, addr);
174 printk("pud == %08x, ", (unsigned int) pud);
176 175
177 pmd = pmd_offset(pud, addr); 176 pmd = pmd_offset(pud, addr);
178 printk("pmd == %08x, ", (unsigned int) pmd); 177 printk("pmd == %08x, ", (unsigned int) pmd);
179 178
180 pte = pte_offset(pmd, addr); 179 pte = pte_offset(pmd, addr);
181 printk("pte == %08x, ", (unsigned int) pte); 180 printk("pte == %08x, ", (unsigned int) pte);
182 } else
183 printk("Current thread has no mm\n");
184 181
185 page = *pte; 182 page = *pte;
186#ifdef CONFIG_64BIT_PHYS_ADDR 183#ifdef CONFIG_64BIT_PHYS_ADDR
diff --git a/arch/mips/lib/iomap.c b/arch/mips/lib/iomap.c
index 7e2ced715cfb..f4ac5bbcd81f 100644
--- a/arch/mips/lib/iomap.c
+++ b/arch/mips/lib/iomap.c
@@ -63,7 +63,7 @@ void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
63 return ioport_map(start, len); 63 return ioport_map(start, len);
64 if (flags & IORESOURCE_MEM) { 64 if (flags & IORESOURCE_MEM) {
65 if (flags & IORESOURCE_CACHEABLE) 65 if (flags & IORESOURCE_CACHEABLE)
66 return ioremap_cacheable_cow(start, len); 66 return ioremap_cachable(start, len);
67 return ioremap_nocache(start, len); 67 return ioremap_nocache(start, len);
68 } 68 }
69 69
diff --git a/arch/mips/math-emu/dp_simple.c b/arch/mips/math-emu/dp_simple.c
index 495c1ac94298..1c555e6c6a9f 100644
--- a/arch/mips/math-emu/dp_simple.c
+++ b/arch/mips/math-emu/dp_simple.c
@@ -48,16 +48,22 @@ ieee754dp ieee754dp_neg(ieee754dp x)
48 CLEARCX; 48 CLEARCX;
49 FLUSHXDP; 49 FLUSHXDP;
50 50
51 /*
52 * Invert the sign ALWAYS to prevent an endless recursion on
53 * pow() in libc.
54 */
55 /* quick fix up */
56 DPSIGN(x) ^= 1;
57
51 if (xc == IEEE754_CLASS_SNAN) { 58 if (xc == IEEE754_CLASS_SNAN) {
59 ieee754dp y = ieee754dp_indef();
52 SETCX(IEEE754_INVALID_OPERATION); 60 SETCX(IEEE754_INVALID_OPERATION);
53 return ieee754dp_nanxcpt(ieee754dp_indef(), "neg"); 61 DPSIGN(y) = DPSIGN(x);
62 return ieee754dp_nanxcpt(y, "neg");
54 } 63 }
55 64
56 if (ieee754dp_isnan(x)) /* but not infinity */ 65 if (ieee754dp_isnan(x)) /* but not infinity */
57 return ieee754dp_nanxcpt(x, "neg", x); 66 return ieee754dp_nanxcpt(x, "neg", x);
58
59 /* quick fix up */
60 DPSIGN(x) ^= 1;
61 return x; 67 return x;
62} 68}
63 69
diff --git a/arch/mips/math-emu/sp_simple.c b/arch/mips/math-emu/sp_simple.c
index c809830dffb4..770f0f4677cd 100644
--- a/arch/mips/math-emu/sp_simple.c
+++ b/arch/mips/math-emu/sp_simple.c
@@ -48,16 +48,22 @@ ieee754sp ieee754sp_neg(ieee754sp x)
48 CLEARCX; 48 CLEARCX;
49 FLUSHXSP; 49 FLUSHXSP;
50 50
51 /*
52 * Invert the sign ALWAYS to prevent an endless recursion on
53 * pow() in libc.
54 */
55 /* quick fix up */
56 SPSIGN(x) ^= 1;
57
51 if (xc == IEEE754_CLASS_SNAN) { 58 if (xc == IEEE754_CLASS_SNAN) {
59 ieee754sp y = ieee754sp_indef();
52 SETCX(IEEE754_INVALID_OPERATION); 60 SETCX(IEEE754_INVALID_OPERATION);
53 return ieee754sp_nanxcpt(ieee754sp_indef(), "neg"); 61 SPSIGN(y) = SPSIGN(x);
62 return ieee754sp_nanxcpt(y, "neg");
54 } 63 }
55 64
56 if (ieee754sp_isnan(x)) /* but not infinity */ 65 if (ieee754sp_isnan(x)) /* but not infinity */
57 return ieee754sp_nanxcpt(x, "neg", x); 66 return ieee754sp_nanxcpt(x, "neg", x);
58
59 /* quick fix up */
60 SPSIGN(x) ^= 1;
61 return x; 67 return x;
62} 68}
63 69
diff --git a/arch/mips/mips-boards/atlas/atlas_setup.c b/arch/mips/mips-boards/atlas/atlas_setup.c
index 625843b30bed..873cf3141a31 100644
--- a/arch/mips/mips-boards/atlas/atlas_setup.c
+++ b/arch/mips/mips-boards/atlas/atlas_setup.c
@@ -82,8 +82,8 @@ static void __init serial_init(void)
82#endif 82#endif
83 s.irq = ATLASINT_UART; 83 s.irq = ATLASINT_UART;
84 s.uartclk = ATLAS_BASE_BAUD * 16; 84 s.uartclk = ATLAS_BASE_BAUD * 16;
85 s.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ; 85 s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ;
86 s.iotype = SERIAL_IO_PORT; 86 s.iotype = UPIO_PORT;
87 s.regshift = 3; 87 s.regshift = 3;
88 88
89 if (early_serial_setup(&s) != 0) { 89 if (early_serial_setup(&s) != 0) {
diff --git a/arch/mips/mips-boards/generic/reset.c b/arch/mips/mips-boards/generic/reset.c
index 9fdec743bd95..7213c395fb6b 100644
--- a/arch/mips/mips-boards/generic/reset.c
+++ b/arch/mips/mips-boards/generic/reset.c
@@ -23,6 +23,7 @@
23 * 23 *
24 */ 24 */
25#include <linux/config.h> 25#include <linux/config.h>
26#include <linux/pm.h>
26 27
27#include <asm/io.h> 28#include <asm/io.h>
28#include <asm/reboot.h> 29#include <asm/reboot.h>
@@ -65,9 +66,9 @@ void mips_reboot_setup(void)
65 _machine_restart = mips_machine_restart; 66 _machine_restart = mips_machine_restart;
66 _machine_halt = mips_machine_halt; 67 _machine_halt = mips_machine_halt;
67#if defined(CONFIG_MIPS_ATLAS) 68#if defined(CONFIG_MIPS_ATLAS)
68 _machine_power_off = atlas_machine_power_off; 69 pm_power_off = atlas_machine_power_off;
69#endif 70#endif
70#if defined(CONFIG_MIPS_MALTA) || defined(CONFIG_MIPS_SEAD) 71#if defined(CONFIG_MIPS_MALTA) || defined(CONFIG_MIPS_SEAD)
71 _machine_power_off = mips_machine_halt; 72 pm_power_off = mips_machine_halt;
72#endif 73#endif
73} 74}
diff --git a/arch/mips/mips-boards/sead/sead_setup.c b/arch/mips/mips-boards/sead/sead_setup.c
index f966bc161dfa..4266ce445174 100644
--- a/arch/mips/mips-boards/sead/sead_setup.c
+++ b/arch/mips/mips-boards/sead/sead_setup.c
@@ -71,8 +71,8 @@ static void __init serial_init(void)
71#endif 71#endif
72 s.irq = MIPSCPU_INT_BASE + MIPSCPU_INT_UART0; 72 s.irq = MIPSCPU_INT_BASE + MIPSCPU_INT_UART0;
73 s.uartclk = SEAD_BASE_BAUD * 16; 73 s.uartclk = SEAD_BASE_BAUD * 16;
74 s.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ; 74 s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ;
75 s.iotype = 0; 75 s.iotype = UPIO_PORT;
76 s.regshift = 3; 76 s.regshift = 3;
77 77
78 if (early_serial_setup(&s) != 0) { 78 if (early_serial_setup(&s) != 0) {
diff --git a/arch/mips/mips-boards/sim/sim_setup.c b/arch/mips/mips-boards/sim/sim_setup.c
index 485d5a58d9cf..a2fd62997ca3 100644
--- a/arch/mips/mips-boards/sim/sim_setup.c
+++ b/arch/mips/mips-boards/sim/sim_setup.c
@@ -88,8 +88,8 @@ static void __init serial_init(void)
88 but poll for now */ 88 but poll for now */
89 s.irq = 0; 89 s.irq = 0;
90 s.uartclk = BASE_BAUD * 16; 90 s.uartclk = BASE_BAUD * 16;
91 s.flags = ASYNC_BOOT_AUTOCONF | UPF_SKIP_TEST; 91 s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
92 s.iotype = SERIAL_IO_PORT | ASYNC_SKIP_TEST; 92 s.iotype = UPIO_PORT;
93 s.regshift = 0; 93 s.regshift = 0;
94 s.timeout = 4; 94 s.timeout = 4;
95 95
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index 422b55fab07a..9572ed44f0d5 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -235,7 +235,9 @@ static inline void r4k_blast_scache_page_setup(void)
235{ 235{
236 unsigned long sc_lsize = cpu_scache_line_size(); 236 unsigned long sc_lsize = cpu_scache_line_size();
237 237
238 if (sc_lsize == 16) 238 if (scache_size == 0)
239 r4k_blast_scache_page = (void *)no_sc_noop;
240 else if (sc_lsize == 16)
239 r4k_blast_scache_page = blast_scache16_page; 241 r4k_blast_scache_page = blast_scache16_page;
240 else if (sc_lsize == 32) 242 else if (sc_lsize == 32)
241 r4k_blast_scache_page = blast_scache32_page; 243 r4k_blast_scache_page = blast_scache32_page;
@@ -251,7 +253,9 @@ static inline void r4k_blast_scache_page_indexed_setup(void)
251{ 253{
252 unsigned long sc_lsize = cpu_scache_line_size(); 254 unsigned long sc_lsize = cpu_scache_line_size();
253 255
254 if (sc_lsize == 16) 256 if (scache_size == 0)
257 r4k_blast_scache_page_indexed = (void *)no_sc_noop;
258 else if (sc_lsize == 16)
255 r4k_blast_scache_page_indexed = blast_scache16_page_indexed; 259 r4k_blast_scache_page_indexed = blast_scache16_page_indexed;
256 else if (sc_lsize == 32) 260 else if (sc_lsize == 32)
257 r4k_blast_scache_page_indexed = blast_scache32_page_indexed; 261 r4k_blast_scache_page_indexed = blast_scache32_page_indexed;
@@ -267,7 +271,9 @@ static inline void r4k_blast_scache_setup(void)
267{ 271{
268 unsigned long sc_lsize = cpu_scache_line_size(); 272 unsigned long sc_lsize = cpu_scache_line_size();
269 273
270 if (sc_lsize == 16) 274 if (scache_size == 0)
275 r4k_blast_scache = (void *)no_sc_noop;
276 else if (sc_lsize == 16)
271 r4k_blast_scache = blast_scache16; 277 r4k_blast_scache = blast_scache16;
272 else if (sc_lsize == 32) 278 else if (sc_lsize == 32)
273 r4k_blast_scache = blast_scache32; 279 r4k_blast_scache = blast_scache32;
@@ -369,6 +375,7 @@ static void r4k_flush_cache_mm(struct mm_struct *mm)
369struct flush_cache_page_args { 375struct flush_cache_page_args {
370 struct vm_area_struct *vma; 376 struct vm_area_struct *vma;
371 unsigned long addr; 377 unsigned long addr;
378 unsigned long pfn;
372}; 379};
373 380
374static inline void local_r4k_flush_cache_page(void *args) 381static inline void local_r4k_flush_cache_page(void *args)
@@ -376,6 +383,7 @@ static inline void local_r4k_flush_cache_page(void *args)
376 struct flush_cache_page_args *fcp_args = args; 383 struct flush_cache_page_args *fcp_args = args;
377 struct vm_area_struct *vma = fcp_args->vma; 384 struct vm_area_struct *vma = fcp_args->vma;
378 unsigned long addr = fcp_args->addr; 385 unsigned long addr = fcp_args->addr;
386 unsigned long paddr = fcp_args->pfn << PAGE_SHIFT;
379 int exec = vma->vm_flags & VM_EXEC; 387 int exec = vma->vm_flags & VM_EXEC;
380 struct mm_struct *mm = vma->vm_mm; 388 struct mm_struct *mm = vma->vm_mm;
381 pgd_t *pgdp; 389 pgd_t *pgdp;
@@ -425,11 +433,12 @@ static inline void local_r4k_flush_cache_page(void *args)
425 * Do indexed flush, too much work to get the (possible) TLB refills 433 * Do indexed flush, too much work to get the (possible) TLB refills
426 * to work correctly. 434 * to work correctly.
427 */ 435 */
428 addr = INDEX_BASE + (addr & (dcache_size - 1));
429 if (cpu_has_dc_aliases || (exec && !cpu_has_ic_fills_f_dc)) { 436 if (cpu_has_dc_aliases || (exec && !cpu_has_ic_fills_f_dc)) {
430 r4k_blast_dcache_page_indexed(addr); 437 r4k_blast_dcache_page_indexed(cpu_has_pindexed_dcache ?
431 if (exec && !cpu_icache_snoops_remote_store) 438 paddr : addr);
432 r4k_blast_scache_page_indexed(addr); 439 if (exec && !cpu_icache_snoops_remote_store) {
440 r4k_blast_scache_page_indexed(paddr);
441 }
433 } 442 }
434 if (exec) { 443 if (exec) {
435 if (cpu_has_vtag_icache) { 444 if (cpu_has_vtag_icache) {
@@ -449,6 +458,7 @@ static void r4k_flush_cache_page(struct vm_area_struct *vma,
449 458
450 args.vma = vma; 459 args.vma = vma;
451 args.addr = addr; 460 args.addr = addr;
461 args.pfn = pfn;
452 462
453 on_each_cpu(local_r4k_flush_cache_page, &args, 1, 1); 463 on_each_cpu(local_r4k_flush_cache_page, &args, 1, 1);
454} 464}
@@ -464,72 +474,39 @@ static void r4k_flush_data_cache_page(unsigned long addr)
464} 474}
465 475
466struct flush_icache_range_args { 476struct flush_icache_range_args {
467 unsigned long __user start; 477 unsigned long start;
468 unsigned long __user end; 478 unsigned long end;
469}; 479};
470 480
471static inline void local_r4k_flush_icache_range(void *args) 481static inline void local_r4k_flush_icache_range(void *args)
472{ 482{
473 struct flush_icache_range_args *fir_args = args; 483 struct flush_icache_range_args *fir_args = args;
474 unsigned long dc_lsize = cpu_dcache_line_size();
475 unsigned long ic_lsize = cpu_icache_line_size();
476 unsigned long sc_lsize = cpu_scache_line_size();
477 unsigned long start = fir_args->start; 484 unsigned long start = fir_args->start;
478 unsigned long end = fir_args->end; 485 unsigned long end = fir_args->end;
479 unsigned long addr, aend;
480 486
481 if (!cpu_has_ic_fills_f_dc) { 487 if (!cpu_has_ic_fills_f_dc) {
482 if (end - start > dcache_size) { 488 if (end - start > dcache_size) {
483 r4k_blast_dcache(); 489 r4k_blast_dcache();
484 } else { 490 } else {
485 R4600_HIT_CACHEOP_WAR_IMPL; 491 R4600_HIT_CACHEOP_WAR_IMPL;
486 addr = start & ~(dc_lsize - 1); 492 protected_blast_dcache_range(start, end);
487 aend = (end - 1) & ~(dc_lsize - 1);
488
489 while (1) {
490 /* Hit_Writeback_Inv_D */
491 protected_writeback_dcache_line(addr);
492 if (addr == aend)
493 break;
494 addr += dc_lsize;
495 }
496 } 493 }
497 494
498 if (!cpu_icache_snoops_remote_store) { 495 if (!cpu_icache_snoops_remote_store && scache_size) {
499 if (end - start > scache_size) { 496 if (end - start > scache_size)
500 r4k_blast_scache(); 497 r4k_blast_scache();
501 } else { 498 else
502 addr = start & ~(sc_lsize - 1); 499 protected_blast_scache_range(start, end);
503 aend = (end - 1) & ~(sc_lsize - 1);
504
505 while (1) {
506 /* Hit_Writeback_Inv_SD */
507 protected_writeback_scache_line(addr);
508 if (addr == aend)
509 break;
510 addr += sc_lsize;
511 }
512 }
513 } 500 }
514 } 501 }
515 502
516 if (end - start > icache_size) 503 if (end - start > icache_size)
517 r4k_blast_icache(); 504 r4k_blast_icache();
518 else { 505 else
519 addr = start & ~(ic_lsize - 1); 506 protected_blast_icache_range(start, end);
520 aend = (end - 1) & ~(ic_lsize - 1);
521 while (1) {
522 /* Hit_Invalidate_I */
523 protected_flush_icache_line(addr);
524 if (addr == aend)
525 break;
526 addr += ic_lsize;
527 }
528 }
529} 507}
530 508
531static void r4k_flush_icache_range(unsigned long __user start, 509static void r4k_flush_icache_range(unsigned long start, unsigned long end)
532 unsigned long __user end)
533{ 510{
534 struct flush_icache_range_args args; 511 struct flush_icache_range_args args;
535 512
@@ -620,27 +597,14 @@ static void r4k_flush_icache_page(struct vm_area_struct *vma,
620 597
621static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size) 598static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
622{ 599{
623 unsigned long end, a;
624
625 /* Catch bad driver code */ 600 /* Catch bad driver code */
626 BUG_ON(size == 0); 601 BUG_ON(size == 0);
627 602
628 if (cpu_has_subset_pcaches) { 603 if (cpu_has_subset_pcaches) {
629 unsigned long sc_lsize = cpu_scache_line_size(); 604 if (size >= scache_size)
630
631 if (size >= scache_size) {
632 r4k_blast_scache(); 605 r4k_blast_scache();
633 return; 606 else
634 } 607 blast_scache_range(addr, addr + size);
635
636 a = addr & ~(sc_lsize - 1);
637 end = (addr + size - 1) & ~(sc_lsize - 1);
638 while (1) {
639 flush_scache_line(a); /* Hit_Writeback_Inv_SD */
640 if (a == end)
641 break;
642 a += sc_lsize;
643 }
644 return; 608 return;
645 } 609 }
646 610
@@ -652,17 +616,8 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
652 if (size >= dcache_size) { 616 if (size >= dcache_size) {
653 r4k_blast_dcache(); 617 r4k_blast_dcache();
654 } else { 618 } else {
655 unsigned long dc_lsize = cpu_dcache_line_size();
656
657 R4600_HIT_CACHEOP_WAR_IMPL; 619 R4600_HIT_CACHEOP_WAR_IMPL;
658 a = addr & ~(dc_lsize - 1); 620 blast_dcache_range(addr, addr + size);
659 end = (addr + size - 1) & ~(dc_lsize - 1);
660 while (1) {
661 flush_dcache_line(a); /* Hit_Writeback_Inv_D */
662 if (a == end)
663 break;
664 a += dc_lsize;
665 }
666 } 621 }
667 622
668 bc_wback_inv(addr, size); 623 bc_wback_inv(addr, size);
@@ -670,44 +625,22 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
670 625
671static void r4k_dma_cache_inv(unsigned long addr, unsigned long size) 626static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
672{ 627{
673 unsigned long end, a;
674
675 /* Catch bad driver code */ 628 /* Catch bad driver code */
676 BUG_ON(size == 0); 629 BUG_ON(size == 0);
677 630
678 if (cpu_has_subset_pcaches) { 631 if (cpu_has_subset_pcaches) {
679 unsigned long sc_lsize = cpu_scache_line_size(); 632 if (size >= scache_size)
680
681 if (size >= scache_size) {
682 r4k_blast_scache(); 633 r4k_blast_scache();
683 return; 634 else
684 } 635 blast_scache_range(addr, addr + size);
685
686 a = addr & ~(sc_lsize - 1);
687 end = (addr + size - 1) & ~(sc_lsize - 1);
688 while (1) {
689 flush_scache_line(a); /* Hit_Writeback_Inv_SD */
690 if (a == end)
691 break;
692 a += sc_lsize;
693 }
694 return; 636 return;
695 } 637 }
696 638
697 if (size >= dcache_size) { 639 if (size >= dcache_size) {
698 r4k_blast_dcache(); 640 r4k_blast_dcache();
699 } else { 641 } else {
700 unsigned long dc_lsize = cpu_dcache_line_size();
701
702 R4600_HIT_CACHEOP_WAR_IMPL; 642 R4600_HIT_CACHEOP_WAR_IMPL;
703 a = addr & ~(dc_lsize - 1); 643 blast_dcache_range(addr, addr + size);
704 end = (addr + size - 1) & ~(dc_lsize - 1);
705 while (1) {
706 flush_dcache_line(a); /* Hit_Writeback_Inv_D */
707 if (a == end)
708 break;
709 a += dc_lsize;
710 }
711 } 644 }
712 645
713 bc_inv(addr, size); 646 bc_inv(addr, size);
@@ -728,7 +661,7 @@ static void local_r4k_flush_cache_sigtramp(void * arg)
728 661
729 R4600_HIT_CACHEOP_WAR_IMPL; 662 R4600_HIT_CACHEOP_WAR_IMPL;
730 protected_writeback_dcache_line(addr & ~(dc_lsize - 1)); 663 protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
731 if (!cpu_icache_snoops_remote_store) 664 if (!cpu_icache_snoops_remote_store && scache_size)
732 protected_writeback_scache_line(addr & ~(sc_lsize - 1)); 665 protected_writeback_scache_line(addr & ~(sc_lsize - 1));
733 protected_flush_icache_line(addr & ~(ic_lsize - 1)); 666 protected_flush_icache_line(addr & ~(ic_lsize - 1));
734 if (MIPS4K_ICACHE_REFILL_WAR) { 667 if (MIPS4K_ICACHE_REFILL_WAR) {
@@ -1027,6 +960,7 @@ static void __init probe_pcache(void)
1027 switch (c->cputype) { 960 switch (c->cputype) {
1028 case CPU_20KC: 961 case CPU_20KC:
1029 case CPU_25KF: 962 case CPU_25KF:
963 c->dcache.flags |= MIPS_CACHE_PINDEX;
1030 case CPU_R10000: 964 case CPU_R10000:
1031 case CPU_R12000: 965 case CPU_R12000:
1032 case CPU_SB1: 966 case CPU_SB1:
diff --git a/arch/mips/mm/c-tx39.c b/arch/mips/mm/c-tx39.c
index 0a97a9434eba..fe232e3988e3 100644
--- a/arch/mips/mm/c-tx39.c
+++ b/arch/mips/mm/c-tx39.c
@@ -44,8 +44,6 @@ __asm__ __volatile__( \
44/* TX39H-style cache flush routines. */ 44/* TX39H-style cache flush routines. */
45static void tx39h_flush_icache_all(void) 45static void tx39h_flush_icache_all(void)
46{ 46{
47 unsigned long start = KSEG0;
48 unsigned long end = (start + icache_size);
49 unsigned long flags, config; 47 unsigned long flags, config;
50 48
51 /* disable icache (set ICE#) */ 49 /* disable icache (set ICE#) */
@@ -53,33 +51,18 @@ static void tx39h_flush_icache_all(void)
53 config = read_c0_conf(); 51 config = read_c0_conf();
54 write_c0_conf(config & ~TX39_CONF_ICE); 52 write_c0_conf(config & ~TX39_CONF_ICE);
55 TX39_STOP_STREAMING(); 53 TX39_STOP_STREAMING();
56 54 blast_icache16();
57 /* invalidate icache */
58 while (start < end) {
59 cache16_unroll32(start, Index_Invalidate_I);
60 start += 0x200;
61 }
62
63 write_c0_conf(config); 55 write_c0_conf(config);
64 local_irq_restore(flags); 56 local_irq_restore(flags);
65} 57}
66 58
67static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size) 59static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size)
68{ 60{
69 unsigned long end, a;
70 unsigned long dc_lsize = current_cpu_data.dcache.linesz;
71
72 /* Catch bad driver code */ 61 /* Catch bad driver code */
73 BUG_ON(size == 0); 62 BUG_ON(size == 0);
74 63
75 iob(); 64 iob();
76 a = addr & ~(dc_lsize - 1); 65 blast_inv_dcache_range(addr, addr + size);
77 end = (addr + size - 1) & ~(dc_lsize - 1);
78 while (1) {
79 invalidate_dcache_line(a); /* Hit_Invalidate_D */
80 if (a == end) break;
81 a += dc_lsize;
82 }
83} 66}
84 67
85 68
@@ -227,7 +210,6 @@ static void tx39_flush_cache_page(struct vm_area_struct *vma, unsigned long page
227 * Do indexed flush, too much work to get the (possible) TLB refills 210 * Do indexed flush, too much work to get the (possible) TLB refills
228 * to work correctly. 211 * to work correctly.
229 */ 212 */
230 page = (KSEG0 + (page & (dcache_size - 1)));
231 if (cpu_has_dc_aliases || exec) 213 if (cpu_has_dc_aliases || exec)
232 tx39_blast_dcache_page_indexed(page); 214 tx39_blast_dcache_page_indexed(page);
233 if (exec) 215 if (exec)
@@ -241,42 +223,21 @@ static void tx39_flush_data_cache_page(unsigned long addr)
241 223
242static void tx39_flush_icache_range(unsigned long start, unsigned long end) 224static void tx39_flush_icache_range(unsigned long start, unsigned long end)
243{ 225{
244 unsigned long dc_lsize = current_cpu_data.dcache.linesz;
245 unsigned long addr, aend;
246
247 if (end - start > dcache_size) 226 if (end - start > dcache_size)
248 tx39_blast_dcache(); 227 tx39_blast_dcache();
249 else { 228 else
250 addr = start & ~(dc_lsize - 1); 229 protected_blast_dcache_range(start, end);
251 aend = (end - 1) & ~(dc_lsize - 1);
252
253 while (1) {
254 /* Hit_Writeback_Inv_D */
255 protected_writeback_dcache_line(addr);
256 if (addr == aend)
257 break;
258 addr += dc_lsize;
259 }
260 }
261 230
262 if (end - start > icache_size) 231 if (end - start > icache_size)
263 tx39_blast_icache(); 232 tx39_blast_icache();
264 else { 233 else {
265 unsigned long flags, config; 234 unsigned long flags, config;
266 addr = start & ~(dc_lsize - 1);
267 aend = (end - 1) & ~(dc_lsize - 1);
268 /* disable icache (set ICE#) */ 235 /* disable icache (set ICE#) */
269 local_irq_save(flags); 236 local_irq_save(flags);
270 config = read_c0_conf(); 237 config = read_c0_conf();
271 write_c0_conf(config & ~TX39_CONF_ICE); 238 write_c0_conf(config & ~TX39_CONF_ICE);
272 TX39_STOP_STREAMING(); 239 TX39_STOP_STREAMING();
273 while (1) { 240 protected_blast_icache_range(start, end);
274 /* Hit_Invalidate_I */
275 protected_flush_icache_line(addr);
276 if (addr == aend)
277 break;
278 addr += dc_lsize;
279 }
280 write_c0_conf(config); 241 write_c0_conf(config);
281 local_irq_restore(flags); 242 local_irq_restore(flags);
282 } 243 }
@@ -311,7 +272,7 @@ static void tx39_flush_icache_page(struct vm_area_struct *vma, struct page *page
311 272
312static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size) 273static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
313{ 274{
314 unsigned long end, a; 275 unsigned long end;
315 276
316 if (((size | addr) & (PAGE_SIZE - 1)) == 0) { 277 if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
317 end = addr + size; 278 end = addr + size;
@@ -322,20 +283,13 @@ static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
322 } else if (size > dcache_size) { 283 } else if (size > dcache_size) {
323 tx39_blast_dcache(); 284 tx39_blast_dcache();
324 } else { 285 } else {
325 unsigned long dc_lsize = current_cpu_data.dcache.linesz; 286 blast_dcache_range(addr, addr + size);
326 a = addr & ~(dc_lsize - 1);
327 end = (addr + size - 1) & ~(dc_lsize - 1);
328 while (1) {
329 flush_dcache_line(a); /* Hit_Writeback_Inv_D */
330 if (a == end) break;
331 a += dc_lsize;
332 }
333 } 287 }
334} 288}
335 289
336static void tx39_dma_cache_inv(unsigned long addr, unsigned long size) 290static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
337{ 291{
338 unsigned long end, a; 292 unsigned long end;
339 293
340 if (((size | addr) & (PAGE_SIZE - 1)) == 0) { 294 if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
341 end = addr + size; 295 end = addr + size;
@@ -346,14 +300,7 @@ static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
346 } else if (size > dcache_size) { 300 } else if (size > dcache_size) {
347 tx39_blast_dcache(); 301 tx39_blast_dcache();
348 } else { 302 } else {
349 unsigned long dc_lsize = current_cpu_data.dcache.linesz; 303 blast_inv_dcache_range(addr, addr + size);
350 a = addr & ~(dc_lsize - 1);
351 end = (addr + size - 1) & ~(dc_lsize - 1);
352 while (1) {
353 invalidate_dcache_line(a); /* Hit_Invalidate_D */
354 if (a == end) break;
355 a += dc_lsize;
356 }
357 } 304 }
358} 305}
359 306
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c
index 314701a66b13..591c22b080e4 100644
--- a/arch/mips/mm/cache.c
+++ b/arch/mips/mm/cache.c
@@ -25,8 +25,7 @@ void (*flush_cache_range)(struct vm_area_struct *vma, unsigned long start,
25 unsigned long end); 25 unsigned long end);
26void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, 26void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page,
27 unsigned long pfn); 27 unsigned long pfn);
28void (*flush_icache_range)(unsigned long __user start, 28void (*flush_icache_range)(unsigned long start, unsigned long end);
29 unsigned long __user end);
30void (*flush_icache_page)(struct vm_area_struct *vma, struct page *page); 29void (*flush_icache_page)(struct vm_area_struct *vma, struct page *page);
31 30
32/* MIPS specific cache operations */ 31/* MIPS specific cache operations */
@@ -53,7 +52,7 @@ EXPORT_SYMBOL(_dma_cache_inv);
53 * We could optimize the case where the cache argument is not BCACHE but 52 * We could optimize the case where the cache argument is not BCACHE but
54 * that seems very atypical use ... 53 * that seems very atypical use ...
55 */ 54 */
56asmlinkage int sys_cacheflush(unsigned long __user addr, 55asmlinkage int sys_cacheflush(unsigned long addr,
57 unsigned long bytes, unsigned int cache) 56 unsigned long bytes, unsigned int cache)
58{ 57{
59 if (bytes == 0) 58 if (bytes == 0)
diff --git a/arch/mips/mm/cex-sb1.S b/arch/mips/mm/cex-sb1.S
index 0e71580774ff..e54a62f2807c 100644
--- a/arch/mips/mm/cex-sb1.S
+++ b/arch/mips/mm/cex-sb1.S
@@ -64,7 +64,7 @@ LEAF(except_vec2_sb1)
64 sd k0,0x170($0) 64 sd k0,0x170($0)
65 sd k1,0x178($0) 65 sd k1,0x178($0)
66 66
67#if CONFIG_SB1_CEX_ALWAYS_FATAL 67#ifdef CONFIG_SB1_CEX_ALWAYS_FATAL
68 j handle_vec2_sb1 68 j handle_vec2_sb1
69 nop 69 nop
70#else 70#else
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 4ee91c9a556f..0ff9a348b843 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -24,6 +24,7 @@
24#include <linux/bootmem.h> 24#include <linux/bootmem.h>
25#include <linux/highmem.h> 25#include <linux/highmem.h>
26#include <linux/swap.h> 26#include <linux/swap.h>
27#include <linux/proc_fs.h>
27 28
28#include <asm/bootinfo.h> 29#include <asm/bootinfo.h>
29#include <asm/cachectl.h> 30#include <asm/cachectl.h>
@@ -200,6 +201,11 @@ static inline int page_is_ram(unsigned long pagenr)
200 return 0; 201 return 0;
201} 202}
202 203
204static struct kcore_list kcore_mem, kcore_vmalloc;
205#ifdef CONFIG_64BIT
206static struct kcore_list kcore_kseg0;
207#endif
208
203void __init mem_init(void) 209void __init mem_init(void)
204{ 210{
205 unsigned long codesize, reservedpages, datasize, initsize; 211 unsigned long codesize, reservedpages, datasize, initsize;
@@ -249,6 +255,16 @@ void __init mem_init(void)
249 datasize = (unsigned long) &_edata - (unsigned long) &_etext; 255 datasize = (unsigned long) &_edata - (unsigned long) &_etext;
250 initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin; 256 initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;
251 257
258#ifdef CONFIG_64BIT
259 if ((unsigned long) &_text > (unsigned long) CKSEG0)
260 /* The -4 is a hack so that user tools don't have to handle
261 the overflow. */
262 kclist_add(&kcore_kseg0, (void *) CKSEG0, 0x80000000 - 4);
263#endif
264 kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT);
265 kclist_add(&kcore_vmalloc, (void *)VMALLOC_START,
266 VMALLOC_END-VMALLOC_START);
267
252 printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, " 268 printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, "
253 "%ldk reserved, %ldk data, %ldk init, %ldk highmem)\n", 269 "%ldk reserved, %ldk data, %ldk init, %ldk highmem)\n",
254 (unsigned long) nr_free_pages() << (PAGE_SHIFT-10), 270 (unsigned long) nr_free_pages() << (PAGE_SHIFT-10),
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
index 0f9485806bac..ac4f4bfaae50 100644
--- a/arch/mips/mm/tlbex.c
+++ b/arch/mips/mm/tlbex.c
@@ -280,69 +280,69 @@ static void __init build_insn(u32 **buf, enum opcode opc, ...)
280} 280}
281 281
282#define I_u1u2u3(op) \ 282#define I_u1u2u3(op) \
283 static inline void i##op(u32 **buf, unsigned int a, \ 283 static inline void __init i##op(u32 **buf, unsigned int a, \
284 unsigned int b, unsigned int c) \ 284 unsigned int b, unsigned int c) \
285 { \ 285 { \
286 build_insn(buf, insn##op, a, b, c); \ 286 build_insn(buf, insn##op, a, b, c); \
287 } 287 }
288 288
289#define I_u2u1u3(op) \ 289#define I_u2u1u3(op) \
290 static inline void i##op(u32 **buf, unsigned int a, \ 290 static inline void __init i##op(u32 **buf, unsigned int a, \
291 unsigned int b, unsigned int c) \ 291 unsigned int b, unsigned int c) \
292 { \ 292 { \
293 build_insn(buf, insn##op, b, a, c); \ 293 build_insn(buf, insn##op, b, a, c); \
294 } 294 }
295 295
296#define I_u3u1u2(op) \ 296#define I_u3u1u2(op) \
297 static inline void i##op(u32 **buf, unsigned int a, \ 297 static inline void __init i##op(u32 **buf, unsigned int a, \
298 unsigned int b, unsigned int c) \ 298 unsigned int b, unsigned int c) \
299 { \ 299 { \
300 build_insn(buf, insn##op, b, c, a); \ 300 build_insn(buf, insn##op, b, c, a); \
301 } 301 }
302 302
303#define I_u1u2s3(op) \ 303#define I_u1u2s3(op) \
304 static inline void i##op(u32 **buf, unsigned int a, \ 304 static inline void __init i##op(u32 **buf, unsigned int a, \
305 unsigned int b, signed int c) \ 305 unsigned int b, signed int c) \
306 { \ 306 { \
307 build_insn(buf, insn##op, a, b, c); \ 307 build_insn(buf, insn##op, a, b, c); \
308 } 308 }
309 309
310#define I_u2s3u1(op) \ 310#define I_u2s3u1(op) \
311 static inline void i##op(u32 **buf, unsigned int a, \ 311 static inline void __init i##op(u32 **buf, unsigned int a, \
312 signed int b, unsigned int c) \ 312 signed int b, unsigned int c) \
313 { \ 313 { \
314 build_insn(buf, insn##op, c, a, b); \ 314 build_insn(buf, insn##op, c, a, b); \
315 } 315 }
316 316
317#define I_u2u1s3(op) \ 317#define I_u2u1s3(op) \
318 static inline void i##op(u32 **buf, unsigned int a, \ 318 static inline void __init i##op(u32 **buf, unsigned int a, \
319 unsigned int b, signed int c) \ 319 unsigned int b, signed int c) \
320 { \ 320 { \
321 build_insn(buf, insn##op, b, a, c); \ 321 build_insn(buf, insn##op, b, a, c); \
322 } 322 }
323 323
324#define I_u1u2(op) \ 324#define I_u1u2(op) \
325 static inline void i##op(u32 **buf, unsigned int a, \ 325 static inline void __init i##op(u32 **buf, unsigned int a, \
326 unsigned int b) \ 326 unsigned int b) \
327 { \ 327 { \
328 build_insn(buf, insn##op, a, b); \ 328 build_insn(buf, insn##op, a, b); \
329 } 329 }
330 330
331#define I_u1s2(op) \ 331#define I_u1s2(op) \
332 static inline void i##op(u32 **buf, unsigned int a, \ 332 static inline void __init i##op(u32 **buf, unsigned int a, \
333 signed int b) \ 333 signed int b) \
334 { \ 334 { \
335 build_insn(buf, insn##op, a, b); \ 335 build_insn(buf, insn##op, a, b); \
336 } 336 }
337 337
338#define I_u1(op) \ 338#define I_u1(op) \
339 static inline void i##op(u32 **buf, unsigned int a) \ 339 static inline void __init i##op(u32 **buf, unsigned int a) \
340 { \ 340 { \
341 build_insn(buf, insn##op, a); \ 341 build_insn(buf, insn##op, a); \
342 } 342 }
343 343
344#define I_0(op) \ 344#define I_0(op) \
345 static inline void i##op(u32 **buf) \ 345 static inline void __init i##op(u32 **buf) \
346 { \ 346 { \
347 build_insn(buf, insn##op); \ 347 build_insn(buf, insn##op); \
348 } 348 }
@@ -623,42 +623,42 @@ static __init int __attribute__((unused)) insn_has_bdelay(struct reloc *rel,
623} 623}
624 624
625/* convenience functions for labeled branches */ 625/* convenience functions for labeled branches */
626static void __attribute__((unused)) il_bltz(u32 **p, struct reloc **r, 626static void __init __attribute__((unused))
627 unsigned int reg, enum label_id l) 627 il_bltz(u32 **p, struct reloc **r, unsigned int reg, enum label_id l)
628{ 628{
629 r_mips_pc16(r, *p, l); 629 r_mips_pc16(r, *p, l);
630 i_bltz(p, reg, 0); 630 i_bltz(p, reg, 0);
631} 631}
632 632
633static void __attribute__((unused)) il_b(u32 **p, struct reloc **r, 633static void __init __attribute__((unused)) il_b(u32 **p, struct reloc **r,
634 enum label_id l) 634 enum label_id l)
635{ 635{
636 r_mips_pc16(r, *p, l); 636 r_mips_pc16(r, *p, l);
637 i_b(p, 0); 637 i_b(p, 0);
638} 638}
639 639
640static void il_beqz(u32 **p, struct reloc **r, unsigned int reg, 640static void __init il_beqz(u32 **p, struct reloc **r, unsigned int reg,
641 enum label_id l) 641 enum label_id l)
642{ 642{
643 r_mips_pc16(r, *p, l); 643 r_mips_pc16(r, *p, l);
644 i_beqz(p, reg, 0); 644 i_beqz(p, reg, 0);
645} 645}
646 646
647static void __attribute__((unused)) 647static void __init __attribute__((unused))
648il_beqzl(u32 **p, struct reloc **r, unsigned int reg, enum label_id l) 648il_beqzl(u32 **p, struct reloc **r, unsigned int reg, enum label_id l)
649{ 649{
650 r_mips_pc16(r, *p, l); 650 r_mips_pc16(r, *p, l);
651 i_beqzl(p, reg, 0); 651 i_beqzl(p, reg, 0);
652} 652}
653 653
654static void il_bnez(u32 **p, struct reloc **r, unsigned int reg, 654static void __init il_bnez(u32 **p, struct reloc **r, unsigned int reg,
655 enum label_id l) 655 enum label_id l)
656{ 656{
657 r_mips_pc16(r, *p, l); 657 r_mips_pc16(r, *p, l);
658 i_bnez(p, reg, 0); 658 i_bnez(p, reg, 0);
659} 659}
660 660
661static void il_bgezl(u32 **p, struct reloc **r, unsigned int reg, 661static void __init il_bgezl(u32 **p, struct reloc **r, unsigned int reg,
662 enum label_id l) 662 enum label_id l)
663{ 663{
664 r_mips_pc16(r, *p, l); 664 r_mips_pc16(r, *p, l);
diff --git a/arch/mips/momentum/jaguar_atx/ja-console.c b/arch/mips/momentum/jaguar_atx/ja-console.c
index da6e1ed34db1..2292d0ec47fc 100644
--- a/arch/mips/momentum/jaguar_atx/ja-console.c
+++ b/arch/mips/momentum/jaguar_atx/ja-console.c
@@ -93,7 +93,7 @@ static void inline ja_console_probe(void)
93 up.uartclk = JAGUAR_ATX_UART_CLK; 93 up.uartclk = JAGUAR_ATX_UART_CLK;
94 up.regshift = 2; 94 up.regshift = 2;
95 up.iotype = UPIO_MEM; 95 up.iotype = UPIO_MEM;
96 up.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 96 up.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
97 up.line = 0; 97 up.line = 0;
98 98
99 if (early_serial_setup(&up)) 99 if (early_serial_setup(&up))
diff --git a/arch/mips/momentum/jaguar_atx/prom.c b/arch/mips/momentum/jaguar_atx/prom.c
index aae7a802767a..1cadaa92946a 100644
--- a/arch/mips/momentum/jaguar_atx/prom.c
+++ b/arch/mips/momentum/jaguar_atx/prom.c
@@ -21,10 +21,10 @@
21#include <linux/mm.h> 21#include <linux/mm.h>
22#include <linux/sched.h> 22#include <linux/sched.h>
23#include <linux/bootmem.h> 23#include <linux/bootmem.h>
24#include <linux/mv643xx.h>
24 25
25#include <asm/addrspace.h> 26#include <asm/addrspace.h>
26#include <asm/bootinfo.h> 27#include <asm/bootinfo.h>
27#include <asm/mv64340.h>
28#include <asm/pmon.h> 28#include <asm/pmon.h>
29 29
30#include "jaguar_atx_fpga.h" 30#include "jaguar_atx_fpga.h"
diff --git a/arch/mips/momentum/jaguar_atx/setup.c b/arch/mips/momentum/jaguar_atx/setup.c
index bab192ddc185..2699917b640a 100644
--- a/arch/mips/momentum/jaguar_atx/setup.c
+++ b/arch/mips/momentum/jaguar_atx/setup.c
@@ -2,7 +2,7 @@
2 * BRIEF MODULE DESCRIPTION 2 * BRIEF MODULE DESCRIPTION
3 * Momentum Computer Jaguar-ATX board dependent boot routines 3 * Momentum Computer Jaguar-ATX board dependent boot routines
4 * 4 *
5 * Copyright (C) 1996, 1997, 2001, 2004 Ralf Baechle (ralf@linux-mips.org) 5 * Copyright (C) 1996, 1997, 2001, 04, 06 Ralf Baechle (ralf@linux-mips.org)
6 * Copyright (C) 2000 RidgeRun, Inc. 6 * Copyright (C) 2000 RidgeRun, Inc.
7 * Copyright (C) 2001 Red Hat, Inc. 7 * Copyright (C) 2001 Red Hat, Inc.
8 * Copyright (C) 2002 Momentum Computer 8 * Copyright (C) 2002 Momentum Computer
@@ -50,10 +50,13 @@
50#include <linux/pci.h> 50#include <linux/pci.h>
51#include <linux/swap.h> 51#include <linux/swap.h>
52#include <linux/ioport.h> 52#include <linux/ioport.h>
53#include <linux/pm.h>
53#include <linux/sched.h> 54#include <linux/sched.h>
54#include <linux/interrupt.h> 55#include <linux/interrupt.h>
55#include <linux/timex.h> 56#include <linux/timex.h>
56#include <linux/vmalloc.h> 57#include <linux/vmalloc.h>
58#include <linux/mv643xx.h>
59
57#include <asm/time.h> 60#include <asm/time.h>
58#include <asm/bootinfo.h> 61#include <asm/bootinfo.h>
59#include <asm/page.h> 62#include <asm/page.h>
@@ -63,7 +66,6 @@
63#include <asm/ptrace.h> 66#include <asm/ptrace.h>
64#include <asm/reboot.h> 67#include <asm/reboot.h>
65#include <asm/tlbflush.h> 68#include <asm/tlbflush.h>
66#include <asm/mv64340.h>
67 69
68#include "jaguar_atx_fpga.h" 70#include "jaguar_atx_fpga.h"
69 71
@@ -365,7 +367,7 @@ void __init plat_setup(void)
365 367
366 _machine_restart = momenco_jaguar_restart; 368 _machine_restart = momenco_jaguar_restart;
367 _machine_halt = momenco_jaguar_halt; 369 _machine_halt = momenco_jaguar_halt;
368 _machine_power_off = momenco_jaguar_power_off; 370 pm_power_off = momenco_jaguar_power_off;
369 371
370 /* 372 /*
371 * initrd_start = (ulong)jaguar_initrd_start; 373 * initrd_start = (ulong)jaguar_initrd_start;
diff --git a/arch/mips/momentum/ocelot_3/setup.c b/arch/mips/momentum/ocelot_3/setup.c
index c9b7ff8148ec..f95677f4f06f 100644
--- a/arch/mips/momentum/ocelot_3/setup.c
+++ b/arch/mips/momentum/ocelot_3/setup.c
@@ -57,6 +57,8 @@
57#include <linux/timex.h> 57#include <linux/timex.h>
58#include <linux/bootmem.h> 58#include <linux/bootmem.h>
59#include <linux/mv643xx.h> 59#include <linux/mv643xx.h>
60#include <linux/pm.h>
61
60#include <asm/time.h> 62#include <asm/time.h>
61#include <asm/page.h> 63#include <asm/page.h>
62#include <asm/bootinfo.h> 64#include <asm/bootinfo.h>
@@ -321,7 +323,7 @@ void __init plat_setup(void)
321 323
322 _machine_restart = momenco_ocelot_restart; 324 _machine_restart = momenco_ocelot_restart;
323 _machine_halt = momenco_ocelot_halt; 325 _machine_halt = momenco_ocelot_halt;
324 _machine_power_off = momenco_ocelot_power_off; 326 pm_power_off = momenco_ocelot_power_off;
325 327
326 /* Wired TLB entries */ 328 /* Wired TLB entries */
327 setup_wired_tlb_entries(); 329 setup_wired_tlb_entries();
diff --git a/arch/mips/momentum/ocelot_c/irq.c b/arch/mips/momentum/ocelot_c/irq.c
index 300fe8e4fbe8..a5764bc20e36 100644
--- a/arch/mips/momentum/ocelot_c/irq.c
+++ b/arch/mips/momentum/ocelot_c/irq.c
@@ -41,11 +41,11 @@
41#include <linux/slab.h> 41#include <linux/slab.h>
42#include <linux/random.h> 42#include <linux/random.h>
43#include <linux/bitops.h> 43#include <linux/bitops.h>
44#include <linux/mv643xx.h>
44#include <asm/bootinfo.h> 45#include <asm/bootinfo.h>
45#include <asm/io.h> 46#include <asm/io.h>
46#include <asm/irq_cpu.h> 47#include <asm/irq_cpu.h>
47#include <asm/mipsregs.h> 48#include <asm/mipsregs.h>
48#include <asm/mv64340.h>
49#include <asm/system.h> 49#include <asm/system.h>
50 50
51extern asmlinkage void ocelot_handle_int(void); 51extern asmlinkage void ocelot_handle_int(void);
diff --git a/arch/mips/momentum/ocelot_c/prom.c b/arch/mips/momentum/ocelot_c/prom.c
index 5b6809724b15..e92364482c7b 100644
--- a/arch/mips/momentum/ocelot_c/prom.c
+++ b/arch/mips/momentum/ocelot_c/prom.c
@@ -19,10 +19,10 @@
19#include <linux/mm.h> 19#include <linux/mm.h>
20#include <linux/sched.h> 20#include <linux/sched.h>
21#include <linux/bootmem.h> 21#include <linux/bootmem.h>
22#include <linux/mv643xx.h>
22 23
23#include <asm/addrspace.h> 24#include <asm/addrspace.h>
24#include <asm/bootinfo.h> 25#include <asm/bootinfo.h>
25#include <asm/mv64340.h>
26#include <asm/pmon.h> 26#include <asm/pmon.h>
27 27
28#include "ocelot_c_fpga.h" 28#include "ocelot_c_fpga.h"
diff --git a/arch/mips/momentum/ocelot_c/setup.c b/arch/mips/momentum/ocelot_c/setup.c
index 2755c1547473..bd02e60d037a 100644
--- a/arch/mips/momentum/ocelot_c/setup.c
+++ b/arch/mips/momentum/ocelot_c/setup.c
@@ -51,8 +51,11 @@
51#include <linux/sched.h> 51#include <linux/sched.h>
52#include <linux/interrupt.h> 52#include <linux/interrupt.h>
53#include <linux/pci.h> 53#include <linux/pci.h>
54#include <linux/pm.h>
54#include <linux/timex.h> 55#include <linux/timex.h>
55#include <linux/vmalloc.h> 56#include <linux/vmalloc.h>
57#include <linux/mv643xx.h>
58
56#include <asm/time.h> 59#include <asm/time.h>
57#include <asm/bootinfo.h> 60#include <asm/bootinfo.h>
58#include <asm/page.h> 61#include <asm/page.h>
@@ -62,9 +65,9 @@
62#include <asm/processor.h> 65#include <asm/processor.h>
63#include <asm/ptrace.h> 66#include <asm/ptrace.h>
64#include <asm/reboot.h> 67#include <asm/reboot.h>
68#include <asm/marvell.h>
65#include <linux/bootmem.h> 69#include <linux/bootmem.h>
66#include <linux/blkdev.h> 70#include <linux/blkdev.h>
67#include <asm/mv64340.h>
68#include "ocelot_c_fpga.h" 71#include "ocelot_c_fpga.h"
69 72
70unsigned long marvell_base; 73unsigned long marvell_base;
@@ -236,7 +239,7 @@ void __init plat_setup(void)
236 239
237 _machine_restart = momenco_ocelot_restart; 240 _machine_restart = momenco_ocelot_restart;
238 _machine_halt = momenco_ocelot_halt; 241 _machine_halt = momenco_ocelot_halt;
239 _machine_power_off = momenco_ocelot_power_off; 242 pm_power_off = momenco_ocelot_power_off;
240 243
241 /* 244 /*
242 * initrd_start = (ulong)ocelot_initrd_start; 245 * initrd_start = (ulong)ocelot_initrd_start;
@@ -250,22 +253,22 @@ void __init plat_setup(void)
250 /* shut down ethernet ports, just to be sure our memory doesn't get 253 /* shut down ethernet ports, just to be sure our memory doesn't get
251 * corrupted by random ethernet traffic. 254 * corrupted by random ethernet traffic.
252 */ 255 */
253 MV_WRITE(MV64340_ETH_TRANSMIT_QUEUE_COMMAND_REG(0), 0xff << 8); 256 MV_WRITE(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(0), 0xff << 8);
254 MV_WRITE(MV64340_ETH_TRANSMIT_QUEUE_COMMAND_REG(1), 0xff << 8); 257 MV_WRITE(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(1), 0xff << 8);
255 MV_WRITE(MV64340_ETH_RECEIVE_QUEUE_COMMAND_REG(0), 0xff << 8); 258 MV_WRITE(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(0), 0xff << 8);
256 MV_WRITE(MV64340_ETH_RECEIVE_QUEUE_COMMAND_REG(1), 0xff << 8); 259 MV_WRITE(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(1), 0xff << 8);
257 do {} 260 do {}
258 while (MV_READ(MV64340_ETH_RECEIVE_QUEUE_COMMAND_REG(0)) & 0xff); 261 while (MV_READ(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(0)) & 0xff);
259 do {} 262 do {}
260 while (MV_READ(MV64340_ETH_RECEIVE_QUEUE_COMMAND_REG(1)) & 0xff); 263 while (MV_READ(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(1)) & 0xff);
261 do {} 264 do {}
262 while (MV_READ(MV64340_ETH_TRANSMIT_QUEUE_COMMAND_REG(0)) & 0xff); 265 while (MV_READ(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(0)) & 0xff);
263 do {} 266 do {}
264 while (MV_READ(MV64340_ETH_TRANSMIT_QUEUE_COMMAND_REG(1)) & 0xff); 267 while (MV_READ(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(1)) & 0xff);
265 MV_WRITE(MV64340_ETH_PORT_SERIAL_CONTROL_REG(0), 268 MV_WRITE(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(0),
266 MV_READ(MV64340_ETH_PORT_SERIAL_CONTROL_REG(0)) & ~1); 269 MV_READ(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(0)) & ~1);
267 MV_WRITE(MV64340_ETH_PORT_SERIAL_CONTROL_REG(1), 270 MV_WRITE(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(1),
268 MV_READ(MV64340_ETH_PORT_SERIAL_CONTROL_REG(1)) & ~1); 271 MV_READ(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(1)) & ~1);
269 272
270 /* Turn off the Bit-Error LED */ 273 /* Turn off the Bit-Error LED */
271 OCELOT_FPGA_WRITE(0x80, CLR); 274 OCELOT_FPGA_WRITE(0x80, CLR);
diff --git a/arch/mips/momentum/ocelot_g/setup.c b/arch/mips/momentum/ocelot_g/setup.c
index 6336751391c3..fed4e8eee116 100644
--- a/arch/mips/momentum/ocelot_g/setup.c
+++ b/arch/mips/momentum/ocelot_g/setup.c
@@ -47,8 +47,10 @@
47#include <linux/sched.h> 47#include <linux/sched.h>
48#include <linux/interrupt.h> 48#include <linux/interrupt.h>
49#include <linux/pci.h> 49#include <linux/pci.h>
50#include <linux/pm.h>
50#include <linux/timex.h> 51#include <linux/timex.h>
51#include <linux/vmalloc.h> 52#include <linux/vmalloc.h>
53
52#include <asm/time.h> 54#include <asm/time.h>
53#include <asm/bootinfo.h> 55#include <asm/bootinfo.h>
54#include <asm/page.h> 56#include <asm/page.h>
@@ -169,7 +171,7 @@ void __init plat_setup(void)
169 171
170 _machine_restart = momenco_ocelot_restart; 172 _machine_restart = momenco_ocelot_restart;
171 _machine_halt = momenco_ocelot_halt; 173 _machine_halt = momenco_ocelot_halt;
172 _machine_power_off = momenco_ocelot_power_off; 174 pm_power_off = momenco_ocelot_power_off;
173 175
174 /* 176 /*
175 * initrd_start = (ulong)ocelot_initrd_start; 177 * initrd_start = (ulong)ocelot_initrd_start;
diff --git a/arch/mips/oprofile/Makefile b/arch/mips/oprofile/Makefile
index 354261d37d62..0a50aad5bbe4 100644
--- a/arch/mips/oprofile/Makefile
+++ b/arch/mips/oprofile/Makefile
@@ -12,4 +12,5 @@ oprofile-y := $(DRIVER_OBJS) common.o
12 12
13oprofile-$(CONFIG_CPU_MIPS32) += op_model_mipsxx.o 13oprofile-$(CONFIG_CPU_MIPS32) += op_model_mipsxx.o
14oprofile-$(CONFIG_CPU_MIPS64) += op_model_mipsxx.o 14oprofile-$(CONFIG_CPU_MIPS64) += op_model_mipsxx.o
15oprofile-$(CONFIG_CPU_SB1) += op_model_mipsxx.o
15oprofile-$(CONFIG_CPU_RM9000) += op_model_rm9000.o 16oprofile-$(CONFIG_CPU_RM9000) += op_model_rm9000.o
diff --git a/arch/mips/oprofile/common.c b/arch/mips/oprofile/common.c
index 53f9889b30ed..935dd851f480 100644
--- a/arch/mips/oprofile/common.c
+++ b/arch/mips/oprofile/common.c
@@ -79,6 +79,9 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
79 case CPU_20KC: 79 case CPU_20KC:
80 case CPU_24K: 80 case CPU_24K:
81 case CPU_25KF: 81 case CPU_25KF:
82 case CPU_34K:
83 case CPU_SB1:
84 case CPU_SB1A:
82 lmodel = &op_model_mipsxx; 85 lmodel = &op_model_mipsxx;
83 break; 86 break;
84 87
diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c
index 1d1eee407faf..95d488ca0754 100644
--- a/arch/mips/oprofile/op_model_mipsxx.c
+++ b/arch/mips/oprofile/op_model_mipsxx.c
@@ -201,10 +201,21 @@ static int __init mipsxx_init(void)
201 op_model_mipsxx.cpu_type = "mips/25K"; 201 op_model_mipsxx.cpu_type = "mips/25K";
202 break; 202 break;
203 203
204#ifndef CONFIG_SMP
205 case CPU_34K:
206 op_model_mipsxx.cpu_type = "mips/34K";
207 break;
208#endif
209
204 case CPU_5KC: 210 case CPU_5KC:
205 op_model_mipsxx.cpu_type = "mips/5K"; 211 op_model_mipsxx.cpu_type = "mips/5K";
206 break; 212 break;
207 213
214 case CPU_SB1:
215 case CPU_SB1A:
216 op_model_mipsxx.cpu_type = "mips/sb1";
217 break;
218
208 default: 219 default:
209 printk(KERN_ERR "Profiling unsupported for this CPU\n"); 220 printk(KERN_ERR "Profiling unsupported for this CPU\n");
210 221
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile
index 741e67c9195a..16205b587338 100644
--- a/arch/mips/pci/Makefile
+++ b/arch/mips/pci/Makefile
@@ -46,6 +46,7 @@ obj-$(CONFIG_PMC_YOSEMITE) += fixup-yosemite.o ops-titan.o ops-titan-ht.o \
46obj-$(CONFIG_SGI_IP27) += pci-ip27.o 46obj-$(CONFIG_SGI_IP27) += pci-ip27.o
47obj-$(CONFIG_SGI_IP32) += fixup-ip32.o ops-mace.o pci-ip32.o 47obj-$(CONFIG_SGI_IP32) += fixup-ip32.o ops-mace.o pci-ip32.o
48obj-$(CONFIG_SIBYTE_SB1250) += fixup-sb1250.o pci-sb1250.o 48obj-$(CONFIG_SIBYTE_SB1250) += fixup-sb1250.o pci-sb1250.o
49obj-$(CONFIG_SIBYTE_BCM112X) += fixup-sb1250.o pci-sb1250.o
49obj-$(CONFIG_SIBYTE_BCM1x80) += pci-bcm1480.o pci-bcm1480ht.o 50obj-$(CONFIG_SIBYTE_BCM1x80) += pci-bcm1480.o pci-bcm1480ht.o
50obj-$(CONFIG_SNI_RM200_PCI) += fixup-sni.o ops-sni.o 51obj-$(CONFIG_SNI_RM200_PCI) += fixup-sni.o ops-sni.o
51obj-$(CONFIG_TANBAC_TB0219) += fixup-tb0219.o 52obj-$(CONFIG_TANBAC_TB0219) += fixup-tb0219.o
diff --git a/arch/mips/pci/fixup-cobalt.c b/arch/mips/pci/fixup-cobalt.c
index 909292f50d06..75a01e764898 100644
--- a/arch/mips/pci/fixup-cobalt.c
+++ b/arch/mips/pci/fixup-cobalt.c
@@ -17,7 +17,7 @@
17#include <asm/io.h> 17#include <asm/io.h>
18#include <asm/gt64120.h> 18#include <asm/gt64120.h>
19 19
20#include <asm/cobalt/cobalt.h> 20#include <asm/mach-cobalt/cobalt.h>
21 21
22extern int cobalt_board_id; 22extern int cobalt_board_id;
23 23
@@ -52,7 +52,7 @@ static void qube_raq_via_bmIDE_fixup(struct pci_dev *dev)
52 pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lt); 52 pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lt);
53 if (lt < 64) 53 if (lt < 64)
54 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64); 54 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);
55 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 7); 55 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 8);
56} 56}
57 57
58DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, 58DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1,
@@ -69,7 +69,7 @@ static void qube_raq_galileo_fixup(struct pci_dev *dev)
69 * host bridge. 69 * host bridge.
70 */ 70 */
71 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64); 71 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);
72 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 7); 72 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 8);
73 73
74 /* 74 /*
75 * The code described by the comment below has been removed 75 * The code described by the comment below has been removed
diff --git a/arch/mips/pci/ops-gt64111.c b/arch/mips/pci/ops-gt64111.c
index c1807934768d..13de45940b19 100644
--- a/arch/mips/pci/ops-gt64111.c
+++ b/arch/mips/pci/ops-gt64111.c
@@ -15,7 +15,7 @@
15#include <asm/io.h> 15#include <asm/io.h>
16#include <asm/gt64120.h> 16#include <asm/gt64120.h>
17 17
18#include <asm/cobalt/cobalt.h> 18#include <asm/mach-cobalt/cobalt.h>
19 19
20/* 20/*
21 * Device 31 on the GT64111 is used to generate PCI special 21 * Device 31 on the GT64111 is used to generate PCI special
diff --git a/arch/mips/pci/pci-bcm1480.c b/arch/mips/pci/pci-bcm1480.c
index f194b4e4f86a..ca975e7d32ff 100644
--- a/arch/mips/pci/pci-bcm1480.c
+++ b/arch/mips/pci/pci-bcm1480.c
@@ -234,11 +234,9 @@ static int __init bcm1480_pcibios_init(void)
234 234
235 /* turn on ExpMemEn */ 235 /* turn on ExpMemEn */
236 cmdreg = READCFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40)); 236 cmdreg = READCFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40));
237 printk("PCIFeatureCtrl = %x\n", cmdreg);
238 WRITECFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40), 237 WRITECFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40),
239 cmdreg | 0x10); 238 cmdreg | 0x10);
240 cmdreg = READCFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40)); 239 cmdreg = READCFG32(CFGOFFSET(0, PCI_DEVFN(PCI_BRIDGE_DEVICE, 0), 0x40));
241 printk("PCIFeatureCtrl = %x\n", cmdreg);
242 240
243 /* 241 /*
244 * Establish mappings in KSEG2 (kernel virtual) to PCI I/O 242 * Establish mappings in KSEG2 (kernel virtual) to PCI I/O
diff --git a/arch/mips/pci/pci-ocelot-c.c b/arch/mips/pci/pci-ocelot-c.c
index 1d84d36e034d..027759f7c904 100644
--- a/arch/mips/pci/pci-ocelot-c.c
+++ b/arch/mips/pci/pci-ocelot-c.c
@@ -3,15 +3,17 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org) 6 * Copyright (C) 2004, 06 by Ralf Baechle (ralf@linux-mips.org)
7 */ 7 */
8 8
9#include <linux/types.h> 9#include <linux/types.h>
10#include <linux/pci.h> 10#include <linux/pci.h>
11#include <asm/mv64340.h> 11#include <linux/mv643xx.h>
12 12
13#include <linux/init.h> 13#include <linux/init.h>
14 14
15#include <asm/marvell.h>
16
15/* 17/*
16 * We assume the address ranges have already been setup appropriately by 18 * We assume the address ranges have already been setup appropriately by
17 * the firmware. PMON in case of the Ocelot C does that. 19 * the firmware. PMON in case of the Ocelot C does that.
diff --git a/arch/mips/philips/pnx8550/common/platform.c b/arch/mips/philips/pnx8550/common/platform.c
index 8aa9bd65b45e..a592260fd673 100644
--- a/arch/mips/philips/pnx8550/common/platform.c
+++ b/arch/mips/philips/pnx8550/common/platform.c
@@ -66,28 +66,28 @@ struct ip3106_port ip3106_ports[] = {
66 [0] = { 66 [0] = {
67 .port = { 67 .port = {
68 .type = PORT_IP3106, 68 .type = PORT_IP3106,
69 .iotype = SERIAL_IO_MEM, 69 .iotype = UPIO_MEM,
70 .membase = (void __iomem *)PNX8550_UART_PORT0, 70 .membase = (void __iomem *)PNX8550_UART_PORT0,
71 .mapbase = PNX8550_UART_PORT0, 71 .mapbase = PNX8550_UART_PORT0,
72 .irq = PNX8550_UART_INT(0), 72 .irq = PNX8550_UART_INT(0),
73 .uartclk = 3692300, 73 .uartclk = 3692300,
74 .fifosize = 16, 74 .fifosize = 16,
75 .ops = &ip3106_pops, 75 .ops = &ip3106_pops,
76 .flags = ASYNC_BOOT_AUTOCONF, 76 .flags = UPF_BOOT_AUTOCONF,
77 .line = 0, 77 .line = 0,
78 }, 78 },
79 }, 79 },
80 [1] = { 80 [1] = {
81 .port = { 81 .port = {
82 .type = PORT_IP3106, 82 .type = PORT_IP3106,
83 .iotype = SERIAL_IO_MEM, 83 .iotype = UPIO_MEM,
84 .membase = (void __iomem *)PNX8550_UART_PORT1, 84 .membase = (void __iomem *)PNX8550_UART_PORT1,
85 .mapbase = PNX8550_UART_PORT1, 85 .mapbase = PNX8550_UART_PORT1,
86 .irq = PNX8550_UART_INT(1), 86 .irq = PNX8550_UART_INT(1),
87 .uartclk = 3692300, 87 .uartclk = 3692300,
88 .fifosize = 16, 88 .fifosize = 16,
89 .ops = &ip3106_pops, 89 .ops = &ip3106_pops,
90 .flags = ASYNC_BOOT_AUTOCONF, 90 .flags = UPF_BOOT_AUTOCONF,
91 .line = 1, 91 .line = 1,
92 }, 92 },
93 }, 93 },
diff --git a/arch/mips/philips/pnx8550/common/setup.c b/arch/mips/philips/pnx8550/common/setup.c
index ee6bf72094f6..0d8a77619391 100644
--- a/arch/mips/philips/pnx8550/common/setup.c
+++ b/arch/mips/philips/pnx8550/common/setup.c
@@ -25,6 +25,7 @@
25#include <linux/delay.h> 25#include <linux/delay.h>
26#include <linux/interrupt.h> 26#include <linux/interrupt.h>
27#include <linux/serial_ip3106.h> 27#include <linux/serial_ip3106.h>
28#include <linux/pm.h>
28 29
29#include <asm/cpu.h> 30#include <asm/cpu.h>
30#include <asm/bootinfo.h> 31#include <asm/bootinfo.h>
@@ -90,7 +91,7 @@ void __init plat_setup(void)
90 91
91 _machine_restart = pnx8550_machine_restart; 92 _machine_restart = pnx8550_machine_restart;
92 _machine_halt = pnx8550_machine_halt; 93 _machine_halt = pnx8550_machine_halt;
93 _machine_power_off = pnx8550_machine_power_off; 94 pm_power_off = pnx8550_machine_power_off;
94 95
95 board_time_init = pnx8550_time_init; 96 board_time_init = pnx8550_time_init;
96 board_timer_setup = pnx8550_timer_setup; 97 board_timer_setup = pnx8550_timer_setup;
diff --git a/arch/mips/pmc-sierra/yosemite/prom.c b/arch/mips/pmc-sierra/yosemite/prom.c
index 555bfacf7647..165275c00cbb 100644
--- a/arch/mips/pmc-sierra/yosemite/prom.c
+++ b/arch/mips/pmc-sierra/yosemite/prom.c
@@ -13,6 +13,7 @@
13#include <linux/sched.h> 13#include <linux/sched.h>
14#include <linux/mm.h> 14#include <linux/mm.h>
15#include <linux/delay.h> 15#include <linux/delay.h>
16#include <linux/pm.h>
16#include <linux/smp.h> 17#include <linux/smp.h>
17 18
18#include <asm/io.h> 19#include <asm/io.h>
@@ -92,7 +93,7 @@ void __init prom_init(void)
92 /* Callbacks for halt, restart */ 93 /* Callbacks for halt, restart */
93 _machine_restart = (void (*)(char *)) prom_exit; 94 _machine_restart = (void (*)(char *)) prom_exit;
94 _machine_halt = prom_halt; 95 _machine_halt = prom_halt;
95 _machine_power_off = prom_halt; 96 pm_power_off = prom_halt;
96 97
97 debug_vectors = cv; 98 debug_vectors = cv;
98 arcs_cmdline[0] = '\0'; 99 arcs_cmdline[0] = '\0';
diff --git a/arch/mips/pmc-sierra/yosemite/setup.c b/arch/mips/pmc-sierra/yosemite/setup.c
index 059755b5ed57..8bce711575de 100644
--- a/arch/mips/pmc-sierra/yosemite/setup.c
+++ b/arch/mips/pmc-sierra/yosemite/setup.c
@@ -185,7 +185,7 @@ static void __init py_uart_setup(void)
185 up.uartclk = TITAN_UART_CLK; 185 up.uartclk = TITAN_UART_CLK;
186 up.regshift = 0; 186 up.regshift = 0;
187 up.iotype = UPIO_MEM; 187 up.iotype = UPIO_MEM;
188 up.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 188 up.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
189 up.line = 0; 189 up.line = 0;
190 190
191 if (early_serial_setup(&up)) 191 if (early_serial_setup(&up))
diff --git a/arch/mips/pmc-sierra/yosemite/smp.c b/arch/mips/pmc-sierra/yosemite/smp.c
index f17f575f58f0..c197311e15d3 100644
--- a/arch/mips/pmc-sierra/yosemite/smp.c
+++ b/arch/mips/pmc-sierra/yosemite/smp.c
@@ -50,37 +50,25 @@ void __init prom_grab_secondary(void)
50 * We don't want to start the secondary CPU yet nor do we have a nice probing 50 * We don't want to start the secondary CPU yet nor do we have a nice probing
51 * feature in PMON so we just assume presence of the secondary core. 51 * feature in PMON so we just assume presence of the secondary core.
52 */ 52 */
53static char maxcpus_string[] __initdata = 53void __init plat_smp_setup(void)
54 KERN_WARNING "max_cpus set to 0; using 1 instead\n";
55
56void __init prom_prepare_cpus(unsigned int max_cpus)
57{ 54{
58 int enabled = 0, i; 55 int i;
59
60 if (max_cpus == 0) {
61 printk(maxcpus_string);
62 max_cpus = 1;
63 }
64 56
65 cpus_clear(phys_cpu_present_map); 57 cpus_clear(phys_cpu_present_map);
66 58
67 for (i = 0; i < 2; i++) { 59 for (i = 0; i < 2; i++) {
68 if (i == max_cpus)
69 break;
70
71 /*
72 * The boot CPU
73 */
74 cpu_set(i, phys_cpu_present_map); 60 cpu_set(i, phys_cpu_present_map);
75 __cpu_number_map[i] = i; 61 __cpu_number_map[i] = i;
76 __cpu_logical_map[i] = i; 62 __cpu_logical_map[i] = i;
77 enabled++;
78 } 63 }
64}
79 65
66void __init plat_prepare_cpus(unsigned int max_cpus)
67{
80 /* 68 /*
81 * Be paranoid. Enable the IPI only if we're really about to go SMP. 69 * Be paranoid. Enable the IPI only if we're really about to go SMP.
82 */ 70 */
83 if (enabled > 1) 71 if (cpus_weight(cpu_possible_map))
84 set_c0_status(STATUSF_IP5); 72 set_c0_status(STATUSF_IP5);
85} 73}
86 74
@@ -94,7 +82,7 @@ void __init prom_prepare_cpus(unsigned int max_cpus)
94void prom_boot_secondary(int cpu, struct task_struct *idle) 82void prom_boot_secondary(int cpu, struct task_struct *idle)
95{ 83{
96 unsigned long gp = (unsigned long) task_thread_info(idle); 84 unsigned long gp = (unsigned long) task_thread_info(idle);
97 unsigned long sp = __KSTK_TOP(idle); 85 unsigned long sp = __KSTK_TOS(idle);
98 86
99 secondary_sp = sp; 87 secondary_sp = sp;
100 secondary_gp = gp; 88 secondary_gp = gp;
diff --git a/arch/mips/sgi-ip22/ip22-reset.c b/arch/mips/sgi-ip22/ip22-reset.c
index 214ffd2e98a3..92a3b3c15ed3 100644
--- a/arch/mips/sgi-ip22/ip22-reset.c
+++ b/arch/mips/sgi-ip22/ip22-reset.c
@@ -3,8 +3,9 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1997, 1998, 2001, 2003 by Ralf Baechle 6 * Copyright (C) 1997, 1998, 2001, 03, 05, 06 by Ralf Baechle
7 */ 7 */
8#include <linux/linkage.h>
8#include <linux/init.h> 9#include <linux/init.h>
9#include <linux/ds1286.h> 10#include <linux/ds1286.h>
10#include <linux/module.h> 11#include <linux/module.h>
@@ -12,6 +13,7 @@
12#include <linux/kernel.h> 13#include <linux/kernel.h>
13#include <linux/sched.h> 14#include <linux/sched.h>
14#include <linux/notifier.h> 15#include <linux/notifier.h>
16#include <linux/pm.h>
15#include <linux/timer.h> 17#include <linux/timer.h>
16 18
17#include <asm/io.h> 19#include <asm/io.h>
@@ -41,28 +43,10 @@ static struct timer_list power_timer, blink_timer, debounce_timer, volume_timer;
41 43
42#define MACHINE_PANICED 1 44#define MACHINE_PANICED 1
43#define MACHINE_SHUTTING_DOWN 2 45#define MACHINE_SHUTTING_DOWN 2
44static int machine_state = 0;
45 46
46static void sgi_machine_restart(char *command) __attribute__((noreturn)); 47static int machine_state;
47static void sgi_machine_halt(void) __attribute__((noreturn));
48static void sgi_machine_power_off(void) __attribute__((noreturn));
49 48
50static void sgi_machine_restart(char *command) 49static void ATTRIB_NORET sgi_machine_power_off(void)
51{
52 if (machine_state & MACHINE_SHUTTING_DOWN)
53 sgi_machine_power_off();
54 sgimc->cpuctrl0 |= SGIMC_CCTRL0_SYSINIT;
55 while (1);
56}
57
58static void sgi_machine_halt(void)
59{
60 if (machine_state & MACHINE_SHUTTING_DOWN)
61 sgi_machine_power_off();
62 ArcEnterInteractiveMode();
63}
64
65static void sgi_machine_power_off(void)
66{ 50{
67 unsigned int tmp; 51 unsigned int tmp;
68 52
@@ -84,6 +68,21 @@ static void sgi_machine_power_off(void)
84 } 68 }
85} 69}
86 70
71static void ATTRIB_NORET sgi_machine_restart(char *command)
72{
73 if (machine_state & MACHINE_SHUTTING_DOWN)
74 sgi_machine_power_off();
75 sgimc->cpuctrl0 |= SGIMC_CCTRL0_SYSINIT;
76 while (1);
77}
78
79static void ATTRIB_NORET sgi_machine_halt(void)
80{
81 if (machine_state & MACHINE_SHUTTING_DOWN)
82 sgi_machine_power_off();
83 ArcEnterInteractiveMode();
84}
85
87static void power_timeout(unsigned long data) 86static void power_timeout(unsigned long data)
88{ 87{
89 sgi_machine_power_off(); 88 sgi_machine_power_off();
@@ -95,7 +94,7 @@ static void blink_timeout(unsigned long data)
95 sgi_ioc_reset ^= (SGIOC_RESET_LC0OFF|SGIOC_RESET_LC1OFF); 94 sgi_ioc_reset ^= (SGIOC_RESET_LC0OFF|SGIOC_RESET_LC1OFF);
96 sgioc->reset = sgi_ioc_reset; 95 sgioc->reset = sgi_ioc_reset;
97 96
98 mod_timer(&blink_timer, jiffies+data); 97 mod_timer(&blink_timer, jiffies + data);
99} 98}
100 99
101static void debounce(unsigned long data) 100static void debounce(unsigned long data)
@@ -103,7 +102,7 @@ static void debounce(unsigned long data)
103 del_timer(&debounce_timer); 102 del_timer(&debounce_timer);
104 if (sgint->istat1 & SGINT_ISTAT1_PWR) { 103 if (sgint->istat1 & SGINT_ISTAT1_PWR) {
105 /* Interrupt still being sent. */ 104 /* Interrupt still being sent. */
106 debounce_timer.expires = jiffies + 5; /* 0.05s */ 105 debounce_timer.expires = jiffies + (HZ / 20); /* 0.05s */
107 add_timer(&debounce_timer); 106 add_timer(&debounce_timer);
108 107
109 sgioc->panel = SGIOC_PANEL_POWERON | SGIOC_PANEL_POWERINTR | 108 sgioc->panel = SGIOC_PANEL_POWERON | SGIOC_PANEL_POWERINTR |
@@ -151,7 +150,7 @@ static inline void volume_up_button(unsigned long data)
151 indy_volume_button(1); 150 indy_volume_button(1);
152 151
153 if (sgint->istat1 & SGINT_ISTAT1_PWR) { 152 if (sgint->istat1 & SGINT_ISTAT1_PWR) {
154 volume_timer.expires = jiffies + 1; 153 volume_timer.expires = jiffies + (HZ / 100);
155 add_timer(&volume_timer); 154 add_timer(&volume_timer);
156 } 155 }
157} 156}
@@ -164,7 +163,7 @@ static inline void volume_down_button(unsigned long data)
164 indy_volume_button(-1); 163 indy_volume_button(-1);
165 164
166 if (sgint->istat1 & SGINT_ISTAT1_PWR) { 165 if (sgint->istat1 & SGINT_ISTAT1_PWR) {
167 volume_timer.expires = jiffies + 1; 166 volume_timer.expires = jiffies + (HZ / 100);
168 add_timer(&volume_timer); 167 add_timer(&volume_timer);
169 } 168 }
170} 169}
@@ -199,14 +198,14 @@ static irqreturn_t panel_int(int irq, void *dev_id, struct pt_regs *regs)
199 if (!(buttons & SGIOC_PANEL_VOLUPINTR)) { 198 if (!(buttons & SGIOC_PANEL_VOLUPINTR)) {
200 init_timer(&volume_timer); 199 init_timer(&volume_timer);
201 volume_timer.function = volume_up_button; 200 volume_timer.function = volume_up_button;
202 volume_timer.expires = jiffies + 1; 201 volume_timer.expires = jiffies + (HZ / 100);
203 add_timer(&volume_timer); 202 add_timer(&volume_timer);
204 } 203 }
205 /* Volume down button was pressed */ 204 /* Volume down button was pressed */
206 if (!(buttons & SGIOC_PANEL_VOLDNINTR)) { 205 if (!(buttons & SGIOC_PANEL_VOLDNINTR)) {
207 init_timer(&volume_timer); 206 init_timer(&volume_timer);
208 volume_timer.function = volume_down_button; 207 volume_timer.function = volume_down_button;
209 volume_timer.expires = jiffies + 1; 208 volume_timer.expires = jiffies + (HZ / 100);
210 add_timer(&volume_timer); 209 add_timer(&volume_timer);
211 } 210 }
212 211
@@ -234,7 +233,7 @@ static int __init reboot_setup(void)
234{ 233{
235 _machine_restart = sgi_machine_restart; 234 _machine_restart = sgi_machine_restart;
236 _machine_halt = sgi_machine_halt; 235 _machine_halt = sgi_machine_halt;
237 _machine_power_off = sgi_machine_power_off; 236 pm_power_off = sgi_machine_power_off;
238 237
239 request_irq(SGI_PANEL_IRQ, panel_int, 0, "Front Panel", NULL); 238 request_irq(SGI_PANEL_IRQ, panel_int, 0, "Front Panel", NULL);
240 init_timer(&blink_timer); 239 init_timer(&blink_timer);
diff --git a/arch/mips/sgi-ip22/ip22-setup.c b/arch/mips/sgi-ip22/ip22-setup.c
index 5e59b4c8876b..7018e1833e85 100644
--- a/arch/mips/sgi-ip22/ip22-setup.c
+++ b/arch/mips/sgi-ip22/ip22-setup.c
@@ -56,6 +56,7 @@ extern void ip22_time_init(void) __init;
56void __init plat_setup(void) 56void __init plat_setup(void)
57{ 57{
58 char *ctype; 58 char *ctype;
59 char *cserial;
59 60
60 board_be_init = ip22_be_init; 61 board_be_init = ip22_be_init;
61 ip22_time_init(); 62 ip22_time_init();
@@ -81,9 +82,14 @@ void __init plat_setup(void)
81 /* ARCS console environment variable is set to "g?" for 82 /* ARCS console environment variable is set to "g?" for
82 * graphics console, it is set to "d" for the first serial 83 * graphics console, it is set to "d" for the first serial
83 * line and "d2" for the second serial line. 84 * line and "d2" for the second serial line.
85 *
86 * Need to check if the case is 'g' but no keyboard:
87 * (ConsoleIn/Out = serial)
84 */ 88 */
85 ctype = ArcGetEnvironmentVariable("console"); 89 ctype = ArcGetEnvironmentVariable("console");
86 if (ctype && *ctype == 'd') { 90 cserial = ArcGetEnvironmentVariable("ConsoleOut");
91
92 if ((ctype && *ctype == 'd') || (cserial && *cserial == 's')) {
87 static char options[8]; 93 static char options[8];
88 char *baud = ArcGetEnvironmentVariable("dbaud"); 94 char *baud = ArcGetEnvironmentVariable("dbaud");
89 if (baud) 95 if (baud)
@@ -91,7 +97,7 @@ void __init plat_setup(void)
91 add_preferred_console("ttyS", *(ctype + 1) == '2' ? 1 : 0, 97 add_preferred_console("ttyS", *(ctype + 1) == '2' ? 1 : 0,
92 baud ? options : NULL); 98 baud ? options : NULL);
93 } else if (!ctype || *ctype != 'g') { 99 } else if (!ctype || *ctype != 'g') {
94 /* Use ARC if we don't want serial ('d') or Newport ('g'). */ 100 /* Use ARC if we don't want serial ('d') or graphics ('g'). */
95 prom_flags |= PROM_FLAG_USE_AS_CONSOLE; 101 prom_flags |= PROM_FLAG_USE_AS_CONSOLE;
96 add_preferred_console("arc", 0, NULL); 102 add_preferred_console("arc", 0, NULL);
97 } 103 }
diff --git a/arch/mips/sgi-ip27/ip27-reset.c b/arch/mips/sgi-ip27/ip27-reset.c
index 2e16be94c78b..4322db57d3c1 100644
--- a/arch/mips/sgi-ip27/ip27-reset.c
+++ b/arch/mips/sgi-ip27/ip27-reset.c
@@ -5,7 +5,7 @@
5 * 5 *
6 * Reset an IP27. 6 * Reset an IP27.
7 * 7 *
8 * Copyright (C) 1997, 1998, 1999, 2000 by Ralf Baechle 8 * Copyright (C) 1997, 1998, 1999, 2000, 06 by Ralf Baechle
9 * Copyright (C) 1999, 2000 Silicon Graphics, Inc. 9 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
10 */ 10 */
11#include <linux/config.h> 11#include <linux/config.h>
@@ -15,6 +15,7 @@
15#include <linux/smp.h> 15#include <linux/smp.h>
16#include <linux/mmzone.h> 16#include <linux/mmzone.h>
17#include <linux/nodemask.h> 17#include <linux/nodemask.h>
18#include <linux/pm.h>
18 19
19#include <asm/io.h> 20#include <asm/io.h>
20#include <asm/irq.h> 21#include <asm/irq.h>
@@ -77,5 +78,5 @@ void ip27_reboot_setup(void)
77{ 78{
78 _machine_restart = ip27_machine_restart; 79 _machine_restart = ip27_machine_restart;
79 _machine_halt = ip27_machine_halt; 80 _machine_halt = ip27_machine_halt;
80 _machine_power_off = ip27_machine_power_off; 81 pm_power_off = ip27_machine_power_off;
81} 82}
diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c
index dbef3f6b5650..09fa7f5216f0 100644
--- a/arch/mips/sgi-ip27/ip27-smp.c
+++ b/arch/mips/sgi-ip27/ip27-smp.c
@@ -140,7 +140,7 @@ static __init void intr_clear_all(nasid_t nasid)
140 REMOTE_HUB_CLR_INTR(nasid, i); 140 REMOTE_HUB_CLR_INTR(nasid, i);
141} 141}
142 142
143void __init prom_prepare_cpus(unsigned int max_cpus) 143void __init plat_smp_setup(void)
144{ 144{
145 cnodeid_t cnode; 145 cnodeid_t cnode;
146 146
@@ -161,6 +161,11 @@ void __init prom_prepare_cpus(unsigned int max_cpus)
161 alloc_cpupda(0, 0); 161 alloc_cpupda(0, 0);
162} 162}
163 163
164void __init plat_prepare_cpus(unsigned int max_cpus)
165{
166 /* We already did everything necessary earlier */
167}
168
164/* 169/*
165 * Launch a slave into smp_bootstrap(). It doesn't take an argument, and we 170 * Launch a slave into smp_bootstrap(). It doesn't take an argument, and we
166 * set sp to the kernel stack of the newly created idle process, gp to the proc 171 * set sp to the kernel stack of the newly created idle process, gp to the proc
diff --git a/arch/mips/sgi-ip32/ip32-reset.c b/arch/mips/sgi-ip32/ip32-reset.c
index 88e1f52059ff..0c948008b023 100644
--- a/arch/mips/sgi-ip32/ip32-reset.c
+++ b/arch/mips/sgi-ip32/ip32-reset.c
@@ -15,6 +15,7 @@
15#include <linux/delay.h> 15#include <linux/delay.h>
16#include <linux/ds17287rtc.h> 16#include <linux/ds17287rtc.h>
17#include <linux/interrupt.h> 17#include <linux/interrupt.h>
18#include <linux/pm.h>
18 19
19#include <asm/addrspace.h> 20#include <asm/addrspace.h>
20#include <asm/irq.h> 21#include <asm/irq.h>
@@ -188,7 +189,7 @@ static __init int ip32_reboot_setup(void)
188 189
189 _machine_restart = ip32_machine_restart; 190 _machine_restart = ip32_machine_restart;
190 _machine_halt = ip32_machine_halt; 191 _machine_halt = ip32_machine_halt;
191 _machine_power_off = ip32_machine_power_off; 192 pm_power_off = ip32_machine_power_off;
192 193
193 init_timer(&blink_timer); 194 init_timer(&blink_timer);
194 blink_timer.function = blink_timeout; 195 blink_timer.function = blink_timeout;
diff --git a/arch/mips/sgi-ip32/ip32-setup.c b/arch/mips/sgi-ip32/ip32-setup.c
index d10a269aeae1..2c38770b1e1b 100644
--- a/arch/mips/sgi-ip32/ip32-setup.c
+++ b/arch/mips/sgi-ip32/ip32-setup.c
@@ -66,11 +66,6 @@ static inline void str2eaddr(unsigned char *ea, unsigned char *str)
66#include <linux/tty.h> 66#include <linux/tty.h>
67#include <linux/serial.h> 67#include <linux/serial.h>
68#include <linux/serial_core.h> 68#include <linux/serial_core.h>
69extern int early_serial_setup(struct uart_port *port);
70
71#define STD_COM_FLAGS (ASYNC_SKIP_TEST)
72#define BASE_BAUD (1843200 / 16)
73
74#endif /* CONFIG_SERIAL_8250 */ 69#endif /* CONFIG_SERIAL_8250 */
75 70
76/* An arbitrary time; this can be decreased if reliability looks good */ 71/* An arbitrary time; this can be decreased if reliability looks good */
@@ -110,8 +105,8 @@ void __init plat_setup(void)
110 o2_serial[0].type = PORT_16550A; 105 o2_serial[0].type = PORT_16550A;
111 o2_serial[0].line = 0; 106 o2_serial[0].line = 0;
112 o2_serial[0].irq = MACEISA_SERIAL1_IRQ; 107 o2_serial[0].irq = MACEISA_SERIAL1_IRQ;
113 o2_serial[0].flags = STD_COM_FLAGS; 108 o2_serial[0].flags = UPF_SKIP_TEST;
114 o2_serial[0].uartclk = BASE_BAUD * 16; 109 o2_serial[0].uartclk = 1843200;
115 o2_serial[0].iotype = UPIO_MEM; 110 o2_serial[0].iotype = UPIO_MEM;
116 o2_serial[0].membase = (char *)&mace->isa.serial1; 111 o2_serial[0].membase = (char *)&mace->isa.serial1;
117 o2_serial[0].fifosize = 14; 112 o2_serial[0].fifosize = 14;
@@ -121,8 +116,8 @@ void __init plat_setup(void)
121 o2_serial[1].type = PORT_16550A; 116 o2_serial[1].type = PORT_16550A;
122 o2_serial[1].line = 1; 117 o2_serial[1].line = 1;
123 o2_serial[1].irq = MACEISA_SERIAL2_IRQ; 118 o2_serial[1].irq = MACEISA_SERIAL2_IRQ;
124 o2_serial[1].flags = STD_COM_FLAGS; 119 o2_serial[1].flags = UPF_SKIP_TEST;
125 o2_serial[1].uartclk = BASE_BAUD * 16; 120 o2_serial[1].uartclk = 1843200;
126 o2_serial[1].iotype = UPIO_MEM; 121 o2_serial[1].iotype = UPIO_MEM;
127 o2_serial[1].membase = (char *)&mace->isa.serial2; 122 o2_serial[1].membase = (char *)&mace->isa.serial2;
128 o2_serial[1].fifosize = 14; 123 o2_serial[1].fifosize = 14;
diff --git a/arch/mips/sibyte/Kconfig b/arch/mips/sibyte/Kconfig
index de46f62ac462..816aee7fcd25 100644
--- a/arch/mips/sibyte/Kconfig
+++ b/arch/mips/sibyte/Kconfig
@@ -102,11 +102,11 @@ config SIMULATION
102 Build a kernel suitable for running under the GDB simulator. 102 Build a kernel suitable for running under the GDB simulator.
103 Primarily adjusts the kernel's notion of time. 103 Primarily adjusts the kernel's notion of time.
104 104
105config CONFIG_SB1_CEX_ALWAYS_FATAL 105config SB1_CEX_ALWAYS_FATAL
106 bool "All cache exceptions considered fatal (no recovery attempted)" 106 bool "All cache exceptions considered fatal (no recovery attempted)"
107 depends on SIBYTE_SB1xxx_SOC 107 depends on SIBYTE_SB1xxx_SOC
108 108
109config CONFIG_SB1_CERR_STALL 109config SB1_CERR_STALL
110 bool "Stall (rather than panic) on fatal cache error" 110 bool "Stall (rather than panic) on fatal cache error"
111 depends on SIBYTE_SB1xxx_SOC 111 depends on SIBYTE_SB1xxx_SOC
112 112
diff --git a/arch/mips/sibyte/bcm1480/irq.c b/arch/mips/sibyte/bcm1480/irq.c
index b2a1ba5d23df..9cf7d713b13c 100644
--- a/arch/mips/sibyte/bcm1480/irq.c
+++ b/arch/mips/sibyte/bcm1480/irq.c
@@ -139,7 +139,7 @@ void bcm1480_unmask_irq(int cpu, int irq)
139#ifdef CONFIG_SMP 139#ifdef CONFIG_SMP
140static void bcm1480_set_affinity(unsigned int irq, cpumask_t mask) 140static void bcm1480_set_affinity(unsigned int irq, cpumask_t mask)
141{ 141{
142 int i = 0, old_cpu, cpu, int_on; 142 int i = 0, old_cpu, cpu, int_on, k;
143 u64 cur_ints; 143 u64 cur_ints;
144 irq_desc_t *desc = irq_desc + irq; 144 irq_desc_t *desc = irq_desc + irq;
145 unsigned long flags; 145 unsigned long flags;
@@ -165,7 +165,6 @@ static void bcm1480_set_affinity(unsigned int irq, cpumask_t mask)
165 irq_dirty -= BCM1480_NR_IRQS_HALF; 165 irq_dirty -= BCM1480_NR_IRQS_HALF;
166 } 166 }
167 167
168 int k;
169 for (k=0; k<2; k++) { /* Loop through high and low interrupt mask register */ 168 for (k=0; k<2; k++) { /* Loop through high and low interrupt mask register */
170 cur_ints = ____raw_readq(IOADDR(A_BCM1480_IMR_MAPPER(old_cpu) + R_BCM1480_IMR_INTERRUPT_MASK_H + (k*BCM1480_IMR_HL_SPACING))); 169 cur_ints = ____raw_readq(IOADDR(A_BCM1480_IMR_MAPPER(old_cpu) + R_BCM1480_IMR_INTERRUPT_MASK_H + (k*BCM1480_IMR_HL_SPACING)));
171 int_on = !(cur_ints & (((u64) 1) << irq_dirty)); 170 int_on = !(cur_ints & (((u64) 1) << irq_dirty));
@@ -216,6 +215,7 @@ static void ack_bcm1480_irq(unsigned int irq)
216{ 215{
217 u64 pending; 216 u64 pending;
218 unsigned int irq_dirty; 217 unsigned int irq_dirty;
218 int k;
219 219
220 /* 220 /*
221 * If the interrupt was an HT interrupt, now is the time to 221 * If the interrupt was an HT interrupt, now is the time to
@@ -227,7 +227,6 @@ static void ack_bcm1480_irq(unsigned int irq)
227 if ((irq_dirty >= BCM1480_NR_IRQS_HALF) && (irq_dirty <= BCM1480_NR_IRQS)) { 227 if ((irq_dirty >= BCM1480_NR_IRQS_HALF) && (irq_dirty <= BCM1480_NR_IRQS)) {
228 irq_dirty -= BCM1480_NR_IRQS_HALF; 228 irq_dirty -= BCM1480_NR_IRQS_HALF;
229 } 229 }
230 int k;
231 for (k=0; k<2; k++) { /* Loop through high and low LDT interrupts */ 230 for (k=0; k<2; k++) { /* Loop through high and low LDT interrupts */
232 pending = __raw_readq(IOADDR(A_BCM1480_IMR_REGISTER(bcm1480_irq_owner[irq], 231 pending = __raw_readq(IOADDR(A_BCM1480_IMR_REGISTER(bcm1480_irq_owner[irq],
233 R_BCM1480_IMR_LDT_INTERRUPT_H + (k*BCM1480_IMR_HL_SPACING)))); 232 R_BCM1480_IMR_LDT_INTERRUPT_H + (k*BCM1480_IMR_HL_SPACING))));
diff --git a/arch/mips/sibyte/cfe/setup.c b/arch/mips/sibyte/cfe/setup.c
index 7a2c7a8510d4..ea308029450e 100644
--- a/arch/mips/sibyte/cfe/setup.c
+++ b/arch/mips/sibyte/cfe/setup.c
@@ -23,6 +23,7 @@
23#include <linux/mm.h> 23#include <linux/mm.h>
24#include <linux/blkdev.h> 24#include <linux/blkdev.h>
25#include <linux/bootmem.h> 25#include <linux/bootmem.h>
26#include <linux/pm.h>
26#include <linux/smp.h> 27#include <linux/smp.h>
27 28
28#include <asm/bootinfo.h> 29#include <asm/bootinfo.h>
@@ -248,7 +249,7 @@ void __init prom_init(void)
248 249
249 _machine_restart = cfe_linux_restart; 250 _machine_restart = cfe_linux_restart;
250 _machine_halt = cfe_linux_halt; 251 _machine_halt = cfe_linux_halt;
251 _machine_power_off = cfe_linux_halt; 252 pm_power_off = cfe_linux_halt;
252 253
253 /* 254 /*
254 * Check if a loader was used; if NOT, the 4 arguments are 255 * Check if a loader was used; if NOT, the 4 arguments are
diff --git a/arch/mips/sibyte/cfe/smp.c b/arch/mips/sibyte/cfe/smp.c
index 4477af3d8074..eab20e2db323 100644
--- a/arch/mips/sibyte/cfe/smp.c
+++ b/arch/mips/sibyte/cfe/smp.c
@@ -31,7 +31,7 @@
31 * 31 *
32 * Common setup before any secondaries are started 32 * Common setup before any secondaries are started
33 */ 33 */
34void __init prom_prepare_cpus(unsigned int max_cpus) 34void __init plat_smp_setup(void)
35{ 35{
36 int i, num; 36 int i, num;
37 37
@@ -40,14 +40,18 @@ void __init prom_prepare_cpus(unsigned int max_cpus)
40 __cpu_number_map[0] = 0; 40 __cpu_number_map[0] = 0;
41 __cpu_logical_map[0] = 0; 41 __cpu_logical_map[0] = 0;
42 42
43 for (i=1, num=0; i<NR_CPUS; i++) { 43 for (i = 1, num = 0; i < NR_CPUS; i++) {
44 if (cfe_cpu_stop(i) == 0) { 44 if (cfe_cpu_stop(i) == 0) {
45 cpu_set(i, phys_cpu_present_map); 45 cpu_set(i, phys_cpu_present_map);
46 __cpu_number_map[i] = ++num; 46 __cpu_number_map[i] = ++num;
47 __cpu_logical_map[num] = i; 47 __cpu_logical_map[num] = i;
48 } 48 }
49 } 49 }
50 printk("Detected %i available secondary CPU(s)\n", num); 50 printk(KERN_INFO "Detected %i available secondary CPU(s)\n", num);
51}
52
53void __init plat_prepare_cpus(unsigned int max_cpus)
54{
51} 55}
52 56
53/* 57/*
diff --git a/arch/mips/sibyte/sb1250/prom.c b/arch/mips/sibyte/sb1250/prom.c
index de62ab0f55a2..742043f8d755 100644
--- a/arch/mips/sibyte/sb1250/prom.c
+++ b/arch/mips/sibyte/sb1250/prom.c
@@ -24,6 +24,7 @@
24#include <linux/bootmem.h> 24#include <linux/bootmem.h>
25#include <linux/smp.h> 25#include <linux/smp.h>
26#include <linux/initrd.h> 26#include <linux/initrd.h>
27#include <linux/pm.h>
27 28
28#include <asm/bootinfo.h> 29#include <asm/bootinfo.h>
29#include <asm/reboot.h> 30#include <asm/reboot.h>
@@ -79,7 +80,7 @@ void __init prom_init(void)
79{ 80{
80 _machine_restart = (void (*)(char *))prom_linux_exit; 81 _machine_restart = (void (*)(char *))prom_linux_exit;
81 _machine_halt = prom_linux_exit; 82 _machine_halt = prom_linux_exit;
82 _machine_power_off = prom_linux_exit; 83 pm_power_off = prom_linux_exit;
83 84
84 strcpy(arcs_cmdline, "root=/dev/ram0 "); 85 strcpy(arcs_cmdline, "root=/dev/ram0 ");
85 86
diff --git a/arch/mips/sibyte/sb1250/setup.c b/arch/mips/sibyte/sb1250/setup.c
index df2e266c700c..fde4751c84fe 100644
--- a/arch/mips/sibyte/sb1250/setup.c
+++ b/arch/mips/sibyte/sb1250/setup.c
@@ -16,6 +16,7 @@
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */ 17 */
18#include <linux/config.h> 18#include <linux/config.h>
19#include <linux/init.h>
19#include <linux/kernel.h> 20#include <linux/kernel.h>
20#include <linux/reboot.h> 21#include <linux/reboot.h>
21#include <linux/string.h> 22#include <linux/string.h>
@@ -42,7 +43,7 @@ static inline int setup_bcm112x(void);
42 43
43/* Setup code likely to be common to all SiByte platforms */ 44/* Setup code likely to be common to all SiByte platforms */
44 45
45static inline int sys_rev_decode(void) 46static int __init sys_rev_decode(void)
46{ 47{
47 int ret = 0; 48 int ret = 0;
48 49
@@ -74,7 +75,7 @@ static inline int sys_rev_decode(void)
74 return ret; 75 return ret;
75} 76}
76 77
77static inline int setup_bcm1250(void) 78static int __init setup_bcm1250(void)
78{ 79{
79 int ret = 0; 80 int ret = 0;
80 81
@@ -120,7 +121,7 @@ static inline int setup_bcm1250(void)
120 return ret; 121 return ret;
121} 122}
122 123
123static inline int setup_bcm112x(void) 124static int __init setup_bcm112x(void)
124{ 125{
125 int ret = 0; 126 int ret = 0;
126 127
@@ -146,7 +147,7 @@ static inline int setup_bcm112x(void)
146 return ret; 147 return ret;
147} 148}
148 149
149void sb1250_setup(void) 150void __init sb1250_setup(void)
150{ 151{
151 uint64_t sys_rev; 152 uint64_t sys_rev;
152 int plldiv; 153 int plldiv;
@@ -169,31 +170,42 @@ void sb1250_setup(void)
169 soc_str, pass_str, zbbus_mhz * 2, sb1_pass); 170 soc_str, pass_str, zbbus_mhz * 2, sb1_pass);
170 prom_printf("Board type: %s\n", get_system_type()); 171 prom_printf("Board type: %s\n", get_system_type());
171 172
172 switch(war_pass) { 173 switch (war_pass) {
173 case K_SYS_REVISION_BCM1250_PASS1: 174 case K_SYS_REVISION_BCM1250_PASS1:
174#ifndef CONFIG_SB1_PASS_1_WORKAROUNDS 175#ifndef CONFIG_SB1_PASS_1_WORKAROUNDS
175 prom_printf("@@@@ This is a BCM1250 A0-A2 (Pass 1) board, and the kernel doesn't have the proper workarounds compiled in. @@@@\n"); 176 prom_printf("@@@@ This is a BCM1250 A0-A2 (Pass 1) board, "
177 "and the kernel doesn't have the proper "
178 "workarounds compiled in. @@@@\n");
176 bad_config = 1; 179 bad_config = 1;
177#endif 180#endif
178 break; 181 break;
179 case K_SYS_REVISION_BCM1250_PASS2: 182 case K_SYS_REVISION_BCM1250_PASS2:
180 /* Pass 2 - easiest as default for now - so many numbers */ 183 /* Pass 2 - easiest as default for now - so many numbers */
181#if !defined(CONFIG_SB1_PASS_2_WORKAROUNDS) || !defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) 184#if !defined(CONFIG_SB1_PASS_2_WORKAROUNDS) || \
182 prom_printf("@@@@ This is a BCM1250 A3-A10 board, and the kernel doesn't have the proper workarounds compiled in. @@@@\n"); 185 !defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS)
186 prom_printf("@@@@ This is a BCM1250 A3-A10 board, and the "
187 "kernel doesn't have the proper workarounds "
188 "compiled in. @@@@\n");
183 bad_config = 1; 189 bad_config = 1;
184#endif 190#endif
185#ifdef CONFIG_CPU_HAS_PREFETCH 191#ifdef CONFIG_CPU_HAS_PREFETCH
186 prom_printf("@@@@ Prefetches may be enabled in this kernel, but are buggy on this board. @@@@\n"); 192 prom_printf("@@@@ Prefetches may be enabled in this kernel, "
193 "but are buggy on this board. @@@@\n");
187 bad_config = 1; 194 bad_config = 1;
188#endif 195#endif
189 break; 196 break;
190 case K_SYS_REVISION_BCM1250_PASS2_2: 197 case K_SYS_REVISION_BCM1250_PASS2_2:
191#ifndef CONFIG_SB1_PASS_2_WORKAROUNDS 198#ifndef CONFIG_SB1_PASS_2_WORKAROUNDS
192 prom_printf("@@@@ This is a BCM1250 B1/B2. board, and the kernel doesn't have the proper workarounds compiled in. @@@@\n"); 199 prom_printf("@@@@ This is a BCM1250 B1/B2. board, and the "
200 "kernel doesn't have the proper workarounds "
201 "compiled in. @@@@\n");
193 bad_config = 1; 202 bad_config = 1;
194#endif 203#endif
195#if defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) || !defined(CONFIG_CPU_HAS_PREFETCH) 204#if defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) || \
196 prom_printf("@@@@ This is a BCM1250 B1/B2, but the kernel is conservatively configured for an 'A' stepping. @@@@\n"); 205 !defined(CONFIG_CPU_HAS_PREFETCH)
206 prom_printf("@@@@ This is a BCM1250 B1/B2, but the kernel is "
207 "conservatively configured for an 'A' stepping. "
208 "@@@@\n");
197#endif 209#endif
198 break; 210 break;
199 default: 211 default:
diff --git a/arch/mips/sibyte/sb1250/time.c b/arch/mips/sibyte/sb1250/time.c
index 511c89d65f38..1588f6debd90 100644
--- a/arch/mips/sibyte/sb1250/time.c
+++ b/arch/mips/sibyte/sb1250/time.c
@@ -47,23 +47,51 @@
47#define IMR_IP3_VAL K_INT_MAP_I1 47#define IMR_IP3_VAL K_INT_MAP_I1
48#define IMR_IP4_VAL K_INT_MAP_I2 48#define IMR_IP4_VAL K_INT_MAP_I2
49 49
50#define SB1250_HPT_NUM 3
51#define SB1250_HPT_VALUE M_SCD_TIMER_CNT /* max value */
52#define SB1250_HPT_SHIFT ((sizeof(unsigned int)*8)-V_SCD_TIMER_WIDTH)
53
54
50extern int sb1250_steal_irq(int irq); 55extern int sb1250_steal_irq(int irq);
51 56
57static unsigned int sb1250_hpt_read(void);
58static void sb1250_hpt_init(unsigned int);
59
60static unsigned int hpt_offset;
61
62void __init sb1250_hpt_setup(void)
63{
64 int cpu = smp_processor_id();
65
66 if (!cpu) {
67 /* Setup hpt using timer #3 but do not enable irq for it */
68 __raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CFG)));
69 __raw_writeq(SB1250_HPT_VALUE,
70 IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_INIT)));
71 __raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS,
72 IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CFG)));
73
74 /*
75 * we need to fill 32 bits, so just use the upper 23 bits and pretend
76 * the timer is going 512Mhz instead of 1Mhz
77 */
78 mips_hpt_frequency = V_SCD_TIMER_FREQ << SB1250_HPT_SHIFT;
79 mips_hpt_init = sb1250_hpt_init;
80 mips_hpt_read = sb1250_hpt_read;
81 }
82}
83
84
52void sb1250_time_init(void) 85void sb1250_time_init(void)
53{ 86{
54 int cpu = smp_processor_id(); 87 int cpu = smp_processor_id();
55 int irq = K_INT_TIMER_0+cpu; 88 int irq = K_INT_TIMER_0+cpu;
56 89
57 /* Only have 4 general purpose timers */ 90 /* Only have 4 general purpose timers, and we use last one as hpt */
58 if (cpu > 3) { 91 if (cpu > 2) {
59 BUG(); 92 BUG();
60 } 93 }
61 94
62 if (!cpu) {
63 /* Use our own gettimeoffset() routine */
64 do_gettimeoffset = sb1250_gettimeoffset;
65 }
66
67 sb1250_mask_irq(cpu, irq); 95 sb1250_mask_irq(cpu, irq);
68 96
69 /* Map the timer interrupt to ip[4] of this cpu */ 97 /* Map the timer interrupt to ip[4] of this cpu */
@@ -75,10 +103,10 @@ void sb1250_time_init(void)
75 /* Disable the timer and set up the count */ 103 /* Disable the timer and set up the count */
76 __raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); 104 __raw_writeq(0, IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG)));
77#ifdef CONFIG_SIMULATION 105#ifdef CONFIG_SIMULATION
78 __raw_writeq(50000 / HZ, 106 __raw_writeq((50000 / HZ) - 1,
79 IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT))); 107 IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT)));
80#else 108#else
81 __raw_writeq(1000000 / HZ, 109 __raw_writeq((V_SCD_TIMER_FREQ / HZ) - 1,
82 IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT))); 110 IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_INIT)));
83#endif 111#endif
84 112
@@ -103,7 +131,7 @@ void sb1250_timer_interrupt(struct pt_regs *regs)
103 int cpu = smp_processor_id(); 131 int cpu = smp_processor_id();
104 int irq = K_INT_TIMER_0 + cpu; 132 int irq = K_INT_TIMER_0 + cpu;
105 133
106 /* Reset the timer */ 134 /* ACK interrupt */
107 ____raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS, 135 ____raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS,
108 IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); 136 IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG)));
109 137
@@ -122,15 +150,26 @@ void sb1250_timer_interrupt(struct pt_regs *regs)
122} 150}
123 151
124/* 152/*
125 * We use our own do_gettimeoffset() instead of the generic one, 153 * The HPT is free running from SB1250_HPT_VALUE down to 0 then starts over
126 * because the generic one does not work for SMP case. 154 * again. There's no easy way to set to a specific value so store init value
127 * In addition, since we use general timer 0 for system time, 155 * in hpt_offset and subtract each time.
128 * we can get accurate intra-jiffy offset without calibration. 156 *
157 * Note: Timer isn't full 32bits so shift it into the upper part making
158 * it appear to run at a higher frequency.
129 */ 159 */
130unsigned long sb1250_gettimeoffset(void) 160static unsigned int sb1250_hpt_read(void)
131{ 161{
132 unsigned long count = 162 unsigned int count;
133 __raw_readq(IOADDR(A_SCD_TIMER_REGISTER(0, R_SCD_TIMER_CNT)));
134 163
135 return 1000000/HZ - count; 164 count = G_SCD_TIMER_CNT(__raw_readq(IOADDR(A_SCD_TIMER_REGISTER(SB1250_HPT_NUM, R_SCD_TIMER_CNT))));
136 } 165
166 count = (SB1250_HPT_VALUE - count) << SB1250_HPT_SHIFT;
167
168 return count - hpt_offset;
169}
170
171static void sb1250_hpt_init(unsigned int count)
172{
173 hpt_offset = count;
174 return;
175}
diff --git a/arch/mips/sibyte/swarm/setup.c b/arch/mips/sibyte/swarm/setup.c
index b614ca0ddb69..b661d2425a36 100644
--- a/arch/mips/sibyte/swarm/setup.c
+++ b/arch/mips/sibyte/swarm/setup.c
@@ -70,6 +70,12 @@ const char *get_system_type(void)
70 return "SiByte " SIBYTE_BOARD_NAME; 70 return "SiByte " SIBYTE_BOARD_NAME;
71} 71}
72 72
73void __init swarm_time_init(void)
74{
75 /* Setup HPT */
76 sb1250_hpt_setup();
77}
78
73void __init swarm_timer_setup(struct irqaction *irq) 79void __init swarm_timer_setup(struct irqaction *irq)
74{ 80{
75 /* 81 /*
@@ -109,6 +115,7 @@ void __init plat_setup(void)
109 115
110 panic_timeout = 5; /* For debug. */ 116 panic_timeout = 5; /* For debug. */
111 117
118 board_time_init = swarm_time_init;
112 board_timer_setup = swarm_timer_setup; 119 board_timer_setup = swarm_timer_setup;
113 board_be_handler = swarm_be_handler; 120 board_be_handler = swarm_be_handler;
114 121
diff --git a/arch/mips/sni/setup.c b/arch/mips/sni/setup.c
index 262c85680709..1141fcd13a59 100644
--- a/arch/mips/sni/setup.c
+++ b/arch/mips/sni/setup.c
@@ -5,7 +5,7 @@
5 * License. See the file "COPYING" in the main directory of this archive 5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 6 * for more details.
7 * 7 *
8 * Copyright (C) 1996, 97, 98, 2000, 03, 04 Ralf Baechle (ralf@linux-mips.org) 8 * Copyright (C) 1996, 97, 98, 2000, 03, 04, 06 Ralf Baechle (ralf@linux-mips.org)
9 */ 9 */
10#include <linux/config.h> 10#include <linux/config.h>
11#include <linux/eisa.h> 11#include <linux/eisa.h>
@@ -15,6 +15,7 @@
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/interrupt.h> 16#include <linux/interrupt.h>
17#include <linux/mc146818rtc.h> 17#include <linux/mc146818rtc.h>
18#include <linux/pm.h>
18#include <linux/pci.h> 19#include <linux/pci.h>
19#include <linux/console.h> 20#include <linux/console.h>
20#include <linux/fb.h> 21#include <linux/fb.h>
@@ -189,7 +190,7 @@ void __init plat_setup(void)
189 190
190 _machine_restart = sni_machine_restart; 191 _machine_restart = sni_machine_restart;
191 _machine_halt = sni_machine_halt; 192 _machine_halt = sni_machine_halt;
192 _machine_power_off = sni_machine_power_off; 193 pm_power_off = sni_machine_power_off;
193 194
194 sni_display_setup(); 195 sni_display_setup();
195 196
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c
index e4d095d3e192..e19e2be70f76 100644
--- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c
+++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_prom.c
@@ -60,7 +60,6 @@ void __init prom_init_cmdline(void)
60 60
61void __init prom_init(void) 61void __init prom_init(void)
62{ 62{
63 const char* toshiba_name_list[] = GROUP_TOSHIBA_NAMES;
64 extern int tx4927_get_mem_size(void); 63 extern int tx4927_get_mem_size(void);
65 extern char* toshiba_name; 64 extern char* toshiba_name;
66 int msize; 65 int msize;
@@ -69,12 +68,13 @@ void __init prom_init(void)
69 68
70 mips_machgroup = MACH_GROUP_TOSHIBA; 69 mips_machgroup = MACH_GROUP_TOSHIBA;
71 70
72 if ((read_c0_prid() & 0xff) == PRID_REV_TX4927) 71 if ((read_c0_prid() & 0xff) == PRID_REV_TX4927) {
73 mips_machtype = MACH_TOSHIBA_RBTX4927; 72 mips_machtype = MACH_TOSHIBA_RBTX4927;
74 else 73 toshiba_name = "TX4927";
74 } else {
75 mips_machtype = MACH_TOSHIBA_RBTX4937; 75 mips_machtype = MACH_TOSHIBA_RBTX4937;
76 76 toshiba_name = "TX4937";
77 toshiba_name = toshiba_name_list[mips_machtype]; 77 }
78 78
79 msize = tx4927_get_mem_size(); 79 msize = tx4927_get_mem_size();
80 add_memory_region(0, msize << 20, BOOT_MEM_RAM); 80 add_memory_region(0, msize << 20, BOOT_MEM_RAM);
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
index 990fcb294bab..2ad6401d2af4 100644
--- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
+++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
@@ -53,6 +53,8 @@
53#include <linux/interrupt.h> 53#include <linux/interrupt.h>
54#include <linux/pci.h> 54#include <linux/pci.h>
55#include <linux/timex.h> 55#include <linux/timex.h>
56#include <linux/pm.h>
57
56#include <asm/bootinfo.h> 58#include <asm/bootinfo.h>
57#include <asm/page.h> 59#include <asm/page.h>
58#include <asm/io.h> 60#include <asm/io.h>
@@ -537,19 +539,10 @@ void tx4927_pci_setup(void)
537 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI2, 539 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI2,
538 "0x%08lx=mips_io_port_base", 540 "0x%08lx=mips_io_port_base",
539 mips_io_port_base); 541 mips_io_port_base);
540
541 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI2,
542 "setup pci_io_resource to 0x%08lx 0x%08lx\n",
543 pci_io_resource.start,
544 pci_io_resource.end);
545 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI2,
546 "setup pci_mem_resource to 0x%08lx 0x%08lx\n",
547 pci_mem_resource.start,
548 pci_mem_resource.end);
549
550 if (!called) { 542 if (!called) {
551 printk 543 printk
552 ("TX4927 PCIC -- DID:%04x VID:%04x RID:%02x Arbiter:%s\n", 544 ("%s PCIC -- DID:%04x VID:%04x RID:%02x Arbiter:%s\n",
545 toshiba_name,
553 (unsigned short) (tx4927_pcicptr->pciid >> 16), 546 (unsigned short) (tx4927_pcicptr->pciid >> 16),
554 (unsigned short) (tx4927_pcicptr->pciid & 0xffff), 547 (unsigned short) (tx4927_pcicptr->pciid & 0xffff),
555 (unsigned short) (tx4927_pcicptr->pciccrev & 0xff), 548 (unsigned short) (tx4927_pcicptr->pciccrev & 0xff),
@@ -562,21 +555,52 @@ void tx4927_pci_setup(void)
562 (tx4927_ccfgptr->ccfg & TX4927_CCFG_PCI66) ? " PCI66" : ""); 555 (tx4927_ccfgptr->ccfg & TX4927_CCFG_PCI66) ? " PCI66" : "");
563 if (tx4927_ccfgptr->pcfg & TX4927_PCFG_PCICLKEN_ALL) { 556 if (tx4927_ccfgptr->pcfg & TX4927_PCFG_PCICLKEN_ALL) {
564 int pciclk = 0; 557 int pciclk = 0;
565 switch ((unsigned long) tx4927_ccfgptr-> 558 if (mips_machtype == MACH_TOSHIBA_RBTX4937)
566 ccfg & TX4927_CCFG_PCIDIVMODE_MASK) { 559 switch ((unsigned long) tx4927_ccfgptr->
567 case TX4927_CCFG_PCIDIVMODE_2_5: 560 ccfg & TX4937_CCFG_PCIDIVMODE_MASK) {
568 pciclk = tx4927_cpu_clock * 2 / 5; 561 case TX4937_CCFG_PCIDIVMODE_4:
569 break; 562 pciclk = tx4927_cpu_clock / 4;
570 case TX4927_CCFG_PCIDIVMODE_3: 563 break;
571 pciclk = tx4927_cpu_clock / 3; 564 case TX4937_CCFG_PCIDIVMODE_4_5:
572 break; 565 pciclk = tx4927_cpu_clock * 2 / 9;
573 case TX4927_CCFG_PCIDIVMODE_5: 566 break;
574 pciclk = tx4927_cpu_clock / 5; 567 case TX4937_CCFG_PCIDIVMODE_5:
575 break; 568 pciclk = tx4927_cpu_clock / 5;
576 case TX4927_CCFG_PCIDIVMODE_6: 569 break;
577 pciclk = tx4927_cpu_clock / 6; 570 case TX4937_CCFG_PCIDIVMODE_5_5:
578 break; 571 pciclk = tx4927_cpu_clock * 2 / 11;
579 } 572 break;
573 case TX4937_CCFG_PCIDIVMODE_8:
574 pciclk = tx4927_cpu_clock / 8;
575 break;
576 case TX4937_CCFG_PCIDIVMODE_9:
577 pciclk = tx4927_cpu_clock / 9;
578 break;
579 case TX4937_CCFG_PCIDIVMODE_10:
580 pciclk = tx4927_cpu_clock / 10;
581 break;
582 case TX4937_CCFG_PCIDIVMODE_11:
583 pciclk = tx4927_cpu_clock / 11;
584 break;
585 }
586
587 else
588 switch ((unsigned long) tx4927_ccfgptr->
589 ccfg & TX4927_CCFG_PCIDIVMODE_MASK) {
590 case TX4927_CCFG_PCIDIVMODE_2_5:
591 pciclk = tx4927_cpu_clock * 2 / 5;
592 break;
593 case TX4927_CCFG_PCIDIVMODE_3:
594 pciclk = tx4927_cpu_clock / 3;
595 break;
596 case TX4927_CCFG_PCIDIVMODE_5:
597 pciclk = tx4927_cpu_clock / 5;
598 break;
599 case TX4927_CCFG_PCIDIVMODE_6:
600 pciclk = tx4927_cpu_clock / 6;
601 break;
602 }
603
580 printk("Internal(%dMHz)", pciclk / 1000000); 604 printk("Internal(%dMHz)", pciclk / 1000000);
581 } else { 605 } else {
582 int pciclk = 0; 606 int pciclk = 0;
@@ -814,24 +838,40 @@ void __init toshiba_rbtx4927_setup(void)
814 ":ResetRoutines\n"); 838 ":ResetRoutines\n");
815 _machine_restart = toshiba_rbtx4927_restart; 839 _machine_restart = toshiba_rbtx4927_restart;
816 _machine_halt = toshiba_rbtx4927_halt; 840 _machine_halt = toshiba_rbtx4927_halt;
817 _machine_power_off = toshiba_rbtx4927_power_off; 841 pm_power_off = toshiba_rbtx4927_power_off;
818 842
819#ifdef CONFIG_PCI 843#ifdef CONFIG_PCI
820 844
821 /* PCIC */ 845 /* PCIC */
822 /* 846 /*
823 * ASSUMPTION: PCIDIVMODE is configured for PCI 33MHz or 66MHz. 847 * ASSUMPTION: PCIDIVMODE is configured for PCI 33MHz or 66MHz.
824 * PCIDIVMODE[12:11]'s initial value are given by S9[4:3] (ON:0, OFF:1). 848 *
849 * For TX4927:
850 * PCIDIVMODE[12:11]'s initial value is given by S9[4:3] (ON:0, OFF:1).
825 * CPU 166MHz: PCI 66MHz : PCIDIVMODE: 00 (1/2.5) 851 * CPU 166MHz: PCI 66MHz : PCIDIVMODE: 00 (1/2.5)
826 * CPU 200MHz: PCI 66MHz : PCIDIVMODE: 01 (1/3) 852 * CPU 200MHz: PCI 66MHz : PCIDIVMODE: 01 (1/3)
827 * CPU 166MHz: PCI 33MHz : PCIDIVMODE: 10 (1/5) 853 * CPU 166MHz: PCI 33MHz : PCIDIVMODE: 10 (1/5)
828 * CPU 200MHz: PCI 33MHz : PCIDIVMODE: 11 (1/6) 854 * CPU 200MHz: PCI 33MHz : PCIDIVMODE: 11 (1/6)
829 * i.e. S9[3]: ON (83MHz), OFF (100MHz) 855 * i.e. S9[3]: ON (83MHz), OFF (100MHz)
856 *
857 * For TX4937:
858 * PCIDIVMODE[12:11]'s initial value is given by S1[5:4] (ON:0, OFF:1)
859 * PCIDIVMODE[10] is 0.
860 * CPU 266MHz: PCI 33MHz : PCIDIVMODE: 000 (1/8)
861 * CPU 266MHz: PCI 66MHz : PCIDIVMODE: 001 (1/4)
862 * CPU 300MHz: PCI 33MHz : PCIDIVMODE: 010 (1/9)
863 * CPU 300MHz: PCI 66MHz : PCIDIVMODE: 011 (1/4.5)
864 * CPU 333MHz: PCI 33MHz : PCIDIVMODE: 100 (1/10)
865 * CPU 333MHz: PCI 66MHz : PCIDIVMODE: 101 (1/5)
866 *
830 */ 867 */
831 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1, 868 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1,
832 "ccfg is %lx, DIV is %x\n", 869 "ccfg is %lx, PCIDIVMODE is %x\n",
833 (unsigned long) tx4927_ccfgptr-> 870 (unsigned long) tx4927_ccfgptr->ccfg,
834 ccfg, TX4927_CCFG_PCIDIVMODE_MASK); 871 (unsigned long) tx4927_ccfgptr->ccfg &
872 (mips_machtype == MACH_TOSHIBA_RBTX4937 ?
873 TX4937_CCFG_PCIDIVMODE_MASK :
874 TX4927_CCFG_PCIDIVMODE_MASK));
835 875
836 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1, 876 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1,
837 "PCI66 mode is %lx, PCI mode is %lx, pci arb is %lx\n", 877 "PCI66 mode is %lx, PCI mode is %lx, pci arb is %lx\n",
@@ -842,20 +882,30 @@ void __init toshiba_rbtx4927_setup(void)
842 (unsigned long) tx4927_ccfgptr-> 882 (unsigned long) tx4927_ccfgptr->
843 ccfg & TX4927_CCFG_PCIXARB); 883 ccfg & TX4927_CCFG_PCIXARB);
844 884
845 TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_PCI1, 885 if (mips_machtype == MACH_TOSHIBA_RBTX4937)
846 "PCIDIVMODE is %lx\n", 886 switch ((unsigned long)tx4927_ccfgptr->
847 (unsigned long) tx4927_ccfgptr-> 887 ccfg & TX4937_CCFG_PCIDIVMODE_MASK) {
848 ccfg & TX4927_CCFG_PCIDIVMODE_MASK); 888 case TX4937_CCFG_PCIDIVMODE_8:
849 889 case TX4937_CCFG_PCIDIVMODE_4:
850 switch ((unsigned long) tx4927_ccfgptr-> 890 tx4927_cpu_clock = 266666666; /* 266MHz */
851 ccfg & TX4927_CCFG_PCIDIVMODE_MASK) { 891 break;
852 case TX4927_CCFG_PCIDIVMODE_2_5: 892 case TX4937_CCFG_PCIDIVMODE_9:
853 case TX4927_CCFG_PCIDIVMODE_5: 893 case TX4937_CCFG_PCIDIVMODE_4_5:
854 tx4927_cpu_clock = 166000000; /* 166MHz */ 894 tx4927_cpu_clock = 300000000; /* 300MHz */
855 break; 895 break;
856 default: 896 default:
857 tx4927_cpu_clock = 200000000; /* 200MHz */ 897 tx4927_cpu_clock = 333333333; /* 333MHz */
858 } 898 }
899 else
900 switch ((unsigned long)tx4927_ccfgptr->
901 ccfg & TX4927_CCFG_PCIDIVMODE_MASK) {
902 case TX4927_CCFG_PCIDIVMODE_2_5:
903 case TX4927_CCFG_PCIDIVMODE_5:
904 tx4927_cpu_clock = 166666666; /* 166MHz */
905 break;
906 default:
907 tx4927_cpu_clock = 200000000; /* 200MHz */
908 }
859 909
860 /* CCFG */ 910 /* CCFG */
861 /* enable Timeout BusError */ 911 /* enable Timeout BusError */
diff --git a/arch/mips/tx4938/toshiba_rbtx4938/setup.c b/arch/mips/tx4938/toshiba_rbtx4938/setup.c
index 9f1dcc8ca5a3..5c7ace982a49 100644
--- a/arch/mips/tx4938/toshiba_rbtx4938/setup.c
+++ b/arch/mips/tx4938/toshiba_rbtx4938/setup.c
@@ -20,6 +20,8 @@
20#include <linux/interrupt.h> 20#include <linux/interrupt.h>
21#include <linux/console.h> 21#include <linux/console.h>
22#include <linux/pci.h> 22#include <linux/pci.h>
23#include <linux/pm.h>
24
23#include <asm/wbflush.h> 25#include <asm/wbflush.h>
24#include <asm/reboot.h> 26#include <asm/reboot.h>
25#include <asm/irq.h> 27#include <asm/irq.h>
@@ -1003,7 +1005,7 @@ void __init toshiba_rbtx4938_setup(void)
1003 1005
1004 _machine_restart = rbtx4938_machine_restart; 1006 _machine_restart = rbtx4938_machine_restart;
1005 _machine_halt = rbtx4938_machine_halt; 1007 _machine_halt = rbtx4938_machine_halt;
1006 _machine_power_off = rbtx4938_machine_power_off; 1008 pm_power_off = rbtx4938_machine_power_off;
1007 1009
1008 *rbtx4938_led_ptr = 0xff; 1010 *rbtx4938_led_ptr = 0xff;
1009 printk("RBTX4938 --- FPGA(Rev %02x)", *rbtx4938_fpga_rev_ptr); 1011 printk("RBTX4938 --- FPGA(Rev %02x)", *rbtx4938_fpga_rev_ptr);
diff --git a/arch/mips/vr41xx/common/pmu.c b/arch/mips/vr41xx/common/pmu.c
index 02bf4f7d06ba..5e469796413f 100644
--- a/arch/mips/vr41xx/common/pmu.c
+++ b/arch/mips/vr41xx/common/pmu.c
@@ -21,6 +21,7 @@
21#include <linux/init.h> 21#include <linux/init.h>
22#include <linux/ioport.h> 22#include <linux/ioport.h>
23#include <linux/kernel.h> 23#include <linux/kernel.h>
24#include <linux/pm.h>
24#include <linux/smp.h> 25#include <linux/smp.h>
25#include <linux/types.h> 26#include <linux/types.h>
26 27
@@ -114,7 +115,7 @@ static int __init vr41xx_pmu_init(void)
114 115
115 _machine_restart = vr41xx_restart; 116 _machine_restart = vr41xx_restart;
116 _machine_halt = vr41xx_halt; 117 _machine_halt = vr41xx_halt;
117 _machine_power_off = vr41xx_power_off; 118 pm_power_off = vr41xx_power_off;
118 119
119 return 0; 120 return 0;
120} 121}
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index e77a06e9621e..eca33cfa8a4c 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -29,6 +29,11 @@ config GENERIC_CALIBRATE_DELAY
29 bool 29 bool
30 default y 30 default y
31 31
32config TIME_LOW_RES
33 bool
34 depends on SMP
35 default y
36
32config GENERIC_ISA_DMA 37config GENERIC_ISA_DMA
33 bool 38 bool
34 39
@@ -149,14 +154,20 @@ config HOTPLUG_CPU
149 default y if SMP 154 default y if SMP
150 select HOTPLUG 155 select HOTPLUG
151 156
157config ARCH_SELECT_MEMORY_MODEL
158 def_bool y
159 depends on 64BIT
160
152config ARCH_DISCONTIGMEM_ENABLE 161config ARCH_DISCONTIGMEM_ENABLE
153 bool "Discontiguous memory support (EXPERIMENTAL)" 162 def_bool y
154 depends on 64BIT && EXPERIMENTAL 163 depends on 64BIT
155 help 164
156 Say Y to support efficient handling of discontiguous physical memory, 165config ARCH_FLATMEM_ENABLE
157 for architectures which are either NUMA (Non-Uniform Memory Access) 166 def_bool y
158 or have huge holes in the physical address space for other reasons. 167
159 See <file:Documentation/vm/numa> for more. 168config ARCH_DISCONTIGMEM_DEFAULT
169 def_bool y
170 depends on ARCH_DISCONTIGMEM_ENABLE
160 171
161source "kernel/Kconfig.hz" 172source "kernel/Kconfig.hz"
162source "mm/Kconfig" 173source "mm/Kconfig"
diff --git a/arch/parisc/Kconfig.debug b/arch/parisc/Kconfig.debug
index 8caaed187a1f..9166bd117267 100644
--- a/arch/parisc/Kconfig.debug
+++ b/arch/parisc/Kconfig.debug
@@ -11,4 +11,14 @@ config DEBUG_RWLOCK
11 too many attempts. If you suspect a rwlock problem or a kernel 11 too many attempts. If you suspect a rwlock problem or a kernel
12 hacker asks for this option then say Y. Otherwise say N. 12 hacker asks for this option then say Y. Otherwise say N.
13 13
14config DEBUG_RODATA
15 bool "Write protect kernel read-only data structures"
16 depends on DEBUG_KERNEL
17 help
18 Mark the kernel read-only data as write-protected in the pagetables,
19 in order to catch accidental (and incorrect) writes to such const
20 data. This option may have a slight performance impact because a
21 portion of the kernel code won't be covered by a TLB anymore.
22 If in doubt, say "N".
23
14endmenu 24endmenu
diff --git a/arch/parisc/configs/b180_defconfig b/arch/parisc/configs/b180_defconfig
index 8819e7e6ae3f..37e98241ce4b 100644
--- a/arch/parisc/configs/b180_defconfig
+++ b/arch/parisc/configs/b180_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc5-pa1 3# Linux kernel version: 2.6.16-rc1-pa0
4# Fri Oct 21 23:06:10 2005 4# Tue Jan 17 08:21:01 2006
5# 5#
6CONFIG_PARISC=y 6CONFIG_PARISC=y
7CONFIG_MMU=y 7CONFIG_MMU=y
@@ -29,8 +29,6 @@ CONFIG_SYSVIPC=y
29# CONFIG_BSD_PROCESS_ACCT is not set 29# CONFIG_BSD_PROCESS_ACCT is not set
30CONFIG_SYSCTL=y 30CONFIG_SYSCTL=y
31# CONFIG_AUDIT is not set 31# CONFIG_AUDIT is not set
32# CONFIG_HOTPLUG is not set
33CONFIG_KOBJECT_UEVENT=y
34CONFIG_IKCONFIG=y 32CONFIG_IKCONFIG=y
35CONFIG_IKCONFIG_PROC=y 33CONFIG_IKCONFIG_PROC=y
36CONFIG_INITRAMFS_SOURCE="" 34CONFIG_INITRAMFS_SOURCE=""
@@ -38,8 +36,10 @@ CONFIG_INITRAMFS_SOURCE=""
38CONFIG_KALLSYMS=y 36CONFIG_KALLSYMS=y
39# CONFIG_KALLSYMS_ALL is not set 37# CONFIG_KALLSYMS_ALL is not set
40# CONFIG_KALLSYMS_EXTRA_PASS is not set 38# CONFIG_KALLSYMS_EXTRA_PASS is not set
39CONFIG_HOTPLUG=y
41CONFIG_PRINTK=y 40CONFIG_PRINTK=y
42CONFIG_BUG=y 41CONFIG_BUG=y
42CONFIG_ELF_CORE=y
43CONFIG_BASE_FULL=y 43CONFIG_BASE_FULL=y
44CONFIG_FUTEX=y 44CONFIG_FUTEX=y
45CONFIG_EPOLL=y 45CONFIG_EPOLL=y
@@ -48,8 +48,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
48CONFIG_CC_ALIGN_LABELS=0 48CONFIG_CC_ALIGN_LABELS=0
49CONFIG_CC_ALIGN_LOOPS=0 49CONFIG_CC_ALIGN_LOOPS=0
50CONFIG_CC_ALIGN_JUMPS=0 50CONFIG_CC_ALIGN_JUMPS=0
51CONFIG_SLAB=y
51# CONFIG_TINY_SHMEM is not set 52# CONFIG_TINY_SHMEM is not set
52CONFIG_BASE_SMALL=0 53CONFIG_BASE_SMALL=0
54# CONFIG_SLOB is not set
53 55
54# 56#
55# Loadable module support 57# Loadable module support
@@ -57,10 +59,28 @@ CONFIG_BASE_SMALL=0
57CONFIG_MODULES=y 59CONFIG_MODULES=y
58# CONFIG_MODULE_UNLOAD is not set 60# CONFIG_MODULE_UNLOAD is not set
59CONFIG_OBSOLETE_MODPARM=y 61CONFIG_OBSOLETE_MODPARM=y
62CONFIG_MODVERSIONS=y
60# CONFIG_MODULE_SRCVERSION_ALL is not set 63# CONFIG_MODULE_SRCVERSION_ALL is not set
61# CONFIG_KMOD is not set 64# CONFIG_KMOD is not set
62 65
63# 66#
67# Block layer
68#
69
70#
71# IO Schedulers
72#
73CONFIG_IOSCHED_NOOP=y
74CONFIG_IOSCHED_AS=y
75CONFIG_IOSCHED_DEADLINE=y
76CONFIG_IOSCHED_CFQ=y
77# CONFIG_DEFAULT_AS is not set
78# CONFIG_DEFAULT_DEADLINE is not set
79CONFIG_DEFAULT_CFQ=y
80# CONFIG_DEFAULT_NOOP is not set
81CONFIG_DEFAULT_IOSCHED="cfq"
82
83#
64# Processor type and features 84# Processor type and features
65# 85#
66# CONFIG_PA7000 is not set 86# CONFIG_PA7000 is not set
@@ -77,6 +97,7 @@ CONFIG_HZ=250
77CONFIG_FLATMEM=y 97CONFIG_FLATMEM=y
78CONFIG_FLAT_NODE_MEM_MAP=y 98CONFIG_FLAT_NODE_MEM_MAP=y
79# CONFIG_SPARSEMEM_STATIC is not set 99# CONFIG_SPARSEMEM_STATIC is not set
100CONFIG_SPLIT_PTLOCK_CPUS=4096
80# CONFIG_PREEMPT is not set 101# CONFIG_PREEMPT is not set
81# CONFIG_HPUX is not set 102# CONFIG_HPUX is not set
82 103
@@ -84,8 +105,8 @@ CONFIG_FLAT_NODE_MEM_MAP=y
84# Bus options (PCI, PCMCIA, EISA, GSC, ISA) 105# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
85# 106#
86CONFIG_GSC=y 107CONFIG_GSC=y
87# CONFIG_HPPB is not set 108CONFIG_HPPB=y
88# CONFIG_IOMMU_CCIO is not set 109CONFIG_IOMMU_CCIO=y
89CONFIG_GSC_LASI=y 110CONFIG_GSC_LASI=y
90CONFIG_GSC_WAX=y 111CONFIG_GSC_WAX=y
91CONFIG_EISA=y 112CONFIG_EISA=y
@@ -165,8 +186,11 @@ CONFIG_IPV6=y
165# CONFIG_LLC2 is not set 186# CONFIG_LLC2 is not set
166# CONFIG_IPX is not set 187# CONFIG_IPX is not set
167# CONFIG_ATALK is not set 188# CONFIG_ATALK is not set
189
190#
191# QoS and/or fair queueing
192#
168# CONFIG_NET_SCHED is not set 193# CONFIG_NET_SCHED is not set
169# CONFIG_NET_CLS_ROUTE is not set
170 194
171# 195#
172# Network testing 196# Network testing
@@ -205,6 +229,7 @@ CONFIG_STANDALONE=y
205CONFIG_PARPORT=y 229CONFIG_PARPORT=y
206CONFIG_PARPORT_PC=y 230CONFIG_PARPORT_PC=y
207# CONFIG_PARPORT_SERIAL is not set 231# CONFIG_PARPORT_SERIAL is not set
232CONFIG_PARPORT_NOT_PC=y
208CONFIG_PARPORT_GSC=y 233CONFIG_PARPORT_GSC=y
209# CONFIG_PARPORT_1284 is not set 234# CONFIG_PARPORT_1284 is not set
210 235
@@ -230,14 +255,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
230CONFIG_CDROM_PKTCDVD=m 255CONFIG_CDROM_PKTCDVD=m
231CONFIG_CDROM_PKTCDVD_BUFFERS=8 256CONFIG_CDROM_PKTCDVD_BUFFERS=8
232# CONFIG_CDROM_PKTCDVD_WCACHE is not set 257# CONFIG_CDROM_PKTCDVD_WCACHE is not set
233
234#
235# IO Schedulers
236#
237CONFIG_IOSCHED_NOOP=y
238CONFIG_IOSCHED_AS=y
239CONFIG_IOSCHED_DEADLINE=y
240CONFIG_IOSCHED_CFQ=y
241CONFIG_ATA_OVER_ETH=y 258CONFIG_ATA_OVER_ETH=y
242 259
243# 260#
@@ -281,6 +298,7 @@ CONFIG_SCSI_SPI_ATTRS=y
281# 298#
282# SCSI low-level drivers 299# SCSI low-level drivers
283# 300#
301# CONFIG_ISCSI_TCP is not set
284# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 302# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
285# CONFIG_SCSI_3W_9XXX is not set 303# CONFIG_SCSI_3W_9XXX is not set
286# CONFIG_SCSI_ACARD is not set 304# CONFIG_SCSI_ACARD is not set
@@ -313,21 +331,19 @@ CONFIG_SCSI_SYM53C8XX_2=y
313CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 331CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
314CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 332CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
315CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 333CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
316# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set 334CONFIG_SCSI_SYM53C8XX_MMIO=y
317# CONFIG_SCSI_IPR is not set 335# CONFIG_SCSI_IPR is not set
318# CONFIG_SCSI_ZALON is not set 336CONFIG_SCSI_ZALON=y
337CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
338CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
339CONFIG_SCSI_NCR53C8XX_SYNC=40
340# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
319# CONFIG_SCSI_PAS16 is not set 341# CONFIG_SCSI_PAS16 is not set
320# CONFIG_SCSI_PSI240I is not set 342# CONFIG_SCSI_PSI240I is not set
321# CONFIG_SCSI_QLOGIC_FAS is not set 343# CONFIG_SCSI_QLOGIC_FAS is not set
322# CONFIG_SCSI_QLOGIC_FC is not set 344# CONFIG_SCSI_QLOGIC_FC is not set
323# CONFIG_SCSI_QLOGIC_1280 is not set 345# CONFIG_SCSI_QLOGIC_1280 is not set
324CONFIG_SCSI_QLA2XXX=y 346# CONFIG_SCSI_QLA_FC is not set
325# CONFIG_SCSI_QLA21XX is not set
326# CONFIG_SCSI_QLA22XX is not set
327# CONFIG_SCSI_QLA2300 is not set
328# CONFIG_SCSI_QLA2322 is not set
329# CONFIG_SCSI_QLA6312 is not set
330# CONFIG_SCSI_QLA24XX is not set
331# CONFIG_SCSI_LPFC is not set 347# CONFIG_SCSI_LPFC is not set
332# CONFIG_SCSI_SIM710 is not set 348# CONFIG_SCSI_SIM710 is not set
333# CONFIG_SCSI_SYM53C416 is not set 349# CONFIG_SCSI_SYM53C416 is not set
@@ -397,7 +413,7 @@ CONFIG_NETDEVICES=y
397# 413#
398CONFIG_NET_ETHERNET=y 414CONFIG_NET_ETHERNET=y
399# CONFIG_MII is not set 415# CONFIG_MII is not set
400# CONFIG_LASI_82596 is not set 416CONFIG_LASI_82596=y
401# CONFIG_HAPPYMEAL is not set 417# CONFIG_HAPPYMEAL is not set
402# CONFIG_SUNGEM is not set 418# CONFIG_SUNGEM is not set
403# CONFIG_CASSINI is not set 419# CONFIG_CASSINI is not set
@@ -464,6 +480,7 @@ CONFIG_NET_RADIO=y
464# Wireless 802.11b ISA/PCI cards support 480# Wireless 802.11b ISA/PCI cards support
465# 481#
466# CONFIG_HERMES is not set 482# CONFIG_HERMES is not set
483# CONFIG_ATMEL is not set
467 484
468# 485#
469# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support 486# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
@@ -527,7 +544,7 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
527# CONFIG_KEYBOARD_XTKBD is not set 544# CONFIG_KEYBOARD_XTKBD is not set
528# CONFIG_KEYBOARD_NEWTON is not set 545# CONFIG_KEYBOARD_NEWTON is not set
529# CONFIG_KEYBOARD_HIL_OLD is not set 546# CONFIG_KEYBOARD_HIL_OLD is not set
530# CONFIG_KEYBOARD_HIL is not set 547CONFIG_KEYBOARD_HIL=y
531CONFIG_INPUT_MOUSE=y 548CONFIG_INPUT_MOUSE=y
532CONFIG_MOUSE_PS2=y 549CONFIG_MOUSE_PS2=y
533# CONFIG_MOUSE_SERIAL is not set 550# CONFIG_MOUSE_SERIAL is not set
@@ -535,7 +552,7 @@ CONFIG_MOUSE_PS2=y
535# CONFIG_MOUSE_LOGIBM is not set 552# CONFIG_MOUSE_LOGIBM is not set
536# CONFIG_MOUSE_PC110PAD is not set 553# CONFIG_MOUSE_PC110PAD is not set
537# CONFIG_MOUSE_VSXXXAA is not set 554# CONFIG_MOUSE_VSXXXAA is not set
538# CONFIG_MOUSE_HIL is not set 555CONFIG_MOUSE_HIL=y
539# CONFIG_INPUT_JOYSTICK is not set 556# CONFIG_INPUT_JOYSTICK is not set
540# CONFIG_INPUT_TOUCHSCREEN is not set 557# CONFIG_INPUT_TOUCHSCREEN is not set
541CONFIG_INPUT_MISC=y 558CONFIG_INPUT_MISC=y
@@ -549,7 +566,8 @@ CONFIG_SERIO=y
549# CONFIG_SERIO_SERPORT is not set 566# CONFIG_SERIO_SERPORT is not set
550# CONFIG_SERIO_PARKBD is not set 567# CONFIG_SERIO_PARKBD is not set
551CONFIG_SERIO_GSCPS2=y 568CONFIG_SERIO_GSCPS2=y
552# CONFIG_HP_SDC is not set 569CONFIG_HP_SDC=y
570CONFIG_HIL_MLC=y
553# CONFIG_SERIO_PCIPS2 is not set 571# CONFIG_SERIO_PCIPS2 is not set
554CONFIG_SERIO_LIBPS2=y 572CONFIG_SERIO_LIBPS2=y
555# CONFIG_SERIO_RAW is not set 573# CONFIG_SERIO_RAW is not set
@@ -569,6 +587,7 @@ CONFIG_HW_CONSOLE=y
569CONFIG_SERIAL_8250=y 587CONFIG_SERIAL_8250=y
570CONFIG_SERIAL_8250_CONSOLE=y 588CONFIG_SERIAL_8250_CONSOLE=y
571CONFIG_SERIAL_8250_NR_UARTS=13 589CONFIG_SERIAL_8250_NR_UARTS=13
590CONFIG_SERIAL_8250_RUNTIME_UARTS=4
572CONFIG_SERIAL_8250_EXTENDED=y 591CONFIG_SERIAL_8250_EXTENDED=y
573CONFIG_SERIAL_8250_MANY_PORTS=y 592CONFIG_SERIAL_8250_MANY_PORTS=y
574CONFIG_SERIAL_8250_SHARE_IRQ=y 593CONFIG_SERIAL_8250_SHARE_IRQ=y
@@ -582,11 +601,10 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
582# 601#
583# Non-8250 serial port support 602# Non-8250 serial port support
584# 603#
585# CONFIG_SERIAL_MUX is not set 604CONFIG_SERIAL_MUX=y
586# CONFIG_PDC_CONSOLE is not set 605CONFIG_SERIAL_MUX_CONSOLE=y
587CONFIG_SERIAL_CORE=y 606CONFIG_SERIAL_CORE=y
588CONFIG_SERIAL_CORE_CONSOLE=y 607CONFIG_SERIAL_CORE_CONSOLE=y
589# CONFIG_SERIAL_JSM is not set
590CONFIG_UNIX98_PTYS=y 608CONFIG_UNIX98_PTYS=y
591CONFIG_LEGACY_PTYS=y 609CONFIG_LEGACY_PTYS=y
592CONFIG_LEGACY_PTY_COUNT=256 610CONFIG_LEGACY_PTY_COUNT=256
@@ -626,6 +644,12 @@ CONFIG_GEN_RTC=y
626# CONFIG_I2C is not set 644# CONFIG_I2C is not set
627 645
628# 646#
647# SPI support
648#
649# CONFIG_SPI is not set
650# CONFIG_SPI_MASTER is not set
651
652#
629# Dallas's 1-wire bus 653# Dallas's 1-wire bus
630# 654#
631# CONFIG_W1 is not set 655# CONFIG_W1 is not set
@@ -661,7 +685,6 @@ CONFIG_FB=y
661CONFIG_FB_CFB_FILLRECT=y 685CONFIG_FB_CFB_FILLRECT=y
662CONFIG_FB_CFB_COPYAREA=y 686CONFIG_FB_CFB_COPYAREA=y
663CONFIG_FB_CFB_IMAGEBLIT=y 687CONFIG_FB_CFB_IMAGEBLIT=y
664CONFIG_FB_SOFT_CURSOR=y
665# CONFIG_FB_MACMODES is not set 688# CONFIG_FB_MACMODES is not set
666# CONFIG_FB_MODE_HELPERS is not set 689# CONFIG_FB_MODE_HELPERS is not set
667# CONFIG_FB_TILEBLITTING is not set 690# CONFIG_FB_TILEBLITTING is not set
@@ -671,6 +694,7 @@ CONFIG_FB_SOFT_CURSOR=y
671# CONFIG_FB_ASILIANT is not set 694# CONFIG_FB_ASILIANT is not set
672# CONFIG_FB_IMSTT is not set 695# CONFIG_FB_IMSTT is not set
673CONFIG_FB_STI=y 696CONFIG_FB_STI=y
697# CONFIG_FB_S1D13XXX is not set
674# CONFIG_FB_NVIDIA is not set 698# CONFIG_FB_NVIDIA is not set
675# CONFIG_FB_RIVA is not set 699# CONFIG_FB_RIVA is not set
676# CONFIG_FB_MATROX is not set 700# CONFIG_FB_MATROX is not set
@@ -683,9 +707,7 @@ CONFIG_FB_STI=y
683# CONFIG_FB_KYRO is not set 707# CONFIG_FB_KYRO is not set
684# CONFIG_FB_3DFX is not set 708# CONFIG_FB_3DFX is not set
685# CONFIG_FB_VOODOO1 is not set 709# CONFIG_FB_VOODOO1 is not set
686# CONFIG_FB_CYBLA is not set
687# CONFIG_FB_TRIDENT is not set 710# CONFIG_FB_TRIDENT is not set
688# CONFIG_FB_S1D13XXX is not set
689# CONFIG_FB_VIRTUAL is not set 711# CONFIG_FB_VIRTUAL is not set
690 712
691# 713#
@@ -695,6 +717,7 @@ CONFIG_DUMMY_CONSOLE=y
695CONFIG_DUMMY_CONSOLE_COLUMNS=160 717CONFIG_DUMMY_CONSOLE_COLUMNS=160
696CONFIG_DUMMY_CONSOLE_ROWS=64 718CONFIG_DUMMY_CONSOLE_ROWS=64
697CONFIG_FRAMEBUFFER_CONSOLE=y 719CONFIG_FRAMEBUFFER_CONSOLE=y
720# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
698CONFIG_STI_CONSOLE=y 721CONFIG_STI_CONSOLE=y
699# CONFIG_FONTS is not set 722# CONFIG_FONTS is not set
700CONFIG_FONT_8x8=y 723CONFIG_FONT_8x8=y
@@ -713,7 +736,85 @@ CONFIG_LOGO_PARISC_CLUT224=y
713# 736#
714# Sound 737# Sound
715# 738#
716# CONFIG_SOUND is not set 739CONFIG_SOUND=y
740
741#
742# Advanced Linux Sound Architecture
743#
744CONFIG_SND=y
745CONFIG_SND_TIMER=y
746CONFIG_SND_PCM=y
747CONFIG_SND_SEQUENCER=y
748# CONFIG_SND_SEQ_DUMMY is not set
749CONFIG_SND_OSSEMUL=y
750CONFIG_SND_MIXER_OSS=y
751CONFIG_SND_PCM_OSS=y
752CONFIG_SND_SEQUENCER_OSS=y
753CONFIG_SND_SUPPORT_OLD_API=y
754# CONFIG_SND_VERBOSE_PRINTK is not set
755# CONFIG_SND_DEBUG is not set
756
757#
758# Generic devices
759#
760# CONFIG_SND_DUMMY is not set
761# CONFIG_SND_VIRMIDI is not set
762# CONFIG_SND_MTPAV is not set
763# CONFIG_SND_SERIAL_U16550 is not set
764# CONFIG_SND_MPU401 is not set
765
766#
767# PCI devices
768#
769# CONFIG_SND_AD1889 is not set
770# CONFIG_SND_ALI5451 is not set
771# CONFIG_SND_ATIIXP is not set
772# CONFIG_SND_ATIIXP_MODEM is not set
773# CONFIG_SND_AU8810 is not set
774# CONFIG_SND_AU8820 is not set
775# CONFIG_SND_AU8830 is not set
776# CONFIG_SND_BT87X is not set
777# CONFIG_SND_CA0106 is not set
778# CONFIG_SND_CMIPCI is not set
779# CONFIG_SND_CS4281 is not set
780# CONFIG_SND_CS46XX is not set
781# CONFIG_SND_EMU10K1 is not set
782# CONFIG_SND_EMU10K1X is not set
783# CONFIG_SND_ENS1370 is not set
784# CONFIG_SND_ENS1371 is not set
785# CONFIG_SND_ES1938 is not set
786# CONFIG_SND_ES1968 is not set
787# CONFIG_SND_FM801 is not set
788# CONFIG_SND_HDA_INTEL is not set
789# CONFIG_SND_HDSP is not set
790# CONFIG_SND_HDSPM is not set
791# CONFIG_SND_ICE1712 is not set
792# CONFIG_SND_ICE1724 is not set
793# CONFIG_SND_INTEL8X0 is not set
794# CONFIG_SND_KORG1212 is not set
795# CONFIG_SND_MAESTRO3 is not set
796# CONFIG_SND_MIXART is not set
797# CONFIG_SND_NM256 is not set
798# CONFIG_SND_PCXHR is not set
799# CONFIG_SND_RME32 is not set
800# CONFIG_SND_RME96 is not set
801# CONFIG_SND_RME9652 is not set
802# CONFIG_SND_SONICVIBES is not set
803# CONFIG_SND_TRIDENT is not set
804# CONFIG_SND_VIA82XX is not set
805# CONFIG_SND_VIA82XX_MODEM is not set
806# CONFIG_SND_VX222 is not set
807# CONFIG_SND_YMFPCI is not set
808
809#
810# GSC devices
811#
812CONFIG_SND_HARMONY=y
813
814#
815# Open Sound System
816#
817# CONFIG_SOUND_PRIME is not set
717 818
718# 819#
719# USB support 820# USB support
@@ -723,6 +824,10 @@ CONFIG_USB_ARCH_HAS_OHCI=y
723# CONFIG_USB is not set 824# CONFIG_USB is not set
724 825
725# 826#
827# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
828#
829
830#
726# USB Gadget Support 831# USB Gadget Support
727# 832#
728# CONFIG_USB_GADGET is not set 833# CONFIG_USB_GADGET is not set
@@ -877,18 +982,23 @@ CONFIG_NLS_DEFAULT="iso8859-1"
877# Kernel hacking 982# Kernel hacking
878# 983#
879# CONFIG_PRINTK_TIME is not set 984# CONFIG_PRINTK_TIME is not set
880CONFIG_DEBUG_KERNEL=y
881CONFIG_MAGIC_SYSRQ=y 985CONFIG_MAGIC_SYSRQ=y
986CONFIG_DEBUG_KERNEL=y
882CONFIG_LOG_BUF_SHIFT=16 987CONFIG_LOG_BUF_SHIFT=16
883CONFIG_DETECT_SOFTLOCKUP=y 988CONFIG_DETECT_SOFTLOCKUP=y
884# CONFIG_SCHEDSTATS is not set 989# CONFIG_SCHEDSTATS is not set
885# CONFIG_DEBUG_SLAB is not set 990# CONFIG_DEBUG_SLAB is not set
991# CONFIG_DEBUG_MUTEXES is not set
886# CONFIG_DEBUG_SPINLOCK is not set 992# CONFIG_DEBUG_SPINLOCK is not set
887# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 993# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
888# CONFIG_DEBUG_KOBJECT is not set 994# CONFIG_DEBUG_KOBJECT is not set
889# CONFIG_DEBUG_INFO is not set 995# CONFIG_DEBUG_INFO is not set
890# CONFIG_DEBUG_IOREMAP is not set 996# CONFIG_DEBUG_IOREMAP is not set
891# CONFIG_DEBUG_FS is not set 997# CONFIG_DEBUG_FS is not set
998# CONFIG_DEBUG_VM is not set
999CONFIG_FORCED_INLINING=y
1000# CONFIG_RCU_TORTURE_TEST is not set
1001# CONFIG_DEBUG_RODATA is not set
892 1002
893# 1003#
894# Security options 1004# Security options
diff --git a/arch/parisc/hpux/entry_hpux.S b/arch/parisc/hpux/entry_hpux.S
index fa9bf38787e7..31c8cccfba31 100644
--- a/arch/parisc/hpux/entry_hpux.S
+++ b/arch/parisc/hpux/entry_hpux.S
@@ -22,10 +22,9 @@
22#include <linux/linkage.h> 22#include <linux/linkage.h>
23#include <asm/unistd.h> 23#include <asm/unistd.h>
24 24
25 .text
26
27#define ENTRY_NAME(_name_) .word _name_ 25#define ENTRY_NAME(_name_) .word _name_
28 26
27 .section .rodata,"a"
29 .align 4 28 .align 4
30 .export hpux_call_table 29 .export hpux_call_table
31 .import hpux_unimplemented_wrapper 30 .import hpux_unimplemented_wrapper
diff --git a/arch/parisc/hpux/sys_hpux.c b/arch/parisc/hpux/sys_hpux.c
index 29b4d61898f2..05273ccced0e 100644
--- a/arch/parisc/hpux/sys_hpux.c
+++ b/arch/parisc/hpux/sys_hpux.c
@@ -468,19 +468,23 @@ int hpux_sysfs(int opcode, unsigned long arg1, unsigned long arg2)
468 if ( opcode == 1 ) { /* GETFSIND */ 468 if ( opcode == 1 ) { /* GETFSIND */
469 len = strlen_user((char *)arg1); 469 len = strlen_user((char *)arg1);
470 printk(KERN_DEBUG "len of arg1 = %d\n", len); 470 printk(KERN_DEBUG "len of arg1 = %d\n", len);
471 471 if (len == 0)
472 fsname = (char *) kmalloc(len+1, GFP_KERNEL); 472 return 0;
473 fsname = (char *) kmalloc(len, GFP_KERNEL);
473 if ( !fsname ) { 474 if ( !fsname ) {
474 printk(KERN_DEBUG "failed to kmalloc fsname\n"); 475 printk(KERN_DEBUG "failed to kmalloc fsname\n");
475 return 0; 476 return 0;
476 } 477 }
477 478
478 if ( copy_from_user(fsname, (char *)arg1, len+1) ) { 479 if ( copy_from_user(fsname, (char *)arg1, len) ) {
479 printk(KERN_DEBUG "failed to copy_from_user fsname\n"); 480 printk(KERN_DEBUG "failed to copy_from_user fsname\n");
480 kfree(fsname); 481 kfree(fsname);
481 return 0; 482 return 0;
482 } 483 }
483 484
485 /* String could be altered by userspace after strlen_user() */
486 fsname[len] = '\0';
487
484 printk(KERN_DEBUG "that is '%s' as (char *)\n", fsname); 488 printk(KERN_DEBUG "that is '%s' as (char *)\n", fsname);
485 if ( !strcmp(fsname, "hfs") ) { 489 if ( !strcmp(fsname, "hfs") ) {
486 fstype = 0; 490 fstype = 0;
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
index 2d804e2d16d1..3d569a485a1a 100644
--- a/arch/parisc/kernel/drivers.c
+++ b/arch/parisc/kernel/drivers.c
@@ -408,11 +408,10 @@ static void setup_bus_id(struct parisc_device *padev)
408 408
409struct parisc_device * create_tree_node(char id, struct device *parent) 409struct parisc_device * create_tree_node(char id, struct device *parent)
410{ 410{
411 struct parisc_device *dev = kmalloc(sizeof(*dev), GFP_KERNEL); 411 struct parisc_device *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
412 if (!dev) 412 if (!dev)
413 return NULL; 413 return NULL;
414 414
415 memset(dev, 0, sizeof(*dev));
416 dev->hw_path = id; 415 dev->hw_path = id;
417 dev->id.hw_type = HPHW_FAULTY; 416 dev->id.hw_type = HPHW_FAULTY;
418 417
diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c
index f40a777dd388..1d00c365f2b1 100644
--- a/arch/parisc/kernel/parisc_ksyms.c
+++ b/arch/parisc/kernel/parisc_ksyms.c
@@ -48,9 +48,6 @@ EXPORT_SYMBOL(strrchr);
48EXPORT_SYMBOL(strstr); 48EXPORT_SYMBOL(strstr);
49EXPORT_SYMBOL(strpbrk); 49EXPORT_SYMBOL(strpbrk);
50 50
51#include <linux/pm.h>
52EXPORT_SYMBOL(pm_power_off);
53
54#include <asm/atomic.h> 51#include <asm/atomic.h>
55EXPORT_SYMBOL(__xchg8); 52EXPORT_SYMBOL(__xchg8);
56EXPORT_SYMBOL(__xchg32); 53EXPORT_SYMBOL(__xchg32);
diff --git a/arch/parisc/kernel/pci.c b/arch/parisc/kernel/pci.c
index 88cba49c5301..79c7db2705fd 100644
--- a/arch/parisc/kernel/pci.c
+++ b/arch/parisc/kernel/pci.c
@@ -47,18 +47,17 @@
47 * this makes the boot time much longer than necessary. 47 * this makes the boot time much longer than necessary.
48 * 20ms seems to work for all the HP PCI implementations to date. 48 * 20ms seems to work for all the HP PCI implementations to date.
49 * 49 *
50 * XXX: turn into a #defined constant in <asm/pci.h> ? 50 * #define pci_post_reset_delay 50
51 */ 51 */
52int pci_post_reset_delay = 50;
53 52
54struct pci_port_ops *pci_port; 53struct pci_port_ops *pci_port __read_mostly;
55struct pci_bios_ops *pci_bios; 54struct pci_bios_ops *pci_bios __read_mostly;
56 55
57int pci_hba_count = 0; 56static int pci_hba_count __read_mostly;
58 57
59/* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */ 58/* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */
60#define PCI_HBA_MAX 32 59#define PCI_HBA_MAX 32
61struct pci_hba_data *parisc_pci_hba[PCI_HBA_MAX]; 60static struct pci_hba_data *parisc_pci_hba[PCI_HBA_MAX] __read_mostly;
62 61
63 62
64/******************************************************************** 63/********************************************************************
@@ -259,8 +258,10 @@ void __devinit pcibios_resource_to_bus(struct pci_dev *dev,
259void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, 258void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
260 struct pci_bus_region *region) 259 struct pci_bus_region *region)
261{ 260{
261#ifdef CONFIG_64BIT
262 struct pci_bus *bus = dev->bus; 262 struct pci_bus *bus = dev->bus;
263 struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data); 263 struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data);
264#endif
264 265
265 if (res->flags & IORESOURCE_MEM) { 266 if (res->flags & IORESOURCE_MEM) {
266 res->start = PCI_HOST_ADDR(hba, region->start); 267 res->start = PCI_HOST_ADDR(hba, region->start);
diff --git a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c
index 11d406cd0b3e..53f861c82f93 100644
--- a/arch/parisc/kernel/perf.c
+++ b/arch/parisc/kernel/perf.c
@@ -68,20 +68,20 @@ struct rdr_tbl_ent {
68}; 68};
69 69
70static int perf_processor_interface __read_mostly = UNKNOWN_INTF; 70static int perf_processor_interface __read_mostly = UNKNOWN_INTF;
71static int perf_enabled __read_mostly = 0; 71static int perf_enabled __read_mostly;
72static spinlock_t perf_lock; 72static spinlock_t perf_lock;
73struct parisc_device *cpu_device __read_mostly = NULL; 73struct parisc_device *cpu_device __read_mostly;
74 74
75/* RDRs to write for PCX-W */ 75/* RDRs to write for PCX-W */
76static int perf_rdrs_W[] = 76static const int perf_rdrs_W[] =
77 { 0, 1, 4, 5, 6, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 }; 77 { 0, 1, 4, 5, 6, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 };
78 78
79/* RDRs to write for PCX-U */ 79/* RDRs to write for PCX-U */
80static int perf_rdrs_U[] = 80static const int perf_rdrs_U[] =
81 { 0, 1, 4, 5, 6, 7, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 }; 81 { 0, 1, 4, 5, 6, 7, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 };
82 82
83/* RDR register descriptions for PCX-W */ 83/* RDR register descriptions for PCX-W */
84static struct rdr_tbl_ent perf_rdr_tbl_W[] = { 84static const struct rdr_tbl_ent perf_rdr_tbl_W[] = {
85 { 19, 1, 8 }, /* RDR 0 */ 85 { 19, 1, 8 }, /* RDR 0 */
86 { 16, 1, 16 }, /* RDR 1 */ 86 { 16, 1, 16 }, /* RDR 1 */
87 { 72, 2, 0 }, /* RDR 2 */ 87 { 72, 2, 0 }, /* RDR 2 */
@@ -117,7 +117,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_W[] = {
117}; 117};
118 118
119/* RDR register descriptions for PCX-U */ 119/* RDR register descriptions for PCX-U */
120static struct rdr_tbl_ent perf_rdr_tbl_U[] = { 120static const struct rdr_tbl_ent perf_rdr_tbl_U[] = {
121 { 19, 1, 8 }, /* RDR 0 */ 121 { 19, 1, 8 }, /* RDR 0 */
122 { 32, 1, 16 }, /* RDR 1 */ 122 { 32, 1, 16 }, /* RDR 1 */
123 { 20, 1, 0 }, /* RDR 2 */ 123 { 20, 1, 0 }, /* RDR 2 */
@@ -156,7 +156,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_U[] = {
156 * A non-zero write_control in the above tables is a byte offset into 156 * A non-zero write_control in the above tables is a byte offset into
157 * this array. 157 * this array.
158 */ 158 */
159static uint64_t perf_bitmasks[] = { 159static const uint64_t perf_bitmasks[] = {
160 0x0000000000000000ul, /* first dbl word must be zero */ 160 0x0000000000000000ul, /* first dbl word must be zero */
161 0xfdffe00000000000ul, /* RDR0 bitmask */ 161 0xfdffe00000000000ul, /* RDR0 bitmask */
162 0x003f000000000000ul, /* RDR1 bitmask */ 162 0x003f000000000000ul, /* RDR1 bitmask */
@@ -173,7 +173,7 @@ static uint64_t perf_bitmasks[] = {
173 * Write control bitmasks for Pa-8700 processor given 173 * Write control bitmasks for Pa-8700 processor given
174 * somethings have changed slightly. 174 * somethings have changed slightly.
175 */ 175 */
176static uint64_t perf_bitmasks_piranha[] = { 176static const uint64_t perf_bitmasks_piranha[] = {
177 0x0000000000000000ul, /* first dbl word must be zero */ 177 0x0000000000000000ul, /* first dbl word must be zero */
178 0xfdffe00000000000ul, /* RDR0 bitmask */ 178 0xfdffe00000000000ul, /* RDR0 bitmask */
179 0x003f000000000000ul, /* RDR1 bitmask */ 179 0x003f000000000000ul, /* RDR1 bitmask */
@@ -186,7 +186,7 @@ static uint64_t perf_bitmasks_piranha[] = {
186 0xfffc000000000000ul 186 0xfffc000000000000ul
187}; 187};
188 188
189static uint64_t *bitmask_array; /* array of bitmasks to use */ 189static const uint64_t *bitmask_array; /* array of bitmasks to use */
190 190
191/****************************************************************************** 191/******************************************************************************
192 * Function Prototypes 192 * Function Prototypes
@@ -200,7 +200,7 @@ static ssize_t perf_write(struct file *file, const char __user *buf, size_t coun
200static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg); 200static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
201static void perf_start_counters(void); 201static void perf_start_counters(void);
202static int perf_stop_counters(uint32_t *raddr); 202static int perf_stop_counters(uint32_t *raddr);
203static struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num); 203static const struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num);
204static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer); 204static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer);
205static int perf_rdr_clear(uint32_t rdr_num); 205static int perf_rdr_clear(uint32_t rdr_num);
206static int perf_write_image(uint64_t *memaddr); 206static int perf_write_image(uint64_t *memaddr);
@@ -444,7 +444,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
444 uint32_t raddr[4]; 444 uint32_t raddr[4];
445 int error = 0; 445 int error = 0;
446 446
447 lock_kernel();
448 switch (cmd) { 447 switch (cmd) {
449 448
450 case PA_PERF_ON: 449 case PA_PERF_ON:
@@ -477,8 +476,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
477 error = -ENOTTY; 476 error = -ENOTTY;
478 } 477 }
479 478
480 unlock_kernel();
481
482 return error; 479 return error;
483} 480}
484 481
@@ -655,7 +652,7 @@ static int perf_stop_counters(uint32_t *raddr)
655 * Retrieve a pointer to the description of what this 652 * Retrieve a pointer to the description of what this
656 * RDR contains. 653 * RDR contains.
657 */ 654 */
658static struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num) 655static const struct rdr_tbl_ent * perf_rdr_get_entry(uint32_t rdr_num)
659{ 656{
660 if (perf_processor_interface == ONYX_INTF) { 657 if (perf_processor_interface == ONYX_INTF) {
661 return &perf_rdr_tbl_U[rdr_num]; 658 return &perf_rdr_tbl_U[rdr_num];
@@ -673,7 +670,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
673{ 670{
674 uint64_t data, data_mask = 0; 671 uint64_t data, data_mask = 0;
675 uint32_t width, xbits, i; 672 uint32_t width, xbits, i;
676 struct rdr_tbl_ent *tentry; 673 const struct rdr_tbl_ent *tentry;
677 674
678 tentry = perf_rdr_get_entry(rdr_num); 675 tentry = perf_rdr_get_entry(rdr_num);
679 if ((width = tentry->width) == 0) 676 if ((width = tentry->width) == 0)
@@ -721,7 +718,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
721 */ 718 */
722static int perf_rdr_clear(uint32_t rdr_num) 719static int perf_rdr_clear(uint32_t rdr_num)
723{ 720{
724 struct rdr_tbl_ent *tentry; 721 const struct rdr_tbl_ent *tentry;
725 int32_t i; 722 int32_t i;
726 723
727 tentry = perf_rdr_get_entry(rdr_num); 724 tentry = perf_rdr_get_entry(rdr_num);
@@ -753,10 +750,11 @@ static int perf_write_image(uint64_t *memaddr)
753 uint64_t buffer[MAX_RDR_WORDS]; 750 uint64_t buffer[MAX_RDR_WORDS];
754 uint64_t *bptr; 751 uint64_t *bptr;
755 uint32_t dwords; 752 uint32_t dwords;
756 uint32_t *intrigue_rdr; 753 const uint32_t *intrigue_rdr;
757 uint64_t *intrigue_bitmask, tmp64; 754 const uint64_t *intrigue_bitmask;
755 uint64_t tmp64;
758 void __iomem *runway; 756 void __iomem *runway;
759 struct rdr_tbl_ent *tentry; 757 const struct rdr_tbl_ent *tentry;
760 int i; 758 int i;
761 759
762 /* Clear out counters */ 760 /* Clear out counters */
@@ -830,7 +828,7 @@ static int perf_write_image(uint64_t *memaddr)
830 */ 828 */
831static void perf_rdr_write(uint32_t rdr_num, uint64_t *buffer) 829static void perf_rdr_write(uint32_t rdr_num, uint64_t *buffer)
832{ 830{
833 struct rdr_tbl_ent *tentry; 831 const struct rdr_tbl_ent *tentry;
834 int32_t i; 832 int32_t i;
835 833
836printk("perf_rdr_write\n"); 834printk("perf_rdr_write\n");
diff --git a/arch/parisc/kernel/perf_images.h b/arch/parisc/kernel/perf_images.h
index d9562fe3f75c..7fef9644df47 100644
--- a/arch/parisc/kernel/perf_images.h
+++ b/arch/parisc/kernel/perf_images.h
@@ -25,7 +25,7 @@
25 25
26#define PCXU_IMAGE_SIZE 584 26#define PCXU_IMAGE_SIZE 584
27 27
28static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = { 28static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] __read_mostly = {
29/* 29/*
30 * CPI: 30 * CPI:
31 * 31 *
@@ -2093,7 +2093,7 @@ static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = {
2093}; 2093};
2094#define PCXW_IMAGE_SIZE 576 2094#define PCXW_IMAGE_SIZE 576
2095 2095
2096static uint32_t cuda_images[][PCXW_IMAGE_SIZE/sizeof(uint32_t)] = { 2096static uint32_t cuda_images[][PCXW_IMAGE_SIZE/sizeof(uint32_t)] __read_mostly = {
2097/* 2097/*
2098 * CPI: FROM CPI.IDF (Image 0) 2098 * CPI: FROM CPI.IDF (Image 0)
2099 * 2099 *
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c
index 5da41677e70b..e8dea4177113 100644
--- a/arch/parisc/kernel/process.c
+++ b/arch/parisc/kernel/process.c
@@ -54,27 +54,6 @@
54#include <asm/uaccess.h> 54#include <asm/uaccess.h>
55#include <asm/unwind.h> 55#include <asm/unwind.h>
56 56
57static int hlt_counter __read_mostly;
58
59/*
60 * Power off function, if any
61 */
62void (*pm_power_off)(void);
63
64void disable_hlt(void)
65{
66 hlt_counter++;
67}
68
69EXPORT_SYMBOL(disable_hlt);
70
71void enable_hlt(void)
72{
73 hlt_counter--;
74}
75
76EXPORT_SYMBOL(enable_hlt);
77
78void default_idle(void) 57void default_idle(void)
79{ 58{
80 barrier(); 59 barrier();
@@ -102,12 +81,7 @@ void cpu_idle(void)
102} 81}
103 82
104 83
105#ifdef __LP64__ 84#define COMMAND_GLOBAL F_EXTEND(0xfffe0030)
106#define COMMAND_GLOBAL 0xfffffffffffe0030UL
107#else
108#define COMMAND_GLOBAL 0xfffe0030
109#endif
110
111#define CMD_RESET 5 /* reset any module */ 85#define CMD_RESET 5 /* reset any module */
112 86
113/* 87/*
@@ -162,6 +136,7 @@ void machine_halt(void)
162 */ 136 */
163} 137}
164 138
139void (*chassis_power_off)(void);
165 140
166/* 141/*
167 * This routine is called from sys_reboot to actually turn off the 142 * This routine is called from sys_reboot to actually turn off the
@@ -170,8 +145,8 @@ void machine_halt(void)
170void machine_power_off(void) 145void machine_power_off(void)
171{ 146{
172 /* If there is a registered power off handler, call it. */ 147 /* If there is a registered power off handler, call it. */
173 if(pm_power_off) 148 if (chassis_power_off)
174 pm_power_off(); 149 chassis_power_off();
175 150
176 /* Put the soft power button back under hardware control. 151 /* Put the soft power button back under hardware control.
177 * If the user had already pressed the power button, the 152 * If the user had already pressed the power button, the
@@ -187,6 +162,8 @@ void machine_power_off(void)
187 KERN_EMERG "Please power this system off now."); 162 KERN_EMERG "Please power this system off now.");
188} 163}
189 164
165void (*pm_power_off)(void) = machine_power_off;
166EXPORT_SYMBOL(pm_power_off);
190 167
191/* 168/*
192 * Create a kernel thread 169 * Create a kernel thread
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
index 27160e8bf15b..413292f1a4a3 100644
--- a/arch/parisc/kernel/ptrace.c
+++ b/arch/parisc/kernel/ptrace.c
@@ -91,7 +91,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
91 int copied; 91 int copied;
92 92
93#ifdef __LP64__ 93#ifdef __LP64__
94 if (is_compat_task(child)) { 94 if (personality(child->personality) == PER_LINUX32) {
95 unsigned int tmp; 95 unsigned int tmp;
96 96
97 addr &= 0xffffffffL; 97 addr &= 0xffffffffL;
@@ -123,7 +123,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
123 case PTRACE_POKEDATA: 123 case PTRACE_POKEDATA:
124 ret = 0; 124 ret = 0;
125#ifdef __LP64__ 125#ifdef __LP64__
126 if (is_compat_task(child)) { 126 if (personality(child->personality) == PER_LINUX32) {
127 unsigned int tmp = (unsigned int)data; 127 unsigned int tmp = (unsigned int)data;
128 DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n", 128 DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n",
129 request == PTRACE_POKETEXT ? "TEXT" : "DATA", 129 request == PTRACE_POKETEXT ? "TEXT" : "DATA",
@@ -146,7 +146,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
146 case PTRACE_PEEKUSR: { 146 case PTRACE_PEEKUSR: {
147 ret = -EIO; 147 ret = -EIO;
148#ifdef __LP64__ 148#ifdef __LP64__
149 if (is_compat_task(child)) { 149 if (personality(child->personality) == PER_LINUX32) {
150 unsigned int tmp; 150 unsigned int tmp;
151 151
152 if (addr & (sizeof(int)-1)) 152 if (addr & (sizeof(int)-1))
@@ -205,7 +205,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
205 goto out_tsk; 205 goto out_tsk;
206 } 206 }
207#ifdef __LP64__ 207#ifdef __LP64__
208 if (is_compat_task(child)) { 208 if (personality(child->personality) == PER_LINUX32) {
209 if (addr & (sizeof(int)-1)) 209 if (addr & (sizeof(int)-1))
210 goto out_tsk; 210 goto out_tsk;
211 if ((addr = translate_usr_offset(addr)) < 0) 211 if ((addr = translate_usr_offset(addr)) < 0)
diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c
index 3a25a7bd673e..05767e83cf2d 100644
--- a/arch/parisc/kernel/signal.c
+++ b/arch/parisc/kernel/signal.c
@@ -317,7 +317,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
317 317
318 if(personality(current->personality) == PER_LINUX32) { 318 if(personality(current->personality) == PER_LINUX32) {
319 DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info); 319 DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info);
320 err |= compat_copy_siginfo_to_user(&compat_frame->info, info); 320 err |= copy_siginfo_to_user32(&compat_frame->info, info);
321 DBG(1,"SETUP_RT_FRAME: 1\n"); 321 DBG(1,"SETUP_RT_FRAME: 1\n");
322 compat_val = (compat_int_t)current->sas_ss_sp; 322 compat_val = (compat_int_t)current->sas_ss_sp;
323 err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_sp); 323 err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_sp);
diff --git a/arch/parisc/kernel/signal32.c b/arch/parisc/kernel/signal32.c
index 0792e20efef3..a6b4231cafa1 100644
--- a/arch/parisc/kernel/signal32.c
+++ b/arch/parisc/kernel/signal32.c
@@ -31,7 +31,6 @@
31#include <linux/types.h> 31#include <linux/types.h>
32#include <linux/errno.h> 32#include <linux/errno.h>
33 33
34#include <asm/compat_signal.h>
35#include <asm/uaccess.h> 34#include <asm/uaccess.h>
36 35
37#include "signal32.h" 36#include "signal32.h"
@@ -398,3 +397,104 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __
398 397
399 return err; 398 return err;
400} 399}
400
401int
402copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from)
403{
404 unsigned long tmp;
405 int err;
406
407 if (!access_ok(VERIFY_READ, from, sizeof(compat_siginfo_t)))
408 return -EFAULT;
409
410 err = __get_user(to->si_signo, &from->si_signo);
411 err |= __get_user(to->si_errno, &from->si_errno);
412 err |= __get_user(to->si_code, &from->si_code);
413
414 if (to->si_code < 0)
415 err |= __copy_from_user(&to->_sifields._pad, &from->_sifields._pad, SI_PAD_SIZE);
416 else {
417 switch (to->si_code >> 16) {
418 case __SI_CHLD >> 16:
419 err |= __get_user(to->si_utime, &from->si_utime);
420 err |= __get_user(to->si_stime, &from->si_stime);
421 err |= __get_user(to->si_status, &from->si_status);
422 default:
423 err |= __get_user(to->si_pid, &from->si_pid);
424 err |= __get_user(to->si_uid, &from->si_uid);
425 break;
426 case __SI_FAULT >> 16:
427 err |= __get_user(tmp, &from->si_addr);
428 to->si_addr = (void __user *) tmp;
429 break;
430 case __SI_POLL >> 16:
431 err |= __get_user(to->si_band, &from->si_band);
432 err |= __get_user(to->si_fd, &from->si_fd);
433 break;
434 case __SI_RT >> 16: /* This is not generated by the kernel as of now. */
435 case __SI_MESGQ >> 16:
436 err |= __get_user(to->si_pid, &from->si_pid);
437 err |= __get_user(to->si_uid, &from->si_uid);
438 err |= __get_user(to->si_int, &from->si_int);
439 break;
440 }
441 }
442 return err;
443}
444
445int
446copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from)
447{
448 unsigned int addr;
449 int err;
450
451 if (!access_ok(VERIFY_WRITE, to, sizeof(compat_siginfo_t)))
452 return -EFAULT;
453
454 /* If you change siginfo_t structure, please be sure
455 this code is fixed accordingly.
456 It should never copy any pad contained in the structure
457 to avoid security leaks, but must copy the generic
458 3 ints plus the relevant union member.
459 This routine must convert siginfo from 64bit to 32bit as well
460 at the same time. */
461 err = __put_user(from->si_signo, &to->si_signo);
462 err |= __put_user(from->si_errno, &to->si_errno);
463 err |= __put_user((short)from->si_code, &to->si_code);
464 if (from->si_code < 0)
465 err |= __copy_to_user(&to->_sifields._pad, &from->_sifields._pad, SI_PAD_SIZE);
466 else {
467 switch (from->si_code >> 16) {
468 case __SI_CHLD >> 16:
469 err |= __put_user(from->si_utime, &to->si_utime);
470 err |= __put_user(from->si_stime, &to->si_stime);
471 err |= __put_user(from->si_status, &to->si_status);
472 default:
473 err |= __put_user(from->si_pid, &to->si_pid);
474 err |= __put_user(from->si_uid, &to->si_uid);
475 break;
476 case __SI_FAULT >> 16:
477 /* avoid type-checking warnings by copying _pad[0] in lieu of si_addr... */
478 err |= __put_user(from->_sifields._pad[0], &to->si_addr);
479 break;
480 case __SI_POLL >> 16:
481 err |= __put_user(from->si_band, &to->si_band);
482 err |= __put_user(from->si_fd, &to->si_fd);
483 break;
484 case __SI_TIMER >> 16:
485 err |= __put_user(from->si_tid, &to->si_tid);
486 err |= __put_user(from->si_overrun, &to->si_overrun);
487 addr = (unsigned long) from->si_ptr;
488 err |= __put_user(addr, &to->si_ptr);
489 break;
490 case __SI_RT >> 16: /* Not generated by the kernel as of now. */
491 case __SI_MESGQ >> 16:
492 err |= __put_user(from->si_uid, &to->si_uid);
493 err |= __put_user(from->si_pid, &to->si_pid);
494 addr = (unsigned long) from->si_ptr;
495 err |= __put_user(addr, &to->si_ptr);
496 break;
497 }
498 }
499 return err;
500}
diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h
index 4d1569e717cc..e39b38a67a87 100644
--- a/arch/parisc/kernel/signal32.h
+++ b/arch/parisc/kernel/signal32.h
@@ -20,8 +20,34 @@
20#define _PARISC64_KERNEL_SIGNAL32_H 20#define _PARISC64_KERNEL_SIGNAL32_H
21 21
22#include <linux/compat.h> 22#include <linux/compat.h>
23#include <asm/compat_signal.h> 23
24#include <asm/compat_rt_sigframe.h> 24typedef compat_uptr_t compat_sighandler_t;
25
26typedef struct compat_sigaltstack {
27 compat_uptr_t ss_sp;
28 compat_int_t ss_flags;
29 compat_size_t ss_size;
30} compat_stack_t;
31
32/* Most things should be clean enough to redefine this at will, if care
33 is taken to make libc match. */
34
35struct compat_sigaction {
36 compat_sighandler_t sa_handler;
37 compat_uint_t sa_flags;
38 compat_sigset_t sa_mask; /* mask last for extensibility */
39};
40
41/* 32-bit ucontext as seen from an 64-bit kernel */
42struct compat_ucontext {
43 compat_uint_t uc_flags;
44 compat_uptr_t uc_link;
45 compat_stack_t uc_stack; /* struct compat_sigaltstack (12 bytes)*/
46 /* FIXME: Pad out to get uc_mcontext to start at an 8-byte aligned boundary */
47 compat_uint_t pad[1];
48 struct compat_sigcontext uc_mcontext;
49 compat_sigset_t uc_sigmask; /* mask last for extensibility */
50};
25 51
26/* ELF32 signal handling */ 52/* ELF32 signal handling */
27 53
@@ -29,6 +55,103 @@ struct k_sigaction32 {
29 struct compat_sigaction sa; 55 struct compat_sigaction sa;
30}; 56};
31 57
58typedef struct compat_siginfo {
59 int si_signo;
60 int si_errno;
61 int si_code;
62
63 union {
64 int _pad[((128/sizeof(int)) - 3)];
65
66 /* kill() */
67 struct {
68 unsigned int _pid; /* sender's pid */
69 unsigned int _uid; /* sender's uid */
70 } _kill;
71
72 /* POSIX.1b timers */
73 struct {
74 compat_timer_t _tid; /* timer id */
75 int _overrun; /* overrun count */
76 char _pad[sizeof(unsigned int) - sizeof(int)];
77 compat_sigval_t _sigval; /* same as below */
78 int _sys_private; /* not to be passed to user */
79 } _timer;
80
81 /* POSIX.1b signals */
82 struct {
83 unsigned int _pid; /* sender's pid */
84 unsigned int _uid; /* sender's uid */
85 compat_sigval_t _sigval;
86 } _rt;
87
88 /* SIGCHLD */
89 struct {
90 unsigned int _pid; /* which child */
91 unsigned int _uid; /* sender's uid */
92 int _status; /* exit code */
93 compat_clock_t _utime;
94 compat_clock_t _stime;
95 } _sigchld;
96
97 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
98 struct {
99 unsigned int _addr; /* faulting insn/memory ref. */
100 } _sigfault;
101
102 /* SIGPOLL */
103 struct {
104 int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
105 int _fd;
106 } _sigpoll;
107 } _sifields;
108} compat_siginfo_t;
109
110int copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from);
111int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from);
112
113/* In a deft move of uber-hackery, we decide to carry the top half of all
114 * 64-bit registers in a non-portable, non-ABI, hidden structure.
115 * Userspace can read the hidden structure if it *wants* but is never
116 * guaranteed to be in the same place. Infact the uc_sigmask from the
117 * ucontext_t structure may push the hidden register file downards
118 */
119struct compat_regfile {
120 /* Upper half of all the 64-bit registers that were truncated
121 on a copy to a 32-bit userspace */
122 compat_int_t rf_gr[32];
123 compat_int_t rf_iasq[2];
124 compat_int_t rf_iaoq[2];
125 compat_int_t rf_sar;
126};
127
128#define COMPAT_SIGRETURN_TRAMP 4
129#define COMPAT_SIGRESTARTBLOCK_TRAMP 5
130#define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \
131 COMPAT_SIGRESTARTBLOCK_TRAMP)
132
133struct compat_rt_sigframe {
134 /* XXX: Must match trampoline size in arch/parisc/kernel/signal.c
135 Secondary to that it must protect the ERESTART_RESTARTBLOCK
136 trampoline we left on the stack (we were bad and didn't
137 change sp so we could run really fast.) */
138 compat_uint_t tramp[COMPAT_TRAMP_SIZE];
139 compat_siginfo_t info;
140 struct compat_ucontext uc;
141 /* Hidden location of truncated registers, *must* be last. */
142 struct compat_regfile regs;
143};
144
145/*
146 * The 32-bit ABI wants at least 48 bytes for a function call frame:
147 * 16 bytes for arg0-arg3, and 32 bytes for magic (the only part of
148 * which Linux/parisc uses is sp-20 for the saved return pointer...)
149 * Then, the stack pointer must be rounded to a cache line (64 bytes).
150 */
151#define SIGFRAME32 64
152#define FUNCTIONCALLFRAME32 48
153#define PARISC_RT_SIGFRAME_SIZE32 (((sizeof(struct compat_rt_sigframe) + FUNCTIONCALLFRAME32) + SIGFRAME32) & -SIGFRAME32)
154
32void sigset_32to64(sigset_t *s64, compat_sigset_t *s32); 155void sigset_32to64(sigset_t *s64, compat_sigset_t *s32);
33void sigset_64to32(compat_sigset_t *s32, sigset_t *s64); 156void sigset_64to32(compat_sigset_t *s32, sigset_t *s64);
34int do_sigaltstack32 (const compat_stack_t __user *uss32, 157int do_sigaltstack32 (const compat_stack_t __user *uss32,
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
index d66163492890..af88afef41bd 100644
--- a/arch/parisc/kernel/syscall.S
+++ b/arch/parisc/kernel/syscall.S
@@ -650,6 +650,8 @@ end_linux_gateway_page:
650#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page) 650#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page)
651#endif 651#endif
652 652
653 .section .rodata,"a"
654
653 .align 4096 655 .align 4096
654 /* Light-weight-syscall table */ 656 /* Light-weight-syscall table */
655 /* Start of lws table. */ 657 /* Start of lws table. */
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S
index 32cbc0489324..71011eadb872 100644
--- a/arch/parisc/kernel/syscall_table.S
+++ b/arch/parisc/kernel/syscall_table.S
@@ -374,5 +374,24 @@
374 ENTRY_SAME(keyctl) 374 ENTRY_SAME(keyctl)
375 ENTRY_SAME(ioprio_set) 375 ENTRY_SAME(ioprio_set)
376 ENTRY_SAME(ioprio_get) 376 ENTRY_SAME(ioprio_get)
377 ENTRY_SAME(inotify_init)
378 ENTRY_SAME(inotify_add_watch) /* 270 */
379 ENTRY_SAME(inotify_rm_watch)
380 ENTRY_SAME(ni_syscall) /* 271 ENTRY_COMP(pselect6) */
381 ENTRY_SAME(ni_syscall) /* 272 ENTRY_COMP(ppoll) */
382 ENTRY_SAME(migrate_pages)
383 ENTRY_COMP(openat) /* 275 */
384 ENTRY_SAME(mkdirat)
385 ENTRY_SAME(mknodat)
386 ENTRY_SAME(fchownat)
387 ENTRY_COMP(futimesat)
388 ENTRY_SAME(fstatat64) /* 280 */
389 ENTRY_SAME(unlinkat)
390 ENTRY_SAME(renameat)
391 ENTRY_SAME(linkat)
392 ENTRY_SAME(symlinkat)
393 ENTRY_SAME(readlinkat) /* 285 */
394 ENTRY_SAME(fchmodat)
395 ENTRY_SAME(faccessat)
377 /* Nothing yet */ 396 /* Nothing yet */
378 397
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
index 15914f0235a0..ff200608c851 100644
--- a/arch/parisc/kernel/traps.c
+++ b/arch/parisc/kernel/traps.c
@@ -193,10 +193,9 @@ void show_stack(struct task_struct *task, unsigned long *s)
193 193
194HERE: 194HERE:
195 asm volatile ("copy %%r30, %0" : "=r"(sp)); 195 asm volatile ("copy %%r30, %0" : "=r"(sp));
196 r = (struct pt_regs *)kmalloc(sizeof(struct pt_regs), GFP_KERNEL); 196 r = kzalloc(sizeof(struct pt_regs), GFP_KERNEL);
197 if (!r) 197 if (!r)
198 return; 198 return;
199 memset(r, 0, sizeof(struct pt_regs));
200 r->iaoq[0] = (unsigned long)&&HERE; 199 r->iaoq[0] = (unsigned long)&&HERE;
201 r->gr[2] = (unsigned long)__builtin_return_address(0); 200 r->gr[2] = (unsigned long)__builtin_return_address(0);
202 r->gr[30] = sp; 201 r->gr[30] = sp;
diff --git a/arch/parisc/math-emu/decode_exc.c b/arch/parisc/math-emu/decode_exc.c
index f84f2586672b..66c8a9f6a27e 100644
--- a/arch/parisc/math-emu/decode_exc.c
+++ b/arch/parisc/math-emu/decode_exc.c
@@ -337,6 +337,7 @@ decode_fpu(unsigned int Fpu_register[], unsigned int trap_counts[])
337 } 337 }
338 break; 338 break;
339 case INVALIDEXCEPTION: 339 case INVALIDEXCEPTION:
340 case OPC_2E_INVALIDEXCEPTION:
340 update_trap_counts(Fpu_register, aflags, bflags, trap_counts); 341 update_trap_counts(Fpu_register, aflags, bflags, trap_counts);
341 return SIGNALCODE(SIGFPE, FPE_FLTINV); 342 return SIGNALCODE(SIGFPE, FPE_FLTINV);
342 case DIVISIONBYZEROEXCEPTION: 343 case DIVISIONBYZEROEXCEPTION:
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
index 720287d46e55..7847ca13d6c2 100644
--- a/arch/parisc/mm/init.c
+++ b/arch/parisc/mm/init.c
@@ -371,17 +371,11 @@ static void __init setup_bootmem(void)
371 371
372void free_initmem(void) 372void free_initmem(void)
373{ 373{
374 /* FIXME: */
375#if 0
376 printk(KERN_INFO "NOT FREEING INITMEM (%dk)\n",
377 (&__init_end - &__init_begin) >> 10);
378 return;
379#else
380 unsigned long addr; 374 unsigned long addr;
381 375
382 printk(KERN_INFO "Freeing unused kernel memory: "); 376 printk(KERN_INFO "Freeing unused kernel memory: ");
383 377
384#if 1 378#ifdef CONFIG_DEBUG_KERNEL
385 /* Attempt to catch anyone trying to execute code here 379 /* Attempt to catch anyone trying to execute code here
386 * by filling the page with BRK insns. 380 * by filling the page with BRK insns.
387 * 381 *
@@ -414,9 +408,21 @@ void free_initmem(void)
414 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE); 408 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE);
415 409
416 printk("%luk freed\n", (unsigned long)(&__init_end - &__init_begin) >> 10); 410 printk("%luk freed\n", (unsigned long)(&__init_end - &__init_begin) >> 10);
417#endif
418} 411}
419 412
413
414#ifdef CONFIG_DEBUG_RODATA
415void mark_rodata_ro(void)
416{
417 extern char __start_rodata, __end_rodata;
418 /* rodata memory was already mapped with KERNEL_RO access rights by
419 pagetable_init() and map_pages(). No need to do additional stuff here */
420 printk (KERN_INFO "Write protecting the kernel read-only data: %luk\n",
421 (unsigned long)(&__end_rodata - &__start_rodata) >> 10);
422}
423#endif
424
425
420/* 426/*
421 * Just an arbitrary offset to serve as a "hole" between mapping areas 427 * Just an arbitrary offset to serve as a "hole" between mapping areas
422 * (between top of physical memory and a potential pcxl dma mapping 428 * (between top of physical memory and a potential pcxl dma mapping
@@ -477,11 +483,6 @@ void __init mem_init(void)
477 483
478} 484}
479 485
480int do_check_pgt_cache(int low, int high)
481{
482 return 0;
483}
484
485unsigned long *empty_zero_page __read_mostly; 486unsigned long *empty_zero_page __read_mostly;
486 487
487void show_mem(void) 488void show_mem(void)
@@ -690,7 +691,7 @@ static void __init pagetable_init(void)
690 691
691#ifdef CONFIG_BLK_DEV_INITRD 692#ifdef CONFIG_BLK_DEV_INITRD
692 if (initrd_end && initrd_end > mem_limit) { 693 if (initrd_end && initrd_end > mem_limit) {
693 printk("initrd: mapping %08lx-%08lx\n", initrd_start, initrd_end); 694 printk(KERN_INFO "initrd: mapping %08lx-%08lx\n", initrd_start, initrd_end);
694 map_pages(initrd_start, __pa(initrd_start), 695 map_pages(initrd_start, __pa(initrd_start),
695 initrd_end - initrd_start, PAGE_KERNEL); 696 initrd_end - initrd_start, PAGE_KERNEL);
696 } 697 }
@@ -792,8 +793,6 @@ map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm)
792EXPORT_SYMBOL(map_hpux_gateway_page); 793EXPORT_SYMBOL(map_hpux_gateway_page);
793#endif 794#endif
794 795
795extern void flush_tlb_all_local(void);
796
797void __init paging_init(void) 796void __init paging_init(void)
798{ 797{
799 int i; 798 int i;
@@ -802,7 +801,7 @@ void __init paging_init(void)
802 pagetable_init(); 801 pagetable_init();
803 gateway_init(); 802 gateway_init();
804 flush_cache_all_local(); /* start with known state */ 803 flush_cache_all_local(); /* start with known state */
805 flush_tlb_all_local(); 804 flush_tlb_all_local(NULL);
806 805
807 for (i = 0; i < npmem_ranges; i++) { 806 for (i = 0; i < npmem_ranges; i++) {
808 unsigned long zones_size[MAX_NR_ZONES] = { 0, 0, 0 }; 807 unsigned long zones_size[MAX_NR_ZONES] = { 0, 0, 0 };
@@ -993,7 +992,7 @@ void flush_tlb_all(void)
993 do_recycle++; 992 do_recycle++;
994 } 993 }
995 spin_unlock(&sid_lock); 994 spin_unlock(&sid_lock);
996 on_each_cpu((void (*)(void *))flush_tlb_all_local, NULL, 1, 1); 995 on_each_cpu(flush_tlb_all_local, NULL, 1, 1);
997 if (do_recycle) { 996 if (do_recycle) {
998 spin_lock(&sid_lock); 997 spin_lock(&sid_lock);
999 recycle_sids(recycle_ndirty,recycle_dirty_array); 998 recycle_sids(recycle_ndirty,recycle_dirty_array);
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index df338c5cc910..dfba81719dec 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -83,6 +83,12 @@ config GENERIC_TBSYNC
83 default y if PPC32 && SMP 83 default y if PPC32 && SMP
84 default n 84 default n
85 85
86config DEFAULT_UIMAGE
87 bool
88 help
89 Used to allow a board to specify it wants a uImage built by default
90 default n
91
86menu "Processor support" 92menu "Processor support"
87choice 93choice
88 prompt "Processor Type" 94 prompt "Processor Type"
@@ -574,7 +580,7 @@ config KEXEC
574 strongly in flux, so no good recommendation can be made. 580 strongly in flux, so no good recommendation can be made.
575 581
576config CRASH_DUMP 582config CRASH_DUMP
577 bool "kernel crash dumps (EXPERIMENTAL)" 583 bool "Build a kdump crash kernel (EXPERIMENTAL)"
578 depends on PPC_MULTIPLATFORM && PPC64 && EXPERIMENTAL 584 depends on PPC_MULTIPLATFORM && PPC64 && EXPERIMENTAL
579 help 585 help
580 Build a kernel suitable for use as a kdump capture kernel. 586 Build a kernel suitable for use as a kdump capture kernel.
@@ -957,7 +963,7 @@ source "arch/powerpc/oprofile/Kconfig"
957 963
958config KPROBES 964config KPROBES
959 bool "Kprobes (EXPERIMENTAL)" 965 bool "Kprobes (EXPERIMENTAL)"
960 depends on PPC64 966 depends on PPC64 && EXPERIMENTAL && MODULES
961 help 967 help
962 Kprobes allows you to trap at almost any kernel address and 968 Kprobes allows you to trap at almost any kernel address and
963 execute a callback function. register_kprobe() establishes 969 execute a callback function. register_kprobe() establishes
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 44dd82b791d1..5500ab55d042 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -142,6 +142,7 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
142# Default to zImage, override when needed 142# Default to zImage, override when needed
143defaultimage-y := zImage 143defaultimage-y := zImage
144defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux 144defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux
145defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage
145KBUILD_IMAGE := $(defaultimage-y) 146KBUILD_IMAGE := $(defaultimage-y)
146all: $(KBUILD_IMAGE) 147all: $(KBUILD_IMAGE)
147 148
@@ -167,6 +168,8 @@ endef
167 168
168archclean: 169archclean:
169 $(Q)$(MAKE) $(clean)=$(boot) 170 $(Q)$(MAKE) $(clean)=$(boot)
171
172archmrproper:
170 $(Q)rm -rf arch/$(ARCH)/include 173 $(Q)rm -rf arch/$(ARCH)/include
171 174
172archprepare: checkbin 175archprepare: checkbin
diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
index e0192c26037b..70e65b13e033 100644
--- a/arch/powerpc/boot/crt0.S
+++ b/arch/powerpc/boot/crt0.S
@@ -45,7 +45,8 @@ _zimage_start:
45 bdnz 2b 45 bdnz 2b
46 46
47 /* Do a cache flush for our text, in case OF didn't */ 47 /* Do a cache flush for our text, in case OF didn't */
483: lis r9,_start@h 483: lis r9,_start@ha
49 addi r9,r9,_start@l
49 add r9,r0,r9 50 add r9,r0,r9
50 lis r8,_etext@ha 51 lis r8,_etext@ha
51 addi r8,r8,_etext@l 52 addi r8,r8,_etext@l
@@ -53,7 +54,7 @@ _zimage_start:
534: dcbf r0,r9 544: dcbf r0,r9
54 icbi r0,r9 55 icbi r0,r9
55 addi r9,r9,0x20 56 addi r9,r9,0x20
56 cmplwi 0,r9,8 57 cmplw cr0,r9,r8
57 blt 4b 58 blt 4b
58 sync 59 sync
59 isync 60 isync
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig
index 063b84f2cbea..3c2acab63736 100644
--- a/arch/powerpc/configs/cell_defconfig
+++ b/arch/powerpc/configs/cell_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc5 3# Linux kernel version: 2.6.16-rc6
4# Tue Dec 20 15:59:26 2005 4# Wed Mar 15 16:19:48 2006
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y
16CONFIG_SYSVIPC_COMPAT=y 16CONFIG_SYSVIPC_COMPAT=y
17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
18CONFIG_ARCH_MAY_HAVE_PC_FDC=y 18CONFIG_ARCH_MAY_HAVE_PC_FDC=y
19CONFIG_PPC_OF=y
20CONFIG_PPC_UDBG_16550=y
21# CONFIG_GENERIC_TBSYNC is not set
22# CONFIG_DEFAULT_UIMAGE is not set
19 23
20# 24#
21# Processor support 25# Processor support
@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=4
33# Code maturity level options 37# Code maturity level options
34# 38#
35CONFIG_EXPERIMENTAL=y 39CONFIG_EXPERIMENTAL=y
36CONFIG_CLEAN_COMPILE=y
37CONFIG_LOCK_KERNEL=y 40CONFIG_LOCK_KERNEL=y
38CONFIG_INIT_ENV_ARG_LIMIT=32 41CONFIG_INIT_ENV_ARG_LIMIT=32
39 42
@@ -48,8 +51,6 @@ CONFIG_SYSVIPC=y
48# CONFIG_BSD_PROCESS_ACCT is not set 51# CONFIG_BSD_PROCESS_ACCT is not set
49CONFIG_SYSCTL=y 52CONFIG_SYSCTL=y
50# CONFIG_AUDIT is not set 53# CONFIG_AUDIT is not set
51CONFIG_HOTPLUG=y
52CONFIG_KOBJECT_UEVENT=y
53# CONFIG_IKCONFIG is not set 54# CONFIG_IKCONFIG is not set
54# CONFIG_CPUSETS is not set 55# CONFIG_CPUSETS is not set
55CONFIG_INITRAMFS_SOURCE="" 56CONFIG_INITRAMFS_SOURCE=""
@@ -58,8 +59,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
58CONFIG_KALLSYMS=y 59CONFIG_KALLSYMS=y
59# CONFIG_KALLSYMS_ALL is not set 60# CONFIG_KALLSYMS_ALL is not set
60# CONFIG_KALLSYMS_EXTRA_PASS is not set 61# CONFIG_KALLSYMS_EXTRA_PASS is not set
62CONFIG_HOTPLUG=y
61CONFIG_PRINTK=y 63CONFIG_PRINTK=y
62CONFIG_BUG=y 64CONFIG_BUG=y
65CONFIG_ELF_CORE=y
63CONFIG_BASE_FULL=y 66CONFIG_BASE_FULL=y
64CONFIG_FUTEX=y 67CONFIG_FUTEX=y
65CONFIG_EPOLL=y 68CONFIG_EPOLL=y
@@ -68,8 +71,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
68CONFIG_CC_ALIGN_LABELS=0 71CONFIG_CC_ALIGN_LABELS=0
69CONFIG_CC_ALIGN_LOOPS=0 72CONFIG_CC_ALIGN_LOOPS=0
70CONFIG_CC_ALIGN_JUMPS=0 73CONFIG_CC_ALIGN_JUMPS=0
74CONFIG_SLAB=y
71# CONFIG_TINY_SHMEM is not set 75# CONFIG_TINY_SHMEM is not set
72CONFIG_BASE_SMALL=0 76CONFIG_BASE_SMALL=0
77# CONFIG_SLOB is not set
73 78
74# 79#
75# Loadable module support 80# Loadable module support
@@ -111,7 +116,6 @@ CONFIG_PPC_MULTIPLATFORM=y
111# CONFIG_PPC_PMAC is not set 116# CONFIG_PPC_PMAC is not set
112# CONFIG_PPC_MAPLE is not set 117# CONFIG_PPC_MAPLE is not set
113CONFIG_PPC_CELL=y 118CONFIG_PPC_CELL=y
114CONFIG_PPC_OF=y
115# CONFIG_U3_DART is not set 119# CONFIG_U3_DART is not set
116CONFIG_PPC_RTAS=y 120CONFIG_PPC_RTAS=y
117# CONFIG_RTAS_ERROR_LOGGING is not set 121# CONFIG_RTAS_ERROR_LOGGING is not set
@@ -120,11 +124,15 @@ CONFIG_RTAS_FLASH=y
120CONFIG_MMIO_NVRAM=y 124CONFIG_MMIO_NVRAM=y
121CONFIG_CELL_IIC=y 125CONFIG_CELL_IIC=y
122# CONFIG_PPC_MPC106 is not set 126# CONFIG_PPC_MPC106 is not set
123# CONFIG_GENERIC_TBSYNC is not set
124# CONFIG_CPU_FREQ is not set 127# CONFIG_CPU_FREQ is not set
125# CONFIG_WANT_EARLY_SERIAL is not set 128# CONFIG_WANT_EARLY_SERIAL is not set
126 129
127# 130#
131# Cell Broadband Engine options
132#
133CONFIG_SPU_FS=y
134
135#
128# Kernel options 136# Kernel options
129# 137#
130# CONFIG_HZ_100 is not set 138# CONFIG_HZ_100 is not set
@@ -140,6 +148,7 @@ CONFIG_BINFMT_ELF=y
140CONFIG_FORCE_MAX_ZONEORDER=13 148CONFIG_FORCE_MAX_ZONEORDER=13
141# CONFIG_IOMMU_VMERGE is not set 149# CONFIG_IOMMU_VMERGE is not set
142CONFIG_KEXEC=y 150CONFIG_KEXEC=y
151# CONFIG_CRASH_DUMP is not set
143CONFIG_IRQ_ALL_CPUS=y 152CONFIG_IRQ_ALL_CPUS=y
144# CONFIG_NUMA is not set 153# CONFIG_NUMA is not set
145CONFIG_ARCH_SELECT_MEMORY_MODEL=y 154CONFIG_ARCH_SELECT_MEMORY_MODEL=y
@@ -191,6 +200,7 @@ CONFIG_NET=y
191# 200#
192# Networking options 201# Networking options
193# 202#
203# CONFIG_NETDEBUG is not set
194CONFIG_PACKET=y 204CONFIG_PACKET=y
195# CONFIG_PACKET_MMAP is not set 205# CONFIG_PACKET_MMAP is not set
196CONFIG_UNIX=y 206CONFIG_UNIX=y
@@ -234,6 +244,25 @@ CONFIG_NETFILTER=y
234# Core Netfilter Configuration 244# Core Netfilter Configuration
235# 245#
236# CONFIG_NETFILTER_NETLINK is not set 246# CONFIG_NETFILTER_NETLINK is not set
247CONFIG_NETFILTER_XTABLES=m
248CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
249CONFIG_NETFILTER_XT_TARGET_MARK=m
250CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
251CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
252CONFIG_NETFILTER_XT_MATCH_COMMENT=m
253CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
254# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
255CONFIG_NETFILTER_XT_MATCH_HELPER=m
256CONFIG_NETFILTER_XT_MATCH_LENGTH=m
257CONFIG_NETFILTER_XT_MATCH_LIMIT=m
258CONFIG_NETFILTER_XT_MATCH_MAC=m
259CONFIG_NETFILTER_XT_MATCH_MARK=m
260CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
261CONFIG_NETFILTER_XT_MATCH_REALM=m
262CONFIG_NETFILTER_XT_MATCH_SCTP=m
263CONFIG_NETFILTER_XT_MATCH_STATE=m
264CONFIG_NETFILTER_XT_MATCH_STRING=m
265CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
237 266
238# 267#
239# IP: Netfilter Configuration 268# IP: Netfilter Configuration
@@ -251,37 +280,23 @@ CONFIG_IP_NF_AMANDA=m
251# CONFIG_IP_NF_PPTP is not set 280# CONFIG_IP_NF_PPTP is not set
252CONFIG_IP_NF_QUEUE=m 281CONFIG_IP_NF_QUEUE=m
253CONFIG_IP_NF_IPTABLES=m 282CONFIG_IP_NF_IPTABLES=m
254CONFIG_IP_NF_MATCH_LIMIT=m
255CONFIG_IP_NF_MATCH_IPRANGE=m 283CONFIG_IP_NF_MATCH_IPRANGE=m
256CONFIG_IP_NF_MATCH_MAC=m
257CONFIG_IP_NF_MATCH_PKTTYPE=m
258CONFIG_IP_NF_MATCH_MARK=m
259CONFIG_IP_NF_MATCH_MULTIPORT=m 284CONFIG_IP_NF_MATCH_MULTIPORT=m
260CONFIG_IP_NF_MATCH_TOS=m 285CONFIG_IP_NF_MATCH_TOS=m
261CONFIG_IP_NF_MATCH_RECENT=m 286CONFIG_IP_NF_MATCH_RECENT=m
262CONFIG_IP_NF_MATCH_ECN=m 287CONFIG_IP_NF_MATCH_ECN=m
263CONFIG_IP_NF_MATCH_DSCP=m 288CONFIG_IP_NF_MATCH_DSCP=m
264CONFIG_IP_NF_MATCH_AH_ESP=m 289CONFIG_IP_NF_MATCH_AH_ESP=m
265CONFIG_IP_NF_MATCH_LENGTH=m
266CONFIG_IP_NF_MATCH_TTL=m 290CONFIG_IP_NF_MATCH_TTL=m
267CONFIG_IP_NF_MATCH_TCPMSS=m
268CONFIG_IP_NF_MATCH_HELPER=m
269CONFIG_IP_NF_MATCH_STATE=m
270CONFIG_IP_NF_MATCH_CONNTRACK=m
271CONFIG_IP_NF_MATCH_OWNER=m 291CONFIG_IP_NF_MATCH_OWNER=m
272CONFIG_IP_NF_MATCH_ADDRTYPE=m 292CONFIG_IP_NF_MATCH_ADDRTYPE=m
273CONFIG_IP_NF_MATCH_REALM=m
274CONFIG_IP_NF_MATCH_SCTP=m
275# CONFIG_IP_NF_MATCH_DCCP is not set
276CONFIG_IP_NF_MATCH_COMMENT=m
277CONFIG_IP_NF_MATCH_HASHLIMIT=m 293CONFIG_IP_NF_MATCH_HASHLIMIT=m
278CONFIG_IP_NF_MATCH_STRING=m 294CONFIG_IP_NF_MATCH_POLICY=m
279CONFIG_IP_NF_FILTER=m 295CONFIG_IP_NF_FILTER=m
280CONFIG_IP_NF_TARGET_REJECT=m 296CONFIG_IP_NF_TARGET_REJECT=m
281CONFIG_IP_NF_TARGET_LOG=m 297CONFIG_IP_NF_TARGET_LOG=m
282CONFIG_IP_NF_TARGET_ULOG=m 298CONFIG_IP_NF_TARGET_ULOG=m
283CONFIG_IP_NF_TARGET_TCPMSS=m 299CONFIG_IP_NF_TARGET_TCPMSS=m
284CONFIG_IP_NF_TARGET_NFQUEUE=m
285CONFIG_IP_NF_NAT=m 300CONFIG_IP_NF_NAT=m
286CONFIG_IP_NF_NAT_NEEDED=y 301CONFIG_IP_NF_NAT_NEEDED=y
287CONFIG_IP_NF_TARGET_MASQUERADE=m 302CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -297,11 +312,8 @@ CONFIG_IP_NF_MANGLE=m
297CONFIG_IP_NF_TARGET_TOS=m 312CONFIG_IP_NF_TARGET_TOS=m
298CONFIG_IP_NF_TARGET_ECN=m 313CONFIG_IP_NF_TARGET_ECN=m
299CONFIG_IP_NF_TARGET_DSCP=m 314CONFIG_IP_NF_TARGET_DSCP=m
300CONFIG_IP_NF_TARGET_MARK=m
301CONFIG_IP_NF_TARGET_CLASSIFY=m
302CONFIG_IP_NF_TARGET_TTL=m 315CONFIG_IP_NF_TARGET_TTL=m
303CONFIG_IP_NF_RAW=m 316CONFIG_IP_NF_RAW=m
304CONFIG_IP_NF_TARGET_NOTRACK=m
305CONFIG_IP_NF_ARPTABLES=m 317CONFIG_IP_NF_ARPTABLES=m
306CONFIG_IP_NF_ARPFILTER=m 318CONFIG_IP_NF_ARPFILTER=m
307CONFIG_IP_NF_ARP_MANGLE=m 319CONFIG_IP_NF_ARP_MANGLE=m
@@ -311,7 +323,6 @@ CONFIG_IP_NF_ARP_MANGLE=m
311# 323#
312# CONFIG_IP6_NF_QUEUE is not set 324# CONFIG_IP6_NF_QUEUE is not set
313# CONFIG_IP6_NF_IPTABLES is not set 325# CONFIG_IP6_NF_IPTABLES is not set
314# CONFIG_IP6_NF_TARGET_NFQUEUE is not set
315 326
316# 327#
317# DCCP Configuration (EXPERIMENTAL) 328# DCCP Configuration (EXPERIMENTAL)
@@ -322,6 +333,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
322# SCTP Configuration (EXPERIMENTAL) 333# SCTP Configuration (EXPERIMENTAL)
323# 334#
324# CONFIG_IP_SCTP is not set 335# CONFIG_IP_SCTP is not set
336
337#
338# TIPC Configuration (EXPERIMENTAL)
339#
340# CONFIG_TIPC is not set
325# CONFIG_ATM is not set 341# CONFIG_ATM is not set
326# CONFIG_BRIDGE is not set 342# CONFIG_BRIDGE is not set
327# CONFIG_VLAN_8021Q is not set 343# CONFIG_VLAN_8021Q is not set
@@ -540,9 +556,11 @@ CONFIG_E1000=m
540# CONFIG_R8169 is not set 556# CONFIG_R8169 is not set
541# CONFIG_SIS190 is not set 557# CONFIG_SIS190 is not set
542CONFIG_SKGE=m 558CONFIG_SKGE=m
559# CONFIG_SKY2 is not set
543# CONFIG_SK98LIN is not set 560# CONFIG_SK98LIN is not set
544# CONFIG_TIGON3 is not set 561# CONFIG_TIGON3 is not set
545# CONFIG_BNX2 is not set 562# CONFIG_BNX2 is not set
563CONFIG_SPIDER_NET=y
546# CONFIG_MV643XX_ETH is not set 564# CONFIG_MV643XX_ETH is not set
547 565
548# 566#
@@ -628,13 +646,16 @@ CONFIG_VT=y
628CONFIG_VT_CONSOLE=y 646CONFIG_VT_CONSOLE=y
629CONFIG_HW_CONSOLE=y 647CONFIG_HW_CONSOLE=y
630CONFIG_SERIAL_NONSTANDARD=y 648CONFIG_SERIAL_NONSTANDARD=y
649# CONFIG_COMPUTONE is not set
631# CONFIG_ROCKETPORT is not set 650# CONFIG_ROCKETPORT is not set
632# CONFIG_CYCLADES is not set 651# CONFIG_CYCLADES is not set
633# CONFIG_DIGIEPCA is not set 652# CONFIG_DIGIEPCA is not set
653# CONFIG_MOXA_INTELLIO is not set
634# CONFIG_MOXA_SMARTIO is not set 654# CONFIG_MOXA_SMARTIO is not set
635# CONFIG_ISI is not set 655# CONFIG_ISI is not set
636# CONFIG_SYNCLINK is not set 656# CONFIG_SYNCLINK is not set
637# CONFIG_SYNCLINKMP is not set 657# CONFIG_SYNCLINKMP is not set
658# CONFIG_SYNCLINK_GT is not set
638# CONFIG_N_HDLC is not set 659# CONFIG_N_HDLC is not set
639# CONFIG_SPECIALIX is not set 660# CONFIG_SPECIALIX is not set
640# CONFIG_SX is not set 661# CONFIG_SX is not set
@@ -646,6 +667,7 @@ CONFIG_SERIAL_NONSTANDARD=y
646CONFIG_SERIAL_8250=y 667CONFIG_SERIAL_8250=y
647CONFIG_SERIAL_8250_CONSOLE=y 668CONFIG_SERIAL_8250_CONSOLE=y
648CONFIG_SERIAL_8250_NR_UARTS=4 669CONFIG_SERIAL_8250_NR_UARTS=4
670CONFIG_SERIAL_8250_RUNTIME_UARTS=4
649# CONFIG_SERIAL_8250_EXTENDED is not set 671# CONFIG_SERIAL_8250_EXTENDED is not set
650 672
651# 673#
@@ -756,6 +778,12 @@ CONFIG_I2C_ALGOBIT=y
756# CONFIG_I2C_DEBUG_CHIP is not set 778# CONFIG_I2C_DEBUG_CHIP is not set
757 779
758# 780#
781# SPI support
782#
783# CONFIG_SPI is not set
784# CONFIG_SPI_MASTER is not set
785
786#
759# Dallas's 1-wire bus 787# Dallas's 1-wire bus
760# 788#
761# CONFIG_W1 is not set 789# CONFIG_W1 is not set
@@ -827,7 +855,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y
827# CONFIG_INFINIBAND is not set 855# CONFIG_INFINIBAND is not set
828 856
829# 857#
830# SN Devices 858# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
831# 859#
832 860
833# 861#
@@ -847,6 +875,7 @@ CONFIG_FS_MBCACHE=y
847# CONFIG_JFS_FS is not set 875# CONFIG_JFS_FS is not set
848CONFIG_FS_POSIX_ACL=y 876CONFIG_FS_POSIX_ACL=y
849# CONFIG_XFS_FS is not set 877# CONFIG_XFS_FS is not set
878# CONFIG_OCFS2_FS is not set
850# CONFIG_MINIX_FS is not set 879# CONFIG_MINIX_FS is not set
851# CONFIG_ROMFS_FS is not set 880# CONFIG_ROMFS_FS is not set
852CONFIG_INOTIFY=y 881CONFIG_INOTIFY=y
@@ -886,6 +915,7 @@ CONFIG_HUGETLBFS=y
886CONFIG_HUGETLB_PAGE=y 915CONFIG_HUGETLB_PAGE=y
887CONFIG_RAMFS=y 916CONFIG_RAMFS=y
888# CONFIG_RELAYFS_FS is not set 917# CONFIG_RELAYFS_FS is not set
918# CONFIG_CONFIGFS_FS is not set
889 919
890# 920#
891# Miscellaneous filesystems 921# Miscellaneous filesystems
@@ -951,6 +981,7 @@ CONFIG_MSDOS_PARTITION=y
951# CONFIG_SGI_PARTITION is not set 981# CONFIG_SGI_PARTITION is not set
952# CONFIG_ULTRIX_PARTITION is not set 982# CONFIG_ULTRIX_PARTITION is not set
953# CONFIG_SUN_PARTITION is not set 983# CONFIG_SUN_PARTITION is not set
984# CONFIG_KARMA_PARTITION is not set
954CONFIG_EFI_PARTITION=y 985CONFIG_EFI_PARTITION=y
955 986
956# 987#
@@ -1021,18 +1052,20 @@ CONFIG_TEXTSEARCH_FSM=m
1021# Kernel hacking 1052# Kernel hacking
1022# 1053#
1023# CONFIG_PRINTK_TIME is not set 1054# CONFIG_PRINTK_TIME is not set
1024CONFIG_DEBUG_KERNEL=y
1025CONFIG_MAGIC_SYSRQ=y 1055CONFIG_MAGIC_SYSRQ=y
1056CONFIG_DEBUG_KERNEL=y
1026CONFIG_LOG_BUF_SHIFT=15 1057CONFIG_LOG_BUF_SHIFT=15
1027CONFIG_DETECT_SOFTLOCKUP=y 1058CONFIG_DETECT_SOFTLOCKUP=y
1028# CONFIG_SCHEDSTATS is not set 1059# CONFIG_SCHEDSTATS is not set
1029# CONFIG_DEBUG_SLAB is not set 1060# CONFIG_DEBUG_SLAB is not set
1061# CONFIG_DEBUG_MUTEXES is not set
1030# CONFIG_DEBUG_SPINLOCK is not set 1062# CONFIG_DEBUG_SPINLOCK is not set
1031CONFIG_DEBUG_SPINLOCK_SLEEP=y 1063CONFIG_DEBUG_SPINLOCK_SLEEP=y
1032# CONFIG_DEBUG_KOBJECT is not set 1064# CONFIG_DEBUG_KOBJECT is not set
1033# CONFIG_DEBUG_INFO is not set 1065# CONFIG_DEBUG_INFO is not set
1034CONFIG_DEBUG_FS=y 1066CONFIG_DEBUG_FS=y
1035# CONFIG_DEBUG_VM is not set 1067# CONFIG_DEBUG_VM is not set
1068# CONFIG_FORCED_INLINING is not set
1036# CONFIG_RCU_TORTURE_TEST is not set 1069# CONFIG_RCU_TORTURE_TEST is not set
1037# CONFIG_DEBUG_STACKOVERFLOW is not set 1070# CONFIG_DEBUG_STACKOVERFLOW is not set
1038# CONFIG_DEBUG_STACK_USAGE is not set 1071# CONFIG_DEBUG_STACK_USAGE is not set
@@ -1040,6 +1073,11 @@ CONFIG_DEBUGGER=y
1040# CONFIG_XMON is not set 1073# CONFIG_XMON is not set
1041CONFIG_IRQSTACKS=y 1074CONFIG_IRQSTACKS=y
1042# CONFIG_BOOTX_TEXT is not set 1075# CONFIG_BOOTX_TEXT is not set
1076# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
1077# CONFIG_PPC_EARLY_DEBUG_G5 is not set
1078# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
1079# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
1080# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
1043 1081
1044# 1082#
1045# Security options 1083# Security options
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig
index d6fed3f56580..2c3fd2007676 100644
--- a/arch/powerpc/configs/g5_defconfig
+++ b/arch/powerpc/configs/g5_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc5 3# Linux kernel version: 2.6.16-rc2
4# Tue Dec 20 15:59:30 2005 4# Fri Feb 10 17:33:08 2006
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y
16CONFIG_SYSVIPC_COMPAT=y 16CONFIG_SYSVIPC_COMPAT=y
17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
18CONFIG_ARCH_MAY_HAVE_PC_FDC=y 18CONFIG_ARCH_MAY_HAVE_PC_FDC=y
19CONFIG_PPC_OF=y
20# CONFIG_PPC_UDBG_16550 is not set
21CONFIG_GENERIC_TBSYNC=y
22# CONFIG_DEFAULT_UIMAGE is not set
19 23
20# 24#
21# Processor support 25# Processor support
@@ -26,13 +30,12 @@ CONFIG_PPC_FPU=y
26CONFIG_ALTIVEC=y 30CONFIG_ALTIVEC=y
27CONFIG_PPC_STD_MMU=y 31CONFIG_PPC_STD_MMU=y
28CONFIG_SMP=y 32CONFIG_SMP=y
29CONFIG_NR_CPUS=2 33CONFIG_NR_CPUS=4
30 34
31# 35#
32# Code maturity level options 36# Code maturity level options
33# 37#
34CONFIG_EXPERIMENTAL=y 38CONFIG_EXPERIMENTAL=y
35CONFIG_CLEAN_COMPILE=y
36CONFIG_LOCK_KERNEL=y 39CONFIG_LOCK_KERNEL=y
37CONFIG_INIT_ENV_ARG_LIMIT=32 40CONFIG_INIT_ENV_ARG_LIMIT=32
38 41
@@ -47,8 +50,6 @@ CONFIG_POSIX_MQUEUE=y
47# CONFIG_BSD_PROCESS_ACCT is not set 50# CONFIG_BSD_PROCESS_ACCT is not set
48CONFIG_SYSCTL=y 51CONFIG_SYSCTL=y
49# CONFIG_AUDIT is not set 52# CONFIG_AUDIT is not set
50CONFIG_HOTPLUG=y
51CONFIG_KOBJECT_UEVENT=y
52CONFIG_IKCONFIG=y 53CONFIG_IKCONFIG=y
53CONFIG_IKCONFIG_PROC=y 54CONFIG_IKCONFIG_PROC=y
54# CONFIG_CPUSETS is not set 55# CONFIG_CPUSETS is not set
@@ -58,8 +59,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
58CONFIG_KALLSYMS=y 59CONFIG_KALLSYMS=y
59# CONFIG_KALLSYMS_ALL is not set 60# CONFIG_KALLSYMS_ALL is not set
60# CONFIG_KALLSYMS_EXTRA_PASS is not set 61# CONFIG_KALLSYMS_EXTRA_PASS is not set
62CONFIG_HOTPLUG=y
61CONFIG_PRINTK=y 63CONFIG_PRINTK=y
62CONFIG_BUG=y 64CONFIG_BUG=y
65CONFIG_ELF_CORE=y
63CONFIG_BASE_FULL=y 66CONFIG_BASE_FULL=y
64CONFIG_FUTEX=y 67CONFIG_FUTEX=y
65CONFIG_EPOLL=y 68CONFIG_EPOLL=y
@@ -68,8 +71,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
68CONFIG_CC_ALIGN_LABELS=0 71CONFIG_CC_ALIGN_LABELS=0
69CONFIG_CC_ALIGN_LOOPS=0 72CONFIG_CC_ALIGN_LOOPS=0
70CONFIG_CC_ALIGN_JUMPS=0 73CONFIG_CC_ALIGN_JUMPS=0
74CONFIG_SLAB=y
71# CONFIG_TINY_SHMEM is not set 75# CONFIG_TINY_SHMEM is not set
72CONFIG_BASE_SMALL=0 76CONFIG_BASE_SMALL=0
77# CONFIG_SLOB is not set
73 78
74# 79#
75# Loadable module support 80# Loadable module support
@@ -112,13 +117,12 @@ CONFIG_PPC_PMAC=y
112CONFIG_PPC_PMAC64=y 117CONFIG_PPC_PMAC64=y
113# CONFIG_PPC_MAPLE is not set 118# CONFIG_PPC_MAPLE is not set
114# CONFIG_PPC_CELL is not set 119# CONFIG_PPC_CELL is not set
115CONFIG_PPC_OF=y
116CONFIG_U3_DART=y 120CONFIG_U3_DART=y
117CONFIG_MPIC=y 121CONFIG_MPIC=y
118# CONFIG_PPC_RTAS is not set 122# CONFIG_PPC_RTAS is not set
119# CONFIG_MMIO_NVRAM is not set 123# CONFIG_MMIO_NVRAM is not set
124CONFIG_MPIC_BROKEN_U3=y
120# CONFIG_PPC_MPC106 is not set 125# CONFIG_PPC_MPC106 is not set
121CONFIG_GENERIC_TBSYNC=y
122CONFIG_CPU_FREQ=y 126CONFIG_CPU_FREQ=y
123CONFIG_CPU_FREQ_TABLE=y 127CONFIG_CPU_FREQ_TABLE=y
124# CONFIG_CPU_FREQ_DEBUG is not set 128# CONFIG_CPU_FREQ_DEBUG is not set
@@ -151,6 +155,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
151CONFIG_IOMMU_VMERGE=y 155CONFIG_IOMMU_VMERGE=y
152# CONFIG_HOTPLUG_CPU is not set 156# CONFIG_HOTPLUG_CPU is not set
153CONFIG_KEXEC=y 157CONFIG_KEXEC=y
158# CONFIG_CRASH_DUMP is not set
154CONFIG_IRQ_ALL_CPUS=y 159CONFIG_IRQ_ALL_CPUS=y
155# CONFIG_NUMA is not set 160# CONFIG_NUMA is not set
156CONFIG_ARCH_SELECT_MEMORY_MODEL=y 161CONFIG_ARCH_SELECT_MEMORY_MODEL=y
@@ -202,6 +207,7 @@ CONFIG_NET=y
202# 207#
203# Networking options 208# Networking options
204# 209#
210# CONFIG_NETDEBUG is not set
205CONFIG_PACKET=y 211CONFIG_PACKET=y
206# CONFIG_PACKET_MMAP is not set 212# CONFIG_PACKET_MMAP is not set
207CONFIG_UNIX=y 213CONFIG_UNIX=y
@@ -239,6 +245,7 @@ CONFIG_NETFILTER=y
239# Core Netfilter Configuration 245# Core Netfilter Configuration
240# 246#
241# CONFIG_NETFILTER_NETLINK is not set 247# CONFIG_NETFILTER_NETLINK is not set
248# CONFIG_NETFILTER_XTABLES is not set
242 249
243# 250#
244# IP: Netfilter Configuration 251# IP: Netfilter Configuration
@@ -255,65 +262,6 @@ CONFIG_IP_NF_TFTP=m
255CONFIG_IP_NF_AMANDA=m 262CONFIG_IP_NF_AMANDA=m
256# CONFIG_IP_NF_PPTP is not set 263# CONFIG_IP_NF_PPTP is not set
257CONFIG_IP_NF_QUEUE=m 264CONFIG_IP_NF_QUEUE=m
258CONFIG_IP_NF_IPTABLES=m
259CONFIG_IP_NF_MATCH_LIMIT=m
260CONFIG_IP_NF_MATCH_IPRANGE=m
261CONFIG_IP_NF_MATCH_MAC=m
262CONFIG_IP_NF_MATCH_PKTTYPE=m
263CONFIG_IP_NF_MATCH_MARK=m
264CONFIG_IP_NF_MATCH_MULTIPORT=m
265CONFIG_IP_NF_MATCH_TOS=m
266CONFIG_IP_NF_MATCH_RECENT=m
267CONFIG_IP_NF_MATCH_ECN=m
268CONFIG_IP_NF_MATCH_DSCP=m
269CONFIG_IP_NF_MATCH_AH_ESP=m
270CONFIG_IP_NF_MATCH_LENGTH=m
271CONFIG_IP_NF_MATCH_TTL=m
272CONFIG_IP_NF_MATCH_TCPMSS=m
273CONFIG_IP_NF_MATCH_HELPER=m
274CONFIG_IP_NF_MATCH_STATE=m
275CONFIG_IP_NF_MATCH_CONNTRACK=m
276CONFIG_IP_NF_MATCH_OWNER=m
277CONFIG_IP_NF_MATCH_ADDRTYPE=m
278CONFIG_IP_NF_MATCH_REALM=m
279CONFIG_IP_NF_MATCH_SCTP=m
280# CONFIG_IP_NF_MATCH_DCCP is not set
281CONFIG_IP_NF_MATCH_COMMENT=m
282CONFIG_IP_NF_MATCH_CONNMARK=m
283CONFIG_IP_NF_MATCH_CONNBYTES=m
284CONFIG_IP_NF_MATCH_HASHLIMIT=m
285CONFIG_IP_NF_MATCH_STRING=m
286CONFIG_IP_NF_FILTER=m
287CONFIG_IP_NF_TARGET_REJECT=m
288CONFIG_IP_NF_TARGET_LOG=m
289CONFIG_IP_NF_TARGET_ULOG=m
290CONFIG_IP_NF_TARGET_TCPMSS=m
291CONFIG_IP_NF_TARGET_NFQUEUE=m
292CONFIG_IP_NF_NAT=m
293CONFIG_IP_NF_NAT_NEEDED=y
294CONFIG_IP_NF_TARGET_MASQUERADE=m
295CONFIG_IP_NF_TARGET_REDIRECT=m
296CONFIG_IP_NF_TARGET_NETMAP=m
297CONFIG_IP_NF_TARGET_SAME=m
298CONFIG_IP_NF_NAT_SNMP_BASIC=m
299CONFIG_IP_NF_NAT_IRC=m
300CONFIG_IP_NF_NAT_FTP=m
301CONFIG_IP_NF_NAT_TFTP=m
302CONFIG_IP_NF_NAT_AMANDA=m
303CONFIG_IP_NF_MANGLE=m
304CONFIG_IP_NF_TARGET_TOS=m
305CONFIG_IP_NF_TARGET_ECN=m
306CONFIG_IP_NF_TARGET_DSCP=m
307CONFIG_IP_NF_TARGET_MARK=m
308CONFIG_IP_NF_TARGET_CLASSIFY=m
309CONFIG_IP_NF_TARGET_TTL=m
310CONFIG_IP_NF_TARGET_CONNMARK=m
311CONFIG_IP_NF_TARGET_CLUSTERIP=m
312CONFIG_IP_NF_RAW=m
313CONFIG_IP_NF_TARGET_NOTRACK=m
314CONFIG_IP_NF_ARPTABLES=m
315CONFIG_IP_NF_ARPFILTER=m
316CONFIG_IP_NF_ARP_MANGLE=m
317 265
318# 266#
319# DCCP Configuration (EXPERIMENTAL) 267# DCCP Configuration (EXPERIMENTAL)
@@ -324,6 +272,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
324# SCTP Configuration (EXPERIMENTAL) 272# SCTP Configuration (EXPERIMENTAL)
325# 273#
326# CONFIG_IP_SCTP is not set 274# CONFIG_IP_SCTP is not set
275
276#
277# TIPC Configuration (EXPERIMENTAL)
278#
279# CONFIG_TIPC is not set
327# CONFIG_ATM is not set 280# CONFIG_ATM is not set
328# CONFIG_BRIDGE is not set 281# CONFIG_BRIDGE is not set
329# CONFIG_VLAN_8021Q is not set 282# CONFIG_VLAN_8021Q is not set
@@ -342,7 +295,6 @@ CONFIG_LLC=y
342# QoS and/or fair queueing 295# QoS and/or fair queueing
343# 296#
344# CONFIG_NET_SCHED is not set 297# CONFIG_NET_SCHED is not set
345CONFIG_NET_CLS_ROUTE=y
346 298
347# 299#
348# Network testing 300# Network testing
@@ -545,13 +497,7 @@ CONFIG_SCSI_SATA_SVW=y
545# CONFIG_SCSI_IPR is not set 497# CONFIG_SCSI_IPR is not set
546# CONFIG_SCSI_QLOGIC_FC is not set 498# CONFIG_SCSI_QLOGIC_FC is not set
547# CONFIG_SCSI_QLOGIC_1280 is not set 499# CONFIG_SCSI_QLOGIC_1280 is not set
548CONFIG_SCSI_QLA2XXX=y 500# CONFIG_SCSI_QLA_FC is not set
549# CONFIG_SCSI_QLA21XX is not set
550# CONFIG_SCSI_QLA22XX is not set
551# CONFIG_SCSI_QLA2300 is not set
552# CONFIG_SCSI_QLA2322 is not set
553# CONFIG_SCSI_QLA6312 is not set
554# CONFIG_SCSI_QLA24XX is not set
555# CONFIG_SCSI_LPFC is not set 501# CONFIG_SCSI_LPFC is not set
556# CONFIG_SCSI_DC395x is not set 502# CONFIG_SCSI_DC395x is not set
557# CONFIG_SCSI_DC390T is not set 503# CONFIG_SCSI_DC390T is not set
@@ -614,7 +560,6 @@ CONFIG_IEEE1394_SBP2=m
614CONFIG_IEEE1394_ETH1394=m 560CONFIG_IEEE1394_ETH1394=m
615CONFIG_IEEE1394_DV1394=m 561CONFIG_IEEE1394_DV1394=m
616CONFIG_IEEE1394_RAWIO=y 562CONFIG_IEEE1394_RAWIO=y
617# CONFIG_IEEE1394_CMP is not set
618 563
619# 564#
620# I2O device support 565# I2O device support
@@ -630,6 +575,7 @@ CONFIG_THERM_PM72=y
630CONFIG_WINDFARM=y 575CONFIG_WINDFARM=y
631CONFIG_WINDFARM_PM81=y 576CONFIG_WINDFARM_PM81=y
632CONFIG_WINDFARM_PM91=y 577CONFIG_WINDFARM_PM91=y
578CONFIG_WINDFARM_PM112=y
633 579
634# 580#
635# Network device support 581# Network device support
@@ -682,8 +628,9 @@ CONFIG_E1000=y
682# CONFIG_R8169 is not set 628# CONFIG_R8169 is not set
683# CONFIG_SIS190 is not set 629# CONFIG_SIS190 is not set
684# CONFIG_SKGE is not set 630# CONFIG_SKGE is not set
631# CONFIG_SKY2 is not set
685# CONFIG_SK98LIN is not set 632# CONFIG_SK98LIN is not set
686CONFIG_TIGON3=m 633CONFIG_TIGON3=y
687# CONFIG_BNX2 is not set 634# CONFIG_BNX2 is not set
688# CONFIG_MV643XX_ETH is not set 635# CONFIG_MV643XX_ETH is not set
689 636
@@ -861,8 +808,7 @@ CONFIG_I2C_ALGOBIT=y
861# CONFIG_I2C_I801 is not set 808# CONFIG_I2C_I801 is not set
862# CONFIG_I2C_I810 is not set 809# CONFIG_I2C_I810 is not set
863# CONFIG_I2C_PIIX4 is not set 810# CONFIG_I2C_PIIX4 is not set
864CONFIG_I2C_KEYWEST=y 811CONFIG_I2C_POWERMAC=y
865CONFIG_I2C_PMAC_SMU=y
866# CONFIG_I2C_NFORCE2 is not set 812# CONFIG_I2C_NFORCE2 is not set
867# CONFIG_I2C_PARPORT_LIGHT is not set 813# CONFIG_I2C_PARPORT_LIGHT is not set
868# CONFIG_I2C_PROSAVAGE is not set 814# CONFIG_I2C_PROSAVAGE is not set
@@ -895,6 +841,12 @@ CONFIG_I2C_PMAC_SMU=y
895# CONFIG_I2C_DEBUG_CHIP is not set 841# CONFIG_I2C_DEBUG_CHIP is not set
896 842
897# 843#
844# SPI support
845#
846# CONFIG_SPI is not set
847# CONFIG_SPI_MASTER is not set
848
849#
898# Dallas's 1-wire bus 850# Dallas's 1-wire bus
899# 851#
900# CONFIG_W1 is not set 852# CONFIG_W1 is not set
@@ -961,7 +913,6 @@ CONFIG_FB_RADEON_I2C=y
961# CONFIG_FB_KYRO is not set 913# CONFIG_FB_KYRO is not set
962# CONFIG_FB_3DFX is not set 914# CONFIG_FB_3DFX is not set
963# CONFIG_FB_VOODOO1 is not set 915# CONFIG_FB_VOODOO1 is not set
964# CONFIG_FB_CYBLA is not set
965# CONFIG_FB_TRIDENT is not set 916# CONFIG_FB_TRIDENT is not set
966# CONFIG_FB_VIRTUAL is not set 917# CONFIG_FB_VIRTUAL is not set
967 918
@@ -1008,9 +959,10 @@ CONFIG_SND_OSSEMUL=y
1008CONFIG_SND_MIXER_OSS=m 959CONFIG_SND_MIXER_OSS=m
1009CONFIG_SND_PCM_OSS=m 960CONFIG_SND_PCM_OSS=m
1010CONFIG_SND_SEQUENCER_OSS=y 961CONFIG_SND_SEQUENCER_OSS=y
962# CONFIG_SND_DYNAMIC_MINORS is not set
963CONFIG_SND_SUPPORT_OLD_API=y
1011# CONFIG_SND_VERBOSE_PRINTK is not set 964# CONFIG_SND_VERBOSE_PRINTK is not set
1012# CONFIG_SND_DEBUG is not set 965# CONFIG_SND_DEBUG is not set
1013CONFIG_SND_GENERIC_DRIVER=y
1014 966
1015# 967#
1016# Generic devices 968# Generic devices
@@ -1024,6 +976,8 @@ CONFIG_SND_GENERIC_DRIVER=y
1024# 976#
1025# PCI devices 977# PCI devices
1026# 978#
979# CONFIG_SND_AD1889 is not set
980# CONFIG_SND_ALS4000 is not set
1027# CONFIG_SND_ALI5451 is not set 981# CONFIG_SND_ALI5451 is not set
1028# CONFIG_SND_ATIIXP is not set 982# CONFIG_SND_ATIIXP is not set
1029# CONFIG_SND_ATIIXP_MODEM is not set 983# CONFIG_SND_ATIIXP_MODEM is not set
@@ -1032,39 +986,38 @@ CONFIG_SND_GENERIC_DRIVER=y
1032# CONFIG_SND_AU8830 is not set 986# CONFIG_SND_AU8830 is not set
1033# CONFIG_SND_AZT3328 is not set 987# CONFIG_SND_AZT3328 is not set
1034# CONFIG_SND_BT87X is not set 988# CONFIG_SND_BT87X is not set
1035# CONFIG_SND_CS46XX is not set 989# CONFIG_SND_CA0106 is not set
990# CONFIG_SND_CMIPCI is not set
1036# CONFIG_SND_CS4281 is not set 991# CONFIG_SND_CS4281 is not set
992# CONFIG_SND_CS46XX is not set
1037# CONFIG_SND_EMU10K1 is not set 993# CONFIG_SND_EMU10K1 is not set
1038# CONFIG_SND_EMU10K1X is not set 994# CONFIG_SND_EMU10K1X is not set
1039# CONFIG_SND_CA0106 is not set
1040# CONFIG_SND_KORG1212 is not set
1041# CONFIG_SND_MIXART is not set
1042# CONFIG_SND_NM256 is not set
1043# CONFIG_SND_RME32 is not set
1044# CONFIG_SND_RME96 is not set
1045# CONFIG_SND_RME9652 is not set
1046# CONFIG_SND_HDSP is not set
1047# CONFIG_SND_HDSPM is not set
1048# CONFIG_SND_TRIDENT is not set
1049# CONFIG_SND_YMFPCI is not set
1050# CONFIG_SND_AD1889 is not set
1051# CONFIG_SND_ALS4000 is not set
1052# CONFIG_SND_CMIPCI is not set
1053# CONFIG_SND_ENS1370 is not set 995# CONFIG_SND_ENS1370 is not set
1054# CONFIG_SND_ENS1371 is not set 996# CONFIG_SND_ENS1371 is not set
1055# CONFIG_SND_ES1938 is not set 997# CONFIG_SND_ES1938 is not set
1056# CONFIG_SND_ES1968 is not set 998# CONFIG_SND_ES1968 is not set
1057# CONFIG_SND_MAESTRO3 is not set
1058# CONFIG_SND_FM801 is not set 999# CONFIG_SND_FM801 is not set
1000# CONFIG_SND_HDA_INTEL is not set
1001# CONFIG_SND_HDSP is not set
1002# CONFIG_SND_HDSPM is not set
1059# CONFIG_SND_ICE1712 is not set 1003# CONFIG_SND_ICE1712 is not set
1060# CONFIG_SND_ICE1724 is not set 1004# CONFIG_SND_ICE1724 is not set
1061# CONFIG_SND_INTEL8X0 is not set 1005# CONFIG_SND_INTEL8X0 is not set
1062# CONFIG_SND_INTEL8X0M is not set 1006# CONFIG_SND_INTEL8X0M is not set
1007# CONFIG_SND_KORG1212 is not set
1008# CONFIG_SND_MAESTRO3 is not set
1009# CONFIG_SND_MIXART is not set
1010# CONFIG_SND_NM256 is not set
1011# CONFIG_SND_PCXHR is not set
1012# CONFIG_SND_RME32 is not set
1013# CONFIG_SND_RME96 is not set
1014# CONFIG_SND_RME9652 is not set
1063# CONFIG_SND_SONICVIBES is not set 1015# CONFIG_SND_SONICVIBES is not set
1016# CONFIG_SND_TRIDENT is not set
1064# CONFIG_SND_VIA82XX is not set 1017# CONFIG_SND_VIA82XX is not set
1065# CONFIG_SND_VIA82XX_MODEM is not set 1018# CONFIG_SND_VIA82XX_MODEM is not set
1066# CONFIG_SND_VX222 is not set 1019# CONFIG_SND_VX222 is not set
1067# CONFIG_SND_HDA_INTEL is not set 1020# CONFIG_SND_YMFPCI is not set
1068 1021
1069# 1022#
1070# ALSA PowerMac devices 1023# ALSA PowerMac devices
@@ -1136,13 +1089,16 @@ CONFIG_USB_STORAGE_DPCM=y
1136CONFIG_USB_STORAGE_SDDR09=y 1089CONFIG_USB_STORAGE_SDDR09=y
1137CONFIG_USB_STORAGE_SDDR55=y 1090CONFIG_USB_STORAGE_SDDR55=y
1138CONFIG_USB_STORAGE_JUMPSHOT=y 1091CONFIG_USB_STORAGE_JUMPSHOT=y
1092# CONFIG_USB_STORAGE_ALAUDA is not set
1139# CONFIG_USB_STORAGE_ONETOUCH is not set 1093# CONFIG_USB_STORAGE_ONETOUCH is not set
1094# CONFIG_USB_LIBUSUAL is not set
1140 1095
1141# 1096#
1142# USB Input Devices 1097# USB Input Devices
1143# 1098#
1144CONFIG_USB_HID=y 1099CONFIG_USB_HID=y
1145CONFIG_USB_HIDINPUT=y 1100CONFIG_USB_HIDINPUT=y
1101# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1146CONFIG_HID_FF=y 1102CONFIG_HID_FF=y
1147CONFIG_HID_PID=y 1103CONFIG_HID_PID=y
1148CONFIG_LOGITECH_FF=y 1104CONFIG_LOGITECH_FF=y
@@ -1159,6 +1115,7 @@ CONFIG_USB_HIDDEV=y
1159# CONFIG_USB_YEALINK is not set 1115# CONFIG_USB_YEALINK is not set
1160# CONFIG_USB_XPAD is not set 1116# CONFIG_USB_XPAD is not set
1161# CONFIG_USB_ATI_REMOTE is not set 1117# CONFIG_USB_ATI_REMOTE is not set
1118# CONFIG_USB_ATI_REMOTE2 is not set
1162# CONFIG_USB_KEYSPAN_REMOTE is not set 1119# CONFIG_USB_KEYSPAN_REMOTE is not set
1163# CONFIG_USB_APPLETOUCH is not set 1120# CONFIG_USB_APPLETOUCH is not set
1164 1121
@@ -1207,6 +1164,7 @@ CONFIG_USB_SERIAL_GENERIC=y
1207# CONFIG_USB_SERIAL_AIRPRIME is not set 1164# CONFIG_USB_SERIAL_AIRPRIME is not set
1208# CONFIG_USB_SERIAL_ANYDATA is not set 1165# CONFIG_USB_SERIAL_ANYDATA is not set
1209CONFIG_USB_SERIAL_BELKIN=m 1166CONFIG_USB_SERIAL_BELKIN=m
1167# CONFIG_USB_SERIAL_WHITEHEAT is not set
1210CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m 1168CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
1211# CONFIG_USB_SERIAL_CP2101 is not set 1169# CONFIG_USB_SERIAL_CP2101 is not set
1212CONFIG_USB_SERIAL_CYPRESS_M8=m 1170CONFIG_USB_SERIAL_CYPRESS_M8=m
@@ -1288,6 +1246,10 @@ CONFIG_USB_EZUSB=y
1288# 1246#
1289 1247
1290# 1248#
1249# EDAC - error detection and reporting (RAS)
1250#
1251
1252#
1291# File systems 1253# File systems
1292# 1254#
1293CONFIG_EXT2_FS=y 1255CONFIG_EXT2_FS=y
@@ -1317,6 +1279,7 @@ CONFIG_XFS_EXPORT=y
1317CONFIG_XFS_SECURITY=y 1279CONFIG_XFS_SECURITY=y
1318CONFIG_XFS_POSIX_ACL=y 1280CONFIG_XFS_POSIX_ACL=y
1319# CONFIG_XFS_RT is not set 1281# CONFIG_XFS_RT is not set
1282# CONFIG_OCFS2_FS is not set
1320# CONFIG_MINIX_FS is not set 1283# CONFIG_MINIX_FS is not set
1321# CONFIG_ROMFS_FS is not set 1284# CONFIG_ROMFS_FS is not set
1322CONFIG_INOTIFY=y 1285CONFIG_INOTIFY=y
@@ -1357,6 +1320,7 @@ CONFIG_HUGETLBFS=y
1357CONFIG_HUGETLB_PAGE=y 1320CONFIG_HUGETLB_PAGE=y
1358CONFIG_RAMFS=y 1321CONFIG_RAMFS=y
1359# CONFIG_RELAYFS_FS is not set 1322# CONFIG_RELAYFS_FS is not set
1323# CONFIG_CONFIGFS_FS is not set
1360 1324
1361# 1325#
1362# Miscellaneous filesystems 1326# Miscellaneous filesystems
@@ -1426,6 +1390,7 @@ CONFIG_MSDOS_PARTITION=y
1426# CONFIG_SGI_PARTITION is not set 1390# CONFIG_SGI_PARTITION is not set
1427# CONFIG_ULTRIX_PARTITION is not set 1391# CONFIG_ULTRIX_PARTITION is not set
1428# CONFIG_SUN_PARTITION is not set 1392# CONFIG_SUN_PARTITION is not set
1393# CONFIG_KARMA_PARTITION is not set
1429# CONFIG_EFI_PARTITION is not set 1394# CONFIG_EFI_PARTITION is not set
1430 1395
1431# 1396#
@@ -1481,10 +1446,6 @@ CONFIG_CRC32=y
1481CONFIG_LIBCRC32C=m 1446CONFIG_LIBCRC32C=m
1482CONFIG_ZLIB_INFLATE=y 1447CONFIG_ZLIB_INFLATE=y
1483CONFIG_ZLIB_DEFLATE=m 1448CONFIG_ZLIB_DEFLATE=m
1484CONFIG_TEXTSEARCH=y
1485CONFIG_TEXTSEARCH_KMP=m
1486CONFIG_TEXTSEARCH_BM=m
1487CONFIG_TEXTSEARCH_FSM=m
1488 1449
1489# 1450#
1490# Instrumentation Support 1451# Instrumentation Support
@@ -1497,24 +1458,31 @@ CONFIG_OPROFILE=y
1497# Kernel hacking 1458# Kernel hacking
1498# 1459#
1499# CONFIG_PRINTK_TIME is not set 1460# CONFIG_PRINTK_TIME is not set
1500CONFIG_DEBUG_KERNEL=y
1501CONFIG_MAGIC_SYSRQ=y 1461CONFIG_MAGIC_SYSRQ=y
1462CONFIG_DEBUG_KERNEL=y
1502CONFIG_LOG_BUF_SHIFT=17 1463CONFIG_LOG_BUF_SHIFT=17
1503CONFIG_DETECT_SOFTLOCKUP=y 1464CONFIG_DETECT_SOFTLOCKUP=y
1504# CONFIG_SCHEDSTATS is not set 1465# CONFIG_SCHEDSTATS is not set
1505# CONFIG_DEBUG_SLAB is not set 1466# CONFIG_DEBUG_SLAB is not set
1467CONFIG_DEBUG_MUTEXES=y
1506# CONFIG_DEBUG_SPINLOCK is not set 1468# CONFIG_DEBUG_SPINLOCK is not set
1507# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1469# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1508# CONFIG_DEBUG_KOBJECT is not set 1470# CONFIG_DEBUG_KOBJECT is not set
1509# CONFIG_DEBUG_INFO is not set 1471# CONFIG_DEBUG_INFO is not set
1510CONFIG_DEBUG_FS=y 1472CONFIG_DEBUG_FS=y
1511# CONFIG_DEBUG_VM is not set 1473# CONFIG_DEBUG_VM is not set
1474CONFIG_FORCED_INLINING=y
1512# CONFIG_RCU_TORTURE_TEST is not set 1475# CONFIG_RCU_TORTURE_TEST is not set
1513# CONFIG_DEBUG_STACKOVERFLOW is not set 1476# CONFIG_DEBUG_STACKOVERFLOW is not set
1514# CONFIG_DEBUG_STACK_USAGE is not set 1477# CONFIG_DEBUG_STACK_USAGE is not set
1515# CONFIG_DEBUGGER is not set 1478# CONFIG_DEBUGGER is not set
1516CONFIG_IRQSTACKS=y 1479CONFIG_IRQSTACKS=y
1517CONFIG_BOOTX_TEXT=y 1480CONFIG_BOOTX_TEXT=y
1481# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
1482# CONFIG_PPC_EARLY_DEBUG_G5 is not set
1483# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
1484# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
1485# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
1518 1486
1519# 1487#
1520# Security options 1488# Security options
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig
index c775027947f9..1816a46742f6 100644
--- a/arch/powerpc/configs/iseries_defconfig
+++ b/arch/powerpc/configs/iseries_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc5 3# Linux kernel version: 2.6.16-rc6
4# Tue Dec 20 15:59:32 2005 4# Wed Mar 15 16:19:52 2006
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y
16CONFIG_SYSVIPC_COMPAT=y 16CONFIG_SYSVIPC_COMPAT=y
17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
18CONFIG_ARCH_MAY_HAVE_PC_FDC=y 18CONFIG_ARCH_MAY_HAVE_PC_FDC=y
19CONFIG_PPC_OF=y
20# CONFIG_PPC_UDBG_16550 is not set
21# CONFIG_GENERIC_TBSYNC is not set
22# CONFIG_DEFAULT_UIMAGE is not set
19 23
20# 24#
21# Processor support 25# Processor support
@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=32
33# Code maturity level options 37# Code maturity level options
34# 38#
35CONFIG_EXPERIMENTAL=y 39CONFIG_EXPERIMENTAL=y
36CONFIG_CLEAN_COMPILE=y
37CONFIG_LOCK_KERNEL=y 40CONFIG_LOCK_KERNEL=y
38CONFIG_INIT_ENV_ARG_LIMIT=32 41CONFIG_INIT_ENV_ARG_LIMIT=32
39 42
@@ -49,8 +52,6 @@ CONFIG_POSIX_MQUEUE=y
49CONFIG_SYSCTL=y 52CONFIG_SYSCTL=y
50CONFIG_AUDIT=y 53CONFIG_AUDIT=y
51CONFIG_AUDITSYSCALL=y 54CONFIG_AUDITSYSCALL=y
52CONFIG_HOTPLUG=y
53CONFIG_KOBJECT_UEVENT=y
54CONFIG_IKCONFIG=y 55CONFIG_IKCONFIG=y
55CONFIG_IKCONFIG_PROC=y 56CONFIG_IKCONFIG_PROC=y
56# CONFIG_CPUSETS is not set 57# CONFIG_CPUSETS is not set
@@ -60,8 +61,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
60CONFIG_KALLSYMS=y 61CONFIG_KALLSYMS=y
61# CONFIG_KALLSYMS_ALL is not set 62# CONFIG_KALLSYMS_ALL is not set
62# CONFIG_KALLSYMS_EXTRA_PASS is not set 63# CONFIG_KALLSYMS_EXTRA_PASS is not set
64CONFIG_HOTPLUG=y
63CONFIG_PRINTK=y 65CONFIG_PRINTK=y
64CONFIG_BUG=y 66CONFIG_BUG=y
67CONFIG_ELF_CORE=y
65CONFIG_BASE_FULL=y 68CONFIG_BASE_FULL=y
66CONFIG_FUTEX=y 69CONFIG_FUTEX=y
67CONFIG_EPOLL=y 70CONFIG_EPOLL=y
@@ -70,8 +73,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
70CONFIG_CC_ALIGN_LABELS=0 73CONFIG_CC_ALIGN_LABELS=0
71CONFIG_CC_ALIGN_LOOPS=0 74CONFIG_CC_ALIGN_LOOPS=0
72CONFIG_CC_ALIGN_JUMPS=0 75CONFIG_CC_ALIGN_JUMPS=0
76CONFIG_SLAB=y
73# CONFIG_TINY_SHMEM is not set 77# CONFIG_TINY_SHMEM is not set
74CONFIG_BASE_SMALL=0 78CONFIG_BASE_SMALL=0
79# CONFIG_SLOB is not set
75 80
76# 81#
77# Loadable module support 82# Loadable module support
@@ -113,7 +118,6 @@ CONFIG_PPC_ISERIES=y
113# CONFIG_MMIO_NVRAM is not set 118# CONFIG_MMIO_NVRAM is not set
114CONFIG_IBMVIO=y 119CONFIG_IBMVIO=y
115# CONFIG_PPC_MPC106 is not set 120# CONFIG_PPC_MPC106 is not set
116# CONFIG_GENERIC_TBSYNC is not set
117# CONFIG_CPU_FREQ is not set 121# CONFIG_CPU_FREQ is not set
118# CONFIG_WANT_EARLY_SERIAL is not set 122# CONFIG_WANT_EARLY_SERIAL is not set
119 123
@@ -183,6 +187,7 @@ CONFIG_NET=y
183# 187#
184# Networking options 188# Networking options
185# 189#
190# CONFIG_NETDEBUG is not set
186CONFIG_PACKET=y 191CONFIG_PACKET=y
187# CONFIG_PACKET_MMAP is not set 192# CONFIG_PACKET_MMAP is not set
188CONFIG_UNIX=y 193CONFIG_UNIX=y
@@ -220,6 +225,28 @@ CONFIG_NETFILTER=y
220# Core Netfilter Configuration 225# Core Netfilter Configuration
221# 226#
222# CONFIG_NETFILTER_NETLINK is not set 227# CONFIG_NETFILTER_NETLINK is not set
228CONFIG_NETFILTER_XTABLES=m
229CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
230CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
231CONFIG_NETFILTER_XT_TARGET_MARK=m
232CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
233CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
234CONFIG_NETFILTER_XT_MATCH_COMMENT=m
235CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
236CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
237CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
238# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
239CONFIG_NETFILTER_XT_MATCH_HELPER=m
240CONFIG_NETFILTER_XT_MATCH_LENGTH=m
241CONFIG_NETFILTER_XT_MATCH_LIMIT=m
242CONFIG_NETFILTER_XT_MATCH_MAC=m
243CONFIG_NETFILTER_XT_MATCH_MARK=m
244CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
245CONFIG_NETFILTER_XT_MATCH_REALM=m
246CONFIG_NETFILTER_XT_MATCH_SCTP=m
247CONFIG_NETFILTER_XT_MATCH_STATE=m
248CONFIG_NETFILTER_XT_MATCH_STRING=m
249CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
223 250
224# 251#
225# IP: Netfilter Configuration 252# IP: Netfilter Configuration
@@ -237,39 +264,23 @@ CONFIG_IP_NF_AMANDA=m
237# CONFIG_IP_NF_PPTP is not set 264# CONFIG_IP_NF_PPTP is not set
238CONFIG_IP_NF_QUEUE=m 265CONFIG_IP_NF_QUEUE=m
239CONFIG_IP_NF_IPTABLES=m 266CONFIG_IP_NF_IPTABLES=m
240CONFIG_IP_NF_MATCH_LIMIT=m
241CONFIG_IP_NF_MATCH_IPRANGE=m 267CONFIG_IP_NF_MATCH_IPRANGE=m
242CONFIG_IP_NF_MATCH_MAC=m
243CONFIG_IP_NF_MATCH_PKTTYPE=m
244CONFIG_IP_NF_MATCH_MARK=m
245CONFIG_IP_NF_MATCH_MULTIPORT=m 268CONFIG_IP_NF_MATCH_MULTIPORT=m
246CONFIG_IP_NF_MATCH_TOS=m 269CONFIG_IP_NF_MATCH_TOS=m
247CONFIG_IP_NF_MATCH_RECENT=m 270CONFIG_IP_NF_MATCH_RECENT=m
248CONFIG_IP_NF_MATCH_ECN=m 271CONFIG_IP_NF_MATCH_ECN=m
249CONFIG_IP_NF_MATCH_DSCP=m 272CONFIG_IP_NF_MATCH_DSCP=m
250CONFIG_IP_NF_MATCH_AH_ESP=m 273CONFIG_IP_NF_MATCH_AH_ESP=m
251CONFIG_IP_NF_MATCH_LENGTH=m
252CONFIG_IP_NF_MATCH_TTL=m 274CONFIG_IP_NF_MATCH_TTL=m
253CONFIG_IP_NF_MATCH_TCPMSS=m
254CONFIG_IP_NF_MATCH_HELPER=m
255CONFIG_IP_NF_MATCH_STATE=m
256CONFIG_IP_NF_MATCH_CONNTRACK=m
257CONFIG_IP_NF_MATCH_OWNER=m 275CONFIG_IP_NF_MATCH_OWNER=m
258CONFIG_IP_NF_MATCH_ADDRTYPE=m 276CONFIG_IP_NF_MATCH_ADDRTYPE=m
259CONFIG_IP_NF_MATCH_REALM=m
260CONFIG_IP_NF_MATCH_SCTP=m
261# CONFIG_IP_NF_MATCH_DCCP is not set
262CONFIG_IP_NF_MATCH_COMMENT=m
263CONFIG_IP_NF_MATCH_CONNMARK=m
264CONFIG_IP_NF_MATCH_CONNBYTES=m
265CONFIG_IP_NF_MATCH_HASHLIMIT=m 277CONFIG_IP_NF_MATCH_HASHLIMIT=m
266CONFIG_IP_NF_MATCH_STRING=m 278CONFIG_IP_NF_MATCH_POLICY=m
267CONFIG_IP_NF_FILTER=m 279CONFIG_IP_NF_FILTER=m
268CONFIG_IP_NF_TARGET_REJECT=m 280CONFIG_IP_NF_TARGET_REJECT=m
269CONFIG_IP_NF_TARGET_LOG=m 281CONFIG_IP_NF_TARGET_LOG=m
270CONFIG_IP_NF_TARGET_ULOG=m 282CONFIG_IP_NF_TARGET_ULOG=m
271CONFIG_IP_NF_TARGET_TCPMSS=m 283CONFIG_IP_NF_TARGET_TCPMSS=m
272CONFIG_IP_NF_TARGET_NFQUEUE=m
273CONFIG_IP_NF_NAT=m 284CONFIG_IP_NF_NAT=m
274CONFIG_IP_NF_NAT_NEEDED=y 285CONFIG_IP_NF_NAT_NEEDED=y
275CONFIG_IP_NF_TARGET_MASQUERADE=m 286CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -285,13 +296,9 @@ CONFIG_IP_NF_MANGLE=m
285CONFIG_IP_NF_TARGET_TOS=m 296CONFIG_IP_NF_TARGET_TOS=m
286CONFIG_IP_NF_TARGET_ECN=m 297CONFIG_IP_NF_TARGET_ECN=m
287CONFIG_IP_NF_TARGET_DSCP=m 298CONFIG_IP_NF_TARGET_DSCP=m
288CONFIG_IP_NF_TARGET_MARK=m
289CONFIG_IP_NF_TARGET_CLASSIFY=m
290CONFIG_IP_NF_TARGET_TTL=m 299CONFIG_IP_NF_TARGET_TTL=m
291CONFIG_IP_NF_TARGET_CONNMARK=m
292CONFIG_IP_NF_TARGET_CLUSTERIP=m 300CONFIG_IP_NF_TARGET_CLUSTERIP=m
293CONFIG_IP_NF_RAW=m 301CONFIG_IP_NF_RAW=m
294CONFIG_IP_NF_TARGET_NOTRACK=m
295CONFIG_IP_NF_ARPTABLES=m 302CONFIG_IP_NF_ARPTABLES=m
296CONFIG_IP_NF_ARPFILTER=m 303CONFIG_IP_NF_ARPFILTER=m
297CONFIG_IP_NF_ARP_MANGLE=m 304CONFIG_IP_NF_ARP_MANGLE=m
@@ -305,6 +312,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
305# SCTP Configuration (EXPERIMENTAL) 312# SCTP Configuration (EXPERIMENTAL)
306# 313#
307# CONFIG_IP_SCTP is not set 314# CONFIG_IP_SCTP is not set
315
316#
317# TIPC Configuration (EXPERIMENTAL)
318#
319# CONFIG_TIPC is not set
308# CONFIG_ATM is not set 320# CONFIG_ATM is not set
309# CONFIG_BRIDGE is not set 321# CONFIG_BRIDGE is not set
310# CONFIG_VLAN_8021Q is not set 322# CONFIG_VLAN_8021Q is not set
@@ -451,13 +463,7 @@ CONFIG_SCSI_IBMVSCSI=m
451# CONFIG_SCSI_IPR is not set 463# CONFIG_SCSI_IPR is not set
452# CONFIG_SCSI_QLOGIC_FC is not set 464# CONFIG_SCSI_QLOGIC_FC is not set
453# CONFIG_SCSI_QLOGIC_1280 is not set 465# CONFIG_SCSI_QLOGIC_1280 is not set
454CONFIG_SCSI_QLA2XXX=y 466# CONFIG_SCSI_QLA_FC is not set
455# CONFIG_SCSI_QLA21XX is not set
456# CONFIG_SCSI_QLA22XX is not set
457# CONFIG_SCSI_QLA2300 is not set
458# CONFIG_SCSI_QLA2322 is not set
459# CONFIG_SCSI_QLA6312 is not set
460# CONFIG_SCSI_QLA24XX is not set
461# CONFIG_SCSI_LPFC is not set 467# CONFIG_SCSI_LPFC is not set
462# CONFIG_SCSI_DC395x is not set 468# CONFIG_SCSI_DC395x is not set
463# CONFIG_SCSI_DC390T is not set 469# CONFIG_SCSI_DC390T is not set
@@ -574,6 +580,7 @@ CONFIG_E1000=m
574# CONFIG_R8169 is not set 580# CONFIG_R8169 is not set
575# CONFIG_SIS190 is not set 581# CONFIG_SIS190 is not set
576# CONFIG_SKGE is not set 582# CONFIG_SKGE is not set
583# CONFIG_SKY2 is not set
577# CONFIG_SK98LIN is not set 584# CONFIG_SK98LIN is not set
578# CONFIG_VIA_VELOCITY is not set 585# CONFIG_VIA_VELOCITY is not set
579# CONFIG_TIGON3 is not set 586# CONFIG_TIGON3 is not set
@@ -723,6 +730,12 @@ CONFIG_MAX_RAW_DEVS=256
723# CONFIG_I2C is not set 730# CONFIG_I2C is not set
724 731
725# 732#
733# SPI support
734#
735# CONFIG_SPI is not set
736# CONFIG_SPI_MASTER is not set
737
738#
726# Dallas's 1-wire bus 739# Dallas's 1-wire bus
727# 740#
728# CONFIG_W1 is not set 741# CONFIG_W1 is not set
@@ -788,7 +801,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y
788# CONFIG_INFINIBAND is not set 801# CONFIG_INFINIBAND is not set
789 802
790# 803#
791# SN Devices 804# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
792# 805#
793 806
794# 807#
@@ -825,6 +838,7 @@ CONFIG_XFS_EXPORT=y
825CONFIG_XFS_SECURITY=y 838CONFIG_XFS_SECURITY=y
826CONFIG_XFS_POSIX_ACL=y 839CONFIG_XFS_POSIX_ACL=y
827# CONFIG_XFS_RT is not set 840# CONFIG_XFS_RT is not set
841# CONFIG_OCFS2_FS is not set
828# CONFIG_MINIX_FS is not set 842# CONFIG_MINIX_FS is not set
829# CONFIG_ROMFS_FS is not set 843# CONFIG_ROMFS_FS is not set
830CONFIG_INOTIFY=y 844CONFIG_INOTIFY=y
@@ -865,6 +879,7 @@ CONFIG_TMPFS=y
865# CONFIG_HUGETLB_PAGE is not set 879# CONFIG_HUGETLB_PAGE is not set
866CONFIG_RAMFS=y 880CONFIG_RAMFS=y
867# CONFIG_RELAYFS_FS is not set 881# CONFIG_RELAYFS_FS is not set
882# CONFIG_CONFIGFS_FS is not set
868 883
869# 884#
870# Miscellaneous filesystems 885# Miscellaneous filesystems
@@ -993,31 +1008,36 @@ CONFIG_TEXTSEARCH_FSM=m
993# 1008#
994# Instrumentation Support 1009# Instrumentation Support
995# 1010#
996CONFIG_PROFILING=y
997CONFIG_OPROFILE=y
998# CONFIG_KPROBES is not set 1011# CONFIG_KPROBES is not set
999 1012
1000# 1013#
1001# Kernel hacking 1014# Kernel hacking
1002# 1015#
1003# CONFIG_PRINTK_TIME is not set 1016# CONFIG_PRINTK_TIME is not set
1004CONFIG_DEBUG_KERNEL=y
1005CONFIG_MAGIC_SYSRQ=y 1017CONFIG_MAGIC_SYSRQ=y
1018CONFIG_DEBUG_KERNEL=y
1006CONFIG_LOG_BUF_SHIFT=17 1019CONFIG_LOG_BUF_SHIFT=17
1007CONFIG_DETECT_SOFTLOCKUP=y 1020CONFIG_DETECT_SOFTLOCKUP=y
1008# CONFIG_SCHEDSTATS is not set 1021# CONFIG_SCHEDSTATS is not set
1009# CONFIG_DEBUG_SLAB is not set 1022# CONFIG_DEBUG_SLAB is not set
1023# CONFIG_DEBUG_MUTEXES is not set
1010# CONFIG_DEBUG_SPINLOCK is not set 1024# CONFIG_DEBUG_SPINLOCK is not set
1011# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1025# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1012# CONFIG_DEBUG_KOBJECT is not set 1026# CONFIG_DEBUG_KOBJECT is not set
1013# CONFIG_DEBUG_INFO is not set 1027# CONFIG_DEBUG_INFO is not set
1014CONFIG_DEBUG_FS=y 1028CONFIG_DEBUG_FS=y
1015# CONFIG_DEBUG_VM is not set 1029# CONFIG_DEBUG_VM is not set
1030# CONFIG_FORCED_INLINING is not set
1016# CONFIG_RCU_TORTURE_TEST is not set 1031# CONFIG_RCU_TORTURE_TEST is not set
1017CONFIG_DEBUG_STACKOVERFLOW=y 1032CONFIG_DEBUG_STACKOVERFLOW=y
1018CONFIG_DEBUG_STACK_USAGE=y 1033CONFIG_DEBUG_STACK_USAGE=y
1019# CONFIG_DEBUGGER is not set 1034# CONFIG_DEBUGGER is not set
1020CONFIG_IRQSTACKS=y 1035CONFIG_IRQSTACKS=y
1036# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
1037# CONFIG_PPC_EARLY_DEBUG_G5 is not set
1038# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
1039# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
1040# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
1021 1041
1022# 1042#
1023# Security options 1043# Security options
diff --git a/arch/powerpc/configs/maple_defconfig b/arch/powerpc/configs/maple_defconfig
index 68194c03f6d1..80a0db43aeb7 100644
--- a/arch/powerpc/configs/maple_defconfig
+++ b/arch/powerpc/configs/maple_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc5 3# Linux kernel version: 2.6.16-rc6
4# Tue Dec 20 15:59:36 2005 4# Wed Mar 15 16:19:54 2006
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y
16CONFIG_SYSVIPC_COMPAT=y 16CONFIG_SYSVIPC_COMPAT=y
17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
18CONFIG_ARCH_MAY_HAVE_PC_FDC=y 18CONFIG_ARCH_MAY_HAVE_PC_FDC=y
19CONFIG_PPC_OF=y
20CONFIG_PPC_UDBG_16550=y
21CONFIG_GENERIC_TBSYNC=y
22# CONFIG_DEFAULT_UIMAGE is not set
19 23
20# 24#
21# Processor support 25# Processor support
@@ -32,7 +36,6 @@ CONFIG_NR_CPUS=2
32# Code maturity level options 36# Code maturity level options
33# 37#
34CONFIG_EXPERIMENTAL=y 38CONFIG_EXPERIMENTAL=y
35CONFIG_CLEAN_COMPILE=y
36CONFIG_LOCK_KERNEL=y 39CONFIG_LOCK_KERNEL=y
37CONFIG_INIT_ENV_ARG_LIMIT=32 40CONFIG_INIT_ENV_ARG_LIMIT=32
38 41
@@ -47,8 +50,6 @@ CONFIG_POSIX_MQUEUE=y
47# CONFIG_BSD_PROCESS_ACCT is not set 50# CONFIG_BSD_PROCESS_ACCT is not set
48CONFIG_SYSCTL=y 51CONFIG_SYSCTL=y
49# CONFIG_AUDIT is not set 52# CONFIG_AUDIT is not set
50# CONFIG_HOTPLUG is not set
51CONFIG_KOBJECT_UEVENT=y
52CONFIG_IKCONFIG=y 53CONFIG_IKCONFIG=y
53CONFIG_IKCONFIG_PROC=y 54CONFIG_IKCONFIG_PROC=y
54# CONFIG_CPUSETS is not set 55# CONFIG_CPUSETS is not set
@@ -58,8 +59,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
58CONFIG_KALLSYMS=y 59CONFIG_KALLSYMS=y
59CONFIG_KALLSYMS_ALL=y 60CONFIG_KALLSYMS_ALL=y
60# CONFIG_KALLSYMS_EXTRA_PASS is not set 61# CONFIG_KALLSYMS_EXTRA_PASS is not set
62CONFIG_HOTPLUG=y
61CONFIG_PRINTK=y 63CONFIG_PRINTK=y
62CONFIG_BUG=y 64CONFIG_BUG=y
65CONFIG_ELF_CORE=y
63CONFIG_BASE_FULL=y 66CONFIG_BASE_FULL=y
64CONFIG_FUTEX=y 67CONFIG_FUTEX=y
65CONFIG_EPOLL=y 68CONFIG_EPOLL=y
@@ -68,8 +71,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
68CONFIG_CC_ALIGN_LABELS=0 71CONFIG_CC_ALIGN_LABELS=0
69CONFIG_CC_ALIGN_LOOPS=0 72CONFIG_CC_ALIGN_LOOPS=0
70CONFIG_CC_ALIGN_JUMPS=0 73CONFIG_CC_ALIGN_JUMPS=0
74CONFIG_SLAB=y
71# CONFIG_TINY_SHMEM is not set 75# CONFIG_TINY_SHMEM is not set
72CONFIG_BASE_SMALL=0 76CONFIG_BASE_SMALL=0
77# CONFIG_SLOB is not set
73 78
74# 79#
75# Loadable module support 80# Loadable module support
@@ -111,14 +116,12 @@ CONFIG_PPC_MULTIPLATFORM=y
111# CONFIG_PPC_PMAC is not set 116# CONFIG_PPC_PMAC is not set
112CONFIG_PPC_MAPLE=y 117CONFIG_PPC_MAPLE=y
113# CONFIG_PPC_CELL is not set 118# CONFIG_PPC_CELL is not set
114CONFIG_PPC_OF=y
115CONFIG_U3_DART=y 119CONFIG_U3_DART=y
116CONFIG_MPIC=y 120CONFIG_MPIC=y
117# CONFIG_PPC_RTAS is not set 121# CONFIG_PPC_RTAS is not set
118# CONFIG_MMIO_NVRAM is not set 122# CONFIG_MMIO_NVRAM is not set
119CONFIG_MPIC_BROKEN_U3=y 123CONFIG_MPIC_BROKEN_U3=y
120# CONFIG_PPC_MPC106 is not set 124# CONFIG_PPC_MPC106 is not set
121CONFIG_GENERIC_TBSYNC=y
122# CONFIG_CPU_FREQ is not set 125# CONFIG_CPU_FREQ is not set
123# CONFIG_WANT_EARLY_SERIAL is not set 126# CONFIG_WANT_EARLY_SERIAL is not set
124 127
@@ -138,6 +141,7 @@ CONFIG_BINFMT_ELF=y
138CONFIG_FORCE_MAX_ZONEORDER=13 141CONFIG_FORCE_MAX_ZONEORDER=13
139CONFIG_IOMMU_VMERGE=y 142CONFIG_IOMMU_VMERGE=y
140CONFIG_KEXEC=y 143CONFIG_KEXEC=y
144# CONFIG_CRASH_DUMP is not set
141CONFIG_IRQ_ALL_CPUS=y 145CONFIG_IRQ_ALL_CPUS=y
142# CONFIG_NUMA is not set 146# CONFIG_NUMA is not set
143CONFIG_ARCH_SELECT_MEMORY_MODEL=y 147CONFIG_ARCH_SELECT_MEMORY_MODEL=y
@@ -189,6 +193,7 @@ CONFIG_NET=y
189# 193#
190# Networking options 194# Networking options
191# 195#
196# CONFIG_NETDEBUG is not set
192CONFIG_PACKET=y 197CONFIG_PACKET=y
193CONFIG_PACKET_MMAP=y 198CONFIG_PACKET_MMAP=y
194CONFIG_UNIX=y 199CONFIG_UNIX=y
@@ -226,6 +231,11 @@ CONFIG_TCP_CONG_BIC=y
226# SCTP Configuration (EXPERIMENTAL) 231# SCTP Configuration (EXPERIMENTAL)
227# 232#
228# CONFIG_IP_SCTP is not set 233# CONFIG_IP_SCTP is not set
234
235#
236# TIPC Configuration (EXPERIMENTAL)
237#
238# CONFIG_TIPC is not set
229# CONFIG_ATM is not set 239# CONFIG_ATM is not set
230# CONFIG_BRIDGE is not set 240# CONFIG_BRIDGE is not set
231# CONFIG_VLAN_8021Q is not set 241# CONFIG_VLAN_8021Q is not set
@@ -461,6 +471,7 @@ CONFIG_E1000=y
461# CONFIG_R8169 is not set 471# CONFIG_R8169 is not set
462# CONFIG_SIS190 is not set 472# CONFIG_SIS190 is not set
463# CONFIG_SKGE is not set 473# CONFIG_SKGE is not set
474# CONFIG_SKY2 is not set
464# CONFIG_SK98LIN is not set 475# CONFIG_SK98LIN is not set
465# CONFIG_VIA_VELOCITY is not set 476# CONFIG_VIA_VELOCITY is not set
466# CONFIG_TIGON3 is not set 477# CONFIG_TIGON3 is not set
@@ -553,6 +564,7 @@ CONFIG_HW_CONSOLE=y
553CONFIG_SERIAL_8250=y 564CONFIG_SERIAL_8250=y
554CONFIG_SERIAL_8250_CONSOLE=y 565CONFIG_SERIAL_8250_CONSOLE=y
555CONFIG_SERIAL_8250_NR_UARTS=4 566CONFIG_SERIAL_8250_NR_UARTS=4
567CONFIG_SERIAL_8250_RUNTIME_UARTS=4
556# CONFIG_SERIAL_8250_EXTENDED is not set 568# CONFIG_SERIAL_8250_EXTENDED is not set
557 569
558# 570#
@@ -651,6 +663,12 @@ CONFIG_I2C_AMD8111=y
651# CONFIG_I2C_DEBUG_CHIP is not set 663# CONFIG_I2C_DEBUG_CHIP is not set
652 664
653# 665#
666# SPI support
667#
668# CONFIG_SPI is not set
669# CONFIG_SPI_MASTER is not set
670
671#
654# Dallas's 1-wire bus 672# Dallas's 1-wire bus
655# 673#
656# CONFIG_W1 is not set 674# CONFIG_W1 is not set
@@ -738,12 +756,14 @@ CONFIG_USB_UHCI_HCD=y
738# may also be needed; see USB_STORAGE Help for more information 756# may also be needed; see USB_STORAGE Help for more information
739# 757#
740# CONFIG_USB_STORAGE is not set 758# CONFIG_USB_STORAGE is not set
759# CONFIG_USB_LIBUSUAL is not set
741 760
742# 761#
743# USB Input Devices 762# USB Input Devices
744# 763#
745CONFIG_USB_HID=y 764CONFIG_USB_HID=y
746CONFIG_USB_HIDINPUT=y 765CONFIG_USB_HIDINPUT=y
766# CONFIG_USB_HIDINPUT_POWERBOOK is not set
747# CONFIG_HID_FF is not set 767# CONFIG_HID_FF is not set
748# CONFIG_USB_HIDDEV is not set 768# CONFIG_USB_HIDDEV is not set
749# CONFIG_USB_AIPTEK is not set 769# CONFIG_USB_AIPTEK is not set
@@ -757,6 +777,7 @@ CONFIG_USB_HIDINPUT=y
757# CONFIG_USB_YEALINK is not set 777# CONFIG_USB_YEALINK is not set
758# CONFIG_USB_XPAD is not set 778# CONFIG_USB_XPAD is not set
759# CONFIG_USB_ATI_REMOTE is not set 779# CONFIG_USB_ATI_REMOTE is not set
780# CONFIG_USB_ATI_REMOTE2 is not set
760# CONFIG_USB_KEYSPAN_REMOTE is not set 781# CONFIG_USB_KEYSPAN_REMOTE is not set
761# CONFIG_USB_APPLETOUCH is not set 782# CONFIG_USB_APPLETOUCH is not set
762 783
@@ -797,6 +818,7 @@ CONFIG_USB_SERIAL_GENERIC=y
797# CONFIG_USB_SERIAL_AIRPRIME is not set 818# CONFIG_USB_SERIAL_AIRPRIME is not set
798# CONFIG_USB_SERIAL_ANYDATA is not set 819# CONFIG_USB_SERIAL_ANYDATA is not set
799# CONFIG_USB_SERIAL_BELKIN is not set 820# CONFIG_USB_SERIAL_BELKIN is not set
821# CONFIG_USB_SERIAL_WHITEHEAT is not set
800# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set 822# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
801# CONFIG_USB_SERIAL_CP2101 is not set 823# CONFIG_USB_SERIAL_CP2101 is not set
802CONFIG_USB_SERIAL_CYPRESS_M8=m 824CONFIG_USB_SERIAL_CYPRESS_M8=m
@@ -873,7 +895,7 @@ CONFIG_USB_EZUSB=y
873# CONFIG_INFINIBAND is not set 895# CONFIG_INFINIBAND is not set
874 896
875# 897#
876# SN Devices 898# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
877# 899#
878 900
879# 901#
@@ -891,6 +913,7 @@ CONFIG_JBD=y
891# CONFIG_JFS_FS is not set 913# CONFIG_JFS_FS is not set
892CONFIG_FS_POSIX_ACL=y 914CONFIG_FS_POSIX_ACL=y
893# CONFIG_XFS_FS is not set 915# CONFIG_XFS_FS is not set
916# CONFIG_OCFS2_FS is not set
894# CONFIG_MINIX_FS is not set 917# CONFIG_MINIX_FS is not set
895# CONFIG_ROMFS_FS is not set 918# CONFIG_ROMFS_FS is not set
896CONFIG_INOTIFY=y 919CONFIG_INOTIFY=y
@@ -927,6 +950,7 @@ CONFIG_HUGETLBFS=y
927CONFIG_HUGETLB_PAGE=y 950CONFIG_HUGETLB_PAGE=y
928CONFIG_RAMFS=y 951CONFIG_RAMFS=y
929# CONFIG_RELAYFS_FS is not set 952# CONFIG_RELAYFS_FS is not set
953# CONFIG_CONFIGFS_FS is not set
930 954
931# 955#
932# Miscellaneous filesystems 956# Miscellaneous filesystems
@@ -988,6 +1012,7 @@ CONFIG_MSDOS_PARTITION=y
988# CONFIG_SGI_PARTITION is not set 1012# CONFIG_SGI_PARTITION is not set
989# CONFIG_ULTRIX_PARTITION is not set 1013# CONFIG_ULTRIX_PARTITION is not set
990# CONFIG_SUN_PARTITION is not set 1014# CONFIG_SUN_PARTITION is not set
1015# CONFIG_KARMA_PARTITION is not set
991# CONFIG_EFI_PARTITION is not set 1016# CONFIG_EFI_PARTITION is not set
992 1017
993# 1018#
@@ -1053,18 +1078,20 @@ CONFIG_ZLIB_INFLATE=y
1053# Kernel hacking 1078# Kernel hacking
1054# 1079#
1055# CONFIG_PRINTK_TIME is not set 1080# CONFIG_PRINTK_TIME is not set
1056CONFIG_DEBUG_KERNEL=y
1057CONFIG_MAGIC_SYSRQ=y 1081CONFIG_MAGIC_SYSRQ=y
1082CONFIG_DEBUG_KERNEL=y
1058CONFIG_LOG_BUF_SHIFT=17 1083CONFIG_LOG_BUF_SHIFT=17
1059CONFIG_DETECT_SOFTLOCKUP=y 1084CONFIG_DETECT_SOFTLOCKUP=y
1060# CONFIG_SCHEDSTATS is not set 1085# CONFIG_SCHEDSTATS is not set
1061CONFIG_DEBUG_SLAB=y 1086CONFIG_DEBUG_SLAB=y
1087# CONFIG_DEBUG_MUTEXES is not set
1062# CONFIG_DEBUG_SPINLOCK is not set 1088# CONFIG_DEBUG_SPINLOCK is not set
1063CONFIG_DEBUG_SPINLOCK_SLEEP=y 1089CONFIG_DEBUG_SPINLOCK_SLEEP=y
1064# CONFIG_DEBUG_KOBJECT is not set 1090# CONFIG_DEBUG_KOBJECT is not set
1065# CONFIG_DEBUG_INFO is not set 1091# CONFIG_DEBUG_INFO is not set
1066CONFIG_DEBUG_FS=y 1092CONFIG_DEBUG_FS=y
1067# CONFIG_DEBUG_VM is not set 1093# CONFIG_DEBUG_VM is not set
1094# CONFIG_FORCED_INLINING is not set
1068# CONFIG_RCU_TORTURE_TEST is not set 1095# CONFIG_RCU_TORTURE_TEST is not set
1069CONFIG_DEBUG_STACKOVERFLOW=y 1096CONFIG_DEBUG_STACKOVERFLOW=y
1070CONFIG_DEBUG_STACK_USAGE=y 1097CONFIG_DEBUG_STACK_USAGE=y
@@ -1073,6 +1100,11 @@ CONFIG_XMON=y
1073CONFIG_XMON_DEFAULT=y 1100CONFIG_XMON_DEFAULT=y
1074# CONFIG_IRQSTACKS is not set 1101# CONFIG_IRQSTACKS is not set
1075CONFIG_BOOTX_TEXT=y 1102CONFIG_BOOTX_TEXT=y
1103# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
1104# CONFIG_PPC_EARLY_DEBUG_G5 is not set
1105# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
1106# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
1107# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
1076 1108
1077# 1109#
1078# Security options 1110# Security options
diff --git a/arch/powerpc/configs/mpc834x_sys_defconfig b/arch/powerpc/configs/mpc834x_sys_defconfig
index 3bff761965c2..5078b0441d61 100644
--- a/arch/powerpc/configs/mpc834x_sys_defconfig
+++ b/arch/powerpc/configs/mpc834x_sys_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-g461d4edf-dirty 3# Linux kernel version: 2.6.16-rc6
4# Fri Jan 13 11:01:47 2006 4# Wed Mar 15 16:19:56 2006
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7CONFIG_PPC32=y 7CONFIG_PPC32=y
@@ -43,7 +43,6 @@ CONFIG_PPC_STD_MMU_32=y
43# Code maturity level options 43# Code maturity level options
44# 44#
45CONFIG_EXPERIMENTAL=y 45CONFIG_EXPERIMENTAL=y
46CONFIG_CLEAN_COMPILE=y
47CONFIG_BROKEN_ON_SMP=y 46CONFIG_BROKEN_ON_SMP=y
48CONFIG_INIT_ENV_ARG_LIMIT=32 47CONFIG_INIT_ENV_ARG_LIMIT=32
49 48
@@ -189,6 +188,7 @@ CONFIG_NET=y
189# 188#
190# Networking options 189# Networking options
191# 190#
191# CONFIG_NETDEBUG is not set
192CONFIG_PACKET=y 192CONFIG_PACKET=y
193# CONFIG_PACKET_MMAP is not set 193# CONFIG_PACKET_MMAP is not set
194CONFIG_UNIX=y 194CONFIG_UNIX=y
@@ -226,6 +226,11 @@ CONFIG_TCP_CONG_BIC=y
226# SCTP Configuration (EXPERIMENTAL) 226# SCTP Configuration (EXPERIMENTAL)
227# 227#
228# CONFIG_IP_SCTP is not set 228# CONFIG_IP_SCTP is not set
229
230#
231# TIPC Configuration (EXPERIMENTAL)
232#
233# CONFIG_TIPC is not set
229# CONFIG_ATM is not set 234# CONFIG_ATM is not set
230# CONFIG_BRIDGE is not set 235# CONFIG_BRIDGE is not set
231# CONFIG_VLAN_8021Q is not set 236# CONFIG_VLAN_8021Q is not set
@@ -511,6 +516,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
511# 516#
512CONFIG_SERIAL_CORE=y 517CONFIG_SERIAL_CORE=y
513CONFIG_SERIAL_CORE_CONSOLE=y 518CONFIG_SERIAL_CORE_CONSOLE=y
519# CONFIG_SERIAL_JSM is not set
514CONFIG_UNIX98_PTYS=y 520CONFIG_UNIX98_PTYS=y
515CONFIG_LEGACY_PTYS=y 521CONFIG_LEGACY_PTYS=y
516CONFIG_LEGACY_PTY_COUNT=256 522CONFIG_LEGACY_PTY_COUNT=256
@@ -615,6 +621,12 @@ CONFIG_I2C_MPC=y
615# CONFIG_I2C_DEBUG_CHIP is not set 621# CONFIG_I2C_DEBUG_CHIP is not set
616 622
617# 623#
624# SPI support
625#
626# CONFIG_SPI is not set
627# CONFIG_SPI_MASTER is not set
628
629#
618# Dallas's 1-wire bus 630# Dallas's 1-wire bus
619# 631#
620# CONFIG_W1 is not set 632# CONFIG_W1 is not set
@@ -632,6 +644,7 @@ CONFIG_HWMON=y
632# CONFIG_SENSORS_ASB100 is not set 644# CONFIG_SENSORS_ASB100 is not set
633# CONFIG_SENSORS_ATXP1 is not set 645# CONFIG_SENSORS_ATXP1 is not set
634# CONFIG_SENSORS_DS1621 is not set 646# CONFIG_SENSORS_DS1621 is not set
647# CONFIG_SENSORS_F71805F is not set
635# CONFIG_SENSORS_FSCHER is not set 648# CONFIG_SENSORS_FSCHER is not set
636# CONFIG_SENSORS_FSCPOS is not set 649# CONFIG_SENSORS_FSCPOS is not set
637# CONFIG_SENSORS_GL518SM is not set 650# CONFIG_SENSORS_GL518SM is not set
@@ -716,7 +729,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y
716# CONFIG_INFINIBAND is not set 729# CONFIG_INFINIBAND is not set
717 730
718# 731#
719# SN Devices 732# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
720# 733#
721 734
722# 735#
@@ -826,6 +839,7 @@ CONFIG_PARTITION_ADVANCED=y
826# CONFIG_SGI_PARTITION is not set 839# CONFIG_SGI_PARTITION is not set
827# CONFIG_ULTRIX_PARTITION is not set 840# CONFIG_ULTRIX_PARTITION is not set
828# CONFIG_SUN_PARTITION is not set 841# CONFIG_SUN_PARTITION is not set
842# CONFIG_KARMA_PARTITION is not set
829# CONFIG_EFI_PARTITION is not set 843# CONFIG_EFI_PARTITION is not set
830 844
831# 845#
@@ -899,13 +913,3 @@ CONFIG_CRYPTO_DES=y
899# 913#
900# Hardware crypto devices 914# Hardware crypto devices
901# 915#
902
903#
904# SEC2.x Options
905#
906CONFIG_MPC8349E_SEC2x=y
907
908#
909# SEC2.x Test Options
910#
911CONFIG_MPC8349E_SEC2xTEST=y
diff --git a/arch/powerpc/configs/pmac32_defconfig b/arch/powerpc/configs/pmac32_defconfig
index 2ace57d1e333..57a027971d67 100644
--- a/arch/powerpc/configs/pmac32_defconfig
+++ b/arch/powerpc/configs/pmac32_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15 3# Linux kernel version: 2.6.16-rc6
4# Sat Jan 14 16:26:08 2006 4# Wed Mar 15 16:21:32 2006
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7CONFIG_PPC32=y 7CONFIG_PPC32=y
@@ -17,8 +17,8 @@ CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
17CONFIG_ARCH_MAY_HAVE_PC_FDC=y 17CONFIG_ARCH_MAY_HAVE_PC_FDC=y
18CONFIG_PPC_OF=y 18CONFIG_PPC_OF=y
19# CONFIG_PPC_UDBG_16550 is not set 19# CONFIG_PPC_UDBG_16550 is not set
20# CONFIG_CRASH_DUMP is not set
21# CONFIG_GENERIC_TBSYNC is not set 20# CONFIG_GENERIC_TBSYNC is not set
21# CONFIG_DEFAULT_UIMAGE is not set
22 22
23# 23#
24# Processor support 24# Processor support
@@ -43,7 +43,6 @@ CONFIG_PPC_STD_MMU_32=y
43# Code maturity level options 43# Code maturity level options
44# 44#
45CONFIG_EXPERIMENTAL=y 45CONFIG_EXPERIMENTAL=y
46CONFIG_CLEAN_COMPILE=y
47CONFIG_BROKEN_ON_SMP=y 46CONFIG_BROKEN_ON_SMP=y
48CONFIG_INIT_ENV_ARG_LIMIT=32 47CONFIG_INIT_ENV_ARG_LIMIT=32
49 48
@@ -236,6 +235,7 @@ CONFIG_NET=y
236# 235#
237# Networking options 236# Networking options
238# 237#
238# CONFIG_NETDEBUG is not set
239CONFIG_PACKET=y 239CONFIG_PACKET=y
240# CONFIG_PACKET_MMAP is not set 240# CONFIG_PACKET_MMAP is not set
241CONFIG_UNIX=y 241CONFIG_UNIX=y
@@ -271,6 +271,25 @@ CONFIG_NETFILTER=y
271# Core Netfilter Configuration 271# Core Netfilter Configuration
272# 272#
273# CONFIG_NETFILTER_NETLINK is not set 273# CONFIG_NETFILTER_NETLINK is not set
274CONFIG_NETFILTER_XTABLES=m
275CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
276CONFIG_NETFILTER_XT_TARGET_MARK=m
277CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
278CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
279CONFIG_NETFILTER_XT_MATCH_COMMENT=m
280CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
281# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
282CONFIG_NETFILTER_XT_MATCH_HELPER=m
283CONFIG_NETFILTER_XT_MATCH_LENGTH=m
284CONFIG_NETFILTER_XT_MATCH_LIMIT=m
285CONFIG_NETFILTER_XT_MATCH_MAC=m
286CONFIG_NETFILTER_XT_MATCH_MARK=m
287CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
288CONFIG_NETFILTER_XT_MATCH_REALM=m
289CONFIG_NETFILTER_XT_MATCH_SCTP=m
290CONFIG_NETFILTER_XT_MATCH_STATE=m
291CONFIG_NETFILTER_XT_MATCH_STRING=m
292CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
274 293
275# 294#
276# IP: Netfilter Configuration 295# IP: Netfilter Configuration
@@ -288,37 +307,22 @@ CONFIG_IP_NF_AMANDA=m
288CONFIG_IP_NF_PPTP=m 307CONFIG_IP_NF_PPTP=m
289# CONFIG_IP_NF_QUEUE is not set 308# CONFIG_IP_NF_QUEUE is not set
290CONFIG_IP_NF_IPTABLES=m 309CONFIG_IP_NF_IPTABLES=m
291CONFIG_IP_NF_MATCH_LIMIT=m
292CONFIG_IP_NF_MATCH_IPRANGE=m 310CONFIG_IP_NF_MATCH_IPRANGE=m
293CONFIG_IP_NF_MATCH_MAC=m
294CONFIG_IP_NF_MATCH_PKTTYPE=m
295CONFIG_IP_NF_MATCH_MARK=m
296CONFIG_IP_NF_MATCH_MULTIPORT=m 311CONFIG_IP_NF_MATCH_MULTIPORT=m
297CONFIG_IP_NF_MATCH_TOS=m 312CONFIG_IP_NF_MATCH_TOS=m
298CONFIG_IP_NF_MATCH_RECENT=m 313CONFIG_IP_NF_MATCH_RECENT=m
299CONFIG_IP_NF_MATCH_ECN=m 314CONFIG_IP_NF_MATCH_ECN=m
300CONFIG_IP_NF_MATCH_DSCP=m 315CONFIG_IP_NF_MATCH_DSCP=m
301CONFIG_IP_NF_MATCH_AH_ESP=m 316CONFIG_IP_NF_MATCH_AH_ESP=m
302CONFIG_IP_NF_MATCH_LENGTH=m
303CONFIG_IP_NF_MATCH_TTL=m 317CONFIG_IP_NF_MATCH_TTL=m
304CONFIG_IP_NF_MATCH_TCPMSS=m
305CONFIG_IP_NF_MATCH_HELPER=m
306CONFIG_IP_NF_MATCH_STATE=m
307CONFIG_IP_NF_MATCH_CONNTRACK=m
308CONFIG_IP_NF_MATCH_OWNER=m 318CONFIG_IP_NF_MATCH_OWNER=m
309# CONFIG_IP_NF_MATCH_ADDRTYPE is not set 319CONFIG_IP_NF_MATCH_ADDRTYPE=m
310# CONFIG_IP_NF_MATCH_REALM is not set 320CONFIG_IP_NF_MATCH_HASHLIMIT=m
311# CONFIG_IP_NF_MATCH_SCTP is not set
312CONFIG_IP_NF_MATCH_DCCP=m
313# CONFIG_IP_NF_MATCH_COMMENT is not set
314# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
315CONFIG_IP_NF_MATCH_STRING=m
316CONFIG_IP_NF_FILTER=m 321CONFIG_IP_NF_FILTER=m
317CONFIG_IP_NF_TARGET_REJECT=m 322CONFIG_IP_NF_TARGET_REJECT=m
318# CONFIG_IP_NF_TARGET_LOG is not set 323CONFIG_IP_NF_TARGET_LOG=m
319CONFIG_IP_NF_TARGET_ULOG=m 324CONFIG_IP_NF_TARGET_ULOG=m
320CONFIG_IP_NF_TARGET_TCPMSS=m 325CONFIG_IP_NF_TARGET_TCPMSS=m
321# CONFIG_IP_NF_TARGET_NFQUEUE is not set
322CONFIG_IP_NF_NAT=m 326CONFIG_IP_NF_NAT=m
323CONFIG_IP_NF_NAT_NEEDED=y 327CONFIG_IP_NF_NAT_NEEDED=y
324CONFIG_IP_NF_TARGET_MASQUERADE=m 328CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -331,9 +335,12 @@ CONFIG_IP_NF_NAT_FTP=m
331CONFIG_IP_NF_NAT_TFTP=m 335CONFIG_IP_NF_NAT_TFTP=m
332CONFIG_IP_NF_NAT_AMANDA=m 336CONFIG_IP_NF_NAT_AMANDA=m
333CONFIG_IP_NF_NAT_PPTP=m 337CONFIG_IP_NF_NAT_PPTP=m
334# CONFIG_IP_NF_MANGLE is not set 338CONFIG_IP_NF_MANGLE=m
339CONFIG_IP_NF_TARGET_TOS=m
340CONFIG_IP_NF_TARGET_ECN=m
341CONFIG_IP_NF_TARGET_DSCP=m
342CONFIG_IP_NF_TARGET_TTL=m
335CONFIG_IP_NF_RAW=m 343CONFIG_IP_NF_RAW=m
336CONFIG_IP_NF_TARGET_NOTRACK=m
337CONFIG_IP_NF_ARPTABLES=m 344CONFIG_IP_NF_ARPTABLES=m
338CONFIG_IP_NF_ARPFILTER=m 345CONFIG_IP_NF_ARPFILTER=m
339CONFIG_IP_NF_ARP_MANGLE=m 346CONFIG_IP_NF_ARP_MANGLE=m
@@ -360,6 +367,11 @@ CONFIG_IP_DCCP_TFRC_LIB=m
360# SCTP Configuration (EXPERIMENTAL) 367# SCTP Configuration (EXPERIMENTAL)
361# 368#
362# CONFIG_IP_SCTP is not set 369# CONFIG_IP_SCTP is not set
370
371#
372# TIPC Configuration (EXPERIMENTAL)
373#
374# CONFIG_TIPC is not set
363# CONFIG_ATM is not set 375# CONFIG_ATM is not set
364# CONFIG_BRIDGE is not set 376# CONFIG_BRIDGE is not set
365# CONFIG_VLAN_8021Q is not set 377# CONFIG_VLAN_8021Q is not set
@@ -377,6 +389,7 @@ CONFIG_IP_DCCP_TFRC_LIB=m
377# QoS and/or fair queueing 389# QoS and/or fair queueing
378# 390#
379# CONFIG_NET_SCHED is not set 391# CONFIG_NET_SCHED is not set
392CONFIG_NET_CLS_ROUTE=y
380 393
381# 394#
382# Network testing 395# Network testing
@@ -568,7 +581,6 @@ CONFIG_IDEDMA_PCI_AUTO=y
568# CONFIG_BLK_DEV_NS87415 is not set 581# CONFIG_BLK_DEV_NS87415 is not set
569# CONFIG_BLK_DEV_PDC202XX_OLD is not set 582# CONFIG_BLK_DEV_PDC202XX_OLD is not set
570CONFIG_BLK_DEV_PDC202XX_NEW=y 583CONFIG_BLK_DEV_PDC202XX_NEW=y
571# CONFIG_PDC202XX_FORCE is not set
572# CONFIG_BLK_DEV_SVWKS is not set 584# CONFIG_BLK_DEV_SVWKS is not set
573# CONFIG_BLK_DEV_SIIMAGE is not set 585# CONFIG_BLK_DEV_SIIMAGE is not set
574# CONFIG_BLK_DEV_SLC90E66 is not set 586# CONFIG_BLK_DEV_SLC90E66 is not set
@@ -654,8 +666,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
654# CONFIG_SCSI_IPR is not set 666# CONFIG_SCSI_IPR is not set
655# CONFIG_SCSI_QLOGIC_FC is not set 667# CONFIG_SCSI_QLOGIC_FC is not set
656# CONFIG_SCSI_QLOGIC_1280 is not set 668# CONFIG_SCSI_QLOGIC_1280 is not set
657CONFIG_SCSI_QLA2XXX=y 669# CONFIG_SCSI_QLA_FC is not set
658# CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
659# CONFIG_SCSI_LPFC is not set 670# CONFIG_SCSI_LPFC is not set
660# CONFIG_SCSI_DC395x is not set 671# CONFIG_SCSI_DC395x is not set
661# CONFIG_SCSI_DC390T is not set 672# CONFIG_SCSI_DC390T is not set
@@ -991,6 +1002,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
991# 1002#
992CONFIG_SERIAL_CORE=m 1003CONFIG_SERIAL_CORE=m
993CONFIG_SERIAL_PMACZILOG=m 1004CONFIG_SERIAL_PMACZILOG=m
1005# CONFIG_SERIAL_JSM is not set
994CONFIG_UNIX98_PTYS=y 1006CONFIG_UNIX98_PTYS=y
995CONFIG_LEGACY_PTYS=y 1007CONFIG_LEGACY_PTYS=y
996CONFIG_LEGACY_PTY_COUNT=256 1008CONFIG_LEGACY_PTY_COUNT=256
@@ -1098,6 +1110,12 @@ CONFIG_I2C_POWERMAC=y
1098# CONFIG_I2C_DEBUG_CHIP is not set 1110# CONFIG_I2C_DEBUG_CHIP is not set
1099 1111
1100# 1112#
1113# SPI support
1114#
1115# CONFIG_SPI is not set
1116# CONFIG_SPI_MASTER is not set
1117
1118#
1101# Dallas's 1-wire bus 1119# Dallas's 1-wire bus
1102# 1120#
1103# CONFIG_W1 is not set 1121# CONFIG_W1 is not set
@@ -1348,6 +1366,7 @@ CONFIG_USB_PRINTER=m
1348# 1366#
1349CONFIG_USB_HID=y 1367CONFIG_USB_HID=y
1350CONFIG_USB_HIDINPUT=y 1368CONFIG_USB_HIDINPUT=y
1369CONFIG_USB_HIDINPUT_POWERBOOK=y
1351# CONFIG_HID_FF is not set 1370# CONFIG_HID_FF is not set
1352# CONFIG_USB_HIDDEV is not set 1371# CONFIG_USB_HIDDEV is not set
1353# CONFIG_USB_AIPTEK is not set 1372# CONFIG_USB_AIPTEK is not set
@@ -1488,7 +1507,7 @@ CONFIG_USB_EZUSB=y
1488# CONFIG_INFINIBAND is not set 1507# CONFIG_INFINIBAND is not set
1489 1508
1490# 1509#
1491# SN Devices 1510# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
1492# 1511#
1493 1512
1494# 1513#
@@ -1609,6 +1628,7 @@ CONFIG_MSDOS_PARTITION=y
1609# CONFIG_SGI_PARTITION is not set 1628# CONFIG_SGI_PARTITION is not set
1610# CONFIG_ULTRIX_PARTITION is not set 1629# CONFIG_ULTRIX_PARTITION is not set
1611# CONFIG_SUN_PARTITION is not set 1630# CONFIG_SUN_PARTITION is not set
1631# CONFIG_KARMA_PARTITION is not set
1612# CONFIG_EFI_PARTITION is not set 1632# CONFIG_EFI_PARTITION is not set
1613 1633
1614# 1634#
@@ -1692,6 +1712,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
1692# CONFIG_DEBUG_INFO is not set 1712# CONFIG_DEBUG_INFO is not set
1693# CONFIG_DEBUG_FS is not set 1713# CONFIG_DEBUG_FS is not set
1694# CONFIG_DEBUG_VM is not set 1714# CONFIG_DEBUG_VM is not set
1715# CONFIG_FORCED_INLINING is not set
1695# CONFIG_RCU_TORTURE_TEST is not set 1716# CONFIG_RCU_TORTURE_TEST is not set
1696CONFIG_DEBUGGER=y 1717CONFIG_DEBUGGER=y
1697CONFIG_XMON=y 1718CONFIG_XMON=y
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig
index 6f6c6bed1aa5..395e49847788 100644
--- a/arch/powerpc/configs/ppc64_defconfig
+++ b/arch/powerpc/configs/ppc64_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc5 3# Linux kernel version: 2.6.16-rc2
4# Tue Dec 20 15:59:38 2005 4# Fri Feb 10 17:32:14 2006
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y
16CONFIG_SYSVIPC_COMPAT=y 16CONFIG_SYSVIPC_COMPAT=y
17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
18CONFIG_ARCH_MAY_HAVE_PC_FDC=y 18CONFIG_ARCH_MAY_HAVE_PC_FDC=y
19CONFIG_PPC_OF=y
20CONFIG_PPC_UDBG_16550=y
21CONFIG_GENERIC_TBSYNC=y
22# CONFIG_DEFAULT_UIMAGE is not set
19 23
20# 24#
21# Processor support 25# Processor support
@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=32
33# Code maturity level options 37# Code maturity level options
34# 38#
35CONFIG_EXPERIMENTAL=y 39CONFIG_EXPERIMENTAL=y
36CONFIG_CLEAN_COMPILE=y
37CONFIG_LOCK_KERNEL=y 40CONFIG_LOCK_KERNEL=y
38CONFIG_INIT_ENV_ARG_LIMIT=32 41CONFIG_INIT_ENV_ARG_LIMIT=32
39 42
@@ -48,8 +51,6 @@ CONFIG_POSIX_MQUEUE=y
48# CONFIG_BSD_PROCESS_ACCT is not set 51# CONFIG_BSD_PROCESS_ACCT is not set
49CONFIG_SYSCTL=y 52CONFIG_SYSCTL=y
50# CONFIG_AUDIT is not set 53# CONFIG_AUDIT is not set
51CONFIG_HOTPLUG=y
52CONFIG_KOBJECT_UEVENT=y
53CONFIG_IKCONFIG=y 54CONFIG_IKCONFIG=y
54CONFIG_IKCONFIG_PROC=y 55CONFIG_IKCONFIG_PROC=y
55CONFIG_CPUSETS=y 56CONFIG_CPUSETS=y
@@ -59,8 +60,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
59CONFIG_KALLSYMS=y 60CONFIG_KALLSYMS=y
60CONFIG_KALLSYMS_ALL=y 61CONFIG_KALLSYMS_ALL=y
61# CONFIG_KALLSYMS_EXTRA_PASS is not set 62# CONFIG_KALLSYMS_EXTRA_PASS is not set
63CONFIG_HOTPLUG=y
62CONFIG_PRINTK=y 64CONFIG_PRINTK=y
63CONFIG_BUG=y 65CONFIG_BUG=y
66CONFIG_ELF_CORE=y
64CONFIG_BASE_FULL=y 67CONFIG_BASE_FULL=y
65CONFIG_FUTEX=y 68CONFIG_FUTEX=y
66CONFIG_EPOLL=y 69CONFIG_EPOLL=y
@@ -69,8 +72,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
69CONFIG_CC_ALIGN_LABELS=0 72CONFIG_CC_ALIGN_LABELS=0
70CONFIG_CC_ALIGN_LOOPS=0 73CONFIG_CC_ALIGN_LOOPS=0
71CONFIG_CC_ALIGN_JUMPS=0 74CONFIG_CC_ALIGN_JUMPS=0
75CONFIG_SLAB=y
72# CONFIG_TINY_SHMEM is not set 76# CONFIG_TINY_SHMEM is not set
73CONFIG_BASE_SMALL=0 77CONFIG_BASE_SMALL=0
78# CONFIG_SLOB is not set
74 79
75# 80#
76# Loadable module support 81# Loadable module support
@@ -113,7 +118,6 @@ CONFIG_PPC_PMAC=y
113CONFIG_PPC_PMAC64=y 118CONFIG_PPC_PMAC64=y
114CONFIG_PPC_MAPLE=y 119CONFIG_PPC_MAPLE=y
115# CONFIG_PPC_CELL is not set 120# CONFIG_PPC_CELL is not set
116CONFIG_PPC_OF=y
117CONFIG_XICS=y 121CONFIG_XICS=y
118CONFIG_U3_DART=y 122CONFIG_U3_DART=y
119CONFIG_MPIC=y 123CONFIG_MPIC=y
@@ -124,8 +128,8 @@ CONFIG_RTAS_FLASH=m
124# CONFIG_MMIO_NVRAM is not set 128# CONFIG_MMIO_NVRAM is not set
125CONFIG_MPIC_BROKEN_U3=y 129CONFIG_MPIC_BROKEN_U3=y
126CONFIG_IBMVIO=y 130CONFIG_IBMVIO=y
131# CONFIG_IBMEBUS is not set
127# CONFIG_PPC_MPC106 is not set 132# CONFIG_PPC_MPC106 is not set
128CONFIG_GENERIC_TBSYNC=y
129CONFIG_CPU_FREQ=y 133CONFIG_CPU_FREQ=y
130CONFIG_CPU_FREQ_TABLE=y 134CONFIG_CPU_FREQ_TABLE=y
131# CONFIG_CPU_FREQ_DEBUG is not set 135# CONFIG_CPU_FREQ_DEBUG is not set
@@ -158,6 +162,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
158CONFIG_IOMMU_VMERGE=y 162CONFIG_IOMMU_VMERGE=y
159CONFIG_HOTPLUG_CPU=y 163CONFIG_HOTPLUG_CPU=y
160CONFIG_KEXEC=y 164CONFIG_KEXEC=y
165# CONFIG_CRASH_DUMP is not set
161CONFIG_IRQ_ALL_CPUS=y 166CONFIG_IRQ_ALL_CPUS=y
162CONFIG_PPC_SPLPAR=y 167CONFIG_PPC_SPLPAR=y
163CONFIG_EEH=y 168CONFIG_EEH=y
@@ -178,6 +183,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
178CONFIG_SPARSEMEM_EXTREME=y 183CONFIG_SPARSEMEM_EXTREME=y
179# CONFIG_MEMORY_HOTPLUG is not set 184# CONFIG_MEMORY_HOTPLUG is not set
180CONFIG_SPLIT_PTLOCK_CPUS=4 185CONFIG_SPLIT_PTLOCK_CPUS=4
186CONFIG_MIGRATION=y
181# CONFIG_PPC_64K_PAGES is not set 187# CONFIG_PPC_64K_PAGES is not set
182# CONFIG_SCHED_SMT is not set 188# CONFIG_SCHED_SMT is not set
183CONFIG_PROC_DEVICETREE=y 189CONFIG_PROC_DEVICETREE=y
@@ -221,6 +227,7 @@ CONFIG_NET=y
221# 227#
222# Networking options 228# Networking options
223# 229#
230# CONFIG_NETDEBUG is not set
224CONFIG_PACKET=y 231CONFIG_PACKET=y
225# CONFIG_PACKET_MMAP is not set 232# CONFIG_PACKET_MMAP is not set
226CONFIG_UNIX=y 233CONFIG_UNIX=y
@@ -260,6 +267,7 @@ CONFIG_NETFILTER=y
260CONFIG_NETFILTER_NETLINK=y 267CONFIG_NETFILTER_NETLINK=y
261CONFIG_NETFILTER_NETLINK_QUEUE=m 268CONFIG_NETFILTER_NETLINK_QUEUE=m
262CONFIG_NETFILTER_NETLINK_LOG=m 269CONFIG_NETFILTER_NETLINK_LOG=m
270# CONFIG_NETFILTER_XTABLES is not set
263 271
264# 272#
265# IP: Netfilter Configuration 273# IP: Netfilter Configuration
@@ -277,65 +285,6 @@ CONFIG_IP_NF_TFTP=m
277CONFIG_IP_NF_AMANDA=m 285CONFIG_IP_NF_AMANDA=m
278# CONFIG_IP_NF_PPTP is not set 286# CONFIG_IP_NF_PPTP is not set
279CONFIG_IP_NF_QUEUE=m 287CONFIG_IP_NF_QUEUE=m
280CONFIG_IP_NF_IPTABLES=m
281CONFIG_IP_NF_MATCH_LIMIT=m
282CONFIG_IP_NF_MATCH_IPRANGE=m
283CONFIG_IP_NF_MATCH_MAC=m
284CONFIG_IP_NF_MATCH_PKTTYPE=m
285CONFIG_IP_NF_MATCH_MARK=m
286CONFIG_IP_NF_MATCH_MULTIPORT=m
287CONFIG_IP_NF_MATCH_TOS=m
288CONFIG_IP_NF_MATCH_RECENT=m
289CONFIG_IP_NF_MATCH_ECN=m
290CONFIG_IP_NF_MATCH_DSCP=m
291CONFIG_IP_NF_MATCH_AH_ESP=m
292CONFIG_IP_NF_MATCH_LENGTH=m
293CONFIG_IP_NF_MATCH_TTL=m
294CONFIG_IP_NF_MATCH_TCPMSS=m
295CONFIG_IP_NF_MATCH_HELPER=m
296CONFIG_IP_NF_MATCH_STATE=m
297CONFIG_IP_NF_MATCH_CONNTRACK=m
298CONFIG_IP_NF_MATCH_OWNER=m
299CONFIG_IP_NF_MATCH_ADDRTYPE=m
300CONFIG_IP_NF_MATCH_REALM=m
301CONFIG_IP_NF_MATCH_SCTP=m
302CONFIG_IP_NF_MATCH_DCCP=m
303CONFIG_IP_NF_MATCH_COMMENT=m
304CONFIG_IP_NF_MATCH_CONNMARK=m
305CONFIG_IP_NF_MATCH_CONNBYTES=m
306CONFIG_IP_NF_MATCH_HASHLIMIT=m
307CONFIG_IP_NF_MATCH_STRING=m
308CONFIG_IP_NF_FILTER=m
309CONFIG_IP_NF_TARGET_REJECT=m
310CONFIG_IP_NF_TARGET_LOG=m
311CONFIG_IP_NF_TARGET_ULOG=m
312CONFIG_IP_NF_TARGET_TCPMSS=m
313CONFIG_IP_NF_TARGET_NFQUEUE=m
314CONFIG_IP_NF_NAT=m
315CONFIG_IP_NF_NAT_NEEDED=y
316CONFIG_IP_NF_TARGET_MASQUERADE=m
317CONFIG_IP_NF_TARGET_REDIRECT=m
318CONFIG_IP_NF_TARGET_NETMAP=m
319CONFIG_IP_NF_TARGET_SAME=m
320CONFIG_IP_NF_NAT_SNMP_BASIC=m
321CONFIG_IP_NF_NAT_IRC=m
322CONFIG_IP_NF_NAT_FTP=m
323CONFIG_IP_NF_NAT_TFTP=m
324CONFIG_IP_NF_NAT_AMANDA=m
325CONFIG_IP_NF_MANGLE=m
326CONFIG_IP_NF_TARGET_TOS=m
327CONFIG_IP_NF_TARGET_ECN=m
328CONFIG_IP_NF_TARGET_DSCP=m
329CONFIG_IP_NF_TARGET_MARK=m
330CONFIG_IP_NF_TARGET_CLASSIFY=m
331CONFIG_IP_NF_TARGET_TTL=m
332CONFIG_IP_NF_TARGET_CONNMARK=m
333CONFIG_IP_NF_TARGET_CLUSTERIP=m
334CONFIG_IP_NF_RAW=m
335CONFIG_IP_NF_TARGET_NOTRACK=m
336CONFIG_IP_NF_ARPTABLES=m
337CONFIG_IP_NF_ARPFILTER=m
338CONFIG_IP_NF_ARP_MANGLE=m
339 288
340# 289#
341# DCCP Configuration (EXPERIMENTAL) 290# DCCP Configuration (EXPERIMENTAL)
@@ -346,6 +295,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
346# SCTP Configuration (EXPERIMENTAL) 295# SCTP Configuration (EXPERIMENTAL)
347# 296#
348# CONFIG_IP_SCTP is not set 297# CONFIG_IP_SCTP is not set
298
299#
300# TIPC Configuration (EXPERIMENTAL)
301#
302# CONFIG_TIPC is not set
349# CONFIG_ATM is not set 303# CONFIG_ATM is not set
350# CONFIG_BRIDGE is not set 304# CONFIG_BRIDGE is not set
351# CONFIG_VLAN_8021Q is not set 305# CONFIG_VLAN_8021Q is not set
@@ -364,7 +318,6 @@ CONFIG_LLC=y
364# QoS and/or fair queueing 318# QoS and/or fair queueing
365# 319#
366# CONFIG_NET_SCHED is not set 320# CONFIG_NET_SCHED is not set
367CONFIG_NET_CLS_ROUTE=y
368 321
369# 322#
370# Network testing 323# Network testing
@@ -454,7 +407,7 @@ CONFIG_IDEPCI_SHARE_IRQ=y
454# CONFIG_BLK_DEV_OFFBOARD is not set 407# CONFIG_BLK_DEV_OFFBOARD is not set
455CONFIG_BLK_DEV_GENERIC=y 408CONFIG_BLK_DEV_GENERIC=y
456# CONFIG_BLK_DEV_OPTI621 is not set 409# CONFIG_BLK_DEV_OPTI621 is not set
457# CONFIG_BLK_DEV_SL82C105 is not set 410CONFIG_BLK_DEV_SL82C105=y
458CONFIG_BLK_DEV_IDEDMA_PCI=y 411CONFIG_BLK_DEV_IDEDMA_PCI=y
459# CONFIG_BLK_DEV_IDEDMA_FORCED is not set 412# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
460CONFIG_IDEDMA_PCI_AUTO=y 413CONFIG_IDEDMA_PCI_AUTO=y
@@ -572,13 +525,7 @@ CONFIG_SCSI_IPR_TRACE=y
572CONFIG_SCSI_IPR_DUMP=y 525CONFIG_SCSI_IPR_DUMP=y
573# CONFIG_SCSI_QLOGIC_FC is not set 526# CONFIG_SCSI_QLOGIC_FC is not set
574# CONFIG_SCSI_QLOGIC_1280 is not set 527# CONFIG_SCSI_QLOGIC_1280 is not set
575CONFIG_SCSI_QLA2XXX=y 528# CONFIG_SCSI_QLA_FC is not set
576CONFIG_SCSI_QLA21XX=m
577CONFIG_SCSI_QLA22XX=m
578CONFIG_SCSI_QLA2300=m
579CONFIG_SCSI_QLA2322=m
580CONFIG_SCSI_QLA6312=m
581CONFIG_SCSI_QLA24XX=m
582CONFIG_SCSI_LPFC=m 529CONFIG_SCSI_LPFC=m
583# CONFIG_SCSI_DC395x is not set 530# CONFIG_SCSI_DC395x is not set
584# CONFIG_SCSI_DC390T is not set 531# CONFIG_SCSI_DC390T is not set
@@ -642,8 +589,6 @@ CONFIG_IEEE1394_SBP2=m
642CONFIG_IEEE1394_ETH1394=m 589CONFIG_IEEE1394_ETH1394=m
643CONFIG_IEEE1394_DV1394=m 590CONFIG_IEEE1394_DV1394=m
644CONFIG_IEEE1394_RAWIO=y 591CONFIG_IEEE1394_RAWIO=y
645CONFIG_IEEE1394_CMP=m
646CONFIG_IEEE1394_AMDTP=m
647 592
648# 593#
649# I2O device support 594# I2O device support
@@ -659,6 +604,7 @@ CONFIG_THERM_PM72=y
659CONFIG_WINDFARM=y 604CONFIG_WINDFARM=y
660CONFIG_WINDFARM_PM81=y 605CONFIG_WINDFARM_PM81=y
661CONFIG_WINDFARM_PM91=y 606CONFIG_WINDFARM_PM91=y
607CONFIG_WINDFARM_PM112=y
662 608
663# 609#
664# Network device support 610# Network device support
@@ -731,6 +677,7 @@ CONFIG_E1000=y
731# CONFIG_R8169 is not set 677# CONFIG_R8169 is not set
732# CONFIG_SIS190 is not set 678# CONFIG_SIS190 is not set
733# CONFIG_SKGE is not set 679# CONFIG_SKGE is not set
680# CONFIG_SKY2 is not set
734# CONFIG_SK98LIN is not set 681# CONFIG_SK98LIN is not set
735# CONFIG_VIA_VELOCITY is not set 682# CONFIG_VIA_VELOCITY is not set
736CONFIG_TIGON3=y 683CONFIG_TIGON3=y
@@ -853,6 +800,7 @@ CONFIG_HW_CONSOLE=y
853CONFIG_SERIAL_8250=y 800CONFIG_SERIAL_8250=y
854CONFIG_SERIAL_8250_CONSOLE=y 801CONFIG_SERIAL_8250_CONSOLE=y
855CONFIG_SERIAL_8250_NR_UARTS=4 802CONFIG_SERIAL_8250_NR_UARTS=4
803CONFIG_SERIAL_8250_RUNTIME_UARTS=4
856# CONFIG_SERIAL_8250_EXTENDED is not set 804# CONFIG_SERIAL_8250_EXTENDED is not set
857 805
858# 806#
@@ -880,6 +828,7 @@ CONFIG_HVCS=m
880# CONFIG_WATCHDOG is not set 828# CONFIG_WATCHDOG is not set
881# CONFIG_RTC is not set 829# CONFIG_RTC is not set
882CONFIG_GEN_RTC=y 830CONFIG_GEN_RTC=y
831# CONFIG_GEN_RTC_X is not set
883# CONFIG_DTLK is not set 832# CONFIG_DTLK is not set
884# CONFIG_R3964 is not set 833# CONFIG_R3964 is not set
885# CONFIG_APPLICOM is not set 834# CONFIG_APPLICOM is not set
@@ -923,8 +872,7 @@ CONFIG_I2C_AMD8111=y
923# CONFIG_I2C_I801 is not set 872# CONFIG_I2C_I801 is not set
924# CONFIG_I2C_I810 is not set 873# CONFIG_I2C_I810 is not set
925# CONFIG_I2C_PIIX4 is not set 874# CONFIG_I2C_PIIX4 is not set
926CONFIG_I2C_KEYWEST=y 875CONFIG_I2C_POWERMAC=y
927CONFIG_I2C_PMAC_SMU=y
928# CONFIG_I2C_NFORCE2 is not set 876# CONFIG_I2C_NFORCE2 is not set
929# CONFIG_I2C_PARPORT_LIGHT is not set 877# CONFIG_I2C_PARPORT_LIGHT is not set
930# CONFIG_I2C_PROSAVAGE is not set 878# CONFIG_I2C_PROSAVAGE is not set
@@ -957,6 +905,12 @@ CONFIG_I2C_PMAC_SMU=y
957# CONFIG_I2C_DEBUG_CHIP is not set 905# CONFIG_I2C_DEBUG_CHIP is not set
958 906
959# 907#
908# SPI support
909#
910# CONFIG_SPI is not set
911# CONFIG_SPI_MASTER is not set
912
913#
960# Dallas's 1-wire bus 914# Dallas's 1-wire bus
961# 915#
962# CONFIG_W1 is not set 916# CONFIG_W1 is not set
@@ -1028,7 +982,6 @@ CONFIG_FB_RADEON_I2C=y
1028# CONFIG_FB_KYRO is not set 982# CONFIG_FB_KYRO is not set
1029# CONFIG_FB_3DFX is not set 983# CONFIG_FB_3DFX is not set
1030# CONFIG_FB_VOODOO1 is not set 984# CONFIG_FB_VOODOO1 is not set
1031# CONFIG_FB_CYBLA is not set
1032# CONFIG_FB_TRIDENT is not set 985# CONFIG_FB_TRIDENT is not set
1033# CONFIG_FB_VIRTUAL is not set 986# CONFIG_FB_VIRTUAL is not set
1034 987
@@ -1073,9 +1026,10 @@ CONFIG_SND_OSSEMUL=y
1073CONFIG_SND_MIXER_OSS=m 1026CONFIG_SND_MIXER_OSS=m
1074CONFIG_SND_PCM_OSS=m 1027CONFIG_SND_PCM_OSS=m
1075CONFIG_SND_SEQUENCER_OSS=y 1028CONFIG_SND_SEQUENCER_OSS=y
1029# CONFIG_SND_DYNAMIC_MINORS is not set
1030CONFIG_SND_SUPPORT_OLD_API=y
1076# CONFIG_SND_VERBOSE_PRINTK is not set 1031# CONFIG_SND_VERBOSE_PRINTK is not set
1077# CONFIG_SND_DEBUG is not set 1032# CONFIG_SND_DEBUG is not set
1078CONFIG_SND_GENERIC_DRIVER=y
1079 1033
1080# 1034#
1081# Generic devices 1035# Generic devices
@@ -1089,6 +1043,8 @@ CONFIG_SND_GENERIC_DRIVER=y
1089# 1043#
1090# PCI devices 1044# PCI devices
1091# 1045#
1046# CONFIG_SND_AD1889 is not set
1047# CONFIG_SND_ALS4000 is not set
1092# CONFIG_SND_ALI5451 is not set 1048# CONFIG_SND_ALI5451 is not set
1093# CONFIG_SND_ATIIXP is not set 1049# CONFIG_SND_ATIIXP is not set
1094# CONFIG_SND_ATIIXP_MODEM is not set 1050# CONFIG_SND_ATIIXP_MODEM is not set
@@ -1097,39 +1053,38 @@ CONFIG_SND_GENERIC_DRIVER=y
1097# CONFIG_SND_AU8830 is not set 1053# CONFIG_SND_AU8830 is not set
1098# CONFIG_SND_AZT3328 is not set 1054# CONFIG_SND_AZT3328 is not set
1099# CONFIG_SND_BT87X is not set 1055# CONFIG_SND_BT87X is not set
1100# CONFIG_SND_CS46XX is not set 1056# CONFIG_SND_CA0106 is not set
1057# CONFIG_SND_CMIPCI is not set
1101# CONFIG_SND_CS4281 is not set 1058# CONFIG_SND_CS4281 is not set
1059# CONFIG_SND_CS46XX is not set
1102# CONFIG_SND_EMU10K1 is not set 1060# CONFIG_SND_EMU10K1 is not set
1103# CONFIG_SND_EMU10K1X is not set 1061# CONFIG_SND_EMU10K1X is not set
1104# CONFIG_SND_CA0106 is not set
1105# CONFIG_SND_KORG1212 is not set
1106# CONFIG_SND_MIXART is not set
1107# CONFIG_SND_NM256 is not set
1108# CONFIG_SND_RME32 is not set
1109# CONFIG_SND_RME96 is not set
1110# CONFIG_SND_RME9652 is not set
1111# CONFIG_SND_HDSP is not set
1112# CONFIG_SND_HDSPM is not set
1113# CONFIG_SND_TRIDENT is not set
1114# CONFIG_SND_YMFPCI is not set
1115# CONFIG_SND_AD1889 is not set
1116# CONFIG_SND_ALS4000 is not set
1117# CONFIG_SND_CMIPCI is not set
1118# CONFIG_SND_ENS1370 is not set 1062# CONFIG_SND_ENS1370 is not set
1119# CONFIG_SND_ENS1371 is not set 1063# CONFIG_SND_ENS1371 is not set
1120# CONFIG_SND_ES1938 is not set 1064# CONFIG_SND_ES1938 is not set
1121# CONFIG_SND_ES1968 is not set 1065# CONFIG_SND_ES1968 is not set
1122# CONFIG_SND_MAESTRO3 is not set
1123# CONFIG_SND_FM801 is not set 1066# CONFIG_SND_FM801 is not set
1067# CONFIG_SND_HDA_INTEL is not set
1068# CONFIG_SND_HDSP is not set
1069# CONFIG_SND_HDSPM is not set
1124# CONFIG_SND_ICE1712 is not set 1070# CONFIG_SND_ICE1712 is not set
1125# CONFIG_SND_ICE1724 is not set 1071# CONFIG_SND_ICE1724 is not set
1126# CONFIG_SND_INTEL8X0 is not set 1072# CONFIG_SND_INTEL8X0 is not set
1127# CONFIG_SND_INTEL8X0M is not set 1073# CONFIG_SND_INTEL8X0M is not set
1074# CONFIG_SND_KORG1212 is not set
1075# CONFIG_SND_MAESTRO3 is not set
1076# CONFIG_SND_MIXART is not set
1077# CONFIG_SND_NM256 is not set
1078# CONFIG_SND_PCXHR is not set
1079# CONFIG_SND_RME32 is not set
1080# CONFIG_SND_RME96 is not set
1081# CONFIG_SND_RME9652 is not set
1128# CONFIG_SND_SONICVIBES is not set 1082# CONFIG_SND_SONICVIBES is not set
1083# CONFIG_SND_TRIDENT is not set
1129# CONFIG_SND_VIA82XX is not set 1084# CONFIG_SND_VIA82XX is not set
1130# CONFIG_SND_VIA82XX_MODEM is not set 1085# CONFIG_SND_VIA82XX_MODEM is not set
1131# CONFIG_SND_VX222 is not set 1086# CONFIG_SND_VX222 is not set
1132# CONFIG_SND_HDA_INTEL is not set 1087# CONFIG_SND_YMFPCI is not set
1133 1088
1134# 1089#
1135# ALSA PowerMac devices 1090# ALSA PowerMac devices
@@ -1201,13 +1156,16 @@ CONFIG_USB_STORAGE=m
1201# CONFIG_USB_STORAGE_SDDR09 is not set 1156# CONFIG_USB_STORAGE_SDDR09 is not set
1202# CONFIG_USB_STORAGE_SDDR55 is not set 1157# CONFIG_USB_STORAGE_SDDR55 is not set
1203# CONFIG_USB_STORAGE_JUMPSHOT is not set 1158# CONFIG_USB_STORAGE_JUMPSHOT is not set
1159# CONFIG_USB_STORAGE_ALAUDA is not set
1204# CONFIG_USB_STORAGE_ONETOUCH is not set 1160# CONFIG_USB_STORAGE_ONETOUCH is not set
1161# CONFIG_USB_LIBUSUAL is not set
1205 1162
1206# 1163#
1207# USB Input Devices 1164# USB Input Devices
1208# 1165#
1209CONFIG_USB_HID=y 1166CONFIG_USB_HID=y
1210CONFIG_USB_HIDINPUT=y 1167CONFIG_USB_HIDINPUT=y
1168# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1211# CONFIG_HID_FF is not set 1169# CONFIG_HID_FF is not set
1212CONFIG_USB_HIDDEV=y 1170CONFIG_USB_HIDDEV=y
1213# CONFIG_USB_AIPTEK is not set 1171# CONFIG_USB_AIPTEK is not set
@@ -1221,6 +1179,7 @@ CONFIG_USB_HIDDEV=y
1221# CONFIG_USB_YEALINK is not set 1179# CONFIG_USB_YEALINK is not set
1222# CONFIG_USB_XPAD is not set 1180# CONFIG_USB_XPAD is not set
1223# CONFIG_USB_ATI_REMOTE is not set 1181# CONFIG_USB_ATI_REMOTE is not set
1182# CONFIG_USB_ATI_REMOTE2 is not set
1224# CONFIG_USB_KEYSPAN_REMOTE is not set 1183# CONFIG_USB_KEYSPAN_REMOTE is not set
1225# CONFIG_USB_APPLETOUCH is not set 1184# CONFIG_USB_APPLETOUCH is not set
1226 1185
@@ -1307,6 +1266,10 @@ CONFIG_INFINIBAND_IPOIB=m
1307# 1266#
1308 1267
1309# 1268#
1269# EDAC - error detection and reporting (RAS)
1270#
1271
1272#
1310# File systems 1273# File systems
1311# 1274#
1312CONFIG_EXT2_FS=y 1275CONFIG_EXT2_FS=y
@@ -1340,6 +1303,7 @@ CONFIG_XFS_EXPORT=y
1340CONFIG_XFS_SECURITY=y 1303CONFIG_XFS_SECURITY=y
1341CONFIG_XFS_POSIX_ACL=y 1304CONFIG_XFS_POSIX_ACL=y
1342# CONFIG_XFS_RT is not set 1305# CONFIG_XFS_RT is not set
1306# CONFIG_OCFS2_FS is not set
1343# CONFIG_MINIX_FS is not set 1307# CONFIG_MINIX_FS is not set
1344# CONFIG_ROMFS_FS is not set 1308# CONFIG_ROMFS_FS is not set
1345CONFIG_INOTIFY=y 1309CONFIG_INOTIFY=y
@@ -1379,6 +1343,7 @@ CONFIG_HUGETLBFS=y
1379CONFIG_HUGETLB_PAGE=y 1343CONFIG_HUGETLB_PAGE=y
1380CONFIG_RAMFS=y 1344CONFIG_RAMFS=y
1381# CONFIG_RELAYFS_FS is not set 1345# CONFIG_RELAYFS_FS is not set
1346# CONFIG_CONFIGFS_FS is not set
1382 1347
1383# 1348#
1384# Miscellaneous filesystems 1349# Miscellaneous filesystems
@@ -1449,6 +1414,7 @@ CONFIG_MSDOS_PARTITION=y
1449# CONFIG_SGI_PARTITION is not set 1414# CONFIG_SGI_PARTITION is not set
1450# CONFIG_ULTRIX_PARTITION is not set 1415# CONFIG_ULTRIX_PARTITION is not set
1451# CONFIG_SUN_PARTITION is not set 1416# CONFIG_SUN_PARTITION is not set
1417# CONFIG_KARMA_PARTITION is not set
1452# CONFIG_EFI_PARTITION is not set 1418# CONFIG_EFI_PARTITION is not set
1453 1419
1454# 1420#
@@ -1504,10 +1470,6 @@ CONFIG_CRC32=y
1504CONFIG_LIBCRC32C=m 1470CONFIG_LIBCRC32C=m
1505CONFIG_ZLIB_INFLATE=y 1471CONFIG_ZLIB_INFLATE=y
1506CONFIG_ZLIB_DEFLATE=m 1472CONFIG_ZLIB_DEFLATE=m
1507CONFIG_TEXTSEARCH=y
1508CONFIG_TEXTSEARCH_KMP=m
1509CONFIG_TEXTSEARCH_BM=m
1510CONFIG_TEXTSEARCH_FSM=m
1511 1473
1512# 1474#
1513# Instrumentation Support 1475# Instrumentation Support
@@ -1520,18 +1482,20 @@ CONFIG_OPROFILE=y
1520# Kernel hacking 1482# Kernel hacking
1521# 1483#
1522# CONFIG_PRINTK_TIME is not set 1484# CONFIG_PRINTK_TIME is not set
1523CONFIG_DEBUG_KERNEL=y
1524CONFIG_MAGIC_SYSRQ=y 1485CONFIG_MAGIC_SYSRQ=y
1486CONFIG_DEBUG_KERNEL=y
1525CONFIG_LOG_BUF_SHIFT=17 1487CONFIG_LOG_BUF_SHIFT=17
1526CONFIG_DETECT_SOFTLOCKUP=y 1488CONFIG_DETECT_SOFTLOCKUP=y
1527# CONFIG_SCHEDSTATS is not set 1489# CONFIG_SCHEDSTATS is not set
1528# CONFIG_DEBUG_SLAB is not set 1490# CONFIG_DEBUG_SLAB is not set
1491CONFIG_DEBUG_MUTEXES=y
1529# CONFIG_DEBUG_SPINLOCK is not set 1492# CONFIG_DEBUG_SPINLOCK is not set
1530# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1493# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1531# CONFIG_DEBUG_KOBJECT is not set 1494# CONFIG_DEBUG_KOBJECT is not set
1532# CONFIG_DEBUG_INFO is not set 1495# CONFIG_DEBUG_INFO is not set
1533CONFIG_DEBUG_FS=y 1496CONFIG_DEBUG_FS=y
1534# CONFIG_DEBUG_VM is not set 1497# CONFIG_DEBUG_VM is not set
1498CONFIG_FORCED_INLINING=y
1535# CONFIG_RCU_TORTURE_TEST is not set 1499# CONFIG_RCU_TORTURE_TEST is not set
1536CONFIG_DEBUG_STACKOVERFLOW=y 1500CONFIG_DEBUG_STACKOVERFLOW=y
1537CONFIG_DEBUG_STACK_USAGE=y 1501CONFIG_DEBUG_STACK_USAGE=y
@@ -1540,6 +1504,11 @@ CONFIG_XMON=y
1540# CONFIG_XMON_DEFAULT is not set 1504# CONFIG_XMON_DEFAULT is not set
1541CONFIG_IRQSTACKS=y 1505CONFIG_IRQSTACKS=y
1542CONFIG_BOOTX_TEXT=y 1506CONFIG_BOOTX_TEXT=y
1507# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
1508# CONFIG_PPC_EARLY_DEBUG_G5 is not set
1509# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
1510# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
1511# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
1543 1512
1544# 1513#
1545# Security options 1514# Security options
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
index aa9893a1f6e8..daaf038a1faa 100644
--- a/arch/powerpc/configs/pseries_defconfig
+++ b/arch/powerpc/configs/pseries_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc5 3# Linux kernel version: 2.6.16-rc2
4# Tue Dec 20 15:59:40 2005 4# Fri Feb 10 17:33:32 2006
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -16,6 +16,10 @@ CONFIG_COMPAT=y
16CONFIG_SYSVIPC_COMPAT=y 16CONFIG_SYSVIPC_COMPAT=y
17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 17CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
18CONFIG_ARCH_MAY_HAVE_PC_FDC=y 18CONFIG_ARCH_MAY_HAVE_PC_FDC=y
19CONFIG_PPC_OF=y
20CONFIG_PPC_UDBG_16550=y
21# CONFIG_GENERIC_TBSYNC is not set
22# CONFIG_DEFAULT_UIMAGE is not set
19 23
20# 24#
21# Processor support 25# Processor support
@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=128
33# Code maturity level options 37# Code maturity level options
34# 38#
35CONFIG_EXPERIMENTAL=y 39CONFIG_EXPERIMENTAL=y
36CONFIG_CLEAN_COMPILE=y
37CONFIG_LOCK_KERNEL=y 40CONFIG_LOCK_KERNEL=y
38CONFIG_INIT_ENV_ARG_LIMIT=32 41CONFIG_INIT_ENV_ARG_LIMIT=32
39 42
@@ -49,8 +52,6 @@ CONFIG_POSIX_MQUEUE=y
49CONFIG_SYSCTL=y 52CONFIG_SYSCTL=y
50CONFIG_AUDIT=y 53CONFIG_AUDIT=y
51CONFIG_AUDITSYSCALL=y 54CONFIG_AUDITSYSCALL=y
52CONFIG_HOTPLUG=y
53CONFIG_KOBJECT_UEVENT=y
54CONFIG_IKCONFIG=y 55CONFIG_IKCONFIG=y
55CONFIG_IKCONFIG_PROC=y 56CONFIG_IKCONFIG_PROC=y
56CONFIG_CPUSETS=y 57CONFIG_CPUSETS=y
@@ -60,8 +61,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
60CONFIG_KALLSYMS=y 61CONFIG_KALLSYMS=y
61CONFIG_KALLSYMS_ALL=y 62CONFIG_KALLSYMS_ALL=y
62# CONFIG_KALLSYMS_EXTRA_PASS is not set 63# CONFIG_KALLSYMS_EXTRA_PASS is not set
64CONFIG_HOTPLUG=y
63CONFIG_PRINTK=y 65CONFIG_PRINTK=y
64CONFIG_BUG=y 66CONFIG_BUG=y
67CONFIG_ELF_CORE=y
65CONFIG_BASE_FULL=y 68CONFIG_BASE_FULL=y
66CONFIG_FUTEX=y 69CONFIG_FUTEX=y
67CONFIG_EPOLL=y 70CONFIG_EPOLL=y
@@ -70,8 +73,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
70CONFIG_CC_ALIGN_LABELS=0 73CONFIG_CC_ALIGN_LABELS=0
71CONFIG_CC_ALIGN_LOOPS=0 74CONFIG_CC_ALIGN_LOOPS=0
72CONFIG_CC_ALIGN_JUMPS=0 75CONFIG_CC_ALIGN_JUMPS=0
76CONFIG_SLAB=y
73# CONFIG_TINY_SHMEM is not set 77# CONFIG_TINY_SHMEM is not set
74CONFIG_BASE_SMALL=0 78CONFIG_BASE_SMALL=0
79# CONFIG_SLOB is not set
75 80
76# 81#
77# Loadable module support 82# Loadable module support
@@ -113,7 +118,6 @@ CONFIG_PPC_PSERIES=y
113# CONFIG_PPC_PMAC is not set 118# CONFIG_PPC_PMAC is not set
114# CONFIG_PPC_MAPLE is not set 119# CONFIG_PPC_MAPLE is not set
115# CONFIG_PPC_CELL is not set 120# CONFIG_PPC_CELL is not set
116CONFIG_PPC_OF=y
117CONFIG_XICS=y 121CONFIG_XICS=y
118# CONFIG_U3_DART is not set 122# CONFIG_U3_DART is not set
119CONFIG_MPIC=y 123CONFIG_MPIC=y
@@ -123,8 +127,8 @@ CONFIG_RTAS_PROC=y
123CONFIG_RTAS_FLASH=m 127CONFIG_RTAS_FLASH=m
124# CONFIG_MMIO_NVRAM is not set 128# CONFIG_MMIO_NVRAM is not set
125CONFIG_IBMVIO=y 129CONFIG_IBMVIO=y
130# CONFIG_IBMEBUS is not set
126# CONFIG_PPC_MPC106 is not set 131# CONFIG_PPC_MPC106 is not set
127# CONFIG_GENERIC_TBSYNC is not set
128# CONFIG_CPU_FREQ is not set 132# CONFIG_CPU_FREQ is not set
129# CONFIG_WANT_EARLY_SERIAL is not set 133# CONFIG_WANT_EARLY_SERIAL is not set
130 134
@@ -145,6 +149,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
145CONFIG_IOMMU_VMERGE=y 149CONFIG_IOMMU_VMERGE=y
146CONFIG_HOTPLUG_CPU=y 150CONFIG_HOTPLUG_CPU=y
147CONFIG_KEXEC=y 151CONFIG_KEXEC=y
152# CONFIG_CRASH_DUMP is not set
148CONFIG_IRQ_ALL_CPUS=y 153CONFIG_IRQ_ALL_CPUS=y
149CONFIG_PPC_SPLPAR=y 154CONFIG_PPC_SPLPAR=y
150CONFIG_EEH=y 155CONFIG_EEH=y
@@ -165,6 +170,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
165CONFIG_SPARSEMEM_EXTREME=y 170CONFIG_SPARSEMEM_EXTREME=y
166# CONFIG_MEMORY_HOTPLUG is not set 171# CONFIG_MEMORY_HOTPLUG is not set
167CONFIG_SPLIT_PTLOCK_CPUS=4 172CONFIG_SPLIT_PTLOCK_CPUS=4
173CONFIG_MIGRATION=y
168CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y 174CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
169# CONFIG_PPC_64K_PAGES is not set 175# CONFIG_PPC_64K_PAGES is not set
170CONFIG_SCHED_SMT=y 176CONFIG_SCHED_SMT=y
@@ -209,6 +215,7 @@ CONFIG_NET=y
209# 215#
210# Networking options 216# Networking options
211# 217#
218# CONFIG_NETDEBUG is not set
212CONFIG_PACKET=y 219CONFIG_PACKET=y
213# CONFIG_PACKET_MMAP is not set 220# CONFIG_PACKET_MMAP is not set
214CONFIG_UNIX=y 221CONFIG_UNIX=y
@@ -248,6 +255,7 @@ CONFIG_NETFILTER=y
248CONFIG_NETFILTER_NETLINK=y 255CONFIG_NETFILTER_NETLINK=y
249CONFIG_NETFILTER_NETLINK_QUEUE=m 256CONFIG_NETFILTER_NETLINK_QUEUE=m
250CONFIG_NETFILTER_NETLINK_LOG=m 257CONFIG_NETFILTER_NETLINK_LOG=m
258# CONFIG_NETFILTER_XTABLES is not set
251 259
252# 260#
253# IP: Netfilter Configuration 261# IP: Netfilter Configuration
@@ -265,65 +273,6 @@ CONFIG_IP_NF_TFTP=m
265CONFIG_IP_NF_AMANDA=m 273CONFIG_IP_NF_AMANDA=m
266# CONFIG_IP_NF_PPTP is not set 274# CONFIG_IP_NF_PPTP is not set
267CONFIG_IP_NF_QUEUE=m 275CONFIG_IP_NF_QUEUE=m
268CONFIG_IP_NF_IPTABLES=m
269CONFIG_IP_NF_MATCH_LIMIT=m
270CONFIG_IP_NF_MATCH_IPRANGE=m
271CONFIG_IP_NF_MATCH_MAC=m
272CONFIG_IP_NF_MATCH_PKTTYPE=m
273CONFIG_IP_NF_MATCH_MARK=m
274CONFIG_IP_NF_MATCH_MULTIPORT=m
275CONFIG_IP_NF_MATCH_TOS=m
276CONFIG_IP_NF_MATCH_RECENT=m
277CONFIG_IP_NF_MATCH_ECN=m
278CONFIG_IP_NF_MATCH_DSCP=m
279CONFIG_IP_NF_MATCH_AH_ESP=m
280CONFIG_IP_NF_MATCH_LENGTH=m
281CONFIG_IP_NF_MATCH_TTL=m
282CONFIG_IP_NF_MATCH_TCPMSS=m
283CONFIG_IP_NF_MATCH_HELPER=m
284CONFIG_IP_NF_MATCH_STATE=m
285CONFIG_IP_NF_MATCH_CONNTRACK=m
286CONFIG_IP_NF_MATCH_OWNER=m
287CONFIG_IP_NF_MATCH_ADDRTYPE=m
288CONFIG_IP_NF_MATCH_REALM=m
289CONFIG_IP_NF_MATCH_SCTP=m
290# CONFIG_IP_NF_MATCH_DCCP is not set
291CONFIG_IP_NF_MATCH_COMMENT=m
292CONFIG_IP_NF_MATCH_CONNMARK=m
293CONFIG_IP_NF_MATCH_CONNBYTES=m
294CONFIG_IP_NF_MATCH_HASHLIMIT=m
295CONFIG_IP_NF_MATCH_STRING=m
296CONFIG_IP_NF_FILTER=m
297CONFIG_IP_NF_TARGET_REJECT=m
298CONFIG_IP_NF_TARGET_LOG=m
299CONFIG_IP_NF_TARGET_ULOG=m
300CONFIG_IP_NF_TARGET_TCPMSS=m
301CONFIG_IP_NF_TARGET_NFQUEUE=m
302CONFIG_IP_NF_NAT=m
303CONFIG_IP_NF_NAT_NEEDED=y
304CONFIG_IP_NF_TARGET_MASQUERADE=m
305CONFIG_IP_NF_TARGET_REDIRECT=m
306CONFIG_IP_NF_TARGET_NETMAP=m
307CONFIG_IP_NF_TARGET_SAME=m
308CONFIG_IP_NF_NAT_SNMP_BASIC=m
309CONFIG_IP_NF_NAT_IRC=m
310CONFIG_IP_NF_NAT_FTP=m
311CONFIG_IP_NF_NAT_TFTP=m
312CONFIG_IP_NF_NAT_AMANDA=m
313CONFIG_IP_NF_MANGLE=m
314CONFIG_IP_NF_TARGET_TOS=m
315CONFIG_IP_NF_TARGET_ECN=m
316CONFIG_IP_NF_TARGET_DSCP=m
317CONFIG_IP_NF_TARGET_MARK=m
318CONFIG_IP_NF_TARGET_CLASSIFY=m
319CONFIG_IP_NF_TARGET_TTL=m
320CONFIG_IP_NF_TARGET_CONNMARK=m
321CONFIG_IP_NF_TARGET_CLUSTERIP=m
322CONFIG_IP_NF_RAW=m
323CONFIG_IP_NF_TARGET_NOTRACK=m
324CONFIG_IP_NF_ARPTABLES=m
325CONFIG_IP_NF_ARPFILTER=m
326CONFIG_IP_NF_ARP_MANGLE=m
327 276
328# 277#
329# DCCP Configuration (EXPERIMENTAL) 278# DCCP Configuration (EXPERIMENTAL)
@@ -334,6 +283,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
334# SCTP Configuration (EXPERIMENTAL) 283# SCTP Configuration (EXPERIMENTAL)
335# 284#
336# CONFIG_IP_SCTP is not set 285# CONFIG_IP_SCTP is not set
286
287#
288# TIPC Configuration (EXPERIMENTAL)
289#
290# CONFIG_TIPC is not set
337# CONFIG_ATM is not set 291# CONFIG_ATM is not set
338# CONFIG_BRIDGE is not set 292# CONFIG_BRIDGE is not set
339# CONFIG_VLAN_8021Q is not set 293# CONFIG_VLAN_8021Q is not set
@@ -352,7 +306,6 @@ CONFIG_LLC=y
352# QoS and/or fair queueing 306# QoS and/or fair queueing
353# 307#
354# CONFIG_NET_SCHED is not set 308# CONFIG_NET_SCHED is not set
355CONFIG_NET_CLS_ROUTE=y
356 309
357# 310#
358# Network testing 311# Network testing
@@ -550,13 +503,7 @@ CONFIG_SCSI_IPR_TRACE=y
550CONFIG_SCSI_IPR_DUMP=y 503CONFIG_SCSI_IPR_DUMP=y
551# CONFIG_SCSI_QLOGIC_FC is not set 504# CONFIG_SCSI_QLOGIC_FC is not set
552# CONFIG_SCSI_QLOGIC_1280 is not set 505# CONFIG_SCSI_QLOGIC_1280 is not set
553CONFIG_SCSI_QLA2XXX=y 506# CONFIG_SCSI_QLA_FC is not set
554CONFIG_SCSI_QLA21XX=m
555CONFIG_SCSI_QLA22XX=m
556CONFIG_SCSI_QLA2300=m
557CONFIG_SCSI_QLA2322=m
558CONFIG_SCSI_QLA6312=m
559CONFIG_SCSI_QLA24XX=m
560CONFIG_SCSI_LPFC=m 507CONFIG_SCSI_LPFC=m
561# CONFIG_SCSI_DC395x is not set 508# CONFIG_SCSI_DC395x is not set
562# CONFIG_SCSI_DC390T is not set 509# CONFIG_SCSI_DC390T is not set
@@ -678,6 +625,7 @@ CONFIG_E1000=y
678# CONFIG_R8169 is not set 625# CONFIG_R8169 is not set
679# CONFIG_SIS190 is not set 626# CONFIG_SIS190 is not set
680# CONFIG_SKGE is not set 627# CONFIG_SKGE is not set
628# CONFIG_SKY2 is not set
681# CONFIG_SK98LIN is not set 629# CONFIG_SK98LIN is not set
682# CONFIG_VIA_VELOCITY is not set 630# CONFIG_VIA_VELOCITY is not set
683CONFIG_TIGON3=y 631CONFIG_TIGON3=y
@@ -803,6 +751,7 @@ CONFIG_HW_CONSOLE=y
803CONFIG_SERIAL_8250=y 751CONFIG_SERIAL_8250=y
804CONFIG_SERIAL_8250_CONSOLE=y 752CONFIG_SERIAL_8250_CONSOLE=y
805CONFIG_SERIAL_8250_NR_UARTS=4 753CONFIG_SERIAL_8250_NR_UARTS=4
754CONFIG_SERIAL_8250_RUNTIME_UARTS=4
806# CONFIG_SERIAL_8250_EXTENDED is not set 755# CONFIG_SERIAL_8250_EXTENDED is not set
807 756
808# 757#
@@ -909,6 +858,12 @@ CONFIG_I2C_ALGOBIT=y
909# CONFIG_I2C_DEBUG_CHIP is not set 858# CONFIG_I2C_DEBUG_CHIP is not set
910 859
911# 860#
861# SPI support
862#
863# CONFIG_SPI is not set
864# CONFIG_SPI_MASTER is not set
865
866#
912# Dallas's 1-wire bus 867# Dallas's 1-wire bus
913# 868#
914# CONFIG_W1 is not set 869# CONFIG_W1 is not set
@@ -976,7 +931,6 @@ CONFIG_FB_RADEON_I2C=y
976# CONFIG_FB_KYRO is not set 931# CONFIG_FB_KYRO is not set
977# CONFIG_FB_3DFX is not set 932# CONFIG_FB_3DFX is not set
978# CONFIG_FB_VOODOO1 is not set 933# CONFIG_FB_VOODOO1 is not set
979# CONFIG_FB_CYBLA is not set
980# CONFIG_FB_TRIDENT is not set 934# CONFIG_FB_TRIDENT is not set
981# CONFIG_FB_VIRTUAL is not set 935# CONFIG_FB_VIRTUAL is not set
982 936
@@ -1061,12 +1015,15 @@ CONFIG_USB_STORAGE=y
1061# CONFIG_USB_STORAGE_SDDR09 is not set 1015# CONFIG_USB_STORAGE_SDDR09 is not set
1062# CONFIG_USB_STORAGE_SDDR55 is not set 1016# CONFIG_USB_STORAGE_SDDR55 is not set
1063# CONFIG_USB_STORAGE_JUMPSHOT is not set 1017# CONFIG_USB_STORAGE_JUMPSHOT is not set
1018# CONFIG_USB_STORAGE_ALAUDA is not set
1019# CONFIG_USB_LIBUSUAL is not set
1064 1020
1065# 1021#
1066# USB Input Devices 1022# USB Input Devices
1067# 1023#
1068CONFIG_USB_HID=y 1024CONFIG_USB_HID=y
1069CONFIG_USB_HIDINPUT=y 1025CONFIG_USB_HIDINPUT=y
1026# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1070# CONFIG_HID_FF is not set 1027# CONFIG_HID_FF is not set
1071CONFIG_USB_HIDDEV=y 1028CONFIG_USB_HIDDEV=y
1072# CONFIG_USB_AIPTEK is not set 1029# CONFIG_USB_AIPTEK is not set
@@ -1080,6 +1037,7 @@ CONFIG_USB_HIDDEV=y
1080# CONFIG_USB_YEALINK is not set 1037# CONFIG_USB_YEALINK is not set
1081# CONFIG_USB_XPAD is not set 1038# CONFIG_USB_XPAD is not set
1082# CONFIG_USB_ATI_REMOTE is not set 1039# CONFIG_USB_ATI_REMOTE is not set
1040# CONFIG_USB_ATI_REMOTE2 is not set
1083# CONFIG_USB_KEYSPAN_REMOTE is not set 1041# CONFIG_USB_KEYSPAN_REMOTE is not set
1084# CONFIG_USB_APPLETOUCH is not set 1042# CONFIG_USB_APPLETOUCH is not set
1085 1043
@@ -1167,6 +1125,10 @@ CONFIG_INFINIBAND_IPOIB=m
1167# 1125#
1168 1126
1169# 1127#
1128# EDAC - error detection and reporting (RAS)
1129#
1130
1131#
1170# File systems 1132# File systems
1171# 1133#
1172CONFIG_EXT2_FS=y 1134CONFIG_EXT2_FS=y
@@ -1200,6 +1162,7 @@ CONFIG_XFS_EXPORT=y
1200CONFIG_XFS_SECURITY=y 1162CONFIG_XFS_SECURITY=y
1201CONFIG_XFS_POSIX_ACL=y 1163CONFIG_XFS_POSIX_ACL=y
1202# CONFIG_XFS_RT is not set 1164# CONFIG_XFS_RT is not set
1165# CONFIG_OCFS2_FS is not set
1203# CONFIG_MINIX_FS is not set 1166# CONFIG_MINIX_FS is not set
1204# CONFIG_ROMFS_FS is not set 1167# CONFIG_ROMFS_FS is not set
1205CONFIG_INOTIFY=y 1168CONFIG_INOTIFY=y
@@ -1240,6 +1203,7 @@ CONFIG_HUGETLBFS=y
1240CONFIG_HUGETLB_PAGE=y 1203CONFIG_HUGETLB_PAGE=y
1241CONFIG_RAMFS=y 1204CONFIG_RAMFS=y
1242# CONFIG_RELAYFS_FS is not set 1205# CONFIG_RELAYFS_FS is not set
1206# CONFIG_CONFIGFS_FS is not set
1243 1207
1244# 1208#
1245# Miscellaneous filesystems 1209# Miscellaneous filesystems
@@ -1351,10 +1315,6 @@ CONFIG_CRC32=y
1351CONFIG_LIBCRC32C=m 1315CONFIG_LIBCRC32C=m
1352CONFIG_ZLIB_INFLATE=y 1316CONFIG_ZLIB_INFLATE=y
1353CONFIG_ZLIB_DEFLATE=m 1317CONFIG_ZLIB_DEFLATE=m
1354CONFIG_TEXTSEARCH=y
1355CONFIG_TEXTSEARCH_KMP=m
1356CONFIG_TEXTSEARCH_BM=m
1357CONFIG_TEXTSEARCH_FSM=m
1358 1318
1359# 1319#
1360# Instrumentation Support 1320# Instrumentation Support
@@ -1367,18 +1327,20 @@ CONFIG_OPROFILE=y
1367# Kernel hacking 1327# Kernel hacking
1368# 1328#
1369# CONFIG_PRINTK_TIME is not set 1329# CONFIG_PRINTK_TIME is not set
1370CONFIG_DEBUG_KERNEL=y
1371CONFIG_MAGIC_SYSRQ=y 1330CONFIG_MAGIC_SYSRQ=y
1331CONFIG_DEBUG_KERNEL=y
1372CONFIG_LOG_BUF_SHIFT=17 1332CONFIG_LOG_BUF_SHIFT=17
1373CONFIG_DETECT_SOFTLOCKUP=y 1333CONFIG_DETECT_SOFTLOCKUP=y
1374# CONFIG_SCHEDSTATS is not set 1334# CONFIG_SCHEDSTATS is not set
1375# CONFIG_DEBUG_SLAB is not set 1335# CONFIG_DEBUG_SLAB is not set
1336CONFIG_DEBUG_MUTEXES=y
1376# CONFIG_DEBUG_SPINLOCK is not set 1337# CONFIG_DEBUG_SPINLOCK is not set
1377# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1338# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1378# CONFIG_DEBUG_KOBJECT is not set 1339# CONFIG_DEBUG_KOBJECT is not set
1379# CONFIG_DEBUG_INFO is not set 1340# CONFIG_DEBUG_INFO is not set
1380CONFIG_DEBUG_FS=y 1341CONFIG_DEBUG_FS=y
1381# CONFIG_DEBUG_VM is not set 1342# CONFIG_DEBUG_VM is not set
1343CONFIG_FORCED_INLINING=y
1382# CONFIG_RCU_TORTURE_TEST is not set 1344# CONFIG_RCU_TORTURE_TEST is not set
1383CONFIG_DEBUG_STACKOVERFLOW=y 1345CONFIG_DEBUG_STACKOVERFLOW=y
1384CONFIG_DEBUG_STACK_USAGE=y 1346CONFIG_DEBUG_STACK_USAGE=y
@@ -1387,6 +1349,11 @@ CONFIG_XMON=y
1387CONFIG_XMON_DEFAULT=y 1349CONFIG_XMON_DEFAULT=y
1388CONFIG_IRQSTACKS=y 1350CONFIG_IRQSTACKS=y
1389# CONFIG_BOOTX_TEXT is not set 1351# CONFIG_BOOTX_TEXT is not set
1352# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
1353# CONFIG_PPC_EARLY_DEBUG_G5 is not set
1354# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
1355# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
1356# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
1390 1357
1391# 1358#
1392# Security options 1359# Security options
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index c287980b7e65..80e9fe2632b8 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -12,10 +12,10 @@ endif
12 12
13obj-y := semaphore.o cputable.o ptrace.o syscalls.o \ 13obj-y := semaphore.o cputable.o ptrace.o syscalls.o \
14 irq.o align.o signal_32.o pmc.o vdso.o \ 14 irq.o align.o signal_32.o pmc.o vdso.o \
15 init_task.o process.o 15 init_task.o process.o systbl.o
16obj-y += vdso32/ 16obj-y += vdso32/
17obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ 17obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \
18 signal_64.o ptrace32.o systbl.o \ 18 signal_64.o ptrace32.o \
19 paca.o cpu_setup_power4.o \ 19 paca.o cpu_setup_power4.o \
20 firmware.o sysfs.o idle_64.o 20 firmware.o sysfs.o idle_64.o
21obj-$(CONFIG_PPC64) += vdso64/ 21obj-$(CONFIG_PPC64) += vdso64/
@@ -46,7 +46,7 @@ extra-$(CONFIG_8xx) := head_8xx.o
46extra-y += vmlinux.lds 46extra-y += vmlinux.lds
47 47
48obj-y += time.o prom.o traps.o setup-common.o udbg.o 48obj-y += time.o prom.o traps.o setup-common.o udbg.o
49obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o systbl.o 49obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o
50obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o 50obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o
51obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o 51obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o
52obj-$(CONFIG_MODULES) += ppc_ksyms.o 52obj-$(CONFIG_MODULES) += ppc_ksyms.o
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index 840aad43a98b..c9a660e4c2db 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -92,7 +92,6 @@ int main(void)
92 92
93 DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); 93 DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
94 DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); 94 DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count));
95 DEFINE(TI_SIGFRAME, offsetof(struct thread_info, nvgprs_frame));
96 DEFINE(TI_TASK, offsetof(struct thread_info, task)); 95 DEFINE(TI_TASK, offsetof(struct thread_info, task));
97#ifdef CONFIG_PPC32 96#ifdef CONFIG_PPC32
98 DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); 97 DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain));
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
index 10696456a4c6..e4e81374cb9a 100644
--- a/arch/powerpc/kernel/cputable.c
+++ b/arch/powerpc/kernel/cputable.c
@@ -53,8 +53,10 @@ extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
53 PPC_FEATURE_HAS_MMU) 53 PPC_FEATURE_HAS_MMU)
54#define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64) 54#define COMMON_USER_PPC64 (COMMON_USER | PPC_FEATURE_64)
55#define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4) 55#define COMMON_USER_POWER4 (COMMON_USER_PPC64 | PPC_FEATURE_POWER4)
56#define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5) 56#define COMMON_USER_POWER5 (COMMON_USER_PPC64 | PPC_FEATURE_POWER5 |\
57#define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS) 57 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
58#define COMMON_USER_POWER5_PLUS (COMMON_USER_PPC64 | PPC_FEATURE_POWER5_PLUS|\
59 PPC_FEATURE_SMT | PPC_FEATURE_ICACHE_SNOOP)
58#define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \ 60#define COMMON_USER_BOOKE (PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
59 PPC_FEATURE_BOOKE) 61 PPC_FEATURE_BOOKE)
60 62
@@ -267,7 +269,8 @@ struct cpu_spec cpu_specs[] = {
267 .cpu_name = "Cell Broadband Engine", 269 .cpu_name = "Cell Broadband Engine",
268 .cpu_features = CPU_FTRS_CELL, 270 .cpu_features = CPU_FTRS_CELL,
269 .cpu_user_features = COMMON_USER_PPC64 | 271 .cpu_user_features = COMMON_USER_PPC64 |
270 PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP, 272 PPC_FEATURE_CELL | PPC_FEATURE_HAS_ALTIVEC_COMP |
273 PPC_FEATURE_SMT,
271 .icache_bsize = 128, 274 .icache_bsize = 128,
272 .dcache_bsize = 128, 275 .dcache_bsize = 128,
273 .cpu_setup = __setup_cpu_be, 276 .cpu_setup = __setup_cpu_be,
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
index 8c21d378f5d2..778f22fd85d2 100644
--- a/arch/powerpc/kernel/crash.c
+++ b/arch/powerpc/kernel/crash.c
@@ -134,8 +134,10 @@ static void crash_kexec_prepare_cpus(void)
134 * the crash CPU will send an IPI and wait for other CPUs to 134 * the crash CPU will send an IPI and wait for other CPUs to
135 * respond. If not, proceed the kexec boot even though we failed to 135 * respond. If not, proceed the kexec boot even though we failed to
136 * capture other CPU states. 136 * capture other CPU states.
137 * Delay of at least 10 seconds.
137 */ 138 */
138 msecs = 1000000; 139 printk(KERN_ALERT "Sending IPI to other cpus...\n");
140 msecs = 10000;
139 while ((atomic_read(&waiting_for_crash_ipi) > 0) && (--msecs > 0)) { 141 while ((atomic_read(&waiting_for_crash_ipi) > 0) && (--msecs > 0)) {
140 barrier(); 142 barrier();
141 mdelay(1); 143 mdelay(1);
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index f20a67261ec7..4827ca1ec89b 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -227,7 +227,7 @@ ret_from_syscall:
227 MTMSRD(r10) 227 MTMSRD(r10)
228 lwz r9,TI_FLAGS(r12) 228 lwz r9,TI_FLAGS(r12)
229 li r8,-_LAST_ERRNO 229 li r8,-_LAST_ERRNO
230 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL|_TIF_RESTORE_SIGMASK) 230 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
231 bne- syscall_exit_work 231 bne- syscall_exit_work
232 cmplw 0,r3,r8 232 cmplw 0,r3,r8
233 blt+ syscall_exit_cont 233 blt+ syscall_exit_cont
@@ -287,8 +287,10 @@ syscall_dotrace:
287 287
288syscall_exit_work: 288syscall_exit_work:
289 andi. r0,r9,_TIF_RESTOREALL 289 andi. r0,r9,_TIF_RESTOREALL
290 bne- 2f 290 beq+ 0f
291 cmplw 0,r3,r8 291 REST_NVGPRS(r1)
292 b 2f
2930: cmplw 0,r3,r8
292 blt+ 1f 294 blt+ 1f
293 andi. r0,r9,_TIF_NOERROR 295 andi. r0,r9,_TIF_NOERROR
294 bne- 1f 296 bne- 1f
@@ -302,9 +304,7 @@ syscall_exit_work:
3022: andi. r0,r9,(_TIF_PERSYSCALL_MASK) 3042: andi. r0,r9,(_TIF_PERSYSCALL_MASK)
303 beq 4f 305 beq 4f
304 306
305 /* Clear per-syscall TIF flags if any are set, but _leave_ 307 /* Clear per-syscall TIF flags if any are set. */
306 _TIF_SAVE_NVGPRS set in r9 since we haven't dealt with that
307 yet. */
308 308
309 li r11,_TIF_PERSYSCALL_MASK 309 li r11,_TIF_PERSYSCALL_MASK
310 addi r12,r12,TI_FLAGS 310 addi r12,r12,TI_FLAGS
@@ -318,8 +318,13 @@ syscall_exit_work:
318 subi r12,r12,TI_FLAGS 318 subi r12,r12,TI_FLAGS
319 319
3204: /* Anything which requires enabling interrupts? */ 3204: /* Anything which requires enabling interrupts? */
321 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_SAVE_NVGPRS) 321 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
322 beq 7f 322 beq ret_from_except
323
324 /* Re-enable interrupts */
325 ori r10,r10,MSR_EE
326 SYNC
327 MTMSRD(r10)
323 328
324 /* Save NVGPRS if they're not saved already */ 329 /* Save NVGPRS if they're not saved already */
325 lwz r4,_TRAP(r1) 330 lwz r4,_TRAP(r1)
@@ -328,71 +333,11 @@ syscall_exit_work:
328 SAVE_NVGPRS(r1) 333 SAVE_NVGPRS(r1)
329 li r4,0xc00 334 li r4,0xc00
330 stw r4,_TRAP(r1) 335 stw r4,_TRAP(r1)
331 3365:
332 /* Re-enable interrupts */
3335: ori r10,r10,MSR_EE
334 SYNC
335 MTMSRD(r10)
336
337 andi. r0,r9,_TIF_SAVE_NVGPRS
338 bne save_user_nvgprs
339
340save_user_nvgprs_cont:
341 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
342 beq 7f
343
344 addi r3,r1,STACK_FRAME_OVERHEAD 337 addi r3,r1,STACK_FRAME_OVERHEAD
345 bl do_syscall_trace_leave 338 bl do_syscall_trace_leave
346 REST_NVGPRS(r1) 339 b ret_from_except_full
347
3486: lwz r3,GPR3(r1)
349 LOAD_MSR_KERNEL(r10,MSR_KERNEL) /* doesn't include MSR_EE */
350 SYNC
351 MTMSRD(r10) /* disable interrupts again */
352 rlwinm r12,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */
353 lwz r9,TI_FLAGS(r12)
3547:
355 andi. r0,r9,_TIF_NEED_RESCHED
356 bne 8f
357 lwz r5,_MSR(r1)
358 andi. r5,r5,MSR_PR
359 beq ret_from_except
360 andi. r0,r9,_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK
361 beq ret_from_except
362 b do_user_signal
3638:
364 ori r10,r10,MSR_EE
365 SYNC
366 MTMSRD(r10) /* re-enable interrupts */
367 bl schedule
368 b 6b
369
370save_user_nvgprs:
371 lwz r8,TI_SIGFRAME(r12)
372
373.macro savewords start, end
374 1: stw \start,4*(\start)(r8)
375 .section __ex_table,"a"
376 .align 2
377 .long 1b,save_user_nvgprs_fault
378 .previous
379 .if \end - \start
380 savewords "(\start+1)",\end
381 .endif
382.endm
383 savewords 14,31
384 b save_user_nvgprs_cont
385
386
387save_user_nvgprs_fault:
388 li r3,11 /* SIGSEGV */
389 lwz r4,TI_TASK(r12)
390 bl force_sigsegv
391 340
392 rlwinm r12,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */
393 lwz r9,TI_FLAGS(r12)
394 b save_user_nvgprs_cont
395
396#ifdef SHOW_SYSCALLS 341#ifdef SHOW_SYSCALLS
397do_show_syscall: 342do_show_syscall:
398#ifdef SHOW_SYSCALLS_TASK 343#ifdef SHOW_SYSCALLS_TASK
@@ -490,6 +435,14 @@ ppc_clone:
490 stw r0,_TRAP(r1) /* register set saved */ 435 stw r0,_TRAP(r1) /* register set saved */
491 b sys_clone 436 b sys_clone
492 437
438 .globl ppc_swapcontext
439ppc_swapcontext:
440 SAVE_NVGPRS(r1)
441 lwz r0,_TRAP(r1)
442 rlwinm r0,r0,0,0,30 /* clear LSB to indicate full */
443 stw r0,_TRAP(r1) /* register set saved */
444 b sys_swapcontext
445
493/* 446/*
494 * Top-level page fault handling. 447 * Top-level page fault handling.
495 * This is in assembler because if do_page_fault tells us that 448 * This is in assembler because if do_page_fault tells us that
@@ -683,7 +636,7 @@ user_exc_return: /* r10 contains MSR_KERNEL here */
683 /* Check current_thread_info()->flags */ 636 /* Check current_thread_info()->flags */
684 rlwinm r9,r1,0,0,(31-THREAD_SHIFT) 637 rlwinm r9,r1,0,0,(31-THREAD_SHIFT)
685 lwz r9,TI_FLAGS(r9) 638 lwz r9,TI_FLAGS(r9)
686 andi. r0,r9,(_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL|_TIF_RESTORE_SIGMASK) 639 andi. r0,r9,(_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK|_TIF_NEED_RESCHED)
687 bne do_work 640 bne do_work
688 641
689restore_user: 642restore_user:
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 388f861b8ed1..24be0cf86d7f 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -160,7 +160,7 @@ syscall_exit:
160 mtmsrd r10,1 160 mtmsrd r10,1
161 ld r9,TI_FLAGS(r12) 161 ld r9,TI_FLAGS(r12)
162 li r11,-_LAST_ERRNO 162 li r11,-_LAST_ERRNO
163 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL|_TIF_SAVE_NVGPRS|_TIF_NOERROR|_TIF_RESTORE_SIGMASK) 163 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
164 bne- syscall_exit_work 164 bne- syscall_exit_work
165 cmpld r3,r11 165 cmpld r3,r11
166 ld r5,_CCR(r1) 166 ld r5,_CCR(r1)
@@ -216,8 +216,10 @@ syscall_exit_work:
216 If TIF_NOERROR is set, just save r3 as it is. */ 216 If TIF_NOERROR is set, just save r3 as it is. */
217 217
218 andi. r0,r9,_TIF_RESTOREALL 218 andi. r0,r9,_TIF_RESTOREALL
219 bne- 2f 219 beq+ 0f
220 cmpld r3,r11 /* r10 is -LAST_ERRNO */ 220 REST_NVGPRS(r1)
221 b 2f
2220: cmpld r3,r11 /* r10 is -LAST_ERRNO */
221 blt+ 1f 223 blt+ 1f
222 andi. r0,r9,_TIF_NOERROR 224 andi. r0,r9,_TIF_NOERROR
223 bne- 1f 225 bne- 1f
@@ -229,9 +231,7 @@ syscall_exit_work:
2292: andi. r0,r9,(_TIF_PERSYSCALL_MASK) 2312: andi. r0,r9,(_TIF_PERSYSCALL_MASK)
230 beq 4f 232 beq 4f
231 233
232 /* Clear per-syscall TIF flags if any are set, but _leave_ 234 /* Clear per-syscall TIF flags if any are set. */
233 _TIF_SAVE_NVGPRS set in r9 since we haven't dealt with that
234 yet. */
235 235
236 li r11,_TIF_PERSYSCALL_MASK 236 li r11,_TIF_PERSYSCALL_MASK
237 addi r12,r12,TI_FLAGS 237 addi r12,r12,TI_FLAGS
@@ -240,10 +240,9 @@ syscall_exit_work:
240 stdcx. r10,0,r12 240 stdcx. r10,0,r12
241 bne- 3b 241 bne- 3b
242 subi r12,r12,TI_FLAGS 242 subi r12,r12,TI_FLAGS
243 243
2444: bl .save_nvgprs 2444: /* Anything else left to do? */
245 /* Anything else left to do? */ 245 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
246 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_SAVE_NVGPRS)
247 beq .ret_from_except_lite 246 beq .ret_from_except_lite
248 247
249 /* Re-enable interrupts */ 248 /* Re-enable interrupts */
@@ -251,26 +250,10 @@ syscall_exit_work:
251 ori r10,r10,MSR_EE 250 ori r10,r10,MSR_EE
252 mtmsrd r10,1 251 mtmsrd r10,1
253 252
254 andi. r0,r9,_TIF_SAVE_NVGPRS 253 bl .save_nvgprs
255 bne save_user_nvgprs
256
257 /* If tracing, re-enable interrupts and do it */
258save_user_nvgprs_cont:
259 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
260 beq 5f
261
262 addi r3,r1,STACK_FRAME_OVERHEAD 254 addi r3,r1,STACK_FRAME_OVERHEAD
263 bl .do_syscall_trace_leave 255 bl .do_syscall_trace_leave
264 REST_NVGPRS(r1) 256 b .ret_from_except
265 clrrdi r12,r1,THREAD_SHIFT
266
267 /* Disable interrupts again and handle other work if any */
2685: mfmsr r10
269 rldicl r10,r10,48,1
270 rotldi r10,r10,16
271 mtmsrd r10,1
272
273 b .ret_from_except_lite
274 257
275/* Save non-volatile GPRs, if not already saved. */ 258/* Save non-volatile GPRs, if not already saved. */
276_GLOBAL(save_nvgprs) 259_GLOBAL(save_nvgprs)
@@ -282,51 +265,6 @@ _GLOBAL(save_nvgprs)
282 std r0,_TRAP(r1) 265 std r0,_TRAP(r1)
283 blr 266 blr
284 267
285
286save_user_nvgprs:
287 ld r10,TI_SIGFRAME(r12)
288 andi. r0,r9,_TIF_32BIT
289 beq- save_user_nvgprs_64
290
291 /* 32-bit save to userspace */
292
293.macro savewords start, end
294 1: stw \start,4*(\start)(r10)
295 .section __ex_table,"a"
296 .align 3
297 .llong 1b,save_user_nvgprs_fault
298 .previous
299 .if \end - \start
300 savewords "(\start+1)",\end
301 .endif
302.endm
303 savewords 14,31
304 b save_user_nvgprs_cont
305
306save_user_nvgprs_64:
307 /* 64-bit save to userspace */
308
309.macro savelongs start, end
310 1: std \start,8*(\start)(r10)
311 .section __ex_table,"a"
312 .align 3
313 .llong 1b,save_user_nvgprs_fault
314 .previous
315 .if \end - \start
316 savelongs "(\start+1)",\end
317 .endif
318.endm
319 savelongs 14,31
320 b save_user_nvgprs_cont
321
322save_user_nvgprs_fault:
323 li r3,11 /* SIGSEGV */
324 ld r4,TI_TASK(r12)
325 bl .force_sigsegv
326
327 clrrdi r12,r1,THREAD_SHIFT
328 ld r9,TI_FLAGS(r12)
329 b save_user_nvgprs_cont
330 268
331/* 269/*
332 * The sigsuspend and rt_sigsuspend system calls can call do_signal 270 * The sigsuspend and rt_sigsuspend system calls can call do_signal
@@ -352,6 +290,16 @@ _GLOBAL(ppc_clone)
352 bl .sys_clone 290 bl .sys_clone
353 b syscall_exit 291 b syscall_exit
354 292
293_GLOBAL(ppc32_swapcontext)
294 bl .save_nvgprs
295 bl .compat_sys_swapcontext
296 b syscall_exit
297
298_GLOBAL(ppc64_swapcontext)
299 bl .save_nvgprs
300 bl .sys_swapcontext
301 b syscall_exit
302
355_GLOBAL(ret_from_fork) 303_GLOBAL(ret_from_fork)
356 bl .schedule_tail 304 bl .schedule_tail
357 REST_NVGPRS(r1) 305 REST_NVGPRS(r1)
diff --git a/arch/powerpc/kernel/fpu.S b/arch/powerpc/kernel/fpu.S
index e4362dfa37fb..340730fb8c91 100644
--- a/arch/powerpc/kernel/fpu.S
+++ b/arch/powerpc/kernel/fpu.S
@@ -66,7 +66,7 @@ _GLOBAL(load_up_fpu)
66#else 66#else
67 ld r4,PACACURRENT(r13) 67 ld r4,PACACURRENT(r13)
68 addi r5,r4,THREAD /* Get THREAD */ 68 addi r5,r4,THREAD /* Get THREAD */
69 ld r4,THREAD_FPEXC_MODE(r5) 69 lwz r4,THREAD_FPEXC_MODE(r5)
70 ori r12,r12,MSR_FP 70 ori r12,r12,MSR_FP
71 or r12,r12,r4 71 or r12,r12,r4
72 std r12,_MSR(r1) 72 std r12,_MSR(r1)
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
index 03b25f9359f8..a0579e859b21 100644
--- a/arch/powerpc/kernel/head_32.S
+++ b/arch/powerpc/kernel/head_32.S
@@ -714,6 +714,7 @@ AltiVecUnavailable:
714#ifdef CONFIG_ALTIVEC 714#ifdef CONFIG_ALTIVEC
715 bne load_up_altivec /* if from user, just load it up */ 715 bne load_up_altivec /* if from user, just load it up */
716#endif /* CONFIG_ALTIVEC */ 716#endif /* CONFIG_ALTIVEC */
717 addi r3,r1,STACK_FRAME_OVERHEAD
717 EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) 718 EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception)
718 719
719PerformanceMonitor: 720PerformanceMonitor:
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
index 308268466342..9b65029dd2a3 100644
--- a/arch/powerpc/kernel/head_64.S
+++ b/arch/powerpc/kernel/head_64.S
@@ -139,7 +139,7 @@ _GLOBAL(__secondary_hold)
139 ori r24,r24,MSR_RI 139 ori r24,r24,MSR_RI
140 mtmsrd r24 /* RI on */ 140 mtmsrd r24 /* RI on */
141 141
142 /* Grab our linux cpu number */ 142 /* Grab our physical cpu number */
143 mr r24,r3 143 mr r24,r3
144 144
145 /* Tell the master cpu we're here */ 145 /* Tell the master cpu we're here */
@@ -153,12 +153,7 @@ _GLOBAL(__secondary_hold)
153 cmpdi 0,r4,1 153 cmpdi 0,r4,1
154 bne 100b 154 bne 100b
155 155
156#ifdef CONFIG_HMT 156#if defined(CONFIG_SMP) || defined(CONFIG_KEXEC)
157 SET_REG_IMMEDIATE(r4, .hmt_init)
158 mtctr r4
159 bctr
160#else
161#ifdef CONFIG_SMP
162 LOAD_REG_IMMEDIATE(r4, .pSeries_secondary_smp_init) 157 LOAD_REG_IMMEDIATE(r4, .pSeries_secondary_smp_init)
163 mtctr r4 158 mtctr r4
164 mr r3,r24 159 mr r3,r24
@@ -166,7 +161,6 @@ _GLOBAL(__secondary_hold)
166#else 161#else
167 BUG_OPCODE 162 BUG_OPCODE
168#endif 163#endif
169#endif
170 164
171/* This value is used to mark exception frames on the stack. */ 165/* This value is used to mark exception frames on the stack. */
172 .section ".toc","aw" 166 .section ".toc","aw"
@@ -321,7 +315,6 @@ exception_marker:
321label##_pSeries: \ 315label##_pSeries: \
322 HMT_MEDIUM; \ 316 HMT_MEDIUM; \
323 mtspr SPRN_SPRG1,r13; /* save r13 */ \ 317 mtspr SPRN_SPRG1,r13; /* save r13 */ \
324 RUNLATCH_ON(r13); \
325 EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common) 318 EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common)
326 319
327#define STD_EXCEPTION_ISERIES(n, label, area) \ 320#define STD_EXCEPTION_ISERIES(n, label, area) \
@@ -329,7 +322,6 @@ label##_pSeries: \
329label##_iSeries: \ 322label##_iSeries: \
330 HMT_MEDIUM; \ 323 HMT_MEDIUM; \
331 mtspr SPRN_SPRG1,r13; /* save r13 */ \ 324 mtspr SPRN_SPRG1,r13; /* save r13 */ \
332 RUNLATCH_ON(r13); \
333 EXCEPTION_PROLOG_ISERIES_1(area); \ 325 EXCEPTION_PROLOG_ISERIES_1(area); \
334 EXCEPTION_PROLOG_ISERIES_2; \ 326 EXCEPTION_PROLOG_ISERIES_2; \
335 b label##_common 327 b label##_common
@@ -339,7 +331,6 @@ label##_iSeries: \
339label##_iSeries: \ 331label##_iSeries: \
340 HMT_MEDIUM; \ 332 HMT_MEDIUM; \
341 mtspr SPRN_SPRG1,r13; /* save r13 */ \ 333 mtspr SPRN_SPRG1,r13; /* save r13 */ \
342 RUNLATCH_ON(r13); \
343 EXCEPTION_PROLOG_ISERIES_1(PACA_EXGEN); \ 334 EXCEPTION_PROLOG_ISERIES_1(PACA_EXGEN); \
344 lbz r10,PACAPROCENABLED(r13); \ 335 lbz r10,PACAPROCENABLED(r13); \
345 cmpwi 0,r10,0; \ 336 cmpwi 0,r10,0; \
@@ -392,6 +383,7 @@ label##_common: \
392label##_common: \ 383label##_common: \
393 EXCEPTION_PROLOG_COMMON(trap, PACA_EXGEN); \ 384 EXCEPTION_PROLOG_COMMON(trap, PACA_EXGEN); \
394 DISABLE_INTS; \ 385 DISABLE_INTS; \
386 bl .ppc64_runlatch_on; \
395 addi r3,r1,STACK_FRAME_OVERHEAD; \ 387 addi r3,r1,STACK_FRAME_OVERHEAD; \
396 bl hdlr; \ 388 bl hdlr; \
397 b .ret_from_except_lite 389 b .ret_from_except_lite
@@ -409,7 +401,6 @@ __start_interrupts:
409_machine_check_pSeries: 401_machine_check_pSeries:
410 HMT_MEDIUM 402 HMT_MEDIUM
411 mtspr SPRN_SPRG1,r13 /* save r13 */ 403 mtspr SPRN_SPRG1,r13 /* save r13 */
412 RUNLATCH_ON(r13)
413 EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) 404 EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common)
414 405
415 . = 0x300 406 . = 0x300
@@ -436,7 +427,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
436data_access_slb_pSeries: 427data_access_slb_pSeries:
437 HMT_MEDIUM 428 HMT_MEDIUM
438 mtspr SPRN_SPRG1,r13 429 mtspr SPRN_SPRG1,r13
439 RUNLATCH_ON(r13)
440 mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ 430 mfspr r13,SPRN_SPRG3 /* get paca address into r13 */
441 std r3,PACA_EXSLB+EX_R3(r13) 431 std r3,PACA_EXSLB+EX_R3(r13)
442 mfspr r3,SPRN_DAR 432 mfspr r3,SPRN_DAR
@@ -462,7 +452,6 @@ data_access_slb_pSeries:
462instruction_access_slb_pSeries: 452instruction_access_slb_pSeries:
463 HMT_MEDIUM 453 HMT_MEDIUM
464 mtspr SPRN_SPRG1,r13 454 mtspr SPRN_SPRG1,r13
465 RUNLATCH_ON(r13)
466 mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ 455 mfspr r13,SPRN_SPRG3 /* get paca address into r13 */
467 std r3,PACA_EXSLB+EX_R3(r13) 456 std r3,PACA_EXSLB+EX_R3(r13)
468 mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ 457 mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */
@@ -493,7 +482,6 @@ instruction_access_slb_pSeries:
493 .globl system_call_pSeries 482 .globl system_call_pSeries
494system_call_pSeries: 483system_call_pSeries:
495 HMT_MEDIUM 484 HMT_MEDIUM
496 RUNLATCH_ON(r9)
497 mr r9,r13 485 mr r9,r13
498 mfmsr r10 486 mfmsr r10
499 mfspr r13,SPRN_SPRG3 487 mfspr r13,SPRN_SPRG3
@@ -577,7 +565,6 @@ slb_miss_user_pseries:
577system_reset_fwnmi: 565system_reset_fwnmi:
578 HMT_MEDIUM 566 HMT_MEDIUM
579 mtspr SPRN_SPRG1,r13 /* save r13 */ 567 mtspr SPRN_SPRG1,r13 /* save r13 */
580 RUNLATCH_ON(r13)
581 EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common) 568 EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common)
582 569
583 .globl machine_check_fwnmi 570 .globl machine_check_fwnmi
@@ -585,7 +572,6 @@ system_reset_fwnmi:
585machine_check_fwnmi: 572machine_check_fwnmi:
586 HMT_MEDIUM 573 HMT_MEDIUM
587 mtspr SPRN_SPRG1,r13 /* save r13 */ 574 mtspr SPRN_SPRG1,r13 /* save r13 */
588 RUNLATCH_ON(r13)
589 EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) 575 EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common)
590 576
591#ifdef CONFIG_PPC_ISERIES 577#ifdef CONFIG_PPC_ISERIES
@@ -749,11 +735,12 @@ iSeries_secondary_smp_loop:
749 735
750 .globl decrementer_iSeries_masked 736 .globl decrementer_iSeries_masked
751decrementer_iSeries_masked: 737decrementer_iSeries_masked:
738 /* We may not have a valid TOC pointer in here. */
752 li r11,1 739 li r11,1
753 ld r12,PACALPPACAPTR(r13) 740 ld r12,PACALPPACAPTR(r13)
754 stb r11,LPPACADECRINT(r12) 741 stb r11,LPPACADECRINT(r12)
755 LOAD_REG_ADDRBASE(r12,tb_ticks_per_jiffy) 742 LOAD_REG_IMMEDIATE(r12, tb_ticks_per_jiffy)
756 lwz r12,ADDROFF(tb_ticks_per_jiffy)(r12) 743 lwz r12,0(r12)
757 mtspr SPRN_DEC,r12 744 mtspr SPRN_DEC,r12
758 /* fall through */ 745 /* fall through */
759 746
@@ -895,7 +882,6 @@ unrecov_fer:
895 .align 7 882 .align 7
896 .globl data_access_common 883 .globl data_access_common
897data_access_common: 884data_access_common:
898 RUNLATCH_ON(r10) /* It wont fit in the 0x300 handler */
899 mfspr r10,SPRN_DAR 885 mfspr r10,SPRN_DAR
900 std r10,PACA_EXGEN+EX_DAR(r13) 886 std r10,PACA_EXGEN+EX_DAR(r13)
901 mfspr r10,SPRN_DSISR 887 mfspr r10,SPRN_DSISR
@@ -1043,6 +1029,7 @@ hardware_interrupt_common:
1043 EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN) 1029 EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN)
1044hardware_interrupt_entry: 1030hardware_interrupt_entry:
1045 DISABLE_INTS 1031 DISABLE_INTS
1032 bl .ppc64_runlatch_on
1046 addi r3,r1,STACK_FRAME_OVERHEAD 1033 addi r3,r1,STACK_FRAME_OVERHEAD
1047 bl .do_IRQ 1034 bl .do_IRQ
1048 b .ret_from_except_lite 1035 b .ret_from_except_lite
@@ -1550,6 +1537,9 @@ _STATIC(__boot_from_prom)
1550 mr r28,r6 1537 mr r28,r6
1551 mr r27,r7 1538 mr r27,r7
1552 1539
1540 /* Align the stack to 16-byte boundary for broken yaboot */
1541 rldicr r1,r1,0,59
1542
1553 /* Make sure we are running in 64 bits mode */ 1543 /* Make sure we are running in 64 bits mode */
1554 bl .enable_64b_mode 1544 bl .enable_64b_mode
1555 1545
@@ -1817,22 +1807,6 @@ _STATIC(start_here_multiplatform)
1817 ori r6,r6,MSR_RI 1807 ori r6,r6,MSR_RI
1818 mtmsrd r6 /* RI on */ 1808 mtmsrd r6 /* RI on */
1819 1809
1820#ifdef CONFIG_HMT
1821 /* Start up the second thread on cpu 0 */
1822 mfspr r3,SPRN_PVR
1823 srwi r3,r3,16
1824 cmpwi r3,0x34 /* Pulsar */
1825 beq 90f
1826 cmpwi r3,0x36 /* Icestar */
1827 beq 90f
1828 cmpwi r3,0x37 /* SStar */
1829 beq 90f
1830 b 91f /* HMT not supported */
183190: li r3,0
1832 bl .hmt_start_secondary
183391:
1834#endif
1835
1836 /* The following gets the stack and TOC set up with the regs */ 1810 /* The following gets the stack and TOC set up with the regs */
1837 /* pointing to the real addr of the kernel stack. This is */ 1811 /* pointing to the real addr of the kernel stack. This is */
1838 /* all done to support the C function call below which sets */ 1812 /* all done to support the C function call below which sets */
@@ -1946,77 +1920,8 @@ _STATIC(start_here_common)
1946 1920
1947 bl .start_kernel 1921 bl .start_kernel
1948 1922
1949_GLOBAL(hmt_init) 1923 /* Not reached */
1950#ifdef CONFIG_HMT 1924 BUG_OPCODE
1951 LOAD_REG_IMMEDIATE(r5, hmt_thread_data)
1952 mfspr r7,SPRN_PVR
1953 srwi r7,r7,16
1954 cmpwi r7,0x34 /* Pulsar */
1955 beq 90f
1956 cmpwi r7,0x36 /* Icestar */
1957 beq 91f
1958 cmpwi r7,0x37 /* SStar */
1959 beq 91f
1960 b 101f
196190: mfspr r6,SPRN_PIR
1962 andi. r6,r6,0x1f
1963 b 92f
196491: mfspr r6,SPRN_PIR
1965 andi. r6,r6,0x3ff
196692: sldi r4,r24,3
1967 stwx r6,r5,r4
1968 bl .hmt_start_secondary
1969 b 101f
1970
1971__hmt_secondary_hold:
1972 LOAD_REG_IMMEDIATE(r5, hmt_thread_data)
1973 clrldi r5,r5,4
1974 li r7,0
1975 mfspr r6,SPRN_PIR
1976 mfspr r8,SPRN_PVR
1977 srwi r8,r8,16
1978 cmpwi r8,0x34
1979 bne 93f
1980 andi. r6,r6,0x1f
1981 b 103f
198293: andi. r6,r6,0x3f
1983
1984103: lwzx r8,r5,r7
1985 cmpw r8,r6
1986 beq 104f
1987 addi r7,r7,8
1988 b 103b
1989
1990104: addi r7,r7,4
1991 lwzx r9,r5,r7
1992 mr r24,r9
1993101:
1994#endif
1995 mr r3,r24
1996 b .pSeries_secondary_smp_init
1997
1998#ifdef CONFIG_HMT
1999_GLOBAL(hmt_start_secondary)
2000 LOAD_REG_IMMEDIATE(r4,__hmt_secondary_hold)
2001 clrldi r4,r4,4
2002 mtspr SPRN_NIADORM, r4
2003 mfspr r4, SPRN_MSRDORM
2004 li r5, -65
2005 and r4, r4, r5
2006 mtspr SPRN_MSRDORM, r4
2007 lis r4,0xffef
2008 ori r4,r4,0x7403
2009 mtspr SPRN_TSC, r4
2010 li r4,0x1f4
2011 mtspr SPRN_TST, r4
2012 mfspr r4, SPRN_HID0
2013 ori r4, r4, 0x1
2014 mtspr SPRN_HID0, r4
2015 mfspr r4, SPRN_CTRLF
2016 oris r4, r4, 0x40
2017 mtspr SPRN_CTRLT, r4
2018 blr
2019#endif
2020 1925
2021/* 1926/*
2022 * We put a few things here that have to be page-aligned. 1927 * We put a few things here that have to be page-aligned.
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index 4d9b4388918b..946f3219fd29 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -334,9 +334,6 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
334 334
335 spin_unlock_irqrestore(&(tbl->it_lock), flags); 335 spin_unlock_irqrestore(&(tbl->it_lock), flags);
336 336
337 /* Make sure updates are seen by hardware */
338 mb();
339
340 DBG("mapped %d elements:\n", outcount); 337 DBG("mapped %d elements:\n", outcount);
341 338
342 /* For the sake of iommu_unmap_sg, we clear out the length in the 339 /* For the sake of iommu_unmap_sg, we clear out the length in the
@@ -347,6 +344,10 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
347 outs->dma_address = DMA_ERROR_CODE; 344 outs->dma_address = DMA_ERROR_CODE;
348 outs->dma_length = 0; 345 outs->dma_length = 0;
349 } 346 }
347
348 /* Make sure updates are seen by hardware */
349 mb();
350
350 return outcount; 351 return outcount;
351 352
352 failure: 353 failure:
@@ -358,6 +359,8 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
358 npages = (PAGE_ALIGN(s->dma_address + s->dma_length) - vaddr) 359 npages = (PAGE_ALIGN(s->dma_address + s->dma_length) - vaddr)
359 >> PAGE_SHIFT; 360 >> PAGE_SHIFT;
360 __iommu_free(tbl, vaddr, npages); 361 __iommu_free(tbl, vaddr, npages);
362 s->dma_address = DMA_ERROR_CODE;
363 s->dma_length = 0;
361 } 364 }
362 } 365 }
363 spin_unlock_irqrestore(&(tbl->it_lock), flags); 366 spin_unlock_irqrestore(&(tbl->it_lock), flags);
diff --git a/arch/powerpc/kernel/legacy_serial.c b/arch/powerpc/kernel/legacy_serial.c
index f970ace208d3..c7a799a09516 100644
--- a/arch/powerpc/kernel/legacy_serial.c
+++ b/arch/powerpc/kernel/legacy_serial.c
@@ -134,7 +134,6 @@ static int __init add_legacy_soc_port(struct device_node *np,
134 return add_legacy_port(np, -1, UPIO_MEM, addr, addr, NO_IRQ, flags); 134 return add_legacy_port(np, -1, UPIO_MEM, addr, addr, NO_IRQ, flags);
135} 135}
136 136
137#ifdef CONFIG_ISA
138static int __init add_legacy_isa_port(struct device_node *np, 137static int __init add_legacy_isa_port(struct device_node *np,
139 struct device_node *isa_brg) 138 struct device_node *isa_brg)
140{ 139{
@@ -168,7 +167,6 @@ static int __init add_legacy_isa_port(struct device_node *np,
168 return add_legacy_port(np, index, UPIO_PORT, reg[1], taddr, NO_IRQ, UPF_BOOT_AUTOCONF); 167 return add_legacy_port(np, index, UPIO_PORT, reg[1], taddr, NO_IRQ, UPF_BOOT_AUTOCONF);
169 168
170} 169}
171#endif
172 170
173#ifdef CONFIG_PCI 171#ifdef CONFIG_PCI
174static int __init add_legacy_pci_port(struct device_node *np, 172static int __init add_legacy_pci_port(struct device_node *np,
@@ -276,7 +274,6 @@ void __init find_legacy_serial_ports(void)
276 of_node_put(soc); 274 of_node_put(soc);
277 } 275 }
278 276
279#ifdef CONFIG_ISA
280 /* First fill our array with ISA ports */ 277 /* First fill our array with ISA ports */
281 for (np = NULL; (np = of_find_node_by_type(np, "serial"));) { 278 for (np = NULL; (np = of_find_node_by_type(np, "serial"));) {
282 struct device_node *isa = of_get_parent(np); 279 struct device_node *isa = of_get_parent(np);
@@ -287,7 +284,6 @@ void __init find_legacy_serial_ports(void)
287 } 284 }
288 of_node_put(isa); 285 of_node_put(isa);
289 } 286 }
290#endif
291 287
292#ifdef CONFIG_PCI 288#ifdef CONFIG_PCI
293 /* Next, try to locate PCI ports */ 289 /* Next, try to locate PCI ports */
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
index 1ae96a8ed7e2..e789fef4eb8a 100644
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -341,7 +341,7 @@ static int lparcfg_data(struct seq_file *m, void *v)
341 const char *system_id = ""; 341 const char *system_id = "";
342 unsigned int *lp_index_ptr, lp_index = 0; 342 unsigned int *lp_index_ptr, lp_index = 0;
343 struct device_node *rtas_node; 343 struct device_node *rtas_node;
344 int *lrdrp; 344 int *lrdrp = NULL;
345 345
346 rootdn = find_path_device("/"); 346 rootdn = find_path_device("/");
347 if (rootdn) { 347 if (rootdn) {
@@ -362,7 +362,9 @@ static int lparcfg_data(struct seq_file *m, void *v)
362 seq_printf(m, "partition_id=%d\n", (int)lp_index); 362 seq_printf(m, "partition_id=%d\n", (int)lp_index);
363 363
364 rtas_node = find_path_device("/rtas"); 364 rtas_node = find_path_device("/rtas");
365 lrdrp = (int *)get_property(rtas_node, "ibm,lrdr-capacity", NULL); 365 if (rtas_node)
366 lrdrp = (int *)get_property(rtas_node, "ibm,lrdr-capacity",
367 NULL);
366 368
367 if (lrdrp == NULL) { 369 if (lrdrp == NULL) {
368 partition_potential_processors = vdso_data->processorCount; 370 partition_potential_processors = vdso_data->processorCount;
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c
index d6431440c54f..ee166c586642 100644
--- a/arch/powerpc/kernel/machine_kexec_64.c
+++ b/arch/powerpc/kernel/machine_kexec_64.c
@@ -26,8 +26,6 @@
26#include <asm/prom.h> 26#include <asm/prom.h>
27#include <asm/smp.h> 27#include <asm/smp.h>
28 28
29#define HASH_GROUP_SIZE 0x80 /* size of each hash group, asm/mmu.h */
30
31int default_machine_kexec_prepare(struct kimage *image) 29int default_machine_kexec_prepare(struct kimage *image)
32{ 30{
33 int i; 31 int i;
@@ -61,7 +59,7 @@ int default_machine_kexec_prepare(struct kimage *image)
61 */ 59 */
62 if (htab_address) { 60 if (htab_address) {
63 low = __pa(htab_address); 61 low = __pa(htab_address);
64 high = low + (htab_hash_mask + 1) * HASH_GROUP_SIZE; 62 high = low + htab_size_bytes;
65 63
66 for (i = 0; i < image->nr_segments; i++) { 64 for (i = 0; i < image->nr_segments; i++) {
67 begin = image->segment[i].mem; 65 begin = image->segment[i].mem;
@@ -294,7 +292,7 @@ void default_machine_kexec(struct kimage *image)
294} 292}
295 293
296/* Values we need to export to the second kernel via the device tree. */ 294/* Values we need to export to the second kernel via the device tree. */
297static unsigned long htab_base, htab_size, kernel_end; 295static unsigned long htab_base, kernel_end;
298 296
299static struct property htab_base_prop = { 297static struct property htab_base_prop = {
300 .name = "linux,htab-base", 298 .name = "linux,htab-base",
@@ -305,7 +303,7 @@ static struct property htab_base_prop = {
305static struct property htab_size_prop = { 303static struct property htab_size_prop = {
306 .name = "linux,htab-size", 304 .name = "linux,htab-size",
307 .length = sizeof(unsigned long), 305 .length = sizeof(unsigned long),
308 .value = (unsigned char *)&htab_size, 306 .value = (unsigned char *)&htab_size_bytes,
309}; 307};
310 308
311static struct property kernel_end_prop = { 309static struct property kernel_end_prop = {
@@ -331,8 +329,6 @@ static void __init export_htab_values(void)
331 329
332 htab_base = __pa(htab_address); 330 htab_base = __pa(htab_address);
333 prom_add_property(node, &htab_base_prop); 331 prom_add_property(node, &htab_base_prop);
334
335 htab_size = 1UL << ppc64_pft_size;
336 prom_add_property(node, &htab_size_prop); 332 prom_add_property(node, &htab_size_prop);
337 333
338 out: 334 out:
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c
index c367520bc1c3..ba92bab7cc2c 100644
--- a/arch/powerpc/kernel/pci_64.c
+++ b/arch/powerpc/kernel/pci_64.c
@@ -589,7 +589,6 @@ void __devinit scan_phb(struct pci_controller *hose)
589#endif /* CONFIG_PPC_MULTIPLATFORM */ 589#endif /* CONFIG_PPC_MULTIPLATFORM */
590 if (mode == PCI_PROBE_NORMAL) 590 if (mode == PCI_PROBE_NORMAL)
591 hose->last_busno = bus->subordinate = pci_scan_child_bus(bus); 591 hose->last_busno = bus->subordinate = pci_scan_child_bus(bus);
592 pci_bus_add_devices(bus);
593} 592}
594 593
595static int __init pcibios_init(void) 594static int __init pcibios_init(void)
@@ -608,8 +607,10 @@ static int __init pcibios_init(void)
608 printk("PCI: Probing PCI hardware\n"); 607 printk("PCI: Probing PCI hardware\n");
609 608
610 /* Scan all of the recorded PCI controllers. */ 609 /* Scan all of the recorded PCI controllers. */
611 list_for_each_entry_safe(hose, tmp, &hose_list, list_node) 610 list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
612 scan_phb(hose); 611 scan_phb(hose);
612 pci_bus_add_devices(hose->bus);
613 }
613 614
614#ifndef CONFIG_PPC_ISERIES 615#ifndef CONFIG_PPC_ISERIES
615 if (pci_probe_only) 616 if (pci_probe_only)
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c
index d9a459c144d8..63ecbec05202 100644
--- a/arch/powerpc/kernel/ppc_ksyms.c
+++ b/arch/powerpc/kernel/ppc_ksyms.c
@@ -79,15 +79,8 @@ EXPORT_SYMBOL(sys_sigreturn);
79EXPORT_SYMBOL(strcpy); 79EXPORT_SYMBOL(strcpy);
80EXPORT_SYMBOL(strncpy); 80EXPORT_SYMBOL(strncpy);
81EXPORT_SYMBOL(strcat); 81EXPORT_SYMBOL(strcat);
82EXPORT_SYMBOL(strncat);
83EXPORT_SYMBOL(strchr);
84EXPORT_SYMBOL(strrchr);
85EXPORT_SYMBOL(strpbrk);
86EXPORT_SYMBOL(strstr);
87EXPORT_SYMBOL(strlen); 82EXPORT_SYMBOL(strlen);
88EXPORT_SYMBOL(strnlen);
89EXPORT_SYMBOL(strcmp); 83EXPORT_SYMBOL(strcmp);
90EXPORT_SYMBOL(strncmp);
91EXPORT_SYMBOL(strcasecmp); 84EXPORT_SYMBOL(strcasecmp);
92 85
93EXPORT_SYMBOL(csum_partial); 86EXPORT_SYMBOL(csum_partial);
@@ -117,15 +110,6 @@ EXPORT_SYMBOL(_insw_ns);
117EXPORT_SYMBOL(_outsw_ns); 110EXPORT_SYMBOL(_outsw_ns);
118EXPORT_SYMBOL(_insl_ns); 111EXPORT_SYMBOL(_insl_ns);
119EXPORT_SYMBOL(_outsl_ns); 112EXPORT_SYMBOL(_outsl_ns);
120EXPORT_SYMBOL(ioremap);
121#ifdef CONFIG_44x
122EXPORT_SYMBOL(ioremap64);
123#endif
124EXPORT_SYMBOL(__ioremap);
125EXPORT_SYMBOL(iounmap);
126#ifdef CONFIG_PPC32
127EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */
128#endif
129 113
130#if defined(CONFIG_PPC32) && (defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)) 114#if defined(CONFIG_PPC32) && (defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE))
131EXPORT_SYMBOL(ppc_ide_md); 115EXPORT_SYMBOL(ppc_ide_md);
@@ -168,7 +152,6 @@ EXPORT_SYMBOL(__flush_icache_range);
168EXPORT_SYMBOL(flush_dcache_range); 152EXPORT_SYMBOL(flush_dcache_range);
169 153
170#ifdef CONFIG_SMP 154#ifdef CONFIG_SMP
171EXPORT_SYMBOL(smp_call_function);
172#ifdef CONFIG_PPC32 155#ifdef CONFIG_PPC32
173EXPORT_SYMBOL(smp_hw_index); 156EXPORT_SYMBOL(smp_hw_index);
174#endif 157#endif
@@ -185,9 +168,6 @@ EXPORT_SYMBOL(adb_try_handler_change);
185EXPORT_SYMBOL(cuda_request); 168EXPORT_SYMBOL(cuda_request);
186EXPORT_SYMBOL(cuda_poll); 169EXPORT_SYMBOL(cuda_poll);
187#endif /* CONFIG_ADB_CUDA */ 170#endif /* CONFIG_ADB_CUDA */
188#ifdef CONFIG_PPC_PMAC
189EXPORT_SYMBOL(sys_ctrler);
190#endif
191#ifdef CONFIG_VT 171#ifdef CONFIG_VT
192EXPORT_SYMBOL(kd_mksound); 172EXPORT_SYMBOL(kd_mksound);
193#endif 173#endif
@@ -205,7 +185,6 @@ EXPORT_SYMBOL(__lshrdi3);
205EXPORT_SYMBOL(memcpy); 185EXPORT_SYMBOL(memcpy);
206EXPORT_SYMBOL(memset); 186EXPORT_SYMBOL(memset);
207EXPORT_SYMBOL(memmove); 187EXPORT_SYMBOL(memmove);
208EXPORT_SYMBOL(memscan);
209EXPORT_SYMBOL(memcmp); 188EXPORT_SYMBOL(memcmp);
210EXPORT_SYMBOL(memchr); 189EXPORT_SYMBOL(memchr);
211 190
@@ -214,7 +193,6 @@ EXPORT_SYMBOL(screen_info);
214#endif 193#endif
215 194
216#ifdef CONFIG_PPC32 195#ifdef CONFIG_PPC32
217EXPORT_SYMBOL(__delay);
218EXPORT_SYMBOL(timer_interrupt); 196EXPORT_SYMBOL(timer_interrupt);
219EXPORT_SYMBOL(irq_desc); 197EXPORT_SYMBOL(irq_desc);
220EXPORT_SYMBOL(tb_ticks_per_jiffy); 198EXPORT_SYMBOL(tb_ticks_per_jiffy);
@@ -222,10 +200,6 @@ EXPORT_SYMBOL(console_drivers);
222EXPORT_SYMBOL(cacheable_memcpy); 200EXPORT_SYMBOL(cacheable_memcpy);
223#endif 201#endif
224 202
225EXPORT_SYMBOL(__up);
226EXPORT_SYMBOL(__down);
227EXPORT_SYMBOL(__down_interruptible);
228
229#ifdef CONFIG_8xx 203#ifdef CONFIG_8xx
230EXPORT_SYMBOL(cpm_install_handler); 204EXPORT_SYMBOL(cpm_install_handler);
231EXPORT_SYMBOL(cpm_free_handler); 205EXPORT_SYMBOL(cpm_free_handler);
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 57703994a063..c225cf154bfe 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -888,3 +888,35 @@ void dump_stack(void)
888 show_stack(current, NULL); 888 show_stack(current, NULL);
889} 889}
890EXPORT_SYMBOL(dump_stack); 890EXPORT_SYMBOL(dump_stack);
891
892#ifdef CONFIG_PPC64
893void ppc64_runlatch_on(void)
894{
895 unsigned long ctrl;
896
897 if (cpu_has_feature(CPU_FTR_CTRL) && !test_thread_flag(TIF_RUNLATCH)) {
898 HMT_medium();
899
900 ctrl = mfspr(SPRN_CTRLF);
901 ctrl |= CTRL_RUNLATCH;
902 mtspr(SPRN_CTRLT, ctrl);
903
904 set_thread_flag(TIF_RUNLATCH);
905 }
906}
907
908void ppc64_runlatch_off(void)
909{
910 unsigned long ctrl;
911
912 if (cpu_has_feature(CPU_FTR_CTRL) && test_thread_flag(TIF_RUNLATCH)) {
913 HMT_medium();
914
915 clear_thread_flag(TIF_RUNLATCH);
916
917 ctrl = mfspr(SPRN_CTRLF);
918 ctrl &= ~CTRL_RUNLATCH;
919 mtspr(SPRN_CTRLT, ctrl);
920 }
921}
922#endif
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index d50c8df0183e..6dbd21726770 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -491,7 +491,12 @@ void __init finish_device_tree(void)
491 size = 16; 491 size = 16;
492 finish_node(allnodes, &size, 1); 492 finish_node(allnodes, &size, 1);
493 size -= 16; 493 size -= 16;
494 end = start = (unsigned long) __va(lmb_alloc(size, 128)); 494
495 if (0 == size)
496 end = start = 0;
497 else
498 end = start = (unsigned long)__va(lmb_alloc(size, 128));
499
495 finish_node(allnodes, &end, 0); 500 finish_node(allnodes, &end, 0);
496 BUG_ON(end != start + size); 501 BUG_ON(end != start + size);
497 502
@@ -811,8 +816,6 @@ void __init unflatten_device_tree(void)
811{ 816{
812 unsigned long start, mem, size; 817 unsigned long start, mem, size;
813 struct device_node **allnextp = &allnodes; 818 struct device_node **allnextp = &allnodes;
814 char *p = NULL;
815 int l = 0;
816 819
817 DBG(" -> unflatten_device_tree()\n"); 820 DBG(" -> unflatten_device_tree()\n");
818 821
@@ -852,19 +855,6 @@ void __init unflatten_device_tree(void)
852 if (of_chosen == NULL) 855 if (of_chosen == NULL)
853 of_chosen = of_find_node_by_path("/chosen@0"); 856 of_chosen = of_find_node_by_path("/chosen@0");
854 857
855 /* Retreive command line */
856 if (of_chosen != NULL) {
857 p = (char *)get_property(of_chosen, "bootargs", &l);
858 if (p != NULL && l > 0)
859 strlcpy(cmd_line, p, min(l, COMMAND_LINE_SIZE));
860 }
861#ifdef CONFIG_CMDLINE
862 if (l == 0 || (l == 1 && (*p) == 0))
863 strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
864#endif /* CONFIG_CMDLINE */
865
866 DBG("Command line is: %s\n", cmd_line);
867
868 DBG(" <- unflatten_device_tree()\n"); 858 DBG(" <- unflatten_device_tree()\n");
869} 859}
870 860
@@ -935,6 +925,8 @@ static int __init early_init_dt_scan_chosen(unsigned long node,
935{ 925{
936 u32 *prop; 926 u32 *prop;
937 unsigned long *lprop; 927 unsigned long *lprop;
928 unsigned long l;
929 char *p;
938 930
939 DBG("search \"chosen\", depth: %d, uname: %s\n", depth, uname); 931 DBG("search \"chosen\", depth: %d, uname: %s\n", depth, uname);
940 932
@@ -999,6 +991,41 @@ static int __init early_init_dt_scan_chosen(unsigned long node,
999 crashk_res.end = crashk_res.start + *lprop - 1; 991 crashk_res.end = crashk_res.start + *lprop - 1;
1000#endif 992#endif
1001 993
994 /* Retreive command line */
995 p = of_get_flat_dt_prop(node, "bootargs", &l);
996 if (p != NULL && l > 0)
997 strlcpy(cmd_line, p, min((int)l, COMMAND_LINE_SIZE));
998
999#ifdef CONFIG_CMDLINE
1000 if (l == 0 || (l == 1 && (*p) == 0))
1001 strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
1002#endif /* CONFIG_CMDLINE */
1003
1004 DBG("Command line is: %s\n", cmd_line);
1005
1006 if (strstr(cmd_line, "mem=")) {
1007 char *p, *q;
1008 unsigned long maxmem = 0;
1009
1010 for (q = cmd_line; (p = strstr(q, "mem=")) != 0; ) {
1011 q = p + 4;
1012 if (p > cmd_line && p[-1] != ' ')
1013 continue;
1014 maxmem = simple_strtoul(q, &q, 0);
1015 if (*q == 'k' || *q == 'K') {
1016 maxmem <<= 10;
1017 ++q;
1018 } else if (*q == 'm' || *q == 'M') {
1019 maxmem <<= 20;
1020 ++q;
1021 } else if (*q == 'g' || *q == 'G') {
1022 maxmem <<= 30;
1023 ++q;
1024 }
1025 }
1026 memory_limit = maxmem;
1027 }
1028
1002 /* break now */ 1029 /* break now */
1003 return 1; 1030 return 1;
1004} 1031}
@@ -1119,7 +1146,7 @@ static void __init early_reserve_mem(void)
1119 size_32 = *(reserve_map_32++); 1146 size_32 = *(reserve_map_32++);
1120 if (size_32 == 0) 1147 if (size_32 == 0)
1121 break; 1148 break;
1122 DBG("reserving: %lx -> %lx\n", base_32, size_32); 1149 DBG("reserving: %x -> %x\n", base_32, size_32);
1123 lmb_reserve(base_32, size_32); 1150 lmb_reserve(base_32, size_32);
1124 } 1151 }
1125 return; 1152 return;
@@ -1398,8 +1425,8 @@ struct device_node *of_find_node_by_name(struct device_node *from,
1398 1425
1399 read_lock(&devtree_lock); 1426 read_lock(&devtree_lock);
1400 np = from ? from->allnext : allnodes; 1427 np = from ? from->allnext : allnodes;
1401 for (; np != 0; np = np->allnext) 1428 for (; np != NULL; np = np->allnext)
1402 if (np->name != 0 && strcasecmp(np->name, name) == 0 1429 if (np->name != NULL && strcasecmp(np->name, name) == 0
1403 && of_node_get(np)) 1430 && of_node_get(np))
1404 break; 1431 break;
1405 if (from) 1432 if (from)
@@ -1917,3 +1944,30 @@ int prom_update_property(struct device_node *np,
1917 1944
1918 return 0; 1945 return 0;
1919} 1946}
1947
1948#ifdef CONFIG_KEXEC
1949/* We may have allocated the flat device tree inside the crash kernel region
1950 * in prom_init. If so we need to move it out into regular memory. */
1951void kdump_move_device_tree(void)
1952{
1953 unsigned long start, end;
1954 struct boot_param_header *new;
1955
1956 start = __pa((unsigned long)initial_boot_params);
1957 end = start + initial_boot_params->totalsize;
1958
1959 if (end < crashk_res.start || start > crashk_res.end)
1960 return;
1961
1962 new = (struct boot_param_header*)
1963 __va(lmb_alloc(initial_boot_params->totalsize, PAGE_SIZE));
1964
1965 memcpy(new, initial_boot_params, initial_boot_params->totalsize);
1966
1967 initial_boot_params = new;
1968
1969 DBG("Flat device tree blob moved to %p\n", initial_boot_params);
1970
1971 /* XXX should we unreserve the old DT? */
1972}
1973#endif /* CONFIG_KEXEC */
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 7881ec96ef11..813c2cd194c2 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -205,14 +205,6 @@ static cell_t __initdata regbuf[1024];
205 205
206#define MAX_CPU_THREADS 2 206#define MAX_CPU_THREADS 2
207 207
208/* TO GO */
209#ifdef CONFIG_HMT
210struct {
211 unsigned int pir;
212 unsigned int threadid;
213} hmt_thread_data[NR_CPUS];
214#endif /* CONFIG_HMT */
215
216/* 208/*
217 * Error results ... some OF calls will return "-1" on error, some 209 * Error results ... some OF calls will return "-1" on error, some
218 * will return 0, some will return either. To simplify, here are 210 * will return 0, some will return either. To simplify, here are
@@ -986,7 +978,7 @@ static void __init prom_init_mem(void)
986 if (size == 0) 978 if (size == 0)
987 continue; 979 continue;
988 prom_debug(" %x %x\n", base, size); 980 prom_debug(" %x %x\n", base, size);
989 if (base == 0) 981 if (base == 0 && (RELOC(of_platform) & PLATFORM_LPAR))
990 RELOC(rmo_top) = size; 982 RELOC(rmo_top) = size;
991 if ((base + size) > RELOC(ram_top)) 983 if ((base + size) > RELOC(ram_top))
992 RELOC(ram_top) = base + size; 984 RELOC(ram_top) = base + size;
@@ -1319,10 +1311,6 @@ static void __init prom_hold_cpus(void)
1319 */ 1311 */
1320 *spinloop = 0; 1312 *spinloop = 0;
1321 1313
1322#ifdef CONFIG_HMT
1323 for (i = 0; i < NR_CPUS; i++)
1324 RELOC(hmt_thread_data)[i].pir = 0xdeadbeef;
1325#endif
1326 /* look for cpus */ 1314 /* look for cpus */
1327 for (node = 0; prom_next_node(&node); ) { 1315 for (node = 0; prom_next_node(&node); ) {
1328 type[0] = 0; 1316 type[0] = 0;
@@ -1389,32 +1377,6 @@ static void __init prom_hold_cpus(void)
1389 /* Reserve cpu #s for secondary threads. They start later. */ 1377 /* Reserve cpu #s for secondary threads. They start later. */
1390 cpuid += cpu_threads; 1378 cpuid += cpu_threads;
1391 } 1379 }
1392#ifdef CONFIG_HMT
1393 /* Only enable HMT on processors that provide support. */
1394 if (__is_processor(PV_PULSAR) ||
1395 __is_processor(PV_ICESTAR) ||
1396 __is_processor(PV_SSTAR)) {
1397 prom_printf(" starting secondary threads\n");
1398
1399 for (i = 0; i < NR_CPUS; i += 2) {
1400 if (!cpu_online(i))
1401 continue;
1402
1403 if (i == 0) {
1404 unsigned long pir = mfspr(SPRN_PIR);
1405 if (__is_processor(PV_PULSAR)) {
1406 RELOC(hmt_thread_data)[i].pir =
1407 pir & 0x1f;
1408 } else {
1409 RELOC(hmt_thread_data)[i].pir =
1410 pir & 0x3ff;
1411 }
1412 }
1413 }
1414 } else {
1415 prom_printf("Processor is not HMT capable\n");
1416 }
1417#endif
1418 1380
1419 if (cpuid > NR_CPUS) 1381 if (cpuid > NR_CPUS)
1420 prom_printf("WARNING: maximum CPUs (" __stringify(NR_CPUS) 1382 prom_printf("WARNING: maximum CPUs (" __stringify(NR_CPUS)
@@ -2098,6 +2060,10 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
2098 */ 2060 */
2099 prom_init_stdout(); 2061 prom_init_stdout();
2100 2062
2063 /* Bail if this is a kdump kernel. */
2064 if (PHYSICAL_START > 0)
2065 prom_panic("Error: You can't boot a kdump kernel from OF!\n");
2066
2101 /* 2067 /*
2102 * Check for an initrd 2068 * Check for an initrd
2103 */ 2069 */
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c
index a8099c806150..3934c227549b 100644
--- a/arch/powerpc/kernel/prom_parse.c
+++ b/arch/powerpc/kernel/prom_parse.c
@@ -465,8 +465,10 @@ u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
465 if (parent == NULL) 465 if (parent == NULL)
466 return NULL; 466 return NULL;
467 bus = of_match_bus(parent); 467 bus = of_match_bus(parent);
468 if (strcmp(bus->name, "pci")) 468 if (strcmp(bus->name, "pci")) {
469 of_node_put(parent);
469 return NULL; 470 return NULL;
471 }
470 bus->count_cells(dev, &na, &ns); 472 bus->count_cells(dev, &na, &ns);
471 of_node_put(parent); 473 of_node_put(parent);
472 if (!OF_CHECK_COUNTS(na, ns)) 474 if (!OF_CHECK_COUNTS(na, ns))
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index 400793c71304..bcb83574335b 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -561,10 +561,7 @@ void do_syscall_trace_leave(struct pt_regs *regs)
561 regs->result); 561 regs->result);
562 562
563 if ((test_thread_flag(TIF_SYSCALL_TRACE) 563 if ((test_thread_flag(TIF_SYSCALL_TRACE)
564#ifdef CONFIG_PPC64 564 || test_thread_flag(TIF_SINGLESTEP))
565 || test_thread_flag(TIF_SINGLESTEP)
566#endif
567 )
568 && (current->ptrace & PT_PTRACED)) 565 && (current->ptrace & PT_PTRACED))
569 do_syscall_trace(); 566 do_syscall_trace();
570} 567}
diff --git a/arch/powerpc/kernel/rtas-rtc.c b/arch/powerpc/kernel/rtas-rtc.c
index 635d3b9a8811..34d073fb6091 100644
--- a/arch/powerpc/kernel/rtas-rtc.c
+++ b/arch/powerpc/kernel/rtas-rtc.c
@@ -52,7 +52,7 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm)
52 error = rtas_call(rtas_token("get-time-of-day"), 0, 8, ret); 52 error = rtas_call(rtas_token("get-time-of-day"), 0, 8, ret);
53 if (error == RTAS_CLOCK_BUSY || rtas_is_extended_busy(error)) { 53 if (error == RTAS_CLOCK_BUSY || rtas_is_extended_busy(error)) {
54 if (in_interrupt() && printk_ratelimit()) { 54 if (in_interrupt() && printk_ratelimit()) {
55 memset(&rtc_tm, 0, sizeof(struct rtc_time)); 55 memset(rtc_tm, 0, sizeof(struct rtc_time));
56 printk(KERN_WARNING "error: reading clock" 56 printk(KERN_WARNING "error: reading clock"
57 " would delay interrupt\n"); 57 " would delay interrupt\n");
58 return; /* delay not allowed */ 58 return; /* delay not allowed */
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index 7fe4a5c944c9..b5b2add7ad1e 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -22,6 +22,7 @@
22 22
23#include <asm/prom.h> 23#include <asm/prom.h>
24#include <asm/rtas.h> 24#include <asm/rtas.h>
25#include <asm/hvcall.h>
25#include <asm/semaphore.h> 26#include <asm/semaphore.h>
26#include <asm/machdep.h> 27#include <asm/machdep.h>
27#include <asm/page.h> 28#include <asm/page.h>
@@ -565,6 +566,7 @@ static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE;
565#ifdef CONFIG_PPC_PSERIES 566#ifdef CONFIG_PPC_PSERIES
566static void rtas_percpu_suspend_me(void *info) 567static void rtas_percpu_suspend_me(void *info)
567{ 568{
569 int i;
568 long rc; 570 long rc;
569 long flags; 571 long flags;
570 struct rtas_suspend_me_data *data = 572 struct rtas_suspend_me_data *data =
@@ -587,18 +589,16 @@ static void rtas_percpu_suspend_me(void *info)
587 589
588 if (rc == H_Continue) { 590 if (rc == H_Continue) {
589 data->waiting = 0; 591 data->waiting = 0;
590 rtas_call(ibm_suspend_me_token, 0, 1, 592 data->args->args[data->args->nargs] =
591 data->args->args); 593 rtas_call(ibm_suspend_me_token, 0, 1, NULL);
594 for_each_cpu(i)
595 plpar_hcall_norets(H_PROD,i);
592 } else { 596 } else {
593 data->waiting = -EBUSY; 597 data->waiting = -EBUSY;
594 printk(KERN_ERR "Error on H_Join hypervisor call\n"); 598 printk(KERN_ERR "Error on H_Join hypervisor call\n");
595 } 599 }
596 600
597out: 601out:
598 /* before we restore interrupts, make sure we don't
599 * generate a spurious soft lockup errors
600 */
601 touch_softlockup_watchdog();
602 local_irq_restore(flags); 602 local_irq_restore(flags);
603 return; 603 return;
604} 604}
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c
index 50500093c97f..aaf384c3f04a 100644
--- a/arch/powerpc/kernel/rtas_flash.c
+++ b/arch/powerpc/kernel/rtas_flash.c
@@ -672,8 +672,7 @@ static void rtas_flash_firmware(int reboot_type)
672static void remove_flash_pde(struct proc_dir_entry *dp) 672static void remove_flash_pde(struct proc_dir_entry *dp)
673{ 673{
674 if (dp) { 674 if (dp) {
675 if (dp->data != NULL) 675 kfree(dp->data);
676 kfree(dp->data);
677 dp->owner = NULL; 676 dp->owner = NULL;
678 remove_proc_entry(dp->name, dp->parent); 677 remove_proc_entry(dp->name, dp->parent);
679 } 678 }
diff --git a/arch/powerpc/kernel/rtas_pci.c b/arch/powerpc/kernel/rtas_pci.c
index 5579f6559912..7442775ef2a1 100644
--- a/arch/powerpc/kernel/rtas_pci.c
+++ b/arch/powerpc/kernel/rtas_pci.c
@@ -280,8 +280,7 @@ static int phb_set_bus_ranges(struct device_node *dev,
280 return 0; 280 return 0;
281} 281}
282 282
283static int __devinit setup_phb(struct device_node *dev, 283int __devinit setup_phb(struct device_node *dev, struct pci_controller *phb)
284 struct pci_controller *phb)
285{ 284{
286 if (is_python(dev)) 285 if (is_python(dev))
287 python_countermeasures(dev); 286 python_countermeasures(dev);
@@ -359,27 +358,6 @@ unsigned long __init find_and_init_phbs(void)
359 return 0; 358 return 0;
360} 359}
361 360
362struct pci_controller * __devinit init_phb_dynamic(struct device_node *dn)
363{
364 struct pci_controller *phb;
365 int primary;
366
367 primary = list_empty(&hose_list);
368 phb = pcibios_alloc_controller(dn);
369 if (!phb)
370 return NULL;
371 setup_phb(dn, phb);
372 pci_process_bridge_OF_ranges(phb, dn, primary);
373
374 pci_setup_phb_io_dynamic(phb, primary);
375
376 pci_devs_phb_init_dynamic(phb);
377 scan_phb(phb);
378
379 return phb;
380}
381EXPORT_SYMBOL(init_phb_dynamic);
382
383/* RPA-specific bits for removing PHBs */ 361/* RPA-specific bits for removing PHBs */
384int pcibios_remove_root_bus(struct pci_controller *phb) 362int pcibios_remove_root_bus(struct pci_controller *phb)
385{ 363{
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index e29b275e09e0..f96c49b03ba0 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -311,8 +311,6 @@ void smp_release_cpus(void)
311 311
312 DBG(" <- smp_release_cpus()\n"); 312 DBG(" <- smp_release_cpus()\n");
313} 313}
314#else
315#define smp_release_cpus()
316#endif /* CONFIG_SMP || CONFIG_KEXEC */ 314#endif /* CONFIG_SMP || CONFIG_KEXEC */
317 315
318/* 316/*
@@ -398,6 +396,9 @@ void __init setup_system(void)
398{ 396{
399 DBG(" -> setup_system()\n"); 397 DBG(" -> setup_system()\n");
400 398
399#ifdef CONFIG_KEXEC
400 kdump_move_device_tree();
401#endif
401 /* 402 /*
402 * Unflatten the device-tree passed by prom_init or kexec 403 * Unflatten the device-tree passed by prom_init or kexec
403 */ 404 */
@@ -470,10 +471,12 @@ void __init setup_system(void)
470 check_smt_enabled(); 471 check_smt_enabled();
471 smp_setup_cpu_maps(); 472 smp_setup_cpu_maps();
472 473
474#ifdef CONFIG_SMP
473 /* Release secondary cpus out of their spinloops at 0x60 now that 475 /* Release secondary cpus out of their spinloops at 0x60 now that
474 * we can map physical -> logical CPU ids 476 * we can map physical -> logical CPU ids
475 */ 477 */
476 smp_release_cpus(); 478 smp_release_cpus();
479#endif
477 480
478 printk("Starting Linux PPC64 %s\n", system_utsname.version); 481 printk("Starting Linux PPC64 %s\n", system_utsname.version);
479 482
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index 3747ab0dac3f..d7a4e814974d 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -142,11 +142,7 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka,
142 return 0; 142 return 0;
143} 143}
144 144
145static inline compat_uptr_t to_user_ptr(void *kp) 145#define to_user_ptr(p) ptr_to_compat(p)
146{
147 return (compat_uptr_t)(u64)kp;
148}
149
150#define from_user_ptr(p) compat_ptr(p) 146#define from_user_ptr(p) compat_ptr(p)
151 147
152static inline int save_general_regs(struct pt_regs *regs, 148static inline int save_general_regs(struct pt_regs *regs,
@@ -155,10 +151,7 @@ static inline int save_general_regs(struct pt_regs *regs,
155 elf_greg_t64 *gregs = (elf_greg_t64 *)regs; 151 elf_greg_t64 *gregs = (elf_greg_t64 *)regs;
156 int i; 152 int i;
157 153
158 if (!FULL_REGS(regs)) { 154 WARN_ON(!FULL_REGS(regs));
159 set_thread_flag(TIF_SAVE_NVGPRS);
160 current_thread_info()->nvgprs_frame = frame->mc_gregs;
161 }
162 155
163 for (i = 0; i <= PT_RESULT; i ++) { 156 for (i = 0; i <= PT_RESULT; i ++) {
164 if (i == 14 && !FULL_REGS(regs)) 157 if (i == 14 && !FULL_REGS(regs))
@@ -213,21 +206,13 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka,
213 return 0; 206 return 0;
214} 207}
215 208
216#define to_user_ptr(p) (p) 209#define to_user_ptr(p) ((unsigned long)(p))
217#define from_user_ptr(p) (p) 210#define from_user_ptr(p) ((void __user *)(p))
218 211
219static inline int save_general_regs(struct pt_regs *regs, 212static inline int save_general_regs(struct pt_regs *regs,
220 struct mcontext __user *frame) 213 struct mcontext __user *frame)
221{ 214{
222 if (!FULL_REGS(regs)) { 215 WARN_ON(!FULL_REGS(regs));
223 /* Zero out the unsaved GPRs to avoid information
224 leak, and set TIF_SAVE_NVGPRS to ensure that the
225 registers do actually get saved later. */
226 memset(&regs->gpr[14], 0, 18 * sizeof(unsigned long));
227 current_thread_info()->nvgprs_frame = &frame->mc_gregs;
228 set_thread_flag(TIF_SAVE_NVGPRS);
229 }
230
231 return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE); 216 return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE);
232} 217}
233 218
@@ -254,11 +239,9 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs);
254 */ 239 */
255long sys_sigsuspend(old_sigset_t mask) 240long sys_sigsuspend(old_sigset_t mask)
256{ 241{
257 sigset_t saveset;
258
259 mask &= _BLOCKABLE; 242 mask &= _BLOCKABLE;
260 spin_lock_irq(&current->sighand->siglock); 243 spin_lock_irq(&current->sighand->siglock);
261 saveset = current->blocked; 244 current->saved_sigmask = current->blocked;
262 siginitset(&current->blocked, mask); 245 siginitset(&current->blocked, mask);
263 recalc_sigpending(); 246 recalc_sigpending();
264 spin_unlock_irq(&current->sighand->siglock); 247 spin_unlock_irq(&current->sighand->siglock);
@@ -528,7 +511,7 @@ long compat_sys_rt_sigaction(int sig, const struct sigaction32 __user *act,
528 511
529 ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); 512 ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
530 if (!ret && oact) { 513 if (!ret && oact) {
531 ret = put_user((long)old_ka.sa.sa_handler, &oact->sa_handler); 514 ret = put_user(to_user_ptr(old_ka.sa.sa_handler), &oact->sa_handler);
532 ret |= put_sigset_t(&oact->sa_mask, &old_ka.sa.sa_mask); 515 ret |= put_sigset_t(&oact->sa_mask, &old_ka.sa.sa_mask);
533 ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags); 516 ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
534 } 517 }
@@ -677,8 +660,8 @@ long compat_sys_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo
677int compat_sys_sigaltstack(u32 __new, u32 __old, int r5, 660int compat_sys_sigaltstack(u32 __new, u32 __old, int r5,
678 int r6, int r7, int r8, struct pt_regs *regs) 661 int r6, int r7, int r8, struct pt_regs *regs)
679{ 662{
680 stack_32_t __user * newstack = (stack_32_t __user *)(long) __new; 663 stack_32_t __user * newstack = compat_ptr(__new);
681 stack_32_t __user * oldstack = (stack_32_t __user *)(long) __old; 664 stack_32_t __user * oldstack = compat_ptr(__old);
682 stack_t uss, uoss; 665 stack_t uss, uoss;
683 int ret; 666 int ret;
684 mm_segment_t old_fs; 667 mm_segment_t old_fs;
@@ -710,7 +693,7 @@ int compat_sys_sigaltstack(u32 __new, u32 __old, int r5,
710 set_fs(old_fs); 693 set_fs(old_fs);
711 /* Copy the stack information to the user output buffer */ 694 /* Copy the stack information to the user output buffer */
712 if (!ret && oldstack && 695 if (!ret && oldstack &&
713 (put_user((long)uoss.ss_sp, &oldstack->ss_sp) || 696 (put_user(ptr_to_compat(uoss.ss_sp), &oldstack->ss_sp) ||
714 __put_user(uoss.ss_flags, &oldstack->ss_flags) || 697 __put_user(uoss.ss_flags, &oldstack->ss_flags) ||
715 __put_user(uoss.ss_size, &oldstack->ss_size))) 698 __put_user(uoss.ss_size, &oldstack->ss_size)))
716 return -EFAULT; 699 return -EFAULT;
@@ -832,8 +815,8 @@ static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int
832} 815}
833 816
834long sys_swapcontext(struct ucontext __user *old_ctx, 817long sys_swapcontext(struct ucontext __user *old_ctx,
835 struct ucontext __user *new_ctx, 818 struct ucontext __user *new_ctx,
836 int ctx_size, int r6, int r7, int r8, struct pt_regs *regs) 819 int ctx_size, int r6, int r7, int r8, struct pt_regs *regs)
837{ 820{
838 unsigned char tmp; 821 unsigned char tmp;
839 822
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
index b3193116e686..4324f8a8ba24 100644
--- a/arch/powerpc/kernel/signal_64.c
+++ b/arch/powerpc/kernel/signal_64.c
@@ -60,8 +60,8 @@ struct rt_sigframe {
60 struct ucontext uc; 60 struct ucontext uc;
61 unsigned long _unused[2]; 61 unsigned long _unused[2];
62 unsigned int tramp[TRAMP_SIZE]; 62 unsigned int tramp[TRAMP_SIZE];
63 struct siginfo *pinfo; 63 struct siginfo __user *pinfo;
64 void *puc; 64 void __user *puc;
65 struct siginfo info; 65 struct siginfo info;
66 /* 64 bit ABI allows for 288 bytes below sp before decrementing it. */ 66 /* 64 bit ABI allows for 288 bytes below sp before decrementing it. */
67 char abigap[288]; 67 char abigap[288];
@@ -118,14 +118,7 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
118 err |= __put_user(0, &sc->v_regs); 118 err |= __put_user(0, &sc->v_regs);
119#endif /* CONFIG_ALTIVEC */ 119#endif /* CONFIG_ALTIVEC */
120 err |= __put_user(&sc->gp_regs, &sc->regs); 120 err |= __put_user(&sc->gp_regs, &sc->regs);
121 if (!FULL_REGS(regs)) { 121 WARN_ON(!FULL_REGS(regs));
122 /* Zero out the unsaved GPRs to avoid information
123 leak, and set TIF_SAVE_NVGPRS to ensure that the
124 registers do actually get saved later. */
125 memset(&regs->gpr[14], 0, 18 * sizeof(unsigned long));
126 set_thread_flag(TIF_SAVE_NVGPRS);
127 current_thread_info()->nvgprs_frame = &sc->gp_regs;
128 }
129 err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE); 122 err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE);
130 err |= __copy_to_user(&sc->fp_regs, &current->thread.fpr, FP_REGS_SIZE); 123 err |= __copy_to_user(&sc->fp_regs, &current->thread.fpr, FP_REGS_SIZE);
131 err |= __put_user(signr, &sc->signal); 124 err |= __put_user(signr, &sc->signal);
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index c8458c531b25..13595a64f013 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -540,6 +540,9 @@ int __devinit start_secondary(void *unused)
540 if (smp_ops->take_timebase) 540 if (smp_ops->take_timebase)
541 smp_ops->take_timebase(); 541 smp_ops->take_timebase();
542 542
543 if (system_state > SYSTEM_BOOTING)
544 per_cpu(last_jiffy, cpu) = get_tb();
545
543 spin_lock(&call_lock); 546 spin_lock(&call_lock);
544 cpu_set(cpu, cpu_online_map); 547 cpu_set(cpu, cpu_online_map);
545 spin_unlock(&call_lock); 548 spin_unlock(&call_lock);
diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c
index 475249dc2350..cd75ab2908fa 100644
--- a/arch/powerpc/kernel/sys_ppc32.c
+++ b/arch/powerpc/kernel/sys_ppc32.c
@@ -176,7 +176,6 @@ struct timex32 {
176}; 176};
177 177
178extern int do_adjtimex(struct timex *); 178extern int do_adjtimex(struct timex *);
179extern void ppc_adjtimex(void);
180 179
181asmlinkage long compat_sys_adjtimex(struct timex32 __user *utp) 180asmlinkage long compat_sys_adjtimex(struct timex32 __user *utp)
182{ 181{
@@ -209,9 +208,6 @@ asmlinkage long compat_sys_adjtimex(struct timex32 __user *utp)
209 208
210 ret = do_adjtimex(&txc); 209 ret = do_adjtimex(&txc);
211 210
212 /* adjust the conversion of TB to time of day to track adjtimex */
213 ppc_adjtimex();
214
215 if(put_user(txc.modes, &utp->modes) || 211 if(put_user(txc.modes, &utp->modes) ||
216 __put_user(txc.offset, &utp->offset) || 212 __put_user(txc.offset, &utp->offset) ||
217 __put_user(txc.freq, &utp->freq) || 213 __put_user(txc.freq, &utp->freq) ||
diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.S
index 007b15ee36d2..1ad55f0466fd 100644
--- a/arch/powerpc/kernel/systbl.S
+++ b/arch/powerpc/kernel/systbl.S
@@ -36,8 +36,6 @@
36#ifdef CONFIG_PPC64 36#ifdef CONFIG_PPC64
37#define sys_sigpending sys_ni_syscall 37#define sys_sigpending sys_ni_syscall
38#define sys_old_getrlimit sys_ni_syscall 38#define sys_old_getrlimit sys_ni_syscall
39#else
40#define ppc_rtas sys_ni_syscall
41#endif 39#endif
42 40
43_GLOBAL(sys_call_table) 41_GLOBAL(sys_call_table)
@@ -290,7 +288,7 @@ COMPAT_SYS(clock_settime)
290COMPAT_SYS(clock_gettime) 288COMPAT_SYS(clock_gettime)
291COMPAT_SYS(clock_getres) 289COMPAT_SYS(clock_getres)
292COMPAT_SYS(clock_nanosleep) 290COMPAT_SYS(clock_nanosleep)
293COMPAT_SYS(swapcontext) 291SYSX(ppc64_swapcontext,ppc32_swapcontext,ppc_swapcontext)
294COMPAT_SYS(tgkill) 292COMPAT_SYS(tgkill)
295COMPAT_SYS(utimes) 293COMPAT_SYS(utimes)
296COMPAT_SYS(statfs64) 294COMPAT_SYS(statfs64)
@@ -323,3 +321,4 @@ SYSCALL(spu_run)
323SYSCALL(spu_create) 321SYSCALL(spu_create)
324COMPAT_SYS(pselect6) 322COMPAT_SYS(pselect6)
325COMPAT_SYS(ppoll) 323COMPAT_SYS(ppoll)
324SYSCALL(unshare)
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index c4a294d657b9..86f7e3d154d8 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -50,6 +50,7 @@
50#include <linux/security.h> 50#include <linux/security.h>
51#include <linux/percpu.h> 51#include <linux/percpu.h>
52#include <linux/rtc.h> 52#include <linux/rtc.h>
53#include <linux/jiffies.h>
53 54
54#include <asm/io.h> 55#include <asm/io.h>
55#include <asm/processor.h> 56#include <asm/processor.h>
@@ -99,7 +100,15 @@ EXPORT_SYMBOL(tb_ticks_per_usec);
99unsigned long tb_ticks_per_sec; 100unsigned long tb_ticks_per_sec;
100u64 tb_to_xs; 101u64 tb_to_xs;
101unsigned tb_to_us; 102unsigned tb_to_us;
102unsigned long processor_freq; 103
104#define TICKLEN_SCALE (SHIFT_SCALE - 10)
105u64 last_tick_len; /* units are ns / 2^TICKLEN_SCALE */
106u64 ticklen_to_xs; /* 0.64 fraction */
107
108/* If last_tick_len corresponds to about 1/HZ seconds, then
109 last_tick_len << TICKLEN_SHIFT will be about 2^63. */
110#define TICKLEN_SHIFT (63 - 30 - TICKLEN_SCALE + SHIFT_HZ)
111
103DEFINE_SPINLOCK(rtc_lock); 112DEFINE_SPINLOCK(rtc_lock);
104EXPORT_SYMBOL_GPL(rtc_lock); 113EXPORT_SYMBOL_GPL(rtc_lock);
105 114
@@ -113,10 +122,6 @@ extern unsigned long wall_jiffies;
113extern struct timezone sys_tz; 122extern struct timezone sys_tz;
114static long timezone_offset; 123static long timezone_offset;
115 124
116void ppc_adjtimex(void);
117
118static unsigned adjusting_time = 0;
119
120unsigned long ppc_proc_freq; 125unsigned long ppc_proc_freq;
121unsigned long ppc_tb_freq; 126unsigned long ppc_tb_freq;
122 127
@@ -178,8 +183,7 @@ static __inline__ void timer_check_rtc(void)
178 */ 183 */
179 if (ppc_md.set_rtc_time && ntp_synced() && 184 if (ppc_md.set_rtc_time && ntp_synced() &&
180 xtime.tv_sec - last_rtc_update >= 659 && 185 xtime.tv_sec - last_rtc_update >= 659 &&
181 abs((xtime.tv_nsec/1000) - (1000000-1000000/HZ)) < 500000/HZ && 186 abs((xtime.tv_nsec/1000) - (1000000-1000000/HZ)) < 500000/HZ) {
182 jiffies - wall_jiffies == 1) {
183 struct rtc_time tm; 187 struct rtc_time tm;
184 to_tm(xtime.tv_sec + 1 + timezone_offset, &tm); 188 to_tm(xtime.tv_sec + 1 + timezone_offset, &tm);
185 tm.tm_year -= 1900; 189 tm.tm_year -= 1900;
@@ -226,15 +230,14 @@ void do_gettimeofday(struct timeval *tv)
226 if (__USE_RTC()) { 230 if (__USE_RTC()) {
227 /* do this the old way */ 231 /* do this the old way */
228 unsigned long flags, seq; 232 unsigned long flags, seq;
229 unsigned int sec, nsec, usec, lost; 233 unsigned int sec, nsec, usec;
230 234
231 do { 235 do {
232 seq = read_seqbegin_irqsave(&xtime_lock, flags); 236 seq = read_seqbegin_irqsave(&xtime_lock, flags);
233 sec = xtime.tv_sec; 237 sec = xtime.tv_sec;
234 nsec = xtime.tv_nsec + tb_ticks_since(tb_last_stamp); 238 nsec = xtime.tv_nsec + tb_ticks_since(tb_last_stamp);
235 lost = jiffies - wall_jiffies;
236 } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); 239 } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
237 usec = nsec / 1000 + lost * (1000000 / HZ); 240 usec = nsec / 1000;
238 while (usec >= 1000000) { 241 while (usec >= 1000000) {
239 usec -= 1000000; 242 usec -= 1000000;
240 ++sec; 243 ++sec;
@@ -248,23 +251,6 @@ void do_gettimeofday(struct timeval *tv)
248 251
249EXPORT_SYMBOL(do_gettimeofday); 252EXPORT_SYMBOL(do_gettimeofday);
250 253
251/* Synchronize xtime with do_gettimeofday */
252
253static inline void timer_sync_xtime(unsigned long cur_tb)
254{
255#ifdef CONFIG_PPC64
256 /* why do we do this? */
257 struct timeval my_tv;
258
259 __do_gettimeofday(&my_tv, cur_tb);
260
261 if (xtime.tv_sec <= my_tv.tv_sec) {
262 xtime.tv_sec = my_tv.tv_sec;
263 xtime.tv_nsec = my_tv.tv_usec * 1000;
264 }
265#endif
266}
267
268/* 254/*
269 * There are two copies of tb_to_xs and stamp_xsec so that no 255 * There are two copies of tb_to_xs and stamp_xsec so that no
270 * lock is needed to access and use these values in 256 * lock is needed to access and use these values in
@@ -297,9 +283,9 @@ static inline void update_gtod(u64 new_tb_stamp, u64 new_stamp_xsec,
297 * the two values of tb_update_count match and are even then the 283 * the two values of tb_update_count match and are even then the
298 * tb_to_xs and stamp_xsec values are consistent. If not, then it 284 * tb_to_xs and stamp_xsec values are consistent. If not, then it
299 * loops back and reads them again until this criteria is met. 285 * loops back and reads them again until this criteria is met.
286 * We expect the caller to have done the first increment of
287 * vdso_data->tb_update_count already.
300 */ 288 */
301 ++(vdso_data->tb_update_count);
302 smp_wmb();
303 vdso_data->tb_orig_stamp = new_tb_stamp; 289 vdso_data->tb_orig_stamp = new_tb_stamp;
304 vdso_data->stamp_xsec = new_stamp_xsec; 290 vdso_data->stamp_xsec = new_stamp_xsec;
305 vdso_data->tb_to_xs = new_tb_to_xs; 291 vdso_data->tb_to_xs = new_tb_to_xs;
@@ -323,15 +309,40 @@ static __inline__ void timer_recalc_offset(u64 cur_tb)
323{ 309{
324 unsigned long offset; 310 unsigned long offset;
325 u64 new_stamp_xsec; 311 u64 new_stamp_xsec;
312 u64 tlen, t2x;
313 u64 tb, xsec_old, xsec_new;
314 struct gettimeofday_vars *varp;
326 315
327 if (__USE_RTC()) 316 if (__USE_RTC())
328 return; 317 return;
318 tlen = current_tick_length();
329 offset = cur_tb - do_gtod.varp->tb_orig_stamp; 319 offset = cur_tb - do_gtod.varp->tb_orig_stamp;
330 if ((offset & 0x80000000u) == 0) 320 if (tlen == last_tick_len && offset < 0x80000000u)
331 return; 321 return;
332 new_stamp_xsec = do_gtod.varp->stamp_xsec 322 if (tlen != last_tick_len) {
333 + mulhdu(offset, do_gtod.varp->tb_to_xs); 323 t2x = mulhdu(tlen << TICKLEN_SHIFT, ticklen_to_xs);
334 update_gtod(cur_tb, new_stamp_xsec, do_gtod.varp->tb_to_xs); 324 last_tick_len = tlen;
325 } else
326 t2x = do_gtod.varp->tb_to_xs;
327 new_stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC;
328 do_div(new_stamp_xsec, 1000000000);
329 new_stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC;
330
331 ++vdso_data->tb_update_count;
332 smp_mb();
333
334 /*
335 * Make sure time doesn't go backwards for userspace gettimeofday.
336 */
337 tb = get_tb();
338 varp = do_gtod.varp;
339 xsec_old = mulhdu(tb - varp->tb_orig_stamp, varp->tb_to_xs)
340 + varp->stamp_xsec;
341 xsec_new = mulhdu(tb - cur_tb, t2x) + new_stamp_xsec;
342 if (xsec_new < xsec_old)
343 new_stamp_xsec += xsec_old - xsec_new;
344
345 update_gtod(cur_tb, new_stamp_xsec, t2x);
335} 346}
336 347
337#ifdef CONFIG_SMP 348#ifdef CONFIG_SMP
@@ -462,13 +473,10 @@ void timer_interrupt(struct pt_regs * regs)
462 write_seqlock(&xtime_lock); 473 write_seqlock(&xtime_lock);
463 tb_last_jiffy += tb_ticks_per_jiffy; 474 tb_last_jiffy += tb_ticks_per_jiffy;
464 tb_last_stamp = per_cpu(last_jiffy, cpu); 475 tb_last_stamp = per_cpu(last_jiffy, cpu);
465 timer_recalc_offset(tb_last_jiffy);
466 do_timer(regs); 476 do_timer(regs);
467 timer_sync_xtime(tb_last_jiffy); 477 timer_recalc_offset(tb_last_jiffy);
468 timer_check_rtc(); 478 timer_check_rtc();
469 write_sequnlock(&xtime_lock); 479 write_sequnlock(&xtime_lock);
470 if (adjusting_time && (time_adjust == 0))
471 ppc_adjtimex();
472 } 480 }
473 481
474 next_dec = tb_ticks_per_jiffy - ticks; 482 next_dec = tb_ticks_per_jiffy - ticks;
@@ -492,16 +500,18 @@ void timer_interrupt(struct pt_regs * regs)
492 500
493void wakeup_decrementer(void) 501void wakeup_decrementer(void)
494{ 502{
495 int i; 503 unsigned long ticks;
496 504
497 set_dec(tb_ticks_per_jiffy);
498 /* 505 /*
499 * We don't expect this to be called on a machine with a 601, 506 * The timebase gets saved on sleep and restored on wakeup,
500 * so using get_tbl is fine. 507 * so all we need to do is to reset the decrementer.
501 */ 508 */
502 tb_last_stamp = tb_last_jiffy = get_tb(); 509 ticks = tb_ticks_since(__get_cpu_var(last_jiffy));
503 for_each_cpu(i) 510 if (ticks < tb_ticks_per_jiffy)
504 per_cpu(last_jiffy, i) = tb_last_stamp; 511 ticks = tb_ticks_per_jiffy - ticks;
512 else
513 ticks = 1;
514 set_dec(ticks);
505} 515}
506 516
507#ifdef CONFIG_SMP 517#ifdef CONFIG_SMP
@@ -541,8 +551,8 @@ int do_settimeofday(struct timespec *tv)
541 time_t wtm_sec, new_sec = tv->tv_sec; 551 time_t wtm_sec, new_sec = tv->tv_sec;
542 long wtm_nsec, new_nsec = tv->tv_nsec; 552 long wtm_nsec, new_nsec = tv->tv_nsec;
543 unsigned long flags; 553 unsigned long flags;
544 long int tb_delta; 554 u64 new_xsec;
545 u64 new_xsec, tb_delta_xs; 555 unsigned long tb_delta;
546 556
547 if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) 557 if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
548 return -EINVAL; 558 return -EINVAL;
@@ -563,9 +573,23 @@ int do_settimeofday(struct timespec *tv)
563 first_settimeofday = 0; 573 first_settimeofday = 0;
564 } 574 }
565#endif 575#endif
576
577 /* Make userspace gettimeofday spin until we're done. */
578 ++vdso_data->tb_update_count;
579 smp_mb();
580
581 /*
582 * Subtract off the number of nanoseconds since the
583 * beginning of the last tick.
584 * Note that since we don't increment jiffies_64 anywhere other
585 * than in do_timer (since we don't have a lost tick problem),
586 * wall_jiffies will always be the same as jiffies,
587 * and therefore the (jiffies - wall_jiffies) computation
588 * has been removed.
589 */
566 tb_delta = tb_ticks_since(tb_last_stamp); 590 tb_delta = tb_ticks_since(tb_last_stamp);
567 tb_delta += (jiffies - wall_jiffies) * tb_ticks_per_jiffy; 591 tb_delta = mulhdu(tb_delta, do_gtod.varp->tb_to_xs); /* in xsec */
568 tb_delta_xs = mulhdu(tb_delta, do_gtod.varp->tb_to_xs); 592 new_nsec -= SCALE_XSEC(tb_delta, 1000000000);
569 593
570 wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - new_sec); 594 wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - new_sec);
571 wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - new_nsec); 595 wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - new_nsec);
@@ -580,12 +604,12 @@ int do_settimeofday(struct timespec *tv)
580 604
581 ntp_clear(); 605 ntp_clear();
582 606
583 new_xsec = 0; 607 new_xsec = xtime.tv_nsec;
584 if (new_nsec != 0) { 608 if (new_xsec != 0) {
585 new_xsec = (u64)new_nsec * XSEC_PER_SEC; 609 new_xsec *= XSEC_PER_SEC;
586 do_div(new_xsec, NSEC_PER_SEC); 610 do_div(new_xsec, NSEC_PER_SEC);
587 } 611 }
588 new_xsec += (u64)new_sec * XSEC_PER_SEC - tb_delta_xs; 612 new_xsec += (u64)xtime.tv_sec * XSEC_PER_SEC;
589 update_gtod(tb_last_jiffy, new_xsec, do_gtod.varp->tb_to_xs); 613 update_gtod(tb_last_jiffy, new_xsec, do_gtod.varp->tb_to_xs);
590 614
591 vdso_data->tz_minuteswest = sys_tz.tz_minuteswest; 615 vdso_data->tz_minuteswest = sys_tz.tz_minuteswest;
@@ -612,10 +636,10 @@ void __init generic_calibrate_decr(void)
612 636
613 ppc_tb_freq = DEFAULT_TB_FREQ; /* hardcoded default */ 637 ppc_tb_freq = DEFAULT_TB_FREQ; /* hardcoded default */
614 node_found = 0; 638 node_found = 0;
615 if (cpu != 0) { 639 if (cpu) {
616 fp = (unsigned int *)get_property(cpu, "timebase-frequency", 640 fp = (unsigned int *)get_property(cpu, "timebase-frequency",
617 NULL); 641 NULL);
618 if (fp != 0) { 642 if (fp) {
619 node_found = 1; 643 node_found = 1;
620 ppc_tb_freq = *fp; 644 ppc_tb_freq = *fp;
621 } 645 }
@@ -626,10 +650,10 @@ void __init generic_calibrate_decr(void)
626 650
627 ppc_proc_freq = DEFAULT_PROC_FREQ; 651 ppc_proc_freq = DEFAULT_PROC_FREQ;
628 node_found = 0; 652 node_found = 0;
629 if (cpu != 0) { 653 if (cpu) {
630 fp = (unsigned int *)get_property(cpu, "clock-frequency", 654 fp = (unsigned int *)get_property(cpu, "clock-frequency",
631 NULL); 655 NULL);
632 if (fp != 0) { 656 if (fp) {
633 node_found = 1; 657 node_found = 1;
634 ppc_proc_freq = *fp; 658 ppc_proc_freq = *fp;
635 } 659 }
@@ -671,7 +695,7 @@ void __init time_init(void)
671 unsigned long flags; 695 unsigned long flags;
672 unsigned long tm = 0; 696 unsigned long tm = 0;
673 struct div_result res; 697 struct div_result res;
674 u64 scale; 698 u64 scale, x;
675 unsigned shift; 699 unsigned shift;
676 700
677 if (ppc_md.time_init != NULL) 701 if (ppc_md.time_init != NULL)
@@ -693,11 +717,42 @@ void __init time_init(void)
693 } 717 }
694 718
695 tb_ticks_per_jiffy = ppc_tb_freq / HZ; 719 tb_ticks_per_jiffy = ppc_tb_freq / HZ;
696 tb_ticks_per_sec = tb_ticks_per_jiffy * HZ; 720 tb_ticks_per_sec = ppc_tb_freq;
697 tb_ticks_per_usec = ppc_tb_freq / 1000000; 721 tb_ticks_per_usec = ppc_tb_freq / 1000000;
698 tb_to_us = mulhwu_scale_factor(ppc_tb_freq, 1000000); 722 tb_to_us = mulhwu_scale_factor(ppc_tb_freq, 1000000);
699 div128_by_32(1024*1024, 0, tb_ticks_per_sec, &res); 723
700 tb_to_xs = res.result_low; 724 /*
725 * Calculate the length of each tick in ns. It will not be
726 * exactly 1e9/HZ unless ppc_tb_freq is divisible by HZ.
727 * We compute 1e9 * tb_ticks_per_jiffy / ppc_tb_freq,
728 * rounded up.
729 */
730 x = (u64) NSEC_PER_SEC * tb_ticks_per_jiffy + ppc_tb_freq - 1;
731 do_div(x, ppc_tb_freq);
732 tick_nsec = x;
733 last_tick_len = x << TICKLEN_SCALE;
734
735 /*
736 * Compute ticklen_to_xs, which is a factor which gets multiplied
737 * by (last_tick_len << TICKLEN_SHIFT) to get a tb_to_xs value.
738 * It is computed as:
739 * ticklen_to_xs = 2^N / (tb_ticks_per_jiffy * 1e9)
740 * where N = 64 + 20 - TICKLEN_SCALE - TICKLEN_SHIFT
741 * which turns out to be N = 51 - SHIFT_HZ.
742 * This gives the result as a 0.64 fixed-point fraction.
743 * That value is reduced by an offset amounting to 1 xsec per
744 * 2^31 timebase ticks to avoid problems with time going backwards
745 * by 1 xsec when we do timer_recalc_offset due to losing the
746 * fractional xsec. That offset is equal to ppc_tb_freq/2^51
747 * since there are 2^20 xsec in a second.
748 */
749 div128_by_32((1ULL << 51) - ppc_tb_freq, 0,
750 tb_ticks_per_jiffy << SHIFT_HZ, &res);
751 div128_by_32(res.result_high, res.result_low, NSEC_PER_SEC, &res);
752 ticklen_to_xs = res.result_low;
753
754 /* Compute tb_to_xs from tick_nsec */
755 tb_to_xs = mulhdu(last_tick_len << TICKLEN_SHIFT, ticklen_to_xs);
701 756
702 /* 757 /*
703 * Compute scale factor for sched_clock. 758 * Compute scale factor for sched_clock.
@@ -724,6 +779,14 @@ void __init time_init(void)
724 tm = get_boot_time(); 779 tm = get_boot_time();
725 780
726 write_seqlock_irqsave(&xtime_lock, flags); 781 write_seqlock_irqsave(&xtime_lock, flags);
782
783 /* If platform provided a timezone (pmac), we correct the time */
784 if (timezone_offset) {
785 sys_tz.tz_minuteswest = -timezone_offset / 60;
786 sys_tz.tz_dsttime = 0;
787 tm -= timezone_offset;
788 }
789
727 xtime.tv_sec = tm; 790 xtime.tv_sec = tm;
728 xtime.tv_nsec = 0; 791 xtime.tv_nsec = 0;
729 do_gtod.varp = &do_gtod.vars[0]; 792 do_gtod.varp = &do_gtod.vars[0];
@@ -738,18 +801,11 @@ void __init time_init(void)
738 vdso_data->tb_orig_stamp = tb_last_jiffy; 801 vdso_data->tb_orig_stamp = tb_last_jiffy;
739 vdso_data->tb_update_count = 0; 802 vdso_data->tb_update_count = 0;
740 vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; 803 vdso_data->tb_ticks_per_sec = tb_ticks_per_sec;
741 vdso_data->stamp_xsec = xtime.tv_sec * XSEC_PER_SEC; 804 vdso_data->stamp_xsec = (u64) xtime.tv_sec * XSEC_PER_SEC;
742 vdso_data->tb_to_xs = tb_to_xs; 805 vdso_data->tb_to_xs = tb_to_xs;
743 806
744 time_freq = 0; 807 time_freq = 0;
745 808
746 /* If platform provided a timezone (pmac), we correct the time */
747 if (timezone_offset) {
748 sys_tz.tz_minuteswest = -timezone_offset / 60;
749 sys_tz.tz_dsttime = 0;
750 xtime.tv_sec -= timezone_offset;
751 }
752
753 last_rtc_update = xtime.tv_sec; 809 last_rtc_update = xtime.tv_sec;
754 set_normalized_timespec(&wall_to_monotonic, 810 set_normalized_timespec(&wall_to_monotonic,
755 -xtime.tv_sec, -xtime.tv_nsec); 811 -xtime.tv_sec, -xtime.tv_nsec);
@@ -759,126 +815,6 @@ void __init time_init(void)
759 set_dec(tb_ticks_per_jiffy); 815 set_dec(tb_ticks_per_jiffy);
760} 816}
761 817
762/*
763 * After adjtimex is called, adjust the conversion of tb ticks
764 * to microseconds to keep do_gettimeofday synchronized
765 * with ntpd.
766 *
767 * Use the time_adjust, time_freq and time_offset computed by adjtimex to
768 * adjust the frequency.
769 */
770
771/* #define DEBUG_PPC_ADJTIMEX 1 */
772
773void ppc_adjtimex(void)
774{
775#ifdef CONFIG_PPC64
776 unsigned long den, new_tb_ticks_per_sec, tb_ticks, old_xsec,
777 new_tb_to_xs, new_xsec, new_stamp_xsec;
778 unsigned long tb_ticks_per_sec_delta;
779 long delta_freq, ltemp;
780 struct div_result divres;
781 unsigned long flags;
782 long singleshot_ppm = 0;
783
784 /*
785 * Compute parts per million frequency adjustment to
786 * accomplish the time adjustment implied by time_offset to be
787 * applied over the elapsed time indicated by time_constant.
788 * Use SHIFT_USEC to get it into the same units as
789 * time_freq.
790 */
791 if ( time_offset < 0 ) {
792 ltemp = -time_offset;
793 ltemp <<= SHIFT_USEC - SHIFT_UPDATE;
794 ltemp >>= SHIFT_KG + time_constant;
795 ltemp = -ltemp;
796 } else {
797 ltemp = time_offset;
798 ltemp <<= SHIFT_USEC - SHIFT_UPDATE;
799 ltemp >>= SHIFT_KG + time_constant;
800 }
801
802 /* If there is a single shot time adjustment in progress */
803 if ( time_adjust ) {
804#ifdef DEBUG_PPC_ADJTIMEX
805 printk("ppc_adjtimex: ");
806 if ( adjusting_time == 0 )
807 printk("starting ");
808 printk("single shot time_adjust = %ld\n", time_adjust);
809#endif
810
811 adjusting_time = 1;
812
813 /*
814 * Compute parts per million frequency adjustment
815 * to match time_adjust
816 */
817 singleshot_ppm = tickadj * HZ;
818 /*
819 * The adjustment should be tickadj*HZ to match the code in
820 * linux/kernel/timer.c, but experiments show that this is too
821 * large. 3/4 of tickadj*HZ seems about right
822 */
823 singleshot_ppm -= singleshot_ppm / 4;
824 /* Use SHIFT_USEC to get it into the same units as time_freq */
825 singleshot_ppm <<= SHIFT_USEC;
826 if ( time_adjust < 0 )
827 singleshot_ppm = -singleshot_ppm;
828 }
829 else {
830#ifdef DEBUG_PPC_ADJTIMEX
831 if ( adjusting_time )
832 printk("ppc_adjtimex: ending single shot time_adjust\n");
833#endif
834 adjusting_time = 0;
835 }
836
837 /* Add up all of the frequency adjustments */
838 delta_freq = time_freq + ltemp + singleshot_ppm;
839
840 /*
841 * Compute a new value for tb_ticks_per_sec based on
842 * the frequency adjustment
843 */
844 den = 1000000 * (1 << (SHIFT_USEC - 8));
845 if ( delta_freq < 0 ) {
846 tb_ticks_per_sec_delta = ( tb_ticks_per_sec * ( (-delta_freq) >> (SHIFT_USEC - 8))) / den;
847 new_tb_ticks_per_sec = tb_ticks_per_sec + tb_ticks_per_sec_delta;
848 }
849 else {
850 tb_ticks_per_sec_delta = ( tb_ticks_per_sec * ( delta_freq >> (SHIFT_USEC - 8))) / den;
851 new_tb_ticks_per_sec = tb_ticks_per_sec - tb_ticks_per_sec_delta;
852 }
853
854#ifdef DEBUG_PPC_ADJTIMEX
855 printk("ppc_adjtimex: ltemp = %ld, time_freq = %ld, singleshot_ppm = %ld\n", ltemp, time_freq, singleshot_ppm);
856 printk("ppc_adjtimex: tb_ticks_per_sec - base = %ld new = %ld\n", tb_ticks_per_sec, new_tb_ticks_per_sec);
857#endif
858
859 /*
860 * Compute a new value of tb_to_xs (used to convert tb to
861 * microseconds) and a new value of stamp_xsec which is the
862 * time (in 1/2^20 second units) corresponding to
863 * tb_orig_stamp. This new value of stamp_xsec compensates
864 * for the change in frequency (implied by the new tb_to_xs)
865 * which guarantees that the current time remains the same.
866 */
867 write_seqlock_irqsave( &xtime_lock, flags );
868 tb_ticks = get_tb() - do_gtod.varp->tb_orig_stamp;
869 div128_by_32(1024*1024, 0, new_tb_ticks_per_sec, &divres);
870 new_tb_to_xs = divres.result_low;
871 new_xsec = mulhdu(tb_ticks, new_tb_to_xs);
872
873 old_xsec = mulhdu(tb_ticks, do_gtod.varp->tb_to_xs);
874 new_stamp_xsec = do_gtod.varp->stamp_xsec + old_xsec - new_xsec;
875
876 update_gtod(do_gtod.varp->tb_orig_stamp, new_stamp_xsec, new_tb_to_xs);
877
878 write_sequnlock_irqrestore( &xtime_lock, flags );
879#endif /* CONFIG_PPC64 */
880}
881
882 818
883#define FEBRUARY 2 819#define FEBRUARY 2
884#define STARTOFTIME 1970 820#define STARTOFTIME 1970
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 7509aa6474f2..98660aedeeb7 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -814,6 +814,8 @@ void __kprobes program_check_exception(struct pt_regs *regs)
814 return; 814 return;
815 } 815 }
816 816
817 local_irq_enable();
818
817 /* Try to emulate it if we should. */ 819 /* Try to emulate it if we should. */
818 if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) { 820 if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) {
819 switch (emulate_instruction(regs)) { 821 switch (emulate_instruction(regs)) {
diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c
index 2da65a9c93f6..5d29dcca523c 100644
--- a/arch/powerpc/kernel/udbg_16550.c
+++ b/arch/powerpc/kernel/udbg_16550.c
@@ -144,7 +144,7 @@ unsigned int udbg_probe_uart_speed(void __iomem *comport, unsigned int clock)
144} 144}
145 145
146#ifdef CONFIG_PPC_MAPLE 146#ifdef CONFIG_PPC_MAPLE
147void udbg_maple_real_putc(unsigned char c) 147void udbg_maple_real_putc(char c)
148{ 148{
149 if (udbg_comport) { 149 if (udbg_comport) {
150 while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0) 150 while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0)
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index f0c47dab0903..04f7df39ffbb 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -182,8 +182,8 @@ static struct page * vdso_vma_nopage(struct vm_area_struct * vma,
182 unsigned long offset = address - vma->vm_start; 182 unsigned long offset = address - vma->vm_start;
183 struct page *pg; 183 struct page *pg;
184#ifdef CONFIG_PPC64 184#ifdef CONFIG_PPC64
185 void *vbase = test_thread_flag(TIF_32BIT) ? 185 void *vbase = (vma->vm_mm->task_size > TASK_SIZE_USER32) ?
186 vdso32_kbase : vdso64_kbase; 186 vdso64_kbase : vdso32_kbase;
187#else 187#else
188 void *vbase = vdso32_kbase; 188 void *vbase = vdso32_kbase;
189#endif 189#endif
diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S
index ccaeda5136d1..4ee871f1cadb 100644
--- a/arch/powerpc/kernel/vdso64/gettimeofday.S
+++ b/arch/powerpc/kernel/vdso64/gettimeofday.S
@@ -225,9 +225,9 @@ V_FUNCTION_BEGIN(__do_get_xsec)
225 .cfi_startproc 225 .cfi_startproc
226 /* check for update count & load values */ 226 /* check for update count & load values */
2271: ld r8,CFG_TB_UPDATE_COUNT(r3) 2271: ld r8,CFG_TB_UPDATE_COUNT(r3)
228 andi. r0,r4,1 /* pending update ? loop */ 228 andi. r0,r8,1 /* pending update ? loop */
229 bne- 1b 229 bne- 1b
230 xor r0,r4,r4 /* create dependency */ 230 xor r0,r8,r8 /* create dependency */
231 add r3,r3,r0 231 add r3,r3,r0
232 232
233 /* Get TB & offset it */ 233 /* Get TB & offset it */
diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c
index d96bcfe4c6f6..33654d1b1b43 100644
--- a/arch/powerpc/mm/hash_native_64.c
+++ b/arch/powerpc/mm/hash_native_64.c
@@ -403,12 +403,17 @@ static void native_hpte_clear(void)
403 */ 403 */
404 hpte_v = hptep->v; 404 hpte_v = hptep->v;
405 405
406 /*
407 * Call __tlbie() here rather than tlbie() since we
408 * already hold the native_tlbie_lock.
409 */
406 if (hpte_v & HPTE_V_VALID) { 410 if (hpte_v & HPTE_V_VALID) {
407 hptep->v = 0; 411 hptep->v = 0;
408 tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K, 0); 412 __tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K);
409 } 413 }
410 } 414 }
411 415
416 asm volatile("eieio; tlbsync; ptesync":::"memory");
412 spin_unlock(&native_tlbie_lock); 417 spin_unlock(&native_tlbie_lock);
413 local_irq_restore(flags); 418 local_irq_restore(flags);
414} 419}
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index 149351a84b94..e9d589eefc14 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -88,6 +88,7 @@ static unsigned long _SDR1;
88struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; 88struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT];
89 89
90hpte_t *htab_address; 90hpte_t *htab_address;
91unsigned long htab_size_bytes;
91unsigned long htab_hash_mask; 92unsigned long htab_hash_mask;
92int mmu_linear_psize = MMU_PAGE_4K; 93int mmu_linear_psize = MMU_PAGE_4K;
93int mmu_virtual_psize = MMU_PAGE_4K; 94int mmu_virtual_psize = MMU_PAGE_4K;
@@ -168,7 +169,7 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
168#ifdef CONFIG_PPC_ISERIES 169#ifdef CONFIG_PPC_ISERIES
169 if (_machine == PLATFORM_ISERIES_LPAR) 170 if (_machine == PLATFORM_ISERIES_LPAR)
170 ret = iSeries_hpte_insert(hpteg, va, 171 ret = iSeries_hpte_insert(hpteg, va,
171 virt_to_abs(paddr), 172 __pa(vaddr),
172 tmp_mode, 173 tmp_mode,
173 HPTE_V_BOLTED, 174 HPTE_V_BOLTED,
174 psize); 175 psize);
@@ -399,7 +400,7 @@ void create_section_mapping(unsigned long start, unsigned long end)
399 400
400void __init htab_initialize(void) 401void __init htab_initialize(void)
401{ 402{
402 unsigned long table, htab_size_bytes; 403 unsigned long table;
403 unsigned long pteg_count; 404 unsigned long pteg_count;
404 unsigned long mode_rw; 405 unsigned long mode_rw;
405 unsigned long base = 0, size = 0; 406 unsigned long base = 0, size = 0;
diff --git a/arch/powerpc/mm/lmb.c b/arch/powerpc/mm/lmb.c
index 9584608fd768..bbe3eac918e8 100644
--- a/arch/powerpc/mm/lmb.c
+++ b/arch/powerpc/mm/lmb.c
@@ -197,6 +197,8 @@ long __init lmb_reserve(unsigned long base, unsigned long size)
197{ 197{
198 struct lmb_region *_rgn = &(lmb.reserved); 198 struct lmb_region *_rgn = &(lmb.reserved);
199 199
200 BUG_ON(0 == size);
201
200 return lmb_add_region(_rgn, base, size); 202 return lmb_add_region(_rgn, base, size);
201} 203}
202 204
@@ -227,6 +229,8 @@ unsigned long __init lmb_alloc_base(unsigned long size, unsigned long align,
227 long i, j; 229 long i, j;
228 unsigned long base = 0; 230 unsigned long base = 0;
229 231
232 BUG_ON(0 == size);
233
230#ifdef CONFIG_PPC32 234#ifdef CONFIG_PPC32
231 /* On 32-bit, make sure we allocate lowmem */ 235 /* On 32-bit, make sure we allocate lowmem */
232 if (max_addr == LMB_ALLOC_ANYWHERE) 236 if (max_addr == LMB_ALLOC_ANYWHERE)
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 15aac0d78dfa..550517c2dd42 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -435,17 +435,12 @@ void clear_user_page(void *page, unsigned long vaddr, struct page *pg)
435{ 435{
436 clear_page(page); 436 clear_page(page);
437 437
438 if (cpu_has_feature(CPU_FTR_COHERENT_ICACHE))
439 return;
440 /* 438 /*
441 * We shouldnt have to do this, but some versions of glibc 439 * We shouldnt have to do this, but some versions of glibc
442 * require it (ld.so assumes zero filled pages are icache clean) 440 * require it (ld.so assumes zero filled pages are icache clean)
443 * - Anton 441 * - Anton
444 */ 442 */
445 443 flush_dcache_page(pg);
446 /* avoid an atomic op if possible */
447 if (test_bit(PG_arch_1, &pg->flags))
448 clear_bit(PG_arch_1, &pg->flags);
449} 444}
450EXPORT_SYMBOL(clear_user_page); 445EXPORT_SYMBOL(clear_user_page);
451 446
@@ -469,12 +464,7 @@ void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
469 return; 464 return;
470#endif 465#endif
471 466
472 if (cpu_has_feature(CPU_FTR_COHERENT_ICACHE)) 467 flush_dcache_page(pg);
473 return;
474
475 /* avoid an atomic op if possible */
476 if (test_bit(PG_arch_1, &pg->flags))
477 clear_bit(PG_arch_1, &pg->flags);
478} 468}
479 469
480void flush_icache_user_range(struct vm_area_struct *vma, struct page *page, 470void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index f4e5ac122615..d296eb6b4545 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -37,6 +37,7 @@
37 37
38unsigned long ioremap_base; 38unsigned long ioremap_base;
39unsigned long ioremap_bot; 39unsigned long ioremap_bot;
40EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */
40int io_bat_index; 41int io_bat_index;
41 42
42#if defined(CONFIG_6xx) || defined(CONFIG_POWER3) 43#if defined(CONFIG_6xx) || defined(CONFIG_POWER3)
@@ -153,6 +154,7 @@ ioremap64(unsigned long long addr, unsigned long size)
153{ 154{
154 return __ioremap(addr, size, _PAGE_NO_CACHE); 155 return __ioremap(addr, size, _PAGE_NO_CACHE);
155} 156}
157EXPORT_SYMBOL(ioremap64);
156 158
157void __iomem * 159void __iomem *
158ioremap(phys_addr_t addr, unsigned long size) 160ioremap(phys_addr_t addr, unsigned long size)
@@ -162,6 +164,7 @@ ioremap(phys_addr_t addr, unsigned long size)
162 return ioremap64(addr64, size); 164 return ioremap64(addr64, size);
163} 165}
164#endif /* CONFIG_PHYS_64BIT */ 166#endif /* CONFIG_PHYS_64BIT */
167EXPORT_SYMBOL(ioremap);
165 168
166void __iomem * 169void __iomem *
167__ioremap(phys_addr_t addr, unsigned long size, unsigned long flags) 170__ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
@@ -247,6 +250,7 @@ __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
247out: 250out:
248 return (void __iomem *) (v + ((unsigned long)addr & ~PAGE_MASK)); 251 return (void __iomem *) (v + ((unsigned long)addr & ~PAGE_MASK));
249} 252}
253EXPORT_SYMBOL(__ioremap);
250 254
251void iounmap(volatile void __iomem *addr) 255void iounmap(volatile void __iomem *addr)
252{ 256{
@@ -259,6 +263,7 @@ void iounmap(volatile void __iomem *addr)
259 if (addr > high_memory && (unsigned long) addr < ioremap_bot) 263 if (addr > high_memory && (unsigned long) addr < ioremap_bot)
260 vunmap((void *) (PAGE_MASK & (unsigned long)addr)); 264 vunmap((void *) (PAGE_MASK & (unsigned long)addr));
261} 265}
266EXPORT_SYMBOL(iounmap);
262 267
263void __iomem *ioport_map(unsigned long port, unsigned int len) 268void __iomem *ioport_map(unsigned long port, unsigned int len)
264{ 269{
diff --git a/arch/powerpc/oprofile/Kconfig b/arch/powerpc/oprofile/Kconfig
index eb2dece76a54..d03c0e5ca870 100644
--- a/arch/powerpc/oprofile/Kconfig
+++ b/arch/powerpc/oprofile/Kconfig
@@ -1,4 +1,5 @@
1config PROFILING 1config PROFILING
2 depends on !PPC_ISERIES
2 bool "Profiling support (EXPERIMENTAL)" 3 bool "Profiling support (EXPERIMENTAL)"
3 help 4 help
4 Say Y here to enable the extended profiling support mechanisms used 5 Say Y here to enable the extended profiling support mechanisms used
diff --git a/arch/powerpc/platforms/cell/Makefile b/arch/powerpc/platforms/cell/Makefile
index 16031b565be4..3b998a393e3f 100644
--- a/arch/powerpc/platforms/cell/Makefile
+++ b/arch/powerpc/platforms/cell/Makefile
@@ -2,7 +2,7 @@ obj-y += interrupt.o iommu.o setup.o spider-pic.o
2obj-y += pervasive.o 2obj-y += pervasive.o
3 3
4obj-$(CONFIG_SMP) += smp.o 4obj-$(CONFIG_SMP) += smp.o
5obj-$(CONFIG_SPU_FS) += spufs/ spu-base.o 5obj-$(CONFIG_SPU_FS) += spu-base.o spufs/
6 6
7spu-base-y += spu_base.o spu_priv1.o 7spu-base-y += spu_base.o spu_priv1.o
8 8
diff --git a/arch/powerpc/platforms/chrp/chrp.h b/arch/powerpc/platforms/chrp/chrp.h
index 3a2057fa314a..814f54742e0f 100644
--- a/arch/powerpc/platforms/chrp/chrp.h
+++ b/arch/powerpc/platforms/chrp/chrp.h
@@ -5,7 +5,6 @@
5extern void chrp_nvram_init(void); 5extern void chrp_nvram_init(void);
6extern void chrp_get_rtc_time(struct rtc_time *); 6extern void chrp_get_rtc_time(struct rtc_time *);
7extern int chrp_set_rtc_time(struct rtc_time *); 7extern int chrp_set_rtc_time(struct rtc_time *);
8extern void chrp_calibrate_decr(void);
9extern long chrp_time_init(void); 8extern long chrp_time_init(void);
10 9
11extern void chrp_find_bridges(void); 10extern void chrp_find_bridges(void);
diff --git a/arch/powerpc/platforms/chrp/pci.c b/arch/powerpc/platforms/chrp/pci.c
index 00c52f27ef4f..8ef279ad36ad 100644
--- a/arch/powerpc/platforms/chrp/pci.c
+++ b/arch/powerpc/platforms/chrp/pci.c
@@ -204,9 +204,11 @@ static void __init setup_peg2(struct pci_controller *hose, struct device_node *d
204 struct device_node *root = find_path_device("/"); 204 struct device_node *root = find_path_device("/");
205 struct device_node *rtas; 205 struct device_node *rtas;
206 206
207 of_node_get(root);
207 rtas = of_find_node_by_name (root, "rtas"); 208 rtas = of_find_node_by_name (root, "rtas");
208 if (rtas) { 209 if (rtas) {
209 hose->ops = &rtas_pci_ops; 210 hose->ops = &rtas_pci_ops;
211 of_node_put(rtas);
210 } else { 212 } else {
211 printk ("RTAS supporting Pegasos OF not found, please upgrade" 213 printk ("RTAS supporting Pegasos OF not found, please upgrade"
212 " your firmware\n"); 214 " your firmware\n");
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c
index 2dc87aa5962f..e1fadbf49150 100644
--- a/arch/powerpc/platforms/chrp/setup.c
+++ b/arch/powerpc/platforms/chrp/setup.c
@@ -506,7 +506,7 @@ void __init chrp_init(void)
506 ppc_md.halt = rtas_halt; 506 ppc_md.halt = rtas_halt;
507 507
508 ppc_md.time_init = chrp_time_init; 508 ppc_md.time_init = chrp_time_init;
509 ppc_md.calibrate_decr = chrp_calibrate_decr; 509 ppc_md.calibrate_decr = generic_calibrate_decr;
510 510
511 /* this may get overridden with rtas routines later... */ 511 /* this may get overridden with rtas routines later... */
512 ppc_md.set_rtc_time = chrp_set_rtc_time; 512 ppc_md.set_rtc_time = chrp_set_rtc_time;
diff --git a/arch/powerpc/platforms/chrp/time.c b/arch/powerpc/platforms/chrp/time.c
index 36a0f97bb7b1..78df2e7ca88a 100644
--- a/arch/powerpc/platforms/chrp/time.c
+++ b/arch/powerpc/platforms/chrp/time.c
@@ -167,24 +167,3 @@ void chrp_get_rtc_time(struct rtc_time *tm)
167 tm->tm_mon = mon; 167 tm->tm_mon = mon;
168 tm->tm_year = year; 168 tm->tm_year = year;
169} 169}
170
171
172void __init chrp_calibrate_decr(void)
173{
174 struct device_node *cpu;
175 unsigned int freq, *fp;
176
177 /*
178 * The cpu node should have a timebase-frequency property
179 * to tell us the rate at which the decrementer counts.
180 */
181 freq = 16666000; /* hardcoded default */
182 cpu = find_type_devices("cpu");
183 if (cpu != 0) {
184 fp = (unsigned int *)
185 get_property(cpu, "timebase-frequency", NULL);
186 if (fp != 0)
187 freq = *fp;
188 }
189 ppc_tb_freq = freq;
190}
diff --git a/arch/powerpc/platforms/iseries/lpevents.c b/arch/powerpc/platforms/iseries/lpevents.c
index 0b885300d1d1..8ca7b9396355 100644
--- a/arch/powerpc/platforms/iseries/lpevents.c
+++ b/arch/powerpc/platforms/iseries/lpevents.c
@@ -184,6 +184,8 @@ void setup_hvlpevent_queue(void)
184{ 184{
185 void *eventStack; 185 void *eventStack;
186 186
187 spin_lock_init(&hvlpevent_queue.lock);
188
187 /* Allocate a page for the Event Stack. */ 189 /* Allocate a page for the Event Stack. */
188 eventStack = alloc_bootmem_pages(LpEventStackSize); 190 eventStack = alloc_bootmem_pages(LpEventStackSize);
189 memset(eventStack, 0, LpEventStackSize); 191 memset(eventStack, 0, LpEventStackSize);
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c
index 3f8790146b00..3ecc4a652d82 100644
--- a/arch/powerpc/platforms/iseries/setup.c
+++ b/arch/powerpc/platforms/iseries/setup.c
@@ -648,6 +648,7 @@ static void yield_shared_processor(void)
648 * here and let the timer_interrupt code sort out the actual time. 648 * here and let the timer_interrupt code sort out the actual time.
649 */ 649 */
650 get_lppaca()->int_dword.fields.decr_int = 1; 650 get_lppaca()->int_dword.fields.decr_int = 1;
651 ppc64_runlatch_on();
651 process_iSeries_events(); 652 process_iSeries_events();
652} 653}
653 654
diff --git a/arch/powerpc/platforms/maple/pci.c b/arch/powerpc/platforms/maple/pci.c
index 7d4099a34f92..85d6c93659cc 100644
--- a/arch/powerpc/platforms/maple/pci.c
+++ b/arch/powerpc/platforms/maple/pci.c
@@ -435,8 +435,8 @@ void __init maple_pci_init(void)
435 PCI_DN(np)->busno = 0xf0; 435 PCI_DN(np)->busno = 0xf0;
436 } 436 }
437 437
438 /* Tell pci.c to use the common resource allocation mecanism */ 438 /* Tell pci.c to not change any resource allocations. */
439 pci_probe_only = 0; 439 pci_probe_only = 1;
440 440
441 /* Allow all IO */ 441 /* Allow all IO */
442 io_page_mask = -1; 442 io_page_mask = -1;
diff --git a/arch/powerpc/platforms/powermac/feature.c b/arch/powerpc/platforms/powermac/feature.c
index 558dd0692092..bbe794891a20 100644
--- a/arch/powerpc/platforms/powermac/feature.c
+++ b/arch/powerpc/platforms/powermac/feature.c
@@ -1646,10 +1646,10 @@ static void intrepid_shutdown(struct macio_chip *macio, int sleep_mode)
1646 KL0_SCC_CELL_ENABLE); 1646 KL0_SCC_CELL_ENABLE);
1647 1647
1648 MACIO_BIC(KEYLARGO_FCR1, 1648 MACIO_BIC(KEYLARGO_FCR1,
1649 /*KL1_USB2_CELL_ENABLE |*/
1650 KL1_I2S0_CELL_ENABLE | KL1_I2S0_CLK_ENABLE_BIT | 1649 KL1_I2S0_CELL_ENABLE | KL1_I2S0_CLK_ENABLE_BIT |
1651 KL1_I2S0_ENABLE | KL1_I2S1_CELL_ENABLE | 1650 KL1_I2S0_ENABLE | KL1_I2S1_CELL_ENABLE |
1652 KL1_I2S1_CLK_ENABLE_BIT | KL1_I2S1_ENABLE); 1651 KL1_I2S1_CLK_ENABLE_BIT | KL1_I2S1_ENABLE |
1652 KL1_EIDE0_ENABLE);
1653 if (pmac_mb.board_flags & PMAC_MB_MOBILE) 1653 if (pmac_mb.board_flags & PMAC_MB_MOBILE)
1654 MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N); 1654 MACIO_BIC(KEYLARGO_FCR1, KL1_UIDE_RESET_N);
1655 1655
@@ -2183,7 +2183,7 @@ static struct pmac_mb_def pmac_mb_defs[] = {
2183 }, 2183 },
2184 { "PowerMac10,1", "Mac mini", 2184 { "PowerMac10,1", "Mac mini",
2185 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, 2185 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
2186 PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER, 2186 PMAC_MB_MAY_SLEEP,
2187 }, 2187 },
2188 { "iMac,1", "iMac (first generation)", 2188 { "iMac,1", "iMac (first generation)",
2189 PMAC_TYPE_ORIG_IMAC, paddington_features, 2189 PMAC_TYPE_ORIG_IMAC, paddington_features,
@@ -2295,11 +2295,11 @@ static struct pmac_mb_def pmac_mb_defs[] = {
2295 }, 2295 },
2296 { "PowerBook5,8", "PowerBook G4 15\"", 2296 { "PowerBook5,8", "PowerBook G4 15\"",
2297 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, 2297 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
2298 PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, 2298 PMAC_MB_MAY_SLEEP | PMAC_MB_MOBILE,
2299 }, 2299 },
2300 { "PowerBook5,9", "PowerBook G4 17\"", 2300 { "PowerBook5,9", "PowerBook G4 17\"",
2301 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, 2301 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
2302 PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, 2302 PMAC_MB_MAY_SLEEP | PMAC_MB_MOBILE,
2303 }, 2303 },
2304 { "PowerBook6,1", "PowerBook G4 12\"", 2304 { "PowerBook6,1", "PowerBook G4 12\"",
2305 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, 2305 PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
@@ -2491,9 +2491,7 @@ found:
2491 pmac_mb.model_id = PMAC_TYPE_COMET; 2491 pmac_mb.model_id = PMAC_TYPE_COMET;
2492 iounmap(mach_id_ptr); 2492 iounmap(mach_id_ptr);
2493 } 2493 }
2494#endif /* CONFIG_POWER4 */
2495 2494
2496#ifdef CONFIG_6xx
2497 /* Set default value of powersave_nap on machines that support it. 2495 /* Set default value of powersave_nap on machines that support it.
2498 * It appears that uninorth rev 3 has a problem with it, we don't 2496 * It appears that uninorth rev 3 has a problem with it, we don't
2499 * enable it on those. In theory, the flush-on-lock property is 2497 * enable it on those. In theory, the flush-on-lock property is
@@ -2522,10 +2520,11 @@ found:
2522 * NAP mode 2520 * NAP mode
2523 */ 2521 */
2524 powersave_lowspeed = 1; 2522 powersave_lowspeed = 1;
2525#endif /* CONFIG_6xx */ 2523
2526#ifdef CONFIG_POWER4 2524#else /* CONFIG_POWER4 */
2527 powersave_nap = 1; 2525 powersave_nap = 1;
2528#endif 2526#endif /* CONFIG_POWER4 */
2527
2529 /* Check for "mobile" machine */ 2528 /* Check for "mobile" machine */
2530 if (model && (strncmp(model, "PowerBook", 9) == 0 2529 if (model && (strncmp(model, "PowerBook", 9) == 0
2531 || strncmp(model, "iBook", 5) == 0)) 2530 || strncmp(model, "iBook", 5) == 0))
diff --git a/arch/powerpc/platforms/powermac/low_i2c.c b/arch/powerpc/platforms/powermac/low_i2c.c
index 535c802b369f..87eb6bb7f0e7 100644
--- a/arch/powerpc/platforms/powermac/low_i2c.c
+++ b/arch/powerpc/platforms/powermac/low_i2c.c
@@ -1052,8 +1052,7 @@ struct pmac_i2c_bus *pmac_i2c_adapter_to_bus(struct i2c_adapter *adapter)
1052} 1052}
1053EXPORT_SYMBOL_GPL(pmac_i2c_adapter_to_bus); 1053EXPORT_SYMBOL_GPL(pmac_i2c_adapter_to_bus);
1054 1054
1055extern int pmac_i2c_match_adapter(struct device_node *dev, 1055int pmac_i2c_match_adapter(struct device_node *dev, struct i2c_adapter *adapter)
1056 struct i2c_adapter *adapter)
1057{ 1056{
1058 struct pmac_i2c_bus *bus = pmac_i2c_find_bus(dev); 1057 struct pmac_i2c_bus *bus = pmac_i2c_find_bus(dev);
1059 1058
diff --git a/arch/powerpc/platforms/powermac/pci.c b/arch/powerpc/platforms/powermac/pci.c
index f671ed253901..de3f30e6b333 100644
--- a/arch/powerpc/platforms/powermac/pci.c
+++ b/arch/powerpc/platforms/powermac/pci.c
@@ -136,14 +136,14 @@ static void __init fixup_bus_range(struct device_node *bridge)
136 |(((unsigned int)(off)) & 0xFCUL) \ 136 |(((unsigned int)(off)) & 0xFCUL) \
137 |1UL) 137 |1UL)
138 138
139static unsigned long macrisc_cfg_access(struct pci_controller* hose, 139static volatile void __iomem *macrisc_cfg_access(struct pci_controller* hose,
140 u8 bus, u8 dev_fn, u8 offset) 140 u8 bus, u8 dev_fn, u8 offset)
141{ 141{
142 unsigned int caddr; 142 unsigned int caddr;
143 143
144 if (bus == hose->first_busno) { 144 if (bus == hose->first_busno) {
145 if (dev_fn < (11 << 3)) 145 if (dev_fn < (11 << 3))
146 return 0; 146 return NULL;
147 caddr = MACRISC_CFA0(dev_fn, offset); 147 caddr = MACRISC_CFA0(dev_fn, offset);
148 } else 148 } else
149 caddr = MACRISC_CFA1(bus, dev_fn, offset); 149 caddr = MACRISC_CFA1(bus, dev_fn, offset);
@@ -154,14 +154,14 @@ static unsigned long macrisc_cfg_access(struct pci_controller* hose,
154 } while (in_le32(hose->cfg_addr) != caddr); 154 } while (in_le32(hose->cfg_addr) != caddr);
155 155
156 offset &= has_uninorth ? 0x07 : 0x03; 156 offset &= has_uninorth ? 0x07 : 0x03;
157 return ((unsigned long)hose->cfg_data) + offset; 157 return hose->cfg_data + offset;
158} 158}
159 159
160static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn, 160static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn,
161 int offset, int len, u32 *val) 161 int offset, int len, u32 *val)
162{ 162{
163 struct pci_controller *hose; 163 struct pci_controller *hose;
164 unsigned long addr; 164 volatile void __iomem *addr;
165 165
166 hose = pci_bus_to_host(bus); 166 hose = pci_bus_to_host(bus);
167 if (hose == NULL) 167 if (hose == NULL)
@@ -177,13 +177,13 @@ static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn,
177 */ 177 */
178 switch (len) { 178 switch (len) {
179 case 1: 179 case 1:
180 *val = in_8((u8 *)addr); 180 *val = in_8(addr);
181 break; 181 break;
182 case 2: 182 case 2:
183 *val = in_le16((u16 *)addr); 183 *val = in_le16(addr);
184 break; 184 break;
185 default: 185 default:
186 *val = in_le32((u32 *)addr); 186 *val = in_le32(addr);
187 break; 187 break;
188 } 188 }
189 return PCIBIOS_SUCCESSFUL; 189 return PCIBIOS_SUCCESSFUL;
@@ -193,7 +193,7 @@ static int macrisc_write_config(struct pci_bus *bus, unsigned int devfn,
193 int offset, int len, u32 val) 193 int offset, int len, u32 val)
194{ 194{
195 struct pci_controller *hose; 195 struct pci_controller *hose;
196 unsigned long addr; 196 volatile void __iomem *addr;
197 197
198 hose = pci_bus_to_host(bus); 198 hose = pci_bus_to_host(bus);
199 if (hose == NULL) 199 if (hose == NULL)
@@ -209,16 +209,16 @@ static int macrisc_write_config(struct pci_bus *bus, unsigned int devfn,
209 */ 209 */
210 switch (len) { 210 switch (len) {
211 case 1: 211 case 1:
212 out_8((u8 *)addr, val); 212 out_8(addr, val);
213 (void) in_8((u8 *)addr); 213 (void) in_8(addr);
214 break; 214 break;
215 case 2: 215 case 2:
216 out_le16((u16 *)addr, val); 216 out_le16(addr, val);
217 (void) in_le16((u16 *)addr); 217 (void) in_le16(addr);
218 break; 218 break;
219 default: 219 default:
220 out_le32((u32 *)addr, val); 220 out_le32(addr, val);
221 (void) in_le32((u32 *)addr); 221 (void) in_le32(addr);
222 break; 222 break;
223 } 223 }
224 return PCIBIOS_SUCCESSFUL; 224 return PCIBIOS_SUCCESSFUL;
@@ -348,25 +348,23 @@ static int u3_ht_skip_device(struct pci_controller *hose,
348 + (((unsigned int)bus) << 16) \ 348 + (((unsigned int)bus) << 16) \
349 + 0x01000000UL) 349 + 0x01000000UL)
350 350
351static unsigned long u3_ht_cfg_access(struct pci_controller* hose, 351static volatile void __iomem *u3_ht_cfg_access(struct pci_controller* hose,
352 u8 bus, u8 devfn, u8 offset) 352 u8 bus, u8 devfn, u8 offset)
353{ 353{
354 if (bus == hose->first_busno) { 354 if (bus == hose->first_busno) {
355 /* For now, we don't self probe U3 HT bridge */ 355 /* For now, we don't self probe U3 HT bridge */
356 if (PCI_SLOT(devfn) == 0) 356 if (PCI_SLOT(devfn) == 0)
357 return 0; 357 return NULL;
358 return ((unsigned long)hose->cfg_data) + 358 return hose->cfg_data + U3_HT_CFA0(devfn, offset);
359 U3_HT_CFA0(devfn, offset);
360 } else 359 } else
361 return ((unsigned long)hose->cfg_data) + 360 return hose->cfg_data + U3_HT_CFA1(bus, devfn, offset);
362 U3_HT_CFA1(bus, devfn, offset);
363} 361}
364 362
365static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn, 363static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn,
366 int offset, int len, u32 *val) 364 int offset, int len, u32 *val)
367{ 365{
368 struct pci_controller *hose; 366 struct pci_controller *hose;
369 unsigned long addr; 367 volatile void __iomem *addr;
370 368
371 hose = pci_bus_to_host(bus); 369 hose = pci_bus_to_host(bus);
372 if (hose == NULL) 370 if (hose == NULL)
@@ -400,13 +398,13 @@ static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn,
400 */ 398 */
401 switch (len) { 399 switch (len) {
402 case 1: 400 case 1:
403 *val = in_8((u8 *)addr); 401 *val = in_8(addr);
404 break; 402 break;
405 case 2: 403 case 2:
406 *val = in_le16((u16 *)addr); 404 *val = in_le16(addr);
407 break; 405 break;
408 default: 406 default:
409 *val = in_le32((u32 *)addr); 407 *val = in_le32(addr);
410 break; 408 break;
411 } 409 }
412 return PCIBIOS_SUCCESSFUL; 410 return PCIBIOS_SUCCESSFUL;
@@ -416,7 +414,7 @@ static int u3_ht_write_config(struct pci_bus *bus, unsigned int devfn,
416 int offset, int len, u32 val) 414 int offset, int len, u32 val)
417{ 415{
418 struct pci_controller *hose; 416 struct pci_controller *hose;
419 unsigned long addr; 417 volatile void __iomem *addr;
420 418
421 hose = pci_bus_to_host(bus); 419 hose = pci_bus_to_host(bus);
422 if (hose == NULL) 420 if (hose == NULL)
@@ -442,16 +440,16 @@ static int u3_ht_write_config(struct pci_bus *bus, unsigned int devfn,
442 */ 440 */
443 switch (len) { 441 switch (len) {
444 case 1: 442 case 1:
445 out_8((u8 *)addr, val); 443 out_8(addr, val);
446 (void) in_8((u8 *)addr); 444 (void) in_8(addr);
447 break; 445 break;
448 case 2: 446 case 2:
449 out_le16((u16 *)addr, val); 447 out_le16(addr, val);
450 (void) in_le16((u16 *)addr); 448 (void) in_le16(addr);
451 break; 449 break;
452 default: 450 default:
453 out_le32((u32 *)addr, val); 451 out_le32((u32 __iomem *)addr, val);
454 (void) in_le32((u32 *)addr); 452 (void) in_le32(addr);
455 break; 453 break;
456 } 454 }
457 return PCIBIOS_SUCCESSFUL; 455 return PCIBIOS_SUCCESSFUL;
@@ -476,7 +474,7 @@ static struct pci_ops u3_ht_pci_ops =
476 |(((unsigned int)(off)) & 0xfcU) \ 474 |(((unsigned int)(off)) & 0xfcU) \
477 |1UL) 475 |1UL)
478 476
479static unsigned long u4_pcie_cfg_access(struct pci_controller* hose, 477static volatile void __iomem *u4_pcie_cfg_access(struct pci_controller* hose,
480 u8 bus, u8 dev_fn, int offset) 478 u8 bus, u8 dev_fn, int offset)
481{ 479{
482 unsigned int caddr; 480 unsigned int caddr;
@@ -492,14 +490,14 @@ static unsigned long u4_pcie_cfg_access(struct pci_controller* hose,
492 } while (in_le32(hose->cfg_addr) != caddr); 490 } while (in_le32(hose->cfg_addr) != caddr);
493 491
494 offset &= 0x03; 492 offset &= 0x03;
495 return ((unsigned long)hose->cfg_data) + offset; 493 return hose->cfg_data + offset;
496} 494}
497 495
498static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn, 496static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn,
499 int offset, int len, u32 *val) 497 int offset, int len, u32 *val)
500{ 498{
501 struct pci_controller *hose; 499 struct pci_controller *hose;
502 unsigned long addr; 500 volatile void __iomem *addr;
503 501
504 hose = pci_bus_to_host(bus); 502 hose = pci_bus_to_host(bus);
505 if (hose == NULL) 503 if (hose == NULL)
@@ -515,13 +513,13 @@ static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn,
515 */ 513 */
516 switch (len) { 514 switch (len) {
517 case 1: 515 case 1:
518 *val = in_8((u8 *)addr); 516 *val = in_8(addr);
519 break; 517 break;
520 case 2: 518 case 2:
521 *val = in_le16((u16 *)addr); 519 *val = in_le16(addr);
522 break; 520 break;
523 default: 521 default:
524 *val = in_le32((u32 *)addr); 522 *val = in_le32(addr);
525 break; 523 break;
526 } 524 }
527 return PCIBIOS_SUCCESSFUL; 525 return PCIBIOS_SUCCESSFUL;
@@ -531,7 +529,7 @@ static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
531 int offset, int len, u32 val) 529 int offset, int len, u32 val)
532{ 530{
533 struct pci_controller *hose; 531 struct pci_controller *hose;
534 unsigned long addr; 532 volatile void __iomem *addr;
535 533
536 hose = pci_bus_to_host(bus); 534 hose = pci_bus_to_host(bus);
537 if (hose == NULL) 535 if (hose == NULL)
@@ -547,16 +545,16 @@ static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
547 */ 545 */
548 switch (len) { 546 switch (len) {
549 case 1: 547 case 1:
550 out_8((u8 *)addr, val); 548 out_8(addr, val);
551 (void) in_8((u8 *)addr); 549 (void) in_8(addr);
552 break; 550 break;
553 case 2: 551 case 2:
554 out_le16((u16 *)addr, val); 552 out_le16(addr, val);
555 (void) in_le16((u16 *)addr); 553 (void) in_le16(addr);
556 break; 554 break;
557 default: 555 default:
558 out_le32((u32 *)addr, val); 556 out_le32(addr, val);
559 (void) in_le32((u32 *)addr); 557 (void) in_le32(addr);
560 break; 558 break;
561 } 559 }
562 return PCIBIOS_SUCCESSFUL; 560 return PCIBIOS_SUCCESSFUL;
@@ -773,8 +771,7 @@ static void __init setup_u3_ht(struct pci_controller* hose)
773 * the reg address cell, we shall fix that by killing struct 771 * the reg address cell, we shall fix that by killing struct
774 * reg_property and using some accessor functions instead 772 * reg_property and using some accessor functions instead
775 */ 773 */
776 hose->cfg_data = (volatile unsigned char *)ioremap(0xf2000000, 774 hose->cfg_data = ioremap(0xf2000000, 0x02000000);
777 0x02000000);
778 775
779 /* 776 /*
780 * /ht node doesn't expose a "ranges" property, so we "remove" 777 * /ht node doesn't expose a "ranges" property, so we "remove"
diff --git a/arch/powerpc/platforms/powermac/pfunc_base.c b/arch/powerpc/platforms/powermac/pfunc_base.c
index 4ffd2a9832a0..9b7150f10414 100644
--- a/arch/powerpc/platforms/powermac/pfunc_base.c
+++ b/arch/powerpc/platforms/powermac/pfunc_base.c
@@ -9,7 +9,12 @@
9#include <asm/pmac_feature.h> 9#include <asm/pmac_feature.h>
10#include <asm/pmac_pfunc.h> 10#include <asm/pmac_pfunc.h>
11 11
12#undef DEBUG
13#ifdef DEBUG
12#define DBG(fmt...) printk(fmt) 14#define DBG(fmt...) printk(fmt)
15#else
16#define DBG(fmt...)
17#endif
13 18
14static irqreturn_t macio_gpio_irq(int irq, void *data, struct pt_regs *regs) 19static irqreturn_t macio_gpio_irq(int irq, void *data, struct pt_regs *regs)
15{ 20{
diff --git a/arch/powerpc/platforms/powermac/pfunc_core.c b/arch/powerpc/platforms/powermac/pfunc_core.c
index c32c623001dc..4baa75b1d36f 100644
--- a/arch/powerpc/platforms/powermac/pfunc_core.c
+++ b/arch/powerpc/platforms/powermac/pfunc_core.c
@@ -20,7 +20,13 @@
20#define LOG_PARSE(fmt...) 20#define LOG_PARSE(fmt...)
21#define LOG_ERROR(fmt...) printk(fmt) 21#define LOG_ERROR(fmt...) printk(fmt)
22#define LOG_BLOB(t,b,c) 22#define LOG_BLOB(t,b,c)
23
24#undef DEBUG
25#ifdef DEBUG
23#define DBG(fmt...) printk(fmt) 26#define DBG(fmt...) printk(fmt)
27#else
28#define DBG(fmt...)
29#endif
24 30
25/* Command numbers */ 31/* Command numbers */
26#define PMF_CMD_LIST 0 32#define PMF_CMD_LIST 0
@@ -862,21 +868,28 @@ int pmf_register_irq_client(struct device_node *target,
862 spin_unlock_irqrestore(&pmf_lock, flags); 868 spin_unlock_irqrestore(&pmf_lock, flags);
863 return -ENODEV; 869 return -ENODEV;
864 } 870 }
871 if (list_empty(&func->irq_clients))
872 func->dev->handlers->irq_enable(func);
865 list_add(&client->link, &func->irq_clients); 873 list_add(&client->link, &func->irq_clients);
874 client->func = func;
866 spin_unlock_irqrestore(&pmf_lock, flags); 875 spin_unlock_irqrestore(&pmf_lock, flags);
867 876
868 return 0; 877 return 0;
869} 878}
870EXPORT_SYMBOL_GPL(pmf_register_irq_client); 879EXPORT_SYMBOL_GPL(pmf_register_irq_client);
871 880
872void pmf_unregister_irq_client(struct device_node *np, 881void pmf_unregister_irq_client(struct pmf_irq_client *client)
873 const char *name,
874 struct pmf_irq_client *client)
875{ 882{
883 struct pmf_function *func = client->func;
876 unsigned long flags; 884 unsigned long flags;
877 885
886 BUG_ON(func == NULL);
887
878 spin_lock_irqsave(&pmf_lock, flags); 888 spin_lock_irqsave(&pmf_lock, flags);
889 client->func = NULL;
879 list_del(&client->link); 890 list_del(&client->link);
891 if (list_empty(&func->irq_clients))
892 func->dev->handlers->irq_disable(func);
880 spin_unlock_irqrestore(&pmf_lock, flags); 893 spin_unlock_irqrestore(&pmf_lock, flags);
881} 894}
882EXPORT_SYMBOL_GPL(pmf_unregister_irq_client); 895EXPORT_SYMBOL_GPL(pmf_unregister_irq_client);
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c
index 89c4c3636161..29c2946f1c77 100644
--- a/arch/powerpc/platforms/powermac/setup.c
+++ b/arch/powerpc/platforms/powermac/setup.c
@@ -82,8 +82,6 @@
82 82
83#undef SHOW_GATWICK_IRQS 83#undef SHOW_GATWICK_IRQS
84 84
85unsigned char drive_info;
86
87int ppc_override_l2cr = 0; 85int ppc_override_l2cr = 0;
88int ppc_override_l2cr_value; 86int ppc_override_l2cr_value;
89int has_l2cache = 0; 87int has_l2cache = 0;
@@ -623,10 +621,6 @@ static void __init pmac_init_early(void)
623 /* Probe motherboard chipset */ 621 /* Probe motherboard chipset */
624 pmac_feature_init(); 622 pmac_feature_init();
625 623
626 /* We can NAP */
627 powersave_nap = 1;
628 printk(KERN_INFO "Using native/NAP idle loop\n");
629
630 /* Initialize debug stuff */ 624 /* Initialize debug stuff */
631 udbg_scc_init(!!strstr(cmd_line, "sccdbg")); 625 udbg_scc_init(!!strstr(cmd_line, "sccdbg"));
632 udbg_adb_init(!!strstr(cmd_line, "btextdbg")); 626 udbg_adb_init(!!strstr(cmd_line, "btextdbg"));
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
index 0df2cdcd805c..6d64a9bf3474 100644
--- a/arch/powerpc/platforms/powermac/smp.c
+++ b/arch/powerpc/platforms/powermac/smp.c
@@ -435,7 +435,7 @@ struct smp_ops_t psurge_smp_ops = {
435 */ 435 */
436 436
437static void (*pmac_tb_freeze)(int freeze); 437static void (*pmac_tb_freeze)(int freeze);
438static unsigned long timebase; 438static u64 timebase;
439static int tb_req; 439static int tb_req;
440 440
441static void smp_core99_give_timebase(void) 441static void smp_core99_give_timebase(void)
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index e3fc3407bb1f..a57032cf6f1b 100644
--- a/arch/powerpc/platforms/pseries/Kconfig
+++ b/arch/powerpc/platforms/pseries/Kconfig
@@ -9,13 +9,6 @@ config PPC_SPLPAR
9 processors, that is, which share physical processors between 9 processors, that is, which share physical processors between
10 two or more partitions. 10 two or more partitions.
11 11
12config HMT
13 bool "Hardware multithreading"
14 depends on SMP && PPC_PSERIES && BROKEN
15 help
16 This option enables hardware multithreading on RS64 cpus.
17 pSeries systems p620 and p660 have such a cpu type.
18
19config EEH 12config EEH
20 bool "PCI Extended Error Handling (EEH)" if EMBEDDED 13 bool "PCI Extended Error Handling (EEH)" if EMBEDDED
21 depends on PPC_PSERIES 14 depends on PPC_PSERIES
@@ -26,7 +19,7 @@ config SCANLOG
26 depends on RTAS_PROC && PPC_PSERIES 19 depends on RTAS_PROC && PPC_PSERIES
27 20
28config LPARCFG 21config LPARCFG
29 tristate "LPAR Configuration Data" 22 bool "LPAR Configuration Data"
30 depends on PPC_PSERIES || PPC_ISERIES 23 depends on PPC_PSERIES || PPC_ISERIES
31 help 24 help
32 Provide system capacity information via human readable 25 Provide system capacity information via human readable
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index 83578313ee7e..2ab9dcdfb415 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -893,6 +893,20 @@ void eeh_add_device_tree_early(struct device_node *dn)
893} 893}
894EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); 894EXPORT_SYMBOL_GPL(eeh_add_device_tree_early);
895 895
896void eeh_add_device_tree_late(struct pci_bus *bus)
897{
898 struct pci_dev *dev;
899
900 list_for_each_entry(dev, &bus->devices, bus_list) {
901 eeh_add_device_late(dev);
902 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
903 struct pci_bus *subbus = dev->subordinate;
904 if (subbus)
905 eeh_add_device_tree_late(subbus);
906 }
907 }
908}
909
896/** 910/**
897 * eeh_add_device_late - perform EEH initialization for the indicated pci device 911 * eeh_add_device_late - perform EEH initialization for the indicated pci device
898 * @dev: pci device for which to set up EEH 912 * @dev: pci device for which to set up EEH
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c
index 6373372932ba..b811d5ff92fe 100644
--- a/arch/powerpc/platforms/pseries/eeh_driver.c
+++ b/arch/powerpc/platforms/pseries/eeh_driver.c
@@ -37,7 +37,7 @@
37 37
38static inline const char * pcid_name (struct pci_dev *pdev) 38static inline const char * pcid_name (struct pci_dev *pdev)
39{ 39{
40 if (pdev->dev.driver) 40 if (pdev && pdev->dev.driver)
41 return pdev->dev.driver->name; 41 return pdev->dev.driver->name;
42 return ""; 42 return "";
43} 43}
@@ -333,7 +333,7 @@ void handle_eeh_events (struct eeh_event *event)
333 rc = eeh_reset_device(frozen_pdn, NULL); 333 rc = eeh_reset_device(frozen_pdn, NULL);
334 if (rc) 334 if (rc)
335 goto hard_fail; 335 goto hard_fail;
336 pci_walk_bus(frozen_bus, eeh_report_reset, 0); 336 pci_walk_bus(frozen_bus, eeh_report_reset, NULL);
337 } 337 }
338 338
339 /* If all devices reported they can proceed, the re-enable PIO */ 339 /* If all devices reported they can proceed, the re-enable PIO */
@@ -342,11 +342,11 @@ void handle_eeh_events (struct eeh_event *event)
342 rc = eeh_reset_device(frozen_pdn, NULL); 342 rc = eeh_reset_device(frozen_pdn, NULL);
343 if (rc) 343 if (rc)
344 goto hard_fail; 344 goto hard_fail;
345 pci_walk_bus(frozen_bus, eeh_report_reset, 0); 345 pci_walk_bus(frozen_bus, eeh_report_reset, NULL);
346 } 346 }
347 347
348 /* Tell all device drivers that they can resume operations */ 348 /* Tell all device drivers that they can resume operations */
349 pci_walk_bus(frozen_bus, eeh_report_resume, 0); 349 pci_walk_bus(frozen_bus, eeh_report_resume, NULL);
350 350
351 return; 351 return;
352 352
@@ -367,7 +367,7 @@ hard_fail:
367 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); 367 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */);
368 368
369 /* Notify all devices that they're about to go down. */ 369 /* Notify all devices that they're about to go down. */
370 pci_walk_bus(frozen_bus, eeh_report_failure, 0); 370 pci_walk_bus(frozen_bus, eeh_report_failure, NULL);
371 371
372 /* Shut down the device drivers for good. */ 372 /* Shut down the device drivers for good. */
373 pcibios_remove_pci_devices(frozen_bus); 373 pcibios_remove_pci_devices(frozen_bus);
diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c
index 21934784f936..44abdeb9ca03 100644
--- a/arch/powerpc/platforms/pseries/pci_dlpar.c
+++ b/arch/powerpc/platforms/pseries/pci_dlpar.c
@@ -27,6 +27,7 @@
27 27
28#include <linux/pci.h> 28#include <linux/pci.h>
29#include <asm/pci-bridge.h> 29#include <asm/pci-bridge.h>
30#include <asm/ppc-pci.h>
30 31
31static struct pci_bus * 32static struct pci_bus *
32find_bus_among_children(struct pci_bus *bus, 33find_bus_among_children(struct pci_bus *bus,
@@ -58,6 +59,7 @@ pcibios_find_pci_bus(struct device_node *dn)
58 59
59 return find_bus_among_children(pdn->phb->bus, dn); 60 return find_bus_among_children(pdn->phb->bus, dn);
60} 61}
62EXPORT_SYMBOL_GPL(pcibios_find_pci_bus);
61 63
62/** 64/**
63 * pcibios_remove_pci_devices - remove all devices under this bus 65 * pcibios_remove_pci_devices - remove all devices under this bus
@@ -105,14 +107,16 @@ pcibios_fixup_new_pci_devices(struct pci_bus *bus, int fix_bus)
105 } 107 }
106 } 108 }
107 } 109 }
110
111 eeh_add_device_tree_late(bus);
108} 112}
113EXPORT_SYMBOL_GPL(pcibios_fixup_new_pci_devices);
109 114
110static int 115static int
111pcibios_pci_config_bridge(struct pci_dev *dev) 116pcibios_pci_config_bridge(struct pci_dev *dev)
112{ 117{
113 u8 sec_busno; 118 u8 sec_busno;
114 struct pci_bus *child_bus; 119 struct pci_bus *child_bus;
115 struct pci_dev *child_dev;
116 120
117 /* Get busno of downstream bus */ 121 /* Get busno of downstream bus */
118 pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno); 122 pci_read_config_byte(dev, PCI_SECONDARY_BUS, &sec_busno);
@@ -127,10 +131,6 @@ pcibios_pci_config_bridge(struct pci_dev *dev)
127 131
128 pci_scan_child_bus(child_bus); 132 pci_scan_child_bus(child_bus);
129 133
130 list_for_each_entry(child_dev, &child_bus->devices, bus_list) {
131 eeh_add_device_late(child_dev);
132 }
133
134 /* Fixup new pci devices without touching bus struct */ 134 /* Fixup new pci devices without touching bus struct */
135 pcibios_fixup_new_pci_devices(child_bus, 0); 135 pcibios_fixup_new_pci_devices(child_bus, 0);
136 136
@@ -158,17 +158,52 @@ pcibios_add_pci_devices(struct pci_bus * bus)
158 158
159 eeh_add_device_tree_early(dn); 159 eeh_add_device_tree_early(dn);
160 160
161 /* pci_scan_slot should find all children */ 161 if (_machine == PLATFORM_PSERIES_LPAR) {
162 slotno = PCI_SLOT(PCI_DN(dn->child)->devfn); 162 /* use ofdt-based probe */
163 num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0)); 163 of_scan_bus(dn, bus);
164 if (num) { 164 if (!list_empty(&bus->devices)) {
165 pcibios_fixup_new_pci_devices(bus, 1); 165 pcibios_fixup_new_pci_devices(bus, 0);
166 pci_bus_add_devices(bus); 166 pci_bus_add_devices(bus);
167 } 167 }
168 } else {
169 /* use legacy probe */
170 slotno = PCI_SLOT(PCI_DN(dn->child)->devfn);
171 num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0));
172 if (num) {
173 pcibios_fixup_new_pci_devices(bus, 1);
174 pci_bus_add_devices(bus);
175 }
168 176
169 list_for_each_entry(dev, &bus->devices, bus_list) { 177 list_for_each_entry(dev, &bus->devices, bus_list)
170 eeh_add_device_late (dev); 178 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
171 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) 179 pcibios_pci_config_bridge(dev);
172 pcibios_pci_config_bridge(dev);
173 } 180 }
174} 181}
182EXPORT_SYMBOL_GPL(pcibios_add_pci_devices);
183
184struct pci_controller * __devinit init_phb_dynamic(struct device_node *dn)
185{
186 struct pci_controller *phb;
187 int primary;
188
189 primary = list_empty(&hose_list);
190 phb = pcibios_alloc_controller(dn);
191 if (!phb)
192 return NULL;
193 setup_phb(dn, phb);
194 pci_process_bridge_OF_ranges(phb, dn, 0);
195
196 pci_setup_phb_io_dynamic(phb, primary);
197
198 pci_devs_phb_init_dynamic(phb);
199
200 if (dn->child)
201 eeh_add_device_tree_early(dn);
202
203 scan_phb(phb);
204 pcibios_fixup_new_pci_devices(phb->bus, 0);
205 pci_bus_add_devices(phb->bus);
206
207 return phb;
208}
209EXPORT_SYMBOL_GPL(init_phb_dynamic);
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index da6cebaf72cd..9edeca83f434 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -585,7 +585,7 @@ static int pSeries_pci_probe_mode(struct pci_bus *bus)
585static void pseries_kexec_cpu_down(int crash_shutdown, int secondary) 585static void pseries_kexec_cpu_down(int crash_shutdown, int secondary)
586{ 586{
587 /* Don't risk a hypervisor call if we're crashing */ 587 /* Don't risk a hypervisor call if we're crashing */
588 if (!crash_shutdown) { 588 if (firmware_has_feature(FW_FEATURE_SPLPAR) && !crash_shutdown) {
589 unsigned long vpa = __pa(get_lppaca()); 589 unsigned long vpa = __pa(get_lppaca());
590 590
591 if (unregister_vpa(hard_smp_processor_id(), vpa)) { 591 if (unregister_vpa(hard_smp_processor_id(), vpa)) {
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c
index 8e6b1ed1396e..8d710af50756 100644
--- a/arch/powerpc/platforms/pseries/smp.c
+++ b/arch/powerpc/platforms/pseries/smp.c
@@ -292,7 +292,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu)
292 if (start_cpu == RTAS_UNKNOWN_SERVICE) 292 if (start_cpu == RTAS_UNKNOWN_SERVICE)
293 return 1; 293 return 1;
294 294
295 status = rtas_call(start_cpu, 3, 1, NULL, pcpu, start_here, lcpu); 295 status = rtas_call(start_cpu, 3, 1, NULL, pcpu, start_here, pcpu);
296 if (status != 0) { 296 if (status != 0) {
297 printk(KERN_ERR "start-cpu failed: %i\n", status); 297 printk(KERN_ERR "start-cpu failed: %i\n", status);
298 return 0; 298 return 0;
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index 977de9db8754..6298264efe36 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -59,7 +59,7 @@ static unsigned long dart_tablesize;
59static u32 *dart_vbase; 59static u32 *dart_vbase;
60 60
61/* Mapped base address for the dart */ 61/* Mapped base address for the dart */
62static unsigned int *__iomem dart; 62static unsigned int __iomem *dart;
63 63
64/* Dummy val that entries are set to when unused */ 64/* Dummy val that entries are set to when unused */
65static unsigned int dart_emptyval; 65static unsigned int dart_emptyval;
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 4f26304d0263..7dcdfcb3c984 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -234,7 +234,7 @@ static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source,
234 spin_lock_irqsave(&mpic->fixup_lock, flags); 234 spin_lock_irqsave(&mpic->fixup_lock, flags);
235 writeb(0x10 + 2 * fixup->index, fixup->base + 2); 235 writeb(0x10 + 2 * fixup->index, fixup->base + 2);
236 tmp = readl(fixup->base + 4); 236 tmp = readl(fixup->base + 4);
237 tmp &= ~1U; 237 tmp |= 1;
238 writel(tmp, fixup->base + 4); 238 writel(tmp, fixup->base + 4);
239 spin_unlock_irqrestore(&mpic->fixup_lock, flags); 239 spin_unlock_irqrestore(&mpic->fixup_lock, flags);
240} 240}
@@ -446,14 +446,15 @@ static unsigned int mpic_startup_irq(unsigned int irq)
446#ifdef CONFIG_MPIC_BROKEN_U3 446#ifdef CONFIG_MPIC_BROKEN_U3
447 struct mpic *mpic = mpic_from_irq(irq); 447 struct mpic *mpic = mpic_from_irq(irq);
448 unsigned int src = irq - mpic->irq_offset; 448 unsigned int src = irq - mpic->irq_offset;
449#endif /* CONFIG_MPIC_BROKEN_U3 */
450
451 mpic_enable_irq(irq);
449 452
453#ifdef CONFIG_MPIC_BROKEN_U3
450 if (mpic_is_ht_interrupt(mpic, src)) 454 if (mpic_is_ht_interrupt(mpic, src))
451 mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status); 455 mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status);
452
453#endif /* CONFIG_MPIC_BROKEN_U3 */ 456#endif /* CONFIG_MPIC_BROKEN_U3 */
454 457
455 mpic_enable_irq(irq);
456
457 return 0; 458 return 0;
458} 459}
459 460
diff --git a/arch/ppc/kernel/asm-offsets.c b/arch/ppc/kernel/asm-offsets.c
index 7964bf660e92..77e4dc780f8c 100644
--- a/arch/ppc/kernel/asm-offsets.c
+++ b/arch/ppc/kernel/asm-offsets.c
@@ -131,7 +131,6 @@ main(void)
131 DEFINE(CPU_SPEC_FEATURES, offsetof(struct cpu_spec, cpu_features)); 131 DEFINE(CPU_SPEC_FEATURES, offsetof(struct cpu_spec, cpu_features));
132 DEFINE(CPU_SPEC_SETUP, offsetof(struct cpu_spec, cpu_setup)); 132 DEFINE(CPU_SPEC_SETUP, offsetof(struct cpu_spec, cpu_setup));
133 133
134 DEFINE(TI_SIGFRAME, offsetof(struct thread_info, nvgprs_frame));
135 DEFINE(TI_TASK, offsetof(struct thread_info, task)); 134 DEFINE(TI_TASK, offsetof(struct thread_info, task));
136 DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain)); 135 DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain));
137 DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); 136 DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
diff --git a/arch/ppc/kernel/entry.S b/arch/ppc/kernel/entry.S
index a48b950722a1..3a2815978488 100644
--- a/arch/ppc/kernel/entry.S
+++ b/arch/ppc/kernel/entry.S
@@ -227,7 +227,7 @@ ret_from_syscall:
227 MTMSRD(r10) 227 MTMSRD(r10)
228 lwz r9,TI_FLAGS(r12) 228 lwz r9,TI_FLAGS(r12)
229 li r8,-_LAST_ERRNO 229 li r8,-_LAST_ERRNO
230 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL) 230 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
231 bne- syscall_exit_work 231 bne- syscall_exit_work
232 cmplw 0,r3,r8 232 cmplw 0,r3,r8
233 blt+ syscall_exit_cont 233 blt+ syscall_exit_cont
@@ -287,8 +287,10 @@ syscall_dotrace:
287 287
288syscall_exit_work: 288syscall_exit_work:
289 andi. r0,r9,_TIF_RESTOREALL 289 andi. r0,r9,_TIF_RESTOREALL
290 bne- 2f 290 beq+ 0f
291 cmplw 0,r3,r8 291 REST_NVGPRS(r1)
292 b 2f
2930: cmplw 0,r3,r8
292 blt+ 1f 294 blt+ 1f
293 andi. r0,r9,_TIF_NOERROR 295 andi. r0,r9,_TIF_NOERROR
294 bne- 1f 296 bne- 1f
@@ -302,9 +304,7 @@ syscall_exit_work:
3022: andi. r0,r9,(_TIF_PERSYSCALL_MASK) 3042: andi. r0,r9,(_TIF_PERSYSCALL_MASK)
303 beq 4f 305 beq 4f
304 306
305 /* Clear per-syscall TIF flags if any are set, but _leave_ 307 /* Clear per-syscall TIF flags if any are set. */
306 _TIF_SAVE_NVGPRS set in r9 since we haven't dealt with that
307 yet. */
308 308
309 li r11,_TIF_PERSYSCALL_MASK 309 li r11,_TIF_PERSYSCALL_MASK
310 addi r12,r12,TI_FLAGS 310 addi r12,r12,TI_FLAGS
@@ -318,8 +318,13 @@ syscall_exit_work:
318 subi r12,r12,TI_FLAGS 318 subi r12,r12,TI_FLAGS
319 319
3204: /* Anything which requires enabling interrupts? */ 3204: /* Anything which requires enabling interrupts? */
321 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP|_TIF_SAVE_NVGPRS) 321 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
322 beq 7f 322 beq ret_from_except
323
324 /* Re-enable interrupts */
325 ori r10,r10,MSR_EE
326 SYNC
327 MTMSRD(r10)
323 328
324 /* Save NVGPRS if they're not saved already */ 329 /* Save NVGPRS if they're not saved already */
325 lwz r4,TRAP(r1) 330 lwz r4,TRAP(r1)
@@ -328,71 +333,11 @@ syscall_exit_work:
328 SAVE_NVGPRS(r1) 333 SAVE_NVGPRS(r1)
329 li r4,0xc00 334 li r4,0xc00
330 stw r4,TRAP(r1) 335 stw r4,TRAP(r1)
331 3365:
332 /* Re-enable interrupts */
3335: ori r10,r10,MSR_EE
334 SYNC
335 MTMSRD(r10)
336
337 andi. r0,r9,_TIF_SAVE_NVGPRS
338 bne save_user_nvgprs
339
340save_user_nvgprs_cont:
341 andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
342 beq 7f
343
344 addi r3,r1,STACK_FRAME_OVERHEAD 337 addi r3,r1,STACK_FRAME_OVERHEAD
345 bl do_syscall_trace_leave 338 bl do_syscall_trace_leave
346 REST_NVGPRS(r1) 339 b ret_from_except_full
347
3486: lwz r3,GPR3(r1)
349 LOAD_MSR_KERNEL(r10,MSR_KERNEL) /* doesn't include MSR_EE */
350 SYNC
351 MTMSRD(r10) /* disable interrupts again */
352 rlwinm r12,r1,0,0,18 /* current_thread_info() */
353 lwz r9,TI_FLAGS(r12)
3547:
355 andi. r0,r9,_TIF_NEED_RESCHED
356 bne 8f
357 lwz r5,_MSR(r1)
358 andi. r5,r5,MSR_PR
359 beq ret_from_except
360 andi. r0,r9,_TIF_SIGPENDING
361 beq ret_from_except
362 b do_user_signal
3638:
364 ori r10,r10,MSR_EE
365 SYNC
366 MTMSRD(r10) /* re-enable interrupts */
367 bl schedule
368 b 6b
369
370save_user_nvgprs:
371 lwz r8,TI_SIGFRAME(r12)
372
373.macro savewords start, end
374 1: stw \start,4*(\start)(r8)
375 .section __ex_table,"a"
376 .align 2
377 .long 1b,save_user_nvgprs_fault
378 .previous
379 .if \end - \start
380 savewords "(\start+1)",\end
381 .endif
382.endm
383 savewords 14,31
384 b save_user_nvgprs_cont
385
386
387save_user_nvgprs_fault:
388 li r3,11 /* SIGSEGV */
389 lwz r4,TI_TASK(r12)
390 bl force_sigsegv
391 340
392 rlwinm r12,r1,0,0,18 /* current_thread_info() */
393 lwz r9,TI_FLAGS(r12)
394 b save_user_nvgprs_cont
395
396#ifdef SHOW_SYSCALLS 341#ifdef SHOW_SYSCALLS
397do_show_syscall: 342do_show_syscall:
398#ifdef SHOW_SYSCALLS_TASK 343#ifdef SHOW_SYSCALLS_TASK
@@ -490,6 +435,14 @@ ppc_clone:
490 stw r0,TRAP(r1) /* register set saved */ 435 stw r0,TRAP(r1) /* register set saved */
491 b sys_clone 436 b sys_clone
492 437
438 .globl ppc_swapcontext
439ppc_swapcontext:
440 SAVE_NVGPRS(r1)
441 lwz r0,TRAP(r1)
442 rlwinm r0,r0,0,0,30 /* clear LSB to indicate full */
443 stw r0,TRAP(r1) /* register set saved */
444 b sys_swapcontext
445
493/* 446/*
494 * Top-level page fault handling. 447 * Top-level page fault handling.
495 * This is in assembler because if do_page_fault tells us that 448 * This is in assembler because if do_page_fault tells us that
@@ -683,7 +636,7 @@ user_exc_return: /* r10 contains MSR_KERNEL here */
683 /* Check current_thread_info()->flags */ 636 /* Check current_thread_info()->flags */
684 rlwinm r9,r1,0,0,18 637 rlwinm r9,r1,0,0,18
685 lwz r9,TI_FLAGS(r9) 638 lwz r9,TI_FLAGS(r9)
686 andi. r0,r9,(_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_RESTOREALL) 639 andi. r0,r9,(_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK|_TIF_NEED_RESCHED)
687 bne do_work 640 bne do_work
688 641
689restore_user: 642restore_user:
diff --git a/arch/ppc/kernel/head.S b/arch/ppc/kernel/head.S
index c5a890dca9cf..53ea845fb911 100644
--- a/arch/ppc/kernel/head.S
+++ b/arch/ppc/kernel/head.S
@@ -751,6 +751,7 @@ AltiVecUnavailable:
751#ifdef CONFIG_ALTIVEC 751#ifdef CONFIG_ALTIVEC
752 bne load_up_altivec /* if from user, just load it up */ 752 bne load_up_altivec /* if from user, just load it up */
753#endif /* CONFIG_ALTIVEC */ 753#endif /* CONFIG_ALTIVEC */
754 addi r3,r1,STACK_FRAME_OVERHEAD
754 EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) 755 EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception)
755 756
756#ifdef CONFIG_PPC64BRIDGE 757#ifdef CONFIG_PPC64BRIDGE
diff --git a/arch/ppc/kernel/head_8xx.S b/arch/ppc/kernel/head_8xx.S
index 3e6ca7f5843f..c1e89ad0684d 100644
--- a/arch/ppc/kernel/head_8xx.S
+++ b/arch/ppc/kernel/head_8xx.S
@@ -810,13 +810,16 @@ initial_mmu:
810 mtspr SPRN_MD_TWC, r9 810 mtspr SPRN_MD_TWC, r9
811 li r11, MI_BOOTINIT /* Create RPN for address 0 */ 811 li r11, MI_BOOTINIT /* Create RPN for address 0 */
812 addis r11, r11, 0x0080 /* Add 8M */ 812 addis r11, r11, 0x0080 /* Add 8M */
813 mtspr SPRN_MD_RPN, r8 813 mtspr SPRN_MD_RPN, r11
814
815 addi r10, r10, 0x0100
816 mtspr SPRN_MD_CTR, r10
814 817
815 addis r8, r8, 0x0080 /* Add 8M */ 818 addis r8, r8, 0x0080 /* Add 8M */
816 mtspr SPRN_MD_EPN, r8 819 mtspr SPRN_MD_EPN, r8
817 mtspr SPRN_MD_TWC, r9 820 mtspr SPRN_MD_TWC, r9
818 addis r11, r11, 0x0080 /* Add 8M */ 821 addis r11, r11, 0x0080 /* Add 8M */
819 mtspr SPRN_MD_RPN, r8 822 mtspr SPRN_MD_RPN, r11
820#endif 823#endif
821 824
822 /* Since the cache is enabled according to the information we 825 /* Since the cache is enabled according to the information we
diff --git a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S
index c3427eed8345..5a936566fd61 100644
--- a/arch/ppc/kernel/misc.S
+++ b/arch/ppc/kernel/misc.S
@@ -1048,286 +1048,3 @@ _GLOBAL(name) \
1048 blr 1048 blr
1049 1049
1050SYSCALL(execve) 1050SYSCALL(execve)
1051
1052/* Why isn't this a) automatic, b) written in 'C'? */
1053 .data
1054 .align 4
1055_GLOBAL(sys_call_table)
1056 .long sys_restart_syscall /* 0 */
1057 .long sys_exit
1058 .long ppc_fork
1059 .long sys_read
1060 .long sys_write
1061 .long sys_open /* 5 */
1062 .long sys_close
1063 .long sys_waitpid
1064 .long sys_creat
1065 .long sys_link
1066 .long sys_unlink /* 10 */
1067 .long sys_execve
1068 .long sys_chdir
1069 .long sys_time
1070 .long sys_mknod
1071 .long sys_chmod /* 15 */
1072 .long sys_lchown
1073 .long sys_ni_syscall /* old break syscall holder */
1074 .long sys_stat
1075 .long sys_lseek
1076 .long sys_getpid /* 20 */
1077 .long sys_mount
1078 .long sys_oldumount
1079 .long sys_setuid
1080 .long sys_getuid
1081 .long sys_stime /* 25 */
1082 .long sys_ptrace
1083 .long sys_alarm
1084 .long sys_fstat
1085 .long sys_pause
1086 .long sys_utime /* 30 */
1087 .long sys_ni_syscall /* old stty syscall holder */
1088 .long sys_ni_syscall /* old gtty syscall holder */
1089 .long sys_access
1090 .long sys_nice
1091 .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */
1092 .long sys_sync
1093 .long sys_kill
1094 .long sys_rename
1095 .long sys_mkdir
1096 .long sys_rmdir /* 40 */
1097 .long sys_dup
1098 .long sys_pipe
1099 .long sys_times
1100 .long sys_ni_syscall /* old prof syscall holder */
1101 .long sys_brk /* 45 */
1102 .long sys_setgid
1103 .long sys_getgid
1104 .long sys_signal
1105 .long sys_geteuid
1106 .long sys_getegid /* 50 */
1107 .long sys_acct
1108 .long sys_umount /* recycled never used phys() */
1109 .long sys_ni_syscall /* old lock syscall holder */
1110 .long sys_ioctl
1111 .long sys_fcntl /* 55 */
1112 .long sys_ni_syscall /* old mpx syscall holder */
1113 .long sys_setpgid
1114 .long sys_ni_syscall /* old ulimit syscall holder */
1115 .long sys_olduname
1116 .long sys_umask /* 60 */
1117 .long sys_chroot
1118 .long sys_ustat
1119 .long sys_dup2
1120 .long sys_getppid
1121 .long sys_getpgrp /* 65 */
1122 .long sys_setsid
1123 .long sys_sigaction
1124 .long sys_sgetmask
1125 .long sys_ssetmask
1126 .long sys_setreuid /* 70 */
1127 .long sys_setregid
1128 .long sys_sigsuspend
1129 .long sys_sigpending
1130 .long sys_sethostname
1131 .long sys_setrlimit /* 75 */
1132 .long sys_old_getrlimit
1133 .long sys_getrusage
1134 .long sys_gettimeofday
1135 .long sys_settimeofday
1136 .long sys_getgroups /* 80 */
1137 .long sys_setgroups
1138 .long ppc_select
1139 .long sys_symlink
1140 .long sys_lstat
1141 .long sys_readlink /* 85 */
1142 .long sys_uselib
1143 .long sys_swapon
1144 .long sys_reboot
1145 .long old_readdir
1146 .long sys_mmap /* 90 */
1147 .long sys_munmap
1148 .long sys_truncate
1149 .long sys_ftruncate
1150 .long sys_fchmod
1151 .long sys_fchown /* 95 */
1152 .long sys_getpriority
1153 .long sys_setpriority
1154 .long sys_ni_syscall /* old profil syscall holder */
1155 .long sys_statfs
1156 .long sys_fstatfs /* 100 */
1157 .long sys_ni_syscall
1158 .long sys_socketcall
1159 .long sys_syslog
1160 .long sys_setitimer
1161 .long sys_getitimer /* 105 */
1162 .long sys_newstat
1163 .long sys_newlstat
1164 .long sys_newfstat
1165 .long sys_uname
1166 .long sys_ni_syscall /* 110 */
1167 .long sys_vhangup
1168 .long sys_ni_syscall /* old 'idle' syscall */
1169 .long sys_ni_syscall
1170 .long sys_wait4
1171 .long sys_swapoff /* 115 */
1172 .long sys_sysinfo
1173 .long sys_ipc
1174 .long sys_fsync
1175 .long sys_sigreturn
1176 .long ppc_clone /* 120 */
1177 .long sys_setdomainname
1178 .long sys_newuname
1179 .long sys_ni_syscall
1180 .long sys_adjtimex
1181 .long sys_mprotect /* 125 */
1182 .long sys_sigprocmask
1183 .long sys_ni_syscall /* old sys_create_module */
1184 .long sys_init_module
1185 .long sys_delete_module
1186 .long sys_ni_syscall /* old sys_get_kernel_syms */ /* 130 */
1187 .long sys_quotactl
1188 .long sys_getpgid
1189 .long sys_fchdir
1190 .long sys_bdflush
1191 .long sys_sysfs /* 135 */
1192 .long sys_personality
1193 .long sys_ni_syscall /* for afs_syscall */
1194 .long sys_setfsuid
1195 .long sys_setfsgid
1196 .long sys_llseek /* 140 */
1197 .long sys_getdents
1198 .long ppc_select
1199 .long sys_flock
1200 .long sys_msync
1201 .long sys_readv /* 145 */
1202 .long sys_writev
1203 .long sys_getsid
1204 .long sys_fdatasync
1205 .long sys_sysctl
1206 .long sys_mlock /* 150 */
1207 .long sys_munlock
1208 .long sys_mlockall
1209 .long sys_munlockall
1210 .long sys_sched_setparam
1211 .long sys_sched_getparam /* 155 */
1212 .long sys_sched_setscheduler
1213 .long sys_sched_getscheduler
1214 .long sys_sched_yield
1215 .long sys_sched_get_priority_max
1216 .long sys_sched_get_priority_min /* 160 */
1217 .long sys_sched_rr_get_interval
1218 .long sys_nanosleep
1219 .long sys_mremap
1220 .long sys_setresuid
1221 .long sys_getresuid /* 165 */
1222 .long sys_ni_syscall /* old sys_query_module */
1223 .long sys_poll
1224 .long sys_nfsservctl
1225 .long sys_setresgid
1226 .long sys_getresgid /* 170 */
1227 .long sys_prctl
1228 .long sys_rt_sigreturn
1229 .long sys_rt_sigaction
1230 .long sys_rt_sigprocmask
1231 .long sys_rt_sigpending /* 175 */
1232 .long sys_rt_sigtimedwait
1233 .long sys_rt_sigqueueinfo
1234 .long sys_rt_sigsuspend
1235 .long sys_pread64
1236 .long sys_pwrite64 /* 180 */
1237 .long sys_chown
1238 .long sys_getcwd
1239 .long sys_capget
1240 .long sys_capset
1241 .long sys_sigaltstack /* 185 */
1242 .long sys_sendfile
1243 .long sys_ni_syscall /* streams1 */
1244 .long sys_ni_syscall /* streams2 */
1245 .long ppc_vfork
1246 .long sys_getrlimit /* 190 */
1247 .long sys_readahead
1248 .long sys_mmap2
1249 .long sys_truncate64
1250 .long sys_ftruncate64
1251 .long sys_stat64 /* 195 */
1252 .long sys_lstat64
1253 .long sys_fstat64
1254 .long sys_pciconfig_read
1255 .long sys_pciconfig_write
1256 .long sys_pciconfig_iobase /* 200 */
1257 .long sys_ni_syscall /* 201 - reserved - MacOnLinux - new */
1258 .long sys_getdents64
1259 .long sys_pivot_root
1260 .long sys_fcntl64
1261 .long sys_madvise /* 205 */
1262 .long sys_mincore
1263 .long sys_gettid
1264 .long sys_tkill
1265 .long sys_setxattr
1266 .long sys_lsetxattr /* 210 */
1267 .long sys_fsetxattr
1268 .long sys_getxattr
1269 .long sys_lgetxattr
1270 .long sys_fgetxattr
1271 .long sys_listxattr /* 215 */
1272 .long sys_llistxattr
1273 .long sys_flistxattr
1274 .long sys_removexattr
1275 .long sys_lremovexattr
1276 .long sys_fremovexattr /* 220 */
1277 .long sys_futex
1278 .long sys_sched_setaffinity
1279 .long sys_sched_getaffinity
1280 .long sys_ni_syscall
1281 .long sys_ni_syscall /* 225 - reserved for Tux */
1282 .long sys_sendfile64
1283 .long sys_io_setup
1284 .long sys_io_destroy
1285 .long sys_io_getevents
1286 .long sys_io_submit /* 230 */
1287 .long sys_io_cancel
1288 .long sys_set_tid_address
1289 .long sys_fadvise64
1290 .long sys_exit_group
1291 .long sys_lookup_dcookie /* 235 */
1292 .long sys_epoll_create
1293 .long sys_epoll_ctl
1294 .long sys_epoll_wait
1295 .long sys_remap_file_pages
1296 .long sys_timer_create /* 240 */
1297 .long sys_timer_settime
1298 .long sys_timer_gettime
1299 .long sys_timer_getoverrun
1300 .long sys_timer_delete
1301 .long sys_clock_settime /* 245 */
1302 .long sys_clock_gettime
1303 .long sys_clock_getres
1304 .long sys_clock_nanosleep
1305 .long sys_swapcontext
1306 .long sys_tgkill /* 250 */
1307 .long sys_utimes
1308 .long sys_statfs64
1309 .long sys_fstatfs64
1310 .long ppc_fadvise64_64
1311 .long sys_ni_syscall /* 255 - rtas (used on ppc64) */
1312 .long sys_debug_setcontext
1313 .long sys_ni_syscall /* 257 reserved for vserver */
1314 .long sys_ni_syscall /* 258 reserved for new sys_remap_file_pages */
1315 .long sys_ni_syscall /* 259 reserved for new sys_mbind */
1316 .long sys_ni_syscall /* 260 reserved for new sys_get_mempolicy */
1317 .long sys_ni_syscall /* 261 reserved for new sys_set_mempolicy */
1318 .long sys_mq_open
1319 .long sys_mq_unlink
1320 .long sys_mq_timedsend
1321 .long sys_mq_timedreceive /* 265 */
1322 .long sys_mq_notify
1323 .long sys_mq_getsetattr
1324 .long sys_kexec_load
1325 .long sys_add_key
1326 .long sys_request_key /* 270 */
1327 .long sys_keyctl
1328 .long sys_waitid
1329 .long sys_ioprio_set
1330 .long sys_ioprio_get
1331 .long sys_inotify_init /* 275 */
1332 .long sys_inotify_add_watch
1333 .long sys_inotify_rm_watch
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c
index 3a6e4bcb3c53..82adb4601348 100644
--- a/arch/ppc/kernel/ppc_ksyms.c
+++ b/arch/ppc/kernel/ppc_ksyms.c
@@ -93,15 +93,8 @@ EXPORT_SYMBOL(test_and_change_bit);
93EXPORT_SYMBOL(strcpy); 93EXPORT_SYMBOL(strcpy);
94EXPORT_SYMBOL(strncpy); 94EXPORT_SYMBOL(strncpy);
95EXPORT_SYMBOL(strcat); 95EXPORT_SYMBOL(strcat);
96EXPORT_SYMBOL(strncat);
97EXPORT_SYMBOL(strchr);
98EXPORT_SYMBOL(strrchr);
99EXPORT_SYMBOL(strpbrk);
100EXPORT_SYMBOL(strstr);
101EXPORT_SYMBOL(strlen); 96EXPORT_SYMBOL(strlen);
102EXPORT_SYMBOL(strnlen);
103EXPORT_SYMBOL(strcmp); 97EXPORT_SYMBOL(strcmp);
104EXPORT_SYMBOL(strncmp);
105EXPORT_SYMBOL(strcasecmp); 98EXPORT_SYMBOL(strcasecmp);
106EXPORT_SYMBOL(__div64_32); 99EXPORT_SYMBOL(__div64_32);
107 100
@@ -186,11 +179,15 @@ EXPORT_SYMBOL(flush_tlb_kernel_range);
186EXPORT_SYMBOL(flush_tlb_page); 179EXPORT_SYMBOL(flush_tlb_page);
187EXPORT_SYMBOL(_tlbie); 180EXPORT_SYMBOL(_tlbie);
188#ifdef CONFIG_ALTIVEC 181#ifdef CONFIG_ALTIVEC
182#ifndef CONFIG_SMP
189EXPORT_SYMBOL(last_task_used_altivec); 183EXPORT_SYMBOL(last_task_used_altivec);
184#endif
190EXPORT_SYMBOL(giveup_altivec); 185EXPORT_SYMBOL(giveup_altivec);
191#endif /* CONFIG_ALTIVEC */ 186#endif /* CONFIG_ALTIVEC */
192#ifdef CONFIG_SPE 187#ifdef CONFIG_SPE
188#ifndef CONFIG_SMP
193EXPORT_SYMBOL(last_task_used_spe); 189EXPORT_SYMBOL(last_task_used_spe);
190#endif
194EXPORT_SYMBOL(giveup_spe); 191EXPORT_SYMBOL(giveup_spe);
195#endif /* CONFIG_SPE */ 192#endif /* CONFIG_SPE */
196#ifdef CONFIG_SMP 193#ifdef CONFIG_SMP
@@ -249,7 +246,6 @@ EXPORT_SYMBOL(memcpy);
249EXPORT_SYMBOL(cacheable_memcpy); 246EXPORT_SYMBOL(cacheable_memcpy);
250EXPORT_SYMBOL(memset); 247EXPORT_SYMBOL(memset);
251EXPORT_SYMBOL(memmove); 248EXPORT_SYMBOL(memmove);
252EXPORT_SYMBOL(memscan);
253EXPORT_SYMBOL(memcmp); 249EXPORT_SYMBOL(memcmp);
254EXPORT_SYMBOL(memchr); 250EXPORT_SYMBOL(memchr);
255 251
diff --git a/arch/ppc/platforms/4xx/bamboo.c b/arch/ppc/platforms/4xx/bamboo.c
index 159b228eca1e..0ec53f049338 100644
--- a/arch/ppc/platforms/4xx/bamboo.c
+++ b/arch/ppc/platforms/4xx/bamboo.c
@@ -332,8 +332,8 @@ bamboo_early_serial_map(void)
332 port.irq = 0; 332 port.irq = 0;
333 port.uartclk = clocks.uart0; 333 port.uartclk = clocks.uart0;
334 port.regshift = 0; 334 port.regshift = 0;
335 port.iotype = SERIAL_IO_MEM; 335 port.iotype = UPIO_MEM;
336 port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 336 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
337 port.line = 0; 337 port.line = 0;
338 338
339 if (early_serial_setup(&port) != 0) { 339 if (early_serial_setup(&port) != 0) {
diff --git a/arch/ppc/platforms/4xx/bubinga.c b/arch/ppc/platforms/4xx/bubinga.c
index 8110f55668c5..ce48a4f08cbb 100644
--- a/arch/ppc/platforms/4xx/bubinga.c
+++ b/arch/ppc/platforms/4xx/bubinga.c
@@ -97,8 +97,8 @@ bubinga_early_serial_map(void)
97 port.irq = ACTING_UART0_INT; 97 port.irq = ACTING_UART0_INT;
98 port.uartclk = uart_clock; 98 port.uartclk = uart_clock;
99 port.regshift = 0; 99 port.regshift = 0;
100 port.iotype = SERIAL_IO_MEM; 100 port.iotype = UPIO_MEM;
101 port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 101 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
102 port.line = 0; 102 port.line = 0;
103 103
104 if (early_serial_setup(&port) != 0) { 104 if (early_serial_setup(&port) != 0) {
diff --git a/arch/ppc/platforms/4xx/ebony.c b/arch/ppc/platforms/4xx/ebony.c
index 64ebae19cdbb..9a828b623417 100644
--- a/arch/ppc/platforms/4xx/ebony.c
+++ b/arch/ppc/platforms/4xx/ebony.c
@@ -225,8 +225,8 @@ ebony_early_serial_map(void)
225 port.irq = 0; 225 port.irq = 0;
226 port.uartclk = clocks.uart0; 226 port.uartclk = clocks.uart0;
227 port.regshift = 0; 227 port.regshift = 0;
228 port.iotype = SERIAL_IO_MEM; 228 port.iotype = UPIO_MEM;
229 port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 229 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
230 port.line = 0; 230 port.line = 0;
231 231
232 if (early_serial_setup(&port) != 0) { 232 if (early_serial_setup(&port) != 0) {
diff --git a/arch/ppc/platforms/4xx/luan.c b/arch/ppc/platforms/4xx/luan.c
index d810b736d9bf..21d29132aebd 100644
--- a/arch/ppc/platforms/4xx/luan.c
+++ b/arch/ppc/platforms/4xx/luan.c
@@ -279,8 +279,8 @@ luan_early_serial_map(void)
279 port.irq = UART0_INT; 279 port.irq = UART0_INT;
280 port.uartclk = clocks.uart0; 280 port.uartclk = clocks.uart0;
281 port.regshift = 0; 281 port.regshift = 0;
282 port.iotype = SERIAL_IO_MEM; 282 port.iotype = UPIO_MEM;
283 port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 283 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
284 port.line = 0; 284 port.line = 0;
285 285
286 if (early_serial_setup(&port) != 0) { 286 if (early_serial_setup(&port) != 0) {
diff --git a/arch/ppc/platforms/4xx/ocotea.c b/arch/ppc/platforms/4xx/ocotea.c
index 73b2c98158f6..4f355b6acab2 100644
--- a/arch/ppc/platforms/4xx/ocotea.c
+++ b/arch/ppc/platforms/4xx/ocotea.c
@@ -248,8 +248,8 @@ ocotea_early_serial_map(void)
248 port.irq = UART0_INT; 248 port.irq = UART0_INT;
249 port.uartclk = clocks.uart0; 249 port.uartclk = clocks.uart0;
250 port.regshift = 0; 250 port.regshift = 0;
251 port.iotype = SERIAL_IO_MEM; 251 port.iotype = UPIO_MEM;
252 port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 252 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
253 port.line = 0; 253 port.line = 0;
254 254
255 if (early_serial_setup(&port) != 0) { 255 if (early_serial_setup(&port) != 0) {
diff --git a/arch/ppc/platforms/4xx/xilinx_ml300.c b/arch/ppc/platforms/4xx/xilinx_ml300.c
index 0b1b77d986bf..e90d97f64f76 100644
--- a/arch/ppc/platforms/4xx/xilinx_ml300.c
+++ b/arch/ppc/platforms/4xx/xilinx_ml300.c
@@ -95,8 +95,8 @@ ml300_early_serial_map(void)
95 port.irq = old_ports[i].irq; 95 port.irq = old_ports[i].irq;
96 port.uartclk = old_ports[i].baud_base * 16; 96 port.uartclk = old_ports[i].baud_base * 16;
97 port.regshift = old_ports[i].iomem_reg_shift; 97 port.regshift = old_ports[i].iomem_reg_shift;
98 port.iotype = SERIAL_IO_MEM; 98 port.iotype = UPIO_MEM;
99 port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 99 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
100 port.line = i; 100 port.line = i;
101 101
102 if (early_serial_setup(&port) != 0) { 102 if (early_serial_setup(&port) != 0) {
diff --git a/arch/ppc/platforms/4xx/yucca.c b/arch/ppc/platforms/4xx/yucca.c
index e60f4bd437ec..b065b8babcd3 100644
--- a/arch/ppc/platforms/4xx/yucca.c
+++ b/arch/ppc/platforms/4xx/yucca.c
@@ -305,8 +305,8 @@ yucca_early_serial_map(void)
305 port.irq = UART0_INT; 305 port.irq = UART0_INT;
306 port.uartclk = clocks.uart0; 306 port.uartclk = clocks.uart0;
307 port.regshift = 0; 307 port.regshift = 0;
308 port.iotype = SERIAL_IO_MEM; 308 port.iotype = UPIO_MEM;
309 port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; 309 port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
310 port.line = 0; 310 port.line = 0;
311 311
312 if (early_serial_setup(&port) != 0) { 312 if (early_serial_setup(&port) != 0) {
diff --git a/arch/ppc/platforms/83xx/mpc834x_sys.c b/arch/ppc/platforms/83xx/mpc834x_sys.c
index 012e1e652c03..1a659bbc1860 100644
--- a/arch/ppc/platforms/83xx/mpc834x_sys.c
+++ b/arch/ppc/platforms/83xx/mpc834x_sys.c
@@ -301,14 +301,14 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
301 struct uart_port p; 301 struct uart_port p;
302 302
303 memset(&p, 0, sizeof (p)); 303 memset(&p, 0, sizeof (p));
304 p.iotype = SERIAL_IO_MEM; 304 p.iotype = UPIO_MEM;
305 p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4500); 305 p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4500);
306 p.uartclk = binfo->bi_busfreq; 306 p.uartclk = binfo->bi_busfreq;
307 307
308 gen550_init(0, &p); 308 gen550_init(0, &p);
309 309
310 memset(&p, 0, sizeof (p)); 310 memset(&p, 0, sizeof (p));
311 p.iotype = SERIAL_IO_MEM; 311 p.iotype = UPIO_MEM;
312 p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4600); 312 p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4600);
313 p.uartclk = binfo->bi_busfreq; 313 p.uartclk = binfo->bi_busfreq;
314 314
diff --git a/arch/ppc/platforms/85xx/mpc8540_ads.c b/arch/ppc/platforms/85xx/mpc8540_ads.c
index 2eceb1e6f4eb..408d64f18e1a 100644
--- a/arch/ppc/platforms/85xx/mpc8540_ads.c
+++ b/arch/ppc/platforms/85xx/mpc8540_ads.c
@@ -162,14 +162,14 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
162 binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); 162 binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0);
163 163
164 memset(&p, 0, sizeof (p)); 164 memset(&p, 0, sizeof (p));
165 p.iotype = SERIAL_IO_MEM; 165 p.iotype = UPIO_MEM;
166 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; 166 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET;
167 p.uartclk = binfo->bi_busfreq; 167 p.uartclk = binfo->bi_busfreq;
168 168
169 gen550_init(0, &p); 169 gen550_init(0, &p);
170 170
171 memset(&p, 0, sizeof (p)); 171 memset(&p, 0, sizeof (p));
172 p.iotype = SERIAL_IO_MEM; 172 p.iotype = UPIO_MEM;
173 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; 173 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET;
174 p.uartclk = binfo->bi_busfreq; 174 p.uartclk = binfo->bi_busfreq;
175 175
diff --git a/arch/ppc/platforms/85xx/mpc85xx_cds_common.c b/arch/ppc/platforms/85xx/mpc85xx_cds_common.c
index b332ebae6bd3..1801ab392e22 100644
--- a/arch/ppc/platforms/85xx/mpc85xx_cds_common.c
+++ b/arch/ppc/platforms/85xx/mpc85xx_cds_common.c
@@ -534,14 +534,14 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
534 binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); 534 binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0);
535 535
536 memset(&p, 0, sizeof (p)); 536 memset(&p, 0, sizeof (p));
537 p.iotype = SERIAL_IO_MEM; 537 p.iotype = UPIO_MEM;
538 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; 538 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET;
539 p.uartclk = binfo->bi_busfreq; 539 p.uartclk = binfo->bi_busfreq;
540 540
541 gen550_init(0, &p); 541 gen550_init(0, &p);
542 542
543 memset(&p, 0, sizeof (p)); 543 memset(&p, 0, sizeof (p));
544 p.iotype = SERIAL_IO_MEM; 544 p.iotype = UPIO_MEM;
545 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; 545 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET;
546 p.uartclk = binfo->bi_busfreq; 546 p.uartclk = binfo->bi_busfreq;
547 547
diff --git a/arch/ppc/platforms/85xx/sbc8560.c b/arch/ppc/platforms/85xx/sbc8560.c
index e777ba824aa9..8a72221f816c 100644
--- a/arch/ppc/platforms/85xx/sbc8560.c
+++ b/arch/ppc/platforms/85xx/sbc8560.c
@@ -64,7 +64,7 @@ sbc8560_early_serial_map(void)
64 uart_req.irq = MPC85xx_IRQ_EXT9; 64 uart_req.irq = MPC85xx_IRQ_EXT9;
65 uart_req.flags = STD_COM_FLAGS; 65 uart_req.flags = STD_COM_FLAGS;
66 uart_req.uartclk = BASE_BAUD * 16; 66 uart_req.uartclk = BASE_BAUD * 16;
67 uart_req.iotype = SERIAL_IO_MEM; 67 uart_req.iotype = UPIO_MEM;
68 uart_req.mapbase = UARTA_ADDR; 68 uart_req.mapbase = UARTA_ADDR;
69 uart_req.membase = ioremap(uart_req.mapbase, MPC85xx_UART0_SIZE); 69 uart_req.membase = ioremap(uart_req.mapbase, MPC85xx_UART0_SIZE);
70 uart_req.type = PORT_16650; 70 uart_req.type = PORT_16650;
diff --git a/arch/ppc/platforms/85xx/tqm85xx.c b/arch/ppc/platforms/85xx/tqm85xx.c
index b436f4d0a3fa..a5e38ba62732 100644
--- a/arch/ppc/platforms/85xx/tqm85xx.c
+++ b/arch/ppc/platforms/85xx/tqm85xx.c
@@ -346,14 +346,14 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
346 binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); 346 binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0);
347 347
348 memset(&p, 0, sizeof (p)); 348 memset(&p, 0, sizeof (p));
349 p.iotype = SERIAL_IO_MEM; 349 p.iotype = UPIO_MEM;
350 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; 350 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET;
351 p.uartclk = binfo->bi_busfreq; 351 p.uartclk = binfo->bi_busfreq;
352 352
353 gen550_init(0, &p); 353 gen550_init(0, &p);
354 354
355 memset(&p, 0, sizeof (p)); 355 memset(&p, 0, sizeof (p));
356 p.iotype = SERIAL_IO_MEM; 356 p.iotype = UPIO_MEM;
357 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; 357 p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET;
358 p.uartclk = binfo->bi_busfreq; 358 p.uartclk = binfo->bi_busfreq;
359 359
diff --git a/arch/ppc/platforms/chestnut.c b/arch/ppc/platforms/chestnut.c
index 48a4a510d598..aefcc0e7be57 100644
--- a/arch/ppc/platforms/chestnut.c
+++ b/arch/ppc/platforms/chestnut.c
@@ -116,7 +116,7 @@ chestnut_early_serial_map(void)
116 port.uartclk = BASE_BAUD * 16; 116 port.uartclk = BASE_BAUD * 16;
117 port.irq = UART0_INT; 117 port.irq = UART0_INT;
118 port.flags = STD_COM_FLAGS | UPF_IOREMAP; 118 port.flags = STD_COM_FLAGS | UPF_IOREMAP;
119 port.iotype = SERIAL_IO_MEM; 119 port.iotype = UPIO_MEM;
120 port.mapbase = CHESTNUT_UART0_IO_BASE; 120 port.mapbase = CHESTNUT_UART0_IO_BASE;
121 port.regshift = 0; 121 port.regshift = 0;
122 122
diff --git a/arch/ppc/platforms/ev64260.c b/arch/ppc/platforms/ev64260.c
index 32358b3fb236..ffde8f6f6302 100644
--- a/arch/ppc/platforms/ev64260.c
+++ b/arch/ppc/platforms/ev64260.c
@@ -330,7 +330,7 @@ ev64260_early_serial_map(void)
330 port.irq = EV64260_UART_0_IRQ; 330 port.irq = EV64260_UART_0_IRQ;
331 port.uartclk = BASE_BAUD * 16; 331 port.uartclk = BASE_BAUD * 16;
332 port.regshift = 2; 332 port.regshift = 2;
333 port.iotype = SERIAL_IO_MEM; 333 port.iotype = UPIO_MEM;
334 port.flags = STD_COM_FLAGS; 334 port.flags = STD_COM_FLAGS;
335 335
336#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) 336#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
diff --git a/arch/ppc/platforms/radstone_ppc7d.c b/arch/ppc/platforms/radstone_ppc7d.c
index 708b8739ecdd..872c0a3ba3c7 100644
--- a/arch/ppc/platforms/radstone_ppc7d.c
+++ b/arch/ppc/platforms/radstone_ppc7d.c
@@ -100,7 +100,7 @@ static void __init ppc7d_early_serial_map(void)
100 serial_req.uartclk = UART_CLK; 100 serial_req.uartclk = UART_CLK;
101 serial_req.irq = 4; 101 serial_req.irq = 4;
102 serial_req.flags = STD_COM_FLAGS; 102 serial_req.flags = STD_COM_FLAGS;
103 serial_req.iotype = SERIAL_IO_MEM; 103 serial_req.iotype = UPIO_MEM;
104 serial_req.membase = (u_char *) PPC7D_SERIAL_0; 104 serial_req.membase = (u_char *) PPC7D_SERIAL_0;
105 105
106 gen550_init(0, &serial_req); 106 gen550_init(0, &serial_req);
diff --git a/arch/ppc/platforms/spruce.c b/arch/ppc/platforms/spruce.c
index 5ad70d357cb9..69e1de7971f2 100644
--- a/arch/ppc/platforms/spruce.c
+++ b/arch/ppc/platforms/spruce.c
@@ -176,8 +176,8 @@ spruce_early_serial_map(void)
176 memset(&serial_req, 0, sizeof(serial_req)); 176 memset(&serial_req, 0, sizeof(serial_req));
177 serial_req.uartclk = uart_clk; 177 serial_req.uartclk = uart_clk;
178 serial_req.irq = UART0_INT; 178 serial_req.irq = UART0_INT;
179 serial_req.flags = ASYNC_BOOT_AUTOCONF; 179 serial_req.flags = UPF_BOOT_AUTOCONF;
180 serial_req.iotype = SERIAL_IO_MEM; 180 serial_req.iotype = UPIO_MEM;
181 serial_req.membase = (u_char *)UART0_IO_BASE; 181 serial_req.membase = (u_char *)UART0_IO_BASE;
182 serial_req.regshift = 0; 182 serial_req.regshift = 0;
183 183
diff --git a/arch/ppc/syslib/mv64x60.c b/arch/ppc/syslib/mv64x60.c
index 94ea346b7b4b..1f01b7e2376b 100644
--- a/arch/ppc/syslib/mv64x60.c
+++ b/arch/ppc/syslib/mv64x60.c
@@ -313,7 +313,7 @@ static struct platform_device mpsc1_device = {
313}; 313};
314#endif 314#endif
315 315
316#ifdef CONFIG_MV643XX_ETH 316#if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE)
317static struct resource mv64x60_eth_shared_resources[] = { 317static struct resource mv64x60_eth_shared_resources[] = {
318 [0] = { 318 [0] = {
319 .name = "ethernet shared base", 319 .name = "ethernet shared base",
@@ -456,7 +456,7 @@ static struct platform_device *mv64x60_pd_devs[] __initdata = {
456 &mpsc0_device, 456 &mpsc0_device,
457 &mpsc1_device, 457 &mpsc1_device,
458#endif 458#endif
459#ifdef CONFIG_MV643XX_ETH 459#if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE)
460 &mv64x60_eth_shared_device, 460 &mv64x60_eth_shared_device,
461#endif 461#endif
462#ifdef CONFIG_MV643XX_ETH_0 462#ifdef CONFIG_MV643XX_ETH_0
diff --git a/arch/ppc/syslib/ocp.c b/arch/ppc/syslib/ocp.c
index ab34b1d6072f..2fe28ded2c60 100644
--- a/arch/ppc/syslib/ocp.c
+++ b/arch/ppc/syslib/ocp.c
@@ -189,8 +189,8 @@ ocp_device_resume(struct device *dev)
189struct bus_type ocp_bus_type = { 189struct bus_type ocp_bus_type = {
190 .name = "ocp", 190 .name = "ocp",
191 .match = ocp_device_match, 191 .match = ocp_device_match,
192 .probe = ocp_driver_probe, 192 .probe = ocp_device_probe,
193 .remove = ocp_driver_remove, 193 .remove = ocp_device_remove,
194 .suspend = ocp_device_suspend, 194 .suspend = ocp_device_suspend,
195 .resume = ocp_device_resume, 195 .resume = ocp_device_resume,
196}; 196};
diff --git a/arch/ppc/syslib/ppc83xx_setup.c b/arch/ppc/syslib/ppc83xx_setup.c
index 1b5fe9e398d4..7bada82527a8 100644
--- a/arch/ppc/syslib/ppc83xx_setup.c
+++ b/arch/ppc/syslib/ppc83xx_setup.c
@@ -108,7 +108,7 @@ mpc83xx_early_serial_map(void)
108 108
109#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) 109#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
110 memset(&serial_req, 0, sizeof (serial_req)); 110 memset(&serial_req, 0, sizeof (serial_req));
111 serial_req.iotype = SERIAL_IO_MEM; 111 serial_req.iotype = UPIO_MEM;
112 serial_req.mapbase = pdata[0].mapbase; 112 serial_req.mapbase = pdata[0].mapbase;
113 serial_req.membase = pdata[0].membase; 113 serial_req.membase = pdata[0].membase;
114 serial_req.regshift = 0; 114 serial_req.regshift = 0;
diff --git a/arch/ppc/syslib/ppc85xx_setup.c b/arch/ppc/syslib/ppc85xx_setup.c
index 1a47ff4b831d..e4dda43fdaa7 100644
--- a/arch/ppc/syslib/ppc85xx_setup.c
+++ b/arch/ppc/syslib/ppc85xx_setup.c
@@ -90,7 +90,7 @@ mpc85xx_early_serial_map(void)
90 90
91#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) 91#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
92 memset(&serial_req, 0, sizeof (serial_req)); 92 memset(&serial_req, 0, sizeof (serial_req));
93 serial_req.iotype = SERIAL_IO_MEM; 93 serial_req.iotype = UPIO_MEM;
94 serial_req.mapbase = pdata[0].mapbase; 94 serial_req.mapbase = pdata[0].mapbase;
95 serial_req.membase = pdata[0].membase; 95 serial_req.membase = pdata[0].membase;
96 serial_req.regshift = 0; 96 serial_req.regshift = 0;
diff --git a/arch/ppc/xmon/adb.c b/arch/ppc/xmon/adb.c
deleted file mode 100644
index e91384dcccac..000000000000
--- a/arch/ppc/xmon/adb.c
+++ /dev/null
@@ -1,212 +0,0 @@
1/*
2 * Copyright (C) 1996 Paul Mackerras.
3 */
4#include "nonstdio.h"
5#include "privinst.h"
6
7#define scanhex xmon_scanhex
8#define skipbl xmon_skipbl
9
10#define ADB_B (*(volatile unsigned char *)0xf3016000)
11#define ADB_SR (*(volatile unsigned char *)0xf3017400)
12#define ADB_ACR (*(volatile unsigned char *)0xf3017600)
13#define ADB_IFR (*(volatile unsigned char *)0xf3017a00)
14
15static inline void eieio(void) { asm volatile ("eieio" : :); }
16
17#define N_ADB_LOG 1000
18struct adb_log {
19 unsigned char b;
20 unsigned char ifr;
21 unsigned char acr;
22 unsigned int time;
23} adb_log[N_ADB_LOG];
24int n_adb_log;
25
26void
27init_adb_log(void)
28{
29 adb_log[0].b = ADB_B;
30 adb_log[0].ifr = ADB_IFR;
31 adb_log[0].acr = ADB_ACR;
32 adb_log[0].time = get_dec();
33 n_adb_log = 0;
34}
35
36void
37dump_adb_log(void)
38{
39 unsigned t, t0;
40 struct adb_log *ap;
41 int i;
42
43 ap = adb_log;
44 t0 = ap->time;
45 for (i = 0; i <= n_adb_log; ++i, ++ap) {
46 t = t0 - ap->time;
47 printf("b=%x ifr=%x acr=%x at %d.%.7d\n", ap->b, ap->ifr, ap->acr,
48 t / 1000000000, (t % 1000000000) / 100);
49 }
50}
51
52void
53adb_chklog(void)
54{
55 struct adb_log *ap = &adb_log[n_adb_log + 1];
56
57 ap->b = ADB_B;
58 ap->ifr = ADB_IFR;
59 ap->acr = ADB_ACR;
60 if (ap->b != ap[-1].b || (ap->ifr & 4) != (ap[-1].ifr & 4)
61 || ap->acr != ap[-1].acr) {
62 ap->time = get_dec();
63 ++n_adb_log;
64 }
65}
66
67int
68adb_bitwait(int bmask, int bval, int fmask, int fval)
69{
70 int i;
71 struct adb_log *ap;
72
73 for (i = 10000; i > 0; --i) {
74 adb_chklog();
75 ap = &adb_log[n_adb_log];
76 if ((ap->b & bmask) == bval && (ap->ifr & fmask) == fval)
77 return 0;
78 }
79 return -1;
80}
81
82int
83adb_wait(void)
84{
85 if (adb_bitwait(0, 0, 4, 4) < 0) {
86 printf("adb: ready wait timeout\n");
87 return -1;
88 }
89 return 0;
90}
91
92void
93adb_readin(void)
94{
95 int i, j;
96 unsigned char d[64];
97
98 if (ADB_B & 8) {
99 printf("ADB_B: %x\n", ADB_B);
100 return;
101 }
102 i = 0;
103 adb_wait();
104 j = ADB_SR;
105 eieio();
106 ADB_B &= ~0x20;
107 eieio();
108 for (;;) {
109 if (adb_wait() < 0)
110 break;
111 d[i++] = ADB_SR;
112 eieio();
113 if (ADB_B & 8)
114 break;
115 ADB_B ^= 0x10;
116 eieio();
117 }
118 ADB_B |= 0x30;
119 if (adb_wait() == 0)
120 j = ADB_SR;
121 for (j = 0; j < i; ++j)
122 printf("%.2x ", d[j]);
123 printf("\n");
124}
125
126int
127adb_write(unsigned char *d, int i)
128{
129 int j;
130 unsigned x;
131
132 if ((ADB_B & 8) == 0) {
133 printf("r: ");
134 adb_readin();
135 }
136 for (;;) {
137 ADB_ACR = 0x1c;
138 eieio();
139 ADB_SR = d[0];
140 eieio();
141 ADB_B &= ~0x20;
142 eieio();
143 if (ADB_B & 8)
144 break;
145 ADB_ACR = 0xc;
146 eieio();
147 ADB_B |= 0x20;
148 eieio();
149 adb_readin();
150 }
151 adb_wait();
152 for (j = 1; j < i; ++j) {
153 ADB_SR = d[j];
154 eieio();
155 ADB_B ^= 0x10;
156 eieio();
157 if (adb_wait() < 0)
158 break;
159 }
160 ADB_ACR = 0xc;
161 eieio();
162 x = ADB_SR;
163 eieio();
164 ADB_B |= 0x30;
165 return j;
166}
167
168void
169adbcmds(void)
170{
171 char cmd;
172 unsigned rtcu, rtcl, dec, pdec, x;
173 int i, j;
174 unsigned char d[64];
175
176 cmd = skipbl();
177 switch (cmd) {
178 case 't':
179 for (;;) {
180 rtcl = get_rtcl();
181 rtcu = get_rtcu();
182 dec = get_dec();
183 printf("rtc u=%u l=%u dec=%x (%d = %d.%.7d)\n",
184 rtcu, rtcl, dec, pdec - dec, (pdec - dec) / 1000000000,
185 ((pdec - dec) % 1000000000) / 100);
186 pdec = dec;
187 if (cmd == 'x')
188 break;
189 while (xmon_read(stdin, &cmd, 1) != 1)
190 ;
191 }
192 break;
193 case 'r':
194 init_adb_log();
195 while (adb_bitwait(8, 0, 0, 0) == 0)
196 adb_readin();
197 break;
198 case 'w':
199 i = 0;
200 while (scanhex(&x))
201 d[i++] = x;
202 init_adb_log();
203 j = adb_write(d, i);
204 printf("sent %d bytes\n", j);
205 while (adb_bitwait(8, 0, 0, 0) == 0)
206 adb_readin();
207 break;
208 case 'l':
209 dump_adb_log();
210 break;
211 }
212}
diff --git a/arch/ppc/xmon/start.c b/arch/ppc/xmon/start.c
index 4344cbe9b5c5..ff86b2d814cb 100644
--- a/arch/ppc/xmon/start.c
+++ b/arch/ppc/xmon/start.c
@@ -6,16 +6,11 @@
6#include <asm/machdep.h> 6#include <asm/machdep.h>
7#include <asm/io.h> 7#include <asm/io.h>
8#include <asm/page.h> 8#include <asm/page.h>
9#include <linux/adb.h>
10#include <linux/pmu.h>
11#include <linux/cuda.h>
12#include <linux/kernel.h> 9#include <linux/kernel.h>
13#include <linux/errno.h> 10#include <linux/errno.h>
14#include <linux/sysrq.h> 11#include <linux/sysrq.h>
15#include <linux/bitops.h> 12#include <linux/bitops.h>
16#include <asm/xmon.h> 13#include <asm/xmon.h>
17#include <asm/prom.h>
18#include <asm/bootx.h>
19#include <asm/machdep.h> 14#include <asm/machdep.h>
20#include <asm/errno.h> 15#include <asm/errno.h>
21#include <asm/processor.h> 16#include <asm/processor.h>
@@ -26,9 +21,7 @@ static volatile unsigned char *sccc, *sccd;
26unsigned int TXRDY, RXRDY, DLAB; 21unsigned int TXRDY, RXRDY, DLAB;
27static int xmon_expect(const char *str, unsigned int timeout); 22static int xmon_expect(const char *str, unsigned int timeout);
28 23
29static int use_screen;
30static int via_modem; 24static int via_modem;
31static int xmon_use_sccb;
32 25
33#define TB_SPEED 25000000 26#define TB_SPEED 25000000
34 27
@@ -46,47 +39,6 @@ void buf_access(void)
46 sccd[3] &= ~DLAB; /* reset DLAB */ 39 sccd[3] &= ~DLAB; /* reset DLAB */
47} 40}
48 41
49extern int adb_init(void);
50
51#ifdef CONFIG_PPC_CHRP
52/*
53 * This looks in the "ranges" property for the primary PCI host bridge
54 * to find the physical address of the start of PCI/ISA I/O space.
55 * It is basically a cut-down version of pci_process_bridge_OF_ranges.
56 */
57static unsigned long chrp_find_phys_io_base(void)
58{
59 struct device_node *node;
60 unsigned int *ranges;
61 unsigned long base = CHRP_ISA_IO_BASE;
62 int rlen = 0;
63 int np;
64
65 node = find_devices("isa");
66 if (node != NULL) {
67 node = node->parent;
68 if (node == NULL || node->type == NULL
69 || strcmp(node->type, "pci") != 0)
70 node = NULL;
71 }
72 if (node == NULL)
73 node = find_devices("pci");
74 if (node == NULL)
75 return base;
76
77 ranges = (unsigned int *) get_property(node, "ranges", &rlen);
78 np = prom_n_addr_cells(node) + 5;
79 while ((rlen -= np * sizeof(unsigned int)) >= 0) {
80 if ((ranges[0] >> 24) == 1 && ranges[2] == 0) {
81 /* I/O space starting at 0, grab the phys base */
82 base = ranges[np - 3];
83 break;
84 }
85 ranges += np;
86 }
87 return base;
88}
89#endif /* CONFIG_PPC_CHRP */
90 42
91#ifdef CONFIG_MAGIC_SYSRQ 43#ifdef CONFIG_MAGIC_SYSRQ
92static void sysrq_handle_xmon(int key, struct pt_regs *regs, 44static void sysrq_handle_xmon(int key, struct pt_regs *regs,
@@ -109,22 +61,6 @@ xmon_map_scc(void)
109#ifdef CONFIG_PPC_MULTIPLATFORM 61#ifdef CONFIG_PPC_MULTIPLATFORM
110 volatile unsigned char *base; 62 volatile unsigned char *base;
111 63
112#ifdef CONFIG_PPC_CHRP
113 base = (volatile unsigned char *) isa_io_base;
114 if (_machine == _MACH_chrp)
115 base = (volatile unsigned char *)
116 ioremap(chrp_find_phys_io_base(), 0x1000);
117
118 sccc = base + 0x3fd;
119 sccd = base + 0x3f8;
120 if (xmon_use_sccb) {
121 sccc -= 0x100;
122 sccd -= 0x100;
123 }
124 TXRDY = 0x20;
125 RXRDY = 1;
126 DLAB = 0x80;
127#endif /* CONFIG_PPC_CHRP */
128#elif defined(CONFIG_GEMINI) 64#elif defined(CONFIG_GEMINI)
129 /* should already be mapped by the kernel boot */ 65 /* should already be mapped by the kernel boot */
130 sccc = (volatile unsigned char *) 0xffeffb0d; 66 sccc = (volatile unsigned char *) 0xffeffb0d;
@@ -143,22 +79,9 @@ xmon_map_scc(void)
143 register_sysrq_key('x', &sysrq_xmon_op); 79 register_sysrq_key('x', &sysrq_xmon_op);
144} 80}
145 81
146static int scc_initialized = 0; 82static int scc_initialized;
147 83
148void xmon_init_scc(void); 84void xmon_init_scc(void);
149extern void cuda_poll(void);
150
151static inline void do_poll_adb(void)
152{
153#ifdef CONFIG_ADB_PMU
154 if (sys_ctrler == SYS_CTRLER_PMU)
155 pmu_poll_adb();
156#endif /* CONFIG_ADB_PMU */
157#ifdef CONFIG_ADB_CUDA
158 if (sys_ctrler == SYS_CTRLER_CUDA)
159 cuda_poll();
160#endif /* CONFIG_ADB_CUDA */
161}
162 85
163int 86int
164xmon_write(void *handle, void *ptr, int nb) 87xmon_write(void *handle, void *ptr, int nb)
@@ -176,20 +99,12 @@ xmon_write(void *handle, void *ptr, int nb)
176 break; 99 break;
177#endif 100#endif
178 101
179#ifdef CONFIG_BOOTX_TEXT
180 if (use_screen) {
181 /* write it on the screen */
182 for (i = 0; i < nb; ++i)
183 btext_drawchar(*p++);
184 goto out;
185 }
186#endif
187 if (!scc_initialized) 102 if (!scc_initialized)
188 xmon_init_scc(); 103 xmon_init_scc();
189 ct = 0; 104 ct = 0;
190 for (i = 0; i < nb; ++i) { 105 for (i = 0; i < nb; ++i) {
191 while ((*sccc & TXRDY) == 0) 106 while ((*sccc & TXRDY) == 0)
192 do_poll_adb(); 107 ;
193 c = p[i]; 108 c = p[i];
194 if (c == '\n' && !ct) { 109 if (c == '\n' && !ct) {
195 c = '\r'; 110 c = '\r';
@@ -203,7 +118,6 @@ xmon_write(void *handle, void *ptr, int nb)
203 eieio(); 118 eieio();
204 } 119 }
205 120
206 out:
207#ifdef CONFIG_SMP 121#ifdef CONFIG_SMP
208 if (!locked) 122 if (!locked)
209 clear_bit(0, &xmon_write_lock); 123 clear_bit(0, &xmon_write_lock);
@@ -212,65 +126,7 @@ xmon_write(void *handle, void *ptr, int nb)
212} 126}
213 127
214int xmon_wants_key; 128int xmon_wants_key;
215int xmon_adb_keycode;
216
217#ifdef CONFIG_BOOTX_TEXT
218static int xmon_adb_shiftstate;
219
220static unsigned char xmon_keytab[128] =
221 "asdfhgzxcv\000bqwer" /* 0x00 - 0x0f */
222 "yt123465=97-80]o" /* 0x10 - 0x1f */
223 "u[ip\rlj'k;\\,/nm." /* 0x20 - 0x2f */
224 "\t `\177\0\033\0\0\0\0\0\0\0\0\0\0" /* 0x30 - 0x3f */
225 "\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */
226 "\0\0000123456789\0\0\0"; /* 0x50 - 0x5f */
227
228static unsigned char xmon_shift_keytab[128] =
229 "ASDFHGZXCV\000BQWER" /* 0x00 - 0x0f */
230 "YT!@#$^%+(&_*)}O" /* 0x10 - 0x1f */
231 "U{IP\rLJ\"K:|<?NM>" /* 0x20 - 0x2f */
232 "\t ~\177\0\033\0\0\0\0\0\0\0\0\0\0" /* 0x30 - 0x3f */
233 "\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */
234 "\0\0000123456789\0\0\0"; /* 0x50 - 0x5f */
235
236static int
237xmon_get_adb_key(void)
238{
239 int k, t, on;
240 129
241 xmon_wants_key = 1;
242 for (;;) {
243 xmon_adb_keycode = -1;
244 t = 0;
245 on = 0;
246 do {
247 if (--t < 0) {
248 on = 1 - on;
249 btext_drawchar(on? 0xdb: 0x20);
250 btext_drawchar('\b');
251 t = 200000;
252 }
253 do_poll_adb();
254 } while (xmon_adb_keycode == -1);
255 k = xmon_adb_keycode;
256 if (on)
257 btext_drawstring(" \b");
258
259 /* test for shift keys */
260 if ((k & 0x7f) == 0x38 || (k & 0x7f) == 0x7b) {
261 xmon_adb_shiftstate = (k & 0x80) == 0;
262 continue;
263 }
264 if (k >= 0x80)
265 continue; /* ignore up transitions */
266 k = (xmon_adb_shiftstate? xmon_shift_keytab: xmon_keytab)[k];
267 if (k != 0)
268 break;
269 }
270 xmon_wants_key = 0;
271 return k;
272}
273#endif /* CONFIG_BOOTX_TEXT */
274 130
275int 131int
276xmon_read(void *handle, void *ptr, int nb) 132xmon_read(void *handle, void *ptr, int nb)
@@ -278,18 +134,11 @@ xmon_read(void *handle, void *ptr, int nb)
278 char *p = ptr; 134 char *p = ptr;
279 int i; 135 int i;
280 136
281#ifdef CONFIG_BOOTX_TEXT
282 if (use_screen) {
283 for (i = 0; i < nb; ++i)
284 *p++ = xmon_get_adb_key();
285 return i;
286 }
287#endif
288 if (!scc_initialized) 137 if (!scc_initialized)
289 xmon_init_scc(); 138 xmon_init_scc();
290 for (i = 0; i < nb; ++i) { 139 for (i = 0; i < nb; ++i) {
291 while ((*sccc & RXRDY) == 0) 140 while ((*sccc & RXRDY) == 0)
292 do_poll_adb(); 141 ;
293 buf_access(); 142 buf_access();
294 *p++ = *sccd; 143 *p++ = *sccd;
295 } 144 }
@@ -300,7 +149,7 @@ int
300xmon_read_poll(void) 149xmon_read_poll(void)
301{ 150{
302 if ((*sccc & RXRDY) == 0) { 151 if ((*sccc & RXRDY) == 0) {
303 do_poll_adb(); 152 ;
304 return -1; 153 return -1;
305 } 154 }
306 buf_access(); 155 buf_access();
@@ -310,15 +159,6 @@ xmon_read_poll(void)
310void 159void
311xmon_init_scc(void) 160xmon_init_scc(void)
312{ 161{
313 if ( _machine == _MACH_chrp )
314 {
315 sccd[3] = 0x83; eieio(); /* LCR = 8N1 + DLAB */
316 sccd[0] = 12; eieio(); /* DLL = 9600 baud */
317 sccd[1] = 0; eieio();
318 sccd[2] = 0; eieio(); /* FCR = 0 */
319 sccd[3] = 3; eieio(); /* LCR = 8N1 */
320 sccd[1] = 0; eieio(); /* IER = 0 */
321 }
322 scc_initialized = 1; 162 scc_initialized = 1;
323 if (via_modem) { 163 if (via_modem) {
324 for (;;) { 164 for (;;) {
@@ -334,22 +174,6 @@ xmon_init_scc(void)
334 } 174 }
335} 175}
336 176
337#if 0
338extern int (*prom_entry)(void *);
339
340int
341xmon_exit(void)
342{
343 struct prom_args {
344 char *service;
345 } args;
346
347 for (;;) {
348 args.service = "exit";
349 (*prom_entry)(&args);
350 }
351}
352#endif
353 177
354void *xmon_stdin; 178void *xmon_stdin;
355void *xmon_stdout; 179void *xmon_stdout;
diff --git a/arch/ppc/xmon/xmon.c b/arch/ppc/xmon/xmon.c
index bdaf6597b4c2..06fa44b5c647 100644
--- a/arch/ppc/xmon/xmon.c
+++ b/arch/ppc/xmon/xmon.c
@@ -12,8 +12,6 @@
12#include <linux/kallsyms.h> 12#include <linux/kallsyms.h>
13#include <asm/ptrace.h> 13#include <asm/ptrace.h>
14#include <asm/string.h> 14#include <asm/string.h>
15#include <asm/prom.h>
16#include <asm/bootx.h>
17#include <asm/machdep.h> 15#include <asm/machdep.h>
18#include <asm/xmon.h> 16#include <asm/xmon.h>
19#include "nonstdio.h" 17#include "nonstdio.h"
@@ -101,9 +99,6 @@ void cacheflush(void);
101static void cpu_cmd(void); 99static void cpu_cmd(void);
102#endif /* CONFIG_SMP */ 100#endif /* CONFIG_SMP */
103static void csum(void); 101static void csum(void);
104#ifdef CONFIG_BOOTX_TEXT
105static void vidcmds(void);
106#endif
107static void bootcmds(void); 102static void bootcmds(void);
108static void proccall(void); 103static void proccall(void);
109static void printtime(void); 104static void printtime(void);
@@ -522,11 +517,6 @@ cmds(struct pt_regs *excp)
522 cpu_cmd(); 517 cpu_cmd();
523 break; 518 break;
524#endif /* CONFIG_SMP */ 519#endif /* CONFIG_SMP */
525#ifdef CONFIG_BOOTX_TEXT
526 case 'v':
527 vidcmds();
528 break;
529#endif
530 case 'z': 520 case 'z':
531 bootcmds(); 521 bootcmds();
532 break; 522 break;
@@ -618,43 +608,6 @@ static void cpu_cmd(void)
618} 608}
619#endif /* CONFIG_SMP */ 609#endif /* CONFIG_SMP */
620 610
621#ifdef CONFIG_BOOTX_TEXT
622extern boot_infos_t disp_bi;
623
624static void vidcmds(void)
625{
626 int c = inchar();
627 unsigned int val, w;
628 extern int boot_text_mapped;
629
630 if (!boot_text_mapped)
631 return;
632 if (c != '\n' && scanhex(&val)) {
633 switch (c) {
634 case 'd':
635 w = disp_bi.dispDeviceRowBytes
636 / (disp_bi.dispDeviceDepth >> 3);
637 disp_bi.dispDeviceDepth = val;
638 disp_bi.dispDeviceRowBytes = w * (val >> 3);
639 return;
640 case 'p':
641 disp_bi.dispDeviceRowBytes = val;
642 return;
643 case 'w':
644 disp_bi.dispDeviceRect[2] = val;
645 return;
646 case 'h':
647 disp_bi.dispDeviceRect[3] = val;
648 return;
649 }
650 }
651 printf("W = %d (0x%x) H = %d (0x%x) D = %d (0x%x) P = %d (0x%x)\n",
652 disp_bi.dispDeviceRect[2], disp_bi.dispDeviceRect[2],
653 disp_bi.dispDeviceRect[3], disp_bi.dispDeviceRect[3],
654 disp_bi.dispDeviceDepth, disp_bi.dispDeviceDepth,
655 disp_bi.dispDeviceRowBytes, disp_bi.dispDeviceRowBytes);
656}
657#endif /* CONFIG_BOOTX_TEXT */
658 611
659static unsigned short fcstab[256] = { 612static unsigned short fcstab[256] = {
660 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 613 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
@@ -1020,7 +973,6 @@ dump_hash_table(void)
1020} 973}
1021#else 974#else
1022 975
1023#ifndef CONFIG_PPC64BRIDGE
1024static void 976static void
1025dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) 977dump_hash_table_seg(unsigned seg, unsigned start, unsigned end)
1026{ 978{
@@ -1079,66 +1031,6 @@ dump_hash_table_seg(unsigned seg, unsigned start, unsigned end)
1079 printf(" ... %x\n", last_va); 1031 printf(" ... %x\n", last_va);
1080} 1032}
1081 1033
1082#else /* CONFIG_PPC64BRIDGE */
1083static void
1084dump_hash_table_seg(unsigned seg, unsigned start, unsigned end)
1085{
1086 extern void *Hash;
1087 extern unsigned long Hash_size;
1088 unsigned *htab = Hash;
1089 unsigned hsize = Hash_size;
1090 unsigned v, hmask, va, last_va;
1091 int found, last_found, i;
1092 unsigned *hg, w1, last_w2, last_va0;
1093
1094 last_found = 0;
1095 hmask = hsize / 128 - 1;
1096 va = start;
1097 start = (start >> 12) & 0xffff;
1098 end = (end >> 12) & 0xffff;
1099 for (v = start; v < end; ++v) {
1100 found = 0;
1101 hg = htab + (((v ^ seg) & hmask) * 32);
1102 w1 = 1 | (seg << 12) | ((v & 0xf800) >> 4);
1103 for (i = 0; i < 8; ++i, hg += 4) {
1104 if (hg[1] == w1) {
1105 found = 1;
1106 break;
1107 }
1108 }
1109 if (!found) {
1110 w1 ^= 2;
1111 hg = htab + ((~(v ^ seg) & hmask) * 32);
1112 for (i = 0; i < 8; ++i, hg += 4) {
1113 if (hg[1] == w1) {
1114 found = 1;
1115 break;
1116 }
1117 }
1118 }
1119 if (!(last_found && found && (hg[3] & ~0x180) == last_w2 + 4096)) {
1120 if (last_found) {
1121 if (last_va != last_va0)
1122 printf(" ... %x", last_va);
1123 printf("\n");
1124 }
1125 if (found) {
1126 printf("%x to %x", va, hg[3]);
1127 last_va0 = va;
1128 }
1129 last_found = found;
1130 }
1131 if (found) {
1132 last_w2 = hg[3] & ~0x180;
1133 last_va = va;
1134 }
1135 va += 4096;
1136 }
1137 if (last_found)
1138 printf(" ... %x\n", last_va);
1139}
1140#endif /* CONFIG_PPC64BRIDGE */
1141
1142static unsigned hash_ctx; 1034static unsigned hash_ctx;
1143static unsigned hash_start; 1035static unsigned hash_start;
1144static unsigned hash_end; 1036static unsigned hash_end;
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index b66602ad7b33..b7ca5bf9acfc 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -80,6 +80,10 @@ config HOTPLUG_CPU
80 can be controlled through /sys/devices/system/cpu/cpu#. 80 can be controlled through /sys/devices/system/cpu/cpu#.
81 Say N if you want to disable CPU hotplug. 81 Say N if you want to disable CPU hotplug.
82 82
83config DEFAULT_MIGRATION_COST
84 int
85 default "1000000"
86
83config MATHEMU 87config MATHEMU
84 bool "IEEE FPU emulation" 88 bool "IEEE FPU emulation"
85 depends on MARCH_G5 89 depends on MARCH_G5
diff --git a/arch/s390/defconfig b/arch/s390/defconfig
index 7d23edc6facb..f8d0cd540a06 100644
--- a/arch/s390/defconfig
+++ b/arch/s390/defconfig
@@ -1,19 +1,17 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc2 3# Linux kernel version: 2.6.16-rc2
4# Mon Nov 21 13:51:30 2005 4# Wed Feb 8 10:44:39 2006
5# 5#
6CONFIG_MMU=y 6CONFIG_MMU=y
7CONFIG_RWSEM_XCHGADD_ALGORITHM=y 7CONFIG_RWSEM_XCHGADD_ALGORITHM=y
8CONFIG_GENERIC_CALIBRATE_DELAY=y 8CONFIG_GENERIC_CALIBRATE_DELAY=y
9CONFIG_S390=y 9CONFIG_S390=y
10CONFIG_UID16=y
11 10
12# 11#
13# Code maturity level options 12# Code maturity level options
14# 13#
15CONFIG_EXPERIMENTAL=y 14CONFIG_EXPERIMENTAL=y
16CONFIG_CLEAN_COMPILE=y
17CONFIG_LOCK_KERNEL=y 15CONFIG_LOCK_KERNEL=y
18CONFIG_INIT_ENV_ARG_LIMIT=32 16CONFIG_INIT_ENV_ARG_LIMIT=32
19 17
@@ -29,18 +27,20 @@ CONFIG_POSIX_MQUEUE=y
29CONFIG_SYSCTL=y 27CONFIG_SYSCTL=y
30CONFIG_AUDIT=y 28CONFIG_AUDIT=y
31# CONFIG_AUDITSYSCALL is not set 29# CONFIG_AUDITSYSCALL is not set
32CONFIG_HOTPLUG=y
33CONFIG_KOBJECT_UEVENT=y
34CONFIG_IKCONFIG=y 30CONFIG_IKCONFIG=y
35CONFIG_IKCONFIG_PROC=y 31CONFIG_IKCONFIG_PROC=y
36# CONFIG_CPUSETS is not set 32# CONFIG_CPUSETS is not set
37CONFIG_INITRAMFS_SOURCE="" 33CONFIG_INITRAMFS_SOURCE=""
34CONFIG_UID16=y
35# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
38# CONFIG_EMBEDDED is not set 36# CONFIG_EMBEDDED is not set
39CONFIG_KALLSYMS=y 37CONFIG_KALLSYMS=y
40# CONFIG_KALLSYMS_ALL is not set 38# CONFIG_KALLSYMS_ALL is not set
41# CONFIG_KALLSYMS_EXTRA_PASS is not set 39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_HOTPLUG=y
42CONFIG_PRINTK=y 41CONFIG_PRINTK=y
43CONFIG_BUG=y 42CONFIG_BUG=y
43CONFIG_ELF_CORE=y
44CONFIG_BASE_FULL=y 44CONFIG_BASE_FULL=y
45CONFIG_FUTEX=y 45CONFIG_FUTEX=y
46CONFIG_EPOLL=y 46CONFIG_EPOLL=y
@@ -49,8 +49,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
49CONFIG_CC_ALIGN_LABELS=0 49CONFIG_CC_ALIGN_LABELS=0
50CONFIG_CC_ALIGN_LOOPS=0 50CONFIG_CC_ALIGN_LOOPS=0
51CONFIG_CC_ALIGN_JUMPS=0 51CONFIG_CC_ALIGN_JUMPS=0
52CONFIG_SLAB=y
52# CONFIG_TINY_SHMEM is not set 53# CONFIG_TINY_SHMEM is not set
53CONFIG_BASE_SMALL=0 54CONFIG_BASE_SMALL=0
55# CONFIG_SLOB is not set
54 56
55# 57#
56# Loadable module support 58# Loadable module support
@@ -76,11 +78,11 @@ CONFIG_IOSCHED_NOOP=y
76CONFIG_IOSCHED_AS=y 78CONFIG_IOSCHED_AS=y
77CONFIG_IOSCHED_DEADLINE=y 79CONFIG_IOSCHED_DEADLINE=y
78CONFIG_IOSCHED_CFQ=y 80CONFIG_IOSCHED_CFQ=y
79CONFIG_DEFAULT_AS=y 81# CONFIG_DEFAULT_AS is not set
80# CONFIG_DEFAULT_DEADLINE is not set 82CONFIG_DEFAULT_DEADLINE=y
81# CONFIG_DEFAULT_CFQ is not set 83# CONFIG_DEFAULT_CFQ is not set
82# CONFIG_DEFAULT_NOOP is not set 84# CONFIG_DEFAULT_NOOP is not set
83CONFIG_DEFAULT_IOSCHED="anticipatory" 85CONFIG_DEFAULT_IOSCHED="deadline"
84 86
85# 87#
86# Base setup 88# Base setup
@@ -151,6 +153,7 @@ CONFIG_NET=y
151# 153#
152# Networking options 154# Networking options
153# 155#
156# CONFIG_NETDEBUG is not set
154CONFIG_PACKET=y 157CONFIG_PACKET=y
155# CONFIG_PACKET_MMAP is not set 158# CONFIG_PACKET_MMAP is not set
156CONFIG_UNIX=y 159CONFIG_UNIX=y
@@ -193,6 +196,11 @@ CONFIG_IPV6=y
193# SCTP Configuration (EXPERIMENTAL) 196# SCTP Configuration (EXPERIMENTAL)
194# 197#
195# CONFIG_IP_SCTP is not set 198# CONFIG_IP_SCTP is not set
199
200#
201# TIPC Configuration (EXPERIMENTAL)
202#
203# CONFIG_TIPC is not set
196# CONFIG_ATM is not set 204# CONFIG_ATM is not set
197# CONFIG_BRIDGE is not set 205# CONFIG_BRIDGE is not set
198# CONFIG_VLAN_8021Q is not set 206# CONFIG_VLAN_8021Q is not set
@@ -362,6 +370,7 @@ CONFIG_DM_MULTIPATH=y
362# 370#
363CONFIG_UNIX98_PTYS=y 371CONFIG_UNIX98_PTYS=y
364CONFIG_UNIX98_PTY_COUNT=2048 372CONFIG_UNIX98_PTY_COUNT=2048
373# CONFIG_HANGCHECK_TIMER is not set
365 374
366# 375#
367# Watchdog Cards 376# Watchdog Cards
@@ -488,6 +497,7 @@ CONFIG_FS_MBCACHE=y
488# CONFIG_JFS_FS is not set 497# CONFIG_JFS_FS is not set
489# CONFIG_FS_POSIX_ACL is not set 498# CONFIG_FS_POSIX_ACL is not set
490# CONFIG_XFS_FS is not set 499# CONFIG_XFS_FS is not set
500# CONFIG_OCFS2_FS is not set
491# CONFIG_MINIX_FS is not set 501# CONFIG_MINIX_FS is not set
492# CONFIG_ROMFS_FS is not set 502# CONFIG_ROMFS_FS is not set
493CONFIG_INOTIFY=y 503CONFIG_INOTIFY=y
@@ -520,6 +530,7 @@ CONFIG_TMPFS=y
520# CONFIG_HUGETLB_PAGE is not set 530# CONFIG_HUGETLB_PAGE is not set
521CONFIG_RAMFS=y 531CONFIG_RAMFS=y
522# CONFIG_RELAYFS_FS is not set 532# CONFIG_RELAYFS_FS is not set
533# CONFIG_CONFIGFS_FS is not set
523 534
524# 535#
525# Miscellaneous filesystems 536# Miscellaneous filesystems
@@ -584,6 +595,7 @@ CONFIG_MSDOS_PARTITION=y
584# CONFIG_SGI_PARTITION is not set 595# CONFIG_SGI_PARTITION is not set
585# CONFIG_ULTRIX_PARTITION is not set 596# CONFIG_ULTRIX_PARTITION is not set
586# CONFIG_SUN_PARTITION is not set 597# CONFIG_SUN_PARTITION is not set
598# CONFIG_KARMA_PARTITION is not set
587# CONFIG_EFI_PARTITION is not set 599# CONFIG_EFI_PARTITION is not set
588 600
589# 601#
@@ -592,27 +604,30 @@ CONFIG_MSDOS_PARTITION=y
592# CONFIG_NLS is not set 604# CONFIG_NLS is not set
593 605
594# 606#
595# Profiling support 607# Instrumentation Support
596# 608#
597# CONFIG_PROFILING is not set 609# CONFIG_PROFILING is not set
610# CONFIG_STATISTICS is not set
598 611
599# 612#
600# Kernel hacking 613# Kernel hacking
601# 614#
602# CONFIG_PRINTK_TIME is not set 615# CONFIG_PRINTK_TIME is not set
603CONFIG_DEBUG_KERNEL=y
604CONFIG_MAGIC_SYSRQ=y 616CONFIG_MAGIC_SYSRQ=y
617CONFIG_DEBUG_KERNEL=y
605CONFIG_LOG_BUF_SHIFT=17 618CONFIG_LOG_BUF_SHIFT=17
606CONFIG_DETECT_SOFTLOCKUP=y 619# CONFIG_DETECT_SOFTLOCKUP is not set
607# CONFIG_SCHEDSTATS is not set 620# CONFIG_SCHEDSTATS is not set
608# CONFIG_DEBUG_SLAB is not set 621# CONFIG_DEBUG_SLAB is not set
609CONFIG_DEBUG_PREEMPT=y 622# CONFIG_DEBUG_PREEMPT is not set
623CONFIG_DEBUG_MUTEXES=y
610# CONFIG_DEBUG_SPINLOCK is not set 624# CONFIG_DEBUG_SPINLOCK is not set
611# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 625# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
612# CONFIG_DEBUG_KOBJECT is not set 626# CONFIG_DEBUG_KOBJECT is not set
613# CONFIG_DEBUG_INFO is not set 627# CONFIG_DEBUG_INFO is not set
614CONFIG_DEBUG_FS=y 628CONFIG_DEBUG_FS=y
615# CONFIG_DEBUG_VM is not set 629# CONFIG_DEBUG_VM is not set
630CONFIG_FORCED_INLINING=y
616# CONFIG_RCU_TORTURE_TEST is not set 631# CONFIG_RCU_TORTURE_TEST is not set
617 632
618# 633#
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
index bf9a7a361b34..cc058dc3bc8b 100644
--- a/arch/s390/kernel/compat_linux.c
+++ b/arch/s390/kernel/compat_linux.c
@@ -100,12 +100,12 @@
100#define SET_STAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid) 100#define SET_STAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid)
101#define SET_STAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid) 101#define SET_STAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid)
102 102
103asmlinkage long sys32_chown16(const char * filename, u16 user, u16 group) 103asmlinkage long sys32_chown16(const char __user * filename, u16 user, u16 group)
104{ 104{
105 return sys_chown(filename, low2highuid(user), low2highgid(group)); 105 return sys_chown(filename, low2highuid(user), low2highgid(group));
106} 106}
107 107
108asmlinkage long sys32_lchown16(const char * filename, u16 user, u16 group) 108asmlinkage long sys32_lchown16(const char __user * filename, u16 user, u16 group)
109{ 109{
110 return sys_lchown(filename, low2highuid(user), low2highgid(group)); 110 return sys_lchown(filename, low2highuid(user), low2highgid(group));
111} 111}
@@ -141,7 +141,7 @@ asmlinkage long sys32_setresuid16(u16 ruid, u16 euid, u16 suid)
141 low2highuid(suid)); 141 low2highuid(suid));
142} 142}
143 143
144asmlinkage long sys32_getresuid16(u16 *ruid, u16 *euid, u16 *suid) 144asmlinkage long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid)
145{ 145{
146 int retval; 146 int retval;
147 147
@@ -158,7 +158,7 @@ asmlinkage long sys32_setresgid16(u16 rgid, u16 egid, u16 sgid)
158 low2highgid(sgid)); 158 low2highgid(sgid));
159} 159}
160 160
161asmlinkage long sys32_getresgid16(u16 *rgid, u16 *egid, u16 *sgid) 161asmlinkage long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid)
162{ 162{
163 int retval; 163 int retval;
164 164
@@ -179,7 +179,7 @@ asmlinkage long sys32_setfsgid16(u16 gid)
179 return sys_setfsgid((gid_t)gid); 179 return sys_setfsgid((gid_t)gid);
180} 180}
181 181
182static int groups16_to_user(u16 *grouplist, struct group_info *group_info) 182static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
183{ 183{
184 int i; 184 int i;
185 u16 group; 185 u16 group;
@@ -193,7 +193,7 @@ static int groups16_to_user(u16 *grouplist, struct group_info *group_info)
193 return 0; 193 return 0;
194} 194}
195 195
196static int groups16_from_user(struct group_info *group_info, u16 *grouplist) 196static int groups16_from_user(struct group_info *group_info, u16 __user *grouplist)
197{ 197{
198 int i; 198 int i;
199 u16 group; 199 u16 group;
@@ -207,7 +207,7 @@ static int groups16_from_user(struct group_info *group_info, u16 *grouplist)
207 return 0; 207 return 0;
208} 208}
209 209
210asmlinkage long sys32_getgroups16(int gidsetsize, u16 *grouplist) 210asmlinkage long sys32_getgroups16(int gidsetsize, u16 __user *grouplist)
211{ 211{
212 int i; 212 int i;
213 213
@@ -231,7 +231,7 @@ out:
231 return i; 231 return i;
232} 232}
233 233
234asmlinkage long sys32_setgroups16(int gidsetsize, u16 *grouplist) 234asmlinkage long sys32_setgroups16(int gidsetsize, u16 __user *grouplist)
235{ 235{
236 struct group_info *group_info; 236 struct group_info *group_info;
237 int retval; 237 int retval;
@@ -278,14 +278,14 @@ asmlinkage long sys32_getegid16(void)
278 278
279/* 32-bit timeval and related flotsam. */ 279/* 32-bit timeval and related flotsam. */
280 280
281static inline long get_tv32(struct timeval *o, struct compat_timeval *i) 281static inline long get_tv32(struct timeval *o, struct compat_timeval __user *i)
282{ 282{
283 return (!access_ok(VERIFY_READ, o, sizeof(*o)) || 283 return (!access_ok(VERIFY_READ, o, sizeof(*o)) ||
284 (__get_user(o->tv_sec, &i->tv_sec) || 284 (__get_user(o->tv_sec, &i->tv_sec) ||
285 __get_user(o->tv_usec, &i->tv_usec))); 285 __get_user(o->tv_usec, &i->tv_usec)));
286} 286}
287 287
288static inline long put_tv32(struct compat_timeval *o, struct timeval *i) 288static inline long put_tv32(struct compat_timeval __user *o, struct timeval *i)
289{ 289{
290 return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) || 290 return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) ||
291 (__put_user(i->tv_sec, &o->tv_sec) || 291 (__put_user(i->tv_sec, &o->tv_sec) ||
@@ -341,7 +341,7 @@ asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr)
341 return -ENOSYS; 341 return -ENOSYS;
342} 342}
343 343
344asmlinkage long sys32_truncate64(const char * path, unsigned long high, unsigned long low) 344asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low)
345{ 345{
346 if ((int)high < 0) 346 if ((int)high < 0)
347 return -EINVAL; 347 return -EINVAL;
@@ -357,7 +357,7 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned
357 return sys_ftruncate(fd, (high << 32) | low); 357 return sys_ftruncate(fd, (high << 32) | low);
358} 358}
359 359
360int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf) 360int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf)
361{ 361{
362 int err; 362 int err;
363 363
@@ -591,7 +591,7 @@ sys32_delete_module(const char __user *name_user, unsigned int flags)
591 591
592extern struct timezone sys_tz; 592extern struct timezone sys_tz;
593 593
594asmlinkage long sys32_gettimeofday(struct compat_timeval *tv, struct timezone *tz) 594asmlinkage long sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
595{ 595{
596 if (tv) { 596 if (tv) {
597 struct timeval ktv; 597 struct timeval ktv;
@@ -606,7 +606,7 @@ asmlinkage long sys32_gettimeofday(struct compat_timeval *tv, struct timezone *t
606 return 0; 606 return 0;
607} 607}
608 608
609static inline long get_ts32(struct timespec *o, struct compat_timeval *i) 609static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i)
610{ 610{
611 long usec; 611 long usec;
612 612
@@ -620,7 +620,7 @@ static inline long get_ts32(struct timespec *o, struct compat_timeval *i)
620 return 0; 620 return 0;
621} 621}
622 622
623asmlinkage long sys32_settimeofday(struct compat_timeval *tv, struct timezone *tz) 623asmlinkage long sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
624{ 624{
625 struct timespec kts; 625 struct timespec kts;
626 struct timezone ktz; 626 struct timezone ktz;
@@ -645,7 +645,7 @@ asmlinkage long sys32_pause(void)
645 return -ERESTARTNOHAND; 645 return -ERESTARTNOHAND;
646} 646}
647 647
648asmlinkage long sys32_pread64(unsigned int fd, char *ubuf, 648asmlinkage long sys32_pread64(unsigned int fd, char __user *ubuf,
649 size_t count, u32 poshi, u32 poslo) 649 size_t count, u32 poshi, u32 poslo)
650{ 650{
651 if ((compat_ssize_t) count < 0) 651 if ((compat_ssize_t) count < 0)
@@ -653,7 +653,7 @@ asmlinkage long sys32_pread64(unsigned int fd, char *ubuf,
653 return sys_pread64(fd, ubuf, count, ((loff_t)AA(poshi) << 32) | AA(poslo)); 653 return sys_pread64(fd, ubuf, count, ((loff_t)AA(poshi) << 32) | AA(poslo));
654} 654}
655 655
656asmlinkage long sys32_pwrite64(unsigned int fd, const char *ubuf, 656asmlinkage long sys32_pwrite64(unsigned int fd, const char __user *ubuf,
657 size_t count, u32 poshi, u32 poslo) 657 size_t count, u32 poshi, u32 poslo)
658{ 658{
659 if ((compat_ssize_t) count < 0) 659 if ((compat_ssize_t) count < 0)
@@ -666,7 +666,7 @@ asmlinkage compat_ssize_t sys32_readahead(int fd, u32 offhi, u32 offlo, s32 coun
666 return sys_readahead(fd, ((loff_t)AA(offhi) << 32) | AA(offlo), count); 666 return sys_readahead(fd, ((loff_t)AA(offhi) << 32) | AA(offlo), count);
667} 667}
668 668
669asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, size_t count) 669asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, size_t count)
670{ 670{
671 mm_segment_t old_fs = get_fs(); 671 mm_segment_t old_fs = get_fs();
672 int ret; 672 int ret;
@@ -686,7 +686,7 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, size
686} 686}
687 687
688asmlinkage long sys32_sendfile64(int out_fd, int in_fd, 688asmlinkage long sys32_sendfile64(int out_fd, int in_fd,
689 compat_loff_t *offset, s32 count) 689 compat_loff_t __user *offset, s32 count)
690{ 690{
691 mm_segment_t old_fs = get_fs(); 691 mm_segment_t old_fs = get_fs();
692 int ret; 692 int ret;
@@ -722,7 +722,7 @@ struct timex32 {
722 722
723extern int do_adjtimex(struct timex *); 723extern int do_adjtimex(struct timex *);
724 724
725asmlinkage long sys32_adjtimex(struct timex32 *utp) 725asmlinkage long sys32_adjtimex(struct timex32 __user *utp)
726{ 726{
727 struct timex txc; 727 struct timex txc;
728 int ret; 728 int ret;
@@ -789,12 +789,13 @@ struct __sysctl_args32 {
789 u32 __unused[4]; 789 u32 __unused[4];
790}; 790};
791 791
792asmlinkage long sys32_sysctl(struct __sysctl_args32 *args) 792asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
793{ 793{
794 struct __sysctl_args32 tmp; 794 struct __sysctl_args32 tmp;
795 int error; 795 int error;
796 size_t oldlen, *oldlenp = NULL; 796 size_t oldlen;
797 unsigned long addr = (((long)&args->__unused[0]) + 7) & ~7; 797 size_t __user *oldlenp = NULL;
798 unsigned long addr = (((unsigned long)&args->__unused[0]) + 7) & ~7;
798 799
799 if (copy_from_user(&tmp, args, sizeof(tmp))) 800 if (copy_from_user(&tmp, args, sizeof(tmp)))
800 return -EFAULT; 801 return -EFAULT;
@@ -806,20 +807,20 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 *args)
806 basically copy the whole sysctl.c here, and 807 basically copy the whole sysctl.c here, and
807 glibc's __sysctl uses rw memory for the structure 808 glibc's __sysctl uses rw memory for the structure
808 anyway. */ 809 anyway. */
809 if (get_user(oldlen, (u32 *)A(tmp.oldlenp)) || 810 if (get_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp)) ||
810 put_user(oldlen, (size_t *)addr)) 811 put_user(oldlen, (size_t __user *)addr))
811 return -EFAULT; 812 return -EFAULT;
812 oldlenp = (size_t *)addr; 813 oldlenp = (size_t __user *)addr;
813 } 814 }
814 815
815 lock_kernel(); 816 lock_kernel();
816 error = do_sysctl((int *)A(tmp.name), tmp.nlen, (void *)A(tmp.oldval), 817 error = do_sysctl(compat_ptr(tmp.name), tmp.nlen, compat_ptr(tmp.oldval),
817 oldlenp, (void *)A(tmp.newval), tmp.newlen); 818 oldlenp, compat_ptr(tmp.newval), tmp.newlen);
818 unlock_kernel(); 819 unlock_kernel();
819 if (oldlenp) { 820 if (oldlenp) {
820 if (!error) { 821 if (!error) {
821 if (get_user(oldlen, (size_t *)addr) || 822 if (get_user(oldlen, (size_t __user *)addr) ||
822 put_user(oldlen, (u32 *)A(tmp.oldlenp))) 823 put_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp)))
823 error = -EFAULT; 824 error = -EFAULT;
824 } 825 }
825 copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)); 826 copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused));
@@ -853,7 +854,7 @@ struct stat64_emu31 {
853 unsigned long st_ino; 854 unsigned long st_ino;
854}; 855};
855 856
856static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat) 857static int cp_stat64(struct stat64_emu31 __user *ubuf, struct kstat *stat)
857{ 858{
858 struct stat64_emu31 tmp; 859 struct stat64_emu31 tmp;
859 860
@@ -877,7 +878,7 @@ static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat)
877 return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 878 return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
878} 879}
879 880
880asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf) 881asmlinkage long sys32_stat64(char __user * filename, struct stat64_emu31 __user * statbuf)
881{ 882{
882 struct kstat stat; 883 struct kstat stat;
883 int ret = vfs_stat(filename, &stat); 884 int ret = vfs_stat(filename, &stat);
@@ -886,7 +887,7 @@ asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf)
886 return ret; 887 return ret;
887} 888}
888 889
889asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf) 890asmlinkage long sys32_lstat64(char __user * filename, struct stat64_emu31 __user * statbuf)
890{ 891{
891 struct kstat stat; 892 struct kstat stat;
892 int ret = vfs_lstat(filename, &stat); 893 int ret = vfs_lstat(filename, &stat);
@@ -895,7 +896,7 @@ asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf)
895 return ret; 896 return ret;
896} 897}
897 898
898asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 * statbuf) 899asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 __user * statbuf)
899{ 900{
900 struct kstat stat; 901 struct kstat stat;
901 int ret = vfs_fstat(fd, &stat); 902 int ret = vfs_fstat(fd, &stat);
@@ -904,6 +905,26 @@ asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 * statbuf)
904 return ret; 905 return ret;
905} 906}
906 907
908asmlinkage long sys32_fstatat64(unsigned int dfd, char __user *filename,
909 struct stat64_emu31 __user* statbuf, int flag)
910{
911 struct kstat stat;
912 int error = -EINVAL;
913
914 if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
915 goto out;
916
917 if (flag & AT_SYMLINK_NOFOLLOW)
918 error = vfs_lstat_fd(dfd, filename, &stat);
919 else
920 error = vfs_stat_fd(dfd, filename, &stat);
921
922 if (!error)
923 error = cp_stat64(statbuf, &stat);
924out:
925 return error;
926}
927
907/* 928/*
908 * Linux/i386 didn't use to be able to handle more than 929 * Linux/i386 didn't use to be able to handle more than
909 * 4 system call parameters, so these system calls used a memory 930 * 4 system call parameters, so these system calls used a memory
@@ -952,7 +973,7 @@ out:
952 973
953 974
954asmlinkage unsigned long 975asmlinkage unsigned long
955old32_mmap(struct mmap_arg_struct_emu31 *arg) 976old32_mmap(struct mmap_arg_struct_emu31 __user *arg)
956{ 977{
957 struct mmap_arg_struct_emu31 a; 978 struct mmap_arg_struct_emu31 a;
958 int error = -EFAULT; 979 int error = -EFAULT;
@@ -970,7 +991,7 @@ out:
970} 991}
971 992
972asmlinkage long 993asmlinkage long
973sys32_mmap2(struct mmap_arg_struct_emu31 *arg) 994sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg)
974{ 995{
975 struct mmap_arg_struct_emu31 a; 996 struct mmap_arg_struct_emu31 a;
976 int error = -EFAULT; 997 int error = -EFAULT;
@@ -982,7 +1003,7 @@ out:
982 return error; 1003 return error;
983} 1004}
984 1005
985asmlinkage long sys32_read(unsigned int fd, char * buf, size_t count) 1006asmlinkage long sys32_read(unsigned int fd, char __user * buf, size_t count)
986{ 1007{
987 if ((compat_ssize_t) count < 0) 1008 if ((compat_ssize_t) count < 0)
988 return -EINVAL; 1009 return -EINVAL;
@@ -990,7 +1011,7 @@ asmlinkage long sys32_read(unsigned int fd, char * buf, size_t count)
990 return sys_read(fd, buf, count); 1011 return sys_read(fd, buf, count);
991} 1012}
992 1013
993asmlinkage long sys32_write(unsigned int fd, char * buf, size_t count) 1014asmlinkage long sys32_write(unsigned int fd, char __user * buf, size_t count)
994{ 1015{
995 if ((compat_ssize_t) count < 0) 1016 if ((compat_ssize_t) count < 0)
996 return -EINVAL; 1017 return -EINVAL;
@@ -1002,12 +1023,12 @@ asmlinkage long sys32_clone(struct pt_regs regs)
1002{ 1023{
1003 unsigned long clone_flags; 1024 unsigned long clone_flags;
1004 unsigned long newsp; 1025 unsigned long newsp;
1005 int *parent_tidptr, *child_tidptr; 1026 int __user *parent_tidptr, *child_tidptr;
1006 1027
1007 clone_flags = regs.gprs[3] & 0xffffffffUL; 1028 clone_flags = regs.gprs[3] & 0xffffffffUL;
1008 newsp = regs.orig_gpr2 & 0x7fffffffUL; 1029 newsp = regs.orig_gpr2 & 0x7fffffffUL;
1009 parent_tidptr = (int *) (regs.gprs[4] & 0x7fffffffUL); 1030 parent_tidptr = compat_ptr(regs.gprs[4]);
1010 child_tidptr = (int *) (regs.gprs[5] & 0x7fffffffUL); 1031 child_tidptr = compat_ptr(regs.gprs[5]);
1011 if (!newsp) 1032 if (!newsp)
1012 newsp = regs.gprs[15]; 1033 newsp = regs.gprs[15];
1013 return do_fork(clone_flags, newsp, &regs, 0, 1034 return do_fork(clone_flags, newsp, &regs, 0,
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c
index fa2b3bc22f20..5291b5f8788d 100644
--- a/arch/s390/kernel/compat_signal.c
+++ b/arch/s390/kernel/compat_signal.c
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/signal32.c 2 * arch/s390/kernel/compat_signal.c
3 * 3 *
4 * S390 version 4 * Copyright (C) IBM Corp. 2000,2006
5 * Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
6 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 5 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
7 * Gerhard Tonn (ton@de.ibm.com) 6 * Gerhard Tonn (ton@de.ibm.com)
8 * 7 *
@@ -52,8 +51,6 @@ typedef struct
52 struct ucontext32 uc; 51 struct ucontext32 uc;
53} rt_sigframe32; 52} rt_sigframe32;
54 53
55asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
56
57int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) 54int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
58{ 55{
59 int err; 56 int err;
@@ -161,66 +158,6 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
161 return err; 158 return err;
162} 159}
163 160
164/*
165 * Atomically swap in the new signal mask, and wait for a signal.
166 */
167asmlinkage int
168sys32_sigsuspend(struct pt_regs * regs,int history0, int history1, old_sigset_t mask)
169{
170 sigset_t saveset;
171
172 mask &= _BLOCKABLE;
173 spin_lock_irq(&current->sighand->siglock);
174 saveset = current->blocked;
175 siginitset(&current->blocked, mask);
176 recalc_sigpending();
177 spin_unlock_irq(&current->sighand->siglock);
178 regs->gprs[2] = -EINTR;
179
180 while (1) {
181 set_current_state(TASK_INTERRUPTIBLE);
182 schedule();
183 if (do_signal(regs, &saveset))
184 return -EINTR;
185 }
186}
187
188asmlinkage int
189sys32_rt_sigsuspend(struct pt_regs * regs, compat_sigset_t __user *unewset,
190 size_t sigsetsize)
191{
192 sigset_t saveset, newset;
193 compat_sigset_t set32;
194
195 /* XXX: Don't preclude handling different sized sigset_t's. */
196 if (sigsetsize != sizeof(sigset_t))
197 return -EINVAL;
198
199 if (copy_from_user(&set32, unewset, sizeof(set32)))
200 return -EFAULT;
201 switch (_NSIG_WORDS) {
202 case 4: newset.sig[3] = set32.sig[6] + (((long)set32.sig[7]) << 32);
203 case 3: newset.sig[2] = set32.sig[4] + (((long)set32.sig[5]) << 32);
204 case 2: newset.sig[1] = set32.sig[2] + (((long)set32.sig[3]) << 32);
205 case 1: newset.sig[0] = set32.sig[0] + (((long)set32.sig[1]) << 32);
206 }
207 sigdelsetmask(&newset, ~_BLOCKABLE);
208
209 spin_lock_irq(&current->sighand->siglock);
210 saveset = current->blocked;
211 current->blocked = newset;
212 recalc_sigpending();
213 spin_unlock_irq(&current->sighand->siglock);
214 regs->gprs[2] = -EINTR;
215
216 while (1) {
217 set_current_state(TASK_INTERRUPTIBLE);
218 schedule();
219 if (do_signal(regs, &saveset))
220 return -EINTR;
221 }
222}
223
224asmlinkage long 161asmlinkage long
225sys32_sigaction(int sig, const struct old_sigaction32 __user *act, 162sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
226 struct old_sigaction32 __user *oact) 163 struct old_sigaction32 __user *oact)
@@ -258,9 +195,6 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
258 return ret; 195 return ret;
259} 196}
260 197
261int
262do_sigaction(int sig, const struct k_sigaction *act, struct k_sigaction *oact);
263
264asmlinkage long 198asmlinkage long
265sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, 199sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
266 struct sigaction32 __user *oact, size_t sigsetsize) 200 struct sigaction32 __user *oact, size_t sigsetsize)
@@ -520,7 +454,7 @@ static inline int map_signal(int sig)
520 return sig; 454 return sig;
521} 455}
522 456
523static void setup_frame32(int sig, struct k_sigaction *ka, 457static int setup_frame32(int sig, struct k_sigaction *ka,
524 sigset_t *set, struct pt_regs * regs) 458 sigset_t *set, struct pt_regs * regs)
525{ 459{
526 sigframe32 __user *frame = get_sigframe(ka, regs, sizeof(sigframe32)); 460 sigframe32 __user *frame = get_sigframe(ka, regs, sizeof(sigframe32));
@@ -565,13 +499,14 @@ static void setup_frame32(int sig, struct k_sigaction *ka,
565 /* Place signal number on stack to allow backtrace from handler. */ 499 /* Place signal number on stack to allow backtrace from handler. */
566 if (__put_user(regs->gprs[2], (int __user *) &frame->signo)) 500 if (__put_user(regs->gprs[2], (int __user *) &frame->signo))
567 goto give_sigsegv; 501 goto give_sigsegv;
568 return; 502 return 0;
569 503
570give_sigsegv: 504give_sigsegv:
571 force_sigsegv(sig, current); 505 force_sigsegv(sig, current);
506 return -EFAULT;
572} 507}
573 508
574static void setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, 509static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info,
575 sigset_t *set, struct pt_regs * regs) 510 sigset_t *set, struct pt_regs * regs)
576{ 511{
577 int err = 0; 512 int err = 0;
@@ -615,31 +550,37 @@ static void setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info,
615 regs->gprs[2] = map_signal(sig); 550 regs->gprs[2] = map_signal(sig);
616 regs->gprs[3] = (__u64) &frame->info; 551 regs->gprs[3] = (__u64) &frame->info;
617 regs->gprs[4] = (__u64) &frame->uc; 552 regs->gprs[4] = (__u64) &frame->uc;
618 return; 553 return 0;
619 554
620give_sigsegv: 555give_sigsegv:
621 force_sigsegv(sig, current); 556 force_sigsegv(sig, current);
557 return -EFAULT;
622} 558}
623 559
624/* 560/*
625 * OK, we're invoking a handler 561 * OK, we're invoking a handler
626 */ 562 */
627 563
628void 564int
629handle_signal32(unsigned long sig, struct k_sigaction *ka, 565handle_signal32(unsigned long sig, struct k_sigaction *ka,
630 siginfo_t *info, sigset_t *oldset, struct pt_regs * regs) 566 siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
631{ 567{
568 int ret;
569
632 /* Set up the stack frame */ 570 /* Set up the stack frame */
633 if (ka->sa.sa_flags & SA_SIGINFO) 571 if (ka->sa.sa_flags & SA_SIGINFO)
634 setup_rt_frame32(sig, ka, info, oldset, regs); 572 ret = setup_rt_frame32(sig, ka, info, oldset, regs);
635 else 573 else
636 setup_frame32(sig, ka, oldset, regs); 574 ret = setup_frame32(sig, ka, oldset, regs);
637 575
638 spin_lock_irq(&current->sighand->siglock); 576 if (ret == 0) {
639 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask); 577 spin_lock_irq(&current->sighand->siglock);
640 if (!(ka->sa.sa_flags & SA_NODEFER)) 578 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
641 sigaddset(&current->blocked,sig); 579 if (!(ka->sa.sa_flags & SA_NODEFER))
642 recalc_sigpending(); 580 sigaddset(&current->blocked,sig);
643 spin_unlock_irq(&current->sighand->siglock); 581 recalc_sigpending();
582 spin_unlock_irq(&current->sighand->siglock);
583 }
584 return ret;
644} 585}
645 586
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
index cfde1905d07d..50e80138e7ad 100644
--- a/arch/s390/kernel/compat_wrapper.S
+++ b/arch/s390/kernel/compat_wrapper.S
@@ -1,9 +1,8 @@
1/* 1/*
2* arch/s390/kernel/sys_wrapper31.S 2* arch/s390/kernel/compat_wrapper.S
3* wrapper for 31 bit compatible system calls. 3* wrapper for 31 bit compatible system calls.
4* 4*
5* S390 version 5* Copyright (C) IBM Corp. 2000,2006
6* Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
7* Author(s): Gerhard Tonn (ton@de.ibm.com), 6* Author(s): Gerhard Tonn (ton@de.ibm.com),
8* Thomas Spatzier (tspat@de.ibm.com) 7* Thomas Spatzier (tspat@de.ibm.com)
9*/ 8*/
@@ -288,7 +287,12 @@ sys32_setregid16_wrapper:
288 llgfr %r3,%r3 # __kernel_old_gid_emu31_t 287 llgfr %r3,%r3 # __kernel_old_gid_emu31_t
289 jg sys32_setregid16 # branch to system call 288 jg sys32_setregid16 # branch to system call
290 289
291#sys32_sigsuspend_wrapper # done in sigsuspend_glue 290 .globl sys_sigsuspend_wrapper
291sys_sigsuspend_wrapper:
292 lgfr %r2,%r2 # int
293 lgfr %r3,%r3 # int
294 llgfr %r4,%r4 # old_sigset_t
295 jg sys_sigsuspend
292 296
293 .globl compat_sys_sigpending_wrapper 297 .globl compat_sys_sigpending_wrapper
294compat_sys_sigpending_wrapper: 298compat_sys_sigpending_wrapper:
@@ -855,7 +859,11 @@ sys32_rt_sigqueueinfo_wrapper:
855 llgtr %r4,%r4 # siginfo_emu31_t * 859 llgtr %r4,%r4 # siginfo_emu31_t *
856 jg sys32_rt_sigqueueinfo # branch to system call 860 jg sys32_rt_sigqueueinfo # branch to system call
857 861
858#sys32_rt_sigsuspend_wrapper # done in rt_sigsuspend_glue 862 .globl compat_sys_rt_sigsuspend_wrapper
863compat_sys_rt_sigsuspend_wrapper:
864 llgtr %r2,%r2 # compat_sigset_t *
865 llgfr %r3,%r3 # compat_size_t
866 jg compat_sys_rt_sigsuspend
859 867
860 .globl sys32_pread64_wrapper 868 .globl sys32_pread64_wrapper
861sys32_pread64_wrapper: 869sys32_pread64_wrapper:
@@ -1475,3 +1483,128 @@ sys_inotify_rm_watch_wrapper:
1475 lgfr %r2,%r2 # int 1483 lgfr %r2,%r2 # int
1476 llgfr %r3,%r3 # u32 1484 llgfr %r3,%r3 # u32
1477 jg sys_inotify_rm_watch 1485 jg sys_inotify_rm_watch
1486
1487 .globl compat_sys_openat_wrapper
1488compat_sys_openat_wrapper:
1489 llgfr %r2,%r2 # unsigned int
1490 llgtr %r3,%r3 # const char *
1491 lgfr %r4,%r4 # int
1492 lgfr %r5,%r5 # int
1493 jg compat_sys_openat
1494
1495 .globl sys_mkdirat_wrapper
1496sys_mkdirat_wrapper:
1497 lgfr %r2,%r2 # int
1498 llgtr %r3,%r3 # const char *
1499 lgfr %r4,%r4 # int
1500 jg sys_mkdirat
1501
1502 .globl sys_mknodat_wrapper
1503sys_mknodat_wrapper:
1504 lgfr %r2,%r2 # int
1505 llgtr %r3,%r3 # const char *
1506 lgfr %r4,%r4 # int
1507 llgfr %r5,%r5 # unsigned int
1508 jg sys_mknodat
1509
1510 .globl sys_fchownat_wrapper
1511sys_fchownat_wrapper:
1512 lgfr %r2,%r2 # int
1513 llgtr %r3,%r3 # const char *
1514 llgfr %r4,%r4 # uid_t
1515 llgfr %r5,%r5 # gid_t
1516 lgfr %r6,%r6 # int
1517 jg sys_fchownat
1518
1519 .globl compat_sys_futimesat_wrapper
1520compat_sys_futimesat_wrapper:
1521 llgfr %r2,%r2 # unsigned int
1522 llgtr %r3,%r3 # char *
1523 llgtr %r4,%r4 # struct timeval *
1524 jg compat_sys_futimesat
1525
1526 .globl sys32_fstatat64_wrapper
1527sys32_fstatat64_wrapper:
1528 llgfr %r2,%r2 # unsigned int
1529 llgtr %r3,%r3 # char *
1530 llgtr %r4,%r4 # struct stat64 *
1531 lgfr %r5,%r5 # int
1532 jg sys32_fstatat64
1533
1534 .globl sys_unlinkat_wrapper
1535sys_unlinkat_wrapper:
1536 lgfr %r2,%r2 # int
1537 llgtr %r3,%r3 # const char *
1538 lgfr %r4,%r4 # int
1539 jg sys_unlinkat
1540
1541 .globl sys_renameat_wrapper
1542sys_renameat_wrapper:
1543 lgfr %r2,%r2 # int
1544 llgtr %r3,%r3 # const char *
1545 lgfr %r4,%r4 # int
1546 llgtr %r5,%r5 # const char *
1547 jg sys_renameat
1548
1549 .globl sys_linkat_wrapper
1550sys_linkat_wrapper:
1551 lgfr %r2,%r2 # int
1552 llgtr %r3,%r3 # const char *
1553 lgfr %r4,%r4 # int
1554 llgtr %r5,%r5 # const char *
1555 lgfr %r6,%r6 # int
1556 jg sys_linkat
1557
1558 .globl sys_symlinkat_wrapper
1559sys_symlinkat_wrapper:
1560 llgtr %r2,%r2 # const char *
1561 lgfr %r3,%r3 # int
1562 llgtr %r4,%r4 # const char *
1563 jg sys_symlinkat
1564
1565 .globl sys_readlinkat_wrapper
1566sys_readlinkat_wrapper:
1567 lgfr %r2,%r2 # int
1568 llgtr %r3,%r3 # const char *
1569 llgtr %r4,%r4 # char *
1570 lgfr %r5,%r5 # int
1571 jg sys_readlinkat
1572
1573 .globl sys_fchmodat_wrapper
1574sys_fchmodat_wrapper:
1575 lgfr %r2,%r2 # int
1576 llgtr %r3,%r3 # const char *
1577 llgfr %r4,%r4 # mode_t
1578 jg sys_fchmodat
1579
1580 .globl sys_faccessat_wrapper
1581sys_faccessat_wrapper:
1582 lgfr %r2,%r2 # int
1583 llgtr %r3,%r3 # const char *
1584 lgfr %r4,%r4 # int
1585 jg sys_faccessat
1586
1587 .globl compat_sys_pselect6_wrapper
1588compat_sys_pselect6_wrapper:
1589 lgfr %r2,%r2 # int
1590 llgtr %r3,%r3 # fd_set *
1591 llgtr %r4,%r4 # fd_set *
1592 llgtr %r5,%r5 # fd_set *
1593 llgtr %r6,%r6 # struct timespec *
1594 llgt %r0,164(%r15) # void *
1595 stg %r0,160(%r15)
1596 jg compat_sys_pselect6
1597
1598 .globl compat_sys_ppoll_wrapper
1599compat_sys_ppoll_wrapper:
1600 llgtr %r2,%r2 # struct pollfd *
1601 llgfr %r3,%r3 # unsigned int
1602 llgtr %r4,%r4 # struct timespec *
1603 llgtr %r5,%r5 # const sigset_t *
1604 llgfr %r6,%r6 # size_t
1605 jg compat_sys_ppoll
1606
1607 .globl sys_unshare_wrapper
1608sys_unshare_wrapper:
1609 llgfr %r2,%r2 # unsigned long
1610 jg sys_unshare
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index 27b07730b7b8..b2448487854c 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -2,8 +2,7 @@
2 * arch/s390/kernel/entry.S 2 * arch/s390/kernel/entry.S
3 * S390 low-level entry points. 3 * S390 low-level entry points.
4 * 4 *
5 * S390 version 5 * Copyright (C) IBM Corp. 1999,2006
6 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
8 * Hartmut Penner (hp@de.ibm.com), 7 * Hartmut Penner (hp@de.ibm.com),
9 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), 8 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
@@ -50,9 +49,10 @@ SP_ILC = STACK_FRAME_OVERHEAD + __PT_ILC
50SP_TRAP = STACK_FRAME_OVERHEAD + __PT_TRAP 49SP_TRAP = STACK_FRAME_OVERHEAD + __PT_TRAP
51SP_SIZE = STACK_FRAME_OVERHEAD + __PT_SIZE 50SP_SIZE = STACK_FRAME_OVERHEAD + __PT_SIZE
52 51
53_TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING | \ 52_TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \
54 _TIF_RESTART_SVC | _TIF_SINGLE_STEP ) 53 _TIF_MCCK_PENDING | _TIF_RESTART_SVC | _TIF_SINGLE_STEP )
55_TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING) 54_TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \
55 _TIF_MCCK_PENDING)
56 56
57STACK_SHIFT = PAGE_SHIFT + THREAD_ORDER 57STACK_SHIFT = PAGE_SHIFT + THREAD_ORDER
58STACK_SIZE = 1 << STACK_SHIFT 58STACK_SIZE = 1 << STACK_SHIFT
@@ -251,8 +251,8 @@ sysc_work:
251 bo BASED(sysc_mcck_pending) 251 bo BASED(sysc_mcck_pending)
252 tm __TI_flags+3(%r9),_TIF_NEED_RESCHED 252 tm __TI_flags+3(%r9),_TIF_NEED_RESCHED
253 bo BASED(sysc_reschedule) 253 bo BASED(sysc_reschedule)
254 tm __TI_flags+3(%r9),_TIF_SIGPENDING 254 tm __TI_flags+3(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)
255 bo BASED(sysc_sigpending) 255 bnz BASED(sysc_sigpending)
256 tm __TI_flags+3(%r9),_TIF_RESTART_SVC 256 tm __TI_flags+3(%r9),_TIF_RESTART_SVC
257 bo BASED(sysc_restart) 257 bo BASED(sysc_restart)
258 tm __TI_flags+3(%r9),_TIF_SINGLE_STEP 258 tm __TI_flags+3(%r9),_TIF_SINGLE_STEP
@@ -276,12 +276,11 @@ sysc_mcck_pending:
276 br %r1 # TIF bit will be cleared by handler 276 br %r1 # TIF bit will be cleared by handler
277 277
278# 278#
279# _TIF_SIGPENDING is set, call do_signal 279# _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal
280# 280#
281sysc_sigpending: 281sysc_sigpending:
282 ni __TI_flags+3(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP 282 ni __TI_flags+3(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP
283 la %r2,SP_PTREGS(%r15) # load pt_regs 283 la %r2,SP_PTREGS(%r15) # load pt_regs
284 sr %r3,%r3 # clear *oldset
285 l %r1,BASED(.Ldo_signal) 284 l %r1,BASED(.Ldo_signal)
286 basr %r14,%r1 # call do_signal 285 basr %r14,%r1 # call do_signal
287 tm __TI_flags+3(%r9),_TIF_RESTART_SVC 286 tm __TI_flags+3(%r9),_TIF_RESTART_SVC
@@ -397,30 +396,6 @@ sys_rt_sigreturn_glue:
397 l %r1,BASED(.Lrt_sigreturn) 396 l %r1,BASED(.Lrt_sigreturn)
398 br %r1 # branch to sys_sigreturn 397 br %r1 # branch to sys_sigreturn
399 398
400#
401# sigsuspend and rt_sigsuspend need pt_regs as an additional
402# parameter and they have to skip the store of %r2 into the
403# user register %r2 because the return value was set in
404# sigsuspend and rt_sigsuspend already and must not be overwritten!
405#
406
407sys_sigsuspend_glue:
408 lr %r5,%r4 # move mask back
409 lr %r4,%r3 # move history1 parameter
410 lr %r3,%r2 # move history0 parameter
411 la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter
412 l %r1,BASED(.Lsigsuspend)
413 la %r14,4(%r14) # skip store of return value
414 br %r1 # branch to sys_sigsuspend
415
416sys_rt_sigsuspend_glue:
417 lr %r4,%r3 # move sigsetsize parameter
418 lr %r3,%r2 # move unewset parameter
419 la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter
420 l %r1,BASED(.Lrt_sigsuspend)
421 la %r14,4(%r14) # skip store of return value
422 br %r1 # branch to sys_rt_sigsuspend
423
424sys_sigaltstack_glue: 399sys_sigaltstack_glue:
425 la %r4,SP_PTREGS(%r15) # load pt_regs as parameter 400 la %r4,SP_PTREGS(%r15) # load pt_regs as parameter
426 l %r1,BASED(.Lsigaltstack) 401 l %r1,BASED(.Lsigaltstack)
@@ -604,15 +579,16 @@ io_work:
604 lr %r15,%r1 579 lr %r15,%r1
605# 580#
606# One of the work bits is on. Find out which one. 581# One of the work bits is on. Find out which one.
607# Checked are: _TIF_SIGPENDING, _TIF_NEED_RESCHED and _TIF_MCCK_PENDING 582# Checked are: _TIF_SIGPENDING, _TIF_RESTORE_SIGMASK, _TIF_NEED_RESCHED
583# and _TIF_MCCK_PENDING
608# 584#
609io_work_loop: 585io_work_loop:
610 tm __TI_flags+3(%r9),_TIF_MCCK_PENDING 586 tm __TI_flags+3(%r9),_TIF_MCCK_PENDING
611 bo BASED(io_mcck_pending) 587 bo BASED(io_mcck_pending)
612 tm __TI_flags+3(%r9),_TIF_NEED_RESCHED 588 tm __TI_flags+3(%r9),_TIF_NEED_RESCHED
613 bo BASED(io_reschedule) 589 bo BASED(io_reschedule)
614 tm __TI_flags+3(%r9),_TIF_SIGPENDING 590 tm __TI_flags+3(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)
615 bo BASED(io_sigpending) 591 bnz BASED(io_sigpending)
616 b BASED(io_leave) 592 b BASED(io_leave)
617 593
618# 594#
@@ -636,12 +612,11 @@ io_reschedule:
636 b BASED(io_work_loop) 612 b BASED(io_work_loop)
637 613
638# 614#
639# _TIF_SIGPENDING is set, call do_signal 615# _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal
640# 616#
641io_sigpending: 617io_sigpending:
642 stosm __SF_EMPTY(%r15),0x03 # reenable interrupts 618 stosm __SF_EMPTY(%r15),0x03 # reenable interrupts
643 la %r2,SP_PTREGS(%r15) # load pt_regs 619 la %r2,SP_PTREGS(%r15) # load pt_regs
644 sr %r3,%r3 # clear *oldset
645 l %r1,BASED(.Ldo_signal) 620 l %r1,BASED(.Ldo_signal)
646 basr %r14,%r1 # call do_signal 621 basr %r14,%r1 # call do_signal
647 stnsm __SF_EMPTY(%r15),0xfc # disable I/O and ext. interrupts 622 stnsm __SF_EMPTY(%r15),0xfc # disable I/O and ext. interrupts
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
index 369ab4413ec7..2ac095bc0e25 100644
--- a/arch/s390/kernel/entry64.S
+++ b/arch/s390/kernel/entry64.S
@@ -1,9 +1,8 @@
1/* 1/*
2 * arch/s390/kernel/entry.S 2 * arch/s390/kernel/entry64.S
3 * S390 low-level entry points. 3 * S390 low-level entry points.
4 * 4 *
5 * S390 version 5 * Copyright (C) IBM Corp. 1999,2006
6 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
8 * Hartmut Penner (hp@de.ibm.com), 7 * Hartmut Penner (hp@de.ibm.com),
9 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), 8 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
@@ -53,9 +52,10 @@ SP_SIZE = STACK_FRAME_OVERHEAD + __PT_SIZE
53STACK_SHIFT = PAGE_SHIFT + THREAD_ORDER 52STACK_SHIFT = PAGE_SHIFT + THREAD_ORDER
54STACK_SIZE = 1 << STACK_SHIFT 53STACK_SIZE = 1 << STACK_SHIFT
55 54
56_TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING | \ 55_TIF_WORK_SVC = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \
57 _TIF_RESTART_SVC | _TIF_SINGLE_STEP ) 56 _TIF_MCCK_PENDING | _TIF_RESTART_SVC | _TIF_SINGLE_STEP )
58_TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING) 57_TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \
58 _TIF_MCCK_PENDING)
59 59
60#define BASED(name) name-system_call(%r13) 60#define BASED(name) name-system_call(%r13)
61 61
@@ -249,8 +249,8 @@ sysc_work:
249 jo sysc_mcck_pending 249 jo sysc_mcck_pending
250 tm __TI_flags+7(%r9),_TIF_NEED_RESCHED 250 tm __TI_flags+7(%r9),_TIF_NEED_RESCHED
251 jo sysc_reschedule 251 jo sysc_reschedule
252 tm __TI_flags+7(%r9),_TIF_SIGPENDING 252 tm __TI_flags+7(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)
253 jo sysc_sigpending 253 jnz sysc_sigpending
254 tm __TI_flags+7(%r9),_TIF_RESTART_SVC 254 tm __TI_flags+7(%r9),_TIF_RESTART_SVC
255 jo sysc_restart 255 jo sysc_restart
256 tm __TI_flags+7(%r9),_TIF_SINGLE_STEP 256 tm __TI_flags+7(%r9),_TIF_SINGLE_STEP
@@ -272,12 +272,11 @@ sysc_mcck_pending:
272 jg s390_handle_mcck # TIF bit will be cleared by handler 272 jg s390_handle_mcck # TIF bit will be cleared by handler
273 273
274# 274#
275# _TIF_SIGPENDING is set, call do_signal 275# _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal
276# 276#
277sysc_sigpending: 277sysc_sigpending:
278 ni __TI_flags+7(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP 278 ni __TI_flags+7(%r9),255-_TIF_SINGLE_STEP # clear TIF_SINGLE_STEP
279 la %r2,SP_PTREGS(%r15) # load pt_regs 279 la %r2,SP_PTREGS(%r15) # load pt_regs
280 sgr %r3,%r3 # clear *oldset
281 brasl %r14,do_signal # call do_signal 280 brasl %r14,do_signal # call do_signal
282 tm __TI_flags+7(%r9),_TIF_RESTART_SVC 281 tm __TI_flags+7(%r9),_TIF_RESTART_SVC
283 jo sysc_restart 282 jo sysc_restart
@@ -414,52 +413,6 @@ sys32_rt_sigreturn_glue:
414 jg sys32_rt_sigreturn # branch to sys32_sigreturn 413 jg sys32_rt_sigreturn # branch to sys32_sigreturn
415#endif 414#endif
416 415
417#
418# sigsuspend and rt_sigsuspend need pt_regs as an additional
419# parameter and they have to skip the store of %r2 into the
420# user register %r2 because the return value was set in
421# sigsuspend and rt_sigsuspend already and must not be overwritten!
422#
423
424sys_sigsuspend_glue:
425 lgr %r5,%r4 # move mask back
426 lgr %r4,%r3 # move history1 parameter
427 lgr %r3,%r2 # move history0 parameter
428 la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter
429 la %r14,6(%r14) # skip store of return value
430 jg sys_sigsuspend # branch to sys_sigsuspend
431
432#ifdef CONFIG_COMPAT
433sys32_sigsuspend_glue:
434 llgfr %r4,%r4 # unsigned long
435 lgr %r5,%r4 # move mask back
436 lgfr %r3,%r3 # int
437 lgr %r4,%r3 # move history1 parameter
438 lgfr %r2,%r2 # int
439 lgr %r3,%r2 # move history0 parameter
440 la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter
441 la %r14,6(%r14) # skip store of return value
442 jg sys32_sigsuspend # branch to sys32_sigsuspend
443#endif
444
445sys_rt_sigsuspend_glue:
446 lgr %r4,%r3 # move sigsetsize parameter
447 lgr %r3,%r2 # move unewset parameter
448 la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter
449 la %r14,6(%r14) # skip store of return value
450 jg sys_rt_sigsuspend # branch to sys_rt_sigsuspend
451
452#ifdef CONFIG_COMPAT
453sys32_rt_sigsuspend_glue:
454 llgfr %r3,%r3 # size_t
455 lgr %r4,%r3 # move sigsetsize parameter
456 llgtr %r2,%r2 # sigset_emu31_t *
457 lgr %r3,%r2 # move unewset parameter
458 la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter
459 la %r14,6(%r14) # skip store of return value
460 jg sys32_rt_sigsuspend # branch to sys32_rt_sigsuspend
461#endif
462
463sys_sigaltstack_glue: 416sys_sigaltstack_glue:
464 la %r4,SP_PTREGS(%r15) # load pt_regs as parameter 417 la %r4,SP_PTREGS(%r15) # load pt_regs as parameter
465 jg sys_sigaltstack # branch to sys_sigreturn 418 jg sys_sigaltstack # branch to sys_sigreturn
@@ -646,15 +599,16 @@ io_work:
646 lgr %r15,%r1 599 lgr %r15,%r1
647# 600#
648# One of the work bits is on. Find out which one. 601# One of the work bits is on. Find out which one.
649# Checked are: _TIF_SIGPENDING, _TIF_NEED_RESCHED and _TIF_MCCK_PENDING 602# Checked are: _TIF_SIGPENDING, _TIF_RESTORE_SIGPENDING, _TIF_NEED_RESCHED
603# and _TIF_MCCK_PENDING
650# 604#
651io_work_loop: 605io_work_loop:
652 tm __TI_flags+7(%r9),_TIF_MCCK_PENDING 606 tm __TI_flags+7(%r9),_TIF_MCCK_PENDING
653 jo io_mcck_pending 607 jo io_mcck_pending
654 tm __TI_flags+7(%r9),_TIF_NEED_RESCHED 608 tm __TI_flags+7(%r9),_TIF_NEED_RESCHED
655 jo io_reschedule 609 jo io_reschedule
656 tm __TI_flags+7(%r9),_TIF_SIGPENDING 610 tm __TI_flags+7(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)
657 jo io_sigpending 611 jnz io_sigpending
658 j io_leave 612 j io_leave
659 613
660# 614#
@@ -676,12 +630,11 @@ io_reschedule:
676 j io_work_loop 630 j io_work_loop
677 631
678# 632#
679# _TIF_SIGPENDING is set, call do_signal 633# _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal
680# 634#
681io_sigpending: 635io_sigpending:
682 stosm __SF_EMPTY(%r15),0x03 # reenable interrupts 636 stosm __SF_EMPTY(%r15),0x03 # reenable interrupts
683 la %r2,SP_PTREGS(%r15) # load pt_regs 637 la %r2,SP_PTREGS(%r15) # load pt_regs
684 slgr %r3,%r3 # clear *oldset
685 brasl %r14,do_signal # call do_signal 638 brasl %r14,do_signal # call do_signal
686 stnsm __SF_EMPTY(%r15),0xfc # disable I/O and ext. interrupts 639 stnsm __SF_EMPTY(%r15),0xfc # disable I/O and ext. interrupts
687 j io_work_loop 640 j io_work_loop
diff --git a/arch/s390/kernel/machine_kexec.c b/arch/s390/kernel/machine_kexec.c
index f0ed5c642c74..bad81b5832db 100644
--- a/arch/s390/kernel/machine_kexec.c
+++ b/arch/s390/kernel/machine_kexec.c
@@ -12,15 +12,16 @@
12 * on the S390 architecture. 12 * on the S390 architecture.
13 */ 13 */
14 14
15#include <asm/cio.h>
16#include <asm/setup.h>
17#include <linux/device.h> 15#include <linux/device.h>
18#include <linux/mm.h> 16#include <linux/mm.h>
19#include <linux/kexec.h> 17#include <linux/kexec.h>
20#include <linux/delay.h> 18#include <linux/delay.h>
19#include <asm/cio.h>
20#include <asm/setup.h>
21#include <asm/pgtable.h> 21#include <asm/pgtable.h>
22#include <asm/pgalloc.h> 22#include <asm/pgalloc.h>
23#include <asm/system.h> 23#include <asm/system.h>
24#include <asm/smp.h>
24 25
25static void kexec_halt_all_cpus(void *); 26static void kexec_halt_all_cpus(void *);
26 27
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index 008c74526fd3..da6fbae8df91 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -128,8 +128,10 @@ void default_idle(void)
128 __ctl_set_bit(8, 15); 128 __ctl_set_bit(8, 15);
129 129
130#ifdef CONFIG_HOTPLUG_CPU 130#ifdef CONFIG_HOTPLUG_CPU
131 if (cpu_is_offline(cpu)) 131 if (cpu_is_offline(cpu)) {
132 preempt_enable_no_resched();
132 cpu_die(); 133 cpu_die();
134 }
133#endif 135#endif
134 136
135 local_mcck_disable(); 137 local_mcck_disable();
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index de8784267473..24f62f16c0e5 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -600,6 +600,7 @@ setup_arch(char **cmdline_p)
600 init_mm.brk = (unsigned long) &_end; 600 init_mm.brk = (unsigned long) &_end;
601 601
602 parse_cmdline_early(cmdline_p); 602 parse_cmdline_early(cmdline_p);
603 parse_early_param();
603 604
604 setup_memory(); 605 setup_memory();
605 setup_resources(); 606 setup_resources();
@@ -607,6 +608,7 @@ setup_arch(char **cmdline_p)
607 608
608 cpu_init(); 609 cpu_init();
609 __cpu_logical_map[0] = S390_lowcore.cpu_data.cpu_addr; 610 __cpu_logical_map[0] = S390_lowcore.cpu_data.cpu_addr;
611 smp_setup_cpu_possible_map();
610 612
611 /* 613 /*
612 * Create kernel page tables and switch to virtual addressing. 614 * Create kernel page tables and switch to virtual addressing.
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
index 6ae4a77270b5..ae1927e48cfb 100644
--- a/arch/s390/kernel/signal.c
+++ b/arch/s390/kernel/signal.c
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/signal.c 2 * arch/s390/kernel/signal.c
3 * 3 *
4 * S390 version 4 * Copyright (C) IBM Corp. 1999,2006
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
6 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 5 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
7 * 6 *
8 * Based on Intel version 7 * Based on Intel version
@@ -51,60 +50,24 @@ typedef struct
51 struct ucontext uc; 50 struct ucontext uc;
52} rt_sigframe; 51} rt_sigframe;
53 52
54int do_signal(struct pt_regs *regs, sigset_t *oldset);
55
56/* 53/*
57 * Atomically swap in the new signal mask, and wait for a signal. 54 * Atomically swap in the new signal mask, and wait for a signal.
58 */ 55 */
59asmlinkage int 56asmlinkage int
60sys_sigsuspend(struct pt_regs * regs, int history0, int history1, 57sys_sigsuspend(int history0, int history1, old_sigset_t mask)
61 old_sigset_t mask)
62{ 58{
63 sigset_t saveset;
64
65 mask &= _BLOCKABLE; 59 mask &= _BLOCKABLE;
66 spin_lock_irq(&current->sighand->siglock); 60 spin_lock_irq(&current->sighand->siglock);
67 saveset = current->blocked; 61 current->saved_sigmask = current->blocked;
68 siginitset(&current->blocked, mask); 62 siginitset(&current->blocked, mask);
69 recalc_sigpending(); 63 recalc_sigpending();
70 spin_unlock_irq(&current->sighand->siglock); 64 spin_unlock_irq(&current->sighand->siglock);
71 regs->gprs[2] = -EINTR;
72
73 while (1) {
74 set_current_state(TASK_INTERRUPTIBLE);
75 schedule();
76 if (do_signal(regs, &saveset))
77 return -EINTR;
78 }
79}
80
81asmlinkage long
82sys_rt_sigsuspend(struct pt_regs *regs, sigset_t __user *unewset,
83 size_t sigsetsize)
84{
85 sigset_t saveset, newset;
86 65
87 /* XXX: Don't preclude handling different sized sigset_t's. */ 66 current->state = TASK_INTERRUPTIBLE;
88 if (sigsetsize != sizeof(sigset_t)) 67 schedule();
89 return -EINVAL; 68 set_thread_flag(TIF_RESTORE_SIGMASK);
90 69
91 if (copy_from_user(&newset, unewset, sizeof(newset))) 70 return -ERESTARTNOHAND;
92 return -EFAULT;
93 sigdelsetmask(&newset, ~_BLOCKABLE);
94
95 spin_lock_irq(&current->sighand->siglock);
96 saveset = current->blocked;
97 current->blocked = newset;
98 recalc_sigpending();
99 spin_unlock_irq(&current->sighand->siglock);
100 regs->gprs[2] = -EINTR;
101
102 while (1) {
103 set_current_state(TASK_INTERRUPTIBLE);
104 schedule();
105 if (do_signal(regs, &saveset))
106 return -EINTR;
107 }
108} 71}
109 72
110asmlinkage long 73asmlinkage long
@@ -306,8 +269,8 @@ static inline int map_signal(int sig)
306 return sig; 269 return sig;
307} 270}
308 271
309static void setup_frame(int sig, struct k_sigaction *ka, 272static int setup_frame(int sig, struct k_sigaction *ka,
310 sigset_t *set, struct pt_regs * regs) 273 sigset_t *set, struct pt_regs * regs)
311{ 274{
312 sigframe __user *frame; 275 sigframe __user *frame;
313 276
@@ -355,13 +318,14 @@ static void setup_frame(int sig, struct k_sigaction *ka,
355 /* Place signal number on stack to allow backtrace from handler. */ 318 /* Place signal number on stack to allow backtrace from handler. */
356 if (__put_user(regs->gprs[2], (int __user *) &frame->signo)) 319 if (__put_user(regs->gprs[2], (int __user *) &frame->signo))
357 goto give_sigsegv; 320 goto give_sigsegv;
358 return; 321 return 0;
359 322
360give_sigsegv: 323give_sigsegv:
361 force_sigsegv(sig, current); 324 force_sigsegv(sig, current);
325 return -EFAULT;
362} 326}
363 327
364static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, 328static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
365 sigset_t *set, struct pt_regs * regs) 329 sigset_t *set, struct pt_regs * regs)
366{ 330{
367 int err = 0; 331 int err = 0;
@@ -409,32 +373,39 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
409 regs->gprs[2] = map_signal(sig); 373 regs->gprs[2] = map_signal(sig);
410 regs->gprs[3] = (unsigned long) &frame->info; 374 regs->gprs[3] = (unsigned long) &frame->info;
411 regs->gprs[4] = (unsigned long) &frame->uc; 375 regs->gprs[4] = (unsigned long) &frame->uc;
412 return; 376 return 0;
413 377
414give_sigsegv: 378give_sigsegv:
415 force_sigsegv(sig, current); 379 force_sigsegv(sig, current);
380 return -EFAULT;
416} 381}
417 382
418/* 383/*
419 * OK, we're invoking a handler 384 * OK, we're invoking a handler
420 */ 385 */
421 386
422static void 387static int
423handle_signal(unsigned long sig, struct k_sigaction *ka, 388handle_signal(unsigned long sig, struct k_sigaction *ka,
424 siginfo_t *info, sigset_t *oldset, struct pt_regs * regs) 389 siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
425{ 390{
391 int ret;
392
426 /* Set up the stack frame */ 393 /* Set up the stack frame */
427 if (ka->sa.sa_flags & SA_SIGINFO) 394 if (ka->sa.sa_flags & SA_SIGINFO)
428 setup_rt_frame(sig, ka, info, oldset, regs); 395 ret = setup_rt_frame(sig, ka, info, oldset, regs);
429 else 396 else
430 setup_frame(sig, ka, oldset, regs); 397 ret = setup_frame(sig, ka, oldset, regs);
398
399 if (ret == 0) {
400 spin_lock_irq(&current->sighand->siglock);
401 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
402 if (!(ka->sa.sa_flags & SA_NODEFER))
403 sigaddset(&current->blocked,sig);
404 recalc_sigpending();
405 spin_unlock_irq(&current->sighand->siglock);
406 }
431 407
432 spin_lock_irq(&current->sighand->siglock); 408 return ret;
433 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
434 if (!(ka->sa.sa_flags & SA_NODEFER))
435 sigaddset(&current->blocked,sig);
436 recalc_sigpending();
437 spin_unlock_irq(&current->sighand->siglock);
438} 409}
439 410
440/* 411/*
@@ -446,12 +417,13 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
446 * the kernel can handle, and then we build all the user-level signal handling 417 * the kernel can handle, and then we build all the user-level signal handling
447 * stack-frames in one go after that. 418 * stack-frames in one go after that.
448 */ 419 */
449int do_signal(struct pt_regs *regs, sigset_t *oldset) 420void do_signal(struct pt_regs *regs)
450{ 421{
451 unsigned long retval = 0, continue_addr = 0, restart_addr = 0; 422 unsigned long retval = 0, continue_addr = 0, restart_addr = 0;
452 siginfo_t info; 423 siginfo_t info;
453 int signr; 424 int signr;
454 struct k_sigaction ka; 425 struct k_sigaction ka;
426 sigset_t *oldset;
455 427
456 /* 428 /*
457 * We want the common case to go fast, which 429 * We want the common case to go fast, which
@@ -460,9 +432,11 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
460 * if so. 432 * if so.
461 */ 433 */
462 if (!user_mode(regs)) 434 if (!user_mode(regs))
463 return 1; 435 return;
464 436
465 if (!oldset) 437 if (test_thread_flag(TIF_RESTORE_SIGMASK))
438 oldset = &current->saved_sigmask;
439 else
466 oldset = &current->blocked; 440 oldset = &current->blocked;
467 441
468 /* Are we from a system call? */ 442 /* Are we from a system call? */
@@ -473,12 +447,14 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
473 447
474 /* Prepare for system call restart. We do this here so that a 448 /* Prepare for system call restart. We do this here so that a
475 debugger will see the already changed PSW. */ 449 debugger will see the already changed PSW. */
476 if (retval == -ERESTARTNOHAND || 450 switch (retval) {
477 retval == -ERESTARTSYS || 451 case -ERESTARTNOHAND:
478 retval == -ERESTARTNOINTR) { 452 case -ERESTARTSYS:
453 case -ERESTARTNOINTR:
479 regs->gprs[2] = regs->orig_gpr2; 454 regs->gprs[2] = regs->orig_gpr2;
480 regs->psw.addr = restart_addr; 455 regs->psw.addr = restart_addr;
481 } else if (retval == -ERESTART_RESTARTBLOCK) { 456 break;
457 case -ERESTART_RESTARTBLOCK:
482 regs->gprs[2] = -EINTR; 458 regs->gprs[2] = -EINTR;
483 } 459 }
484 } 460 }
@@ -503,17 +479,38 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
503 /* Whee! Actually deliver the signal. */ 479 /* Whee! Actually deliver the signal. */
504#ifdef CONFIG_COMPAT 480#ifdef CONFIG_COMPAT
505 if (test_thread_flag(TIF_31BIT)) { 481 if (test_thread_flag(TIF_31BIT)) {
506 extern void handle_signal32(unsigned long sig, 482 extern int handle_signal32(unsigned long sig,
507 struct k_sigaction *ka, 483 struct k_sigaction *ka,
508 siginfo_t *info, 484 siginfo_t *info,
509 sigset_t *oldset, 485 sigset_t *oldset,
510 struct pt_regs *regs); 486 struct pt_regs *regs);
511 handle_signal32(signr, &ka, &info, oldset, regs); 487 if (handle_signal32(
512 return 1; 488 signr, &ka, &info, oldset, regs) == 0) {
489 if (test_thread_flag(TIF_RESTORE_SIGMASK))
490 clear_thread_flag(TIF_RESTORE_SIGMASK);
491 }
492 return;
513 } 493 }
514#endif 494#endif
515 handle_signal(signr, &ka, &info, oldset, regs); 495 if (handle_signal(signr, &ka, &info, oldset, regs) == 0) {
516 return 1; 496 /*
497 * A signal was successfully delivered; the saved
498 * sigmask will have been stored in the signal frame,
499 * and will be restored by sigreturn, so we can simply
500 * clear the TIF_RESTORE_SIGMASK flag.
501 */
502 if (test_thread_flag(TIF_RESTORE_SIGMASK))
503 clear_thread_flag(TIF_RESTORE_SIGMASK);
504 }
505 return;
506 }
507
508 /*
509 * If there's no signal to deliver, we just put the saved sigmask back.
510 */
511 if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
512 clear_thread_flag(TIF_RESTORE_SIGMASK);
513 sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
517 } 514 }
518 515
519 /* Restart a different system call. */ 516 /* Restart a different system call. */
@@ -522,5 +519,4 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
522 regs->gprs[2] = __NR_restart_syscall; 519 regs->gprs[2] = __NR_restart_syscall;
523 set_thread_flag(TIF_RESTART_SVC); 520 set_thread_flag(TIF_RESTART_SVC);
524 } 521 }
525 return 0;
526} 522}
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index cbfcfd02a43a..7dbe00c76c6b 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/smp.c 2 * arch/s390/kernel/smp.c
3 * 3 *
4 * S390 version 4 * Copyright (C) IBM Corp. 1999,2006
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
6 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), 5 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
7 * Martin Schwidefsky (schwidefsky@de.ibm.com) 6 * Martin Schwidefsky (schwidefsky@de.ibm.com)
8 * Heiko Carstens (heiko.carstens@de.ibm.com) 7 * Heiko Carstens (heiko.carstens@de.ibm.com)
@@ -41,8 +40,6 @@
41#include <asm/cpcmd.h> 40#include <asm/cpcmd.h>
42#include <asm/tlbflush.h> 41#include <asm/tlbflush.h>
43 42
44/* prototypes */
45
46extern volatile int __cpu_logical_map[]; 43extern volatile int __cpu_logical_map[];
47 44
48/* 45/*
@@ -51,13 +48,11 @@ extern volatile int __cpu_logical_map[];
51 48
52struct _lowcore *lowcore_ptr[NR_CPUS]; 49struct _lowcore *lowcore_ptr[NR_CPUS];
53 50
54cpumask_t cpu_online_map; 51cpumask_t cpu_online_map = CPU_MASK_NONE;
55cpumask_t cpu_possible_map; 52cpumask_t cpu_possible_map = CPU_MASK_NONE;
56 53
57static struct task_struct *current_set[NR_CPUS]; 54static struct task_struct *current_set[NR_CPUS];
58 55
59EXPORT_SYMBOL(cpu_online_map);
60
61/* 56/*
62 * Reboot, halt and power_off routines for SMP. 57 * Reboot, halt and power_off routines for SMP.
63 */ 58 */
@@ -490,10 +485,10 @@ void smp_ctl_clear_bit(int cr, int bit) {
490 * Lets check how many CPUs we have. 485 * Lets check how many CPUs we have.
491 */ 486 */
492 487
493void 488static unsigned int
494__init smp_check_cpus(unsigned int max_cpus) 489__init smp_count_cpus(void)
495{ 490{
496 int cpu, num_cpus; 491 unsigned int cpu, num_cpus;
497 __u16 boot_cpu_addr; 492 __u16 boot_cpu_addr;
498 493
499 /* 494 /*
@@ -503,22 +498,20 @@ __init smp_check_cpus(unsigned int max_cpus)
503 boot_cpu_addr = S390_lowcore.cpu_data.cpu_addr; 498 boot_cpu_addr = S390_lowcore.cpu_data.cpu_addr;
504 current_thread_info()->cpu = 0; 499 current_thread_info()->cpu = 0;
505 num_cpus = 1; 500 num_cpus = 1;
506 for (cpu = 0; cpu <= 65535 && num_cpus < max_cpus; cpu++) { 501 for (cpu = 0; cpu <= 65535; cpu++) {
507 if ((__u16) cpu == boot_cpu_addr) 502 if ((__u16) cpu == boot_cpu_addr)
508 continue; 503 continue;
509 __cpu_logical_map[num_cpus] = (__u16) cpu; 504 __cpu_logical_map[1] = (__u16) cpu;
510 if (signal_processor(num_cpus, sigp_sense) == 505 if (signal_processor(1, sigp_sense) ==
511 sigp_not_operational) 506 sigp_not_operational)
512 continue; 507 continue;
513 cpu_set(num_cpus, cpu_present_map);
514 num_cpus++; 508 num_cpus++;
515 } 509 }
516 510
517 for (cpu = 1; cpu < max_cpus; cpu++)
518 cpu_set(cpu, cpu_possible_map);
519
520 printk("Detected %d CPU's\n",(int) num_cpus); 511 printk("Detected %d CPU's\n",(int) num_cpus);
521 printk("Boot cpu address %2X\n", boot_cpu_addr); 512 printk("Boot cpu address %2X\n", boot_cpu_addr);
513
514 return num_cpus;
522} 515}
523 516
524/* 517/*
@@ -679,6 +672,44 @@ __cpu_up(unsigned int cpu)
679 return 0; 672 return 0;
680} 673}
681 674
675static unsigned int __initdata additional_cpus;
676static unsigned int __initdata possible_cpus;
677
678void __init smp_setup_cpu_possible_map(void)
679{
680 unsigned int phy_cpus, pos_cpus, cpu;
681
682 phy_cpus = smp_count_cpus();
683 pos_cpus = min(phy_cpus + additional_cpus, (unsigned int) NR_CPUS);
684
685 if (possible_cpus)
686 pos_cpus = min(possible_cpus, (unsigned int) NR_CPUS);
687
688 for (cpu = 0; cpu < pos_cpus; cpu++)
689 cpu_set(cpu, cpu_possible_map);
690
691 phy_cpus = min(phy_cpus, pos_cpus);
692
693 for (cpu = 0; cpu < phy_cpus; cpu++)
694 cpu_set(cpu, cpu_present_map);
695}
696
697#ifdef CONFIG_HOTPLUG_CPU
698
699static int __init setup_additional_cpus(char *s)
700{
701 additional_cpus = simple_strtoul(s, NULL, 0);
702 return 0;
703}
704early_param("additional_cpus", setup_additional_cpus);
705
706static int __init setup_possible_cpus(char *s)
707{
708 possible_cpus = simple_strtoul(s, NULL, 0);
709 return 0;
710}
711early_param("possible_cpus", setup_possible_cpus);
712
682int 713int
683__cpu_disable(void) 714__cpu_disable(void)
684{ 715{
@@ -747,6 +778,8 @@ cpu_die(void)
747 for(;;); 778 for(;;);
748} 779}
749 780
781#endif /* CONFIG_HOTPLUG_CPU */
782
750/* 783/*
751 * Cycle through the processors and setup structures. 784 * Cycle through the processors and setup structures.
752 */ 785 */
@@ -760,7 +793,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
760 /* request the 0x1201 emergency signal external interrupt */ 793 /* request the 0x1201 emergency signal external interrupt */
761 if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0) 794 if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0)
762 panic("Couldn't request external interrupt 0x1201"); 795 panic("Couldn't request external interrupt 0x1201");
763 smp_check_cpus(max_cpus);
764 memset(lowcore_ptr,0,sizeof(lowcore_ptr)); 796 memset(lowcore_ptr,0,sizeof(lowcore_ptr));
765 /* 797 /*
766 * Initialize prefix pages and stacks for all possible cpus 798 * Initialize prefix pages and stacks for all possible cpus
@@ -809,8 +841,6 @@ void __devinit smp_prepare_boot_cpu(void)
809 BUG_ON(smp_processor_id() != 0); 841 BUG_ON(smp_processor_id() != 0);
810 842
811 cpu_set(0, cpu_online_map); 843 cpu_set(0, cpu_online_map);
812 cpu_set(0, cpu_present_map);
813 cpu_set(0, cpu_possible_map);
814 S390_lowcore.percpu_offset = __per_cpu_offset[0]; 844 S390_lowcore.percpu_offset = __per_cpu_offset[0];
815 current_set[0] = current; 845 current_set[0] = current;
816} 846}
@@ -849,6 +879,7 @@ static int __init topology_init(void)
849 879
850subsys_initcall(topology_init); 880subsys_initcall(topology_init);
851 881
882EXPORT_SYMBOL(cpu_online_map);
852EXPORT_SYMBOL(cpu_possible_map); 883EXPORT_SYMBOL(cpu_possible_map);
853EXPORT_SYMBOL(lowcore_ptr); 884EXPORT_SYMBOL(lowcore_ptr);
854EXPORT_SYMBOL(smp_ctl_set_bit); 885EXPORT_SYMBOL(smp_ctl_set_bit);
diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c
index 6a63553493c5..e351780bb660 100644
--- a/arch/s390/kernel/sys_s390.c
+++ b/arch/s390/kernel/sys_s390.c
@@ -122,8 +122,8 @@ out:
122#ifndef CONFIG_64BIT 122#ifndef CONFIG_64BIT
123struct sel_arg_struct { 123struct sel_arg_struct {
124 unsigned long n; 124 unsigned long n;
125 fd_set *inp, *outp, *exp; 125 fd_set __user *inp, *outp, *exp;
126 struct timeval *tvp; 126 struct timeval __user *tvp;
127}; 127};
128 128
129asmlinkage long old_select(struct sel_arg_struct __user *arg) 129asmlinkage long old_select(struct sel_arg_struct __user *arg)
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
index 426d7cafdab3..7c88d85c3597 100644
--- a/arch/s390/kernel/syscalls.S
+++ b/arch/s390/kernel/syscalls.S
@@ -80,7 +80,7 @@ NI_SYSCALL /* old sgetmask syscall*/
80NI_SYSCALL /* old ssetmask syscall*/ 80NI_SYSCALL /* old ssetmask syscall*/
81SYSCALL(sys_setreuid16,sys_ni_syscall,sys32_setreuid16_wrapper) /* old setreuid16 syscall */ 81SYSCALL(sys_setreuid16,sys_ni_syscall,sys32_setreuid16_wrapper) /* old setreuid16 syscall */
82SYSCALL(sys_setregid16,sys_ni_syscall,sys32_setregid16_wrapper) /* old setregid16 syscall */ 82SYSCALL(sys_setregid16,sys_ni_syscall,sys32_setregid16_wrapper) /* old setregid16 syscall */
83SYSCALL(sys_sigsuspend_glue,sys_sigsuspend_glue,sys32_sigsuspend_glue) 83SYSCALL(sys_sigsuspend,sys_sigsuspend,sys_sigsuspend_wrapper)
84SYSCALL(sys_sigpending,sys_sigpending,compat_sys_sigpending_wrapper) 84SYSCALL(sys_sigpending,sys_sigpending,compat_sys_sigpending_wrapper)
85SYSCALL(sys_sethostname,sys_sethostname,sys32_sethostname_wrapper) 85SYSCALL(sys_sethostname,sys_sethostname,sys32_sethostname_wrapper)
86SYSCALL(sys_setrlimit,sys_setrlimit,compat_sys_setrlimit_wrapper) /* 75 */ 86SYSCALL(sys_setrlimit,sys_setrlimit,compat_sys_setrlimit_wrapper) /* 75 */
@@ -187,7 +187,7 @@ SYSCALL(sys_rt_sigprocmask,sys_rt_sigprocmask,sys32_rt_sigprocmask_wrapper) /* 1
187SYSCALL(sys_rt_sigpending,sys_rt_sigpending,sys32_rt_sigpending_wrapper) 187SYSCALL(sys_rt_sigpending,sys_rt_sigpending,sys32_rt_sigpending_wrapper)
188SYSCALL(sys_rt_sigtimedwait,sys_rt_sigtimedwait,compat_sys_rt_sigtimedwait_wrapper) 188SYSCALL(sys_rt_sigtimedwait,sys_rt_sigtimedwait,compat_sys_rt_sigtimedwait_wrapper)
189SYSCALL(sys_rt_sigqueueinfo,sys_rt_sigqueueinfo,sys32_rt_sigqueueinfo_wrapper) 189SYSCALL(sys_rt_sigqueueinfo,sys_rt_sigqueueinfo,sys32_rt_sigqueueinfo_wrapper)
190SYSCALL(sys_rt_sigsuspend_glue,sys_rt_sigsuspend_glue,sys32_rt_sigsuspend_glue) 190SYSCALL(sys_rt_sigsuspend,sys_rt_sigsuspend,compat_sys_rt_sigsuspend_wrapper)
191SYSCALL(sys_pread64,sys_pread64,sys32_pread64_wrapper) /* 180 */ 191SYSCALL(sys_pread64,sys_pread64,sys32_pread64_wrapper) /* 180 */
192SYSCALL(sys_pwrite64,sys_pwrite64,sys32_pwrite64_wrapper) 192SYSCALL(sys_pwrite64,sys_pwrite64,sys32_pwrite64_wrapper)
193SYSCALL(sys_chown16,sys_ni_syscall,sys32_chown16_wrapper) /* old chown16 syscall */ 193SYSCALL(sys_chown16,sys_ni_syscall,sys32_chown16_wrapper) /* old chown16 syscall */
@@ -293,5 +293,22 @@ SYSCALL(sys_waitid,sys_waitid,compat_sys_waitid_wrapper)
293SYSCALL(sys_ioprio_set,sys_ioprio_set,sys_ioprio_set_wrapper) 293SYSCALL(sys_ioprio_set,sys_ioprio_set,sys_ioprio_set_wrapper)
294SYSCALL(sys_ioprio_get,sys_ioprio_get,sys_ioprio_get_wrapper) 294SYSCALL(sys_ioprio_get,sys_ioprio_get,sys_ioprio_get_wrapper)
295SYSCALL(sys_inotify_init,sys_inotify_init,sys_inotify_init) 295SYSCALL(sys_inotify_init,sys_inotify_init,sys_inotify_init)
296SYSCALL(sys_inotify_add_watch,sys_inotify_add_watch,sys_inotify_add_watch_wrapper) 296SYSCALL(sys_inotify_add_watch,sys_inotify_add_watch,sys_inotify_add_watch_wrapper) /* 285 */
297SYSCALL(sys_inotify_rm_watch,sys_inotify_rm_watch,sys_inotify_rm_watch_wrapper) 297SYSCALL(sys_inotify_rm_watch,sys_inotify_rm_watch,sys_inotify_rm_watch_wrapper)
298NI_SYSCALL /* 287 sys_migrate_pages */
299SYSCALL(sys_openat,sys_openat,compat_sys_openat_wrapper)
300SYSCALL(sys_mkdirat,sys_mkdirat,sys_mkdirat_wrapper)
301SYSCALL(sys_mknodat,sys_mknodat,sys_mknodat_wrapper) /* 290 */
302SYSCALL(sys_fchownat,sys_fchownat,sys_fchownat_wrapper)
303SYSCALL(sys_futimesat,sys_futimesat,compat_sys_futimesat_wrapper)
304SYSCALL(sys_fstatat64,sys_newfstatat,sys32_fstatat64_wrapper)
305SYSCALL(sys_unlinkat,sys_unlinkat,sys_unlinkat_wrapper)
306SYSCALL(sys_renameat,sys_renameat,sys_renameat_wrapper) /* 295 */
307SYSCALL(sys_linkat,sys_linkat,sys_linkat_wrapper)
308SYSCALL(sys_symlinkat,sys_symlinkat,sys_symlinkat_wrapper)
309SYSCALL(sys_readlinkat,sys_readlinkat,sys_readlinkat_wrapper)
310SYSCALL(sys_fchmodat,sys_fchmodat,sys_fchmodat_wrapper)
311SYSCALL(sys_faccessat,sys_faccessat,sys_faccessat_wrapper) /* 300 */
312SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper)
313SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper)
314SYSCALL(sys_unshare,sys_unshare,sys_unshare_wrapper)
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index 7c0fe152a111..fea043b69b91 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -61,9 +61,18 @@ extern unsigned long wall_jiffies;
61 */ 61 */
62unsigned long long sched_clock(void) 62unsigned long long sched_clock(void)
63{ 63{
64 return ((get_clock() - jiffies_timer_cc) * 1000) >> 12; 64 return ((get_clock() - jiffies_timer_cc) * 125) >> 9;
65} 65}
66 66
67/*
68 * Monotonic_clock - returns # of nanoseconds passed since time_init()
69 */
70unsigned long long monotonic_clock(void)
71{
72 return sched_clock();
73}
74EXPORT_SYMBOL(monotonic_clock);
75
67void tod_to_timeval(__u64 todval, struct timespec *xtime) 76void tod_to_timeval(__u64 todval, struct timespec *xtime)
68{ 77{
69 unsigned long long sec; 78 unsigned long long sec;
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c
index 5d21e9e6e7b4..a46793beeddd 100644
--- a/arch/s390/kernel/traps.c
+++ b/arch/s390/kernel/traps.c
@@ -486,7 +486,7 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code)
486 info.si_signo = signal; 486 info.si_signo = signal;
487 info.si_errno = 0; 487 info.si_errno = 0;
488 info.si_code = ILL_ILLOPC; 488 info.si_code = ILL_ILLOPC;
489 info.si_addr = (void *) location; 489 info.si_addr = (void __user *) location;
490 do_trap(interruption_code, signal, 490 do_trap(interruption_code, signal,
491 "illegal operation", regs, &info); 491 "illegal operation", regs, &info);
492 } 492 }
diff --git a/arch/s390/lib/Makefile b/arch/s390/lib/Makefile
index f20b51ff1d86..e05d087a6eae 100644
--- a/arch/s390/lib/Makefile
+++ b/arch/s390/lib/Makefile
@@ -6,4 +6,4 @@ EXTRA_AFLAGS := -traditional
6 6
7lib-y += delay.o string.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 9lib-$(CONFIG_SMP) += spinlock.o
diff --git a/arch/s390/lib/delay.c b/arch/s390/lib/delay.c
index e96c35bddac7..71f0a2fb3078 100644
--- a/arch/s390/lib/delay.c
+++ b/arch/s390/lib/delay.c
@@ -30,7 +30,7 @@ void __delay(unsigned long loops)
30 */ 30 */
31 __asm__ __volatile__( 31 __asm__ __volatile__(
32 "0: brct %0,0b" 32 "0: brct %0,0b"
33 : /* no outputs */ : "r" (loops/2) ); 33 : /* no outputs */ : "r" ((loops/2) + 1));
34} 34}
35 35
36/* 36/*
diff --git a/arch/s390/lib/spinlock.c b/arch/s390/lib/spinlock.c
index 60f80a4eed4e..b9b7958a226a 100644
--- a/arch/s390/lib/spinlock.c
+++ b/arch/s390/lib/spinlock.c
@@ -2,8 +2,7 @@
2 * arch/s390/lib/spinlock.c 2 * arch/s390/lib/spinlock.c
3 * Out of line spinlock code. 3 * Out of line spinlock code.
4 * 4 *
5 * S390 version 5 * Copyright (C) IBM Corp. 2004, 2006
6 * Copyright (C) 2004 IBM Deutschland Entwicklung GmbH, IBM Corporation
7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
8 */ 7 */
9 8
@@ -44,6 +43,8 @@ _raw_spin_lock_wait(raw_spinlock_t *lp, unsigned int pc)
44 _diag44(); 43 _diag44();
45 count = spin_retry; 44 count = spin_retry;
46 } 45 }
46 if (__raw_spin_is_locked(lp))
47 continue;
47 if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0) 48 if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0)
48 return; 49 return;
49 } 50 }
@@ -56,6 +57,8 @@ _raw_spin_trylock_retry(raw_spinlock_t *lp, unsigned int pc)
56 int count = spin_retry; 57 int count = spin_retry;
57 58
58 while (count-- > 0) { 59 while (count-- > 0) {
60 if (__raw_spin_is_locked(lp))
61 continue;
59 if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0) 62 if (_raw_compare_and_swap(&lp->lock, 0, pc) == 0)
60 return 1; 63 return 1;
61 } 64 }
@@ -74,6 +77,8 @@ _raw_read_lock_wait(raw_rwlock_t *rw)
74 _diag44(); 77 _diag44();
75 count = spin_retry; 78 count = spin_retry;
76 } 79 }
80 if (!__raw_read_can_lock(rw))
81 continue;
77 old = rw->lock & 0x7fffffffU; 82 old = rw->lock & 0x7fffffffU;
78 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 83 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old)
79 return; 84 return;
@@ -88,6 +93,8 @@ _raw_read_trylock_retry(raw_rwlock_t *rw)
88 int count = spin_retry; 93 int count = spin_retry;
89 94
90 while (count-- > 0) { 95 while (count-- > 0) {
96 if (!__raw_read_can_lock(rw))
97 continue;
91 old = rw->lock & 0x7fffffffU; 98 old = rw->lock & 0x7fffffffU;
92 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 99 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old)
93 return 1; 100 return 1;
@@ -106,6 +113,8 @@ _raw_write_lock_wait(raw_rwlock_t *rw)
106 _diag44(); 113 _diag44();
107 count = spin_retry; 114 count = spin_retry;
108 } 115 }
116 if (!__raw_write_can_lock(rw))
117 continue;
109 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 118 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0)
110 return; 119 return;
111 } 120 }
@@ -118,6 +127,8 @@ _raw_write_trylock_retry(raw_rwlock_t *rw)
118 int count = spin_retry; 127 int count = spin_retry;
119 128
120 while (count-- > 0) { 129 while (count-- > 0) {
130 if (!__raw_write_can_lock(rw))
131 continue;
121 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 132 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0)
122 return 1; 133 return 1;
123 } 134 }
diff --git a/arch/s390/lib/uaccess.S b/arch/s390/lib/uaccess.S
index 88fc94fe6488..5d59e2625048 100644
--- a/arch/s390/lib/uaccess.S
+++ b/arch/s390/lib/uaccess.S
@@ -198,12 +198,12 @@ __strnlen_user_asm:
1980: srst %r2,%r1 1980: srst %r2,%r1
199 jo 0b 199 jo 0b
200 sacf 0 200 sacf 0
201 jh 1f # \0 found in string ?
202 ahi %r2,1 # strnlen_user result includes the \0 201 ahi %r2,1 # strnlen_user result includes the \0
2031: slr %r2,%r3 202 # or return count+1 if \0 not found
203 slr %r2,%r3
204 br %r14 204 br %r14
2052: sacf 0 2052: sacf 0
206 lhi %r2,-EFAULT 206 slr %r2,%r2 # return 0 on exception
207 br %r14 207 br %r14
208 .section __ex_table,"a" 208 .section __ex_table,"a"
209 .long 0b,2b 209 .long 0b,2b
diff --git a/arch/s390/lib/uaccess64.S b/arch/s390/lib/uaccess64.S
index 50219786fc7a..19b41a33c230 100644
--- a/arch/s390/lib/uaccess64.S
+++ b/arch/s390/lib/uaccess64.S
@@ -194,12 +194,12 @@ __strnlen_user_asm:
1940: srst %r2,%r1 1940: srst %r2,%r1
195 jo 0b 195 jo 0b
196 sacf 0 196 sacf 0
197 jh 1f # \0 found in string ?
198 aghi %r2,1 # strnlen_user result includes the \0 197 aghi %r2,1 # strnlen_user result includes the \0
1991: slgr %r2,%r3 198 # or return count+1 if \0 not found
199 slgr %r2,%r3
200 br %r14 200 br %r14
2012: sacf 0 2012: sacf 0
202 lghi %r2,-EFAULT 202 slgr %r2,%r2 # return 0 on exception
203 br %r14 203 br %r14
204 .section __ex_table,"a" 204 .section __ex_table,"a"
205 .quad 0b,2b 205 .quad 0b,2b
diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c
index 2d5cb1385753..b075ab499d05 100644
--- a/arch/s390/mm/cmm.c
+++ b/arch/s390/mm/cmm.c
@@ -42,8 +42,8 @@ static volatile long cmm_timed_pages_target = 0;
42static long cmm_timeout_pages = 0; 42static long cmm_timeout_pages = 0;
43static long cmm_timeout_seconds = 0; 43static long cmm_timeout_seconds = 0;
44 44
45static struct cmm_page_array *cmm_page_list = 0; 45static struct cmm_page_array *cmm_page_list = NULL;
46static struct cmm_page_array *cmm_timed_page_list = 0; 46static struct cmm_page_array *cmm_timed_page_list = NULL;
47 47
48static unsigned long cmm_thread_active = 0; 48static unsigned long cmm_thread_active = 0;
49static struct work_struct cmm_thread_starter; 49static struct work_struct cmm_thread_starter;
@@ -259,7 +259,7 @@ static struct ctl_table cmm_table[];
259 259
260static int 260static int
261cmm_pages_handler(ctl_table *ctl, int write, struct file *filp, 261cmm_pages_handler(ctl_table *ctl, int write, struct file *filp,
262 void *buffer, size_t *lenp, loff_t *ppos) 262 void __user *buffer, size_t *lenp, loff_t *ppos)
263{ 263{
264 char buf[16], *p; 264 char buf[16], *p;
265 long pages; 265 long pages;
@@ -300,7 +300,7 @@ cmm_pages_handler(ctl_table *ctl, int write, struct file *filp,
300 300
301static int 301static int
302cmm_timeout_handler(ctl_table *ctl, int write, struct file *filp, 302cmm_timeout_handler(ctl_table *ctl, int write, struct file *filp,
303 void *buffer, size_t *lenp, loff_t *ppos) 303 void __user *buffer, size_t *lenp, loff_t *ppos)
304{ 304{
305 char buf[64], *p; 305 char buf[64], *p;
306 long pages, seconds; 306 long pages, seconds;
@@ -419,7 +419,7 @@ cmm_init (void)
419#ifdef CONFIG_CMM_IUCV 419#ifdef CONFIG_CMM_IUCV
420 smsg_register_callback(SMSG_PREFIX, cmm_smsg_target); 420 smsg_register_callback(SMSG_PREFIX, cmm_smsg_target);
421#endif 421#endif
422 INIT_WORK(&cmm_thread_starter, (void *) cmm_start_thread, 0); 422 INIT_WORK(&cmm_thread_starter, (void *) cmm_start_thread, NULL);
423 init_waitqueue_head(&cmm_thread_wait); 423 init_waitqueue_head(&cmm_thread_wait);
424 init_timer(&cmm_timer); 424 init_timer(&cmm_timer);
425 return 0; 425 return 0;
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 01bc7d589afe..e9b275d90737 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -392,18 +392,12 @@ config SH_TMU
392 392
393endmenu 393endmenu
394 394
395source "arch/sh/boards/renesas/hs7751rvoip/Kconfig" 395#source "arch/sh/boards/renesas/hs7751rvoip/Kconfig"
396 396
397source "arch/sh/boards/renesas/rts7751r2d/Kconfig" 397#source "arch/sh/boards/renesas/rts7751r2d/Kconfig"
398
399config SH_PCLK_FREQ_BOOL
400 bool "Set default pclk frequency"
401 default y if !SH_RTC
402 default n
403 398
404config SH_PCLK_FREQ 399config SH_PCLK_FREQ
405 int "Peripheral clock frequency (in Hz)" 400 int "Peripheral clock frequency (in Hz)"
406 depends on SH_PCLK_FREQ_BOOL
407 default "50000000" if CPU_SUBTYPE_SH7750 || CPU_SUBTYPE_SH7780 401 default "50000000" if CPU_SUBTYPE_SH7750 || CPU_SUBTYPE_SH7780
408 default "60000000" if CPU_SUBTYPE_SH7751 402 default "60000000" if CPU_SUBTYPE_SH7751
409 default "33333333" if CPU_SUBTYPE_SH7300 || CPU_SUBTYPE_SH7770 || CPU_SUBTYPE_SH7760 403 default "33333333" if CPU_SUBTYPE_SH7300 || CPU_SUBTYPE_SH7770 || CPU_SUBTYPE_SH7760
@@ -452,7 +446,7 @@ endmenu
452 446
453config ISA_DMA_API 447config ISA_DMA_API
454 bool 448 bool
455 depends on MPC1211 449 depends on SH_MPC1211
456 default y 450 default y
457 451
458menu "Kernel features" 452menu "Kernel features"
diff --git a/arch/sh/boards/renesas/rts7751r2d/io.c b/arch/sh/boards/renesas/rts7751r2d/io.c
index c46f9154cfd5..123abbbc91e0 100644
--- a/arch/sh/boards/renesas/rts7751r2d/io.c
+++ b/arch/sh/boards/renesas/rts7751r2d/io.c
@@ -216,24 +216,26 @@ void rts7751r2d_insb(unsigned long port, void *addr, unsigned long count)
216{ 216{
217 volatile __u8 *bp; 217 volatile __u8 *bp;
218 volatile __u16 *p; 218 volatile __u16 *p;
219 unsigned char *s = addr;
219 220
220 if (CHECK_AX88796L_PORT(port)) { 221 if (CHECK_AX88796L_PORT(port)) {
221 p = (volatile unsigned short *)port88796l(port, 0); 222 p = (volatile unsigned short *)port88796l(port, 0);
222 while (count--) *((unsigned char *) addr)++ = *p & 0xff; 223 while (count--) *s++ = *p & 0xff;
223 } else if (PXSEG(port)) 224 } else if (PXSEG(port))
224 while (count--) *((unsigned char *) addr)++ = *(volatile unsigned char *)port; 225 while (count--) *s++ = *(volatile unsigned char *)port;
225 else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { 226 else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
226 bp = (__u8 *)PCI_IOMAP(port); 227 bp = (__u8 *)PCI_IOMAP(port);
227 while (count--) *((volatile unsigned char *) addr)++ = *bp; 228 while (count--) *s++ = *bp;
228 } else { 229 } else {
229 p = (volatile unsigned short *)port2adr(port); 230 p = (volatile unsigned short *)port2adr(port);
230 while (count--) *((unsigned char *) addr)++ = *p & 0xff; 231 while (count--) *s++ = *p & 0xff;
231 } 232 }
232} 233}
233 234
234void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count) 235void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count)
235{ 236{
236 volatile __u16 *p; 237 volatile __u16 *p;
238 __u16 *s = addr;
237 239
238 if (CHECK_AX88796L_PORT(port)) 240 if (CHECK_AX88796L_PORT(port))
239 p = (volatile unsigned short *)port88796l(port, 1); 241 p = (volatile unsigned short *)port88796l(port, 1);
@@ -243,7 +245,7 @@ void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count)
243 p = (volatile unsigned short *)PCI_IOMAP(port); 245 p = (volatile unsigned short *)PCI_IOMAP(port);
244 else 246 else
245 p = (volatile unsigned short *)port2adr(port); 247 p = (volatile unsigned short *)port2adr(port);
246 while (count--) *((__u16 *) addr)++ = *p; 248 while (count--) *s++ = *p;
247} 249}
248 250
249void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count) 251void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count)
@@ -252,8 +254,9 @@ void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count)
252 maybebadio(insl, port); 254 maybebadio(insl, port);
253 else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { 255 else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
254 volatile __u32 *p = (__u32 *)PCI_IOMAP(port); 256 volatile __u32 *p = (__u32 *)PCI_IOMAP(port);
257 __u32 *s = addr;
255 258
256 while (count--) *((__u32 *) addr)++ = *p; 259 while (count--) *s++ = *p;
257 } else 260 } else
258 maybebadio(insl, port); 261 maybebadio(insl, port);
259} 262}
@@ -262,24 +265,26 @@ void rts7751r2d_outsb(unsigned long port, const void *addr, unsigned long count)
262{ 265{
263 volatile __u8 *bp; 266 volatile __u8 *bp;
264 volatile __u16 *p; 267 volatile __u16 *p;
268 const __u8 *s = addr;
265 269
266 if (CHECK_AX88796L_PORT(port)) { 270 if (CHECK_AX88796L_PORT(port)) {
267 p = (volatile unsigned short *)port88796l(port, 0); 271 p = (volatile unsigned short *)port88796l(port, 0);
268 while (count--) *p = *((unsigned char *) addr)++; 272 while (count--) *p = *s++;
269 } else if (PXSEG(port)) 273 } else if (PXSEG(port))
270 while (count--) *(volatile unsigned char *)port = *((unsigned char *) addr)++; 274 while (count--) *(volatile unsigned char *)port = *s++;
271 else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { 275 else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
272 bp = (__u8 *)PCI_IOMAP(port); 276 bp = (__u8 *)PCI_IOMAP(port);
273 while (count--) *bp = *((volatile unsigned char *) addr)++; 277 while (count--) *bp = *s++;
274 } else { 278 } else {
275 p = (volatile unsigned short *)port2adr(port); 279 p = (volatile unsigned short *)port2adr(port);
276 while (count--) *p = *((unsigned char *) addr)++; 280 while (count--) *p = *s++;
277 } 281 }
278} 282}
279 283
280void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count) 284void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count)
281{ 285{
282 volatile __u16 *p; 286 volatile __u16 *p;
287 const __u16 *s = addr;
283 288
284 if (CHECK_AX88796L_PORT(port)) 289 if (CHECK_AX88796L_PORT(port))
285 p = (volatile unsigned short *)port88796l(port, 1); 290 p = (volatile unsigned short *)port88796l(port, 1);
@@ -289,7 +294,7 @@ void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count)
289 p = (volatile unsigned short *)PCI_IOMAP(port); 294 p = (volatile unsigned short *)PCI_IOMAP(port);
290 else 295 else
291 p = (volatile unsigned short *)port2adr(port); 296 p = (volatile unsigned short *)port2adr(port);
292 while (count--) *p = *((__u16 *) addr)++; 297 while (count--) *p = *s++;
293} 298}
294 299
295void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count) 300void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count)
@@ -298,8 +303,9 @@ void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count)
298 maybebadio(outsl, port); 303 maybebadio(outsl, port);
299 else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { 304 else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
300 volatile __u32 *p = (__u32 *)PCI_IOMAP(port); 305 volatile __u32 *p = (__u32 *)PCI_IOMAP(port);
306 const __u32 *s = addr;
301 307
302 while (count--) *p = *((__u32 *) addr)++; 308 while (count--) *p = *s++;
303 } else 309 } else
304 maybebadio(outsl, port); 310 maybebadio(outsl, port);
305} 311}
diff --git a/arch/sh/boards/superh/microdev/io.c b/arch/sh/boards/superh/microdev/io.c
index fe83b2c03076..1ed7f880b8c7 100644
--- a/arch/sh/boards/superh/microdev/io.c
+++ b/arch/sh/boards/superh/microdev/io.c
@@ -16,7 +16,7 @@
16#include <linux/pci.h> 16#include <linux/pci.h>
17#include <linux/wait.h> 17#include <linux/wait.h>
18#include <asm/io.h> 18#include <asm/io.h>
19#include <asm/mach/io.h> 19#include <asm/microdev.h>
20 20
21 /* 21 /*
22 * we need to have a 'safe' address to re-direct all I/O requests 22 * we need to have a 'safe' address to re-direct all I/O requests
@@ -52,8 +52,90 @@
52#define IO_ISP1161_PHYS 0xa7700000ul /* Physical address of Philips ISP1161x USB chip */ 52#define IO_ISP1161_PHYS 0xa7700000ul /* Physical address of Philips ISP1161x USB chip */
53#define IO_SUPERIO_PHYS 0xa7800000ul /* Physical address of SMSC FDC37C93xAPM SuperIO chip */ 53#define IO_SUPERIO_PHYS 0xa7800000ul /* Physical address of SMSC FDC37C93xAPM SuperIO chip */
54 54
55#define PORT2ADDR(x) (microdev_isa_port2addr(x)) 55/*
56 * map I/O ports to memory-mapped addresses
57 */
58static unsigned long microdev_isa_port2addr(unsigned long offset)
59{
60 unsigned long result;
61
62 if ((offset >= IO_LAN91C111_BASE) &&
63 (offset < IO_LAN91C111_BASE + IO_LAN91C111_EXTENT)) {
64 /*
65 * SMSC LAN91C111 Ethernet chip
66 */
67 result = IO_LAN91C111_PHYS + offset - IO_LAN91C111_BASE;
68 } else if ((offset >= IO_SUPERIO_BASE) &&
69 (offset < IO_SUPERIO_BASE + IO_SUPERIO_EXTENT)) {
70 /*
71 * SMSC FDC37C93xAPM SuperIO chip
72 *
73 * Configuration Registers
74 */
75 result = IO_SUPERIO_PHYS + (offset << 1);
76#if 0
77 } else if (offset == KBD_DATA_REG || offset == KBD_CNTL_REG ||
78 offset == KBD_STATUS_REG) {
79 /*
80 * SMSC FDC37C93xAPM SuperIO chip
81 *
82 * PS/2 Keyboard + Mouse (ports 0x60 and 0x64).
83 */
84 result = IO_SUPERIO_PHYS + (offset << 1);
85#endif
86 } else if (((offset >= IO_IDE1_BASE) &&
87 (offset < IO_IDE1_BASE + IO_IDE_EXTENT)) ||
88 (offset == IO_IDE1_MISC)) {
89 /*
90 * SMSC FDC37C93xAPM SuperIO chip
91 *
92 * IDE #1
93 */
94 result = IO_SUPERIO_PHYS + (offset << 1);
95 } else if (((offset >= IO_IDE2_BASE) &&
96 (offset < IO_IDE2_BASE + IO_IDE_EXTENT)) ||
97 (offset == IO_IDE2_MISC)) {
98 /*
99 * SMSC FDC37C93xAPM SuperIO chip
100 *
101 * IDE #2
102 */
103 result = IO_SUPERIO_PHYS + (offset << 1);
104 } else if ((offset >= IO_SERIAL1_BASE) &&
105 (offset < IO_SERIAL1_BASE + IO_SERIAL_EXTENT)) {
106 /*
107 * SMSC FDC37C93xAPM SuperIO chip
108 *
109 * Serial #1
110 */
111 result = IO_SUPERIO_PHYS + (offset << 1);
112 } else if ((offset >= IO_SERIAL2_BASE) &&
113 (offset < IO_SERIAL2_BASE + IO_SERIAL_EXTENT)) {
114 /*
115 * SMSC FDC37C93xAPM SuperIO chip
116 *
117 * Serial #2
118 */
119 result = IO_SUPERIO_PHYS + (offset << 1);
120 } else if ((offset >= IO_ISP1161_BASE) &&
121 (offset < IO_ISP1161_BASE + IO_ISP1161_EXTENT)) {
122 /*
123 * Philips USB ISP1161x chip
124 */
125 result = IO_ISP1161_PHYS + offset - IO_ISP1161_BASE;
126 } else {
127 /*
128 * safe default.
129 */
130 printk("Warning: unexpected port in %s( offset = 0x%lx )\n",
131 __FUNCTION__, offset);
132 result = PVR;
133 }
134
135 return result;
136}
56 137
138#define PORT2ADDR(x) (microdev_isa_port2addr(x))
57 139
58static inline void delay(void) 140static inline void delay(void)
59{ 141{
@@ -94,6 +176,17 @@ unsigned int microdev_inl(unsigned long port)
94 return *(volatile unsigned int*)PORT2ADDR(port); 176 return *(volatile unsigned int*)PORT2ADDR(port);
95} 177}
96 178
179void microdev_outw(unsigned short b, unsigned long port)
180{
181#ifdef CONFIG_PCI
182 if (port >= PCIBIOS_MIN_IO) {
183 microdev_pci_outw(b, port);
184 return;
185 }
186#endif
187 *(volatile unsigned short*)PORT2ADDR(port) = b;
188}
189
97void microdev_outb(unsigned char b, unsigned long port) 190void microdev_outb(unsigned char b, unsigned long port)
98{ 191{
99#ifdef CONFIG_PCI 192#ifdef CONFIG_PCI
@@ -158,17 +251,6 @@ void microdev_outb(unsigned char b, unsigned long port)
158 } 251 }
159} 252}
160 253
161void microdev_outw(unsigned short b, unsigned long port)
162{
163#ifdef CONFIG_PCI
164 if (port >= PCIBIOS_MIN_IO) {
165 microdev_pci_outw(b, port);
166 return;
167 }
168#endif
169 *(volatile unsigned short*)PORT2ADDR(port) = b;
170}
171
172void microdev_outl(unsigned int b, unsigned long port) 254void microdev_outl(unsigned int b, unsigned long port)
173{ 255{
174#ifdef CONFIG_PCI 256#ifdef CONFIG_PCI
@@ -284,87 +366,3 @@ void microdev_outsl(unsigned long port, const void *buffer, unsigned long count)
284 while (count--) 366 while (count--)
285 *port_addr = *buf++; 367 *port_addr = *buf++;
286} 368}
287
288/*
289 * map I/O ports to memory-mapped addresses
290 */
291unsigned long microdev_isa_port2addr(unsigned long offset)
292{
293 unsigned long result;
294
295 if ((offset >= IO_LAN91C111_BASE) &&
296 (offset < IO_LAN91C111_BASE + IO_LAN91C111_EXTENT)) {
297 /*
298 * SMSC LAN91C111 Ethernet chip
299 */
300 result = IO_LAN91C111_PHYS + offset - IO_LAN91C111_BASE;
301 } else if ((offset >= IO_SUPERIO_BASE) &&
302 (offset < IO_SUPERIO_BASE + IO_SUPERIO_EXTENT)) {
303 /*
304 * SMSC FDC37C93xAPM SuperIO chip
305 *
306 * Configuration Registers
307 */
308 result = IO_SUPERIO_PHYS + (offset << 1);
309#if 0
310 } else if (offset == KBD_DATA_REG || offset == KBD_CNTL_REG ||
311 offset == KBD_STATUS_REG) {
312 /*
313 * SMSC FDC37C93xAPM SuperIO chip
314 *
315 * PS/2 Keyboard + Mouse (ports 0x60 and 0x64).
316 */
317 result = IO_SUPERIO_PHYS + (offset << 1);
318#endif
319 } else if (((offset >= IO_IDE1_BASE) &&
320 (offset < IO_IDE1_BASE + IO_IDE_EXTENT)) ||
321 (offset == IO_IDE1_MISC)) {
322 /*
323 * SMSC FDC37C93xAPM SuperIO chip
324 *
325 * IDE #1
326 */
327 result = IO_SUPERIO_PHYS + (offset << 1);
328 } else if (((offset >= IO_IDE2_BASE) &&
329 (offset < IO_IDE2_BASE + IO_IDE_EXTENT)) ||
330 (offset == IO_IDE2_MISC)) {
331 /*
332 * SMSC FDC37C93xAPM SuperIO chip
333 *
334 * IDE #2
335 */
336 result = IO_SUPERIO_PHYS + (offset << 1);
337 } else if ((offset >= IO_SERIAL1_BASE) &&
338 (offset < IO_SERIAL1_BASE + IO_SERIAL_EXTENT)) {
339 /*
340 * SMSC FDC37C93xAPM SuperIO chip
341 *
342 * Serial #1
343 */
344 result = IO_SUPERIO_PHYS + (offset << 1);
345 } else if ((offset >= IO_SERIAL2_BASE) &&
346 (offset < IO_SERIAL2_BASE + IO_SERIAL_EXTENT)) {
347 /*
348 * SMSC FDC37C93xAPM SuperIO chip
349 *
350 * Serial #2
351 */
352 result = IO_SUPERIO_PHYS + (offset << 1);
353 } else if ((offset >= IO_ISP1161_BASE) &&
354 (offset < IO_ISP1161_BASE + IO_ISP1161_EXTENT)) {
355 /*
356 * Philips USB ISP1161x chip
357 */
358 result = IO_ISP1161_PHYS + offset - IO_ISP1161_BASE;
359 } else {
360 /*
361 * safe default.
362 */
363 printk("Warning: unexpected port in %s( offset = 0x%lx )\n",
364 __FUNCTION__, offset);
365 result = PVR;
366 }
367
368 return result;
369}
370
diff --git a/arch/sh/boards/superh/microdev/irq.c b/arch/sh/boards/superh/microdev/irq.c
index 1395c1e65da4..efcbd86b7cd2 100644
--- a/arch/sh/boards/superh/microdev/irq.c
+++ b/arch/sh/boards/superh/microdev/irq.c
@@ -15,7 +15,7 @@
15 15
16#include <asm/system.h> 16#include <asm/system.h>
17#include <asm/io.h> 17#include <asm/io.h>
18#include <asm/mach/irq.h> 18#include <asm/microdev.h>
19 19
20#define NUM_EXTERNAL_IRQS 16 /* IRL0 .. IRL15 */ 20#define NUM_EXTERNAL_IRQS 16 /* IRL0 .. IRL15 */
21 21
diff --git a/arch/sh/boards/superh/microdev/setup.c b/arch/sh/boards/superh/microdev/setup.c
index 1c1d65fb12df..892b14d31405 100644
--- a/arch/sh/boards/superh/microdev/setup.c
+++ b/arch/sh/boards/superh/microdev/setup.c
@@ -3,7 +3,7 @@
3 * 3 *
4 * Copyright (C) 2003 Sean McGoogan (Sean.McGoogan@superh.com) 4 * Copyright (C) 2003 Sean McGoogan (Sean.McGoogan@superh.com)
5 * Copyright (C) 2003, 2004 SuperH, Inc. 5 * Copyright (C) 2003, 2004 SuperH, Inc.
6 * Copyright (C) 2004 Paul Mundt 6 * Copyright (C) 2004, 2005 Paul Mundt
7 * 7 *
8 * SuperH SH4-202 MicroDev board support. 8 * SuperH SH4-202 MicroDev board support.
9 * 9 *
@@ -15,11 +15,10 @@
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/platform_device.h> 16#include <linux/platform_device.h>
17#include <linux/ioport.h> 17#include <linux/ioport.h>
18#include <video/s1d13xxxfb.h>
19#include <asm/microdev.h>
18#include <asm/io.h> 20#include <asm/io.h>
19#include <asm/mach/irq.h>
20#include <asm/mach/io.h>
21#include <asm/machvec.h> 21#include <asm/machvec.h>
22#include <asm/machvec_init.h>
23 22
24extern void microdev_heartbeat(void); 23extern void microdev_heartbeat(void);
25 24
@@ -51,8 +50,6 @@ struct sh_machine_vector mv_sh4202_microdev __initmv = {
51 .mv_outsw = microdev_outsw, 50 .mv_outsw = microdev_outsw,
52 .mv_outsl = microdev_outsl, 51 .mv_outsl = microdev_outsl,
53 52
54 .mv_isa_port2addr = microdev_isa_port2addr,
55
56 .mv_init_irq = init_microdev_irq, 53 .mv_init_irq = init_microdev_irq,
57 54
58#ifdef CONFIG_HEARTBEAT 55#ifdef CONFIG_HEARTBEAT
@@ -142,16 +139,161 @@ static struct platform_device smc91x_device = {
142 .resource = smc91x_resources, 139 .resource = smc91x_resources,
143}; 140};
144 141
145static int __init smc91x_setup(void) 142#ifdef CONFIG_FB_S1D13XXX
143static struct s1d13xxxfb_regval s1d13806_initregs[] = {
144 { S1DREG_MISC, 0x00 },
145 { S1DREG_COM_DISP_MODE, 0x00 },
146 { S1DREG_GPIO_CNF0, 0x00 },
147 { S1DREG_GPIO_CNF1, 0x00 },
148 { S1DREG_GPIO_CTL0, 0x00 },
149 { S1DREG_GPIO_CTL1, 0x00 },
150 { S1DREG_CLK_CNF, 0x02 },
151 { S1DREG_LCD_CLK_CNF, 0x01 },
152 { S1DREG_CRT_CLK_CNF, 0x03 },
153 { S1DREG_MPLUG_CLK_CNF, 0x03 },
154 { S1DREG_CPU2MEM_WST_SEL, 0x02 },
155 { S1DREG_SDRAM_REF_RATE, 0x03 },
156 { S1DREG_SDRAM_TC0, 0x00 },
157 { S1DREG_SDRAM_TC1, 0x01 },
158 { S1DREG_MEM_CNF, 0x80 },
159 { S1DREG_PANEL_TYPE, 0x25 },
160 { S1DREG_MOD_RATE, 0x00 },
161 { S1DREG_LCD_DISP_HWIDTH, 0x63 },
162 { S1DREG_LCD_NDISP_HPER, 0x1e },
163 { S1DREG_TFT_FPLINE_START, 0x06 },
164 { S1DREG_TFT_FPLINE_PWIDTH, 0x03 },
165 { S1DREG_LCD_DISP_VHEIGHT0, 0x57 },
166 { S1DREG_LCD_DISP_VHEIGHT1, 0x02 },
167 { S1DREG_LCD_NDISP_VPER, 0x00 },
168 { S1DREG_TFT_FPFRAME_START, 0x0a },
169 { S1DREG_TFT_FPFRAME_PWIDTH, 0x81 },
170 { S1DREG_LCD_DISP_MODE, 0x03 },
171 { S1DREG_LCD_MISC, 0x00 },
172 { S1DREG_LCD_DISP_START0, 0x00 },
173 { S1DREG_LCD_DISP_START1, 0x00 },
174 { S1DREG_LCD_DISP_START2, 0x00 },
175 { S1DREG_LCD_MEM_OFF0, 0x90 },
176 { S1DREG_LCD_MEM_OFF1, 0x01 },
177 { S1DREG_LCD_PIX_PAN, 0x00 },
178 { S1DREG_LCD_DISP_FIFO_HTC, 0x00 },
179 { S1DREG_LCD_DISP_FIFO_LTC, 0x00 },
180 { S1DREG_CRT_DISP_HWIDTH, 0x63 },
181 { S1DREG_CRT_NDISP_HPER, 0x1f },
182 { S1DREG_CRT_HRTC_START, 0x04 },
183 { S1DREG_CRT_HRTC_PWIDTH, 0x8f },
184 { S1DREG_CRT_DISP_VHEIGHT0, 0x57 },
185 { S1DREG_CRT_DISP_VHEIGHT1, 0x02 },
186 { S1DREG_CRT_NDISP_VPER, 0x1b },
187 { S1DREG_CRT_VRTC_START, 0x00 },
188 { S1DREG_CRT_VRTC_PWIDTH, 0x83 },
189 { S1DREG_TV_OUT_CTL, 0x10 },
190 { S1DREG_CRT_DISP_MODE, 0x05 },
191 { S1DREG_CRT_DISP_START0, 0x00 },
192 { S1DREG_CRT_DISP_START1, 0x00 },
193 { S1DREG_CRT_DISP_START2, 0x00 },
194 { S1DREG_CRT_MEM_OFF0, 0x20 },
195 { S1DREG_CRT_MEM_OFF1, 0x03 },
196 { S1DREG_CRT_PIX_PAN, 0x00 },
197 { S1DREG_CRT_DISP_FIFO_HTC, 0x00 },
198 { S1DREG_CRT_DISP_FIFO_LTC, 0x00 },
199 { S1DREG_LCD_CUR_CTL, 0x00 },
200 { S1DREG_LCD_CUR_START, 0x01 },
201 { S1DREG_LCD_CUR_XPOS0, 0x00 },
202 { S1DREG_LCD_CUR_XPOS1, 0x00 },
203 { S1DREG_LCD_CUR_YPOS0, 0x00 },
204 { S1DREG_LCD_CUR_YPOS1, 0x00 },
205 { S1DREG_LCD_CUR_BCTL0, 0x00 },
206 { S1DREG_LCD_CUR_GCTL0, 0x00 },
207 { S1DREG_LCD_CUR_RCTL0, 0x00 },
208 { S1DREG_LCD_CUR_BCTL1, 0x1f },
209 { S1DREG_LCD_CUR_GCTL1, 0x3f },
210 { S1DREG_LCD_CUR_RCTL1, 0x1f },
211 { S1DREG_LCD_CUR_FIFO_HTC, 0x00 },
212 { S1DREG_CRT_CUR_CTL, 0x00 },
213 { S1DREG_CRT_CUR_START, 0x01 },
214 { S1DREG_CRT_CUR_XPOS0, 0x00 },
215 { S1DREG_CRT_CUR_XPOS1, 0x00 },
216 { S1DREG_CRT_CUR_YPOS0, 0x00 },
217 { S1DREG_CRT_CUR_YPOS1, 0x00 },
218 { S1DREG_CRT_CUR_BCTL0, 0x00 },
219 { S1DREG_CRT_CUR_GCTL0, 0x00 },
220 { S1DREG_CRT_CUR_RCTL0, 0x00 },
221 { S1DREG_CRT_CUR_BCTL1, 0x1f },
222 { S1DREG_CRT_CUR_GCTL1, 0x3f },
223 { S1DREG_CRT_CUR_RCTL1, 0x1f },
224 { S1DREG_CRT_CUR_FIFO_HTC, 0x00 },
225 { S1DREG_BBLT_CTL0, 0x00 },
226 { S1DREG_BBLT_CTL1, 0x00 },
227 { S1DREG_BBLT_CC_EXP, 0x00 },
228 { S1DREG_BBLT_OP, 0x00 },
229 { S1DREG_BBLT_SRC_START0, 0x00 },
230 { S1DREG_BBLT_SRC_START1, 0x00 },
231 { S1DREG_BBLT_SRC_START2, 0x00 },
232 { S1DREG_BBLT_DST_START0, 0x00 },
233 { S1DREG_BBLT_DST_START1, 0x00 },
234 { S1DREG_BBLT_DST_START2, 0x00 },
235 { S1DREG_BBLT_MEM_OFF0, 0x00 },
236 { S1DREG_BBLT_MEM_OFF1, 0x00 },
237 { S1DREG_BBLT_WIDTH0, 0x00 },
238 { S1DREG_BBLT_WIDTH1, 0x00 },
239 { S1DREG_BBLT_HEIGHT0, 0x00 },
240 { S1DREG_BBLT_HEIGHT1, 0x00 },
241 { S1DREG_BBLT_BGC0, 0x00 },
242 { S1DREG_BBLT_BGC1, 0x00 },
243 { S1DREG_BBLT_FGC0, 0x00 },
244 { S1DREG_BBLT_FGC1, 0x00 },
245 { S1DREG_LKUP_MODE, 0x00 },
246 { S1DREG_LKUP_ADDR, 0x00 },
247 { S1DREG_PS_CNF, 0x10 },
248 { S1DREG_PS_STATUS, 0x00 },
249 { S1DREG_CPU2MEM_WDOGT, 0x00 },
250 { S1DREG_COM_DISP_MODE, 0x02 },
251};
252
253static struct s1d13xxxfb_pdata s1d13806_platform_data = {
254 .initregs = s1d13806_initregs,
255 .initregssize = ARRAY_SIZE(s1d13806_initregs),
256};
257
258static struct resource s1d13806_resources[] = {
259 [0] = {
260 .start = 0x07200000,
261 .end = 0x07200000 + 0x00200000 - 1,
262 .flags = IORESOURCE_MEM,
263 },
264 [1] = {
265 .start = 0x07000000,
266 .end = 0x07000000 + 0x00200000 - 1,
267 .flags = IORESOURCE_MEM,
268 },
269};
270
271static struct platform_device s1d13806_device = {
272 .name = "s1d13806fb",
273 .id = -1,
274 .num_resources = ARRAY_SIZE(s1d13806_resources),
275 .resource = s1d13806_resources,
276
277 .dev = {
278 .platform_data = &s1d13806_platform_data,
279 },
280};
281#endif
282
283static struct platform_device *microdev_devices[] __initdata = {
284 &smc91x_device,
285#ifdef CONFIG_FB_S1D13XXX
286 &s1d13806_device,
287#endif
288};
289
290static int __init microdev_devices_setup(void)
146{ 291{
147 return platform_device_register(&smc91x_device); 292 return platform_add_devices(microdev_devices, ARRAY_SIZE(microdev_devices));
148} 293}
149 294
150__initcall(smc91x_setup); 295__initcall(microdev_devices_setup);
151 296
152 /*
153 * Initialize the board
154 */
155void __init platform_setup(void) 297void __init platform_setup(void)
156{ 298{
157 int * const fpgaRevisionRegister = (int*)(MICRODEV_FPGA_GP_BASE + 0x8ul); 299 int * const fpgaRevisionRegister = (int*)(MICRODEV_FPGA_GP_BASE + 0x8ul);
diff --git a/arch/sh/boards/unknown/Makefile b/arch/sh/boards/unknown/Makefile
index cffc21031e71..7d18f408b0c5 100644
--- a/arch/sh/boards/unknown/Makefile
+++ b/arch/sh/boards/unknown/Makefile
@@ -2,5 +2,5 @@
2# Makefile for unknown SH boards 2# Makefile for unknown SH boards
3# 3#
4 4
5obj-y := mach.o io.o setup.o 5obj-y := setup.o
6 6
diff --git a/arch/sh/boards/unknown/io.c b/arch/sh/boards/unknown/io.c
deleted file mode 100644
index 8f3f17267bd9..000000000000
--- a/arch/sh/boards/unknown/io.c
+++ /dev/null
@@ -1,46 +0,0 @@
1/*
2 * linux/arch/sh/kernel/io_unknown.c
3 *
4 * Copyright (C) 2000 Stuart Menefy (stuart.menefy@st.com)
5 *
6 * May be copied or modified under the terms of the GNU General Public
7 * License. See linux/COPYING for more information.
8 *
9 * I/O routine for unknown hardware.
10 */
11
12static unsigned int unknown_handler(void)
13{
14 return 0;
15}
16
17#define UNKNOWN_ALIAS(fn) \
18 void unknown_##fn(void) __attribute__ ((alias ("unknown_handler")));
19
20UNKNOWN_ALIAS(inb)
21UNKNOWN_ALIAS(inw)
22UNKNOWN_ALIAS(inl)
23UNKNOWN_ALIAS(outb)
24UNKNOWN_ALIAS(outw)
25UNKNOWN_ALIAS(outl)
26UNKNOWN_ALIAS(inb_p)
27UNKNOWN_ALIAS(inw_p)
28UNKNOWN_ALIAS(inl_p)
29UNKNOWN_ALIAS(outb_p)
30UNKNOWN_ALIAS(outw_p)
31UNKNOWN_ALIAS(outl_p)
32UNKNOWN_ALIAS(insb)
33UNKNOWN_ALIAS(insw)
34UNKNOWN_ALIAS(insl)
35UNKNOWN_ALIAS(outsb)
36UNKNOWN_ALIAS(outsw)
37UNKNOWN_ALIAS(outsl)
38UNKNOWN_ALIAS(readb)
39UNKNOWN_ALIAS(readw)
40UNKNOWN_ALIAS(readl)
41UNKNOWN_ALIAS(writeb)
42UNKNOWN_ALIAS(writew)
43UNKNOWN_ALIAS(writel)
44UNKNOWN_ALIAS(isa_port2addr)
45UNKNOWN_ALIAS(ioremap)
46UNKNOWN_ALIAS(iounmap)
diff --git a/arch/sh/boards/unknown/mach.c b/arch/sh/boards/unknown/mach.c
deleted file mode 100644
index ad0bcc60a640..000000000000
--- a/arch/sh/boards/unknown/mach.c
+++ /dev/null
@@ -1,67 +0,0 @@
1/*
2 * linux/arch/sh/kernel/mach_unknown.c
3 *
4 * Copyright (C) 2000 Stuart Menefy (stuart.menefy@st.com)
5 *
6 * May be copied or modified under the terms of the GNU General Public
7 * License. See linux/COPYING for more information.
8 *
9 * Machine specific code for an unknown machine (internal peripherials only)
10 */
11
12#include <linux/config.h>
13#include <linux/init.h>
14
15#include <asm/machvec.h>
16#include <asm/machvec_init.h>
17
18#include <asm/io_unknown.h>
19
20#include <asm/rtc.h>
21/*
22 * The Machine Vector
23 */
24
25struct sh_machine_vector mv_unknown __initmv = {
26#if defined(CONFIG_CPU_SH4)
27 .mv_nr_irqs = 48,
28#elif defined(CONFIG_CPU_SUBTYPE_SH7708)
29 .mv_nr_irqs = 32,
30#elif defined(CONFIG_CPU_SUBTYPE_SH7709)
31 .mv_nr_irqs = 61,
32#endif
33
34 .mv_inb = unknown_inb,
35 .mv_inw = unknown_inw,
36 .mv_inl = unknown_inl,
37 .mv_outb = unknown_outb,
38 .mv_outw = unknown_outw,
39 .mv_outl = unknown_outl,
40
41 .mv_inb_p = unknown_inb_p,
42 .mv_inw_p = unknown_inw_p,
43 .mv_inl_p = unknown_inl_p,
44 .mv_outb_p = unknown_outb_p,
45 .mv_outw_p = unknown_outw_p,
46 .mv_outl_p = unknown_outl_p,
47
48 .mv_insb = unknown_insb,
49 .mv_insw = unknown_insw,
50 .mv_insl = unknown_insl,
51 .mv_outsb = unknown_outsb,
52 .mv_outsw = unknown_outsw,
53 .mv_outsl = unknown_outsl,
54
55 .mv_readb = unknown_readb,
56 .mv_readw = unknown_readw,
57 .mv_readl = unknown_readl,
58 .mv_writeb = unknown_writeb,
59 .mv_writew = unknown_writew,
60 .mv_writel = unknown_writel,
61
62 .mv_ioremap = unknown_ioremap,
63 .mv_iounmap = unknown_iounmap,
64
65 .mv_isa_port2addr = unknown_isa_port2addr,
66};
67ALIAS_MV(unknown)
diff --git a/arch/sh/boards/unknown/setup.c b/arch/sh/boards/unknown/setup.c
index 7d772a6f8865..02e84f03f45c 100644
--- a/arch/sh/boards/unknown/setup.c
+++ b/arch/sh/boards/unknown/setup.c
@@ -7,10 +7,20 @@
7 * License. See linux/COPYING for more information. 7 * License. See linux/COPYING for more information.
8 * 8 *
9 * Setup code for an unknown machine (internal peripherials only) 9 * Setup code for an unknown machine (internal peripherials only)
10 *
11 * This is the simplest of all boards, and serves only as a quick and dirty
12 * method to start debugging a new board during bring-up until proper board
13 * setup code is written.
10 */ 14 */
11
12#include <linux/config.h> 15#include <linux/config.h>
13#include <linux/init.h> 16#include <linux/init.h>
17#include <asm/machvec.h>
18#include <asm/irq.h>
19
20struct sh_machine_vector mv_unknown __initmv = {
21 .mv_nr_irqs = NR_IRQS,
22};
23ALIAS_MV(unknown)
14 24
15const char *get_system_type(void) 25const char *get_system_type(void)
16{ 26{
diff --git a/arch/sh/cchips/voyagergx/consistent.c b/arch/sh/cchips/voyagergx/consistent.c
index 3d9a02c093a3..07e8b9c5a531 100644
--- a/arch/sh/cchips/voyagergx/consistent.c
+++ b/arch/sh/cchips/voyagergx/consistent.c
@@ -15,7 +15,7 @@
15#include <linux/module.h> 15#include <linux/module.h>
16#include <linux/device.h> 16#include <linux/device.h>
17#include <asm/io.h> 17#include <asm/io.h>
18#include <asm/bus-sh.h> 18
19 19
20struct voya_alloc_entry { 20struct voya_alloc_entry {
21 struct list_head list; 21 struct list_head list;
@@ -30,12 +30,13 @@ static LIST_HEAD(voya_alloc_list);
30#define OHCI_HCCA_SIZE 0x100 30#define OHCI_HCCA_SIZE 0x100
31#define OHCI_SRAM_SIZE 0x10000 31#define OHCI_SRAM_SIZE 0x10000
32 32
33#define VOYAGER_OHCI_NAME "voyager-ohci"
34
33void *voyagergx_consistent_alloc(struct device *dev, size_t size, 35void *voyagergx_consistent_alloc(struct device *dev, size_t size,
34 dma_addr_t *handle, gfp_t flag) 36 dma_addr_t *handle, gfp_t flag)
35{ 37{
36 struct list_head *list = &voya_alloc_list; 38 struct list_head *list = &voya_alloc_list;
37 struct voya_alloc_entry *entry; 39 struct voya_alloc_entry *entry;
38 struct sh_dev *shdev = to_sh_dev(dev);
39 unsigned long start, end; 40 unsigned long start, end;
40 unsigned long flags; 41 unsigned long flags;
41 42
@@ -46,9 +47,7 @@ void *voyagergx_consistent_alloc(struct device *dev, size_t size,
46 * 47 *
47 * Everything else goes through consistent_alloc(). 48 * Everything else goes through consistent_alloc().
48 */ 49 */
49 if (!dev || dev->bus != &sh_bus_types[SH_BUS_VIRT] || 50 if (!dev || strcmp(dev->driver->name, VOYAGER_OHCI_NAME))
50 (dev->bus == &sh_bus_types[SH_BUS_VIRT] &&
51 shdev->dev_id != SH_DEV_ID_USB_OHCI))
52 return NULL; 51 return NULL;
53 52
54 start = OHCI_SRAM_START + OHCI_HCCA_SIZE; 53 start = OHCI_SRAM_START + OHCI_HCCA_SIZE;
@@ -98,12 +97,9 @@ int voyagergx_consistent_free(struct device *dev, size_t size,
98 void *vaddr, dma_addr_t handle) 97 void *vaddr, dma_addr_t handle)
99{ 98{
100 struct voya_alloc_entry *entry; 99 struct voya_alloc_entry *entry;
101 struct sh_dev *shdev = to_sh_dev(dev);
102 unsigned long flags; 100 unsigned long flags;
103 101
104 if (!dev || dev->bus != &sh_bus_types[SH_BUS_VIRT] || 102 if (!dev || strcmp(dev->driver->name, VOYAGER_OHCI_NAME))
105 (dev->bus == &sh_bus_types[SH_BUS_VIRT] &&
106 shdev->dev_id != SH_DEV_ID_USB_OHCI))
107 return -EINVAL; 103 return -EINVAL;
108 104
109 spin_lock_irqsave(&voya_list_lock, flags); 105 spin_lock_irqsave(&voya_list_lock, flags);
@@ -123,4 +119,3 @@ int voyagergx_consistent_free(struct device *dev, size_t size,
123 119
124EXPORT_SYMBOL(voyagergx_consistent_alloc); 120EXPORT_SYMBOL(voyagergx_consistent_alloc);
125EXPORT_SYMBOL(voyagergx_consistent_free); 121EXPORT_SYMBOL(voyagergx_consistent_free);
126
diff --git a/arch/sh/cchips/voyagergx/irq.c b/arch/sh/cchips/voyagergx/irq.c
index 1b6ac523b458..2ee330b3c38f 100644
--- a/arch/sh/cchips/voyagergx/irq.c
+++ b/arch/sh/cchips/voyagergx/irq.c
@@ -163,7 +163,12 @@ int voyagergx_irq_demux(int irq)
163 return irq; 163 return irq;
164} 164}
165 165
166static struct irqaction irq0 = { voyagergx_interrupt, SA_INTERRUPT, 0, "VOYAGERGX", NULL, NULL}; 166static struct irqaction irq0 = {
167 .name = "voyagergx",
168 .handler = voyagergx_interrupt,
169 .flags = SA_INTERRUPT,
170 .mask = CPU_MASK_NONE,
171};
167 172
168void __init setup_voyagergx_irq(void) 173void __init setup_voyagergx_irq(void)
169{ 174{
diff --git a/arch/sh/configs/microdev_defconfig b/arch/sh/configs/microdev_defconfig
index a3bd280b53d6..ab3db76d1e51 100644
--- a/arch/sh/configs/microdev_defconfig
+++ b/arch/sh/configs/microdev_defconfig
@@ -1,10 +1,9 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.11-sh 3# Linux kernel version: 2.6.16-rc1
4# Wed Mar 2 15:09:41 2005 4# Fri Jan 27 19:43:20 2006
5# 5#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_UID16=y
8CONFIG_RWSEM_GENERIC_SPINLOCK=y 7CONFIG_RWSEM_GENERIC_SPINLOCK=y
9CONFIG_GENERIC_HARDIRQS=y 8CONFIG_GENERIC_HARDIRQS=y
10CONFIG_GENERIC_IRQ_PROBE=y 9CONFIG_GENERIC_IRQ_PROBE=y
@@ -17,11 +16,13 @@ CONFIG_EXPERIMENTAL=y
17CONFIG_CLEAN_COMPILE=y 16CONFIG_CLEAN_COMPILE=y
18CONFIG_BROKEN_ON_SMP=y 17CONFIG_BROKEN_ON_SMP=y
19CONFIG_LOCK_KERNEL=y 18CONFIG_LOCK_KERNEL=y
19CONFIG_INIT_ENV_ARG_LIMIT=32
20 20
21# 21#
22# General setup 22# General setup
23# 23#
24CONFIG_LOCALVERSION="" 24CONFIG_LOCALVERSION=""
25CONFIG_LOCALVERSION_AUTO=y
25CONFIG_SWAP=y 26CONFIG_SWAP=y
26# CONFIG_SYSVIPC is not set 27# CONFIG_SYSVIPC is not set
27# CONFIG_POSIX_MQUEUE is not set 28# CONFIG_POSIX_MQUEUE is not set
@@ -29,22 +30,29 @@ CONFIG_BSD_PROCESS_ACCT=y
29# CONFIG_BSD_PROCESS_ACCT_V3 is not set 30# CONFIG_BSD_PROCESS_ACCT_V3 is not set
30CONFIG_SYSCTL=y 31CONFIG_SYSCTL=y
31# CONFIG_AUDIT is not set 32# CONFIG_AUDIT is not set
32CONFIG_LOG_BUF_SHIFT=14
33CONFIG_HOTPLUG=y
34CONFIG_KOBJECT_UEVENT=y
35# CONFIG_IKCONFIG is not set 33# CONFIG_IKCONFIG is not set
34CONFIG_INITRAMFS_SOURCE=""
35CONFIG_UID16=y
36# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
36CONFIG_EMBEDDED=y 37CONFIG_EMBEDDED=y
37CONFIG_KALLSYMS=y 38CONFIG_KALLSYMS=y
38# CONFIG_KALLSYMS_EXTRA_PASS is not set 39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_HOTPLUG=y
41CONFIG_PRINTK=y
42CONFIG_BUG=y
43CONFIG_ELF_CORE=y
44CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 45CONFIG_FUTEX=y
40CONFIG_EPOLL=y 46CONFIG_EPOLL=y
41# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
42CONFIG_SHMEM=y 47CONFIG_SHMEM=y
43CONFIG_CC_ALIGN_FUNCTIONS=0 48CONFIG_CC_ALIGN_FUNCTIONS=0
44CONFIG_CC_ALIGN_LABELS=0 49CONFIG_CC_ALIGN_LABELS=0
45CONFIG_CC_ALIGN_LOOPS=0 50CONFIG_CC_ALIGN_LOOPS=0
46CONFIG_CC_ALIGN_JUMPS=0 51CONFIG_CC_ALIGN_JUMPS=0
52CONFIG_SLAB=y
47# CONFIG_TINY_SHMEM is not set 53# CONFIG_TINY_SHMEM is not set
54CONFIG_BASE_SMALL=0
55# CONFIG_SLOB is not set
48 56
49# 57#
50# Loadable module support 58# Loadable module support
@@ -52,6 +60,24 @@ CONFIG_CC_ALIGN_JUMPS=0
52# CONFIG_MODULES is not set 60# CONFIG_MODULES is not set
53 61
54# 62#
63# Block layer
64#
65# CONFIG_LBD is not set
66
67#
68# IO Schedulers
69#
70CONFIG_IOSCHED_NOOP=y
71CONFIG_IOSCHED_AS=y
72CONFIG_IOSCHED_DEADLINE=y
73CONFIG_IOSCHED_CFQ=y
74CONFIG_DEFAULT_AS=y
75# CONFIG_DEFAULT_DEADLINE is not set
76# CONFIG_DEFAULT_CFQ is not set
77# CONFIG_DEFAULT_NOOP is not set
78CONFIG_DEFAULT_IOSCHED="anticipatory"
79
80#
55# System type 81# System type
56# 82#
57# CONFIG_SH_SOLUTION_ENGINE is not set 83# CONFIG_SH_SOLUTION_ENGINE is not set
@@ -61,9 +87,7 @@ CONFIG_CC_ALIGN_JUMPS=0
61# CONFIG_SH_7751_SYSTEMH is not set 87# CONFIG_SH_7751_SYSTEMH is not set
62# CONFIG_SH_STB1_HARP is not set 88# CONFIG_SH_STB1_HARP is not set
63# CONFIG_SH_STB1_OVERDRIVE is not set 89# CONFIG_SH_STB1_OVERDRIVE is not set
64# CONFIG_SH_HP620 is not set 90# CONFIG_SH_HP6XX is not set
65# CONFIG_SH_HP680 is not set
66# CONFIG_SH_HP690 is not set
67# CONFIG_SH_CQREEK is not set 91# CONFIG_SH_CQREEK is not set
68# CONFIG_SH_DMIDA is not set 92# CONFIG_SH_DMIDA is not set
69# CONFIG_SH_EC3104 is not set 93# CONFIG_SH_EC3104 is not set
@@ -78,45 +102,94 @@ CONFIG_CC_ALIGN_JUMPS=0
78# CONFIG_SH_SECUREEDGE5410 is not set 102# CONFIG_SH_SECUREEDGE5410 is not set
79# CONFIG_SH_HS7751RVOIP is not set 103# CONFIG_SH_HS7751RVOIP is not set
80# CONFIG_SH_RTS7751R2D is not set 104# CONFIG_SH_RTS7751R2D is not set
105# CONFIG_SH_R7780RP is not set
81# CONFIG_SH_EDOSK7705 is not set 106# CONFIG_SH_EDOSK7705 is not set
82CONFIG_SH_SH4202_MICRODEV=y 107CONFIG_SH_SH4202_MICRODEV=y
108# CONFIG_SH_LANDISK is not set
109# CONFIG_SH_TITAN is not set
83# CONFIG_SH_UNKNOWN is not set 110# CONFIG_SH_UNKNOWN is not set
84# CONFIG_CPU_SH2 is not set 111
85# CONFIG_CPU_SH3 is not set 112#
113# Processor selection
114#
86CONFIG_CPU_SH4=y 115CONFIG_CPU_SH4=y
116
117#
118# SH-2 Processor Support
119#
87# CONFIG_CPU_SUBTYPE_SH7604 is not set 120# CONFIG_CPU_SUBTYPE_SH7604 is not set
121
122#
123# SH-3 Processor Support
124#
88# CONFIG_CPU_SUBTYPE_SH7300 is not set 125# CONFIG_CPU_SUBTYPE_SH7300 is not set
89# CONFIG_CPU_SUBTYPE_SH7705 is not set 126# CONFIG_CPU_SUBTYPE_SH7705 is not set
90# CONFIG_CPU_SUBTYPE_SH7707 is not set 127# CONFIG_CPU_SUBTYPE_SH7707 is not set
91# CONFIG_CPU_SUBTYPE_SH7708 is not set 128# CONFIG_CPU_SUBTYPE_SH7708 is not set
92# CONFIG_CPU_SUBTYPE_SH7709 is not set 129# CONFIG_CPU_SUBTYPE_SH7709 is not set
130
131#
132# SH-4 Processor Support
133#
93# CONFIG_CPU_SUBTYPE_SH7750 is not set 134# CONFIG_CPU_SUBTYPE_SH7750 is not set
135# CONFIG_CPU_SUBTYPE_SH7091 is not set
136# CONFIG_CPU_SUBTYPE_SH7750R is not set
137# CONFIG_CPU_SUBTYPE_SH7750S is not set
94# CONFIG_CPU_SUBTYPE_SH7751 is not set 138# CONFIG_CPU_SUBTYPE_SH7751 is not set
139# CONFIG_CPU_SUBTYPE_SH7751R is not set
95# CONFIG_CPU_SUBTYPE_SH7760 is not set 140# CONFIG_CPU_SUBTYPE_SH7760 is not set
96# CONFIG_CPU_SUBTYPE_SH73180 is not set 141CONFIG_CPU_SUBTYPE_SH4_202=y
142
143#
144# ST40 Processor Support
145#
97# CONFIG_CPU_SUBTYPE_ST40STB1 is not set 146# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
98# CONFIG_CPU_SUBTYPE_ST40GX1 is not set 147# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
99CONFIG_CPU_SUBTYPE_SH4_202=y 148
149#
150# SH-4A Processor Support
151#
152# CONFIG_CPU_SUBTYPE_SH73180 is not set
153# CONFIG_CPU_SUBTYPE_SH7770 is not set
154# CONFIG_CPU_SUBTYPE_SH7780 is not set
155
156#
157# Memory management options
158#
100CONFIG_MMU=y 159CONFIG_MMU=y
101CONFIG_CMDLINE_BOOL=y 160CONFIG_SELECT_MEMORY_MODEL=y
102CONFIG_CMDLINE="console=ttySC0,115200" 161CONFIG_FLATMEM_MANUAL=y
162# CONFIG_DISCONTIGMEM_MANUAL is not set
163# CONFIG_SPARSEMEM_MANUAL is not set
164CONFIG_FLATMEM=y
165CONFIG_FLAT_NODE_MEM_MAP=y
166# CONFIG_SPARSEMEM_STATIC is not set
167CONFIG_SPLIT_PTLOCK_CPUS=4
168
169#
170# Cache configuration
171#
172# CONFIG_SH_DIRECT_MAPPED is not set
173# CONFIG_SH_WRITETHROUGH is not set
174# CONFIG_SH_OCRAM is not set
103CONFIG_MEMORY_START=0x08000000 175CONFIG_MEMORY_START=0x08000000
104CONFIG_MEMORY_SIZE=0x04000000 176CONFIG_MEMORY_SIZE=0x04000000
105CONFIG_MEMORY_SET=y 177
106# CONFIG_MEMORY_OVERRIDE is not set 178#
179# Processor features
180#
181CONFIG_CPU_LITTLE_ENDIAN=y
107CONFIG_SH_RTC=y 182CONFIG_SH_RTC=y
108CONFIG_SH_FPU=y 183CONFIG_SH_FPU=y
109CONFIG_ZERO_PAGE_OFFSET=0x00001000
110CONFIG_BOOT_LINK_OFFSET=0x00800000
111CONFIG_CPU_LITTLE_ENDIAN=y
112CONFIG_PREEMPT=y
113# CONFIG_UBC_WAKEUP is not set
114# CONFIG_SH_WRITETHROUGH is not set
115# CONFIG_SH_OCRAM is not set
116# CONFIG_SH_STORE_QUEUES is not set 184# CONFIG_SH_STORE_QUEUES is not set
117# CONFIG_SMP is not set 185CONFIG_CPU_HAS_INTEVT=y
118CONFIG_SH_PCLK_CALC=y 186CONFIG_CPU_HAS_SR_RB=y
119CONFIG_SH_PCLK_FREQ=65986048 187
188#
189# Timer support
190#
191CONFIG_SH_TMU=y
192CONFIG_SH_PCLK_FREQ=66000000
120 193
121# 194#
122# CPU Frequency scaling 195# CPU Frequency scaling
@@ -137,20 +210,31 @@ CONFIG_NR_ONCHIP_DMA_CHANNELS=4
137CONFIG_HEARTBEAT=y 210CONFIG_HEARTBEAT=y
138 211
139# 212#
140# Bus options (PCI, PCMCIA, EISA, MCA, ISA) 213# Kernel features
141# 214#
142CONFIG_ISA=y 215# CONFIG_KEXEC is not set
143# CONFIG_PCI is not set 216CONFIG_PREEMPT=y
217# CONFIG_SMP is not set
144 218
145# 219#
146# PCCARD (PCMCIA/CardBus) support 220# Boot options
147# 221#
148# CONFIG_PCCARD is not set 222CONFIG_ZERO_PAGE_OFFSET=0x00001000
223CONFIG_BOOT_LINK_OFFSET=0x00800000
224# CONFIG_UBC_WAKEUP is not set
225CONFIG_CMDLINE_BOOL=y
226CONFIG_CMDLINE="console=ttySC0,115200"
149 227
150# 228#
151# PC-card bridges 229# Bus options
152# 230#
153CONFIG_PCMCIA_PROBE=y 231# CONFIG_SUPERHYWAY is not set
232# CONFIG_PCI is not set
233
234#
235# PCCARD (PCMCIA/CardBus) support
236#
237# CONFIG_PCCARD is not set
154 238
155# 239#
156# PCI Hotplug Support 240# PCI Hotplug Support
@@ -164,9 +248,79 @@ CONFIG_BINFMT_ELF=y
164# CONFIG_BINFMT_MISC is not set 248# CONFIG_BINFMT_MISC is not set
165 249
166# 250#
167# SH initrd options 251# Networking
252#
253CONFIG_NET=y
254
255#
256# Networking options
257#
258# CONFIG_PACKET is not set
259# CONFIG_UNIX is not set
260# CONFIG_NET_KEY is not set
261CONFIG_INET=y
262# CONFIG_IP_MULTICAST is not set
263# CONFIG_IP_ADVANCED_ROUTER is not set
264CONFIG_IP_FIB_HASH=y
265CONFIG_IP_PNP=y
266CONFIG_IP_PNP_DHCP=y
267# CONFIG_IP_PNP_BOOTP is not set
268# CONFIG_IP_PNP_RARP is not set
269# CONFIG_NET_IPIP is not set
270# CONFIG_NET_IPGRE is not set
271# CONFIG_ARPD is not set
272# CONFIG_SYN_COOKIES is not set
273# CONFIG_INET_AH is not set
274# CONFIG_INET_ESP is not set
275# CONFIG_INET_IPCOMP is not set
276# CONFIG_INET_TUNNEL is not set
277CONFIG_INET_DIAG=y
278CONFIG_INET_TCP_DIAG=y
279# CONFIG_TCP_CONG_ADVANCED is not set
280CONFIG_TCP_CONG_BIC=y
281# CONFIG_IPV6 is not set
282# CONFIG_NETFILTER is not set
283
284#
285# DCCP Configuration (EXPERIMENTAL)
286#
287# CONFIG_IP_DCCP is not set
288
289#
290# SCTP Configuration (EXPERIMENTAL)
168# 291#
169# CONFIG_EMBEDDED_RAMDISK is not set 292# CONFIG_IP_SCTP is not set
293
294#
295# TIPC Configuration (EXPERIMENTAL)
296#
297# CONFIG_TIPC is not set
298# CONFIG_ATM is not set
299# CONFIG_BRIDGE is not set
300# CONFIG_VLAN_8021Q is not set
301# CONFIG_DECNET is not set
302# CONFIG_LLC2 is not set
303# CONFIG_IPX is not set
304# CONFIG_ATALK is not set
305# CONFIG_X25 is not set
306# CONFIG_LAPB is not set
307# CONFIG_NET_DIVERT is not set
308# CONFIG_ECONET is not set
309# CONFIG_WAN_ROUTER is not set
310
311#
312# QoS and/or fair queueing
313#
314# CONFIG_NET_SCHED is not set
315
316#
317# Network testing
318#
319# CONFIG_NET_PKTGEN is not set
320# CONFIG_HAMRADIO is not set
321# CONFIG_IRDA is not set
322# CONFIG_BT is not set
323# CONFIG_IEEE80211 is not set
170 324
171# 325#
172# Device Drivers 326# Device Drivers
@@ -180,6 +334,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
180# CONFIG_FW_LOADER is not set 334# CONFIG_FW_LOADER is not set
181 335
182# 336#
337# Connector - unified userspace <-> kernelspace linker
338#
339# CONFIG_CONNECTOR is not set
340
341#
183# Memory Technology Devices (MTD) 342# Memory Technology Devices (MTD)
184# 343#
185# CONFIG_MTD is not set 344# CONFIG_MTD is not set
@@ -192,13 +351,10 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
192# 351#
193# Plug and Play support 352# Plug and Play support
194# 353#
195# CONFIG_PNP is not set
196 354
197# 355#
198# Block devices 356# Block devices
199# 357#
200# CONFIG_BLK_DEV_FD is not set
201# CONFIG_BLK_DEV_XD is not set
202# CONFIG_BLK_DEV_COW_COMMON is not set 358# CONFIG_BLK_DEV_COW_COMMON is not set
203# CONFIG_BLK_DEV_LOOP is not set 359# CONFIG_BLK_DEV_LOOP is not set
204# CONFIG_BLK_DEV_NBD is not set 360# CONFIG_BLK_DEV_NBD is not set
@@ -206,17 +362,7 @@ CONFIG_BLK_DEV_RAM=y
206CONFIG_BLK_DEV_RAM_COUNT=16 362CONFIG_BLK_DEV_RAM_COUNT=16
207CONFIG_BLK_DEV_RAM_SIZE=4096 363CONFIG_BLK_DEV_RAM_SIZE=4096
208CONFIG_BLK_DEV_INITRD=y 364CONFIG_BLK_DEV_INITRD=y
209CONFIG_INITRAMFS_SOURCE=""
210# CONFIG_LBD is not set
211# CONFIG_CDROM_PKTCDVD is not set 365# CONFIG_CDROM_PKTCDVD is not set
212
213#
214# IO Schedulers
215#
216CONFIG_IOSCHED_NOOP=y
217CONFIG_IOSCHED_AS=y
218CONFIG_IOSCHED_DEADLINE=y
219CONFIG_IOSCHED_CFQ=y
220# CONFIG_ATA_OVER_ETH is not set 366# CONFIG_ATA_OVER_ETH is not set
221 367
222# 368#
@@ -241,9 +387,7 @@ CONFIG_BLK_DEV_IDECD=y
241# IDE chipset support/bugfixes 387# IDE chipset support/bugfixes
242# 388#
243CONFIG_IDE_GENERIC=y 389CONFIG_IDE_GENERIC=y
244CONFIG_IDE_SH=y
245# CONFIG_IDE_ARM is not set 390# CONFIG_IDE_ARM is not set
246# CONFIG_IDE_CHIPSETS is not set
247# CONFIG_BLK_DEV_IDEDMA is not set 391# CONFIG_BLK_DEV_IDEDMA is not set
248# CONFIG_IDEDMA_AUTO is not set 392# CONFIG_IDEDMA_AUTO is not set
249# CONFIG_BLK_DEV_HD is not set 393# CONFIG_BLK_DEV_HD is not set
@@ -251,14 +395,10 @@ CONFIG_IDE_SH=y
251# 395#
252# SCSI device support 396# SCSI device support
253# 397#
398# CONFIG_RAID_ATTRS is not set
254# CONFIG_SCSI is not set 399# CONFIG_SCSI is not set
255 400
256# 401#
257# Old CD-ROM drivers (not SCSI, not IDE)
258#
259# CONFIG_CD_NO_IDESCSI is not set
260
261#
262# Multi-device support (RAID and LVM) 402# Multi-device support (RAID and LVM)
263# 403#
264# CONFIG_MD is not set 404# CONFIG_MD is not set
@@ -266,6 +406,7 @@ CONFIG_IDE_SH=y
266# 406#
267# Fusion MPT device support 407# Fusion MPT device support
268# 408#
409# CONFIG_FUSION is not set
269 410
270# 411#
271# IEEE 1394 (FireWire) support 412# IEEE 1394 (FireWire) support
@@ -276,69 +417,8 @@ CONFIG_IDE_SH=y
276# 417#
277 418
278# 419#
279# Networking support 420# Network device support
280#
281CONFIG_NET=y
282
283#
284# Networking options
285#
286# CONFIG_PACKET is not set
287# CONFIG_NETLINK_DEV is not set
288# CONFIG_UNIX is not set
289# CONFIG_NET_KEY is not set
290CONFIG_INET=y
291# CONFIG_IP_MULTICAST is not set
292# CONFIG_IP_ADVANCED_ROUTER is not set
293CONFIG_IP_PNP=y
294CONFIG_IP_PNP_DHCP=y
295# CONFIG_IP_PNP_BOOTP is not set
296# CONFIG_IP_PNP_RARP is not set
297# CONFIG_NET_IPIP is not set
298# CONFIG_NET_IPGRE is not set
299# CONFIG_ARPD is not set
300# CONFIG_SYN_COOKIES is not set
301# CONFIG_INET_AH is not set
302# CONFIG_INET_ESP is not set
303# CONFIG_INET_IPCOMP is not set
304# CONFIG_INET_TUNNEL is not set
305CONFIG_IP_TCPDIAG=y
306# CONFIG_IP_TCPDIAG_IPV6 is not set
307# CONFIG_IPV6 is not set
308# CONFIG_NETFILTER is not set
309
310#
311# SCTP Configuration (EXPERIMENTAL)
312#
313# CONFIG_IP_SCTP is not set
314# CONFIG_ATM is not set
315# CONFIG_BRIDGE is not set
316# CONFIG_VLAN_8021Q is not set
317# CONFIG_DECNET is not set
318# CONFIG_LLC2 is not set
319# CONFIG_IPX is not set
320# CONFIG_ATALK is not set
321# CONFIG_X25 is not set
322# CONFIG_LAPB is not set
323# CONFIG_NET_DIVERT is not set
324# CONFIG_ECONET is not set
325# CONFIG_WAN_ROUTER is not set
326
327#
328# QoS and/or fair queueing
329#
330# CONFIG_NET_SCHED is not set
331# CONFIG_NET_CLS_ROUTE is not set
332
333#
334# Network testing
335# 421#
336# CONFIG_NET_PKTGEN is not set
337# CONFIG_NETPOLL is not set
338# CONFIG_NET_POLL_CONTROLLER is not set
339# CONFIG_HAMRADIO is not set
340# CONFIG_IRDA is not set
341# CONFIG_BT is not set
342CONFIG_NETDEVICES=y 422CONFIG_NETDEVICES=y
343# CONFIG_DUMMY is not set 423# CONFIG_DUMMY is not set
344# CONFIG_BONDING is not set 424# CONFIG_BONDING is not set
@@ -346,9 +426,9 @@ CONFIG_NETDEVICES=y
346# CONFIG_TUN is not set 426# CONFIG_TUN is not set
347 427
348# 428#
349# ARCnet devices 429# PHY device support
350# 430#
351# CONFIG_ARCNET is not set 431# CONFIG_PHYLIB is not set
352 432
353# 433#
354# Ethernet (10 or 100Mbit) 434# Ethernet (10 or 100Mbit)
@@ -356,17 +436,7 @@ CONFIG_NETDEVICES=y
356CONFIG_NET_ETHERNET=y 436CONFIG_NET_ETHERNET=y
357CONFIG_MII=y 437CONFIG_MII=y
358# CONFIG_STNIC is not set 438# CONFIG_STNIC is not set
359# CONFIG_NET_VENDOR_3COM is not set
360# CONFIG_LANCE is not set
361# CONFIG_NET_VENDOR_SMC is not set
362CONFIG_SMC91X=y 439CONFIG_SMC91X=y
363# CONFIG_NET_VENDOR_RACAL is not set
364# CONFIG_AT1700 is not set
365# CONFIG_DEPCA is not set
366# CONFIG_HP100 is not set
367# CONFIG_NET_ISA is not set
368# CONFIG_NET_PCI is not set
369# CONFIG_NET_POCKET is not set
370 440
371# 441#
372# Ethernet (1000 Mbit) 442# Ethernet (1000 Mbit)
@@ -379,7 +449,6 @@ CONFIG_SMC91X=y
379# 449#
380# Token Ring devices 450# Token Ring devices
381# 451#
382# CONFIG_TR is not set
383 452
384# 453#
385# Wireless LAN (non-hamradio) 454# Wireless LAN (non-hamradio)
@@ -394,6 +463,8 @@ CONFIG_SMC91X=y
394# CONFIG_SLIP is not set 463# CONFIG_SLIP is not set
395# CONFIG_SHAPER is not set 464# CONFIG_SHAPER is not set
396# CONFIG_NETCONSOLE is not set 465# CONFIG_NETCONSOLE is not set
466# CONFIG_NETPOLL is not set
467# CONFIG_NET_POLL_CONTROLLER is not set
397 468
398# 469#
399# ISDN subsystem 470# ISDN subsystem
@@ -411,20 +482,10 @@ CONFIG_SMC91X=y
411# CONFIG_INPUT is not set 482# CONFIG_INPUT is not set
412 483
413# 484#
414# Userland interfaces 485# Hardware I/O ports
415#
416
417#
418# Input I/O drivers
419# 486#
420# CONFIG_GAMEPORT is not set
421CONFIG_SOUND_GAMEPORT=y
422# CONFIG_SERIO is not set 487# CONFIG_SERIO is not set
423# CONFIG_SERIO_I8042 is not set 488# CONFIG_GAMEPORT is not set
424
425#
426# Input Device Drivers
427#
428 489
429# 490#
430# Character devices 491# Character devices
@@ -464,24 +525,46 @@ CONFIG_RTC=y
464# 525#
465# Ftape, the floppy tape device driver 526# Ftape, the floppy tape device driver
466# 527#
467# CONFIG_DRM is not set
468# CONFIG_RAW_DRIVER is not set 528# CONFIG_RAW_DRIVER is not set
469 529
470# 530#
531# TPM devices
532#
533# CONFIG_TCG_TPM is not set
534# CONFIG_TELCLOCK is not set
535
536#
471# I2C support 537# I2C support
472# 538#
473# CONFIG_I2C is not set 539# CONFIG_I2C is not set
474 540
475# 541#
542# SPI support
543#
544# CONFIG_SPI is not set
545# CONFIG_SPI_MASTER is not set
546
547#
476# Dallas's 1-wire bus 548# Dallas's 1-wire bus
477# 549#
478# CONFIG_W1 is not set 550# CONFIG_W1 is not set
479 551
480# 552#
553# Hardware Monitoring support
554#
555CONFIG_HWMON=y
556# CONFIG_HWMON_VID is not set
557# CONFIG_HWMON_DEBUG_CHIP is not set
558
559#
481# Misc devices 560# Misc devices
482# 561#
483 562
484# 563#
564# Multimedia Capabilities Port drivers
565#
566
567#
485# Multimedia devices 568# Multimedia devices
486# 569#
487# CONFIG_VIDEO_DEV is not set 570# CONFIG_VIDEO_DEV is not set
@@ -508,7 +591,7 @@ CONFIG_RTC=y
508# CONFIG_USB_ARCH_HAS_OHCI is not set 591# CONFIG_USB_ARCH_HAS_OHCI is not set
509 592
510# 593#
511# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 594# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
512# 595#
513 596
514# 597#
@@ -524,13 +607,21 @@ CONFIG_RTC=y
524# 607#
525# InfiniBand support 608# InfiniBand support
526# 609#
527# CONFIG_INFINIBAND is not set 610
611#
612# SN Devices
613#
614
615#
616# EDAC - error detection and reporting (RAS)
617#
528 618
529# 619#
530# File systems 620# File systems
531# 621#
532CONFIG_EXT2_FS=y 622CONFIG_EXT2_FS=y
533# CONFIG_EXT2_FS_XATTR is not set 623# CONFIG_EXT2_FS_XATTR is not set
624# CONFIG_EXT2_FS_XIP is not set
534CONFIG_EXT3_FS=y 625CONFIG_EXT3_FS=y
535CONFIG_EXT3_FS_XATTR=y 626CONFIG_EXT3_FS_XATTR=y
536# CONFIG_EXT3_FS_POSIX_ACL is not set 627# CONFIG_EXT3_FS_POSIX_ACL is not set
@@ -540,17 +631,17 @@ CONFIG_JBD=y
540CONFIG_FS_MBCACHE=y 631CONFIG_FS_MBCACHE=y
541# CONFIG_REISERFS_FS is not set 632# CONFIG_REISERFS_FS is not set
542# CONFIG_JFS_FS is not set 633# CONFIG_JFS_FS is not set
543 634# CONFIG_FS_POSIX_ACL is not set
544#
545# XFS support
546#
547# CONFIG_XFS_FS is not set 635# CONFIG_XFS_FS is not set
636# CONFIG_OCFS2_FS is not set
548# CONFIG_MINIX_FS is not set 637# CONFIG_MINIX_FS is not set
549# CONFIG_ROMFS_FS is not set 638# CONFIG_ROMFS_FS is not set
639CONFIG_INOTIFY=y
550# CONFIG_QUOTA is not set 640# CONFIG_QUOTA is not set
551CONFIG_DNOTIFY=y 641CONFIG_DNOTIFY=y
552# CONFIG_AUTOFS_FS is not set 642# CONFIG_AUTOFS_FS is not set
553# CONFIG_AUTOFS4_FS is not set 643# CONFIG_AUTOFS4_FS is not set
644# CONFIG_FUSE_FS is not set
554 645
555# 646#
556# CD-ROM/DVD Filesystems 647# CD-ROM/DVD Filesystems
@@ -574,16 +665,12 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
574CONFIG_PROC_FS=y 665CONFIG_PROC_FS=y
575CONFIG_PROC_KCORE=y 666CONFIG_PROC_KCORE=y
576CONFIG_SYSFS=y 667CONFIG_SYSFS=y
577CONFIG_DEVFS_FS=y
578CONFIG_DEVFS_MOUNT=y
579# CONFIG_DEVFS_DEBUG is not set
580CONFIG_DEVPTS_FS_XATTR=y
581# CONFIG_DEVPTS_FS_SECURITY is not set
582CONFIG_TMPFS=y 668CONFIG_TMPFS=y
583# CONFIG_TMPFS_XATTR is not set
584# CONFIG_HUGETLBFS is not set 669# CONFIG_HUGETLBFS is not set
585# CONFIG_HUGETLB_PAGE is not set 670# CONFIG_HUGETLB_PAGE is not set
586CONFIG_RAMFS=y 671CONFIG_RAMFS=y
672# CONFIG_RELAYFS_FS is not set
673# CONFIG_CONFIGFS_FS is not set
587 674
588# 675#
589# Miscellaneous filesystems 676# Miscellaneous filesystems
@@ -607,12 +694,14 @@ CONFIG_RAMFS=y
607# 694#
608CONFIG_NFS_FS=y 695CONFIG_NFS_FS=y
609CONFIG_NFS_V3=y 696CONFIG_NFS_V3=y
697# CONFIG_NFS_V3_ACL is not set
610CONFIG_NFS_V4=y 698CONFIG_NFS_V4=y
611# CONFIG_NFS_DIRECTIO is not set 699# CONFIG_NFS_DIRECTIO is not set
612# CONFIG_NFSD is not set 700# CONFIG_NFSD is not set
613CONFIG_ROOT_NFS=y 701CONFIG_ROOT_NFS=y
614CONFIG_LOCKD=y 702CONFIG_LOCKD=y
615CONFIG_LOCKD_V4=y 703CONFIG_LOCKD_V4=y
704CONFIG_NFS_COMMON=y
616CONFIG_SUNRPC=y 705CONFIG_SUNRPC=y
617CONFIG_SUNRPC_GSS=y 706CONFIG_SUNRPC_GSS=y
618CONFIG_RPCSEC_GSS_KRB5=y 707CONFIG_RPCSEC_GSS_KRB5=y
@@ -622,6 +711,7 @@ CONFIG_RPCSEC_GSS_KRB5=y
622# CONFIG_NCP_FS is not set 711# CONFIG_NCP_FS is not set
623# CONFIG_CODA_FS is not set 712# CONFIG_CODA_FS is not set
624# CONFIG_AFS_FS is not set 713# CONFIG_AFS_FS is not set
714# CONFIG_9P_FS is not set
625 715
626# 716#
627# Partition Types 717# Partition Types
@@ -681,8 +771,10 @@ CONFIG_NLS_DEFAULT="iso8859-1"
681# 771#
682# Kernel hacking 772# Kernel hacking
683# 773#
774# CONFIG_PRINTK_TIME is not set
775# CONFIG_MAGIC_SYSRQ is not set
684# CONFIG_DEBUG_KERNEL is not set 776# CONFIG_DEBUG_KERNEL is not set
685CONFIG_DEBUG_PREEMPT=y 777CONFIG_LOG_BUF_SHIFT=14
686# CONFIG_FRAME_POINTER is not set 778# CONFIG_FRAME_POINTER is not set
687# CONFIG_SH_STANDARD_BIOS is not set 779# CONFIG_SH_STANDARD_BIOS is not set
688# CONFIG_EARLY_SCIF_CONSOLE is not set 780# CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -706,6 +798,7 @@ CONFIG_CRYPTO_MD5=y
706# CONFIG_CRYPTO_SHA256 is not set 798# CONFIG_CRYPTO_SHA256 is not set
707# CONFIG_CRYPTO_SHA512 is not set 799# CONFIG_CRYPTO_SHA512 is not set
708# CONFIG_CRYPTO_WP512 is not set 800# CONFIG_CRYPTO_WP512 is not set
801# CONFIG_CRYPTO_TGR192 is not set
709CONFIG_CRYPTO_DES=y 802CONFIG_CRYPTO_DES=y
710# CONFIG_CRYPTO_BLOWFISH is not set 803# CONFIG_CRYPTO_BLOWFISH is not set
711# CONFIG_CRYPTO_TWOFISH is not set 804# CONFIG_CRYPTO_TWOFISH is not set
@@ -730,5 +823,6 @@ CONFIG_CRYPTO_DES=y
730# Library routines 823# Library routines
731# 824#
732# CONFIG_CRC_CCITT is not set 825# CONFIG_CRC_CCITT is not set
826# CONFIG_CRC16 is not set
733CONFIG_CRC32=y 827CONFIG_CRC32=y
734# CONFIG_LIBCRC32C is not set 828# CONFIG_LIBCRC32C is not set
diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile
index 7a86eeb22655..f05cd96f8867 100644
--- a/arch/sh/kernel/Makefile
+++ b/arch/sh/kernel/Makefile
@@ -8,7 +8,7 @@ obj-y := process.o signal.o entry.o traps.o irq.o \
8 ptrace.o setup.o time.o sys_sh.o semaphore.o \ 8 ptrace.o setup.o time.o sys_sh.o semaphore.o \
9 io.o io_generic.o sh_ksyms.o 9 io.o io_generic.o sh_ksyms.o
10 10
11obj-y += cpu/ 11obj-y += cpu/ timers/
12 12
13obj-$(CONFIG_SMP) += smp.o 13obj-$(CONFIG_SMP) += smp.o
14obj-$(CONFIG_CF_ENABLER) += cf-enabler.o 14obj-$(CONFIG_CF_ENABLER) += cf-enabler.o
diff --git a/arch/sh/kernel/cpu/Makefile b/arch/sh/kernel/cpu/Makefile
index 5bfc33bec5d0..59d5b748752f 100644
--- a/arch/sh/kernel/cpu/Makefile
+++ b/arch/sh/kernel/cpu/Makefile
@@ -2,7 +2,7 @@
2# Makefile for the Linux/SuperH CPU-specifc backends. 2# Makefile for the Linux/SuperH CPU-specifc backends.
3# 3#
4 4
5obj-y += irq/ init.o bus.o clock.o 5obj-y += irq/ init.o clock.o
6 6
7obj-$(CONFIG_CPU_SH2) += sh2/ 7obj-$(CONFIG_CPU_SH2) += sh2/
8obj-$(CONFIG_CPU_SH3) += sh3/ 8obj-$(CONFIG_CPU_SH3) += sh3/
diff --git a/arch/sh/kernel/cpu/bus.c b/arch/sh/kernel/cpu/bus.c
deleted file mode 100644
index fc6c4bd40c65..000000000000
--- a/arch/sh/kernel/cpu/bus.c
+++ /dev/null
@@ -1,197 +0,0 @@
1/*
2 * arch/sh/kernel/cpu/bus.c
3 *
4 * Virtual bus for SuperH.
5 *
6 * Copyright (C) 2004 Paul Mundt
7 *
8 * Shamelessly cloned from arch/arm/mach-omap/bus.c, which was written
9 * by:
10 *
11 * Copyright (C) 2003 - 2004 Nokia Corporation
12 * Written by Tony Lindgren <tony@atomide.com>
13 * Portions of code based on sa1111.c.
14 *
15 * This program is free software; you can redistribute it and/or modify it
16 * under the terms of the GNU General Public License as published by the
17 * Free Software Foundation; either version 2 of the License, or (at your
18 * option) any later version.
19 */
20#include <linux/kernel.h>
21#include <linux/device.h>
22#include <linux/init.h>
23#include <linux/module.h>
24#include <asm/bus-sh.h>
25
26static int sh_bus_match(struct device *dev, struct device_driver *drv)
27{
28 struct sh_driver *shdrv = to_sh_driver(drv);
29 struct sh_dev *shdev = to_sh_dev(dev);
30
31 return shdev->dev_id == shdrv->dev_id;
32}
33
34static int sh_bus_suspend(struct device *dev, pm_message_t state)
35{
36 struct sh_dev *shdev = to_sh_dev(dev);
37 struct sh_driver *shdrv = to_sh_driver(dev->driver);
38
39 if (shdrv && shdrv->suspend)
40 return shdrv->suspend(shdev, state);
41
42 return 0;
43}
44
45static int sh_bus_resume(struct device *dev)
46{
47 struct sh_dev *shdev = to_sh_dev(dev);
48 struct sh_driver *shdrv = to_sh_driver(dev->driver);
49
50 if (shdrv && shdrv->resume)
51 return shdrv->resume(shdev);
52
53 return 0;
54}
55
56static int sh_device_probe(struct device *dev)
57{
58 struct sh_dev *shdev = to_sh_dev(dev);
59 struct sh_driver *shdrv = to_sh_driver(dev->driver);
60
61 if (shdrv && shdrv->probe)
62 return shdrv->probe(shdev);
63
64 return -ENODEV;
65}
66
67static int sh_device_remove(struct device *dev)
68{
69 struct sh_dev *shdev = to_sh_dev(dev);
70 struct sh_driver *shdrv = to_sh_driver(dev->driver);
71
72 if (shdrv && shdrv->remove)
73 return shdrv->remove(shdev);
74
75 return 0;
76}
77
78static struct device sh_bus_devices[SH_NR_BUSES] = {
79 {
80 .bus_id = SH_BUS_NAME_VIRT,
81 },
82};
83
84struct bus_type sh_bus_types[SH_NR_BUSES] = {
85 {
86 .name = SH_BUS_NAME_VIRT,
87 .match = sh_bus_match,
88 .probe = sh_bus_probe,
89 .remove = sh_bus_remove,
90 .suspend = sh_bus_suspend,
91 .resume = sh_bus_resume,
92 },
93};
94
95int sh_device_register(struct sh_dev *dev)
96{
97 if (!dev)
98 return -EINVAL;
99
100 if (dev->bus_id < 0 || dev->bus_id >= SH_NR_BUSES) {
101 printk(KERN_ERR "%s: bus_id invalid: %s bus: %d\n",
102 __FUNCTION__, dev->name, dev->bus_id);
103 return -EINVAL;
104 }
105
106 dev->dev.parent = &sh_bus_devices[dev->bus_id];
107 dev->dev.bus = &sh_bus_types[dev->bus_id];
108
109 /* This is needed for USB OHCI to work */
110 if (dev->dma_mask)
111 dev->dev.dma_mask = dev->dma_mask;
112 if (dev->coherent_dma_mask)
113 dev->dev.coherent_dma_mask = dev->coherent_dma_mask;
114
115 snprintf(dev->dev.bus_id, BUS_ID_SIZE, "%s%u",
116 dev->name, dev->dev_id);
117
118 printk(KERN_INFO "Registering SH device '%s'. Parent at %s\n",
119 dev->dev.bus_id, dev->dev.parent->bus_id);
120
121 return device_register(&dev->dev);
122}
123
124void sh_device_unregister(struct sh_dev *dev)
125{
126 device_unregister(&dev->dev);
127}
128
129int sh_driver_register(struct sh_driver *drv)
130{
131 if (!drv)
132 return -EINVAL;
133
134 if (drv->bus_id < 0 || drv->bus_id >= SH_NR_BUSES) {
135 printk(KERN_ERR "%s: bus_id invalid: bus: %d device %d\n",
136 __FUNCTION__, drv->bus_id, drv->dev_id);
137 return -EINVAL;
138 }
139
140 drv->drv.bus = &sh_bus_types[drv->bus_id];
141
142 return driver_register(&drv->drv);
143}
144
145void sh_driver_unregister(struct sh_driver *drv)
146{
147 driver_unregister(&drv->drv);
148}
149
150static int __init sh_bus_init(void)
151{
152 int i, ret = 0;
153
154 for (i = 0; i < SH_NR_BUSES; i++) {
155 ret = device_register(&sh_bus_devices[i]);
156 if (ret != 0) {
157 printk(KERN_ERR "Unable to register bus device %s\n",
158 sh_bus_devices[i].bus_id);
159 continue;
160 }
161
162 ret = bus_register(&sh_bus_types[i]);
163 if (ret != 0) {
164 printk(KERN_ERR "Unable to register bus %s\n",
165 sh_bus_types[i].name);
166 device_unregister(&sh_bus_devices[i]);
167 }
168 }
169
170 printk(KERN_INFO "SH Virtual Bus initialized\n");
171
172 return ret;
173}
174
175static void __exit sh_bus_exit(void)
176{
177 int i;
178
179 for (i = 0; i < SH_NR_BUSES; i++) {
180 bus_unregister(&sh_bus_types[i]);
181 device_unregister(&sh_bus_devices[i]);
182 }
183}
184
185module_init(sh_bus_init);
186module_exit(sh_bus_exit);
187
188MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>");
189MODULE_DESCRIPTION("SH Virtual Bus");
190MODULE_LICENSE("GPL");
191
192EXPORT_SYMBOL(sh_bus_types);
193EXPORT_SYMBOL(sh_device_register);
194EXPORT_SYMBOL(sh_device_unregister);
195EXPORT_SYMBOL(sh_driver_register);
196EXPORT_SYMBOL(sh_driver_unregister);
197
diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c
index 989e7fdd524d..97fa37f42b84 100644
--- a/arch/sh/kernel/cpu/clock.c
+++ b/arch/sh/kernel/cpu/clock.c
@@ -38,9 +38,7 @@ static DECLARE_MUTEX(clock_list_sem);
38static struct clk master_clk = { 38static struct clk master_clk = {
39 .name = "master_clk", 39 .name = "master_clk",
40 .flags = CLK_ALWAYS_ENABLED | CLK_RATE_PROPAGATES, 40 .flags = CLK_ALWAYS_ENABLED | CLK_RATE_PROPAGATES,
41#ifdef CONFIG_SH_PCLK_FREQ_BOOL
42 .rate = CONFIG_SH_PCLK_FREQ, 41 .rate = CONFIG_SH_PCLK_FREQ,
43#endif
44}; 42};
45 43
46static struct clk module_clk = { 44static struct clk module_clk = {
@@ -227,16 +225,7 @@ int __init clk_init(void)
227{ 225{
228 int i, ret = 0; 226 int i, ret = 0;
229 227
230 if (unlikely(!master_clk.rate)) 228 BUG_ON(unlikely(!master_clk.rate));
231 /*
232 * NOTE: This will break if the default divisor has been
233 * changed.
234 *
235 * No one should be changing the default on us however,
236 * expect that a sane value for CONFIG_SH_PCLK_FREQ will
237 * be defined in the event of a different divisor.
238 */
239 master_clk.rate = get_timer_frequency() * 4;
240 229
241 for (i = 0; i < ARRAY_SIZE(onchip_clocks); i++) { 230 for (i = 0; i < ARRAY_SIZE(onchip_clocks); i++) {
242 struct clk *clk = onchip_clocks[i]; 231 struct clk *clk = onchip_clocks[i];
diff --git a/arch/sh/kernel/cpu/irq/ipr.c b/arch/sh/kernel/cpu/irq/ipr.c
index fdbd718ae5c6..e55150ed0856 100644
--- a/arch/sh/kernel/cpu/irq/ipr.c
+++ b/arch/sh/kernel/cpu/irq/ipr.c
@@ -108,8 +108,7 @@ static void end_ipr_irq(unsigned int irq)
108 enable_ipr_irq(irq); 108 enable_ipr_irq(irq);
109} 109}
110 110
111void make_ipr_irq(unsigned int irq, unsigned int addr, int pos, 111void make_ipr_irq(unsigned int irq, unsigned int addr, int pos, int priority)
112 int priority, int maskpos)
113{ 112{
114 disable_irq_nosync(irq); 113 disable_irq_nosync(irq);
115 ipr_data[irq].addr = addr; 114 ipr_data[irq].addr = addr;
@@ -123,44 +122,44 @@ void make_ipr_irq(unsigned int irq, unsigned int addr, int pos,
123void __init init_IRQ(void) 122void __init init_IRQ(void)
124{ 123{
125#ifndef CONFIG_CPU_SUBTYPE_SH7780 124#ifndef CONFIG_CPU_SUBTYPE_SH7780
126 make_ipr_irq(TIMER_IRQ, TIMER_IPR_ADDR, TIMER_IPR_POS, TIMER_PRIORITY, 0); 125 make_ipr_irq(TIMER_IRQ, TIMER_IPR_ADDR, TIMER_IPR_POS, TIMER_PRIORITY);
127 make_ipr_irq(TIMER1_IRQ, TIMER1_IPR_ADDR, TIMER1_IPR_POS, TIMER1_PRIORITY, 0); 126 make_ipr_irq(TIMER1_IRQ, TIMER1_IPR_ADDR, TIMER1_IPR_POS, TIMER1_PRIORITY);
128#if defined(CONFIG_SH_RTC) 127#if defined(CONFIG_SH_RTC)
129 make_ipr_irq(RTC_IRQ, RTC_IPR_ADDR, RTC_IPR_POS, RTC_PRIORITY, 0); 128 make_ipr_irq(RTC_IRQ, RTC_IPR_ADDR, RTC_IPR_POS, RTC_PRIORITY);
130#endif 129#endif
131 130
132#ifdef SCI_ERI_IRQ 131#ifdef SCI_ERI_IRQ
133 make_ipr_irq(SCI_ERI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY, 0); 132 make_ipr_irq(SCI_ERI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY);
134 make_ipr_irq(SCI_RXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY, 0); 133 make_ipr_irq(SCI_RXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY);
135 make_ipr_irq(SCI_TXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY, 0); 134 make_ipr_irq(SCI_TXI_IRQ, SCI_IPR_ADDR, SCI_IPR_POS, SCI_PRIORITY);
136#endif 135#endif
137 136
138#ifdef SCIF1_ERI_IRQ 137#ifdef SCIF1_ERI_IRQ
139 make_ipr_irq(SCIF1_ERI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY, 0); 138 make_ipr_irq(SCIF1_ERI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY);
140 make_ipr_irq(SCIF1_RXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY, 0); 139 make_ipr_irq(SCIF1_RXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY);
141 make_ipr_irq(SCIF1_BRI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY, 0); 140 make_ipr_irq(SCIF1_BRI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY);
142 make_ipr_irq(SCIF1_TXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY, 0); 141 make_ipr_irq(SCIF1_TXI_IRQ, SCIF1_IPR_ADDR, SCIF1_IPR_POS, SCIF1_PRIORITY);
143#endif 142#endif
144 143
145#if defined(CONFIG_CPU_SUBTYPE_SH7300) 144#if defined(CONFIG_CPU_SUBTYPE_SH7300)
146 make_ipr_irq(SCIF0_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY, 0); 145 make_ipr_irq(SCIF0_IRQ, SCIF0_IPR_ADDR, SCIF0_IPR_POS, SCIF0_PRIORITY);
147 make_ipr_irq(DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY, 0); 146 make_ipr_irq(DMTE2_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY);
148 make_ipr_irq(DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY, 0); 147 make_ipr_irq(DMTE3_IRQ, DMA1_IPR_ADDR, DMA1_IPR_POS, DMA1_PRIORITY);
149 make_ipr_irq(VIO_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY, 0); 148 make_ipr_irq(VIO_IRQ, VIO_IPR_ADDR, VIO_IPR_POS, VIO_PRIORITY);
150#endif 149#endif
151 150
152#ifdef SCIF_ERI_IRQ 151#ifdef SCIF_ERI_IRQ
153 make_ipr_irq(SCIF_ERI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY, 0); 152 make_ipr_irq(SCIF_ERI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY);
154 make_ipr_irq(SCIF_RXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY, 0); 153 make_ipr_irq(SCIF_RXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY);
155 make_ipr_irq(SCIF_BRI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY, 0); 154 make_ipr_irq(SCIF_BRI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY);
156 make_ipr_irq(SCIF_TXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY, 0); 155 make_ipr_irq(SCIF_TXI_IRQ, SCIF_IPR_ADDR, SCIF_IPR_POS, SCIF_PRIORITY);
157#endif 156#endif
158 157
159#ifdef IRDA_ERI_IRQ 158#ifdef IRDA_ERI_IRQ
160 make_ipr_irq(IRDA_ERI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY, 0); 159 make_ipr_irq(IRDA_ERI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY);
161 make_ipr_irq(IRDA_RXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY, 0); 160 make_ipr_irq(IRDA_RXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY);
162 make_ipr_irq(IRDA_BRI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY, 0); 161 make_ipr_irq(IRDA_BRI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY);
163 make_ipr_irq(IRDA_TXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY, 0); 162 make_ipr_irq(IRDA_TXI_IRQ, IRDA_IPR_ADDR, IRDA_IPR_POS, IRDA_PRIORITY);
164#endif 163#endif
165 164
166#if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \ 165#if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \
@@ -175,12 +174,12 @@ void __init init_IRQ(void)
175 * You should set corresponding bits of PFC to "00" 174 * You should set corresponding bits of PFC to "00"
176 * to enable these interrupts. 175 * to enable these interrupts.
177 */ 176 */
178 make_ipr_irq(IRQ0_IRQ, IRQ0_IPR_ADDR, IRQ0_IPR_POS, IRQ0_PRIORITY, 0); 177 make_ipr_irq(IRQ0_IRQ, IRQ0_IPR_ADDR, IRQ0_IPR_POS, IRQ0_PRIORITY);
179 make_ipr_irq(IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, IRQ1_PRIORITY, 0); 178 make_ipr_irq(IRQ1_IRQ, IRQ1_IPR_ADDR, IRQ1_IPR_POS, IRQ1_PRIORITY);
180 make_ipr_irq(IRQ2_IRQ, IRQ2_IPR_ADDR, IRQ2_IPR_POS, IRQ2_PRIORITY, 0); 179 make_ipr_irq(IRQ2_IRQ, IRQ2_IPR_ADDR, IRQ2_IPR_POS, IRQ2_PRIORITY);
181 make_ipr_irq(IRQ3_IRQ, IRQ3_IPR_ADDR, IRQ3_IPR_POS, IRQ3_PRIORITY, 0); 180 make_ipr_irq(IRQ3_IRQ, IRQ3_IPR_ADDR, IRQ3_IPR_POS, IRQ3_PRIORITY);
182 make_ipr_irq(IRQ4_IRQ, IRQ4_IPR_ADDR, IRQ4_IPR_POS, IRQ4_PRIORITY, 0); 181 make_ipr_irq(IRQ4_IRQ, IRQ4_IPR_ADDR, IRQ4_IPR_POS, IRQ4_PRIORITY);
183 make_ipr_irq(IRQ5_IRQ, IRQ5_IPR_ADDR, IRQ5_IPR_POS, IRQ5_PRIORITY, 0); 182 make_ipr_irq(IRQ5_IRQ, IRQ5_IPR_ADDR, IRQ5_IPR_POS, IRQ5_PRIORITY);
184#endif 183#endif
185#endif 184#endif
186 185
diff --git a/arch/sh/kernel/entry.S b/arch/sh/kernel/entry.S
index fb6368159dd0..a440d36ee618 100644
--- a/arch/sh/kernel/entry.S
+++ b/arch/sh/kernel/entry.S
@@ -16,6 +16,7 @@
16#include <linux/config.h> 16#include <linux/config.h>
17#include <asm/asm-offsets.h> 17#include <asm/asm-offsets.h>
18#include <asm/thread_info.h> 18#include <asm/thread_info.h>
19#include <asm/cpu/mmu_context.h>
19#include <asm/unistd.h> 20#include <asm/unistd.h>
20 21
21#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE) 22#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE)
@@ -75,23 +76,6 @@
75ENOSYS = 38 76ENOSYS = 38
76EINVAL = 22 77EINVAL = 22
77 78
78#if defined(CONFIG_CPU_SH3)
79TRA = 0xffffffd0
80EXPEVT = 0xffffffd4
81#if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \
82 defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7705)
83INTEVT = 0xa4000000 ! INTEVTE2(0xa4000000)
84#else
85INTEVT = 0xffffffd8
86#endif
87MMU_TEA = 0xfffffffc ! TLB Exception Address Register
88#elif defined(CONFIG_CPU_SH4)
89TRA = 0xff000020
90EXPEVT = 0xff000024
91INTEVT = 0xff000028
92MMU_TEA = 0xff00000c ! TLB Exception Address Register
93#endif
94
95#if defined(CONFIG_KGDB_NMI) 79#if defined(CONFIG_KGDB_NMI)
96NMI_VEC = 0x1c0 ! Must catch early for debounce 80NMI_VEC = 0x1c0 ! Must catch early for debounce
97#endif 81#endif
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
index a4dc2b532e10..9fd1723e6219 100644
--- a/arch/sh/kernel/process.c
+++ b/arch/sh/kernel/process.c
@@ -15,21 +15,18 @@
15#include <linux/unistd.h> 15#include <linux/unistd.h>
16#include <linux/mm.h> 16#include <linux/mm.h>
17#include <linux/elfcore.h> 17#include <linux/elfcore.h>
18#include <linux/slab.h>
19#include <linux/a.out.h> 18#include <linux/a.out.h>
19#include <linux/slab.h>
20#include <linux/pm.h>
20#include <linux/ptrace.h> 21#include <linux/ptrace.h>
21#include <linux/platform.h> 22#include <linux/platform.h>
22#include <linux/kallsyms.h> 23#include <linux/kallsyms.h>
24#include <linux/kexec.h>
23 25
24#include <asm/io.h> 26#include <asm/io.h>
25#include <asm/uaccess.h> 27#include <asm/uaccess.h>
26#include <asm/mmu_context.h> 28#include <asm/mmu_context.h>
27#include <asm/elf.h> 29#include <asm/elf.h>
28#if defined(CONFIG_SH_HS7751RVOIP)
29#include <asm/hs7751rvoip/hs7751rvoip.h>
30#elif defined(CONFIG_SH_RTS7751R2D)
31#include <asm/rts7751r2d/rts7751r2d.h>
32#endif
33 30
34static int hlt_counter=0; 31static int hlt_counter=0;
35 32
@@ -37,6 +34,11 @@ int ubc_usercnt = 0;
37 34
38#define HARD_IDLE_TIMEOUT (HZ / 3) 35#define HARD_IDLE_TIMEOUT (HZ / 3)
39 36
37void (*pm_idle)(void);
38
39void (*pm_power_off)(void);
40EXPORT_SYMBOL(pm_power_off);
41
40void disable_hlt(void) 42void disable_hlt(void)
41{ 43{
42 hlt_counter++; 44 hlt_counter++;
@@ -51,17 +53,25 @@ void enable_hlt(void)
51 53
52EXPORT_SYMBOL(enable_hlt); 54EXPORT_SYMBOL(enable_hlt);
53 55
56void default_idle(void)
57{
58 if (!hlt_counter)
59 cpu_sleep();
60 else
61 cpu_relax();
62}
63
54void cpu_idle(void) 64void cpu_idle(void)
55{ 65{
56 /* endless idle loop with no priority at all */ 66 /* endless idle loop with no priority at all */
57 while (1) { 67 while (1) {
58 if (hlt_counter) { 68 void (*idle)(void) = pm_idle;
59 while (!need_resched()) 69
60 cpu_relax(); 70 if (!idle)
61 } else { 71 idle = default_idle;
62 while (!need_resched()) 72
63 cpu_sleep(); 73 while (!need_resched())
64 } 74 idle();
65 75
66 preempt_enable_no_resched(); 76 preempt_enable_no_resched();
67 schedule(); 77 schedule();
@@ -88,28 +98,16 @@ void machine_restart(char * __unused)
88 98
89void machine_halt(void) 99void machine_halt(void)
90{ 100{
91#if defined(CONFIG_SH_HS7751RVOIP) 101 local_irq_disable();
92 unsigned short value;
93 102
94 value = ctrl_inw(PA_OUTPORTR);
95 ctrl_outw((value & 0xffdf), PA_OUTPORTR);
96#elif defined(CONFIG_SH_RTS7751R2D)
97 ctrl_outw(0x0001, PA_POWOFF);
98#endif
99 while (1) 103 while (1)
100 cpu_sleep(); 104 cpu_sleep();
101} 105}
102 106
103void machine_power_off(void) 107void machine_power_off(void)
104{ 108{
105#if defined(CONFIG_SH_HS7751RVOIP) 109 if (pm_power_off)
106 unsigned short value; 110 pm_power_off();
107
108 value = ctrl_inw(PA_OUTPORTR);
109 ctrl_outw((value & 0xffdf), PA_OUTPORTR);
110#elif defined(CONFIG_SH_RTS7751R2D)
111 ctrl_outw(0x0001, PA_POWOFF);
112#endif
113} 111}
114 112
115void show_regs(struct pt_regs * regs) 113void show_regs(struct pt_regs * regs)
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
index 036050b377cd..a067a34e0b64 100644
--- a/arch/sh/kernel/setup.c
+++ b/arch/sh/kernel/setup.c
@@ -22,10 +22,10 @@
22#include <linux/cpu.h> 22#include <linux/cpu.h>
23#include <asm/uaccess.h> 23#include <asm/uaccess.h>
24#include <asm/io.h> 24#include <asm/io.h>
25#include <asm/io_generic.h>
26#include <asm/sections.h> 25#include <asm/sections.h>
27#include <asm/irq.h> 26#include <asm/irq.h>
28#include <asm/setup.h> 27#include <asm/setup.h>
28#include <asm/clock.h>
29 29
30#ifdef CONFIG_SH_KGDB 30#ifdef CONFIG_SH_KGDB
31#include <asm/kgdb.h> 31#include <asm/kgdb.h>
@@ -41,7 +41,7 @@ extern void * __rd_start, * __rd_end;
41 * This value will be used at the very early stage of serial setup. 41 * This value will be used at the very early stage of serial setup.
42 * The bigger value means no problem. 42 * The bigger value means no problem.
43 */ 43 */
44struct sh_cpuinfo boot_cpu_data = { CPU_SH_NONE, 0, 10000000, }; 44struct sh_cpuinfo boot_cpu_data = { CPU_SH_NONE, 10000000, };
45struct screen_info screen_info; 45struct screen_info screen_info;
46 46
47#if defined(CONFIG_SH_UNKNOWN) 47#if defined(CONFIG_SH_UNKNOWN)
@@ -186,7 +186,7 @@ static inline void parse_cmdline (char ** cmdline_p, char mv_name[MV_NAME_SIZE],
186 186
187static int __init sh_mv_setup(char **cmdline_p) 187static int __init sh_mv_setup(char **cmdline_p)
188{ 188{
189#if defined(CONFIG_SH_UNKNOWN) 189#ifdef CONFIG_SH_UNKNOWN
190 extern struct sh_machine_vector mv_unknown; 190 extern struct sh_machine_vector mv_unknown;
191#endif 191#endif
192 struct sh_machine_vector *mv = NULL; 192 struct sh_machine_vector *mv = NULL;
@@ -196,7 +196,7 @@ static int __init sh_mv_setup(char **cmdline_p)
196 196
197 parse_cmdline(cmdline_p, mv_name, &mv, &mv_io_base, &mv_mmio_enable); 197 parse_cmdline(cmdline_p, mv_name, &mv, &mv_io_base, &mv_mmio_enable);
198 198
199#ifdef CONFIG_SH_GENERIC 199#ifdef CONFIG_SH_UNKNOWN
200 if (mv == NULL) { 200 if (mv == NULL) {
201 mv = &mv_unknown; 201 mv = &mv_unknown;
202 if (*mv_name != '\0') { 202 if (*mv_name != '\0') {
@@ -206,9 +206,6 @@ static int __init sh_mv_setup(char **cmdline_p)
206 } 206 }
207 sh_mv = *mv; 207 sh_mv = *mv;
208#endif 208#endif
209#ifdef CONFIG_SH_UNKNOWN
210 sh_mv = mv_unknown;
211#endif
212 209
213 /* 210 /*
214 * Manually walk the vec, fill in anything that the board hasn't yet 211 * Manually walk the vec, fill in anything that the board hasn't yet
@@ -231,10 +228,8 @@ static int __init sh_mv_setup(char **cmdline_p)
231 mv_set(readb); mv_set(readw); mv_set(readl); 228 mv_set(readb); mv_set(readw); mv_set(readl);
232 mv_set(writeb); mv_set(writew); mv_set(writel); 229 mv_set(writeb); mv_set(writew); mv_set(writel);
233 230
234 mv_set(ioremap); 231 mv_set(ioport_map);
235 mv_set(iounmap); 232 mv_set(ioport_unmap);
236
237 mv_set(isa_port2addr);
238 mv_set(irq_demux); 233 mv_set(irq_demux);
239 234
240#ifdef CONFIG_SH_UNKNOWN 235#ifdef CONFIG_SH_UNKNOWN
@@ -273,10 +268,10 @@ void __init setup_arch(char **cmdline_p)
273 init_mm.end_data = (unsigned long) _edata; 268 init_mm.end_data = (unsigned long) _edata;
274 init_mm.brk = (unsigned long) _end; 269 init_mm.brk = (unsigned long) _end;
275 270
276 code_resource.start = virt_to_bus(_text); 271 code_resource.start = (unsigned long)virt_to_phys(_text);
277 code_resource.end = virt_to_bus(_etext)-1; 272 code_resource.end = (unsigned long)virt_to_phys(_etext)-1;
278 data_resource.start = virt_to_bus(_etext); 273 data_resource.start = (unsigned long)virt_to_phys(_etext);
279 data_resource.end = virt_to_bus(_edata)-1; 274 data_resource.end = (unsigned long)virt_to_phys(_edata)-1;
280 275
281 sh_mv_setup(cmdline_p); 276 sh_mv_setup(cmdline_p);
282 277
@@ -435,6 +430,9 @@ static const char *cpu_name[] = {
435 [CPU_ST40GX1] = "ST40GX1", 430 [CPU_ST40GX1] = "ST40GX1",
436 [CPU_SH4_202] = "SH4-202", 431 [CPU_SH4_202] = "SH4-202",
437 [CPU_SH4_501] = "SH4-501", 432 [CPU_SH4_501] = "SH4-501",
433 [CPU_SH7770] = "SH7770",
434 [CPU_SH7780] = "SH7780",
435 [CPU_SH7781] = "SH7781",
438 [CPU_SH_NONE] = "Unknown" 436 [CPU_SH_NONE] = "Unknown"
439}; 437};
440 438
@@ -445,7 +443,7 @@ const char *get_cpu_subtype(void)
445 443
446#ifdef CONFIG_PROC_FS 444#ifdef CONFIG_PROC_FS
447static const char *cpu_flags[] = { 445static const char *cpu_flags[] = {
448 "none", "fpu", "p2flush", "mmuassoc", "dsp", "perfctr", 446 "none", "fpu", "p2flush", "mmuassoc", "dsp", "perfctr", "ptea", NULL
449}; 447};
450 448
451static void show_cpuflags(struct seq_file *m) 449static void show_cpuflags(struct seq_file *m)
@@ -459,7 +457,7 @@ static void show_cpuflags(struct seq_file *m)
459 return; 457 return;
460 } 458 }
461 459
462 for (i = 0; i < cpu_data->flags; i++) 460 for (i = 0; cpu_flags[i]; i++)
463 if ((cpu_data->flags & (1 << i))) 461 if ((cpu_data->flags & (1 << i)))
464 seq_printf(m, " %s", cpu_flags[i+1]); 462 seq_printf(m, " %s", cpu_flags[i+1]);
465 463
@@ -472,7 +470,8 @@ static void show_cacheinfo(struct seq_file *m, const char *type, struct cache_in
472 470
473 cache_size = info.ways * info.sets * info.linesz; 471 cache_size = info.ways * info.sets * info.linesz;
474 472
475 seq_printf(m, "%s size\t: %dKiB\n", type, cache_size >> 10); 473 seq_printf(m, "%s size\t: %2dKiB (%d-way)\n",
474 type, cache_size >> 10, info.ways);
476} 475}
477 476
478/* 477/*
@@ -511,21 +510,9 @@ static int show_cpuinfo(struct seq_file *m, void *v)
511 boot_cpu_data.loops_per_jiffy/(500000/HZ), 510 boot_cpu_data.loops_per_jiffy/(500000/HZ),
512 (boot_cpu_data.loops_per_jiffy/(5000/HZ)) % 100); 511 (boot_cpu_data.loops_per_jiffy/(5000/HZ)) % 100);
513 512
514#define PRINT_CLOCK(name, value) \ 513 return show_clocks(m);
515 seq_printf(m, name " clock\t: %d.%02dMHz\n", \
516 ((value) / 1000000), ((value) % 1000000)/10000)
517
518 PRINT_CLOCK("cpu", boot_cpu_data.cpu_clock);
519 PRINT_CLOCK("bus", boot_cpu_data.bus_clock);
520#ifdef CONFIG_CPU_SUBTYPE_ST40STB1
521 PRINT_CLOCK("memory", boot_cpu_data.memory_clock);
522#endif
523 PRINT_CLOCK("module", boot_cpu_data.module_clock);
524
525 return 0;
526} 514}
527 515
528
529static void *c_start(struct seq_file *m, loff_t *pos) 516static void *c_start(struct seq_file *m, loff_t *pos)
530{ 517{
531 return *pos < NR_CPUS ? cpu_data + *pos : NULL; 518 return *pos < NR_CPUS ? cpu_data + *pos : NULL;
@@ -596,7 +583,7 @@ static int __init kgdb_parse_options(char *options)
596 options += map->namelen + 1; 583 options += map->namelen + 1;
597 584
598 options = (*options == ',') ? options+1 : options; 585 options = (*options == ',') ? options+1 : options;
599 586
600 /* Read optional parameters (baud/parity/bits) */ 587 /* Read optional parameters (baud/parity/bits) */
601 baud = simple_strtoul(options, &options, 10); 588 baud = simple_strtoul(options, &options, 10);
602 if (baud != 0) { 589 if (baud != 0) {
diff --git a/arch/sh64/kernel/sh_ksyms.c b/arch/sh64/kernel/sh_ksyms.c
index 472b450e61be..de29c45f23a7 100644
--- a/arch/sh64/kernel/sh_ksyms.c
+++ b/arch/sh64/kernel/sh_ksyms.c
@@ -31,14 +31,6 @@
31 31
32extern int dump_fpu(struct pt_regs *, elf_fpregset_t *); 32extern int dump_fpu(struct pt_regs *, elf_fpregset_t *);
33 33
34#if 0
35/* Not yet - there's no declaration of drive_info anywhere. */
36#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
37extern struct drive_info_struct drive_info;
38EXPORT_SYMBOL(drive_info);
39#endif
40#endif
41
42/* platform dependent support */ 34/* platform dependent support */
43EXPORT_SYMBOL(dump_fpu); 35EXPORT_SYMBOL(dump_fpu);
44EXPORT_SYMBOL(iounmap); 36EXPORT_SYMBOL(iounmap);
diff --git a/arch/sh64/kernel/time.c b/arch/sh64/kernel/time.c
index 1195af37ee5a..0773c9f389f3 100644
--- a/arch/sh64/kernel/time.c
+++ b/arch/sh64/kernel/time.c
@@ -29,6 +29,7 @@
29#include <linux/init.h> 29#include <linux/init.h>
30#include <linux/profile.h> 30#include <linux/profile.h>
31#include <linux/smp.h> 31#include <linux/smp.h>
32#include <linux/module.h>
32 33
33#include <asm/registers.h> /* required by inline __asm__ stmt. */ 34#include <asm/registers.h> /* required by inline __asm__ stmt. */
34 35
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S
index c51d08d218ef..887f6a160c58 100644
--- a/arch/sparc/kernel/entry.S
+++ b/arch/sparc/kernel/entry.S
@@ -38,7 +38,7 @@
38 38
39#define curptr g6 39#define curptr g6
40 40
41#define NR_SYSCALLS 284 /* Each OS is different... */ 41#define NR_SYSCALLS 300 /* Each OS is different... */
42 42
43/* These are just handy. */ 43/* These are just handy. */
44#define _SV save %sp, -STACKFRAME_SZ, %sp 44#define _SV save %sp, -STACKFRAME_SZ, %sp
diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c
index fbb05a452e51..118cac84a0f5 100644
--- a/arch/sparc/kernel/process.c
+++ b/arch/sparc/kernel/process.c
@@ -54,7 +54,7 @@ void (*pm_idle)(void);
54 * This is done via auxio, but could be used as a fallback 54 * This is done via auxio, but could be used as a fallback
55 * handler when auxio is not present-- unused for now... 55 * handler when auxio is not present-- unused for now...
56 */ 56 */
57void (*pm_power_off)(void); 57void (*pm_power_off)(void) = machine_power_off;
58 58
59/* 59/*
60 * sysctl - toggle power-off restriction for serial console 60 * sysctl - toggle power-off restriction for serial console
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S
index 6877ae4cd1d9..768de64b371f 100644
--- a/arch/sparc/kernel/systbls.S
+++ b/arch/sparc/kernel/systbls.S
@@ -76,9 +76,9 @@ sys_call_table:
76/*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink 76/*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
77/*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid 77/*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
78/*280*/ .long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat 78/*280*/ .long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
79/*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat 79/*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
80/*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat 80/*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
81/*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll 81/*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
82 82
83#ifdef CONFIG_SUNOS_EMUL 83#ifdef CONFIG_SUNOS_EMUL
84 /* Now the SunOS syscall table. */ 84 /* Now the SunOS syscall table. */
@@ -190,5 +190,6 @@ sunos_sys_table:
190/*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys 190/*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys
191 .long sunos_nosys, sunos_nosys, sunos_nosys 191 .long sunos_nosys, sunos_nosys, sunos_nosys
192 .long sunos_nosys, sunos_nosys, sunos_nosys 192 .long sunos_nosys, sunos_nosys, sunos_nosys
193 .long sunos_nosys
193 194
194#endif 195#endif
diff --git a/arch/sparc/math-emu/math.c b/arch/sparc/math-emu/math.c
index be2c80932e26..8613b3eb877c 100644
--- a/arch/sparc/math-emu/math.c
+++ b/arch/sparc/math-emu/math.c
@@ -323,11 +323,6 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs)
323 case FMOVS: 323 case FMOVS:
324 case FABSS: 324 case FABSS:
325 case FNEGS: TYPE(2,1,0,1,0,0,0); break; 325 case FNEGS: TYPE(2,1,0,1,0,0,0); break;
326 default:
327#ifdef DEBUG_MATHEMU
328 printk("unknown FPop1: %03lx\n",(insn>>5)&0x1ff);
329#endif
330 break;
331 } 326 }
332 } else if ((insn & 0xc1f80000) == 0x81a80000) /* FPOP2 */ { 327 } else if ((insn & 0xc1f80000) == 0x81a80000) /* FPOP2 */ {
333 switch ((insn >> 5) & 0x1ff) { 328 switch ((insn >> 5) & 0x1ff) {
@@ -337,11 +332,6 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs)
337 case FCMPED: TYPE(3,0,0,2,1,2,1); break; 332 case FCMPED: TYPE(3,0,0,2,1,2,1); break;
338 case FCMPQ: TYPE(3,0,0,3,1,3,1); break; 333 case FCMPQ: TYPE(3,0,0,3,1,3,1); break;
339 case FCMPEQ: TYPE(3,0,0,3,1,3,1); break; 334 case FCMPEQ: TYPE(3,0,0,3,1,3,1); break;
340 default:
341#ifdef DEBUG_MATHEMU
342 printk("unknown FPop2: %03lx\n",(insn>>5)&0x1ff);
343#endif
344 break;
345 } 335 }
346 } 336 }
347 337
diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig
index ab733be9af08..4c0a50a76554 100644
--- a/arch/sparc64/Kconfig
+++ b/arch/sparc64/Kconfig
@@ -383,6 +383,7 @@ source "arch/sparc64/oprofile/Kconfig"
383 383
384config KPROBES 384config KPROBES
385 bool "Kprobes (EXPERIMENTAL)" 385 bool "Kprobes (EXPERIMENTAL)"
386 depends on EXPERIMENTAL && MODULES
386 help 387 help
387 Kprobes allows you to trap at almost any kernel address and 388 Kprobes allows you to trap at almost any kernel address and
388 execute a callback function. register_kprobe() establishes 389 execute a callback function. register_kprobe() establishes
diff --git a/arch/sparc64/boot/.gitignore b/arch/sparc64/boot/.gitignore
new file mode 100644
index 000000000000..36356f9d498e
--- /dev/null
+++ b/arch/sparc64/boot/.gitignore
@@ -0,0 +1,4 @@
1image
2tftpboot.img
3vmlinux.aout
4piggyback
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig
index 9ceddad0fb49..069d49777b2a 100644
--- a/arch/sparc64/defconfig
+++ b/arch/sparc64/defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.16-rc1 3# Linux kernel version: 2.6.16-rc2
4# Wed Jan 18 13:41:02 2006 4# Tue Feb 7 17:47:18 2006
5# 5#
6CONFIG_SPARC=y 6CONFIG_SPARC=y
7CONFIG_SPARC64=y 7CONFIG_SPARC64=y
@@ -23,7 +23,6 @@ CONFIG_HZ=250
23# Code maturity level options 23# Code maturity level options
24# 24#
25CONFIG_EXPERIMENTAL=y 25CONFIG_EXPERIMENTAL=y
26CONFIG_CLEAN_COMPILE=y
27CONFIG_BROKEN_ON_SMP=y 26CONFIG_BROKEN_ON_SMP=y
28CONFIG_INIT_ENV_ARG_LIMIT=32 27CONFIG_INIT_ENV_ARG_LIMIT=32
29 28
@@ -31,7 +30,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
31# General setup 30# General setup
32# 31#
33CONFIG_LOCALVERSION="" 32CONFIG_LOCALVERSION=""
34CONFIG_LOCALVERSION_AUTO=y 33# CONFIG_LOCALVERSION_AUTO is not set
35CONFIG_SWAP=y 34CONFIG_SWAP=y
36CONFIG_SYSVIPC=y 35CONFIG_SYSVIPC=y
37CONFIG_POSIX_MQUEUE=y 36CONFIG_POSIX_MQUEUE=y
@@ -155,6 +154,7 @@ CONFIG_NET=y
155# 154#
156# Networking options 155# Networking options
157# 156#
157# CONFIG_NETDEBUG is not set
158CONFIG_PACKET=y 158CONFIG_PACKET=y
159CONFIG_PACKET_MMAP=y 159CONFIG_PACKET_MMAP=y
160CONFIG_UNIX=y 160CONFIG_UNIX=y
@@ -224,6 +224,11 @@ CONFIG_IP_DCCP_TFRC_LIB=m
224# SCTP Configuration (EXPERIMENTAL) 224# SCTP Configuration (EXPERIMENTAL)
225# 225#
226# CONFIG_IP_SCTP is not set 226# CONFIG_IP_SCTP is not set
227
228#
229# TIPC Configuration (EXPERIMENTAL)
230#
231# CONFIG_TIPC is not set
227# CONFIG_ATM is not set 232# CONFIG_ATM is not set
228# CONFIG_BRIDGE is not set 233# CONFIG_BRIDGE is not set
229CONFIG_VLAN_8021Q=m 234CONFIG_VLAN_8021Q=m
@@ -233,11 +238,6 @@ CONFIG_VLAN_8021Q=m
233# CONFIG_ATALK is not set 238# CONFIG_ATALK is not set
234# CONFIG_X25 is not set 239# CONFIG_X25 is not set
235# CONFIG_LAPB is not set 240# CONFIG_LAPB is not set
236
237#
238# TIPC Configuration (EXPERIMENTAL)
239#
240# CONFIG_TIPC is not set
241# CONFIG_NET_DIVERT is not set 241# CONFIG_NET_DIVERT is not set
242# CONFIG_ECONET is not set 242# CONFIG_ECONET is not set
243# CONFIG_WAN_ROUTER is not set 243# CONFIG_WAN_ROUTER is not set
@@ -657,6 +657,7 @@ CONFIG_SERIAL_SUNSU_CONSOLE=y
657CONFIG_SERIAL_SUNSAB=m 657CONFIG_SERIAL_SUNSAB=m
658CONFIG_SERIAL_CORE=y 658CONFIG_SERIAL_CORE=y
659CONFIG_SERIAL_CORE_CONSOLE=y 659CONFIG_SERIAL_CORE_CONSOLE=y
660# CONFIG_SERIAL_JSM is not set
660CONFIG_UNIX98_PTYS=y 661CONFIG_UNIX98_PTYS=y
661# CONFIG_LEGACY_PTYS is not set 662# CONFIG_LEGACY_PTYS is not set
662 663
@@ -765,6 +766,7 @@ CONFIG_HWMON=y
765# CONFIG_SENSORS_ASB100 is not set 766# CONFIG_SENSORS_ASB100 is not set
766# CONFIG_SENSORS_ATXP1 is not set 767# CONFIG_SENSORS_ATXP1 is not set
767# CONFIG_SENSORS_DS1621 is not set 768# CONFIG_SENSORS_DS1621 is not set
769# CONFIG_SENSORS_F71805F is not set
768# CONFIG_SENSORS_FSCHER is not set 770# CONFIG_SENSORS_FSCHER is not set
769# CONFIG_SENSORS_FSCPOS is not set 771# CONFIG_SENSORS_FSCPOS is not set
770# CONFIG_SENSORS_GL518SM is not set 772# CONFIG_SENSORS_GL518SM is not set
@@ -1118,6 +1120,10 @@ CONFIG_USB_HIDDEV=y
1118# 1120#
1119 1121
1120# 1122#
1123# EDAC - error detection and reporting (RAS)
1124#
1125
1126#
1121# Misc Linux/SPARC drivers 1127# Misc Linux/SPARC drivers
1122# 1128#
1123CONFIG_SUN_OPENPROMIO=m 1129CONFIG_SUN_OPENPROMIO=m
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S
index e50e56e4ab61..a73553ae7e53 100644
--- a/arch/sparc64/kernel/entry.S
+++ b/arch/sparc64/kernel/entry.S
@@ -25,7 +25,7 @@
25 25
26#define curptr g6 26#define curptr g6
27 27
28#define NR_SYSCALLS 284 /* Each OS is different... */ 28#define NR_SYSCALLS 300 /* Each OS is different... */
29 29
30 .text 30 .text
31 .align 32 31 .align 32
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c
index 054461e6946d..158bd31e15b7 100644
--- a/arch/sparc64/kernel/setup.c
+++ b/arch/sparc64/kernel/setup.c
@@ -542,6 +542,8 @@ void __init setup_arch(char **cmdline_p)
542 } 542 }
543#endif 543#endif
544 544
545 smp_setup_cpu_possible_map();
546
545 paging_init(); 547 paging_init();
546} 548}
547 549
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index 1fb6323e65a4..1f7ad8a69052 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -1079,18 +1079,12 @@ int setup_profiling_timer(unsigned int multiplier)
1079 return 0; 1079 return 0;
1080} 1080}
1081 1081
1082/* Constrain the number of cpus to max_cpus. */
1082void __init smp_prepare_cpus(unsigned int max_cpus) 1083void __init smp_prepare_cpus(unsigned int max_cpus)
1083{ 1084{
1084 int instance, mid;
1085
1086 instance = 0;
1087 while (!cpu_find_by_instance(instance, NULL, &mid)) {
1088 if (mid < max_cpus)
1089 cpu_set(mid, phys_cpu_present_map);
1090 instance++;
1091 }
1092
1093 if (num_possible_cpus() > max_cpus) { 1085 if (num_possible_cpus() > max_cpus) {
1086 int instance, mid;
1087
1094 instance = 0; 1088 instance = 0;
1095 while (!cpu_find_by_instance(instance, NULL, &mid)) { 1089 while (!cpu_find_by_instance(instance, NULL, &mid)) {
1096 if (mid != boot_cpu_id) { 1090 if (mid != boot_cpu_id) {
@@ -1105,6 +1099,22 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
1105 smp_store_cpu_info(boot_cpu_id); 1099 smp_store_cpu_info(boot_cpu_id);
1106} 1100}
1107 1101
1102/* Set this up early so that things like the scheduler can init
1103 * properly. We use the same cpu mask for both the present and
1104 * possible cpu map.
1105 */
1106void __init smp_setup_cpu_possible_map(void)
1107{
1108 int instance, mid;
1109
1110 instance = 0;
1111 while (!cpu_find_by_instance(instance, NULL, &mid)) {
1112 if (mid < NR_CPUS)
1113 cpu_set(mid, phys_cpu_present_map);
1114 instance++;
1115 }
1116}
1117
1108void __devinit smp_prepare_boot_cpu(void) 1118void __devinit smp_prepare_boot_cpu(void)
1109{ 1119{
1110 if (hard_smp_processor_id() >= NR_CPUS) { 1120 if (hard_smp_processor_id() >= NR_CPUS) {
diff --git a/arch/sparc64/kernel/sys32.S b/arch/sparc64/kernel/sys32.S
index 9cd272ac3ac1..c4a1cef4b1e5 100644
--- a/arch/sparc64/kernel/sys32.S
+++ b/arch/sparc64/kernel/sys32.S
@@ -84,7 +84,6 @@ SIGN2(sys32_fadvise64_64, compat_sys_fadvise64_64, %o0, %o5)
84SIGN2(sys32_bdflush, sys_bdflush, %o0, %o1) 84SIGN2(sys32_bdflush, sys_bdflush, %o0, %o1)
85SIGN1(sys32_mlockall, sys_mlockall, %o0) 85SIGN1(sys32_mlockall, sys_mlockall, %o0)
86SIGN1(sys32_nfsservctl, compat_sys_nfsservctl, %o0) 86SIGN1(sys32_nfsservctl, compat_sys_nfsservctl, %o0)
87SIGN1(sys32_clock_settime, compat_sys_clock_settime, %o1)
88SIGN1(sys32_clock_nanosleep, compat_sys_clock_nanosleep, %o1) 87SIGN1(sys32_clock_nanosleep, compat_sys_clock_nanosleep, %o1)
89SIGN1(sys32_timer_settime, compat_sys_timer_settime, %o1) 88SIGN1(sys32_timer_settime, compat_sys_timer_settime, %o1)
90SIGN1(sys32_io_submit, compat_sys_io_submit, %o1) 89SIGN1(sys32_io_submit, compat_sys_io_submit, %o1)
@@ -319,7 +318,7 @@ do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int)
319 nop 318 nop
320 nop 319 nop
321 320
322 .section __ex_table 321 .section __ex_table,"a"
323 .align 4 322 .align 4
324 .word 1b, __retl_efault, 2b, __retl_efault 323 .word 1b, __retl_efault, 2b, __retl_efault
325 .word 3b, __retl_efault, 4b, __retl_efault 324 .word 3b, __retl_efault, 4b, __retl_efault
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c
index 9264ccbaaafa..417727bd87ba 100644
--- a/arch/sparc64/kernel/sys_sparc32.c
+++ b/arch/sparc64/kernel/sys_sparc32.c
@@ -428,6 +428,27 @@ asmlinkage long compat_sys_fstat64(unsigned int fd,
428 return error; 428 return error;
429} 429}
430 430
431asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename,
432 struct compat_stat64 __user * statbuf, int flag)
433{
434 struct kstat stat;
435 int error = -EINVAL;
436
437 if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
438 goto out;
439
440 if (flag & AT_SYMLINK_NOFOLLOW)
441 error = vfs_lstat_fd(dfd, filename, &stat);
442 else
443 error = vfs_stat_fd(dfd, filename, &stat);
444
445 if (!error)
446 error = cp_compat_stat64(&stat, statbuf);
447
448out:
449 return error;
450}
451
431asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) 452asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2)
432{ 453{
433 return sys_sysfs(option, arg1, arg2); 454 return sys_sysfs(option, arg1, arg2);
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S
index bf0fc5bfbfbe..c3adb7ac167d 100644
--- a/arch/sparc64/kernel/systbls.S
+++ b/arch/sparc64/kernel/systbls.S
@@ -71,15 +71,15 @@ sys_call_table32:
71/*240*/ .word sys_munlockall, sys32_sched_setparam, sys32_sched_getparam, sys32_sched_setscheduler, sys32_sched_getscheduler 71/*240*/ .word sys_munlockall, sys32_sched_setparam, sys32_sched_getparam, sys32_sched_setscheduler, sys32_sched_getscheduler
72 .word sys_sched_yield, sys32_sched_get_priority_max, sys32_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep 72 .word sys_sched_yield, sys32_sched_get_priority_max, sys32_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep
73/*250*/ .word sys32_mremap, sys32_sysctl, sys32_getsid, sys_fdatasync, sys32_nfsservctl 73/*250*/ .word sys32_mremap, sys32_sysctl, sys32_getsid, sys_fdatasync, sys32_nfsservctl
74 .word sys_ni_syscall, sys32_clock_settime, compat_sys_clock_gettime, compat_sys_clock_getres, sys32_clock_nanosleep 74 .word sys_ni_syscall, compat_sys_clock_settime, compat_sys_clock_gettime, compat_sys_clock_getres, sys32_clock_nanosleep
75/*260*/ .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, sys32_timer_settime, compat_sys_timer_gettime, sys_timer_getoverrun 75/*260*/ .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, sys32_timer_settime, compat_sys_timer_gettime, sys_timer_getoverrun
76 .word sys_timer_delete, compat_sys_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy 76 .word sys_timer_delete, compat_sys_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy
77/*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink 77/*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
78 .word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid 78 .word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
79/*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat 79/*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat
80 .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_newfstatat 80 .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64
81/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat 81/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
82 .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll 82 .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare
83 83
84#endif /* CONFIG_COMPAT */ 84#endif /* CONFIG_COMPAT */
85 85
@@ -146,9 +146,9 @@ sys_call_table:
146/*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink 146/*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
147 .word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid 147 .word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
148/*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat 148/*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
149 .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, compat_sys_newfstatat 149 .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
150/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat 150/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
151 .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll 151 .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
152 152
153#if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ 153#if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \
154 defined(CONFIG_SOLARIS_EMUL_MODULE) 154 defined(CONFIG_SOLARIS_EMUL_MODULE)
@@ -261,4 +261,5 @@ sunos_sys_table:
261/*290*/ .word sunos_nosys, sunos_nosys, sunos_nosys 261/*290*/ .word sunos_nosys, sunos_nosys, sunos_nosys
262 .word sunos_nosys, sunos_nosys, sunos_nosys 262 .word sunos_nosys, sunos_nosys, sunos_nosys
263 .word sunos_nosys, sunos_nosys, sunos_nosys 263 .word sunos_nosys, sunos_nosys, sunos_nosys
264 .word sunos_nosys
264#endif 265#endif
diff --git a/arch/sparc64/kernel/una_asm.S b/arch/sparc64/kernel/una_asm.S
index 1f5b5b708ce7..be183fe41443 100644
--- a/arch/sparc64/kernel/una_asm.S
+++ b/arch/sparc64/kernel/una_asm.S
@@ -47,7 +47,7 @@ __do_int_store:
47 mov 0, %o0 47 mov 0, %o0
48 .size __do_int_store, .-__do_int_store 48 .size __do_int_store, .-__do_int_store
49 49
50 .section __ex_table 50 .section __ex_table,"a"
51 .word 4b, __retl_efault 51 .word 4b, __retl_efault
52 .word 5b, __retl_efault 52 .word 5b, __retl_efault
53 .word 6b, __retl_efault 53 .word 6b, __retl_efault
@@ -129,7 +129,7 @@ do_int_load:
129 mov 0, %o0 129 mov 0, %o0
130 .size __do_int_load, .-__do_int_load 130 .size __do_int_load, .-__do_int_load
131 131
132 .section __ex_table 132 .section __ex_table,"a"
133 .word 4b, __retl_efault 133 .word 4b, __retl_efault
134 .word 5b, __retl_efault 134 .word 5b, __retl_efault
135 .word 6b, __retl_efault 135 .word 6b, __retl_efault
diff --git a/arch/sparc64/lib/U1copy_from_user.S b/arch/sparc64/lib/U1copy_from_user.S
index 93146a81e2d3..3192b0bf4fab 100644
--- a/arch/sparc64/lib/U1copy_from_user.S
+++ b/arch/sparc64/lib/U1copy_from_user.S
@@ -9,7 +9,7 @@
9 .align 4; \ 9 .align 4; \
1099: retl; \ 1099: retl; \
11 mov 1, %o0; \ 11 mov 1, %o0; \
12 .section __ex_table; \ 12 .section __ex_table,"a";\
13 .align 4; \ 13 .align 4; \
14 .word 98b, 99b; \ 14 .word 98b, 99b; \
15 .text; \ 15 .text; \
diff --git a/arch/sparc64/lib/U1copy_to_user.S b/arch/sparc64/lib/U1copy_to_user.S
index 1fccc521e2bd..d1210ffb0b82 100644
--- a/arch/sparc64/lib/U1copy_to_user.S
+++ b/arch/sparc64/lib/U1copy_to_user.S
@@ -9,7 +9,7 @@
9 .align 4; \ 9 .align 4; \
1099: retl; \ 1099: retl; \
11 mov 1, %o0; \ 11 mov 1, %o0; \
12 .section __ex_table; \ 12 .section __ex_table,"a";\
13 .align 4; \ 13 .align 4; \
14 .word 98b, 99b; \ 14 .word 98b, 99b; \
15 .text; \ 15 .text; \
diff --git a/arch/sparc64/lib/U3copy_from_user.S b/arch/sparc64/lib/U3copy_from_user.S
index df600b667e48..f5bfc8d9d216 100644
--- a/arch/sparc64/lib/U3copy_from_user.S
+++ b/arch/sparc64/lib/U3copy_from_user.S
@@ -9,7 +9,7 @@
9 .align 4; \ 9 .align 4; \
1099: retl; \ 1099: retl; \
11 mov 1, %o0; \ 11 mov 1, %o0; \
12 .section __ex_table; \ 12 .section __ex_table,"a";\
13 .align 4; \ 13 .align 4; \
14 .word 98b, 99b; \ 14 .word 98b, 99b; \
15 .text; \ 15 .text; \
diff --git a/arch/sparc64/lib/U3copy_to_user.S b/arch/sparc64/lib/U3copy_to_user.S
index f337f22ed82e..2334f111bb0c 100644
--- a/arch/sparc64/lib/U3copy_to_user.S
+++ b/arch/sparc64/lib/U3copy_to_user.S
@@ -9,7 +9,7 @@
9 .align 4; \ 9 .align 4; \
1099: retl; \ 1099: retl; \
11 mov 1, %o0; \ 11 mov 1, %o0; \
12 .section __ex_table; \ 12 .section __ex_table,"a";\
13 .align 4; \ 13 .align 4; \
14 .word 98b, 99b; \ 14 .word 98b, 99b; \
15 .text; \ 15 .text; \
diff --git a/arch/sparc64/lib/bzero.S b/arch/sparc64/lib/bzero.S
index 21a933ffb7c2..1d2abcfa4e52 100644
--- a/arch/sparc64/lib/bzero.S
+++ b/arch/sparc64/lib/bzero.S
@@ -92,7 +92,7 @@ __bzero_done:
92 .align 4; \ 92 .align 4; \
9399: retl; \ 9399: retl; \
94 mov %o1, %o0; \ 94 mov %o1, %o0; \
95 .section __ex_table; \ 95 .section __ex_table,"a";\
96 .align 4; \ 96 .align 4; \
97 .word 98b, 99b; \ 97 .word 98b, 99b; \
98 .text; \ 98 .text; \
diff --git a/arch/sparc64/lib/copy_in_user.S b/arch/sparc64/lib/copy_in_user.S
index 816076c0bc06..650af3f21f78 100644
--- a/arch/sparc64/lib/copy_in_user.S
+++ b/arch/sparc64/lib/copy_in_user.S
@@ -13,7 +13,7 @@
13 .align 4; \ 13 .align 4; \
1499: retl; \ 1499: retl; \
15 mov 1, %o0; \ 15 mov 1, %o0; \
16 .section __ex_table; \ 16 .section __ex_table,"a";\
17 .align 4; \ 17 .align 4; \
18 .word 98b, 99b; \ 18 .word 98b, 99b; \
19 .text; \ 19 .text; \
diff --git a/arch/sparc64/lib/csum_copy_from_user.S b/arch/sparc64/lib/csum_copy_from_user.S
index 817ebdae39f8..a22eddbe5dba 100644
--- a/arch/sparc64/lib/csum_copy_from_user.S
+++ b/arch/sparc64/lib/csum_copy_from_user.S
@@ -9,7 +9,7 @@
9 .align 4; \ 9 .align 4; \
1099: retl; \ 1099: retl; \
11 mov -1, %o0; \ 11 mov -1, %o0; \
12 .section __ex_table; \ 12 .section __ex_table,"a";\
13 .align 4; \ 13 .align 4; \
14 .word 98b, 99b; \ 14 .word 98b, 99b; \
15 .text; \ 15 .text; \
diff --git a/arch/sparc64/lib/csum_copy_to_user.S b/arch/sparc64/lib/csum_copy_to_user.S
index c2f9463ea1e2..d5b12f441f02 100644
--- a/arch/sparc64/lib/csum_copy_to_user.S
+++ b/arch/sparc64/lib/csum_copy_to_user.S
@@ -9,7 +9,7 @@
9 .align 4; \ 9 .align 4; \
1099: retl; \ 1099: retl; \
11 mov -1, %o0; \ 11 mov -1, %o0; \
12 .section __ex_table; \ 12 .section __ex_table,"a";\
13 .align 4; \ 13 .align 4; \
14 .word 98b, 99b; \ 14 .word 98b, 99b; \
15 .text; \ 15 .text; \
diff --git a/arch/sparc64/lib/strlen_user.S b/arch/sparc64/lib/strlen_user.S
index 9ed54ba14fc6..114ed111e251 100644
--- a/arch/sparc64/lib/strlen_user.S
+++ b/arch/sparc64/lib/strlen_user.S
@@ -85,7 +85,7 @@ __strnlen_user:
85 retl 85 retl
86 clr %o0 86 clr %o0
87 87
88 .section __ex_table,#alloc 88 .section __ex_table,"a"
89 .align 4 89 .align 4
90 90
91 .word 10b, 30b 91 .word 10b, 30b
diff --git a/arch/sparc64/lib/strncpy_from_user.S b/arch/sparc64/lib/strncpy_from_user.S
index e1264650ca7a..b2f499f79427 100644
--- a/arch/sparc64/lib/strncpy_from_user.S
+++ b/arch/sparc64/lib/strncpy_from_user.S
@@ -125,7 +125,7 @@ __strncpy_from_user:
125 add %o2, %o3, %o0 125 add %o2, %o3, %o0
126 .size __strncpy_from_user, .-__strncpy_from_user 126 .size __strncpy_from_user, .-__strncpy_from_user
127 127
128 .section __ex_table,#alloc 128 .section __ex_table,"a"
129 .align 4 129 .align 4
130 .word 60b, __retl_efault 130 .word 60b, __retl_efault
131 .word 61b, __retl_efault 131 .word 61b, __retl_efault
diff --git a/arch/sparc64/solaris/entry64.S b/arch/sparc64/solaris/entry64.S
index eb314ed23cdb..f170324e8bf2 100644
--- a/arch/sparc64/solaris/entry64.S
+++ b/arch/sparc64/solaris/entry64.S
@@ -217,7 +217,7 @@ solaris_unimplemented:
217 ba,pt %xcc, ret_from_solaris 217 ba,pt %xcc, ret_from_solaris
218 nop 218 nop
219 219
220 .section __ex_table,#alloc 220 .section __ex_table,"a"
221 .align 4 221 .align 4
222 .word exen, exenf 222 .word exen, exenf
223 223
diff --git a/arch/sparc64/solaris/systbl.S b/arch/sparc64/solaris/systbl.S
index d25667eeae10..7043ca18caf9 100644
--- a/arch/sparc64/solaris/systbl.S
+++ b/arch/sparc64/solaris/systbl.S
@@ -283,32 +283,3 @@ solaris_sys_table:
283 .word solaris_unimplemented /* 253 */ 283 .word solaris_unimplemented /* 253 */
284 .word solaris_unimplemented /* 254 */ 284 .word solaris_unimplemented /* 254 */
285 .word solaris_unimplemented /* 255 */ 285 .word solaris_unimplemented /* 255 */
286 .word solaris_unimplemented /* 256 */
287 .word solaris_unimplemented /* 257 */
288 .word solaris_unimplemented /* 258 */
289 .word solaris_unimplemented /* 259 */
290 .word solaris_unimplemented /* 260 */
291 .word solaris_unimplemented /* 261 */
292 .word solaris_unimplemented /* 262 */
293 .word solaris_unimplemented /* 263 */
294 .word solaris_unimplemented /* 264 */
295 .word solaris_unimplemented /* 265 */
296 .word solaris_unimplemented /* 266 */
297 .word solaris_unimplemented /* 267 */
298 .word solaris_unimplemented /* 268 */
299 .word solaris_unimplemented /* 269 */
300 .word solaris_unimplemented /* 270 */
301 .word solaris_unimplemented /* 271 */
302 .word solaris_unimplemented /* 272 */
303 .word solaris_unimplemented /* 273 */
304 .word solaris_unimplemented /* 274 */
305 .word solaris_unimplemented /* 275 */
306 .word solaris_unimplemented /* 276 */
307 .word solaris_unimplemented /* 277 */
308 .word solaris_unimplemented /* 278 */
309 .word solaris_unimplemented /* 279 */
310 .word solaris_unimplemented /* 280 */
311 .word solaris_unimplemented /* 281 */
312 .word solaris_unimplemented /* 282 */
313 .word solaris_unimplemented /* 283 */
314
diff --git a/arch/um/Makefile b/arch/um/Makefile
index 6430a6383853..c58b657f0097 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -47,13 +47,16 @@ ARCH_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include
47endif 47endif
48SYS_DIR := $(ARCH_DIR)/include/sysdep-$(SUBARCH) 48SYS_DIR := $(ARCH_DIR)/include/sysdep-$(SUBARCH)
49 49
50# -Dvmap=kernel_vmap affects everything, and prevents anything from 50# -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so
51# referencing the libpcap.o symbol so named. 51# named - it's a common symbol in libpcap, so we get a binary which crashes.
52# 52#
53# Same things for in6addr_loopback - found in libc. 53# Same things for in6addr_loopback and mktime - found in libc. For these two we
54# only get link-time error, luckily.
55#
56# These apply to USER_CFLAGS to.
54 57
55CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \ 58CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \
56 $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ 59 $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \
57 -Din6addr_loopback=kernel_in6addr_loopback 60 -Din6addr_loopback=kernel_in6addr_loopback
58 61
59AFLAGS += $(ARCH_INCLUDE) 62AFLAGS += $(ARCH_INCLUDE)
@@ -66,6 +69,7 @@ USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \
66# kernel_errno to separate them from the libc errno. This allows -fno-common 69# kernel_errno to separate them from the libc errno. This allows -fno-common
67# in CFLAGS. Otherwise, it would cause ld to complain about the two different 70# in CFLAGS. Otherwise, it would cause ld to complain about the two different
68# errnos. 71# errnos.
72# These apply to kernelspace only.
69 73
70CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ 74CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \
71 -Dmktime=kernel_mktime 75 -Dmktime=kernel_mktime
@@ -168,10 +172,13 @@ else
168 $(Q)cd $(TOPDIR)/include/asm-um && ln -sf ../asm-$(SUBARCH) arch 172 $(Q)cd $(TOPDIR)/include/asm-um && ln -sf ../asm-$(SUBARCH) arch
169endif 173endif
170 174
171$(ARCH_DIR)/include/sysdep: 175$(objtree)/$(ARCH_DIR)/include:
176 @echo ' MKDIR $@'
177 $(Q)mkdir -p $@
178
179$(ARCH_DIR)/include/sysdep: $(objtree)/$(ARCH_DIR)/include
172 @echo ' SYMLINK $@' 180 @echo ' SYMLINK $@'
173ifneq ($(KBUILD_SRC),) 181ifneq ($(KBUILD_SRC),)
174 $(Q)mkdir -p $(ARCH_DIR)/include
175 $(Q)ln -fsn $(srctree)/$(ARCH_DIR)/include/sysdep-$(SUBARCH) $(ARCH_DIR)/include/sysdep 182 $(Q)ln -fsn $(srctree)/$(ARCH_DIR)/include/sysdep-$(SUBARCH) $(ARCH_DIR)/include/sysdep
176else 183else
177 $(Q)cd $(ARCH_DIR)/include && ln -sf sysdep-$(SUBARCH) sysdep 184 $(Q)cd $(ARCH_DIR)/include && ln -sf sysdep-$(SUBARCH) sysdep
@@ -214,7 +221,7 @@ $(ARCH_DIR)/include/user_constants.h: $(ARCH_DIR)/user-offsets.s
214 221
215CLEAN_FILES += $(ARCH_DIR)/user-offsets.s 222CLEAN_FILES += $(ARCH_DIR)/user-offsets.s
216 223
217$(ARCH_DIR)/include/kern_constants.h: 224$(ARCH_DIR)/include/kern_constants.h: $(objtree)/$(ARCH_DIR)/include
218 @echo ' SYMLINK $@' 225 @echo ' SYMLINK $@'
219 $(Q) ln -sf ../../../include/asm-um/asm-offsets.h $@ 226 $(Q) ln -sf ../../../include/asm-um/asm-offsets.h $@
220 227
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c
index ab0d0b170816..7218c754505b 100644
--- a/arch/um/drivers/chan_kern.c
+++ b/arch/um/drivers/chan_kern.c
@@ -403,7 +403,7 @@ int chan_window_size(struct list_head *chans, unsigned short *rows_out,
403 return 0; 403 return 0;
404} 404}
405 405
406void free_one_chan(struct chan *chan, int delay_free_irq) 406static void free_one_chan(struct chan *chan, int delay_free_irq)
407{ 407{
408 list_del(&chan->list); 408 list_del(&chan->list);
409 409
@@ -416,7 +416,7 @@ void free_one_chan(struct chan *chan, int delay_free_irq)
416 kfree(chan); 416 kfree(chan);
417} 417}
418 418
419void free_chan(struct list_head *chans, int delay_free_irq) 419static void free_chan(struct list_head *chans, int delay_free_irq)
420{ 420{
421 struct list_head *ele, *next; 421 struct list_head *ele, *next;
422 struct chan *chan; 422 struct chan *chan;
@@ -497,7 +497,7 @@ struct chan_type {
497 struct chan_ops *ops; 497 struct chan_ops *ops;
498}; 498};
499 499
500struct chan_type chan_table[] = { 500static struct chan_type chan_table[] = {
501 { "fd", &fd_ops }, 501 { "fd", &fd_ops },
502 502
503#ifdef CONFIG_NULL_CHAN 503#ifdef CONFIG_NULL_CHAN
diff --git a/arch/um/drivers/chan_user.c b/arch/um/drivers/chan_user.c
index 5d50d4a44abf..2f880cb167a5 100644
--- a/arch/um/drivers/chan_user.c
+++ b/arch/um/drivers/chan_user.c
@@ -9,6 +9,7 @@
9#include <termios.h> 9#include <termios.h>
10#include <string.h> 10#include <string.h>
11#include <signal.h> 11#include <signal.h>
12#include <sched.h>
12#include <sys/stat.h> 13#include <sys/stat.h>
13#include <sys/ioctl.h> 14#include <sys/ioctl.h>
14#include <sys/socket.h> 15#include <sys/socket.h>
@@ -73,7 +74,6 @@ static void winch_handler(int sig)
73struct winch_data { 74struct winch_data {
74 int pty_fd; 75 int pty_fd;
75 int pipe_fd; 76 int pipe_fd;
76 int close_me;
77}; 77};
78 78
79static int winch_thread(void *arg) 79static int winch_thread(void *arg)
@@ -84,7 +84,6 @@ static int winch_thread(void *arg)
84 int count, err; 84 int count, err;
85 char c = 1; 85 char c = 1;
86 86
87 os_close_file(data->close_me);
88 pty_fd = data->pty_fd; 87 pty_fd = data->pty_fd;
89 pipe_fd = data->pipe_fd; 88 pipe_fd = data->pipe_fd;
90 count = os_write_file(pipe_fd, &c, sizeof(c)); 89 count = os_write_file(pipe_fd, &c, sizeof(c));
@@ -153,15 +152,16 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out)
153 } 152 }
154 153
155 data = ((struct winch_data) { .pty_fd = fd, 154 data = ((struct winch_data) { .pty_fd = fd,
156 .pipe_fd = fds[1], 155 .pipe_fd = fds[1] } );
157 .close_me = fds[0] } ); 156 /* CLONE_FILES so this thread doesn't hold open files which are open
158 err = run_helper_thread(winch_thread, &data, 0, &stack, 0); 157 * now, but later closed. This is a problem with /dev/net/tun.
158 */
159 err = run_helper_thread(winch_thread, &data, CLONE_FILES, &stack, 0);
159 if(err < 0){ 160 if(err < 0){
160 printk("fork of winch_thread failed - errno = %d\n", errno); 161 printk("fork of winch_thread failed - errno = %d\n", errno);
161 goto out_close; 162 goto out_close;
162 } 163 }
163 164
164 os_close_file(fds[1]);
165 *fd_out = fds[0]; 165 *fd_out = fds[0];
166 n = os_read_file(fds[0], &c, sizeof(c)); 166 n = os_read_file(fds[0], &c, sizeof(c));
167 if(n != sizeof(c)){ 167 if(n != sizeof(c)){
@@ -169,13 +169,12 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out)
169 printk("read failed, err = %d\n", -n); 169 printk("read failed, err = %d\n", -n);
170 printk("fd %d will not support SIGWINCH\n", fd); 170 printk("fd %d will not support SIGWINCH\n", fd);
171 err = -EINVAL; 171 err = -EINVAL;
172 goto out_close1; 172 goto out_close;
173 } 173 }
174 return err ; 174 return err ;
175 175
176 out_close: 176 out_close:
177 os_close_file(fds[1]); 177 os_close_file(fds[1]);
178 out_close1:
179 os_close_file(fds[0]); 178 os_close_file(fds[0]);
180 out: 179 out:
181 return err; 180 return err;
diff --git a/arch/um/drivers/cow.h b/arch/um/drivers/cow.h
index dc36b222100b..04e3958266e0 100644
--- a/arch/um/drivers/cow.h
+++ b/arch/um/drivers/cow.h
@@ -46,7 +46,7 @@ extern int file_reader(__u64 offset, char *buf, int len, void *arg);
46extern int read_cow_header(int (*reader)(__u64, char *, int, void *), 46extern int read_cow_header(int (*reader)(__u64, char *, int, void *),
47 void *arg, __u32 *version_out, 47 void *arg, __u32 *version_out,
48 char **backing_file_out, time_t *mtime_out, 48 char **backing_file_out, time_t *mtime_out,
49 unsigned long long *size_out, int *sectorsize_out, 49 __u64 *size_out, int *sectorsize_out,
50 __u32 *align_out, int *bitmap_offset_out); 50 __u32 *align_out, int *bitmap_offset_out);
51 51
52extern int write_cow_header(char *cow_file, int fd, char *backing_file, 52extern int write_cow_header(char *cow_file, int fd, char *backing_file,
diff --git a/arch/um/drivers/cow_sys.h b/arch/um/drivers/cow_sys.h
index c83fc5d68936..94de4ead4f7a 100644
--- a/arch/um/drivers/cow_sys.h
+++ b/arch/um/drivers/cow_sys.h
@@ -23,17 +23,17 @@ static inline char *cow_strdup(char *str)
23 return(uml_strdup(str)); 23 return(uml_strdup(str));
24} 24}
25 25
26static inline int cow_seek_file(int fd, unsigned long long offset) 26static inline int cow_seek_file(int fd, __u64 offset)
27{ 27{
28 return(os_seek_file(fd, offset)); 28 return(os_seek_file(fd, offset));
29} 29}
30 30
31static inline int cow_file_size(char *file, unsigned long long *size_out) 31static inline int cow_file_size(char *file, __u64 *size_out)
32{ 32{
33 return(os_file_size(file, size_out)); 33 return(os_file_size(file, size_out));
34} 34}
35 35
36static inline int cow_write_file(int fd, char *buf, int size) 36static inline int cow_write_file(int fd, void *buf, int size)
37{ 37{
38 return(os_write_file(fd, buf, size)); 38 return(os_write_file(fd, buf, size));
39} 39}
diff --git a/arch/um/drivers/cow_user.c b/arch/um/drivers/cow_user.c
index fbe2217db5dd..61951b721268 100644
--- a/arch/um/drivers/cow_user.c
+++ b/arch/um/drivers/cow_user.c
@@ -176,7 +176,7 @@ int write_cow_header(char *cow_file, int fd, char *backing_file,
176 err = -ENOMEM; 176 err = -ENOMEM;
177 header = cow_malloc(sizeof(*header)); 177 header = cow_malloc(sizeof(*header));
178 if(header == NULL){ 178 if(header == NULL){
179 cow_printf("Failed to allocate COW V3 header\n"); 179 cow_printf("write_cow_header - failed to allocate COW V3 header\n");
180 goto out; 180 goto out;
181 } 181 }
182 header->magic = htonl(COW_MAGIC); 182 header->magic = htonl(COW_MAGIC);
@@ -196,15 +196,17 @@ int write_cow_header(char *cow_file, int fd, char *backing_file,
196 196
197 err = os_file_modtime(header->backing_file, &modtime); 197 err = os_file_modtime(header->backing_file, &modtime);
198 if(err < 0){ 198 if(err < 0){
199 cow_printf("Backing file '%s' mtime request failed, " 199 cow_printf("write_cow_header - backing file '%s' mtime "
200 "err = %d\n", header->backing_file, -err); 200 "request failed, err = %d\n", header->backing_file,
201 -err);
201 goto out_free; 202 goto out_free;
202 } 203 }
203 204
204 err = cow_file_size(header->backing_file, size); 205 err = cow_file_size(header->backing_file, size);
205 if(err < 0){ 206 if(err < 0){
206 cow_printf("Couldn't get size of backing file '%s', " 207 cow_printf("write_cow_header - couldn't get size of "
207 "err = %d\n", header->backing_file, -err); 208 "backing file '%s', err = %d\n",
209 header->backing_file, -err);
208 goto out_free; 210 goto out_free;
209 } 211 }
210 212
@@ -214,10 +216,11 @@ int write_cow_header(char *cow_file, int fd, char *backing_file,
214 header->alignment = htonl(alignment); 216 header->alignment = htonl(alignment);
215 header->cow_format = COW_BITMAP; 217 header->cow_format = COW_BITMAP;
216 218
217 err = os_write_file(fd, header, sizeof(*header)); 219 err = cow_write_file(fd, header, sizeof(*header));
218 if(err != sizeof(*header)){ 220 if(err != sizeof(*header)){
219 cow_printf("Write of header to new COW file '%s' failed, " 221 cow_printf("write_cow_header - write of header to "
220 "err = %d\n", cow_file, -err); 222 "new COW file '%s' failed, err = %d\n", cow_file,
223 -err);
221 goto out_free; 224 goto out_free;
222 } 225 }
223 err = 0; 226 err = 0;
@@ -299,7 +302,7 @@ int read_cow_header(int (*reader)(__u64, char *, int, void *), void *arg,
299 } 302 }
300 else if(version == 3){ 303 else if(version == 3){
301 if(n < sizeof(header->v3)){ 304 if(n < sizeof(header->v3)){
302 cow_printf("read_cow_header - failed to read V2 " 305 cow_printf("read_cow_header - failed to read V3 "
303 "header\n"); 306 "header\n");
304 goto out; 307 goto out;
305 } 308 }
@@ -359,7 +362,8 @@ int init_cow_file(int fd, char *cow_file, char *backing_file, int sectorsize,
359 if(err != sizeof(zero)){ 362 if(err != sizeof(zero)){
360 cow_printf("Write of bitmap to new COW file '%s' failed, " 363 cow_printf("Write of bitmap to new COW file '%s' failed, "
361 "err = %d\n", cow_file, -err); 364 "err = %d\n", cow_file, -err);
362 err = -EINVAL; 365 if (err >= 0)
366 err = -EINVAL;
363 goto out; 367 goto out;
364 } 368 }
365 369
diff --git a/arch/um/drivers/daemon_kern.c b/arch/um/drivers/daemon_kern.c
index 507e3cbac9d3..a61b7b46bc02 100644
--- a/arch/um/drivers/daemon_kern.c
+++ b/arch/um/drivers/daemon_kern.c
@@ -18,7 +18,7 @@ struct daemon_init {
18 char *ctl_sock; 18 char *ctl_sock;
19}; 19};
20 20
21void daemon_init(struct net_device *dev, void *data) 21static void daemon_init(struct net_device *dev, void *data)
22{ 22{
23 struct uml_net_private *pri; 23 struct uml_net_private *pri;
24 struct daemon_data *dpri; 24 struct daemon_data *dpri;
@@ -64,7 +64,7 @@ static struct net_kern_info daemon_kern_info = {
64 .write = daemon_write, 64 .write = daemon_write,
65}; 65};
66 66
67int daemon_setup(char *str, char **mac_out, void *data) 67static int daemon_setup(char *str, char **mac_out, void *data)
68{ 68{
69 struct daemon_init *init = data; 69 struct daemon_init *init = data;
70 char *remain; 70 char *remain;
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c
index 46ceb25a9959..6c2d4ccaf20f 100644
--- a/arch/um/drivers/line.c
+++ b/arch/um/drivers/line.c
@@ -714,7 +714,7 @@ struct winch {
714 struct tty_struct *tty; 714 struct tty_struct *tty;
715}; 715};
716 716
717irqreturn_t winch_interrupt(int irq, void *data, struct pt_regs *unused) 717static irqreturn_t winch_interrupt(int irq, void *data, struct pt_regs *unused)
718{ 718{
719 struct winch *winch = data; 719 struct winch *winch = data;
720 struct tty_struct *tty; 720 struct tty_struct *tty;
diff --git a/arch/um/drivers/mcast_kern.c b/arch/um/drivers/mcast_kern.c
index 217438cdef33..c9b078fba03e 100644
--- a/arch/um/drivers/mcast_kern.c
+++ b/arch/um/drivers/mcast_kern.c
@@ -26,7 +26,7 @@ struct mcast_init {
26 int ttl; 26 int ttl;
27}; 27};
28 28
29void mcast_init(struct net_device *dev, void *data) 29static void mcast_init(struct net_device *dev, void *data)
30{ 30{
31 struct uml_net_private *pri; 31 struct uml_net_private *pri;
32 struct mcast_data *dpri; 32 struct mcast_data *dpri;
@@ -40,7 +40,7 @@ void mcast_init(struct net_device *dev, void *data)
40 dpri->dev = dev; 40 dpri->dev = dev;
41 41
42 printk("mcast backend "); 42 printk("mcast backend ");
43 printk("multicast adddress: %s:%u, TTL:%u ", 43 printk("multicast address: %s:%u, TTL:%u ",
44 dpri->addr, dpri->port, dpri->ttl); 44 dpri->addr, dpri->port, dpri->ttl);
45 45
46 printk("\n"); 46 printk("\n");
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c
index e3d576567172..54388d10bcf9 100644
--- a/arch/um/drivers/mconsole_kern.c
+++ b/arch/um/drivers/mconsole_kern.c
@@ -273,7 +273,7 @@ void mconsole_proc(struct mc_request *req)
273 config <dev> - Query the configuration of a device \n\ 273 config <dev> - Query the configuration of a device \n\
274 remove <dev> - Remove a device from UML \n\ 274 remove <dev> - Remove a device from UML \n\
275 sysrq <letter> - Performs the SysRq action controlled by the letter \n\ 275 sysrq <letter> - Performs the SysRq action controlled by the letter \n\
276 cad - invoke the Ctl-Alt-Del handler \n\ 276 cad - invoke the Ctrl-Alt-Del handler \n\
277 stop - pause the UML; it will do nothing until it receives a 'go' \n\ 277 stop - pause the UML; it will do nothing until it receives a 'go' \n\
278 go - continue the UML after a 'stop' \n\ 278 go - continue the UML after a 'stop' \n\
279 log <string> - make UML enter <string> into the kernel log\n\ 279 log <string> - make UML enter <string> into the kernel log\n\
@@ -327,7 +327,7 @@ void mconsole_stop(struct mc_request *req)
327 327
328/* This list is populated by __initcall routines. */ 328/* This list is populated by __initcall routines. */
329 329
330LIST_HEAD(mconsole_devices); 330static LIST_HEAD(mconsole_devices);
331 331
332void mconsole_register_dev(struct mc_device *new) 332void mconsole_register_dev(struct mc_device *new)
333{ 333{
@@ -561,6 +561,8 @@ void mconsole_sysrq(struct mc_request *req)
561} 561}
562#endif 562#endif
563 563
564#ifdef CONFIG_MODE_SKAS
565
564static void stack_proc(void *arg) 566static void stack_proc(void *arg)
565{ 567{
566 struct task_struct *from = current, *to = arg; 568 struct task_struct *from = current, *to = arg;
@@ -574,7 +576,7 @@ static void stack_proc(void *arg)
574 * Dumps a stacks registers to the linux console. 576 * Dumps a stacks registers to the linux console.
575 * Usage stack <pid>. 577 * Usage stack <pid>.
576 */ 578 */
577void do_stack(struct mc_request *req) 579static void do_stack_trace(struct mc_request *req)
578{ 580{
579 char *ptr = req->request.data; 581 char *ptr = req->request.data;
580 int pid_requested= -1; 582 int pid_requested= -1;
@@ -605,6 +607,7 @@ void do_stack(struct mc_request *req)
605 } 607 }
606 with_console(req, stack_proc, to); 608 with_console(req, stack_proc, to);
607} 609}
610#endif /* CONFIG_MODE_SKAS */
608 611
609void mconsole_stack(struct mc_request *req) 612void mconsole_stack(struct mc_request *req)
610{ 613{
@@ -613,7 +616,7 @@ void mconsole_stack(struct mc_request *req)
613 */ 616 */
614 CHOOSE_MODE(mconsole_reply(req, "Sorry, this doesn't work in TT mode", 617 CHOOSE_MODE(mconsole_reply(req, "Sorry, this doesn't work in TT mode",
615 1, 0), 618 1, 0),
616 do_stack(req)); 619 do_stack_trace(req));
617} 620}
618 621
619/* Changed by mconsole_setup, which is __setup, and called before SMP is 622/* Changed by mconsole_setup, which is __setup, and called before SMP is
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c
index 8ebb2241ad42..8c7279bb353b 100644
--- a/arch/um/drivers/net_kern.c
+++ b/arch/um/drivers/net_kern.c
@@ -131,9 +131,8 @@ static int uml_net_open(struct net_device *dev)
131 SA_INTERRUPT | SA_SHIRQ, dev->name, dev); 131 SA_INTERRUPT | SA_SHIRQ, dev->name, dev);
132 if(err != 0){ 132 if(err != 0){
133 printk(KERN_ERR "uml_net_open: failed to get irq(%d)\n", err); 133 printk(KERN_ERR "uml_net_open: failed to get irq(%d)\n", err);
134 if(lp->close != NULL) (*lp->close)(lp->fd, &lp->user);
135 lp->fd = -1;
136 err = -ENETUNREACH; 134 err = -ENETUNREACH;
135 goto out_close;
137 } 136 }
138 137
139 lp->tl.data = (unsigned long) &lp->user; 138 lp->tl.data = (unsigned long) &lp->user;
@@ -145,9 +144,19 @@ static int uml_net_open(struct net_device *dev)
145 */ 144 */
146 while((err = uml_net_rx(dev)) > 0) ; 145 while((err = uml_net_rx(dev)) > 0) ;
147 146
148 out:
149 spin_unlock(&lp->lock); 147 spin_unlock(&lp->lock);
150 return(err); 148
149 spin_lock(&opened_lock);
150 list_add(&lp->list, &opened);
151 spin_unlock(&opened_lock);
152
153 return 0;
154out_close:
155 if(lp->close != NULL) (*lp->close)(lp->fd, &lp->user);
156 lp->fd = -1;
157out:
158 spin_unlock(&lp->lock);
159 return err;
151} 160}
152 161
153static int uml_net_close(struct net_device *dev) 162static int uml_net_close(struct net_device *dev)
@@ -161,9 +170,13 @@ static int uml_net_close(struct net_device *dev)
161 if(lp->close != NULL) 170 if(lp->close != NULL)
162 (*lp->close)(lp->fd, &lp->user); 171 (*lp->close)(lp->fd, &lp->user);
163 lp->fd = -1; 172 lp->fd = -1;
164 list_del(&lp->list);
165 173
166 spin_unlock(&lp->lock); 174 spin_unlock(&lp->lock);
175
176 spin_lock(&opened_lock);
177 list_del(&lp->list);
178 spin_unlock(&opened_lock);
179
167 return 0; 180 return 0;
168} 181}
169 182
@@ -410,11 +423,7 @@ static int eth_configure(int n, void *init, char *mac,
410 if (device->have_mac) 423 if (device->have_mac)
411 set_ether_mac(dev, device->mac); 424 set_ether_mac(dev, device->mac);
412 425
413 spin_lock(&opened_lock); 426 return 0;
414 list_add(&lp->list, &opened);
415 spin_unlock(&opened_lock);
416
417 return(0);
418} 427}
419 428
420static struct uml_net *find_device(int n) 429static struct uml_net *find_device(int n)
diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c
index 098fa65981ab..0e2f06187ea7 100644
--- a/arch/um/drivers/net_user.c
+++ b/arch/um/drivers/net_user.c
@@ -47,10 +47,12 @@ void tap_check_ips(char *gate_addr, unsigned char *eth_addr)
47 } 47 }
48} 48}
49 49
50/* Do reliable error handling as this fails frequently enough. */
50void read_output(int fd, char *output, int len) 51void read_output(int fd, char *output, int len)
51{ 52{
52 int remain, n, actual; 53 int remain, ret, expected;
53 char c; 54 char c;
55 char *str;
54 56
55 if(output == NULL){ 57 if(output == NULL){
56 output = &c; 58 output = &c;
@@ -58,23 +60,31 @@ void read_output(int fd, char *output, int len)
58 } 60 }
59 61
60 *output = '\0'; 62 *output = '\0';
61 n = os_read_file(fd, &remain, sizeof(remain)); 63 ret = os_read_file(fd, &remain, sizeof(remain));
62 if(n != sizeof(remain)){ 64
63 printk("read_output - read of length failed, err = %d\n", -n); 65 if (ret != sizeof(remain)) {
64 return; 66 expected = sizeof(remain);
67 str = "length";
68 goto err;
65 } 69 }
66 70
67 while(remain != 0){ 71 while(remain != 0){
68 n = (remain < len) ? remain : len; 72 expected = (remain < len) ? remain : len;
69 actual = os_read_file(fd, output, n); 73 ret = os_read_file(fd, output, expected);
70 if(actual != n){ 74 if (ret != expected) {
71 printk("read_output - read of data failed, " 75 str = "data";
72 "err = %d\n", -actual); 76 goto err;
73 return;
74 } 77 }
75 remain -= actual; 78 remain -= ret;
76 } 79 }
80
77 return; 81 return;
82
83err:
84 if (ret < 0)
85 printk("read_output - read of %s failed, errno = %d\n", str, -ret);
86 else
87 printk("read_output - read of %s failed, read only %d of %d bytes\n", str, ret, expected);
78} 88}
79 89
80int net_read(int fd, void *buf, int len) 90int net_read(int fd, void *buf, int len)
diff --git a/arch/um/drivers/slip_common.h b/arch/um/drivers/slip_common.h
index 2ae76d8f1be1..d574e0a9dc13 100644
--- a/arch/um/drivers/slip_common.h
+++ b/arch/um/drivers/slip_common.h
@@ -88,12 +88,13 @@ struct slip_proto {
88 int esc; 88 int esc;
89}; 89};
90 90
91#define SLIP_PROTO_INIT { \ 91static inline void slip_proto_init(struct slip_proto * slip)
92 .ibuf = { '\0' }, \ 92{
93 .obuf = { '\0' }, \ 93 memset(slip->ibuf, 0, sizeof(slip->ibuf));
94 .more = 0, \ 94 memset(slip->obuf, 0, sizeof(slip->obuf));
95 .pos = 0, \ 95 slip->more = 0;
96 .esc = 0 \ 96 slip->pos = 0;
97 slip->esc = 0;
97} 98}
98 99
99extern int slip_proto_read(int fd, void *buf, int len, 100extern int slip_proto_read(int fd, void *buf, int len,
diff --git a/arch/um/drivers/slip_kern.c b/arch/um/drivers/slip_kern.c
index 9a6f5c85f902..a62f5ef445cf 100644
--- a/arch/um/drivers/slip_kern.c
+++ b/arch/um/drivers/slip_kern.c
@@ -21,13 +21,14 @@ void slip_init(struct net_device *dev, void *data)
21 21
22 private = dev->priv; 22 private = dev->priv;
23 spri = (struct slip_data *) private->user; 23 spri = (struct slip_data *) private->user;
24 *spri = ((struct slip_data) 24
25 { .name = { '\0' }, 25 memset(spri->name, 0, sizeof(spri->name));
26 .addr = NULL, 26 spri->addr = NULL;
27 .gate_addr = init->gate_addr, 27 spri->gate_addr = init->gate_addr;
28 .slave = -1, 28 spri->slave = -1;
29 .slip = SLIP_PROTO_INIT, 29 spri->dev = dev;
30 .dev = dev }); 30
31 slip_proto_init(&spri->slip);
31 32
32 dev->init = NULL; 33 dev->init = NULL;
33 dev->header_cache_update = NULL; 34 dev->header_cache_update = NULL;
diff --git a/arch/um/drivers/slirp_kern.c b/arch/um/drivers/slirp_kern.c
index 9864d27afdbe..33d7982be5d3 100644
--- a/arch/um/drivers/slirp_kern.c
+++ b/arch/um/drivers/slirp_kern.c
@@ -21,12 +21,13 @@ void slirp_init(struct net_device *dev, void *data)
21 21
22 private = dev->priv; 22 private = dev->priv;
23 spri = (struct slirp_data *) private->user; 23 spri = (struct slirp_data *) private->user;
24 *spri = ((struct slirp_data) 24
25 { .argw = init->argw, 25 spri->argw = init->argw;
26 .pid = -1, 26 spri->pid = -1;
27 .slave = -1, 27 spri->slave = -1;
28 .slip = SLIP_PROTO_INIT, 28 spri->dev = dev;
29 .dev = dev }); 29
30 slip_proto_init(&spri->slip);
30 31
31 dev->init = NULL; 32 dev->init = NULL;
32 dev->hard_header_len = 0; 33 dev->hard_header_len = 0;
diff --git a/arch/um/drivers/ssl.c b/arch/um/drivers/ssl.c
index a32ef55cb244..a4d6415bc8c4 100644
--- a/arch/um/drivers/ssl.c
+++ b/arch/um/drivers/ssl.c
@@ -33,7 +33,7 @@ static struct tty_driver *ssl_driver;
33 33
34#define NR_PORTS 64 34#define NR_PORTS 64
35 35
36void ssl_announce(char *dev_name, int dev) 36static void ssl_announce(char *dev_name, int dev)
37{ 37{
38 printk(KERN_INFO "Serial line %d assigned device '%s'\n", dev, 38 printk(KERN_INFO "Serial line %d assigned device '%s'\n", dev,
39 dev_name); 39 dev_name);
@@ -98,7 +98,7 @@ static int ssl_remove(int n)
98 return line_remove(serial_lines, ARRAY_SIZE(serial_lines), n); 98 return line_remove(serial_lines, ARRAY_SIZE(serial_lines), n);
99} 99}
100 100
101int ssl_open(struct tty_struct *tty, struct file *filp) 101static int ssl_open(struct tty_struct *tty, struct file *filp)
102{ 102{
103 return line_open(serial_lines, tty); 103 return line_open(serial_lines, tty);
104} 104}
@@ -182,7 +182,7 @@ static struct console ssl_cons = {
182 .index = -1, 182 .index = -1,
183}; 183};
184 184
185int ssl_init(void) 185static int ssl_init(void)
186{ 186{
187 char *new_title; 187 char *new_title;
188 188
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index 101efd26d467..fa617e0719ab 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -1135,7 +1135,7 @@ static int path_requires_switch(char *from_cmdline, char *from_cow, char *cow)
1135static int backing_file_mismatch(char *file, __u64 size, time_t mtime) 1135static int backing_file_mismatch(char *file, __u64 size, time_t mtime)
1136{ 1136{
1137 unsigned long modtime; 1137 unsigned long modtime;
1138 long long actual; 1138 unsigned long long actual;
1139 int err; 1139 int err;
1140 1140
1141 err = os_file_modtime(file, &modtime); 1141 err = os_file_modtime(file, &modtime);
diff --git a/arch/um/include/init.h b/arch/um/include/init.h
index cbd79a8d213d..d4de7c0120ce 100644
--- a/arch/um/include/init.h
+++ b/arch/um/include/init.h
@@ -122,7 +122,7 @@ extern struct uml_param __uml_setup_start, __uml_setup_end;
122 122
123#define __exitcall(fn) static exitcall_t __exitcall_##fn __exit_call = fn 123#define __exitcall(fn) static exitcall_t __exitcall_##fn __exit_call = fn
124 124
125#define __init_call __attribute__ ((unused,__section__ (".initcall.init"))) 125#define __init_call __attribute_used__ __attribute__ ((__section__ (".initcall.init")))
126 126
127#endif 127#endif
128 128
diff --git a/arch/um/include/kern_util.h b/arch/um/include/kern_util.h
index c649108a9e9f..07176d92e1c9 100644
--- a/arch/um/include/kern_util.h
+++ b/arch/um/include/kern_util.h
@@ -31,8 +31,6 @@ extern int timer_irq_inited;
31extern int jail; 31extern int jail;
32extern int nsyscalls; 32extern int nsyscalls;
33 33
34extern struct task_struct *idle_threads[NR_CPUS];
35
36#define UML_ROUND_DOWN(addr) ((void *)(((unsigned long) addr) & PAGE_MASK)) 34#define UML_ROUND_DOWN(addr) ((void *)(((unsigned long) addr) & PAGE_MASK))
37#define UML_ROUND_UP(addr) \ 35#define UML_ROUND_UP(addr) \
38 UML_ROUND_DOWN(((unsigned long) addr) + PAGE_SIZE - 1) 36 UML_ROUND_DOWN(((unsigned long) addr) + PAGE_SIZE - 1)
diff --git a/arch/um/include/os.h b/arch/um/include/os.h
index eb1710b81255..2a1c64d8d0bf 100644
--- a/arch/um/include/os.h
+++ b/arch/um/include/os.h
@@ -179,8 +179,11 @@ extern void os_stop_process(int pid);
179extern void os_kill_process(int pid, int reap_child); 179extern void os_kill_process(int pid, int reap_child);
180extern void os_kill_ptraced_process(int pid, int reap_child); 180extern void os_kill_ptraced_process(int pid, int reap_child);
181extern void os_usr1_process(int pid); 181extern void os_usr1_process(int pid);
182extern long os_ptrace_ldt(long pid, long addr, long data);
183
182extern int os_getpid(void); 184extern int os_getpid(void);
183extern int os_getpgrp(void); 185extern int os_getpgrp(void);
186
184extern void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int)); 187extern void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int));
185extern void init_new_thread_signals(int altstack); 188extern void init_new_thread_signals(int altstack);
186extern int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr); 189extern int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr);
diff --git a/arch/um/include/registers.h b/arch/um/include/registers.h
index 4892e5fcef07..83b688ca198f 100644
--- a/arch/um/include/registers.h
+++ b/arch/um/include/registers.h
@@ -14,7 +14,7 @@ extern int restore_fp_registers(int pid, unsigned long *fp_regs);
14extern void save_registers(int pid, union uml_pt_regs *regs); 14extern void save_registers(int pid, union uml_pt_regs *regs);
15extern void restore_registers(int pid, union uml_pt_regs *regs); 15extern void restore_registers(int pid, union uml_pt_regs *regs);
16extern void init_registers(int pid); 16extern void init_registers(int pid);
17extern void get_safe_registers(unsigned long * regs); 17extern void get_safe_registers(unsigned long * regs, unsigned long * fp_regs);
18extern void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer); 18extern void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer);
19 19
20#endif 20#endif
diff --git a/arch/um/kernel/exec_kern.c b/arch/um/kernel/exec_kern.c
index 569fe8b9b053..c264e1c05ab3 100644
--- a/arch/um/kernel/exec_kern.c
+++ b/arch/um/kernel/exec_kern.c
@@ -33,7 +33,7 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp)
33extern void log_exec(char **argv, void *tty); 33extern void log_exec(char **argv, void *tty);
34 34
35static long execve1(char *file, char __user * __user *argv, 35static long execve1(char *file, char __user * __user *argv,
36 char *__user __user *env) 36 char __user *__user *env)
37{ 37{
38 long error; 38 long error;
39 39
diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c
index f3b583a878a6..544665e04513 100644
--- a/arch/um/kernel/physmem.c
+++ b/arch/um/kernel/physmem.c
@@ -265,7 +265,7 @@ int init_maps(unsigned long physmem, unsigned long iomem, unsigned long highmem)
265 highmem_len = highmem_pages * sizeof(struct page); 265 highmem_len = highmem_pages * sizeof(struct page);
266 266
267 total_pages = phys_pages + iomem_pages + highmem_pages; 267 total_pages = phys_pages + iomem_pages + highmem_pages;
268 total_len = phys_len + iomem_pages + highmem_len; 268 total_len = phys_len + iomem_len + highmem_len;
269 269
270 if(kmalloc_ok){ 270 if(kmalloc_ok){
271 map = kmalloc(total_len, GFP_KERNEL); 271 map = kmalloc(total_len, GFP_KERNEL);
diff --git a/arch/um/kernel/reboot.c b/arch/um/kernel/reboot.c
index 6f1a3a288117..3ef73bf2e781 100644
--- a/arch/um/kernel/reboot.c
+++ b/arch/um/kernel/reboot.c
@@ -5,6 +5,7 @@
5 5
6#include "linux/module.h" 6#include "linux/module.h"
7#include "linux/sched.h" 7#include "linux/sched.h"
8#include "asm/smp.h"
8#include "user_util.h" 9#include "user_util.h"
9#include "kern_util.h" 10#include "kern_util.h"
10#include "kern.h" 11#include "kern.h"
diff --git a/arch/um/kernel/skas/process.c b/arch/um/kernel/skas/process.c
deleted file mode 100644
index eea1c9c4bb0f..000000000000
--- a/arch/um/kernel/skas/process.c
+++ /dev/null
@@ -1,569 +0,0 @@
1/*
2 * Copyright (C) 2002- 2004 Jeff Dike (jdike@addtoit.com)
3 * Licensed under the GPL
4 */
5
6#include <stdlib.h>
7#include <string.h>
8#include <unistd.h>
9#include <errno.h>
10#include <signal.h>
11#include <setjmp.h>
12#include <sched.h>
13#include <sys/wait.h>
14#include <sys/mman.h>
15#include <sys/user.h>
16#include <sys/time.h>
17#include <asm/unistd.h>
18#include <asm/types.h>
19#include "user.h"
20#include "ptrace_user.h"
21#include "sysdep/ptrace.h"
22#include "user_util.h"
23#include "kern_util.h"
24#include "skas.h"
25#include "stub-data.h"
26#include "mm_id.h"
27#include "sysdep/sigcontext.h"
28#include "sysdep/stub.h"
29#include "os.h"
30#include "proc_mm.h"
31#include "skas_ptrace.h"
32#include "chan_user.h"
33#include "registers.h"
34#include "mem.h"
35#include "uml-config.h"
36#include "process.h"
37
38int is_skas_winch(int pid, int fd, void *data)
39{
40 if(pid != os_getpgrp())
41 return(0);
42
43 register_winch_irq(-1, fd, -1, data);
44 return(1);
45}
46
47void wait_stub_done(int pid, int sig, char * fname)
48{
49 int n, status, err;
50
51 do {
52 if ( sig != -1 ) {
53 err = ptrace(PTRACE_CONT, pid, 0, sig);
54 if(err)
55 panic("%s : continue failed, errno = %d\n",
56 fname, errno);
57 }
58 sig = 0;
59
60 CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED));
61 } while((n >= 0) && WIFSTOPPED(status) &&
62 ((WSTOPSIG(status) == SIGVTALRM) ||
63 /* running UML inside a detached screen can cause
64 * SIGWINCHes
65 */
66 (WSTOPSIG(status) == SIGWINCH)));
67
68 if((n < 0) || !WIFSTOPPED(status) ||
69 (WSTOPSIG(status) != SIGUSR1 && WSTOPSIG(status) != SIGTRAP)){
70 unsigned long regs[HOST_FRAME_SIZE];
71 if(ptrace(PTRACE_GETREGS, pid, 0, regs) < 0)
72 printk("Failed to get registers from stub, "
73 "errno = %d\n", errno);
74 else {
75 int i;
76
77 printk("Stub registers -\n");
78 for(i = 0; i < HOST_FRAME_SIZE; i++)
79 printk("\t%d - %lx\n", i, regs[i]);
80 }
81 panic("%s : failed to wait for SIGUSR1/SIGTRAP, "
82 "pid = %d, n = %d, errno = %d, status = 0x%x\n",
83 fname, pid, n, errno, status);
84 }
85}
86
87void get_skas_faultinfo(int pid, struct faultinfo * fi)
88{
89 int err;
90
91 if(ptrace_faultinfo){
92 err = ptrace(PTRACE_FAULTINFO, pid, 0, fi);
93 if(err)
94 panic("get_skas_faultinfo - PTRACE_FAULTINFO failed, "
95 "errno = %d\n", errno);
96
97 /* Special handling for i386, which has different structs */
98 if (sizeof(struct ptrace_faultinfo) < sizeof(struct faultinfo))
99 memset((char *)fi + sizeof(struct ptrace_faultinfo), 0,
100 sizeof(struct faultinfo) -
101 sizeof(struct ptrace_faultinfo));
102 }
103 else {
104 wait_stub_done(pid, SIGSEGV, "get_skas_faultinfo");
105
106 /* faultinfo is prepared by the stub-segv-handler at start of
107 * the stub stack page. We just have to copy it.
108 */
109 memcpy(fi, (void *)current_stub_stack(), sizeof(*fi));
110 }
111}
112
113static void handle_segv(int pid, union uml_pt_regs * regs)
114{
115 get_skas_faultinfo(pid, &regs->skas.faultinfo);
116 segv(regs->skas.faultinfo, 0, 1, NULL);
117}
118
119/*To use the same value of using_sysemu as the caller, ask it that value (in local_using_sysemu)*/
120static void handle_trap(int pid, union uml_pt_regs *regs, int local_using_sysemu)
121{
122 int err, status;
123
124 /* Mark this as a syscall */
125 UPT_SYSCALL_NR(regs) = PT_SYSCALL_NR(regs->skas.regs);
126
127 if (!local_using_sysemu)
128 {
129 err = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_NR_OFFSET, __NR_getpid);
130 if(err < 0)
131 panic("handle_trap - nullifying syscall failed errno = %d\n",
132 errno);
133
134 err = ptrace(PTRACE_SYSCALL, pid, 0, 0);
135 if(err < 0)
136 panic("handle_trap - continuing to end of syscall failed, "
137 "errno = %d\n", errno);
138
139 CATCH_EINTR(err = waitpid(pid, &status, WUNTRACED));
140 if((err < 0) || !WIFSTOPPED(status) ||
141 (WSTOPSIG(status) != SIGTRAP + 0x80))
142 panic("handle_trap - failed to wait at end of syscall, "
143 "errno = %d, status = %d\n", errno, status);
144 }
145
146 handle_syscall(regs);
147}
148
149extern int __syscall_stub_start;
150int stub_code_fd = -1;
151__u64 stub_code_offset;
152
153static int userspace_tramp(void *stack)
154{
155 void *addr;
156
157 ptrace(PTRACE_TRACEME, 0, 0, 0);
158
159 init_new_thread_signals(1);
160 enable_timer();
161
162 if(!proc_mm){
163 /* This has a pte, but it can't be mapped in with the usual
164 * tlb_flush mechanism because this is part of that mechanism
165 */
166 addr = mmap64((void *) UML_CONFIG_STUB_CODE, page_size(),
167 PROT_EXEC, MAP_FIXED | MAP_PRIVATE,
168 stub_code_fd, stub_code_offset);
169 if(addr == MAP_FAILED){
170 printk("mapping stub code failed, errno = %d\n",
171 errno);
172 exit(1);
173 }
174
175 if(stack != NULL){
176 int fd;
177 __u64 offset;
178
179 fd = phys_mapping(to_phys(stack), &offset);
180 addr = mmap((void *) UML_CONFIG_STUB_DATA, page_size(),
181 PROT_READ | PROT_WRITE,
182 MAP_FIXED | MAP_SHARED, fd, offset);
183 if(addr == MAP_FAILED){
184 printk("mapping stub stack failed, "
185 "errno = %d\n", errno);
186 exit(1);
187 }
188 }
189 }
190 if(!ptrace_faultinfo){
191 unsigned long v = UML_CONFIG_STUB_CODE +
192 (unsigned long) stub_segv_handler -
193 (unsigned long) &__syscall_stub_start;
194
195 set_sigstack((void *) UML_CONFIG_STUB_DATA, page_size());
196 set_handler(SIGSEGV, (void *) v, SA_ONSTACK,
197 SIGIO, SIGWINCH, SIGALRM, SIGVTALRM,
198 SIGUSR1, -1);
199 }
200
201 os_stop_process(os_getpid());
202 return(0);
203}
204
205/* Each element set once, and only accessed by a single processor anyway */
206#undef NR_CPUS
207#define NR_CPUS 1
208int userspace_pid[NR_CPUS];
209
210int start_userspace(unsigned long stub_stack)
211{
212 void *stack;
213 unsigned long sp;
214 int pid, status, n, flags;
215
216 if ( stub_code_fd == -1 )
217 stub_code_fd = phys_mapping(to_phys(&__syscall_stub_start),
218 &stub_code_offset);
219
220 stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
221 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
222 if(stack == MAP_FAILED)
223 panic("start_userspace : mmap failed, errno = %d", errno);
224 sp = (unsigned long) stack + PAGE_SIZE - sizeof(void *);
225
226 flags = CLONE_FILES | SIGCHLD;
227 if(proc_mm) flags |= CLONE_VM;
228 pid = clone(userspace_tramp, (void *) sp, flags, (void *) stub_stack);
229 if(pid < 0)
230 panic("start_userspace : clone failed, errno = %d", errno);
231
232 do {
233 CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED));
234 if(n < 0)
235 panic("start_userspace : wait failed, errno = %d",
236 errno);
237 } while(WIFSTOPPED(status) && (WSTOPSIG(status) == SIGVTALRM));
238
239 if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGSTOP))
240 panic("start_userspace : expected SIGSTOP, got status = %d",
241 status);
242
243 if (ptrace(PTRACE_OLDSETOPTIONS, pid, NULL, (void *)PTRACE_O_TRACESYSGOOD) < 0)
244 panic("start_userspace : PTRACE_SETOPTIONS failed, errno=%d\n",
245 errno);
246
247 if(munmap(stack, PAGE_SIZE) < 0)
248 panic("start_userspace : munmap failed, errno = %d\n", errno);
249
250 return(pid);
251}
252
253void userspace(union uml_pt_regs *regs)
254{
255 int err, status, op, pid = userspace_pid[0];
256 int local_using_sysemu; /*To prevent races if using_sysemu changes under us.*/
257
258 while(1){
259 restore_registers(pid, regs);
260
261 /* Now we set local_using_sysemu to be used for one loop */
262 local_using_sysemu = get_using_sysemu();
263
264 op = SELECT_PTRACE_OPERATION(local_using_sysemu, singlestepping(NULL));
265
266 err = ptrace(op, pid, 0, 0);
267 if(err)
268 panic("userspace - could not resume userspace process, "
269 "pid=%d, ptrace operation = %d, errno = %d\n",
270 op, errno);
271
272 CATCH_EINTR(err = waitpid(pid, &status, WUNTRACED));
273 if(err < 0)
274 panic("userspace - waitpid failed, errno = %d\n",
275 errno);
276
277 regs->skas.is_user = 1;
278 save_registers(pid, regs);
279 UPT_SYSCALL_NR(regs) = -1; /* Assume: It's not a syscall */
280
281 if(WIFSTOPPED(status)){
282 switch(WSTOPSIG(status)){
283 case SIGSEGV:
284 if(PTRACE_FULL_FAULTINFO || !ptrace_faultinfo)
285 user_signal(SIGSEGV, regs, pid);
286 else handle_segv(pid, regs);
287 break;
288 case SIGTRAP + 0x80:
289 handle_trap(pid, regs, local_using_sysemu);
290 break;
291 case SIGTRAP:
292 relay_signal(SIGTRAP, regs);
293 break;
294 case SIGIO:
295 case SIGVTALRM:
296 case SIGILL:
297 case SIGBUS:
298 case SIGFPE:
299 case SIGWINCH:
300 user_signal(WSTOPSIG(status), regs, pid);
301 break;
302 default:
303 printk("userspace - child stopped with signal "
304 "%d\n", WSTOPSIG(status));
305 }
306 pid = userspace_pid[0];
307 interrupt_end();
308
309 /* Avoid -ERESTARTSYS handling in host */
310 PT_SYSCALL_NR(regs->skas.regs) = -1;
311 }
312 }
313}
314#define INIT_JMP_NEW_THREAD 0
315#define INIT_JMP_REMOVE_SIGSTACK 1
316#define INIT_JMP_CALLBACK 2
317#define INIT_JMP_HALT 3
318#define INIT_JMP_REBOOT 4
319
320
321int copy_context_skas0(unsigned long new_stack, int pid)
322{
323 int err;
324 unsigned long regs[MAX_REG_NR];
325 unsigned long current_stack = current_stub_stack();
326 struct stub_data *data = (struct stub_data *) current_stack;
327 struct stub_data *child_data = (struct stub_data *) new_stack;
328 __u64 new_offset;
329 int new_fd = phys_mapping(to_phys((void *)new_stack), &new_offset);
330
331 /* prepare offset and fd of child's stack as argument for parent's
332 * and child's mmap2 calls
333 */
334 *data = ((struct stub_data) { .offset = MMAP_OFFSET(new_offset),
335 .fd = new_fd,
336 .timer = ((struct itimerval)
337 { { 0, 1000000 / hz() },
338 { 0, 1000000 / hz() }})});
339 get_safe_registers(regs);
340
341 /* Set parent's instruction pointer to start of clone-stub */
342 regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE +
343 (unsigned long) stub_clone_handler -
344 (unsigned long) &__syscall_stub_start;
345 regs[REGS_SP_INDEX] = UML_CONFIG_STUB_DATA + PAGE_SIZE -
346 sizeof(void *);
347 err = ptrace_setregs(pid, regs);
348 if(err < 0)
349 panic("copy_context_skas0 : PTRACE_SETREGS failed, "
350 "pid = %d, errno = %d\n", pid, errno);
351
352 /* set a well known return code for detection of child write failure */
353 child_data->err = 12345678;
354
355 /* Wait, until parent has finished its work: read child's pid from
356 * parent's stack, and check, if bad result.
357 */
358 wait_stub_done(pid, 0, "copy_context_skas0");
359
360 pid = data->err;
361 if(pid < 0)
362 panic("copy_context_skas0 - stub-parent reports error %d\n",
363 pid);
364
365 /* Wait, until child has finished too: read child's result from
366 * child's stack and check it.
367 */
368 wait_stub_done(pid, -1, "copy_context_skas0");
369 if (child_data->err != UML_CONFIG_STUB_DATA)
370 panic("copy_context_skas0 - stub-child reports error %d\n",
371 child_data->err);
372
373 if (ptrace(PTRACE_OLDSETOPTIONS, pid, NULL,
374 (void *)PTRACE_O_TRACESYSGOOD) < 0)
375 panic("copy_context_skas0 : PTRACE_SETOPTIONS failed, "
376 "errno = %d\n", errno);
377
378 return pid;
379}
380
381/*
382 * This is used only, if stub pages are needed, while proc_mm is
383 * availabl. Opening /proc/mm creates a new mm_context, which lacks
384 * the stub-pages. Thus, we map them using /proc/mm-fd
385 */
386void map_stub_pages(int fd, unsigned long code,
387 unsigned long data, unsigned long stack)
388{
389 struct proc_mm_op mmop;
390 int n;
391
392 mmop = ((struct proc_mm_op) { .op = MM_MMAP,
393 .u =
394 { .mmap =
395 { .addr = code,
396 .len = PAGE_SIZE,
397 .prot = PROT_EXEC,
398 .flags = MAP_FIXED | MAP_PRIVATE,
399 .fd = stub_code_fd,
400 .offset = stub_code_offset
401 } } });
402 n = os_write_file(fd, &mmop, sizeof(mmop));
403 if(n != sizeof(mmop))
404 panic("map_stub_pages : /proc/mm map for code failed, "
405 "err = %d\n", -n);
406
407 if ( stack ) {
408 __u64 map_offset;
409 int map_fd = phys_mapping(to_phys((void *)stack), &map_offset);
410 mmop = ((struct proc_mm_op)
411 { .op = MM_MMAP,
412 .u =
413 { .mmap =
414 { .addr = data,
415 .len = PAGE_SIZE,
416 .prot = PROT_READ | PROT_WRITE,
417 .flags = MAP_FIXED | MAP_SHARED,
418 .fd = map_fd,
419 .offset = map_offset
420 } } });
421 n = os_write_file(fd, &mmop, sizeof(mmop));
422 if(n != sizeof(mmop))
423 panic("map_stub_pages : /proc/mm map for data failed, "
424 "err = %d\n", -n);
425 }
426}
427
428void new_thread(void *stack, void **switch_buf_ptr, void **fork_buf_ptr,
429 void (*handler)(int))
430{
431 unsigned long flags;
432 sigjmp_buf switch_buf, fork_buf;
433
434 *switch_buf_ptr = &switch_buf;
435 *fork_buf_ptr = &fork_buf;
436
437 /* Somewhat subtle - siglongjmp restores the signal mask before doing
438 * the longjmp. This means that when jumping from one stack to another
439 * when the target stack has interrupts enabled, an interrupt may occur
440 * on the source stack. This is bad when starting up a process because
441 * it's not supposed to get timer ticks until it has been scheduled.
442 * So, we disable interrupts around the sigsetjmp to ensure that
443 * they can't happen until we get back here where they are safe.
444 */
445 flags = get_signals();
446 block_signals();
447 if(sigsetjmp(fork_buf, 1) == 0)
448 new_thread_proc(stack, handler);
449
450 remove_sigstack();
451
452 set_signals(flags);
453}
454
455void thread_wait(void *sw, void *fb)
456{
457 sigjmp_buf buf, **switch_buf = sw, *fork_buf;
458
459 *switch_buf = &buf;
460 fork_buf = fb;
461 if(sigsetjmp(buf, 1) == 0)
462 siglongjmp(*fork_buf, INIT_JMP_REMOVE_SIGSTACK);
463}
464
465void switch_threads(void *me, void *next)
466{
467 sigjmp_buf my_buf, **me_ptr = me, *next_buf = next;
468
469 *me_ptr = &my_buf;
470 if(sigsetjmp(my_buf, 1) == 0)
471 siglongjmp(*next_buf, 1);
472}
473
474static sigjmp_buf initial_jmpbuf;
475
476/* XXX Make these percpu */
477static void (*cb_proc)(void *arg);
478static void *cb_arg;
479static sigjmp_buf *cb_back;
480
481int start_idle_thread(void *stack, void *switch_buf_ptr, void **fork_buf_ptr)
482{
483 sigjmp_buf **switch_buf = switch_buf_ptr;
484 int n;
485
486 set_handler(SIGWINCH, (__sighandler_t) sig_handler,
487 SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGALRM,
488 SIGVTALRM, -1);
489
490 *fork_buf_ptr = &initial_jmpbuf;
491 n = sigsetjmp(initial_jmpbuf, 1);
492 switch(n){
493 case INIT_JMP_NEW_THREAD:
494 new_thread_proc((void *) stack, new_thread_handler);
495 break;
496 case INIT_JMP_REMOVE_SIGSTACK:
497 remove_sigstack();
498 break;
499 case INIT_JMP_CALLBACK:
500 (*cb_proc)(cb_arg);
501 siglongjmp(*cb_back, 1);
502 break;
503 case INIT_JMP_HALT:
504 kmalloc_ok = 0;
505 return(0);
506 case INIT_JMP_REBOOT:
507 kmalloc_ok = 0;
508 return(1);
509 default:
510 panic("Bad sigsetjmp return in start_idle_thread - %d\n", n);
511 }
512 siglongjmp(**switch_buf, 1);
513}
514
515void initial_thread_cb_skas(void (*proc)(void *), void *arg)
516{
517 sigjmp_buf here;
518
519 cb_proc = proc;
520 cb_arg = arg;
521 cb_back = &here;
522
523 block_signals();
524 if(sigsetjmp(here, 1) == 0)
525 siglongjmp(initial_jmpbuf, INIT_JMP_CALLBACK);
526 unblock_signals();
527
528 cb_proc = NULL;
529 cb_arg = NULL;
530 cb_back = NULL;
531}
532
533void halt_skas(void)
534{
535 block_signals();
536 siglongjmp(initial_jmpbuf, INIT_JMP_HALT);
537}
538
539void reboot_skas(void)
540{
541 block_signals();
542 siglongjmp(initial_jmpbuf, INIT_JMP_REBOOT);
543}
544
545void switch_mm_skas(struct mm_id *mm_idp)
546{
547 int err;
548
549#warning need cpu pid in switch_mm_skas
550 if(proc_mm){
551 err = ptrace(PTRACE_SWITCH_MM, userspace_pid[0], 0,
552 mm_idp->u.mm_fd);
553 if(err)
554 panic("switch_mm_skas - PTRACE_SWITCH_MM failed, "
555 "errno = %d\n", errno);
556 }
557 else userspace_pid[0] = mm_idp->u.pid;
558}
559
560/*
561 * Overrides for Emacs so that we follow Linus's tabbing style.
562 * Emacs will notice this stuff at the end of the file and automatically
563 * adjust the settings for this buffer only. This must remain at the end
564 * of the file.
565 * ---------------------------------------------------------------------------
566 * Local variables:
567 * c-file-style: "linux"
568 * End:
569 */
diff --git a/arch/um/kernel/tt/syscall_kern.c b/arch/um/kernel/tt/syscall_kern.c
index 3d29c90514cc..3fda9a03c59a 100644
--- a/arch/um/kernel/tt/syscall_kern.c
+++ b/arch/um/kernel/tt/syscall_kern.c
@@ -23,16 +23,20 @@ void syscall_handler_tt(int sig, struct pt_regs *regs)
23 int syscall; 23 int syscall;
24#ifdef CONFIG_SYSCALL_DEBUG 24#ifdef CONFIG_SYSCALL_DEBUG
25 int index; 25 int index;
26 index = record_syscall_start(syscall);
27#endif 26#endif
28 sc = UPT_SC(&regs->regs); 27 sc = UPT_SC(&regs->regs);
29 SC_START_SYSCALL(sc); 28 SC_START_SYSCALL(sc);
30 29
30 syscall = UPT_SYSCALL_NR(&regs->regs);
31
32#ifdef CONFIG_SYSCALL_DEBUG
33 index = record_syscall_start(syscall);
34#endif
35
31 syscall_trace(&regs->regs, 0); 36 syscall_trace(&regs->regs, 0);
32 37
33 current->thread.nsyscalls++; 38 current->thread.nsyscalls++;
34 nsyscalls++; 39 nsyscalls++;
35 syscall = UPT_SYSCALL_NR(&regs->regs);
36 40
37 if((syscall >= NR_syscalls) || (syscall < 0)) 41 if((syscall >= NR_syscalls) || (syscall < 0))
38 result = -ENOSYS; 42 result = -ENOSYS;
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index e2d3ca445ef5..27cdf9164422 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -193,6 +193,24 @@ __uml_setup("root=", uml_root_setup,
193" root=/dev/ubd5\n\n" 193" root=/dev/ubd5\n\n"
194); 194);
195 195
196#ifndef CONFIG_MODE_TT
197
198static int __init no_skas_debug_setup(char *line, int *add)
199{
200 printf("'debug' is not necessary to gdb UML in skas mode - run \n");
201 printf("'gdb linux' and disable CONFIG_CMDLINE_ON_HOST if gdb \n");
202 printf("doesn't work as expected\n");
203
204 return 0;
205}
206
207__uml_setup("debug", no_skas_debug_setup,
208"debug\n"
209" this flag is not needed to run gdb on UML in skas mode\n\n"
210);
211
212#endif
213
196#ifdef CONFIG_SMP 214#ifdef CONFIG_SMP
197static int __init uml_ncpus_setup(char *line, int *add) 215static int __init uml_ncpus_setup(char *line, int *add)
198{ 216{
diff --git a/arch/um/os-Linux/drivers/tuntap_user.c b/arch/um/os-Linux/drivers/tuntap_user.c
index 52945338b64d..87c3aa0252db 100644
--- a/arch/um/os-Linux/drivers/tuntap_user.c
+++ b/arch/um/os-Linux/drivers/tuntap_user.c
@@ -122,6 +122,7 @@ static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote,
122 return(-EINVAL); 122 return(-EINVAL);
123 } 123 }
124 *fd_out = ((int *) CMSG_DATA(cmsg))[0]; 124 *fd_out = ((int *) CMSG_DATA(cmsg))[0];
125 os_set_exec_close(*fd_out, 1);
125 return(0); 126 return(0);
126} 127}
127 128
@@ -137,7 +138,8 @@ static int tuntap_open(void *data)
137 return(err); 138 return(err);
138 139
139 if(pri->fixed_config){ 140 if(pri->fixed_config){
140 pri->fd = os_open_file("/dev/net/tun", of_rdwr(OPENFLAGS()), 0); 141 pri->fd = os_open_file("/dev/net/tun",
142 of_cloexec(of_rdwr(OPENFLAGS())), 0);
141 if(pri->fd < 0){ 143 if(pri->fd < 0){
142 printk("Failed to open /dev/net/tun, err = %d\n", 144 printk("Failed to open /dev/net/tun, err = %d\n",
143 -pri->fd); 145 -pri->fd);
diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c
index f55773c819e6..3bd10deea280 100644
--- a/arch/um/os-Linux/file.c
+++ b/arch/um/os-Linux/file.c
@@ -272,14 +272,23 @@ int os_connect_socket(char *name)
272 snprintf(sock.sun_path, sizeof(sock.sun_path), "%s", name); 272 snprintf(sock.sun_path, sizeof(sock.sun_path), "%s", name);
273 273
274 fd = socket(AF_UNIX, SOCK_STREAM, 0); 274 fd = socket(AF_UNIX, SOCK_STREAM, 0);
275 if(fd < 0) 275 if(fd < 0) {
276 return(fd); 276 err = -errno;
277 goto out;
278 }
277 279
278 err = connect(fd, (struct sockaddr *) &sock, sizeof(sock)); 280 err = connect(fd, (struct sockaddr *) &sock, sizeof(sock));
279 if(err) 281 if(err) {
280 return(-errno); 282 err = -errno;
283 goto out_close;
284 }
281 285
282 return(fd); 286 return fd;
287
288out_close:
289 close(fd);
290out:
291 return err;
283} 292}
284 293
285void os_close_file(int fd) 294void os_close_file(int fd)
diff --git a/arch/um/os-Linux/process.c b/arch/um/os-Linux/process.c
index 7f5e2dac2a35..d261888f39c4 100644
--- a/arch/um/os-Linux/process.c
+++ b/arch/um/os-Linux/process.c
@@ -19,6 +19,7 @@
19#include "irq_user.h" 19#include "irq_user.h"
20#include "kern_util.h" 20#include "kern_util.h"
21#include "longjmp.h" 21#include "longjmp.h"
22#include "skas_ptrace.h"
22 23
23#define ARBITRARY_ADDR -1 24#define ARBITRARY_ADDR -1
24#define FAILURE_PID -1 25#define FAILURE_PID -1
@@ -100,6 +101,21 @@ void os_kill_process(int pid, int reap_child)
100 101
101} 102}
102 103
104/* This is here uniquely to have access to the userspace errno, i.e. the one
105 * used by ptrace in case of error.
106 */
107
108long os_ptrace_ldt(long pid, long addr, long data)
109{
110 int ret;
111
112 ret = ptrace(PTRACE_LDT, pid, addr, data);
113
114 if (ret < 0)
115 return -errno;
116 return ret;
117}
118
103/* Kill off a ptraced child by all means available. kill it normally first, 119/* Kill off a ptraced child by all means available. kill it normally first,
104 * then PTRACE_KILL it, then PTRACE_CONT it in case it's in a run state from 120 * then PTRACE_KILL it, then PTRACE_CONT it in case it's in a run state from
105 * which it can't exit directly. 121 * which it can't exit directly.
diff --git a/arch/um/os-Linux/skas/mem.c b/arch/um/os-Linux/skas/mem.c
index 9890e9090f58..fbb080c2fc26 100644
--- a/arch/um/os-Linux/skas/mem.c
+++ b/arch/um/os-Linux/skas/mem.c
@@ -60,7 +60,7 @@ static inline long do_syscall_stub(struct mm_id * mm_idp, void **addr)
60 60
61 multi_count++; 61 multi_count++;
62 62
63 get_safe_registers(regs); 63 get_safe_registers(regs, NULL);
64 regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + 64 regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE +
65 ((unsigned long) &batch_syscall_stub - 65 ((unsigned long) &batch_syscall_stub -
66 (unsigned long) &__syscall_stub_start); 66 (unsigned long) &__syscall_stub_start);
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
index 120a21c5883f..bbf34cb91ce1 100644
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -310,16 +310,12 @@ void userspace(union uml_pt_regs *regs)
310 } 310 }
311 } 311 }
312} 312}
313#define INIT_JMP_NEW_THREAD 0
314#define INIT_JMP_REMOVE_SIGSTACK 1
315#define INIT_JMP_CALLBACK 2
316#define INIT_JMP_HALT 3
317#define INIT_JMP_REBOOT 4
318 313
319int copy_context_skas0(unsigned long new_stack, int pid) 314int copy_context_skas0(unsigned long new_stack, int pid)
320{ 315{
321 int err; 316 int err;
322 unsigned long regs[MAX_REG_NR]; 317 unsigned long regs[HOST_FRAME_SIZE];
318 unsigned long fp_regs[HOST_FP_SIZE];
323 unsigned long current_stack = current_stub_stack(); 319 unsigned long current_stack = current_stub_stack();
324 struct stub_data *data = (struct stub_data *) current_stack; 320 struct stub_data *data = (struct stub_data *) current_stack;
325 struct stub_data *child_data = (struct stub_data *) new_stack; 321 struct stub_data *child_data = (struct stub_data *) new_stack;
@@ -334,7 +330,7 @@ int copy_context_skas0(unsigned long new_stack, int pid)
334 .timer = ((struct itimerval) 330 .timer = ((struct itimerval)
335 { { 0, 1000000 / hz() }, 331 { { 0, 1000000 / hz() },
336 { 0, 1000000 / hz() }})}); 332 { 0, 1000000 / hz() }})});
337 get_safe_registers(regs); 333 get_safe_registers(regs, fp_regs);
338 334
339 /* Set parent's instruction pointer to start of clone-stub */ 335 /* Set parent's instruction pointer to start of clone-stub */
340 regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + 336 regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE +
@@ -350,6 +346,11 @@ int copy_context_skas0(unsigned long new_stack, int pid)
350 panic("copy_context_skas0 : PTRACE_SETREGS failed, " 346 panic("copy_context_skas0 : PTRACE_SETREGS failed, "
351 "pid = %d, errno = %d\n", pid, errno); 347 "pid = %d, errno = %d\n", pid, errno);
352 348
349 err = ptrace_setfpregs(pid, fp_regs);
350 if(err < 0)
351 panic("copy_context_skas0 : PTRACE_SETFPREGS failed, "
352 "pid = %d, errno = %d\n", pid, errno);
353
353 /* set a well known return code for detection of child write failure */ 354 /* set a well known return code for detection of child write failure */
354 child_data->err = 12345678; 355 child_data->err = 12345678;
355 356
@@ -457,6 +458,12 @@ void new_thread(void *stack, void **switch_buf_ptr, void **fork_buf_ptr,
457 set_signals(flags); 458 set_signals(flags);
458} 459}
459 460
461#define INIT_JMP_NEW_THREAD 0
462#define INIT_JMP_REMOVE_SIGSTACK 1
463#define INIT_JMP_CALLBACK 2
464#define INIT_JMP_HALT 3
465#define INIT_JMP_REBOOT 4
466
460void thread_wait(void *sw, void *fb) 467void thread_wait(void *sw, void *fb)
461{ 468{
462 sigjmp_buf buf, **switch_buf = sw, *fork_buf; 469 sigjmp_buf buf, **switch_buf = sw, *fork_buf;
diff --git a/arch/um/os-Linux/start_up.c b/arch/um/os-Linux/start_up.c
index 6c5b17ed59e1..829d6b0d8b02 100644
--- a/arch/um/os-Linux/start_up.c
+++ b/arch/um/os-Linux/start_up.c
@@ -49,6 +49,7 @@ static int ptrace_child(void *arg)
49 int pid = os_getpid(), ppid = getppid(); 49 int pid = os_getpid(), ppid = getppid();
50 int sc_result; 50 int sc_result;
51 51
52 change_sig(SIGWINCH, 0);
52 if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0){ 53 if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0){
53 perror("ptrace"); 54 perror("ptrace");
54 os_kill_process(pid, 0); 55 os_kill_process(pid, 0);
diff --git a/arch/um/os-Linux/sys-i386/registers.c b/arch/um/os-Linux/sys-i386/registers.c
index aee4812333c6..7a6f6b99ceff 100644
--- a/arch/um/os-Linux/sys-i386/registers.c
+++ b/arch/um/os-Linux/sys-i386/registers.c
@@ -122,9 +122,12 @@ void init_registers(int pid)
122 err); 122 err);
123} 123}
124 124
125void get_safe_registers(unsigned long *regs) 125void get_safe_registers(unsigned long *regs, unsigned long *fp_regs)
126{ 126{
127 memcpy(regs, exec_regs, HOST_FRAME_SIZE * sizeof(unsigned long)); 127 memcpy(regs, exec_regs, HOST_FRAME_SIZE * sizeof(unsigned long));
128 if(fp_regs != NULL)
129 memcpy(fp_regs, exec_fp_regs,
130 HOST_FP_SIZE * sizeof(unsigned long));
128} 131}
129 132
130void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer) 133void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer)
diff --git a/arch/um/os-Linux/sys-x86_64/registers.c b/arch/um/os-Linux/sys-x86_64/registers.c
index 4b638dfb52b0..001941fa1a1e 100644
--- a/arch/um/os-Linux/sys-x86_64/registers.c
+++ b/arch/um/os-Linux/sys-x86_64/registers.c
@@ -70,9 +70,12 @@ void init_registers(int pid)
70 err); 70 err);
71} 71}
72 72
73void get_safe_registers(unsigned long *regs) 73void get_safe_registers(unsigned long *regs, unsigned long *fp_regs)
74{ 74{
75 memcpy(regs, exec_regs, HOST_FRAME_SIZE * sizeof(unsigned long)); 75 memcpy(regs, exec_regs, HOST_FRAME_SIZE * sizeof(unsigned long));
76 if(fp_regs != NULL)
77 memcpy(fp_regs, exec_fp_regs,
78 HOST_FP_SIZE * sizeof(unsigned long));
76} 79}
77 80
78void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer) 81void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer)
diff --git a/arch/um/sys-i386/ldt.c b/arch/um/sys-i386/ldt.c
index 0cdfd4481d5e..fe0877b3509c 100644
--- a/arch/um/sys-i386/ldt.c
+++ b/arch/um/sys-i386/ldt.c
@@ -16,7 +16,6 @@
16#include "choose-mode.h" 16#include "choose-mode.h"
17#include "kern.h" 17#include "kern.h"
18#include "mode_kern.h" 18#include "mode_kern.h"
19#include "proc_mm.h"
20#include "os.h" 19#include "os.h"
21 20
22extern int modify_ldt(int func, void *ptr, unsigned long bytecount); 21extern int modify_ldt(int func, void *ptr, unsigned long bytecount);
@@ -90,6 +89,7 @@ out:
90#include "skas.h" 89#include "skas.h"
91#include "skas_ptrace.h" 90#include "skas_ptrace.h"
92#include "asm/mmu_context.h" 91#include "asm/mmu_context.h"
92#include "proc_mm.h"
93 93
94long write_ldt_entry(struct mm_id * mm_idp, int func, struct user_desc * desc, 94long write_ldt_entry(struct mm_id * mm_idp, int func, struct user_desc * desc,
95 void **addr, int done) 95 void **addr, int done)
@@ -107,7 +107,7 @@ long write_ldt_entry(struct mm_id * mm_idp, int func, struct user_desc * desc,
107 * So we need to switch child's mm into our userspace, then 107 * So we need to switch child's mm into our userspace, then
108 * later switch back. 108 * later switch back.
109 * 109 *
110 * Note: I'm unshure: should interrupts be disabled here? 110 * Note: I'm unsure: should interrupts be disabled here?
111 */ 111 */
112 if(!current->active_mm || current->active_mm == &init_mm || 112 if(!current->active_mm || current->active_mm == &init_mm ||
113 mm_idp != &current->active_mm->context.skas.id) 113 mm_idp != &current->active_mm->context.skas.id)
@@ -129,9 +129,7 @@ long write_ldt_entry(struct mm_id * mm_idp, int func, struct user_desc * desc,
129 pid = userspace_pid[cpu]; 129 pid = userspace_pid[cpu];
130 } 130 }
131 131
132 res = ptrace(PTRACE_LDT, pid, 0, (unsigned long) &ldt_op); 132 res = os_ptrace_ldt(pid, 0, (unsigned long) &ldt_op);
133 if(res)
134 res = errno;
135 133
136 if(proc_mm) 134 if(proc_mm)
137 put_cpu(); 135 put_cpu();
@@ -181,8 +179,7 @@ static long read_ldt_from_host(void __user * ptr, unsigned long bytecount)
181 */ 179 */
182 180
183 cpu = get_cpu(); 181 cpu = get_cpu();
184 res = ptrace(PTRACE_LDT, userspace_pid[cpu], 0, 182 res = os_ptrace_ldt(userspace_pid[cpu], 0, (unsigned long) &ptrace_ldt);
185 (unsigned long) &ptrace_ldt);
186 put_cpu(); 183 put_cpu();
187 if(res < 0) 184 if(res < 0)
188 goto out; 185 goto out;
diff --git a/arch/um/sys-x86_64/ptrace_user.c b/arch/um/sys-x86_64/ptrace_user.c
index 12e404c6fa46..b5f9c33e311e 100644
--- a/arch/um/sys-x86_64/ptrace_user.c
+++ b/arch/um/sys-x86_64/ptrace_user.c
@@ -24,6 +24,13 @@ int ptrace_setregs(long pid, unsigned long *regs)
24 return(0); 24 return(0);
25} 25}
26 26
27int ptrace_setfpregs(long pid, unsigned long *regs)
28{
29 if (ptrace(PTRACE_SETFPREGS, pid, 0, regs) < 0)
30 return -errno;
31 return 0;
32}
33
27void ptrace_pokeuser(unsigned long addr, unsigned long data) 34void ptrace_pokeuser(unsigned long addr, unsigned long data)
28{ 35{
29 panic("ptrace_pokeuser"); 36 panic("ptrace_pokeuser");
diff --git a/arch/um/sys-x86_64/user-offsets.c b/arch/um/sys-x86_64/user-offsets.c
index 5a585bfbb8c2..7bd54a921cf7 100644
--- a/arch/um/sys-x86_64/user-offsets.c
+++ b/arch/um/sys-x86_64/user-offsets.c
@@ -57,7 +57,7 @@ void foo(void)
57#endif 57#endif
58 58
59 DEFINE_LONGS(HOST_FRAME_SIZE, FRAME_SIZE); 59 DEFINE_LONGS(HOST_FRAME_SIZE, FRAME_SIZE);
60 DEFINE(HOST_FP_SIZE, 0); 60 DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
61 DEFINE(HOST_XFP_SIZE, 0); 61 DEFINE(HOST_XFP_SIZE, 0);
62 DEFINE_LONGS(HOST_RBX, RBX); 62 DEFINE_LONGS(HOST_RBX, RBX);
63 DEFINE_LONGS(HOST_RCX, RCX); 63 DEFINE_LONGS(HOST_RCX, RCX);
diff --git a/arch/v850/Kconfig b/arch/v850/Kconfig
index 04494638b963..e7fc3e500342 100644
--- a/arch/v850/Kconfig
+++ b/arch/v850/Kconfig
@@ -28,6 +28,10 @@ config GENERIC_IRQ_PROBE
28 bool 28 bool
29 default y 29 default y
30 30
31config TIME_LOW_RES
32 bool
33 default y
34
31# Turn off some random 386 crap that can affect device config 35# Turn off some random 386 crap that can affect device config
32config ISA 36config ISA
33 bool 37 bool
diff --git a/arch/v850/kernel/process.c b/arch/v850/kernel/process.c
index eb909937958b..621111ddf907 100644
--- a/arch/v850/kernel/process.c
+++ b/arch/v850/kernel/process.c
@@ -30,6 +30,9 @@
30#include <asm/system.h> 30#include <asm/system.h>
31#include <asm/pgtable.h> 31#include <asm/pgtable.h>
32 32
33void (*pm_power_off)(void) = NULL;
34EXPORT_SYMBOL(pm_power_off);
35
33extern void ret_from_fork (void); 36extern void ret_from_fork (void);
34 37
35 38
diff --git a/arch/v850/kernel/simcons.c b/arch/v850/kernel/simcons.c
index 7f0efaa025c9..3975aa02cef8 100644
--- a/arch/v850/kernel/simcons.c
+++ b/arch/v850/kernel/simcons.c
@@ -117,6 +117,7 @@ late_initcall(simcons_tty_init);
117 tty driver. */ 117 tty driver. */
118void simcons_poll_tty (struct tty_struct *tty) 118void simcons_poll_tty (struct tty_struct *tty)
119{ 119{
120 char buf[32]; /* Not the nicest way to do it but I need it correct first */
120 int flip = 0, send_break = 0; 121 int flip = 0, send_break = 0;
121 struct pollfd pfd; 122 struct pollfd pfd;
122 pfd.fd = 0; 123 pfd.fd = 0;
@@ -124,21 +125,15 @@ void simcons_poll_tty (struct tty_struct *tty)
124 125
125 if (V850_SIM_SYSCALL (poll, &pfd, 1, 0) > 0) { 126 if (V850_SIM_SYSCALL (poll, &pfd, 1, 0) > 0) {
126 if (pfd.revents & POLLIN) { 127 if (pfd.revents & POLLIN) {
127 int left = TTY_FLIPBUF_SIZE - tty->flip.count; 128 /* Real block hardware knows the transfer size before
128 129 transfer so the new tty buffering doesn't try to handle
129 if (left > 0) { 130 this rather weird simulator specific case well */
130 unsigned char *buf = tty->flip.char_buf_ptr; 131 int rd = V850_SIM_SYSCALL (read, 0, buf, 32);
131 int rd = V850_SIM_SYSCALL (read, 0, buf, left); 132 if (rd > 0) {
132 133 tty_insert_flip_string(tty, buf, rd);
133 if (rd > 0) { 134 flip = 1;
134 tty->flip.count += rd; 135 } else
135 tty->flip.char_buf_ptr += rd; 136 send_break = 1;
136 memset (tty->flip.flag_buf_ptr, 0, rd);
137 tty->flip.flag_buf_ptr += rd;
138 flip = 1;
139 } else
140 send_break = 1;
141 }
142 } else if (pfd.revents & POLLERR) 137 } else if (pfd.revents & POLLERR)
143 send_break = 1; 138 send_break = 1;
144 } 139 }
diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig
index 2f9deca31cc9..e18eb79bf855 100644
--- a/arch/x86_64/Kconfig
+++ b/arch/x86_64/Kconfig
@@ -354,21 +354,6 @@ config HPET_TIMER
354 as it is off-chip. You can find the HPET spec at 354 as it is off-chip. You can find the HPET spec at
355 <http://www.intel.com/hardwaredesign/hpetspec.htm>. 355 <http://www.intel.com/hardwaredesign/hpetspec.htm>.
356 356
357config X86_PM_TIMER
358 bool "PM timer" if EMBEDDED
359 depends on ACPI
360 default y
361 help
362 Support the ACPI PM timer for time keeping. This is slow,
363 but is useful on some chipsets without HPET on systems with more
364 than one CPU. On a single processor or single socket multi core
365 system it is normally not required.
366 When the PM timer is active 64bit vsyscalls are disabled
367 and should not be enabled (/proc/sys/kernel/vsyscall64 should
368 not be changed).
369 The kernel selects the PM timer only as a last resort, so it is
370 useful to enable just in case.
371
372config HPET_EMULATE_RTC 357config HPET_EMULATE_RTC
373 bool "Provide RTC interrupt" 358 bool "Provide RTC interrupt"
374 depends on HPET_TIMER && RTC=y 359 depends on HPET_TIMER && RTC=y
@@ -592,6 +577,7 @@ source "arch/x86_64/oprofile/Kconfig"
592 577
593config KPROBES 578config KPROBES
594 bool "Kprobes (EXPERIMENTAL)" 579 bool "Kprobes (EXPERIMENTAL)"
580 depends on EXPERIMENTAL && MODULES
595 help 581 help
596 Kprobes allows you to trap at almost any kernel address and 582 Kprobes allows you to trap at almost any kernel address and
597 execute a callback function. register_kprobe() establishes 583 execute a callback function. register_kprobe() establishes
diff --git a/arch/x86_64/Kconfig.debug b/arch/x86_64/Kconfig.debug
index fcb06a50fdd2..ea31b4c62105 100644
--- a/arch/x86_64/Kconfig.debug
+++ b/arch/x86_64/Kconfig.debug
@@ -2,13 +2,6 @@ menu "Kernel hacking"
2 2
3source "lib/Kconfig.debug" 3source "lib/Kconfig.debug"
4 4
5config INIT_DEBUG
6 bool "Debug __init statements"
7 depends on DEBUG_KERNEL
8 help
9 Fill __init and __initdata at the end of boot. This helps debugging
10 illegal uses of __init and __initdata after initialization.
11
12config DEBUG_RODATA 5config DEBUG_RODATA
13 bool "Write protect kernel read-only data structures" 6 bool "Write protect kernel read-only data structures"
14 depends on DEBUG_KERNEL 7 depends on DEBUG_KERNEL
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig
index 09a3eb743315..ce4de61ed85d 100644
--- a/arch/x86_64/defconfig
+++ b/arch/x86_64/defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-git12 3# Linux kernel version: 2.6.16-rc3-git9
4# Mon Jan 16 13:09:08 2006 4# Sat Feb 18 00:27:03 2006
5# 5#
6CONFIG_X86_64=y 6CONFIG_X86_64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -21,7 +21,6 @@ CONFIG_DMI=y
21# Code maturity level options 21# Code maturity level options
22# 22#
23CONFIG_EXPERIMENTAL=y 23CONFIG_EXPERIMENTAL=y
24CONFIG_CLEAN_COMPILE=y
25CONFIG_LOCK_KERNEL=y 24CONFIG_LOCK_KERNEL=y
26CONFIG_INIT_ENV_ARG_LIMIT=32 25CONFIG_INIT_ENV_ARG_LIMIT=32
27 26
@@ -267,6 +266,7 @@ CONFIG_NET=y
267# 266#
268# Networking options 267# Networking options
269# 268#
269# CONFIG_NETDEBUG is not set
270CONFIG_PACKET=y 270CONFIG_PACKET=y
271# CONFIG_PACKET_MMAP is not set 271# CONFIG_PACKET_MMAP is not set
272CONFIG_UNIX=y 272CONFIG_UNIX=y
@@ -310,6 +310,11 @@ CONFIG_IPV6=y
310# SCTP Configuration (EXPERIMENTAL) 310# SCTP Configuration (EXPERIMENTAL)
311# 311#
312# CONFIG_IP_SCTP is not set 312# CONFIG_IP_SCTP is not set
313
314#
315# TIPC Configuration (EXPERIMENTAL)
316#
317# CONFIG_TIPC is not set
313# CONFIG_ATM is not set 318# CONFIG_ATM is not set
314# CONFIG_BRIDGE is not set 319# CONFIG_BRIDGE is not set
315# CONFIG_VLAN_8021Q is not set 320# CONFIG_VLAN_8021Q is not set
@@ -319,11 +324,6 @@ CONFIG_IPV6=y
319# CONFIG_ATALK is not set 324# CONFIG_ATALK is not set
320# CONFIG_X25 is not set 325# CONFIG_X25 is not set
321# CONFIG_LAPB is not set 326# CONFIG_LAPB is not set
322
323#
324# TIPC Configuration (EXPERIMENTAL)
325#
326# CONFIG_TIPC is not set
327# CONFIG_NET_DIVERT is not set 327# CONFIG_NET_DIVERT is not set
328# CONFIG_ECONET is not set 328# CONFIG_ECONET is not set
329# CONFIG_WAN_ROUTER is not set 329# CONFIG_WAN_ROUTER is not set
@@ -446,7 +446,6 @@ CONFIG_BLK_DEV_PIIX=y
446# CONFIG_BLK_DEV_NS87415 is not set 446# CONFIG_BLK_DEV_NS87415 is not set
447# CONFIG_BLK_DEV_PDC202XX_OLD is not set 447# CONFIG_BLK_DEV_PDC202XX_OLD is not set
448CONFIG_BLK_DEV_PDC202XX_NEW=y 448CONFIG_BLK_DEV_PDC202XX_NEW=y
449# CONFIG_PDC202XX_FORCE is not set
450# CONFIG_BLK_DEV_SVWKS is not set 449# CONFIG_BLK_DEV_SVWKS is not set
451# CONFIG_BLK_DEV_SIIMAGE is not set 450# CONFIG_BLK_DEV_SIIMAGE is not set
452# CONFIG_BLK_DEV_SIS5513 is not set 451# CONFIG_BLK_DEV_SIS5513 is not set
@@ -573,7 +572,33 @@ CONFIG_FUSION_MAX_SGE=128
573# 572#
574# IEEE 1394 (FireWire) support 573# IEEE 1394 (FireWire) support
575# 574#
576# CONFIG_IEEE1394 is not set 575CONFIG_IEEE1394=y
576
577#
578# Subsystem Options
579#
580# CONFIG_IEEE1394_VERBOSEDEBUG is not set
581# CONFIG_IEEE1394_OUI_DB is not set
582# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
583# CONFIG_IEEE1394_EXPORT_FULL_API is not set
584
585#
586# Device Drivers
587#
588
589#
590# Texas Instruments PCILynx requires I2C
591#
592CONFIG_IEEE1394_OHCI1394=y
593
594#
595# Protocol Drivers
596#
597# CONFIG_IEEE1394_VIDEO1394 is not set
598# CONFIG_IEEE1394_SBP2 is not set
599# CONFIG_IEEE1394_ETH1394 is not set
600# CONFIG_IEEE1394_DV1394 is not set
601CONFIG_IEEE1394_RAWIO=y
577 602
578# 603#
579# I2O device support 604# I2O device support
@@ -772,6 +797,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
772# 797#
773CONFIG_SERIAL_CORE=y 798CONFIG_SERIAL_CORE=y
774CONFIG_SERIAL_CORE_CONSOLE=y 799CONFIG_SERIAL_CORE_CONSOLE=y
800# CONFIG_SERIAL_JSM is not set
775CONFIG_UNIX98_PTYS=y 801CONFIG_UNIX98_PTYS=y
776CONFIG_LEGACY_PTYS=y 802CONFIG_LEGACY_PTYS=y
777CONFIG_LEGACY_PTY_COUNT=256 803CONFIG_LEGACY_PTY_COUNT=256
@@ -871,6 +897,7 @@ CONFIG_HPET_MMAP=y
871# 897#
872CONFIG_HWMON=y 898CONFIG_HWMON=y
873# CONFIG_HWMON_VID is not set 899# CONFIG_HWMON_VID is not set
900# CONFIG_SENSORS_F71805F is not set
874# CONFIG_SENSORS_HDAPS is not set 901# CONFIG_SENSORS_HDAPS is not set
875# CONFIG_HWMON_DEBUG_CHIP is not set 902# CONFIG_HWMON_DEBUG_CHIP is not set
876 903
@@ -1098,6 +1125,11 @@ CONFIG_USB_MON=y
1098# 1125#
1099 1126
1100# 1127#
1128# EDAC - error detection and reporting (RAS)
1129#
1130# CONFIG_EDAC is not set
1131
1132#
1101# Firmware Drivers 1133# Firmware Drivers
1102# 1134#
1103# CONFIG_EDD is not set 1135# CONFIG_EDD is not set
@@ -1291,7 +1323,6 @@ CONFIG_DEBUG_FS=y
1291# CONFIG_FRAME_POINTER is not set 1323# CONFIG_FRAME_POINTER is not set
1292# CONFIG_FORCED_INLINING is not set 1324# CONFIG_FORCED_INLINING is not set
1293# CONFIG_RCU_TORTURE_TEST is not set 1325# CONFIG_RCU_TORTURE_TEST is not set
1294CONFIG_INIT_DEBUG=y
1295# CONFIG_DEBUG_RODATA is not set 1326# CONFIG_DEBUG_RODATA is not set
1296# CONFIG_IOMMU_DEBUG is not set 1327# CONFIG_IOMMU_DEBUG is not set
1297 1328
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S
index f05c2a802489..00dee176c08e 100644
--- a/arch/x86_64/ia32/ia32entry.S
+++ b/arch/x86_64/ia32/ia32entry.S
@@ -676,8 +676,8 @@ ia32_sys_call_table:
676 .quad sys_mkdirat 676 .quad sys_mkdirat
677 .quad sys_mknodat 677 .quad sys_mknodat
678 .quad sys_fchownat 678 .quad sys_fchownat
679 .quad sys_futimesat 679 .quad compat_sys_futimesat
680 .quad compat_sys_newfstatat /* 300 */ 680 .quad sys32_fstatat /* 300 */
681 .quad sys_unlinkat 681 .quad sys_unlinkat
682 .quad sys_renameat 682 .quad sys_renameat
683 .quad sys_linkat 683 .quad sys_linkat
@@ -685,6 +685,9 @@ ia32_sys_call_table:
685 .quad sys_readlinkat /* 305 */ 685 .quad sys_readlinkat /* 305 */
686 .quad sys_fchmodat 686 .quad sys_fchmodat
687 .quad sys_faccessat 687 .quad sys_faccessat
688 .quad sys_ni_syscall /* pselect6 for now */
689 .quad sys_ni_syscall /* ppoll for now */
690 .quad sys_unshare /* 310 */
688ia32_syscall_end: 691ia32_syscall_end:
689 .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8 692 .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
690 .quad ni_syscall 693 .quad ni_syscall
diff --git a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c
index 54481af5344a..2bc55af95419 100644
--- a/arch/x86_64/ia32/sys_ia32.c
+++ b/arch/x86_64/ia32/sys_ia32.c
@@ -180,6 +180,28 @@ sys32_fstat64(unsigned int fd, struct stat64 __user *statbuf)
180 return ret; 180 return ret;
181} 181}
182 182
183asmlinkage long
184sys32_fstatat(unsigned int dfd, char __user *filename,
185 struct stat64 __user* statbuf, int flag)
186{
187 struct kstat stat;
188 int error = -EINVAL;
189
190 if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
191 goto out;
192
193 if (flag & AT_SYMLINK_NOFOLLOW)
194 error = vfs_lstat_fd(dfd, filename, &stat);
195 else
196 error = vfs_stat_fd(dfd, filename, &stat);
197
198 if (!error)
199 error = cp_stat64(statbuf, &stat);
200
201out:
202 return error;
203}
204
183/* 205/*
184 * Linux/i386 didn't use to be able to handle more than 206 * Linux/i386 didn't use to be able to handle more than
185 * 4 system call parameters, so these system calls used a memory 207 * 4 system call parameters, so these system calls used a memory
diff --git a/arch/x86_64/kernel/Makefile b/arch/x86_64/kernel/Makefile
index 72fe60c20d39..a098a11e7755 100644
--- a/arch/x86_64/kernel/Makefile
+++ b/arch/x86_64/kernel/Makefile
@@ -43,7 +43,7 @@ CFLAGS_vsyscall.o := $(PROFILING) -g0
43 43
44bootflag-y += ../../i386/kernel/bootflag.o 44bootflag-y += ../../i386/kernel/bootflag.o
45cpuid-$(subst m,y,$(CONFIG_X86_CPUID)) += ../../i386/kernel/cpuid.o 45cpuid-$(subst m,y,$(CONFIG_X86_CPUID)) += ../../i386/kernel/cpuid.o
46topology-y += ../../i386/mach-default/topology.o 46topology-y += ../../i386/kernel/topology.o
47microcode-$(subst m,y,$(CONFIG_MICROCODE)) += ../../i386/kernel/microcode.o 47microcode-$(subst m,y,$(CONFIG_MICROCODE)) += ../../i386/kernel/microcode.o
48intel_cacheinfo-y += ../../i386/kernel/cpu/intel_cacheinfo.o 48intel_cacheinfo-y += ../../i386/kernel/cpu/intel_cacheinfo.o
49quirks-y += ../../i386/kernel/quirks.o 49quirks-y += ../../i386/kernel/quirks.o
diff --git a/arch/x86_64/kernel/acpi/Makefile b/arch/x86_64/kernel/acpi/Makefile
index 7da9ace890bd..4fe97071f297 100644
--- a/arch/x86_64/kernel/acpi/Makefile
+++ b/arch/x86_64/kernel/acpi/Makefile
@@ -1,3 +1,8 @@
1obj-y := boot.o 1obj-y := boot.o
2boot-y := ../../../i386/kernel/acpi/boot.o 2boot-y := ../../../i386/kernel/acpi/boot.o
3obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o 3obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o
4
5ifneq ($(CONFIG_ACPI_PROCESSOR),)
6obj-y += processor.o
7endif
8
diff --git a/arch/x86_64/kernel/acpi/processor.c b/arch/x86_64/kernel/acpi/processor.c
new file mode 100644
index 000000000000..3bdc2baa5bb1
--- /dev/null
+++ b/arch/x86_64/kernel/acpi/processor.c
@@ -0,0 +1,72 @@
1/*
2 * arch/x86_64/kernel/acpi/processor.c
3 *
4 * Copyright (C) 2005 Intel Corporation
5 * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
6 * - Added _PDC for platforms with Intel CPUs
7 */
8
9#include <linux/kernel.h>
10#include <linux/module.h>
11#include <linux/init.h>
12#include <linux/acpi.h>
13
14#include <acpi/processor.h>
15#include <asm/acpi.h>
16
17static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
18{
19 struct acpi_object_list *obj_list;
20 union acpi_object *obj;
21 u32 *buf;
22
23 /* allocate and initialize pdc. It will be used later. */
24 obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
25 if (!obj_list) {
26 printk(KERN_ERR "Memory allocation error\n");
27 return;
28 }
29
30 obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
31 if (!obj) {
32 printk(KERN_ERR "Memory allocation error\n");
33 kfree(obj_list);
34 return;
35 }
36
37 buf = kmalloc(12, GFP_KERNEL);
38 if (!buf) {
39 printk(KERN_ERR "Memory allocation error\n");
40 kfree(obj);
41 kfree(obj_list);
42 return;
43 }
44
45 buf[0] = ACPI_PDC_REVISION_ID;
46 buf[1] = 1;
47 buf[2] = ACPI_PDC_EST_CAPABILITY_SMP;
48
49 obj->type = ACPI_TYPE_BUFFER;
50 obj->buffer.length = 12;
51 obj->buffer.pointer = (u8 *) buf;
52 obj_list->count = 1;
53 obj_list->pointer = obj;
54 pr->pdc = obj_list;
55
56 return;
57}
58
59/* Initialize _PDC data based on the CPU vendor */
60void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
61{
62 unsigned int cpu = pr->id;
63 struct cpuinfo_x86 *c = cpu_data + cpu;
64
65 pr->pdc = NULL;
66 if (c->x86_vendor == X86_VENDOR_INTEL && cpu_has(c, X86_FEATURE_EST))
67 init_intel_pdc(pr, c);
68
69 return;
70}
71
72EXPORT_SYMBOL(arch_acpi_processor_init_pdc);
diff --git a/arch/x86_64/kernel/aperture.c b/arch/x86_64/kernel/aperture.c
index e4e2b7d01f89..a0f955b9995f 100644
--- a/arch/x86_64/kernel/aperture.c
+++ b/arch/x86_64/kernel/aperture.c
@@ -248,7 +248,7 @@ void __init iommu_hole_init(void)
248 /* Got the aperture from the AGP bridge */ 248 /* Got the aperture from the AGP bridge */
249 } else if (swiotlb && !valid_agp) { 249 } else if (swiotlb && !valid_agp) {
250 /* Do nothing */ 250 /* Do nothing */
251 } else if ((!no_iommu && end_pfn >= MAX_DMA32_PFN) || 251 } else if ((!no_iommu && end_pfn > MAX_DMA32_PFN) ||
252 force_iommu || 252 force_iommu ||
253 valid_agp || 253 valid_agp ||
254 fallback_aper_force) { 254 fallback_aper_force) {
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c
index 5d3c5b07b8db..e5b14c57eaa0 100644
--- a/arch/x86_64/kernel/apic.c
+++ b/arch/x86_64/kernel/apic.c
@@ -35,8 +35,12 @@
35#include <asm/mach_apic.h> 35#include <asm/mach_apic.h>
36#include <asm/nmi.h> 36#include <asm/nmi.h>
37#include <asm/idle.h> 37#include <asm/idle.h>
38#include <asm/proto.h>
39#include <asm/timex.h>
38 40
39int apic_verbosity; 41int apic_verbosity;
42int apic_runs_main_timer;
43int apic_calibrate_pmtmr __initdata;
40 44
41int disable_apic_timer __initdata; 45int disable_apic_timer __initdata;
42 46
@@ -68,6 +72,26 @@ int get_maxlvt(void)
68 return maxlvt; 72 return maxlvt;
69} 73}
70 74
75/*
76 * 'what should we do if we get a hw irq event on an illegal vector'.
77 * each architecture has to answer this themselves.
78 */
79void ack_bad_irq(unsigned int irq)
80{
81 printk("unexpected IRQ trap at vector %02x\n", irq);
82 /*
83 * Currently unexpected vectors happen only on SMP and APIC.
84 * We _must_ ack these because every local APIC has only N
85 * irq slots per priority level, and a 'hanging, unacked' IRQ
86 * holds up an irq slot - in excessive cases (when multiple
87 * unexpected vectors occur) that might lock up the APIC
88 * completely.
89 * But don't ack when the APIC is disabled. -AK
90 */
91 if (!disable_apic)
92 ack_APIC_irq();
93}
94
71void clear_local_APIC(void) 95void clear_local_APIC(void)
72{ 96{
73 int maxlvt; 97 int maxlvt;
@@ -684,7 +708,7 @@ static void setup_APIC_timer(unsigned int clocks)
684 local_irq_save(flags); 708 local_irq_save(flags);
685 709
686 /* wait for irq slice */ 710 /* wait for irq slice */
687 if (vxtime.hpet_address) { 711 if (vxtime.hpet_address && hpet_use_timer) {
688 int trigger = hpet_readl(HPET_T0_CMP); 712 int trigger = hpet_readl(HPET_T0_CMP);
689 while (hpet_readl(HPET_COUNTER) >= trigger) 713 while (hpet_readl(HPET_COUNTER) >= trigger)
690 /* do nothing */ ; 714 /* do nothing */ ;
@@ -702,9 +726,17 @@ static void setup_APIC_timer(unsigned int clocks)
702 c2 |= inb_p(0x40) << 8; 726 c2 |= inb_p(0x40) << 8;
703 } while (c2 - c1 < 300); 727 } while (c2 - c1 < 300);
704 } 728 }
705
706 __setup_APIC_LVTT(clocks); 729 __setup_APIC_LVTT(clocks);
707 730 /* Turn off PIT interrupt if we use APIC timer as main timer.
731 Only works with the PM timer right now
732 TBD fix it for HPET too. */
733 if (vxtime.mode == VXTIME_PMTMR &&
734 smp_processor_id() == boot_cpu_id &&
735 apic_runs_main_timer == 1 &&
736 !cpu_isset(boot_cpu_id, timer_interrupt_broadcast_ipi_mask)) {
737 stop_timer_interrupt();
738 apic_runs_main_timer++;
739 }
708 local_irq_restore(flags); 740 local_irq_restore(flags);
709} 741}
710 742
@@ -735,14 +767,27 @@ static int __init calibrate_APIC_clock(void)
735 __setup_APIC_LVTT(1000000000); 767 __setup_APIC_LVTT(1000000000);
736 768
737 apic_start = apic_read(APIC_TMCCT); 769 apic_start = apic_read(APIC_TMCCT);
738 rdtscl(tsc_start); 770#ifdef CONFIG_X86_PM_TIMER
739 771 if (apic_calibrate_pmtmr && pmtmr_ioport) {
740 do { 772 pmtimer_wait(5000); /* 5ms wait */
741 apic = apic_read(APIC_TMCCT); 773 apic = apic_read(APIC_TMCCT);
742 rdtscl(tsc); 774 result = (apic_start - apic) * 1000L / 5;
743 } while ((tsc - tsc_start) < TICK_COUNT && (apic - apic_start) < TICK_COUNT); 775 } else
776#endif
777 {
778 rdtscl(tsc_start);
779
780 do {
781 apic = apic_read(APIC_TMCCT);
782 rdtscl(tsc);
783 } while ((tsc - tsc_start) < TICK_COUNT &&
784 (apic - apic_start) < TICK_COUNT);
785
786 result = (apic_start - apic) * 1000L * cpu_khz /
787 (tsc - tsc_start);
788 }
789 printk("result %d\n", result);
744 790
745 result = (apic_start - apic) * 1000L * cpu_khz / (tsc - tsc_start);
746 791
747 printk(KERN_INFO "Detected %d.%03d MHz APIC timer.\n", 792 printk(KERN_INFO "Detected %d.%03d MHz APIC timer.\n",
748 result / 1000 / 1000, result / 1000 % 1000); 793 result / 1000 / 1000, result / 1000 % 1000);
@@ -872,6 +917,8 @@ void smp_local_timer_interrupt(struct pt_regs *regs)
872#ifdef CONFIG_SMP 917#ifdef CONFIG_SMP
873 update_process_times(user_mode(regs)); 918 update_process_times(user_mode(regs));
874#endif 919#endif
920 if (apic_runs_main_timer > 1 && smp_processor_id() == boot_cpu_id)
921 main_timer_handler(regs);
875 /* 922 /*
876 * We take the 'long' return path, and there every subsystem 923 * We take the 'long' return path, and there every subsystem
877 * grabs the appropriate locks (kernel lock/ irq lock). 924 * grabs the appropriate locks (kernel lock/ irq lock).
@@ -924,7 +971,7 @@ void smp_apic_timer_interrupt(struct pt_regs *regs)
924 * multi-chassis. Use available data to take a good guess. 971 * multi-chassis. Use available data to take a good guess.
925 * If in doubt, go HPET. 972 * If in doubt, go HPET.
926 */ 973 */
927__init int oem_force_hpet_timer(void) 974__cpuinit int oem_force_hpet_timer(void)
928{ 975{
929 int i, clusters, zeros; 976 int i, clusters, zeros;
930 unsigned id; 977 unsigned id;
@@ -1081,10 +1128,35 @@ static __init int setup_nolapic(char *str)
1081 1128
1082static __init int setup_noapictimer(char *str) 1129static __init int setup_noapictimer(char *str)
1083{ 1130{
1131 if (str[0] != ' ' && str[0] != 0)
1132 return -1;
1084 disable_apic_timer = 1; 1133 disable_apic_timer = 1;
1085 return 0; 1134 return 0;
1086} 1135}
1087 1136
1137static __init int setup_apicmaintimer(char *str)
1138{
1139 apic_runs_main_timer = 1;
1140 nohpet = 1;
1141 return 0;
1142}
1143__setup("apicmaintimer", setup_apicmaintimer);
1144
1145static __init int setup_noapicmaintimer(char *str)
1146{
1147 apic_runs_main_timer = -1;
1148 return 0;
1149}
1150__setup("noapicmaintimer", setup_noapicmaintimer);
1151
1152static __init int setup_apicpmtimer(char *s)
1153{
1154 apic_calibrate_pmtmr = 1;
1155 notsc_setup(NULL);
1156 return setup_apicmaintimer(NULL);
1157}
1158__setup("apicpmtimer", setup_apicpmtimer);
1159
1088/* dummy parsing: see setup.c */ 1160/* dummy parsing: see setup.c */
1089 1161
1090__setup("disableapic", setup_disableapic); 1162__setup("disableapic", setup_disableapic);
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S
index dbdba56e8faa..7c10e9009d61 100644
--- a/arch/x86_64/kernel/entry.S
+++ b/arch/x86_64/kernel/entry.S
@@ -499,7 +499,9 @@ ENTRY(stub_rt_sigreturn)
499 movq %gs:pda_irqstackptr,%rax 499 movq %gs:pda_irqstackptr,%rax
500 cmoveq %rax,%rsp /*todo This needs CFI annotation! */ 500 cmoveq %rax,%rsp /*todo This needs CFI annotation! */
501 pushq %rdi # save old stack 501 pushq %rdi # save old stack
502#ifndef CONFIG_DEBUG_INFO
502 CFI_ADJUST_CFA_OFFSET 8 503 CFI_ADJUST_CFA_OFFSET 8
504#endif
503 call \func 505 call \func
504 .endm 506 .endm
505 507
@@ -509,7 +511,9 @@ ENTRY(common_interrupt)
509 /* 0(%rsp): oldrsp-ARGOFFSET */ 511 /* 0(%rsp): oldrsp-ARGOFFSET */
510ret_from_intr: 512ret_from_intr:
511 popq %rdi 513 popq %rdi
514#ifndef CONFIG_DEBUG_INFO
512 CFI_ADJUST_CFA_OFFSET -8 515 CFI_ADJUST_CFA_OFFSET -8
516#endif
513 cli 517 cli
514 decl %gs:pda_irqcount 518 decl %gs:pda_irqcount
515#ifdef CONFIG_DEBUG_INFO 519#ifdef CONFIG_DEBUG_INFO
@@ -550,6 +554,7 @@ iret_label:
550 /* running with kernel gs */ 554 /* running with kernel gs */
551bad_iret: 555bad_iret:
552 movq $-9999,%rdi /* better code? */ 556 movq $-9999,%rdi /* better code? */
557 sti
553 jmp do_exit 558 jmp do_exit
554 .previous 559 .previous
555 560
@@ -922,7 +927,7 @@ KPROBE_ENTRY(debug)
922 .previous .text 927 .previous .text
923 928
924 /* runs on exception stack */ 929 /* runs on exception stack */
925ENTRY(nmi) 930KPROBE_ENTRY(nmi)
926 INTR_FRAME 931 INTR_FRAME
927 pushq $-1 932 pushq $-1
928 CFI_ADJUST_CFA_OFFSET 8 933 CFI_ADJUST_CFA_OFFSET 8
@@ -969,6 +974,7 @@ paranoid_schedule:
969 cli 974 cli
970 jmp paranoid_userspace 975 jmp paranoid_userspace
971 CFI_ENDPROC 976 CFI_ENDPROC
977 .previous .text
972 978
973KPROBE_ENTRY(int3) 979KPROBE_ENTRY(int3)
974 INTR_FRAME 980 INTR_FRAME
diff --git a/arch/x86_64/kernel/head.S b/arch/x86_64/kernel/head.S
index 692c737feddb..02fc7fa0ea28 100644
--- a/arch/x86_64/kernel/head.S
+++ b/arch/x86_64/kernel/head.S
@@ -213,6 +213,11 @@ ENTRY(early_idt_handler)
213 cmpl $2,early_recursion_flag(%rip) 213 cmpl $2,early_recursion_flag(%rip)
214 jz 1f 214 jz 1f
215 call dump_stack 215 call dump_stack
216#ifdef CONFIG_KALLSYMS
217 leaq early_idt_ripmsg(%rip),%rdi
218 movq 8(%rsp),%rsi # get rip again
219 call __print_symbol
220#endif
2161: hlt 2211: hlt
217 jmp 1b 222 jmp 1b
218early_recursion_flag: 223early_recursion_flag:
@@ -220,6 +225,8 @@ early_recursion_flag:
220 225
221early_idt_msg: 226early_idt_msg:
222 .asciz "PANIC: early exception rip %lx error %lx cr2 %lx\n" 227 .asciz "PANIC: early exception rip %lx error %lx cr2 %lx\n"
228early_idt_ripmsg:
229 .asciz "RIP %s\n"
223 230
224.code32 231.code32
225ENTRY(no_long_mode) 232ENTRY(no_long_mode)
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
index e8cf44ef8778..ffed464e6b12 100644
--- a/arch/x86_64/kernel/io_apic.c
+++ b/arch/x86_64/kernel/io_apic.c
@@ -30,6 +30,9 @@
30#include <linux/mc146818rtc.h> 30#include <linux/mc146818rtc.h>
31#include <linux/acpi.h> 31#include <linux/acpi.h>
32#include <linux/sysdev.h> 32#include <linux/sysdev.h>
33#ifdef CONFIG_ACPI
34#include <acpi/acpi_bus.h>
35#endif
33 36
34#include <asm/io.h> 37#include <asm/io.h>
35#include <asm/smp.h> 38#include <asm/smp.h>
@@ -47,6 +50,8 @@ static int no_timer_check;
47 50
48int disable_timer_pin_1 __initdata; 51int disable_timer_pin_1 __initdata;
49 52
53int timer_over_8254 __initdata = 1;
54
50/* Where if anywhere is the i8259 connect in external int mode */ 55/* Where if anywhere is the i8259 connect in external int mode */
51static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; 56static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
52 57
@@ -248,6 +253,20 @@ static int __init enable_ioapic_setup(char *str)
248__setup("noapic", disable_ioapic_setup); 253__setup("noapic", disable_ioapic_setup);
249__setup("apic", enable_ioapic_setup); 254__setup("apic", enable_ioapic_setup);
250 255
256static int __init setup_disable_8254_timer(char *s)
257{
258 timer_over_8254 = -1;
259 return 1;
260}
261static int __init setup_enable_8254_timer(char *s)
262{
263 timer_over_8254 = 2;
264 return 1;
265}
266
267__setup("disable_8254_timer", setup_disable_8254_timer);
268__setup("enable_8254_timer", setup_enable_8254_timer);
269
251#include <asm/pci-direct.h> 270#include <asm/pci-direct.h>
252#include <linux/pci_ids.h> 271#include <linux/pci_ids.h>
253#include <linux/pci.h> 272#include <linux/pci.h>
@@ -260,6 +279,8 @@ __setup("apic", enable_ioapic_setup);
260 279
261 And another hack to disable the IOMMU on VIA chipsets. 280 And another hack to disable the IOMMU on VIA chipsets.
262 281
282 ... and others. Really should move this somewhere else.
283
263 Kludge-O-Rama. */ 284 Kludge-O-Rama. */
264void __init check_ioapic(void) 285void __init check_ioapic(void)
265{ 286{
@@ -304,8 +325,20 @@ void __init check_ioapic(void)
304#endif 325#endif
305 /* RED-PEN skip them on mptables too? */ 326 /* RED-PEN skip them on mptables too? */
306 return; 327 return;
328
329 /* This should be actually default, but
330 for 2.6.16 let's do it for ATI only where
331 it's really needed. */
332 case PCI_VENDOR_ID_ATI:
333 if (timer_over_8254 == 1) {
334 timer_over_8254 = 0;
335 printk(KERN_INFO
336 "ATI board detected. Disabling timer routing over 8254.\n");
337 }
338 return;
307 } 339 }
308 340
341
309 /* No multi-function device? */ 342 /* No multi-function device? */
310 type = read_pci_config_byte(num,slot,func, 343 type = read_pci_config_byte(num,slot,func,
311 PCI_HEADER_TYPE); 344 PCI_HEADER_TYPE);
@@ -1749,6 +1782,8 @@ static inline void unlock_ExtINT_logic(void)
1749 * a wide range of boards and BIOS bugs. Fortunately only the timer IRQ 1782 * a wide range of boards and BIOS bugs. Fortunately only the timer IRQ
1750 * is so screwy. Thanks to Brian Perkins for testing/hacking this beast 1783 * is so screwy. Thanks to Brian Perkins for testing/hacking this beast
1751 * fanatically on his truly buggy board. 1784 * fanatically on his truly buggy board.
1785 *
1786 * FIXME: really need to revamp this for modern platforms only.
1752 */ 1787 */
1753static inline void check_timer(void) 1788static inline void check_timer(void)
1754{ 1789{
@@ -1771,7 +1806,8 @@ static inline void check_timer(void)
1771 */ 1806 */
1772 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); 1807 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
1773 init_8259A(1); 1808 init_8259A(1);
1774 enable_8259A_irq(0); 1809 if (timer_over_8254 > 0)
1810 enable_8259A_irq(0);
1775 1811
1776 pin1 = find_isa_irq_pin(0, mp_INT); 1812 pin1 = find_isa_irq_pin(0, mp_INT);
1777 apic1 = find_isa_irq_apic(0, mp_INT); 1813 apic1 = find_isa_irq_apic(0, mp_INT);
@@ -1826,7 +1862,7 @@ static inline void check_timer(void)
1826 } 1862 }
1827 printk(" failed.\n"); 1863 printk(" failed.\n");
1828 1864
1829 if (nmi_watchdog) { 1865 if (nmi_watchdog == NMI_IO_APIC) {
1830 printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); 1866 printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n");
1831 nmi_watchdog = 0; 1867 nmi_watchdog = 0;
1832 } 1868 }
@@ -2027,7 +2063,7 @@ int __init io_apic_get_redir_entries (int ioapic)
2027} 2063}
2028 2064
2029 2065
2030int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low) 2066int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity)
2031{ 2067{
2032 struct IO_APIC_route_entry entry; 2068 struct IO_APIC_route_entry entry;
2033 unsigned long flags; 2069 unsigned long flags;
@@ -2049,8 +2085,8 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
2049 entry.delivery_mode = INT_DELIVERY_MODE; 2085 entry.delivery_mode = INT_DELIVERY_MODE;
2050 entry.dest_mode = INT_DEST_MODE; 2086 entry.dest_mode = INT_DEST_MODE;
2051 entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); 2087 entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS);
2052 entry.trigger = edge_level; 2088 entry.trigger = triggering;
2053 entry.polarity = active_high_low; 2089 entry.polarity = polarity;
2054 entry.mask = 1; /* Disabled (masked) */ 2090 entry.mask = 1; /* Disabled (masked) */
2055 2091
2056 irq = gsi_irq_sharing(irq); 2092 irq = gsi_irq_sharing(irq);
@@ -2065,9 +2101,9 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
2065 apic_printk(APIC_VERBOSE,KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> " 2101 apic_printk(APIC_VERBOSE,KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> "
2066 "IRQ %d Mode:%i Active:%i)\n", ioapic, 2102 "IRQ %d Mode:%i Active:%i)\n", ioapic,
2067 mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq, 2103 mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq,
2068 edge_level, active_high_low); 2104 triggering, polarity);
2069 2105
2070 ioapic_register_intr(irq, entry.vector, edge_level); 2106 ioapic_register_intr(irq, entry.vector, triggering);
2071 2107
2072 if (!ioapic && (irq < 16)) 2108 if (!ioapic && (irq < 16))
2073 disable_8259A_irq(irq); 2109 disable_8259A_irq(irq);
diff --git a/arch/x86_64/kernel/machine_kexec.c b/arch/x86_64/kernel/machine_kexec.c
index 89fab51e20f4..25ac8a3faae6 100644
--- a/arch/x86_64/kernel/machine_kexec.c
+++ b/arch/x86_64/kernel/machine_kexec.c
@@ -140,7 +140,7 @@ static void load_segments(void)
140 "\tmovl %0,%%ss\n" 140 "\tmovl %0,%%ss\n"
141 "\tmovl %0,%%fs\n" 141 "\tmovl %0,%%fs\n"
142 "\tmovl %0,%%gs\n" 142 "\tmovl %0,%%gs\n"
143 : : "a" (__KERNEL_DS) 143 : : "a" (__KERNEL_DS) : "memory"
144 ); 144 );
145} 145}
146 146
diff --git a/arch/x86_64/kernel/mce.c b/arch/x86_64/kernel/mce.c
index 13a2eada6c95..b8b9529fa89e 100644
--- a/arch/x86_64/kernel/mce.c
+++ b/arch/x86_64/kernel/mce.c
@@ -380,7 +380,7 @@ static void __cpuinit mce_cpu_features(struct cpuinfo_x86 *c)
380 */ 380 */
381void __cpuinit mcheck_init(struct cpuinfo_x86 *c) 381void __cpuinit mcheck_init(struct cpuinfo_x86 *c)
382{ 382{
383 static cpumask_t mce_cpus __initdata = CPU_MASK_NONE; 383 static cpumask_t mce_cpus = CPU_MASK_NONE;
384 384
385 mce_cpu_quirks(c); 385 mce_cpu_quirks(c);
386 386
diff --git a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c
index 1105250bf02c..9013a90b5c2e 100644
--- a/arch/x86_64/kernel/mpparse.c
+++ b/arch/x86_64/kernel/mpparse.c
@@ -288,9 +288,9 @@ static int __init smp_read_mpc(struct mp_config_table *mpc)
288 288
289 memcpy(str,mpc->mpc_productid,12); 289 memcpy(str,mpc->mpc_productid,12);
290 str[12]=0; 290 str[12]=0;
291 printk(KERN_INFO "Product ID: %s ",str); 291 printk("Product ID: %s ",str);
292 292
293 printk(KERN_INFO "APIC at: 0x%X\n",mpc->mpc_lapic); 293 printk("APIC at: 0x%X\n",mpc->mpc_lapic);
294 294
295 /* save the local APIC address, it might be non-default */ 295 /* save the local APIC address, it might be non-default */
296 if (!acpi_lapic) 296 if (!acpi_lapic)
@@ -915,7 +915,7 @@ void __init mp_config_acpi_legacy_irqs (void)
915 915
916#define MAX_GSI_NUM 4096 916#define MAX_GSI_NUM 4096
917 917
918int mp_register_gsi(u32 gsi, int edge_level, int active_high_low) 918int mp_register_gsi(u32 gsi, int triggering, int polarity)
919{ 919{
920 int ioapic = -1; 920 int ioapic = -1;
921 int ioapic_pin = 0; 921 int ioapic_pin = 0;
@@ -964,7 +964,7 @@ int mp_register_gsi(u32 gsi, int edge_level, int active_high_low)
964 964
965 mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit); 965 mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit);
966 966
967 if (edge_level) { 967 if (triggering == ACPI_LEVEL_SENSITIVE) {
968 /* 968 /*
969 * For PCI devices assign IRQs in order, avoiding gaps 969 * For PCI devices assign IRQs in order, avoiding gaps
970 * due to unused I/O APIC pins. 970 * due to unused I/O APIC pins.
@@ -986,8 +986,8 @@ int mp_register_gsi(u32 gsi, int edge_level, int active_high_low)
986 } 986 }
987 987
988 io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, 988 io_apic_set_pci_routing(ioapic, ioapic_pin, gsi,
989 edge_level == ACPI_EDGE_SENSITIVE ? 0 : 1, 989 triggering == ACPI_EDGE_SENSITIVE ? 0 : 1,
990 active_high_low == ACPI_ACTIVE_HIGH ? 0 : 1); 990 polarity == ACPI_ACTIVE_HIGH ? 0 : 1);
991 return gsi; 991 return gsi;
992} 992}
993 993
diff --git a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c
index 5fae6f0cd994..5bf17e41cd2d 100644
--- a/arch/x86_64/kernel/nmi.c
+++ b/arch/x86_64/kernel/nmi.c
@@ -24,6 +24,7 @@
24#include <linux/sysdev.h> 24#include <linux/sysdev.h>
25#include <linux/nmi.h> 25#include <linux/nmi.h>
26#include <linux/sysctl.h> 26#include <linux/sysctl.h>
27#include <linux/kprobes.h>
27 28
28#include <asm/smp.h> 29#include <asm/smp.h>
29#include <asm/mtrr.h> 30#include <asm/mtrr.h>
@@ -235,6 +236,7 @@ static void enable_lapic_nmi_watchdog(void)
235{ 236{
236 if (nmi_active < 0) { 237 if (nmi_active < 0) {
237 nmi_watchdog = NMI_LOCAL_APIC; 238 nmi_watchdog = NMI_LOCAL_APIC;
239 touch_nmi_watchdog();
238 setup_apic_nmi_watchdog(); 240 setup_apic_nmi_watchdog();
239 } 241 }
240} 242}
@@ -455,20 +457,22 @@ static DEFINE_PER_CPU(int, nmi_touch);
455 457
456void touch_nmi_watchdog (void) 458void touch_nmi_watchdog (void)
457{ 459{
458 int i; 460 if (nmi_watchdog > 0) {
461 unsigned cpu;
459 462
460 /* 463 /*
461 * Tell other CPUs to reset their alert counters. We cannot 464 * Tell other CPUs to reset their alert counters. We cannot
462 * do it ourselves because the alert count increase is not 465 * do it ourselves because the alert count increase is not
463 * atomic. 466 * atomic.
464 */ 467 */
465 for (i = 0; i < NR_CPUS; i++) 468 for_each_present_cpu (cpu)
466 per_cpu(nmi_touch, i) = 1; 469 per_cpu(nmi_touch, cpu) = 1;
470 }
467 471
468 touch_softlockup_watchdog(); 472 touch_softlockup_watchdog();
469} 473}
470 474
471void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason) 475void __kprobes nmi_watchdog_tick(struct pt_regs * regs, unsigned reason)
472{ 476{
473 int sum; 477 int sum;
474 int touched = 0; 478 int touched = 0;
@@ -512,14 +516,14 @@ void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason)
512 } 516 }
513} 517}
514 518
515static int dummy_nmi_callback(struct pt_regs * regs, int cpu) 519static __kprobes int dummy_nmi_callback(struct pt_regs * regs, int cpu)
516{ 520{
517 return 0; 521 return 0;
518} 522}
519 523
520static nmi_callback_t nmi_callback = dummy_nmi_callback; 524static nmi_callback_t nmi_callback = dummy_nmi_callback;
521 525
522asmlinkage void do_nmi(struct pt_regs * regs, long error_code) 526asmlinkage __kprobes void do_nmi(struct pt_regs * regs, long error_code)
523{ 527{
524 int cpu = safe_smp_processor_id(); 528 int cpu = safe_smp_processor_id();
525 529
diff --git a/arch/x86_64/kernel/pci-dma.c b/arch/x86_64/kernel/pci-dma.c
index 2f5d8328e2b9..4ed391edd47a 100644
--- a/arch/x86_64/kernel/pci-dma.c
+++ b/arch/x86_64/kernel/pci-dma.c
@@ -107,6 +107,9 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
107 goto again; 107 goto again;
108 } 108 }
109 109
110 /* Let low level make its own zone decisions */
111 gfp &= ~(GFP_DMA32|GFP_DMA);
112
110 if (dma_ops->alloc_coherent) 113 if (dma_ops->alloc_coherent)
111 return dma_ops->alloc_coherent(dev, size, 114 return dma_ops->alloc_coherent(dev, size,
112 dma_handle, gfp); 115 dma_handle, gfp);
diff --git a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c
index c37fc7726ba6..0c3f052ba6ce 100644
--- a/arch/x86_64/kernel/pci-gart.c
+++ b/arch/x86_64/kernel/pci-gart.c
@@ -228,11 +228,6 @@ static inline int need_iommu(struct device *dev, unsigned long addr, size_t size
228 int mmu = high; 228 int mmu = high;
229 if (force_iommu) 229 if (force_iommu)
230 mmu = 1; 230 mmu = 1;
231 if (no_iommu) {
232 if (high)
233 panic("PCI-DMA: high address but no IOMMU.\n");
234 mmu = 0;
235 }
236 return mmu; 231 return mmu;
237} 232}
238 233
@@ -241,11 +236,6 @@ static inline int nonforced_iommu(struct device *dev, unsigned long addr, size_t
241 u64 mask = *dev->dma_mask; 236 u64 mask = *dev->dma_mask;
242 int high = addr + size >= mask; 237 int high = addr + size >= mask;
243 int mmu = high; 238 int mmu = high;
244 if (no_iommu) {
245 if (high)
246 panic("PCI-DMA: high address but no IOMMU.\n");
247 mmu = 0;
248 }
249 return mmu; 239 return mmu;
250} 240}
251 241
@@ -379,7 +369,7 @@ static int __dma_map_cont(struct scatterlist *sg, int start, int stopat,
379 SET_LEAK(iommu_page); 369 SET_LEAK(iommu_page);
380 addr += PAGE_SIZE; 370 addr += PAGE_SIZE;
381 iommu_page++; 371 iommu_page++;
382 } 372 }
383 } 373 }
384 BUG_ON(iommu_page - iommu_start != pages); 374 BUG_ON(iommu_page - iommu_start != pages);
385 return 0; 375 return 0;
@@ -457,9 +447,12 @@ int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, int dir)
457error: 447error:
458 flush_gart(NULL); 448 flush_gart(NULL);
459 gart_unmap_sg(dev, sg, nents, dir); 449 gart_unmap_sg(dev, sg, nents, dir);
460 /* When it was forced try again unforced */ 450 /* When it was forced or merged try again in a dumb way */
461 if (force_iommu) 451 if (force_iommu || iommu_merge) {
462 return dma_map_sg_nonforce(dev, sg, nents, dir); 452 out = dma_map_sg_nonforce(dev, sg, nents, dir);
453 if (out > 0)
454 return out;
455 }
463 if (panic_on_overflow) 456 if (panic_on_overflow)
464 panic("dma_map_sg: overflow on %lu pages\n", pages); 457 panic("dma_map_sg: overflow on %lu pages\n", pages);
465 iommu_full(dev, pages << PAGE_SHIFT, dir); 458 iommu_full(dev, pages << PAGE_SHIFT, dir);
@@ -631,20 +624,25 @@ static int __init pci_iommu_init(void)
631 (agp_copy_info(agp_bridge, &info) < 0); 624 (agp_copy_info(agp_bridge, &info) < 0);
632#endif 625#endif
633 626
634 if (swiotlb) { 627 if (swiotlb)
635 no_iommu = 1;
636 return -1; 628 return -1;
637 } 629
638
639 if (no_iommu || 630 if (no_iommu ||
640 (!force_iommu && end_pfn <= MAX_DMA32_PFN) || 631 (!force_iommu && end_pfn <= MAX_DMA32_PFN) ||
641 !iommu_aperture || 632 !iommu_aperture ||
642 (no_agp && init_k8_gatt(&info) < 0)) { 633 (no_agp && init_k8_gatt(&info) < 0)) {
643 no_iommu = 1; 634 printk(KERN_INFO "PCI-DMA: Disabling IOMMU.\n");
644 no_iommu_init(); 635 if (end_pfn > MAX_DMA32_PFN) {
636 printk(KERN_ERR "WARNING more than 4GB of memory "
637 "but IOMMU not compiled in.\n"
638 KERN_ERR "WARNING 32bit PCI may malfunction.\n"
639 KERN_ERR "You might want to enable "
640 "CONFIG_GART_IOMMU\n");
641 }
645 return -1; 642 return -1;
646 } 643 }
647 644
645 printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n");
648 aper_size = info.aper_size * 1024 * 1024; 646 aper_size = info.aper_size * 1024 * 1024;
649 iommu_size = check_iommu_size(info.aper_base, aper_size); 647 iommu_size = check_iommu_size(info.aper_base, aper_size);
650 iommu_pages = iommu_size >> PAGE_SHIFT; 648 iommu_pages = iommu_size >> PAGE_SHIFT;
@@ -718,7 +716,6 @@ static int __init pci_iommu_init(void)
718 716
719 flush_gart(NULL); 717 flush_gart(NULL);
720 718
721 printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n");
722 dma_ops = &gart_dma_ops; 719 dma_ops = &gart_dma_ops;
723 720
724 return 0; 721 return 0;
diff --git a/arch/x86_64/kernel/pci-nommu.c b/arch/x86_64/kernel/pci-nommu.c
index e41564975195..44adcc2d5e5b 100644
--- a/arch/x86_64/kernel/pci-nommu.c
+++ b/arch/x86_64/kernel/pci-nommu.c
@@ -88,12 +88,5 @@ void __init no_iommu_init(void)
88{ 88{
89 if (dma_ops) 89 if (dma_ops)
90 return; 90 return;
91 printk(KERN_INFO "PCI-DMA: Disabling IOMMU.\n");
92 dma_ops = &nommu_dma_ops; 91 dma_ops = &nommu_dma_ops;
93 if (end_pfn > MAX_DMA32_PFN) {
94 printk(KERN_ERR
95 "WARNING more than 4GB of memory but IOMMU not compiled in.\n"
96 KERN_ERR "WARNING 32bit PCI may malfunction.\n"
97 KERN_ERR "You might want to enable CONFIG_GART_IOMMU\n");
98 }
99} 92}
diff --git a/arch/x86_64/kernel/pci-swiotlb.c b/arch/x86_64/kernel/pci-swiotlb.c
index 3569a25ad7fb..990ed67896f2 100644
--- a/arch/x86_64/kernel/pci-swiotlb.c
+++ b/arch/x86_64/kernel/pci-swiotlb.c
@@ -35,8 +35,8 @@ void pci_swiotlb_init(void)
35 (end_pfn > MAX_DMA32_PFN || force_iommu)) 35 (end_pfn > MAX_DMA32_PFN || force_iommu))
36 swiotlb = 1; 36 swiotlb = 1;
37 if (swiotlb) { 37 if (swiotlb) {
38 swiotlb_init();
39 printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n"); 38 printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n");
39 swiotlb_init();
40 dma_ops = &swiotlb_dma_ops; 40 dma_ops = &swiotlb_dma_ops;
41 } 41 }
42} 42}
diff --git a/arch/x86_64/kernel/pmtimer.c b/arch/x86_64/kernel/pmtimer.c
index feb5f108dd26..5c51d10408a6 100644
--- a/arch/x86_64/kernel/pmtimer.c
+++ b/arch/x86_64/kernel/pmtimer.c
@@ -80,6 +80,31 @@ int pmtimer_mark_offset(void)
80 return lost - 1; 80 return lost - 1;
81} 81}
82 82
83static unsigned pmtimer_wait_tick(void)
84{
85 u32 a, b;
86 for (a = b = inl(pmtmr_ioport) & ACPI_PM_MASK;
87 a == b;
88 b = inl(pmtmr_ioport) & ACPI_PM_MASK)
89 ;
90 return b;
91}
92
93/* note: wait time is rounded up to one tick */
94void pmtimer_wait(unsigned us)
95{
96 u32 a, b;
97 a = pmtimer_wait_tick();
98 do {
99 b = inl(pmtmr_ioport);
100 } while (cyc2us(b - a) < us);
101}
102
103void pmtimer_resume(void)
104{
105 last_pmtmr_tick = inl(pmtmr_ioport);
106}
107
83unsigned int do_gettimeoffset_pm(void) 108unsigned int do_gettimeoffset_pm(void)
84{ 109{
85 u32 now, offset, delta = 0; 110 u32 now, offset, delta = 0;
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c
index 8ded407e4a94..22a05dec81a2 100644
--- a/arch/x86_64/kernel/process.c
+++ b/arch/x86_64/kernel/process.c
@@ -516,8 +516,10 @@ out:
516 * This could still be optimized: 516 * This could still be optimized:
517 * - fold all the options into a flag word and test it with a single test. 517 * - fold all the options into a flag word and test it with a single test.
518 * - could test fs/gs bitsliced 518 * - could test fs/gs bitsliced
519 *
520 * Kprobes not supported here. Set the probe on schedule instead.
519 */ 521 */
520struct task_struct * 522__kprobes struct task_struct *
521__switch_to(struct task_struct *prev_p, struct task_struct *next_p) 523__switch_to(struct task_struct *prev_p, struct task_struct *next_p)
522{ 524{
523 struct thread_struct *prev = &prev_p->thread, 525 struct thread_struct *prev = &prev_p->thread,
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c
index 28895c03cb11..aa55e3cec665 100644
--- a/arch/x86_64/kernel/setup.c
+++ b/arch/x86_64/kernel/setup.c
@@ -94,7 +94,6 @@ unsigned long saved_video_mode;
94/* 94/*
95 * Setup options 95 * Setup options
96 */ 96 */
97struct drive_info_struct { char dummy[32]; } drive_info;
98struct screen_info screen_info; 97struct screen_info screen_info;
99struct sys_desc_table_struct { 98struct sys_desc_table_struct {
100 unsigned short length; 99 unsigned short length;
@@ -424,6 +423,12 @@ static __init void parse_cmdline_early (char ** cmdline_p)
424 else if(!memcmp(from, "elfcorehdr=", 11)) 423 else if(!memcmp(from, "elfcorehdr=", 11))
425 elfcorehdr_addr = memparse(from+11, &from); 424 elfcorehdr_addr = memparse(from+11, &from);
426#endif 425#endif
426
427#ifdef CONFIG_HOTPLUG_CPU
428 else if (!memcmp(from, "additional_cpus=", 16))
429 setup_additional_cpus(from+16);
430#endif
431
427 next_char: 432 next_char:
428 c = *(from++); 433 c = *(from++);
429 if (!c) 434 if (!c)
@@ -572,7 +577,6 @@ void __init setup_arch(char **cmdline_p)
572 unsigned long kernel_end; 577 unsigned long kernel_end;
573 578
574 ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); 579 ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV);
575 drive_info = DRIVE_INFO;
576 screen_info = SCREEN_INFO; 580 screen_info = SCREEN_INFO;
577 edid_info = EDID_INFO; 581 edid_info = EDID_INFO;
578 saved_video_mode = SAVED_VIDEO_MODE; 582 saved_video_mode = SAVED_VIDEO_MODE;
@@ -741,7 +745,7 @@ void __init setup_arch(char **cmdline_p)
741 e820_setup_gap(); 745 e820_setup_gap();
742 746
743#ifdef CONFIG_GART_IOMMU 747#ifdef CONFIG_GART_IOMMU
744 iommu_hole_init(); 748 iommu_hole_init();
745#endif 749#endif
746 750
747#ifdef CONFIG_VT 751#ifdef CONFIG_VT
@@ -877,6 +881,7 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
877static int __init init_amd(struct cpuinfo_x86 *c) 881static int __init init_amd(struct cpuinfo_x86 *c)
878{ 882{
879 int r; 883 int r;
884 unsigned level;
880 885
881#ifdef CONFIG_SMP 886#ifdef CONFIG_SMP
882 unsigned long value; 887 unsigned long value;
@@ -899,6 +904,11 @@ static int __init init_amd(struct cpuinfo_x86 *c)
899 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ 904 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
900 clear_bit(0*32+31, &c->x86_capability); 905 clear_bit(0*32+31, &c->x86_capability);
901 906
907 /* On C+ stepping K8 rep microcode works well for copy/memset */
908 level = cpuid_eax(1);
909 if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58))
910 set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
911
902 r = get_model_name(c); 912 r = get_model_name(c);
903 if (!r) { 913 if (!r) {
904 switch (c->x86) { 914 switch (c->x86) {
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c
index a28756ef7cef..66e98659d077 100644
--- a/arch/x86_64/kernel/smpboot.c
+++ b/arch/x86_64/kernel/smpboot.c
@@ -59,6 +59,7 @@
59#include <asm/nmi.h> 59#include <asm/nmi.h>
60#include <asm/irq.h> 60#include <asm/irq.h>
61#include <asm/hw_irq.h> 61#include <asm/hw_irq.h>
62#include <asm/numa.h>
62 63
63/* Number of siblings per CPU package */ 64/* Number of siblings per CPU package */
64int smp_num_siblings = 1; 65int smp_num_siblings = 1;
@@ -890,6 +891,7 @@ do_rest:
890 if (boot_error) { 891 if (boot_error) {
891 cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */ 892 cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */
892 clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */ 893 clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
894 clear_node_cpumask(cpu); /* was set by numa_add_cpu */
893 cpu_clear(cpu, cpu_present_map); 895 cpu_clear(cpu, cpu_present_map);
894 cpu_clear(cpu, cpu_possible_map); 896 cpu_clear(cpu, cpu_possible_map);
895 x86_cpu_to_apicid[cpu] = BAD_APICID; 897 x86_cpu_to_apicid[cpu] = BAD_APICID;
@@ -1150,8 +1152,6 @@ void __init smp_cpus_done(unsigned int max_cpus)
1150 setup_ioapic_dest(); 1152 setup_ioapic_dest();
1151#endif 1153#endif
1152 1154
1153 time_init_gtod();
1154
1155 check_nmi_watchdog(); 1155 check_nmi_watchdog();
1156} 1156}
1157 1157
@@ -1187,6 +1187,7 @@ void remove_cpu_from_maps(void)
1187 cpu_clear(cpu, cpu_callout_map); 1187 cpu_clear(cpu, cpu_callout_map);
1188 cpu_clear(cpu, cpu_callin_map); 1188 cpu_clear(cpu, cpu_callin_map);
1189 clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */ 1189 clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
1190 clear_node_cpumask(cpu);
1190} 1191}
1191 1192
1192int __cpu_disable(void) 1193int __cpu_disable(void)
@@ -1241,7 +1242,7 @@ void __cpu_die(unsigned int cpu)
1241 printk(KERN_ERR "CPU %u didn't die...\n", cpu); 1242 printk(KERN_ERR "CPU %u didn't die...\n", cpu);
1242} 1243}
1243 1244
1244static __init int setup_additional_cpus(char *s) 1245__init int setup_additional_cpus(char *s)
1245{ 1246{
1246 return get_option(&s, &additional_cpus); 1247 return get_option(&s, &additional_cpus);
1247} 1248}
diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c
index f8c47c688443..3080f84bf7b7 100644
--- a/arch/x86_64/kernel/time.c
+++ b/arch/x86_64/kernel/time.c
@@ -48,10 +48,12 @@ static void cpufreq_delayed_get(void);
48extern void i8254_timer_resume(void); 48extern void i8254_timer_resume(void);
49extern int using_apic_timer; 49extern int using_apic_timer;
50 50
51static char *time_init_gtod(void);
52
51DEFINE_SPINLOCK(rtc_lock); 53DEFINE_SPINLOCK(rtc_lock);
52DEFINE_SPINLOCK(i8253_lock); 54DEFINE_SPINLOCK(i8253_lock);
53 55
54static int nohpet __initdata = 0; 56int nohpet __initdata = 0;
55static int notsc __initdata = 0; 57static int notsc __initdata = 0;
56 58
57#undef HPET_HACK_ENABLE_DANGEROUS 59#undef HPET_HACK_ENABLE_DANGEROUS
@@ -59,7 +61,7 @@ static int notsc __initdata = 0;
59unsigned int cpu_khz; /* TSC clocks / usec, not used here */ 61unsigned int cpu_khz; /* TSC clocks / usec, not used here */
60static unsigned long hpet_period; /* fsecs / HPET clock */ 62static unsigned long hpet_period; /* fsecs / HPET clock */
61unsigned long hpet_tick; /* HPET clocks / interrupt */ 63unsigned long hpet_tick; /* HPET clocks / interrupt */
62static int hpet_use_timer; /* Use counter of hpet for time keeping, otherwise PIT */ 64int hpet_use_timer; /* Use counter of hpet for time keeping, otherwise PIT */
63unsigned long vxtime_hz = PIT_TICK_RATE; 65unsigned long vxtime_hz = PIT_TICK_RATE;
64int report_lost_ticks; /* command line option */ 66int report_lost_ticks; /* command line option */
65unsigned long long monotonic_base; 67unsigned long long monotonic_base;
@@ -326,7 +328,10 @@ static noinline void handle_lost_ticks(int lost, struct pt_regs *regs)
326 print_symbol("rip %s\n", regs->rip); 328 print_symbol("rip %s\n", regs->rip);
327 if (vxtime.mode == VXTIME_TSC && vxtime.hpet_address) { 329 if (vxtime.mode == VXTIME_TSC && vxtime.hpet_address) {
328 printk(KERN_WARNING "Falling back to HPET\n"); 330 printk(KERN_WARNING "Falling back to HPET\n");
329 vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick; 331 if (hpet_use_timer)
332 vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick;
333 else
334 vxtime.last = hpet_readl(HPET_COUNTER);
330 vxtime.mode = VXTIME_HPET; 335 vxtime.mode = VXTIME_HPET;
331 do_gettimeoffset = do_gettimeoffset_hpet; 336 do_gettimeoffset = do_gettimeoffset_hpet;
332 } 337 }
@@ -345,7 +350,7 @@ static noinline void handle_lost_ticks(int lost, struct pt_regs *regs)
345#endif 350#endif
346} 351}
347 352
348static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 353void main_timer_handler(struct pt_regs *regs)
349{ 354{
350 static unsigned long rtc_update = 0; 355 static unsigned long rtc_update = 0;
351 unsigned long tsc; 356 unsigned long tsc;
@@ -458,12 +463,17 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
458 } 463 }
459 464
460 write_sequnlock(&xtime_lock); 465 write_sequnlock(&xtime_lock);
466}
461 467
468static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
469{
470 if (apic_runs_main_timer > 1)
471 return IRQ_HANDLED;
472 main_timer_handler(regs);
462#ifdef CONFIG_X86_LOCAL_APIC 473#ifdef CONFIG_X86_LOCAL_APIC
463 if (using_apic_timer) 474 if (using_apic_timer)
464 smp_send_timer_broadcast_ipi(); 475 smp_send_timer_broadcast_ipi();
465#endif 476#endif
466
467 return IRQ_HANDLED; 477 return IRQ_HANDLED;
468} 478}
469 479
@@ -743,7 +753,7 @@ static __init int late_hpet_init(void)
743 * Timer0 and Timer1 is used by platform. 753 * Timer0 and Timer1 is used by platform.
744 */ 754 */
745 hd.hd_phys_address = vxtime.hpet_address; 755 hd.hd_phys_address = vxtime.hpet_address;
746 hd.hd_address = (void *)fix_to_virt(FIX_HPET_BASE); 756 hd.hd_address = (void __iomem *)fix_to_virt(FIX_HPET_BASE);
747 hd.hd_nirqs = ntimer; 757 hd.hd_nirqs = ntimer;
748 hd.hd_flags = HPET_DATA_PLATFORM; 758 hd.hd_flags = HPET_DATA_PLATFORM;
749 hpet_reserve_timer(&hd, 0); 759 hpet_reserve_timer(&hd, 0);
@@ -843,17 +853,43 @@ static int hpet_reenable(void)
843 return hpet_timer_stop_set_go(hpet_tick); 853 return hpet_timer_stop_set_go(hpet_tick);
844} 854}
845 855
846void __init pit_init(void) 856#define PIT_MODE 0x43
857#define PIT_CH0 0x40
858
859static void __init __pit_init(int val, u8 mode)
847{ 860{
848 unsigned long flags; 861 unsigned long flags;
849 862
850 spin_lock_irqsave(&i8253_lock, flags); 863 spin_lock_irqsave(&i8253_lock, flags);
851 outb_p(0x34, 0x43); /* binary, mode 2, LSB/MSB, ch 0 */ 864 outb_p(mode, PIT_MODE);
852 outb_p(LATCH & 0xff, 0x40); /* LSB */ 865 outb_p(val & 0xff, PIT_CH0); /* LSB */
853 outb_p(LATCH >> 8, 0x40); /* MSB */ 866 outb_p(val >> 8, PIT_CH0); /* MSB */
854 spin_unlock_irqrestore(&i8253_lock, flags); 867 spin_unlock_irqrestore(&i8253_lock, flags);
855} 868}
856 869
870void __init pit_init(void)
871{
872 __pit_init(LATCH, 0x34); /* binary, mode 2, LSB/MSB, ch 0 */
873}
874
875void __init pit_stop_interrupt(void)
876{
877 __pit_init(0, 0x30); /* mode 0 */
878}
879
880void __init stop_timer_interrupt(void)
881{
882 char *name;
883 if (vxtime.hpet_address) {
884 name = "HPET";
885 hpet_timer_stop_set_go(0);
886 } else {
887 name = "PIT";
888 pit_stop_interrupt();
889 }
890 printk(KERN_INFO "timer: %s interrupt stopped.\n", name);
891}
892
857int __init time_setup(char *str) 893int __init time_setup(char *str)
858{ 894{
859 report_lost_ticks = 1; 895 report_lost_ticks = 1;
@@ -867,6 +903,7 @@ static struct irqaction irq0 = {
867void __init time_init(void) 903void __init time_init(void)
868{ 904{
869 char *timename; 905 char *timename;
906 char *gtod;
870 907
871#ifdef HPET_HACK_ENABLE_DANGEROUS 908#ifdef HPET_HACK_ENABLE_DANGEROUS
872 if (!vxtime.hpet_address) { 909 if (!vxtime.hpet_address) {
@@ -911,28 +948,26 @@ void __init time_init(void)
911 timename = "PIT"; 948 timename = "PIT";
912 } 949 }
913 950
914 printk(KERN_INFO "time.c: Using %ld.%06ld MHz %s timer.\n", 951 vxtime.mode = VXTIME_TSC;
915 vxtime_hz / 1000000, vxtime_hz % 1000000, timename); 952 gtod = time_init_gtod();
953
954 printk(KERN_INFO "time.c: Using %ld.%06ld MHz WALL %s GTOD %s timer.\n",
955 vxtime_hz / 1000000, vxtime_hz % 1000000, timename, gtod);
916 printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n", 956 printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n",
917 cpu_khz / 1000, cpu_khz % 1000); 957 cpu_khz / 1000, cpu_khz % 1000);
918 vxtime.mode = VXTIME_TSC;
919 vxtime.quot = (1000000L << 32) / vxtime_hz; 958 vxtime.quot = (1000000L << 32) / vxtime_hz;
920 vxtime.tsc_quot = (1000L << 32) / cpu_khz; 959 vxtime.tsc_quot = (1000L << 32) / cpu_khz;
921 vxtime.last_tsc = get_cycles_sync(); 960 vxtime.last_tsc = get_cycles_sync();
922 setup_irq(0, &irq0); 961 setup_irq(0, &irq0);
923 962
924 set_cyc2ns_scale(cpu_khz); 963 set_cyc2ns_scale(cpu_khz);
925
926#ifndef CONFIG_SMP
927 time_init_gtod();
928#endif
929} 964}
930 965
931/* 966/*
932 * Make an educated guess if the TSC is trustworthy and synchronized 967 * Make an educated guess if the TSC is trustworthy and synchronized
933 * over all CPUs. 968 * over all CPUs.
934 */ 969 */
935__init int unsynchronized_tsc(void) 970__cpuinit int unsynchronized_tsc(void)
936{ 971{
937#ifdef CONFIG_SMP 972#ifdef CONFIG_SMP
938 if (oem_force_hpet_timer()) 973 if (oem_force_hpet_timer())
@@ -947,9 +982,9 @@ __init int unsynchronized_tsc(void)
947} 982}
948 983
949/* 984/*
950 * Decide after all CPUs are booted what mode gettimeofday should use. 985 * Decide what mode gettimeofday should use.
951 */ 986 */
952void __init time_init_gtod(void) 987__init static char *time_init_gtod(void)
953{ 988{
954 char *timetype; 989 char *timetype;
955 990
@@ -957,7 +992,10 @@ void __init time_init_gtod(void)
957 notsc = 1; 992 notsc = 1;
958 if (vxtime.hpet_address && notsc) { 993 if (vxtime.hpet_address && notsc) {
959 timetype = hpet_use_timer ? "HPET" : "PIT/HPET"; 994 timetype = hpet_use_timer ? "HPET" : "PIT/HPET";
960 vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick; 995 if (hpet_use_timer)
996 vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick;
997 else
998 vxtime.last = hpet_readl(HPET_COUNTER);
961 vxtime.mode = VXTIME_HPET; 999 vxtime.mode = VXTIME_HPET;
962 do_gettimeoffset = do_gettimeoffset_hpet; 1000 do_gettimeoffset = do_gettimeoffset_hpet;
963#ifdef CONFIG_X86_PM_TIMER 1001#ifdef CONFIG_X86_PM_TIMER
@@ -974,8 +1012,7 @@ void __init time_init_gtod(void)
974 timetype = hpet_use_timer ? "HPET/TSC" : "PIT/TSC"; 1012 timetype = hpet_use_timer ? "HPET/TSC" : "PIT/TSC";
975 vxtime.mode = VXTIME_TSC; 1013 vxtime.mode = VXTIME_TSC;
976 } 1014 }
977 1015 return timetype;
978 printk(KERN_INFO "time.c: Using %s based timekeeping.\n", timetype);
979} 1016}
980 1017
981__setup("report_lost_ticks", time_setup); 1018__setup("report_lost_ticks", time_setup);
@@ -1016,9 +1053,21 @@ static int timer_resume(struct sys_device *dev)
1016 write_seqlock_irqsave(&xtime_lock,flags); 1053 write_seqlock_irqsave(&xtime_lock,flags);
1017 xtime.tv_sec = sec; 1054 xtime.tv_sec = sec;
1018 xtime.tv_nsec = 0; 1055 xtime.tv_nsec = 0;
1056 if (vxtime.mode == VXTIME_HPET) {
1057 if (hpet_use_timer)
1058 vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick;
1059 else
1060 vxtime.last = hpet_readl(HPET_COUNTER);
1061#ifdef CONFIG_X86_PM_TIMER
1062 } else if (vxtime.mode == VXTIME_PMTMR) {
1063 pmtimer_resume();
1064#endif
1065 } else
1066 vxtime.last_tsc = get_cycles_sync();
1019 write_sequnlock_irqrestore(&xtime_lock,flags); 1067 write_sequnlock_irqrestore(&xtime_lock,flags);
1020 jiffies += sleep_length; 1068 jiffies += sleep_length;
1021 wall_jiffies += sleep_length; 1069 wall_jiffies += sleep_length;
1070 monotonic_base += sleep_length * (NSEC_PER_SEC/HZ);
1022 touch_softlockup_watchdog(); 1071 touch_softlockup_watchdog();
1023 return 0; 1072 return 0;
1024} 1073}
@@ -1278,8 +1327,7 @@ static int __init nohpet_setup(char *s)
1278 1327
1279__setup("nohpet", nohpet_setup); 1328__setup("nohpet", nohpet_setup);
1280 1329
1281 1330int __init notsc_setup(char *s)
1282static int __init notsc_setup(char *s)
1283{ 1331{
1284 notsc = 1; 1332 notsc = 1;
1285 return 0; 1333 return 0;
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c
index 8bb0aeda78b9..28d50dc540e8 100644
--- a/arch/x86_64/kernel/traps.c
+++ b/arch/x86_64/kernel/traps.c
@@ -90,6 +90,20 @@ static inline void conditional_sti(struct pt_regs *regs)
90 local_irq_enable(); 90 local_irq_enable();
91} 91}
92 92
93static inline void preempt_conditional_sti(struct pt_regs *regs)
94{
95 preempt_disable();
96 if (regs->eflags & X86_EFLAGS_IF)
97 local_irq_enable();
98}
99
100static inline void preempt_conditional_cli(struct pt_regs *regs)
101{
102 if (regs->eflags & X86_EFLAGS_IF)
103 local_irq_disable();
104 preempt_enable_no_resched();
105}
106
93static int kstack_depth_to_print = 10; 107static int kstack_depth_to_print = 10;
94 108
95#ifdef CONFIG_KALLSYMS 109#ifdef CONFIG_KALLSYMS
@@ -372,7 +386,7 @@ void out_of_line_bug(void)
372static DEFINE_SPINLOCK(die_lock); 386static DEFINE_SPINLOCK(die_lock);
373static int die_owner = -1; 387static int die_owner = -1;
374 388
375unsigned long oops_begin(void) 389unsigned __kprobes long oops_begin(void)
376{ 390{
377 int cpu = safe_smp_processor_id(); 391 int cpu = safe_smp_processor_id();
378 unsigned long flags; 392 unsigned long flags;
@@ -391,7 +405,7 @@ unsigned long oops_begin(void)
391 return flags; 405 return flags;
392} 406}
393 407
394void oops_end(unsigned long flags) 408void __kprobes oops_end(unsigned long flags)
395{ 409{
396 die_owner = -1; 410 die_owner = -1;
397 bust_spinlocks(0); 411 bust_spinlocks(0);
@@ -400,7 +414,7 @@ void oops_end(unsigned long flags)
400 panic("Oops"); 414 panic("Oops");
401} 415}
402 416
403void __die(const char * str, struct pt_regs * regs, long err) 417void __kprobes __die(const char * str, struct pt_regs * regs, long err)
404{ 418{
405 static int die_counter; 419 static int die_counter;
406 printk(KERN_EMERG "%s: %04lx [%u] ", str, err & 0xffff,++die_counter); 420 printk(KERN_EMERG "%s: %04lx [%u] ", str, err & 0xffff,++die_counter);
@@ -432,7 +446,7 @@ void die(const char * str, struct pt_regs * regs, long err)
432 do_exit(SIGSEGV); 446 do_exit(SIGSEGV);
433} 447}
434 448
435void die_nmi(char *str, struct pt_regs *regs) 449void __kprobes die_nmi(char *str, struct pt_regs *regs)
436{ 450{
437 unsigned long flags = oops_begin(); 451 unsigned long flags = oops_begin();
438 452
@@ -575,7 +589,8 @@ asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
575 } 589 }
576} 590}
577 591
578static void mem_parity_error(unsigned char reason, struct pt_regs * regs) 592static __kprobes void
593mem_parity_error(unsigned char reason, struct pt_regs * regs)
579{ 594{
580 printk("Uhhuh. NMI received. Dazed and confused, but trying to continue\n"); 595 printk("Uhhuh. NMI received. Dazed and confused, but trying to continue\n");
581 printk("You probably have a hardware problem with your RAM chips\n"); 596 printk("You probably have a hardware problem with your RAM chips\n");
@@ -585,7 +600,8 @@ static void mem_parity_error(unsigned char reason, struct pt_regs * regs)
585 outb(reason, 0x61); 600 outb(reason, 0x61);
586} 601}
587 602
588static void io_check_error(unsigned char reason, struct pt_regs * regs) 603static __kprobes void
604io_check_error(unsigned char reason, struct pt_regs * regs)
589{ 605{
590 printk("NMI: IOCK error (debug interrupt?)\n"); 606 printk("NMI: IOCK error (debug interrupt?)\n");
591 show_registers(regs); 607 show_registers(regs);
@@ -598,7 +614,8 @@ static void io_check_error(unsigned char reason, struct pt_regs * regs)
598 outb(reason, 0x61); 614 outb(reason, 0x61);
599} 615}
600 616
601static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs) 617static __kprobes void
618unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
602{ printk("Uhhuh. NMI received for unknown reason %02x.\n", reason); 619{ printk("Uhhuh. NMI received for unknown reason %02x.\n", reason);
603 printk("Dazed and confused, but trying to continue\n"); 620 printk("Dazed and confused, but trying to continue\n");
604 printk("Do you have a strange power saving mode enabled?\n"); 621 printk("Do you have a strange power saving mode enabled?\n");
@@ -606,7 +623,7 @@ static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
606 623
607/* Runs on IST stack. This code must keep interrupts off all the time. 624/* Runs on IST stack. This code must keep interrupts off all the time.
608 Nested NMIs are prevented by the CPU. */ 625 Nested NMIs are prevented by the CPU. */
609asmlinkage void default_do_nmi(struct pt_regs *regs) 626asmlinkage __kprobes void default_do_nmi(struct pt_regs *regs)
610{ 627{
611 unsigned char reason = 0; 628 unsigned char reason = 0;
612 int cpu; 629 int cpu;
@@ -658,7 +675,7 @@ asmlinkage void __kprobes do_int3(struct pt_regs * regs, long error_code)
658/* Help handler running on IST stack to switch back to user stack 675/* Help handler running on IST stack to switch back to user stack
659 for scheduling or signal handling. The actual stack switch is done in 676 for scheduling or signal handling. The actual stack switch is done in
660 entry.S */ 677 entry.S */
661asmlinkage struct pt_regs *sync_regs(struct pt_regs *eregs) 678asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs)
662{ 679{
663 struct pt_regs *regs = eregs; 680 struct pt_regs *regs = eregs;
664 /* Did already sync */ 681 /* Did already sync */
@@ -690,7 +707,7 @@ asmlinkage void __kprobes do_debug(struct pt_regs * regs,
690 SIGTRAP) == NOTIFY_STOP) 707 SIGTRAP) == NOTIFY_STOP)
691 return; 708 return;
692 709
693 conditional_sti(regs); 710 preempt_conditional_sti(regs);
694 711
695 /* Mask out spurious debug traps due to lazy DR7 setting */ 712 /* Mask out spurious debug traps due to lazy DR7 setting */
696 if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) { 713 if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) {
@@ -735,11 +752,13 @@ asmlinkage void __kprobes do_debug(struct pt_regs * regs,
735 752
736clear_dr7: 753clear_dr7:
737 set_debugreg(0UL, 7); 754 set_debugreg(0UL, 7);
755 preempt_conditional_cli(regs);
738 return; 756 return;
739 757
740clear_TF_reenable: 758clear_TF_reenable:
741 set_tsk_thread_flag(tsk, TIF_SINGLESTEP); 759 set_tsk_thread_flag(tsk, TIF_SINGLESTEP);
742 regs->eflags &= ~TF_MASK; 760 regs->eflags &= ~TF_MASK;
761 preempt_conditional_cli(regs);
743} 762}
744 763
745static int kernel_math_error(struct pt_regs *regs, const char *str, int trapnr) 764static int kernel_math_error(struct pt_regs *regs, const char *str, int trapnr)
diff --git a/arch/x86_64/kernel/vmlinux.lds.S b/arch/x86_64/kernel/vmlinux.lds.S
index b0eed1faf740..74db0062d4a2 100644
--- a/arch/x86_64/kernel/vmlinux.lds.S
+++ b/arch/x86_64/kernel/vmlinux.lds.S
@@ -172,13 +172,15 @@ SECTIONS
172 . = ALIGN(4096); 172 . = ALIGN(4096);
173 __initramfs_start = .; 173 __initramfs_start = .;
174 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) } 174 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
175 __initramfs_end = .; 175 __initramfs_end = .;
176 . = ALIGN(32); 176 /* temporary here to work around NR_CPUS. If you see this comment in 2.6.17+
177 complain */
178 . = ALIGN(4096);
179 __init_end = .;
180 . = ALIGN(CONFIG_X86_L1_CACHE_BYTES);
177 __per_cpu_start = .; 181 __per_cpu_start = .;
178 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) } 182 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) }
179 __per_cpu_end = .; 183 __per_cpu_end = .;
180 . = ALIGN(4096);
181 __init_end = .;
182 184
183 . = ALIGN(4096); 185 . = ALIGN(4096);
184 __nosave_begin = .; 186 __nosave_begin = .;
diff --git a/arch/x86_64/kernel/x8664_ksyms.c b/arch/x86_64/kernel/x8664_ksyms.c
index b614d54d2ae4..3496abc8d372 100644
--- a/arch/x86_64/kernel/x8664_ksyms.c
+++ b/arch/x86_64/kernel/x8664_ksyms.c
@@ -39,11 +39,6 @@ extern void __write_lock_failed(rwlock_t *rw);
39extern void __read_lock_failed(rwlock_t *rw); 39extern void __read_lock_failed(rwlock_t *rw);
40#endif 40#endif
41 41
42#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
43extern struct drive_info_struct drive_info;
44EXPORT_SYMBOL(drive_info);
45#endif
46
47/* platform dependent support */ 42/* platform dependent support */
48EXPORT_SYMBOL(boot_cpu_data); 43EXPORT_SYMBOL(boot_cpu_data);
49//EXPORT_SYMBOL(dump_fpu); 44//EXPORT_SYMBOL(dump_fpu);
diff --git a/arch/x86_64/lib/Makefile b/arch/x86_64/lib/Makefile
index bba5db6cebd6..ccef6ae747a3 100644
--- a/arch/x86_64/lib/Makefile
+++ b/arch/x86_64/lib/Makefile
@@ -4,7 +4,7 @@
4 4
5CFLAGS_csum-partial.o := -funroll-loops 5CFLAGS_csum-partial.o := -funroll-loops
6 6
7obj-y := io.o 7obj-y := io.o iomap_copy.o
8 8
9lib-y := csum-partial.o csum-copy.o csum-wrappers.o delay.o \ 9lib-y := csum-partial.o csum-copy.o csum-wrappers.o delay.o \
10 usercopy.o getuser.o putuser.o \ 10 usercopy.o getuser.o putuser.o \
diff --git a/arch/x86_64/lib/clear_page.S b/arch/x86_64/lib/clear_page.S
index 43d9fa136180..1f81b79b796c 100644
--- a/arch/x86_64/lib/clear_page.S
+++ b/arch/x86_64/lib/clear_page.S
@@ -5,8 +5,46 @@
5 .globl clear_page 5 .globl clear_page
6 .p2align 4 6 .p2align 4
7clear_page: 7clear_page:
8 xorl %eax,%eax
9 movl $4096/64,%ecx
10 .p2align 4
11.Lloop:
12 decl %ecx
13#define PUT(x) movq %rax,x*8(%rdi)
14 movq %rax,(%rdi)
15 PUT(1)
16 PUT(2)
17 PUT(3)
18 PUT(4)
19 PUT(5)
20 PUT(6)
21 PUT(7)
22 leaq 64(%rdi),%rdi
23 jnz .Lloop
24 nop
25 ret
26clear_page_end:
27
28 /* Some CPUs run faster using the string instructions.
29 It is also a lot simpler. Use this when possible */
30
31#include <asm/cpufeature.h>
32
33 .section .altinstructions,"a"
34 .align 8
35 .quad clear_page
36 .quad clear_page_c
37 .byte X86_FEATURE_REP_GOOD
38 .byte clear_page_end-clear_page
39 .byte clear_page_c_end-clear_page_c
40 .previous
41
42 .section .altinstr_replacement,"ax"
43clear_page_c:
8 movl $4096/8,%ecx 44 movl $4096/8,%ecx
9 xorl %eax,%eax 45 xorl %eax,%eax
10 rep 46 rep
11 stosq 47 stosq
12 ret 48 ret
49clear_page_c_end:
50 .previous
diff --git a/arch/x86_64/lib/copy_page.S b/arch/x86_64/lib/copy_page.S
index 621a19769406..8fa19d96a7ee 100644
--- a/arch/x86_64/lib/copy_page.S
+++ b/arch/x86_64/lib/copy_page.S
@@ -8,7 +8,94 @@
8 .globl copy_page 8 .globl copy_page
9 .p2align 4 9 .p2align 4
10copy_page: 10copy_page:
11 subq $3*8,%rsp
12 movq %rbx,(%rsp)
13 movq %r12,1*8(%rsp)
14 movq %r13,2*8(%rsp)
15
16 movl $(4096/64)-5,%ecx
17 .p2align 4
18.Loop64:
19 dec %rcx
20
21 movq (%rsi), %rax
22 movq 8 (%rsi), %rbx
23 movq 16 (%rsi), %rdx
24 movq 24 (%rsi), %r8
25 movq 32 (%rsi), %r9
26 movq 40 (%rsi), %r10
27 movq 48 (%rsi), %r11
28 movq 56 (%rsi), %r12
29
30 prefetcht0 5*64(%rsi)
31
32 movq %rax, (%rdi)
33 movq %rbx, 8 (%rdi)
34 movq %rdx, 16 (%rdi)
35 movq %r8, 24 (%rdi)
36 movq %r9, 32 (%rdi)
37 movq %r10, 40 (%rdi)
38 movq %r11, 48 (%rdi)
39 movq %r12, 56 (%rdi)
40
41 leaq 64 (%rsi), %rsi
42 leaq 64 (%rdi), %rdi
43
44 jnz .Loop64
45
46 movl $5,%ecx
47 .p2align 4
48.Loop2:
49 decl %ecx
50
51 movq (%rsi), %rax
52 movq 8 (%rsi), %rbx
53 movq 16 (%rsi), %rdx
54 movq 24 (%rsi), %r8
55 movq 32 (%rsi), %r9
56 movq 40 (%rsi), %r10
57 movq 48 (%rsi), %r11
58 movq 56 (%rsi), %r12
59
60 movq %rax, (%rdi)
61 movq %rbx, 8 (%rdi)
62 movq %rdx, 16 (%rdi)
63 movq %r8, 24 (%rdi)
64 movq %r9, 32 (%rdi)
65 movq %r10, 40 (%rdi)
66 movq %r11, 48 (%rdi)
67 movq %r12, 56 (%rdi)
68
69 leaq 64(%rdi),%rdi
70 leaq 64(%rsi),%rsi
71
72 jnz .Loop2
73
74 movq (%rsp),%rbx
75 movq 1*8(%rsp),%r12
76 movq 2*8(%rsp),%r13
77 addq $3*8,%rsp
78 ret
79
80 /* Some CPUs run faster using the string copy instructions.
81 It is also a lot simpler. Use this when possible */
82
83#include <asm/cpufeature.h>
84
85 .section .altinstructions,"a"
86 .align 8
87 .quad copy_page
88 .quad copy_page_c
89 .byte X86_FEATURE_REP_GOOD
90 .byte copy_page_c_end-copy_page_c
91 .byte copy_page_c_end-copy_page_c
92 .previous
93
94 .section .altinstr_replacement,"ax"
95copy_page_c:
11 movl $4096/8,%ecx 96 movl $4096/8,%ecx
12 rep 97 rep
13 movsq 98 movsq
14 ret 99 ret
100copy_page_c_end:
101 .previous
diff --git a/arch/x86_64/lib/copy_user.S b/arch/x86_64/lib/copy_user.S
index 79422b6559c3..f64569b83b54 100644
--- a/arch/x86_64/lib/copy_user.S
+++ b/arch/x86_64/lib/copy_user.S
@@ -4,9 +4,12 @@
4 * Functions to copy from and to user space. 4 * Functions to copy from and to user space.
5 */ 5 */
6 6
7#define FIX_ALIGNMENT 1
8
7 #include <asm/current.h> 9 #include <asm/current.h>
8 #include <asm/asm-offsets.h> 10 #include <asm/asm-offsets.h>
9 #include <asm/thread_info.h> 11 #include <asm/thread_info.h>
12 #include <asm/cpufeature.h>
10 13
11/* Standard copy_to_user with segment limit checking */ 14/* Standard copy_to_user with segment limit checking */
12 .globl copy_to_user 15 .globl copy_to_user
@@ -18,7 +21,23 @@ copy_to_user:
18 jc bad_to_user 21 jc bad_to_user
19 cmpq threadinfo_addr_limit(%rax),%rcx 22 cmpq threadinfo_addr_limit(%rax),%rcx
20 jae bad_to_user 23 jae bad_to_user
21 jmp copy_user_generic 242:
25 .byte 0xe9 /* 32bit jump */
26 .long .Lcug-1f
271:
28
29 .section .altinstr_replacement,"ax"
303: .byte 0xe9 /* replacement jmp with 8 bit immediate */
31 .long copy_user_generic_c-1b /* offset */
32 .previous
33 .section .altinstructions,"a"
34 .align 8
35 .quad 2b
36 .quad 3b
37 .byte X86_FEATURE_REP_GOOD
38 .byte 5
39 .byte 5
40 .previous
22 41
23/* Standard copy_from_user with segment limit checking */ 42/* Standard copy_from_user with segment limit checking */
24 .globl copy_from_user 43 .globl copy_from_user
@@ -53,44 +72,230 @@ bad_to_user:
53 * rsi source 72 * rsi source
54 * rdx count 73 * rdx count
55 * 74 *
56 * Only 4GB of copy is supported. This shouldn't be a problem
57 * because the kernel normally only writes from/to page sized chunks
58 * even if user space passed a longer buffer.
59 * And more would be dangerous because both Intel and AMD have
60 * errata with rep movsq > 4GB. If someone feels the need to fix
61 * this please consider this.
62 *
63 * Output: 75 * Output:
64 * eax uncopied bytes or 0 if successful. 76 * eax uncopied bytes or 0 if successful.
65 */ 77 */
66
67 .globl copy_user_generic 78 .globl copy_user_generic
79 .p2align 4
68copy_user_generic: 80copy_user_generic:
81 .byte 0x66,0x66,0x90 /* 5 byte nop for replacement jump */
82 .byte 0x66,0x90
831:
84 .section .altinstr_replacement,"ax"
852: .byte 0xe9 /* near jump with 32bit immediate */
86 .long copy_user_generic_c-1b /* offset */
87 .previous
88 .section .altinstructions,"a"
89 .align 8
90 .quad copy_user_generic
91 .quad 2b
92 .byte X86_FEATURE_REP_GOOD
93 .byte 5
94 .byte 5
95 .previous
96.Lcug:
97 pushq %rbx
98 xorl %eax,%eax /*zero for the exception handler */
99
100#ifdef FIX_ALIGNMENT
101 /* check for bad alignment of destination */
102 movl %edi,%ecx
103 andl $7,%ecx
104 jnz .Lbad_alignment
105.Lafter_bad_alignment:
106#endif
107
108 movq %rdx,%rcx
109
110 movl $64,%ebx
111 shrq $6,%rdx
112 decq %rdx
113 js .Lhandle_tail
114
115 .p2align 4
116.Lloop:
117.Ls1: movq (%rsi),%r11
118.Ls2: movq 1*8(%rsi),%r8
119.Ls3: movq 2*8(%rsi),%r9
120.Ls4: movq 3*8(%rsi),%r10
121.Ld1: movq %r11,(%rdi)
122.Ld2: movq %r8,1*8(%rdi)
123.Ld3: movq %r9,2*8(%rdi)
124.Ld4: movq %r10,3*8(%rdi)
125
126.Ls5: movq 4*8(%rsi),%r11
127.Ls6: movq 5*8(%rsi),%r8
128.Ls7: movq 6*8(%rsi),%r9
129.Ls8: movq 7*8(%rsi),%r10
130.Ld5: movq %r11,4*8(%rdi)
131.Ld6: movq %r8,5*8(%rdi)
132.Ld7: movq %r9,6*8(%rdi)
133.Ld8: movq %r10,7*8(%rdi)
134
135 decq %rdx
136
137 leaq 64(%rsi),%rsi
138 leaq 64(%rdi),%rdi
139
140 jns .Lloop
141
142 .p2align 4
143.Lhandle_tail:
144 movl %ecx,%edx
145 andl $63,%ecx
146 shrl $3,%ecx
147 jz .Lhandle_7
148 movl $8,%ebx
149 .p2align 4
150.Lloop_8:
151.Ls9: movq (%rsi),%r8
152.Ld9: movq %r8,(%rdi)
153 decl %ecx
154 leaq 8(%rdi),%rdi
155 leaq 8(%rsi),%rsi
156 jnz .Lloop_8
157
158.Lhandle_7:
159 movl %edx,%ecx
160 andl $7,%ecx
161 jz .Lende
162 .p2align 4
163.Lloop_1:
164.Ls10: movb (%rsi),%bl
165.Ld10: movb %bl,(%rdi)
166 incq %rdi
167 incq %rsi
168 decl %ecx
169 jnz .Lloop_1
170
171.Lende:
172 popq %rbx
173 ret
174
175#ifdef FIX_ALIGNMENT
176 /* align destination */
177 .p2align 4
178.Lbad_alignment:
179 movl $8,%r9d
180 subl %ecx,%r9d
181 movl %r9d,%ecx
182 cmpq %r9,%rdx
183 jz .Lhandle_7
184 js .Lhandle_7
185.Lalign_1:
186.Ls11: movb (%rsi),%bl
187.Ld11: movb %bl,(%rdi)
188 incq %rsi
189 incq %rdi
190 decl %ecx
191 jnz .Lalign_1
192 subq %r9,%rdx
193 jmp .Lafter_bad_alignment
194#endif
195
196 /* table sorted by exception address */
197 .section __ex_table,"a"
198 .align 8
199 .quad .Ls1,.Ls1e
200 .quad .Ls2,.Ls2e
201 .quad .Ls3,.Ls3e
202 .quad .Ls4,.Ls4e
203 .quad .Ld1,.Ls1e
204 .quad .Ld2,.Ls2e
205 .quad .Ld3,.Ls3e
206 .quad .Ld4,.Ls4e
207 .quad .Ls5,.Ls5e
208 .quad .Ls6,.Ls6e
209 .quad .Ls7,.Ls7e
210 .quad .Ls8,.Ls8e
211 .quad .Ld5,.Ls5e
212 .quad .Ld6,.Ls6e
213 .quad .Ld7,.Ls7e
214 .quad .Ld8,.Ls8e
215 .quad .Ls9,.Le_quad
216 .quad .Ld9,.Le_quad
217 .quad .Ls10,.Le_byte
218 .quad .Ld10,.Le_byte
219#ifdef FIX_ALIGNMENT
220 .quad .Ls11,.Lzero_rest
221 .quad .Ld11,.Lzero_rest
222#endif
223 .quad .Le5,.Le_zero
224 .previous
225
226 /* compute 64-offset for main loop. 8 bytes accuracy with error on the
227 pessimistic side. this is gross. it would be better to fix the
228 interface. */
229 /* eax: zero, ebx: 64 */
230.Ls1e: addl $8,%eax
231.Ls2e: addl $8,%eax
232.Ls3e: addl $8,%eax
233.Ls4e: addl $8,%eax
234.Ls5e: addl $8,%eax
235.Ls6e: addl $8,%eax
236.Ls7e: addl $8,%eax
237.Ls8e: addl $8,%eax
238 addq %rbx,%rdi /* +64 */
239 subq %rax,%rdi /* correct destination with computed offset */
240
241 shlq $6,%rdx /* loop counter * 64 (stride length) */
242 addq %rax,%rdx /* add offset to loopcnt */
243 andl $63,%ecx /* remaining bytes */
244 addq %rcx,%rdx /* add them */
245 jmp .Lzero_rest
246
247 /* exception on quad word loop in tail handling */
248 /* ecx: loopcnt/8, %edx: length, rdi: correct */
249.Le_quad:
250 shll $3,%ecx
251 andl $7,%edx
252 addl %ecx,%edx
253 /* edx: bytes to zero, rdi: dest, eax:zero */
254.Lzero_rest:
255 movq %rdx,%rcx
256.Le_byte:
257 xorl %eax,%eax
258.Le5: rep
259 stosb
260 /* when there is another exception while zeroing the rest just return */
261.Le_zero:
262 movq %rdx,%rax
263 jmp .Lende
264
265 /* Some CPUs run faster using the string copy instructions.
266 This is also a lot simpler. Use them when possible.
267 Patch in jmps to this code instead of copying it fully
268 to avoid unwanted aliasing in the exception tables. */
269
270 /* rdi destination
271 * rsi source
272 * rdx count
273 *
274 * Output:
275 * eax uncopied bytes or 0 if successfull.
276 *
277 * Only 4GB of copy is supported. This shouldn't be a problem
278 * because the kernel normally only writes from/to page sized chunks
279 * even if user space passed a longer buffer.
280 * And more would be dangerous because both Intel and AMD have
281 * errata with rep movsq > 4GB. If someone feels the need to fix
282 * this please consider this.
283 */
284copy_user_generic_c:
69 movl %edx,%ecx 285 movl %edx,%ecx
70 shrl $3,%ecx 286 shrl $3,%ecx
71 andl $7,%edx 287 andl $7,%edx
72 jz 5f
731: rep 2881: rep
74 movsq 289 movsq
75 movl %edx,%ecx 290 movl %edx,%ecx
76 xor %eax,%eax
772: rep 2912: rep
78 movsb 292 movsb
2934: movl %ecx,%eax
79 ret 294 ret
80 /* align here? */
815: xorl %eax,%eax
826: rep movsq
83 ret
84
85 .section .fixup,"ax"
863: lea (%rdx,%rcx,8),%rax 2953: lea (%rdx,%rcx,8),%rax
87 ret 296 ret
884: movl %ecx,%eax
89 ret
90 .previous
91 297
92 .section __ex_table,"a" 298 .section __ex_table,"a"
93 .quad 1b,3b 299 .quad 1b,3b
94 .quad 2b,4b 300 .quad 2b,4b
95 .quad 6b,4b
96 .previous 301 .previous
diff --git a/arch/x86_64/lib/iomap_copy.S b/arch/x86_64/lib/iomap_copy.S
new file mode 100644
index 000000000000..8bbade5fea05
--- /dev/null
+++ b/arch/x86_64/lib/iomap_copy.S
@@ -0,0 +1,26 @@
1/*
2 * Copyright 2006 PathScale, Inc. All Rights Reserved.
3 *
4 * This file is free software; you can redistribute it and/or modify
5 * it under the terms of version 2 of the GNU General Public License
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software Foundation,
15 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
16 */
17
18/*
19 * override generic version in lib/iomap_copy.c
20 */
21 .globl __iowrite32_copy
22 .p2align 4
23__iowrite32_copy:
24 movl %edx,%ecx
25 rep movsd
26 ret
diff --git a/arch/x86_64/lib/memcpy.S b/arch/x86_64/lib/memcpy.S
index 92dd80544602..5554948b5554 100644
--- a/arch/x86_64/lib/memcpy.S
+++ b/arch/x86_64/lib/memcpy.S
@@ -11,8 +11,6 @@
11 * 11 *
12 * Output: 12 * Output:
13 * rax original destination 13 * rax original destination
14 *
15 * TODO: check best memcpy for PSC
16 */ 14 */
17 15
18 .globl __memcpy 16 .globl __memcpy
@@ -20,6 +18,95 @@
20 .p2align 4 18 .p2align 4
21__memcpy: 19__memcpy:
22memcpy: 20memcpy:
21 pushq %rbx
22 movq %rdi,%rax
23
24 movl %edx,%ecx
25 shrl $6,%ecx
26 jz .Lhandle_tail
27
28 .p2align 4
29.Lloop_64:
30 decl %ecx
31
32 movq (%rsi),%r11
33 movq 8(%rsi),%r8
34
35 movq %r11,(%rdi)
36 movq %r8,1*8(%rdi)
37
38 movq 2*8(%rsi),%r9
39 movq 3*8(%rsi),%r10
40
41 movq %r9,2*8(%rdi)
42 movq %r10,3*8(%rdi)
43
44 movq 4*8(%rsi),%r11
45 movq 5*8(%rsi),%r8
46
47 movq %r11,4*8(%rdi)
48 movq %r8,5*8(%rdi)
49
50 movq 6*8(%rsi),%r9
51 movq 7*8(%rsi),%r10
52
53 movq %r9,6*8(%rdi)
54 movq %r10,7*8(%rdi)
55
56 leaq 64(%rsi),%rsi
57 leaq 64(%rdi),%rdi
58 jnz .Lloop_64
59
60.Lhandle_tail:
61 movl %edx,%ecx
62 andl $63,%ecx
63 shrl $3,%ecx
64 jz .Lhandle_7
65 .p2align 4
66.Lloop_8:
67 decl %ecx
68 movq (%rsi),%r8
69 movq %r8,(%rdi)
70 leaq 8(%rdi),%rdi
71 leaq 8(%rsi),%rsi
72 jnz .Lloop_8
73
74.Lhandle_7:
75 movl %edx,%ecx
76 andl $7,%ecx
77 jz .Lende
78 .p2align 4
79.Lloop_1:
80 movb (%rsi),%r8b
81 movb %r8b,(%rdi)
82 incq %rdi
83 incq %rsi
84 decl %ecx
85 jnz .Lloop_1
86
87.Lende:
88 popq %rbx
89 ret
90.Lfinal:
91
92 /* Some CPUs run faster using the string copy instructions.
93 It is also a lot simpler. Use this when possible */
94
95 .section .altinstructions,"a"
96 .align 8
97 .quad memcpy
98 .quad memcpy_c
99 .byte X86_FEATURE_REP_GOOD
100 .byte .Lfinal-memcpy
101 .byte memcpy_c_end-memcpy_c
102 .previous
103
104 .section .altinstr_replacement,"ax"
105 /* rdi destination
106 * rsi source
107 * rdx count
108 */
109memcpy_c:
23 movq %rdi,%rax 110 movq %rdi,%rax
24 movl %edx,%ecx 111 movl %edx,%ecx
25 shrl $3,%ecx 112 shrl $3,%ecx
@@ -30,3 +117,5 @@ memcpy:
30 rep 117 rep
31 movsb 118 movsb
32 ret 119 ret
120memcpy_c_end:
121 .previous
diff --git a/arch/x86_64/lib/memset.S b/arch/x86_64/lib/memset.S
index 2aa48f24ed1e..ad397f2c7de8 100644
--- a/arch/x86_64/lib/memset.S
+++ b/arch/x86_64/lib/memset.S
@@ -13,6 +13,98 @@
13 .p2align 4 13 .p2align 4
14memset: 14memset:
15__memset: 15__memset:
16 movq %rdi,%r10
17 movq %rdx,%r11
18
19 /* expand byte value */
20 movzbl %sil,%ecx
21 movabs $0x0101010101010101,%rax
22 mul %rcx /* with rax, clobbers rdx */
23
24 /* align dst */
25 movl %edi,%r9d
26 andl $7,%r9d
27 jnz .Lbad_alignment
28.Lafter_bad_alignment:
29
30 movl %r11d,%ecx
31 shrl $6,%ecx
32 jz .Lhandle_tail
33
34 .p2align 4
35.Lloop_64:
36 decl %ecx
37 movq %rax,(%rdi)
38 movq %rax,8(%rdi)
39 movq %rax,16(%rdi)
40 movq %rax,24(%rdi)
41 movq %rax,32(%rdi)
42 movq %rax,40(%rdi)
43 movq %rax,48(%rdi)
44 movq %rax,56(%rdi)
45 leaq 64(%rdi),%rdi
46 jnz .Lloop_64
47
48 /* Handle tail in loops. The loops should be faster than hard
49 to predict jump tables. */
50 .p2align 4
51.Lhandle_tail:
52 movl %r11d,%ecx
53 andl $63&(~7),%ecx
54 jz .Lhandle_7
55 shrl $3,%ecx
56 .p2align 4
57.Lloop_8:
58 decl %ecx
59 movq %rax,(%rdi)
60 leaq 8(%rdi),%rdi
61 jnz .Lloop_8
62
63.Lhandle_7:
64 movl %r11d,%ecx
65 andl $7,%ecx
66 jz .Lende
67 .p2align 4
68.Lloop_1:
69 decl %ecx
70 movb %al,(%rdi)
71 leaq 1(%rdi),%rdi
72 jnz .Lloop_1
73
74.Lende:
75 movq %r10,%rax
76 ret
77
78.Lbad_alignment:
79 cmpq $7,%r11
80 jbe .Lhandle_7
81 movq %rax,(%rdi) /* unaligned store */
82 movq $8,%r8
83 subq %r9,%r8
84 addq %r8,%rdi
85 subq %r8,%r11
86 jmp .Lafter_bad_alignment
87
88 /* Some CPUs run faster using the string instructions.
89 It is also a lot simpler. Use this when possible */
90
91#include <asm/cpufeature.h>
92
93 .section .altinstructions,"a"
94 .align 8
95 .quad memset
96 .quad memset_c
97 .byte X86_FEATURE_REP_GOOD
98 .byte memset_c_end-memset_c
99 .byte memset_c_end-memset_c
100 .previous
101
102 .section .altinstr_replacement,"ax"
103 /* rdi destination
104 * rsi value
105 * rdx count
106 */
107memset_c:
16 movq %rdi,%r9 108 movq %rdi,%r9
17 movl %edx,%r8d 109 movl %edx,%r8d
18 andl $7,%r8d 110 andl $7,%r8d
@@ -29,3 +121,5 @@ __memset:
29 stosb 121 stosb
30 movq %r9,%rax 122 movq %r9,%rax
31 ret 123 ret
124memset_c_end:
125 .previous
diff --git a/arch/x86_64/mm/fault.c b/arch/x86_64/mm/fault.c
index 26eac194064b..2e7c3c8ffe03 100644
--- a/arch/x86_64/mm/fault.c
+++ b/arch/x86_64/mm/fault.c
@@ -33,7 +33,6 @@
33#include <asm/proto.h> 33#include <asm/proto.h>
34#include <asm/kdebug.h> 34#include <asm/kdebug.h>
35#include <asm-generic/sections.h> 35#include <asm-generic/sections.h>
36#include <asm/kdebug.h>
37 36
38/* Page fault error code bits */ 37/* Page fault error code bits */
39#define PF_PROT (1<<0) /* or no page found */ 38#define PF_PROT (1<<0) /* or no page found */
@@ -157,8 +156,8 @@ void dump_pagetable(unsigned long address)
157 156
158 pgd = __va((unsigned long)pgd & PHYSICAL_PAGE_MASK); 157 pgd = __va((unsigned long)pgd & PHYSICAL_PAGE_MASK);
159 pgd += pgd_index(address); 158 pgd += pgd_index(address);
160 printk("PGD %lx ", pgd_val(*pgd));
161 if (bad_address(pgd)) goto bad; 159 if (bad_address(pgd)) goto bad;
160 printk("PGD %lx ", pgd_val(*pgd));
162 if (!pgd_present(*pgd)) goto ret; 161 if (!pgd_present(*pgd)) goto ret;
163 162
164 pud = __pud_offset_k((pud_t *)pgd_page(*pgd), address); 163 pud = __pud_offset_k((pud_t *)pgd_page(*pgd), address);
diff --git a/arch/x86_64/mm/k8topology.c b/arch/x86_64/mm/k8topology.c
index a5663e0bb01c..dd60e71fdba6 100644
--- a/arch/x86_64/mm/k8topology.c
+++ b/arch/x86_64/mm/k8topology.c
@@ -155,7 +155,7 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end)
155 if (!found) 155 if (!found)
156 return -1; 156 return -1;
157 157
158 memnode_shift = compute_hash_shift(nodes, numnodes); 158 memnode_shift = compute_hash_shift(nodes, 8);
159 if (memnode_shift < 0) { 159 if (memnode_shift < 0) {
160 printk(KERN_ERR "No NUMA node hash function found. Contact maintainer\n"); 160 printk(KERN_ERR "No NUMA node hash function found. Contact maintainer\n");
161 return -1; 161 return -1;
diff --git a/arch/x86_64/mm/numa.c b/arch/x86_64/mm/numa.c
index 6ef9f9a76235..22e51beee8d3 100644
--- a/arch/x86_64/mm/numa.c
+++ b/arch/x86_64/mm/numa.c
@@ -351,7 +351,7 @@ void __init init_cpu_to_node(void)
351 continue; 351 continue;
352 if (apicid_to_node[apicid] == NUMA_NO_NODE) 352 if (apicid_to_node[apicid] == NUMA_NO_NODE)
353 continue; 353 continue;
354 cpu_to_node[i] = apicid_to_node[apicid]; 354 numa_set_node(i,apicid_to_node[apicid]);
355 } 355 }
356} 356}
357 357
diff --git a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c
index 8b7f85608fa8..482c25767369 100644
--- a/arch/x86_64/mm/srat.c
+++ b/arch/x86_64/mm/srat.c
@@ -26,6 +26,10 @@ static nodemask_t nodes_found __initdata;
26static struct node nodes[MAX_NUMNODES] __initdata; 26static struct node nodes[MAX_NUMNODES] __initdata;
27static u8 pxm2node[256] = { [0 ... 255] = 0xff }; 27static u8 pxm2node[256] = { [0 ... 255] = 0xff };
28 28
29/* Too small nodes confuse the VM badly. Usually they result
30 from BIOS bugs. */
31#define NODE_MIN_SIZE (4*1024*1024)
32
29static int node_to_pxm(int n); 33static int node_to_pxm(int n);
30 34
31int pxm_to_node(int pxm) 35int pxm_to_node(int pxm)
@@ -131,7 +135,12 @@ void __init
131acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa) 135acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa)
132{ 136{
133 int pxm, node; 137 int pxm, node;
134 if (srat_disabled() || pa->flags.enabled == 0) 138 if (srat_disabled())
139 return;
140 if (pa->header.length != sizeof(struct acpi_table_processor_affinity)) { bad_srat();
141 return;
142 }
143 if (pa->flags.enabled == 0)
135 return; 144 return;
136 pxm = pa->proximity_domain; 145 pxm = pa->proximity_domain;
137 node = setup_node(pxm); 146 node = setup_node(pxm);
@@ -155,8 +164,16 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
155 int node, pxm; 164 int node, pxm;
156 int i; 165 int i;
157 166
158 if (srat_disabled() || ma->flags.enabled == 0) 167 if (srat_disabled())
168 return;
169 if (ma->header.length != sizeof(struct acpi_table_memory_affinity)) {
170 bad_srat();
159 return; 171 return;
172 }
173 if (ma->flags.enabled == 0)
174 return;
175 start = ma->base_addr_lo | ((u64)ma->base_addr_hi << 32);
176 end = start + (ma->length_lo | ((u64)ma->length_hi << 32));
160 pxm = ma->proximity_domain; 177 pxm = ma->proximity_domain;
161 node = setup_node(pxm); 178 node = setup_node(pxm);
162 if (node < 0) { 179 if (node < 0) {
@@ -164,8 +181,6 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
164 bad_srat(); 181 bad_srat();
165 return; 182 return;
166 } 183 }
167 start = ma->base_addr_lo | ((u64)ma->base_addr_hi << 32);
168 end = start + (ma->length_lo | ((u64)ma->length_hi << 32));
169 /* It is fine to add this area to the nodes data it will be used later*/ 184 /* It is fine to add this area to the nodes data it will be used later*/
170 if (ma->flags.hot_pluggable == 1) 185 if (ma->flags.hot_pluggable == 1)
171 printk(KERN_INFO "SRAT: hot plug zone found %lx - %lx \n", 186 printk(KERN_INFO "SRAT: hot plug zone found %lx - %lx \n",
@@ -213,7 +228,8 @@ static int nodes_cover_memory(void)
213 } 228 }
214 229
215 e820ram = end_pfn - e820_hole_size(0, end_pfn); 230 e820ram = end_pfn - e820_hole_size(0, end_pfn);
216 if (pxmram < e820ram) { 231 /* We seem to lose 3 pages somewhere. Allow a bit of slack. */
232 if ((long)(e820ram - pxmram) >= 1*1024*1024) {
217 printk(KERN_ERR 233 printk(KERN_ERR
218 "SRAT: PXMs only cover %luMB of your %luMB e820 RAM. Not used.\n", 234 "SRAT: PXMs only cover %luMB of your %luMB e820 RAM. Not used.\n",
219 (pxmram << PAGE_SHIFT) >> 20, 235 (pxmram << PAGE_SHIFT) >> 20,
@@ -223,6 +239,16 @@ static int nodes_cover_memory(void)
223 return 1; 239 return 1;
224} 240}
225 241
242static void unparse_node(int node)
243{
244 int i;
245 node_clear(node, nodes_parsed);
246 for (i = 0; i < MAX_LOCAL_APIC; i++) {
247 if (apicid_to_node[i] == node)
248 apicid_to_node[i] = NUMA_NO_NODE;
249 }
250}
251
226void __init acpi_numa_arch_fixup(void) {} 252void __init acpi_numa_arch_fixup(void) {}
227 253
228/* Use the information discovered above to actually set up the nodes. */ 254/* Use the information discovered above to actually set up the nodes. */
@@ -230,22 +256,22 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end)
230{ 256{
231 int i; 257 int i;
232 258
233 if (acpi_numa <= 0)
234 return -1;
235
236 /* First clean up the node list */ 259 /* First clean up the node list */
237 for_each_node_mask(i, nodes_parsed) { 260 for (i = 0; i < MAX_NUMNODES; i++) {
238 cutoff_node(i, start, end); 261 cutoff_node(i, start, end);
239 if (nodes[i].start == nodes[i].end) 262 if ((nodes[i].end - nodes[i].start) < NODE_MIN_SIZE)
240 node_clear(i, nodes_parsed); 263 unparse_node(i);
241 } 264 }
242 265
266 if (acpi_numa <= 0)
267 return -1;
268
243 if (!nodes_cover_memory()) { 269 if (!nodes_cover_memory()) {
244 bad_srat(); 270 bad_srat();
245 return -1; 271 return -1;
246 } 272 }
247 273
248 memnode_shift = compute_hash_shift(nodes, nodes_weight(nodes_parsed)); 274 memnode_shift = compute_hash_shift(nodes, MAX_NUMNODES);
249 if (memnode_shift < 0) { 275 if (memnode_shift < 0) {
250 printk(KERN_ERR 276 printk(KERN_ERR
251 "SRAT: No NUMA node hash function found. Contact maintainer\n"); 277 "SRAT: No NUMA node hash function found. Contact maintainer\n");
diff --git a/arch/x86_64/pci/mmconfig.c b/arch/x86_64/pci/mmconfig.c
index f16c0d57c552..18f371fe37f8 100644
--- a/arch/x86_64/pci/mmconfig.c
+++ b/arch/x86_64/pci/mmconfig.c
@@ -29,11 +29,8 @@ static char __iomem *get_virt(unsigned int seg, unsigned bus)
29 29
30 while (1) { 30 while (1) {
31 ++cfg_num; 31 ++cfg_num;
32 if (cfg_num >= pci_mmcfg_config_num) { 32 if (cfg_num >= pci_mmcfg_config_num)
33 /* Not found - fall back to type 1. This happens 33 break;
34 e.g. on the internal devices of a K8 northbridge. */
35 return NULL;
36 }
37 cfg = pci_mmcfg_virt[cfg_num].cfg; 34 cfg = pci_mmcfg_virt[cfg_num].cfg;
38 if (cfg->pci_segment_group_number != seg) 35 if (cfg->pci_segment_group_number != seg)
39 continue; 36 continue;
@@ -41,6 +38,18 @@ static char __iomem *get_virt(unsigned int seg, unsigned bus)
41 (cfg->end_bus_number >= bus)) 38 (cfg->end_bus_number >= bus))
42 return pci_mmcfg_virt[cfg_num].virt; 39 return pci_mmcfg_virt[cfg_num].virt;
43 } 40 }
41
42 /* Handle more broken MCFG tables on Asus etc.
43 They only contain a single entry for bus 0-0. Assume
44 this applies to all busses. */
45 cfg = &pci_mmcfg_config[0];
46 if (pci_mmcfg_config_num == 1 &&
47 cfg->pci_segment_group_number == 0 &&
48 (cfg->start_bus_number | cfg->end_bus_number) == 0)
49 return pci_mmcfg_virt[0].virt;
50
51 /* Fall back to type 0 */
52 return NULL;
44} 53}
45 54
46static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn) 55static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn)
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
index 7ee4a14ec3b1..e90ef5db8913 100644
--- a/arch/xtensa/Kconfig
+++ b/arch/xtensa/Kconfig
@@ -26,6 +26,10 @@ config GENERIC_HARDIRQS
26 bool 26 bool
27 default y 27 default y
28 28
29config RWSEM_GENERIC_SPINLOCK
30 bool
31 default y
32
29source "init/Kconfig" 33source "init/Kconfig"
30 34
31menu "Processor type and features" 35menu "Processor type and features"
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c
index f1f596644bfc..64a649eb883f 100644
--- a/arch/xtensa/kernel/process.c
+++ b/arch/xtensa/kernel/process.c
@@ -64,6 +64,9 @@ EXPORT_SYMBOL(init_task);
64 64
65struct task_struct *current_set[NR_CPUS] = {&init_task, }; 65struct task_struct *current_set[NR_CPUS] = {&init_task, };
66 66
67void (*pm_power_off)(void) = NULL;
68EXPORT_SYMBOL(pm_power_off);
69
67 70
68#if XCHAL_CP_NUM > 0 71#if XCHAL_CP_NUM > 0
69 72
diff --git a/arch/xtensa/platform-iss/console.c b/arch/xtensa/platform-iss/console.c
index 4fbddf92a921..94fdfe474ac1 100644
--- a/arch/xtensa/platform-iss/console.c
+++ b/arch/xtensa/platform-iss/console.c
@@ -128,9 +128,7 @@ static void rs_poll(unsigned long priv)
128 128
129 while (__simc(SYS_select_one, 0, XTISS_SELECT_ONE_READ, (int)&tv,0,0)){ 129 while (__simc(SYS_select_one, 0, XTISS_SELECT_ONE_READ, (int)&tv,0,0)){
130 __simc (SYS_read, 0, (unsigned long)&c, 1, 0, 0); 130 __simc (SYS_read, 0, (unsigned long)&c, 1, 0, 0);
131 tty->flip.count++; 131 tty_insert_flip_char(tty, c, TTY_NORMAL);
132 *tty->flip.char_buf_ptr++ = c;
133 *tty->flip.flag_buf_ptr++ = TTY_NORMAL;
134 i++; 132 i++;
135 } 133 }
136 134