Merge branch 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-block
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 16 Oct 2007 17:09:16 +0000 (10:09 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 16 Oct 2007 17:09:16 +0000 (10:09 -0700)
* 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-block: (63 commits)
  Fix memory leak in dm-crypt
  SPARC64: sg chaining support
  SPARC: sg chaining support
  PPC: sg chaining support
  PS3: sg chaining support
  IA64: sg chaining support
  x86-64: enable sg chaining
  x86-64: update pci-gart iommu to sg helpers
  x86-64: update nommu to sg helpers
  x86-64: update calgary iommu to sg helpers
  swiotlb: sg chaining support
  i386: enable sg chaining
  i386 dma_map_sg: convert to using sg helpers
  mmc: need to zero sglist on init
  Panic in blk_rq_map_sg() from CCISS driver
  remove sglist_len
  remove blk_queue_max_phys_segments in libata
  revert sg segment size ifdefs
  Fixup u14-34f ENABLE_SG_CHAINING
  qla1280: enable use_sg_chaining option
  ...

712 files changed:
CREDITS
Documentation/cachetlb.txt
Documentation/cpusets.txt
Documentation/fb/00-INDEX
Documentation/fb/uvesafb.txt [new file with mode: 0644]
Documentation/filesystems/Locking
Documentation/filesystems/vfs.txt
Documentation/kernel-parameters.txt
Documentation/spi/spi-summary
Documentation/spi/spidev_test.c
Documentation/vm/numa_memory_policy.txt
Documentation/x86_64/mm.txt
arch/alpha/Makefile
arch/alpha/kernel/entry.S
arch/alpha/kernel/ptrace.c
arch/alpha/kernel/vmlinux.lds.S
arch/alpha/mm/fault.c
arch/arm/kernel/ptrace.c
arch/arm/mach-s3c2410/mach-amlm5900.c
arch/arm/mach-s3c2410/mach-bast.c
arch/arm/mach-s3c2410/mach-h1940.c
arch/arm/mach-s3c2410/mach-qt2410.c
arch/arm/mach-s3c2440/mach-rx3715.c
arch/arm/mach-s3c2440/mach-smdk2440.c
arch/arm/mm/fault.c
arch/avr32/kernel/kprobes.c
arch/avr32/kernel/ptrace.c
arch/avr32/mm/fault.c
arch/blackfin/kernel/ptrace.c
arch/cris/arch-v10/kernel/ptrace.c
arch/cris/arch-v10/kernel/time.c
arch/cris/arch-v32/kernel/ptrace.c
arch/cris/arch-v32/kernel/smp.c
arch/cris/mm/fault.c
arch/frv/kernel/time.c
arch/frv/mm/fault.c
arch/ia64/Kconfig
arch/ia64/kernel/gate.lds.S
arch/ia64/kernel/kprobes.c
arch/ia64/kernel/setup.c
arch/ia64/kernel/smpboot.c
arch/ia64/kernel/uncached.c
arch/ia64/mm/discontig.c
arch/ia64/mm/fault.c
arch/ia64/mm/hugetlbpage.c
arch/ia64/mm/init.c
arch/m32r/kernel/ptrace.c
arch/m32r/kernel/time.c
arch/m32r/mm/fault.c
arch/m68k/kernel/ptrace.c
arch/m68k/mm/fault.c
arch/mips/jmr3927/rbhma3100/setup.c
arch/mips/kernel/ptrace.c
arch/mips/mm/fault.c
arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
arch/parisc/kernel/ptrace.c
arch/parisc/mm/fault.c
arch/powerpc/Kconfig
arch/powerpc/kernel/kprobes.c
arch/powerpc/kernel/ptrace.c
arch/powerpc/kernel/setup-common.c
arch/powerpc/kernel/setup_64.c
arch/powerpc/kernel/smp.c
arch/powerpc/kernel/vdso32/vdso32.lds.S
arch/powerpc/kernel/vdso64/vdso64.lds.S
arch/powerpc/mm/init_64.c
arch/powerpc/mm/mem.c
arch/powerpc/platforms/cell/cbe_cpufreq.c
arch/ppc/mm/fault.c
arch/s390/kernel/kprobes.c
arch/s390/kernel/ptrace.c
arch/s390/mm/fault.c
arch/sh/kernel/ptrace.c
arch/sh/kernel/vsyscall/vsyscall.lds.S
arch/sh/mm/fault.c
arch/sh/mm/init.c
arch/sh64/kernel/ptrace.c
arch/sh64/mm/fault.c
arch/sparc/mm/fault.c
arch/sparc64/Kconfig
arch/sparc64/kernel/kprobes.c
arch/sparc64/kernel/ktlb.S
arch/sparc64/kernel/smp.c
arch/sparc64/mm/fault.c
arch/sparc64/mm/init.c
arch/um/Kconfig
arch/um/Kconfig.char
arch/um/Kconfig.debug
arch/um/Kconfig.i386
arch/um/Kconfig.net
arch/um/Kconfig.x86_64
arch/um/Makefile
arch/um/Makefile-i386
arch/um/defconfig
arch/um/drivers/Makefile
arch/um/drivers/chan_kern.c
arch/um/drivers/chan_user.c
arch/um/drivers/cow_user.c
arch/um/drivers/daemon.h
arch/um/drivers/daemon_kern.c
arch/um/drivers/daemon_user.c
arch/um/drivers/fd.c
arch/um/drivers/harddog_kern.c
arch/um/drivers/harddog_user.c
arch/um/drivers/hostaudio_kern.c
arch/um/drivers/line.c
arch/um/drivers/mcast.h
arch/um/drivers/mcast_kern.c
arch/um/drivers/mcast_user.c
arch/um/drivers/mconsole_kern.c
arch/um/drivers/mconsole_user.c
arch/um/drivers/mmapper_kern.c
arch/um/drivers/net_kern.c
arch/um/drivers/net_user.c
arch/um/drivers/null.c
arch/um/drivers/pcap_kern.c
arch/um/drivers/pcap_user.c
arch/um/drivers/port_kern.c
arch/um/drivers/port_user.c
arch/um/drivers/pty.c
arch/um/drivers/slip_kern.c
arch/um/drivers/slip_user.c
arch/um/drivers/slirp_kern.c
arch/um/drivers/slirp_user.c
arch/um/drivers/tty.c
arch/um/drivers/ubd_kern.c
arch/um/drivers/vde.h [new file with mode: 0644]
arch/um/drivers/vde_kern.c [new file with mode: 0644]
arch/um/drivers/vde_user.c [new file with mode: 0644]
arch/um/drivers/xterm.c
arch/um/include/arch.h
arch/um/include/as-layout.h
arch/um/include/choose-mode.h [deleted file]
arch/um/include/common-offsets.h
arch/um/include/irq_user.h
arch/um/include/kern_util.h
arch/um/include/mconsole.h
arch/um/include/mem.h
arch/um/include/mode.h [deleted file]
arch/um/include/mode_kern.h [deleted file]
arch/um/include/net_kern.h
arch/um/include/net_user.h
arch/um/include/os.h
arch/um/include/registers.h
arch/um/include/skas/mmu-skas.h [deleted file]
arch/um/include/skas/mode-skas.h
arch/um/include/skas/mode_kern_skas.h [deleted file]
arch/um/include/skas/skas.h
arch/um/include/skas/uaccess-skas.h [deleted file]
arch/um/include/sysdep-i386/kernel-offsets.h
arch/um/include/sysdep-i386/ptrace.h
arch/um/include/sysdep-i386/sigcontext.h
arch/um/include/sysdep-i386/stub.h
arch/um/include/sysdep-i386/thread.h [deleted file]
arch/um/include/sysdep-x86_64/ptrace.h
arch/um/include/sysdep-x86_64/sigcontext.h
arch/um/include/sysdep-x86_64/stub.h
arch/um/include/sysdep-x86_64/thread.h [deleted file]
arch/um/include/task.h
arch/um/include/tlb.h
arch/um/include/tt/debug.h [deleted file]
arch/um/include/tt/mmu-tt.h [deleted file]
arch/um/include/tt/mode-tt.h [deleted file]
arch/um/include/tt/mode_kern_tt.h [deleted file]
arch/um/include/tt/tt.h [deleted file]
arch/um/include/tt/uaccess-tt.h [deleted file]
arch/um/include/um_mmu.h
arch/um/include/um_uaccess.h
arch/um/include/uml_uaccess.h [deleted file]
arch/um/include/user.h
arch/um/kernel/Makefile
arch/um/kernel/dyn.lds.S
arch/um/kernel/exec.c
arch/um/kernel/init_task.c
arch/um/kernel/irq.c
arch/um/kernel/ksyms.c
arch/um/kernel/mem.c
arch/um/kernel/physmem.c
arch/um/kernel/process.c
arch/um/kernel/ptrace.c
arch/um/kernel/reboot.c
arch/um/kernel/signal.c
arch/um/kernel/skas/Makefile
arch/um/kernel/skas/clone.c
arch/um/kernel/skas/exec.c [deleted file]
arch/um/kernel/skas/mem.c [deleted file]
arch/um/kernel/skas/mmu.c
arch/um/kernel/skas/process.c
arch/um/kernel/skas/syscall.c
arch/um/kernel/skas/tlb.c [deleted file]
arch/um/kernel/skas/uaccess.c
arch/um/kernel/smp.c
arch/um/kernel/syscall.c
arch/um/kernel/time.c
arch/um/kernel/tlb.c
arch/um/kernel/trap.c
arch/um/kernel/tt/Makefile [deleted file]
arch/um/kernel/tt/exec_kern.c [deleted file]
arch/um/kernel/tt/exec_user.c [deleted file]
arch/um/kernel/tt/gdb.c [deleted file]
arch/um/kernel/tt/gdb_kern.c [deleted file]
arch/um/kernel/tt/include/mode-tt.h [deleted file]
arch/um/kernel/tt/ksyms.c [deleted file]
arch/um/kernel/tt/mem.c [deleted file]
arch/um/kernel/tt/mem_user.c [deleted file]
arch/um/kernel/tt/process_kern.c [deleted file]
arch/um/kernel/tt/ptproxy/Makefile [deleted file]
arch/um/kernel/tt/ptproxy/proxy.c [deleted file]
arch/um/kernel/tt/ptproxy/ptproxy.h [deleted file]
arch/um/kernel/tt/ptproxy/ptrace.c [deleted file]
arch/um/kernel/tt/ptproxy/sysdep.c [deleted file]
arch/um/kernel/tt/ptproxy/sysdep.h [deleted file]
arch/um/kernel/tt/ptproxy/wait.c [deleted file]
arch/um/kernel/tt/ptproxy/wait.h [deleted file]
arch/um/kernel/tt/syscall_kern.c [deleted file]
arch/um/kernel/tt/syscall_user.c [deleted file]
arch/um/kernel/tt/tlb.c [deleted file]
arch/um/kernel/tt/tracer.c [deleted file]
arch/um/kernel/tt/trap_user.c [deleted file]
arch/um/kernel/tt/uaccess.c [deleted file]
arch/um/kernel/tt/uaccess_user.c [deleted file]
arch/um/kernel/uaccess.c
arch/um/kernel/um_arch.c
arch/um/kernel/uml.lds.S
arch/um/os-Linux/Makefile
arch/um/os-Linux/aio.c
arch/um/os-Linux/drivers/etap.h
arch/um/os-Linux/drivers/ethertap_kern.c
arch/um/os-Linux/drivers/ethertap_user.c
arch/um/os-Linux/drivers/tuntap.h
arch/um/os-Linux/drivers/tuntap_kern.c
arch/um/os-Linux/drivers/tuntap_user.c
arch/um/os-Linux/file.c
arch/um/os-Linux/helper.c
arch/um/os-Linux/irq.c
arch/um/os-Linux/main.c
arch/um/os-Linux/mem.c
arch/um/os-Linux/process.c
arch/um/os-Linux/registers.c [new file with mode: 0644]
arch/um/os-Linux/signal.c
arch/um/os-Linux/skas/mem.c
arch/um/os-Linux/skas/process.c
arch/um/os-Linux/skas/trap.c
arch/um/os-Linux/start_up.c
arch/um/os-Linux/sys-i386/Makefile
arch/um/os-Linux/sys-i386/registers.c
arch/um/os-Linux/sys-x86_64/Makefile
arch/um/os-Linux/sys-x86_64/registers.c
arch/um/os-Linux/time.c
arch/um/os-Linux/tls.c
arch/um/os-Linux/trap.c
arch/um/os-Linux/tt.c [deleted file]
arch/um/os-Linux/uaccess.c
arch/um/os-Linux/umid.c
arch/um/os-Linux/util.c
arch/um/scripts/Makefile.rules
arch/um/sys-i386/Makefile
arch/um/sys-i386/bugs.c
arch/um/sys-i386/fault.c
arch/um/sys-i386/ldt.c
arch/um/sys-i386/ptrace.c
arch/um/sys-i386/ptrace_user.c
arch/um/sys-i386/sigcontext.c [deleted file]
arch/um/sys-i386/signal.c
arch/um/sys-i386/stub.S
arch/um/sys-i386/stub_segv.c
arch/um/sys-i386/tls.c
arch/um/sys-i386/unmap.c [deleted file]
arch/um/sys-i386/user-offsets.c
arch/um/sys-x86_64/Makefile
arch/um/sys-x86_64/bugs.c
arch/um/sys-x86_64/fault.c
arch/um/sys-x86_64/ptrace.c
arch/um/sys-x86_64/sigcontext.c [deleted file]
arch/um/sys-x86_64/signal.c
arch/um/sys-x86_64/stub.S
arch/um/sys-x86_64/stub_segv.c
arch/um/sys-x86_64/syscalls.c
arch/um/sys-x86_64/tls.c
arch/um/sys-x86_64/unmap.c [deleted file]
arch/um/sys-x86_64/user-offsets.c
arch/v850/kernel/fpga85e2c.c
arch/v850/kernel/time.c
arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
arch/x86/kernel/cpu/cpufreq/powernow-k8.c
arch/x86/kernel/cpu/cpufreq/speedstep-ich.c
arch/x86/kernel/cpu/proc.c
arch/x86/kernel/io_apic_32.c
arch/x86/kernel/kprobes_32.c
arch/x86/kernel/kprobes_64.c
arch/x86/kernel/mce_amd_64.c
arch/x86/kernel/process_64.c
arch/x86/kernel/ptrace_32.c
arch/x86/kernel/ptrace_64.c
arch/x86/kernel/setup_64.c
arch/x86/kernel/smpboot_32.c
arch/x86/kernel/smpboot_64.c
arch/x86/mm/fault_32.c
arch/x86/mm/fault_64.c
arch/x86/mm/init_32.c
arch/x86/mm/init_64.c
arch/x86/oprofile/op_model_p4.c
arch/x86/xen/smp.c
arch/x86_64/Kconfig
arch/xtensa/kernel/ptrace.c
arch/xtensa/mm/fault.c
block/blktrace.c
block/ll_rw_blk.c
drivers/Kconfig
drivers/Makefile
drivers/ata/libata-scsi.c
drivers/base/memory.c
drivers/base/node.c
drivers/block/loop.c
drivers/char/Kconfig
drivers/char/agp/Kconfig
drivers/char/drm/Kconfig
drivers/char/drm/radeon_irq.c
drivers/char/mem.c
drivers/char/mspec.c
drivers/char/vt.c
drivers/char/vt_ioctl.c
drivers/dca/Kconfig [new file with mode: 0644]
drivers/dca/Makefile [new file with mode: 0644]
drivers/dca/dca-core.c [new file with mode: 0644]
drivers/dca/dca-sysfs.c [new file with mode: 0644]
drivers/dma/Kconfig
drivers/dma/Makefile
drivers/dma/ioat.c [new file with mode: 0644]
drivers/dma/ioat_dca.c [new file with mode: 0644]
drivers/dma/ioat_dma.c [moved from drivers/dma/ioatdma.c with 55% similarity]
drivers/dma/ioatdma.h
drivers/dma/ioatdma_hw.h
drivers/dma/ioatdma_registers.h
drivers/isdn/capi/capidrv.c
drivers/isdn/capi/kcapi.c
drivers/isdn/gigaset/bas-gigaset.c
drivers/isdn/gigaset/i4l.c
drivers/isdn/gigaset/proc.c
drivers/isdn/gigaset/usb-gigaset.c
drivers/isdn/i4l/isdn_common.c
drivers/message/fusion/mptscsih.c
drivers/mmc/host/mmc_spi.c
drivers/pcmcia/Kconfig
drivers/pcmcia/au1000_xxs1500.c
drivers/pcmcia/cistpl.c
drivers/pcmcia/ds.c
drivers/pcmcia/pxa2xx_base.c
drivers/ps3/ps3av.c
drivers/ps3/ps3av_cmd.c
drivers/rtc/Kconfig
drivers/rtc/Makefile
drivers/rtc/class.c
drivers/rtc/interface.c
drivers/rtc/rtc-cmos.c
drivers/rtc/rtc-dev.c
drivers/rtc/rtc-ds1374.c [new file with mode: 0644]
drivers/rtc/rtc-ds1553.c
drivers/rtc/rtc-ds1742.c
drivers/rtc/rtc-pcf8583.c
drivers/rtc/rtc-sysfs.c
drivers/scsi/mac_scsi.c
drivers/serial/8250_pci.c
drivers/serial/8250_pnp.c
drivers/serial/crisv10.c
drivers/serial/m32r_sio.c
drivers/serial/m32r_sio.h
drivers/serial/serial_core.c
drivers/serial/serial_cs.c
drivers/serial/serial_txx9.c
drivers/spi/Kconfig
drivers/spi/atmel_spi.c
drivers/spi/mpc52xx_psc_spi.c
drivers/spi/omap2_mcspi.c
drivers/spi/omap_uwire.c
drivers/spi/pxa2xx_spi.c
drivers/spi/spi.c
drivers/spi/spi_bfin5xx.c
drivers/spi/spi_bitbang.c
drivers/spi/spi_imx.c
drivers/spi/spi_lm70llp.c
drivers/spi/spi_mpc83xx.c
drivers/spi/spi_s3c24xx.c
drivers/spi/spi_txx9.c
drivers/usb/core/hub.c
drivers/usb/misc/sisusbvga/sisusb_con.c
drivers/video/Kconfig
drivers/video/Makefile
drivers/video/amifb.c
drivers/video/arcfb.c
drivers/video/atafb.c
drivers/video/aty/ati_ids.h
drivers/video/aty/aty128fb.c
drivers/video/aty/atyfb.h
drivers/video/aty/atyfb_base.c
drivers/video/aty/mach64_cursor.c
drivers/video/aty/radeon_base.c
drivers/video/aty/radeonfb.h
drivers/video/backlight/cr_bllcd.c
drivers/video/backlight/progear_bl.c
drivers/video/bf54x-lq043fb.c [new file with mode: 0644]
drivers/video/cfbcopyarea.c
drivers/video/cfbfillrect.c
drivers/video/cfbimgblt.c
drivers/video/cirrusfb.c
drivers/video/clps711xfb.c
drivers/video/console/fbcon.c
drivers/video/console/font_10x18.c
drivers/video/console/font_6x11.c
drivers/video/console/font_7x14.c
drivers/video/console/font_8x16.c
drivers/video/console/font_8x8.c
drivers/video/console/font_acorn_8x8.c
drivers/video/console/font_mini_4x6.c
drivers/video/console/font_pearl_8x8.c
drivers/video/console/font_sun12x22.c
drivers/video/console/font_sun8x16.c
drivers/video/console/newport_con.c
drivers/video/console/softcursor.c
drivers/video/console/vgacon.c
drivers/video/cyber2000fb.c
drivers/video/epson1355fb.c
drivers/video/fb_defio.c
drivers/video/fb_draw.h
drivers/video/fb_sys_fops.c
drivers/video/fbcmap.c
drivers/video/fbmem.c
drivers/video/fbmon.c
drivers/video/geode/lxfb_core.c
drivers/video/hecubafb.c
drivers/video/imsttfb.c
drivers/video/imxfb.c
drivers/video/intelfb/intelfb.h
drivers/video/intelfb/intelfb_i2c.c
drivers/video/intelfb/intelfbdrv.c
drivers/video/intelfb/intelfbhw.c
drivers/video/intelfb/intelfbhw.h
drivers/video/kyro/fbdev.c
drivers/video/logo/logo.c
drivers/video/matrox/matroxfb_base.c
drivers/video/matrox/matroxfb_crtc2.c
drivers/video/matrox/matroxfb_g450.c
drivers/video/matrox/matroxfb_maven.c
drivers/video/mbx/mbxfb.c
drivers/video/mbx/reg_bits.h
drivers/video/mbx/regs.h
drivers/video/modedb.c
drivers/video/neofb.c
drivers/video/nvidia/nv_i2c.c
drivers/video/nvidia/nv_type.h
drivers/video/nvidia/nvidia.c
drivers/video/pm2fb.c
drivers/video/pm3fb.c
drivers/video/pmag-ba-fb.c
drivers/video/pmagb-b-fb.c
drivers/video/pnx4008/pnxrgbfb.c
drivers/video/ps3fb.c
drivers/video/pvr2fb.c
drivers/video/pxafb.c
drivers/video/pxafb.h
drivers/video/s3c2410fb.c
drivers/video/s3c2410fb.h
drivers/video/s3fb.c
drivers/video/sa1100fb.c
drivers/video/savage/savagefb_driver.c
drivers/video/sis/sis_main.c
drivers/video/skeletonfb.c
drivers/video/sm501fb.c
drivers/video/sstfb.c
drivers/video/svgalib.c
drivers/video/tdfxfb.c
drivers/video/tgafb.c
drivers/video/tridentfb.c
drivers/video/uvesafb.c [new file with mode: 0644]
drivers/video/vermilion/vermilion.c
drivers/video/vfb.c
fs/adfs/inode.c
fs/affs/file.c
fs/bfs/file.c
fs/binfmt_elf.c
fs/binfmt_elf_fdpic.c
fs/block_dev.c
fs/buffer.c
fs/configfs/inode.c
fs/dcache.c
fs/debugfs/file.c
fs/direct-io.c
fs/ecryptfs/Makefile
fs/ecryptfs/crypto.c
fs/ecryptfs/debug.c
fs/ecryptfs/ecryptfs_kernel.h
fs/ecryptfs/file.c
fs/ecryptfs/inode.c
fs/ecryptfs/keystore.c
fs/ecryptfs/main.c
fs/ecryptfs/messaging.c
fs/ecryptfs/mmap.c
fs/ecryptfs/read_write.c [new file with mode: 0644]
fs/ecryptfs/super.c
fs/ext2/dir.c
fs/ext2/ext2.h
fs/ext2/inode.c
fs/ext3/dir.c
fs/ext3/inode.c
fs/ext4/dir.c
fs/ext4/inode.c
fs/fat/inode.c
fs/fuse/file.c
fs/gfs2/ops_address.c
fs/hfs/extent.c
fs/hfs/inode.c
fs/hfsplus/extents.c
fs/hfsplus/inode.c
fs/hostfs/hostfs.h
fs/hostfs/hostfs_kern.c
fs/hostfs/hostfs_user.c
fs/hpfs/file.c
fs/hugetlbfs/inode.c
fs/inode.c
fs/jbd/journal.c
fs/jbd/revoke.c
fs/jffs2/file.c
fs/jfs/inode.c
fs/libfs.c
fs/minix/dir.c
fs/minix/inode.c
fs/minix/minix.h
fs/mpage.c
fs/namei.c
fs/nfs/file.c
fs/nfsd/export.c
fs/ocfs2/aops.c
fs/ocfs2/aops.h
fs/ocfs2/file.c
fs/proc/base.c
fs/proc/generic.c
fs/proc/proc_misc.c
fs/qnx4/inode.c
fs/ramfs/file-mmu.c
fs/ramfs/file-nommu.c
fs/reiserfs/file.c
fs/reiserfs/inode.c
fs/reiserfs/ioctl.c
fs/reiserfs/xattr.c
fs/smbfs/file.c
fs/splice.c
fs/sysfs/inode.c
fs/sysv/dir.c
fs/sysv/itree.c
fs/sysv/sysv.h
fs/udf/file.c
fs/udf/inode.c
fs/ufs/dir.c
fs/ufs/inode.c
fs/ufs/util.h
fs/xfs/linux-2.6/xfs_aops.c
fs/xfs/linux-2.6/xfs_lrw.c
include/asm-alpha/page.h
include/asm-alpha/ptrace.h
include/asm-arm/arch-imx/imxfb.h
include/asm-arm/arch-pxa/pxa-regs.h
include/asm-arm/arch-pxa/pxafb.h
include/asm-arm/arch-s3c2410/fb.h
include/asm-avr32/kdebug.h
include/asm-avr32/kprobes.h
include/asm-blackfin/mach-bf548/bf54x-lq043.h [new file with mode: 0644]
include/asm-frv/thread_info.h
include/asm-frv/tlbflush.h
include/asm-generic/memory_model.h
include/asm-generic/pgtable.h
include/asm-ia64/kdebug.h
include/asm-ia64/kprobes.h
include/asm-ia64/pgtable.h
include/asm-ia64/smp.h
include/asm-ia64/topology.h
include/asm-m32r/ptrace.h
include/asm-m32r/thread_info.h
include/asm-m68knommu/system.h
include/asm-mips/xxs1500.h [deleted file]
include/asm-powerpc/kdebug.h
include/asm-powerpc/kprobes.h
include/asm-powerpc/pgtable-ppc64.h
include/asm-powerpc/ps3av.h
include/asm-powerpc/smp.h
include/asm-powerpc/topology.h
include/asm-s390/kdebug.h
include/asm-s390/kprobes.h
include/asm-sh/kdebug.h
include/asm-sparc64/kdebug.h
include/asm-sparc64/kprobes.h
include/asm-sparc64/pgtable.h
include/asm-sparc64/smp.h
include/asm-sparc64/topology.h
include/asm-um/a.out.h
include/asm-um/elf-i386.h
include/asm-um/elf-x86_64.h
include/asm-um/ldt.h
include/asm-um/mmu_context.h
include/asm-um/page.h
include/asm-um/pgalloc.h
include/asm-um/pgtable-3level.h
include/asm-um/processor-generic.h
include/asm-um/processor-x86_64.h
include/asm-um/ptrace-generic.h
include/asm-um/ptrace-i386.h
include/asm-um/ptrace-x86_64.h
include/asm-um/smp.h
include/asm-um/tlbflush.h
include/asm-um/uaccess.h
include/asm-x86/cpufeature_32.h
include/asm-x86/kdebug_32.h
include/asm-x86/kdebug_64.h
include/asm-x86/kprobes_32.h
include/asm-x86/kprobes_64.h
include/asm-x86/page_64.h
include/asm-x86/pgtable_64.h
include/asm-x86/smp_32.h
include/asm-x86/smp_64.h
include/asm-x86/topology_32.h
include/asm-x86/topology_64.h
include/linux/bitops.h
include/linux/buffer_head.h
include/linux/connector.h
include/linux/console.h
include/linux/console_struct.h
include/linux/cpuset.h
include/linux/dca.h [new file with mode: 0644]
include/linux/dma-mapping.h
include/linux/fb.h
include/linux/fs.h
include/linux/gfp.h
include/linux/hugetlb.h
include/linux/init.h
include/linux/interrupt.h
include/linux/ioport.h
include/linux/isdn.h
include/linux/jbd.h
include/linux/jiffies.h
include/linux/kernel.h
include/linux/kprobes.h
include/linux/memory_hotplug.h
include/linux/mempolicy.h
include/linux/mm.h
include/linux/mm_types.h
include/linux/mmzone.h
include/linux/nfsd/export.h
include/linux/nodemask.h
include/linux/page-isolation.h [new file with mode: 0644]
include/linux/pageblock-flags.h [new file with mode: 0644]
include/linux/pagemap.h
include/linux/pci_ids.h
include/linux/radix-tree.h
include/linux/sched.h
include/linux/selection.h
include/linux/serial_core.h
include/linux/slab.h
include/linux/slub_def.h
include/linux/sm501-regs.h
include/linux/spi/spi.h
include/linux/usb/gadget.h
include/pcmcia/ds.h
include/video/Kbuild
include/video/mbxfb.h
include/video/permedia2.h
include/video/pm3fb.h
include/video/tdfx.h
include/video/uvesafb.h [new file with mode: 0644]
init/calibrate.c
kernel/cpuset.c
kernel/kprobes.c
kernel/printk.c
kernel/profile.c
kernel/ptrace.c
kernel/resource.c
kernel/sched.c
kernel/sysctl.c
kernel/time.c
kernel/time/timekeeping.c
lib/Kconfig.debug
lib/radix-tree.c
mm/Kconfig
mm/Makefile
mm/filemap.c
mm/filemap.h [deleted file]
mm/filemap_xip.c
mm/hugetlb.c
mm/internal.h
mm/memory.c
mm/memory_hotplug.c
mm/mempolicy.c
mm/migrate.c
mm/mprotect.c
mm/oom_kill.c
mm/page-writeback.c
mm/page_alloc.c
mm/page_isolation.c [new file with mode: 0644]
mm/readahead.c
mm/rmap.c
mm/shmem.c
mm/slab.c
mm/slob.c
mm/slub.c
mm/sparse-vmemmap.c [new file with mode: 0644]
mm/sparse.c
mm/swap.c
mm/swap_state.c
mm/util.c
mm/vmalloc.c
mm/vmscan.c
mm/vmstat.c
net/sunrpc/xprtrdma/verbs.c

diff --git a/CREDITS b/CREDITS
index 550bb2b9fe8bbbbb9be54aae3d6ab0ebbaf648af..b90b4cac6e166aae6112399955d02c3bd7c068d5 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -2702,7 +2702,7 @@ S: Canada K2P 0X8
 
 N: Mikael Pettersson
 E: mikpe@it.uu.se
-W: http://www.csd.uu.se/~mikpe/
+W: http://user.it.uu.se/~mikpe/linux/
 D: Miscellaneous fixes
 
 N: Reed H. Petty
index 866b76139420b2b22d25255b136f378b6186d52c..552cabac06082c460c55befab72b637724c86cd5 100644 (file)
@@ -133,12 +133,6 @@ changes occur:
        The ia64 sn2 platform is one example of a platform
        that uses this interface.
 
-8) void lazy_mmu_prot_update(pte_t pte)
-       This interface is called whenever the protection on
-       any user PTEs change.  This interface provides a notification
-       to architecture specific code to take appropriate action.
-
-
 Next, we have the cache flushing interfaces.  In general, when Linux
 is changing an existing virtual-->physical mapping to a new value,
 the sequence will be in one of the following forms:
index f2c0a684293021a625e34db1b0b632c066b09304..ec9de6917f01f34c088cd612121caaadc3edf08b 100644 (file)
@@ -35,7 +35,8 @@ CONTENTS:
 ----------------------
 
 Cpusets provide a mechanism for assigning a set of CPUs and Memory
-Nodes to a set of tasks.
+Nodes to a set of tasks.   In this document "Memory Node" refers to
+an on-line node that contains memory.
 
 Cpusets constrain the CPU and Memory placement of tasks to only
 the resources within a tasks current cpuset.  They form a nested
@@ -86,9 +87,6 @@ This can be especially valuable on:
       and a database), or
     * NUMA systems running large HPC applications with demanding
       performance characteristics.
-    * Also cpu_exclusive cpusets are useful for servers running orthogonal
-      workloads such as RT applications requiring low latency and HPC
-      applications that are throughput sensitive
 
 These subsets, or "soft partitions" must be able to be dynamically
 adjusted, as the job mix changes, without impacting other concurrently
@@ -131,8 +129,6 @@ Cpusets extends these two mechanisms as follows:
  - A cpuset may be marked exclusive, which ensures that no other
    cpuset (except direct ancestors and descendents) may contain
    any overlapping CPUs or Memory Nodes.
-   Also a cpu_exclusive cpuset would be associated with a sched
-   domain.
  - You can list all the tasks (by pid) attached to any cpuset.
 
 The implementation of cpusets requires a few, simple hooks
@@ -144,9 +140,6 @@ into the rest of the kernel, none in performance critical paths:
    allowed in that tasks cpuset.
  - in sched.c migrate_all_tasks(), to keep migrating tasks within
    the CPUs allowed by their cpuset, if possible.
- - in sched.c, a new API partition_sched_domains for handling
-   sched domain changes associated with cpu_exclusive cpusets
-   and related changes in both sched.c and arch/ia64/kernel/domain.c
  - in the mbind and set_mempolicy system calls, to mask the requested
    Memory Nodes by what's allowed in that tasks cpuset.
  - in page_alloc.c, to restrict memory to allowed nodes.
@@ -220,8 +213,8 @@ and name space for cpusets, with a minimum of additional kernel code.
 The cpus and mems files in the root (top_cpuset) cpuset are
 read-only.  The cpus file automatically tracks the value of
 cpu_online_map using a CPU hotplug notifier, and the mems file
-automatically tracks the value of node_online_map using the
-cpuset_track_online_nodes() hook.
+automatically tracks the value of node_states[N_MEMORY]--i.e.,
+nodes with memory--using the cpuset_track_online_nodes() hook.
 
 
 1.4 What are exclusive cpusets ?
@@ -231,15 +224,6 @@ If a cpuset is cpu or mem exclusive, no other cpuset, other than
 a direct ancestor or descendent, may share any of the same CPUs or
 Memory Nodes.
 
-A cpuset that is cpu_exclusive has a scheduler (sched) domain
-associated with it.  The sched domain consists of all CPUs in the
-current cpuset that are not part of any exclusive child cpusets.
-This ensures that the scheduler load balancing code only balances
-against the CPUs that are in the sched domain as defined above and
-not all of the CPUs in the system. This removes any overhead due to
-load balancing code trying to pull tasks outside of the cpu_exclusive
-cpuset only to be prevented by the tasks' cpus_allowed mask.
-
 A cpuset that is mem_exclusive restricts kernel allocations for
 page, buffer and other data commonly shared by the kernel across
 multiple users.  All cpusets, whether mem_exclusive or not, restrict
index 92e89aeef52e6c31122f01d671622dba18424733..caabbd395e6194c117444e538605af9582c7c392 100644 (file)
@@ -5,21 +5,49 @@ please mail me.
 
 00-INDEX
        - this file
+arkfb.txt
+       - info on the fbdev driver for ARK Logic chips.
+aty128fb.txt
+       - info on the ATI Rage128 frame buffer driver.
+cirrusfb.txt
+       - info on the driver for Cirrus Logic chipsets.
+cyblafb/
+       - directory with documentation files related to the cyblafb driver.
+deferred_io.txt
+       - an introduction to deferred IO.
+fbcon.txt
+       - intro to and usage guide for the framebuffer console (fbcon).
 framebuffer.txt
-       - introduction to frame buffer devices
+       - introduction to frame buffer devices.
+imacfb.txt
+       - info on the generic EFI platform driver for Intel based Macs.
+intel810.txt
+       - documentation for the Intel 810/815 framebuffer driver.
+intelfb.txt
+       - docs for Intel 830M/845G/852GM/855GM/865G/915G/945G fb driver.
 internals.txt
-       - quick overview of frame buffer device internals
+       - quick overview of frame buffer device internals.
+matroxfb.txt
+       - info on the Matrox framebuffer driver for Alpha, Intel and PPC.
 modedb.txt
-       - info on the video mode database
-aty128fb.txt
-       - info on the ATI Rage128 frame buffer driver
-clgenfb.txt
-       - info on the Cirrus Logic frame buffer driver
+       - info on the video mode database.
 matroxfb.txt
-       - info on the Matrox frame buffer driver
+       - info on the Matrox frame buffer driver.
 pvr2fb.txt
-       - info on the PowerVR 2 frame buffer driver
+       - info on the PowerVR 2 frame buffer driver.
+pxafb.txt
+       - info on the driver for the PXA25x LCD controller.
+s3fb.txt
+       - info on the fbdev driver for S3 Trio/Virge chips.
+sa1100fb.txt
+       - information about the driver for the SA-1100 LCD controller.
+sisfb.txt
+       - info on the framebuffer device driver for various SiS chips.
+sstfb.txt
+       - info on the frame buffer driver for 3dfx' Voodoo Graphics boards.
 tgafb.txt
        - info on the TGA (DECChip 21030) frame buffer driver
 vesafb.txt
        - info on the VESA frame buffer device
+vt8623fb.txt
+       - info on the fb driver for the graphics core in VIA VT8623 chipsets.
diff --git a/Documentation/fb/uvesafb.txt b/Documentation/fb/uvesafb.txt
new file mode 100644 (file)
index 0000000..bcfc233
--- /dev/null
@@ -0,0 +1,188 @@
+
+uvesafb - A Generic Driver for VBE2+ compliant video cards
+==========================================================
+
+1. Requirements
+---------------
+
+uvesafb should work with any video card that has a Video BIOS compliant
+with the VBE 2.0 standard.
+
+Unlike other drivers, uvesafb makes use of a userspace helper called
+v86d.  v86d is used to run the x86 Video BIOS code in a simulated and
+controlled environment.  This allows uvesafb to function on arches other
+than x86.  Check the v86d documentation for a list of currently supported
+arches.
+
+v86d source code can be downloaded from the following website:
+  http://dev.gentoo.org/~spock/projects/uvesafb
+
+Please refer to the v86d documentation for detailed configuration and
+installation instructions.
+
+Note that the v86d userspace helper has to be available at all times in
+order for uvesafb to work properly.  If you want to use uvesafb during
+early boot, you will have to include v86d into an initramfs image, and
+either compile it into the kernel or use it as an initrd.
+
+2. Caveats and limitations
+--------------------------
+
+uvesafb is a _generic_ driver which supports a wide variety of video
+cards, but which is ultimately limited by the Video BIOS interface.
+The most important limitations are:
+
+- Lack of any type of acceleration.
+- A strict and limited set of supported video modes.  Often the native
+  or most optimal resolution/refresh rate for your setup will not work
+  with uvesafb, simply because the Video BIOS doesn't support the
+  video mode you want to use.  This can be especially painful with
+  widescreen panels, where native video modes don't have the 4:3 aspect
+  ratio, which is what most BIOS-es are limited to.
+- Adjusting the refresh rate is only possible with a VBE 3.0 compliant
+  Video BIOS.  Note that many nVidia Video BIOS-es claim to be VBE 3.0
+  compliant, while they simply ignore any refresh rate settings.
+
+3. Configuration
+----------------
+
+uvesafb can be compiled either as a module, or directly into the kernel.
+In both cases it supports the same set of configuration options, which
+are either given on the kernel command line or as module parameters, e.g.:
+
+ video=uvesafb:1024x768-32,mtrr:3,ywrap (compiled into the kernel)
+
+ # modprobe uvesafb mode=1024x768-32 mtrr=3 scroll=ywrap  (module)
+
+Accepted options:
+
+ypan    Enable display panning using the VESA protected mode
+        interface.  The visible screen is just a window of the
+        video memory, console scrolling is done by changing the
+        start of the window.  Available on x86 only.
+
+ywrap   Same as ypan, but assumes your gfx board can wrap-around
+        the video memory (i.e. starts reading from top if it
+        reaches the end of video memory).  Faster than ypan.
+        Available on x86 only.
+
+redraw  Scroll by redrawing the affected part of the screen, this
+        is the safe (and slow) default.
+
+(If you're using uvesafb as a module, the above three options are
+ used a parameter of the scroll option, e.g. scroll=ypan.)
+
+vgapal  Use the standard VGA registers for palette changes.
+
+pmipal  Use the protected mode interface for palette changes.
+        This is the default if the protected mode interface is
+        available.  Available on x86 only.
+
+mtrr:n  Setup memory type range registers for the framebuffer
+        where n:
+              0 - disabled (equivalent to nomtrr) (default)
+              1 - uncachable
+              2 - write-back
+              3 - write-combining
+              4 - write-through
+
+        If you see the following in dmesg, choose the type that matches
+        the old one.  In this example, use "mtrr:2".
+...
+mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
+...
+
+nomtrr  Do not use memory type range registers.
+
+vremap:n
+        Remap 'n' MiB of video RAM.  If 0 or not specified, remap memory
+        according to video mode.
+
+vtotal:n
+        If the video BIOS of your card incorrectly determines the total
+        amount of video RAM, use this option to override the BIOS (in MiB).
+
+<mode>  The mode you want to set, in the standard modedb format.  Refer to
+        modedb.txt for a detailed description.  When uvesafb is compiled as
+        a module, the mode string should be provided as a value of the
+        'mode' option.
+
+vbemode:x
+        Force the use of VBE mode x.  The mode will only be set if it's
+        found in the VBE-provided list of supported modes.
+        NOTE: The mode number 'x' should be specified in VESA mode number
+        notation, not the Linux kernel one (eg. 257 instead of 769).
+        HINT: If you use this option because normal <mode> parameter does
+        not work for you and you use a X server, you'll probably want to
+        set the 'nocrtc' option to ensure that the video mode is properly
+        restored after console <-> X switches.
+
+nocrtc  Do not use CRTC timings while setting the video mode.  This option
+        has any effect only if the Video BIOS is VBE 3.0 compliant.  Use it
+        if you have problems with modes set the standard way.  Note that
+        using this option implies that any refresh rate adjustments will
+        be ignored and the refresh rate will stay at your BIOS default (60 Hz).
+
+noedid  Do not try to fetch and use EDID-provided modes.
+
+noblank Disable hardware blanking.
+
+v86d:path
+        Set path to the v86d executable. This option is only available as
+        a module parameter, and not as a part of the video= string.  If you
+        need to use it and have uvesafb built into the kernel, use
+        uvesafb.v86d="path".
+
+Additionally, the following parameters may be provided.  They all override the
+EDID-provided values and BIOS defaults.  Refer to your monitor's specs to get
+the correct values for maxhf, maxvf and maxclk for your hardware.
+
+maxhf:n     Maximum horizontal frequency (in kHz).
+maxvf:n     Maximum vertical frequency (in Hz).
+maxclk:n    Maximum pixel clock (in MHz).
+
+4. The sysfs interface
+----------------------
+
+uvesafb provides several sysfs nodes for configurable parameters and
+additional information.
+
+Driver attributes:
+
+/sys/bus/platform/drivers/uvesafb
+  - v86d (default: /sbin/v86d)
+    Path to the v86d executable. v86d is started by uvesafb
+    if an instance of the daemon isn't already running.
+
+Device attributes:
+
+/sys/bus/platform/drivers/uvesafb/uvesafb.0
+  - nocrtc
+    Use the default refresh rate (60 Hz) if set to 1.
+
+  - oem_product_name
+  - oem_product_rev
+  - oem_string
+  - oem_vendor
+    Information about the card and its maker.
+
+  - vbe_modes
+    A list of video modes supported by the Video BIOS along with their
+    VBE mode numbers in hex.
+
+  - vbe_version
+    A BCD value indicating the implemented VBE standard.
+
+5. Miscellaneous
+----------------
+
+Uvesafb will set a video mode with the default refresh rate and timings
+from the Video BIOS if you set pixclock to 0 in fb_var_screeninfo.
+
+
+--
+ Michal Januszewski <spock@gentoo.org>
+ Last updated: 2007-06-16
+
+ Documentation of the uvesafb options is loosely based on vesafb.txt.
+
index f0f825808ca463023d815b3d38679851b55a6ff6..fe26cc978523959b468cd8fa5398eed5ef1b8559 100644 (file)
@@ -178,15 +178,18 @@ prototypes:
 locking rules:
        All except set_page_dirty may block
 
-                       BKL     PageLocked(page)
+                       BKL     PageLocked(page)        i_sem
 writepage:             no      yes, unlocks (see below)
 readpage:              no      yes, unlocks
 sync_page:             no      maybe
 writepages:            no
 set_page_dirty         no      no
 readpages:             no
-prepare_write:         no      yes
-commit_write:          no      yes
+prepare_write:         no      yes                     yes
+commit_write:          no      yes                     yes
+write_begin:           no      locks the page          yes
+write_end:             no      yes, unlocks            yes
+perform_write:         no      n/a                     yes
 bmap:                  yes
 invalidatepage:                no      yes
 releasepage:           no      yes
index 045f3e055a28932c76864a19696732311a4f9838..6f8e16e3d6c0c65c97f5d1dfe650977aa711e6d5 100644 (file)
@@ -537,6 +537,12 @@ struct address_space_operations {
                        struct list_head *pages, unsigned nr_pages);
        int (*prepare_write)(struct file *, struct page *, unsigned, unsigned);
        int (*commit_write)(struct file *, struct page *, unsigned, unsigned);
+       int (*write_begin)(struct file *, struct address_space *mapping,
+                               loff_t pos, unsigned len, unsigned flags,
+                               struct page **pagep, void **fsdata);
+       int (*write_end)(struct file *, struct address_space *mapping,
+                               loff_t pos, unsigned len, unsigned copied,
+                               struct page *page, void *fsdata);
        sector_t (*bmap)(struct address_space *, sector_t);
        int (*invalidatepage) (struct page *, unsigned long);
        int (*releasepage) (struct page *, int);
@@ -615,11 +621,7 @@ struct address_space_operations {
        any basic-blocks on storage, then those blocks should be
        pre-read (if they haven't been read already) so that the
        updated blocks can be written out properly.
-       The page will be locked.  If prepare_write wants to unlock the
-       page it, like readpage, may do so and return
-       AOP_TRUNCATED_PAGE.
-       In this case the prepare_write will be retried one the lock is
-       regained.
+       The page will be locked.
 
        Note: the page _must not_ be marked uptodate in this function
        (or anywhere else) unless it actually is uptodate right now. As
@@ -633,6 +635,45 @@ struct address_space_operations {
         operations.  It should avoid returning an error if possible -
         errors should have been handled by prepare_write.
 
+  write_begin: This is intended as a replacement for prepare_write. The
+       key differences being that:
+               - it returns a locked page (in *pagep) rather than being
+                 given a pre locked page;
+               - it must be able to cope with short writes (where the
+                 length passed to write_begin is greater than the number
+                 of bytes copied into the page).
+
+       Called by the generic buffered write code to ask the filesystem to
+       prepare to write len bytes at the given offset in the file. The
+       address_space should check that the write will be able to complete,
+       by allocating space if necessary and doing any other internal
+       housekeeping.  If the write will update parts of any basic-blocks on
+       storage, then those blocks should be pre-read (if they haven't been
+       read already) so that the updated blocks can be written out properly.
+
+        The filesystem must return the locked pagecache page for the specified
+       offset, in *pagep, for the caller to write into.
+
+       flags is a field for AOP_FLAG_xxx flags, described in
+       include/linux/fs.h.
+
+        A void * may be returned in fsdata, which then gets passed into
+        write_end.
+
+        Returns 0 on success; < 0 on failure (which is the error code), in
+       which case write_end is not called.
+
+  write_end: After a successful write_begin, and data copy, write_end must
+        be called. len is the original len passed to write_begin, and copied
+        is the amount that was able to be copied (copied == len is always true
+       if write_begin was called with the AOP_FLAG_UNINTERRUPTIBLE flag).
+
+        The filesystem must take care of unlocking the page and releasing it
+        refcount, and updating i_size.
+
+        Returns < 0 on failure, otherwise the number of bytes (<= 'copied')
+        that were able to be copied into pagecache.
+
   bmap: called by the VFS to map a logical block offset within object to
        physical block number. This method is used by the FIBMAP
        ioctl and for working with swap-files.  To be able to swap to
index 085e4a095eaaec661ae46a61dda993af3c3cb060..eb247997f6791fa535b0bcec101cfa658634d3ba 100644 (file)
@@ -349,6 +349,11 @@ and is between 256 and 4096 characters. It is defined in the file
        blkmtd_bs=
        blkmtd_count=
 
+       boot_delay=     Milliseconds to delay each printk during boot.
+                       Values larger than 10 seconds (10000) are changed to
+                       no delay (0).
+                       Format: integer
+
        bttv.card=      [HW,V4L] bttv (bt848 + bt878 based grabber cards)
        bttv.radio=     Most important insmod options are available as
                        kernel args too.
@@ -906,6 +911,11 @@ and is between 256 and 4096 characters. It is defined in the file
                        n must be a power of two.  The default size
                        is set in the kernel config file.
 
+       logo.nologo     [FB] Disables display of the built-in Linux logo.
+                       This may be used to provide more screen space for
+                       kernel log messages and is useful when debugging
+                       kernel boot problems.
+
        lp=0            [LP]    Specify parallel ports to use, e.g,
        lp=port[,port...]       lp=none,parport0 (lp0 not configured, lp1 uses
        lp=reset                first parallel port). 'lp=0' disables the
index 76ea6c837be568c104e393ef0b2ff465febb7e98..8861e47e5a2d7e66fcbdf4ef1f5643901a4cd4a6 100644 (file)
@@ -156,21 +156,29 @@ using the driver model to connect controller and protocol drivers using
 device tables provided by board specific initialization code.  SPI
 shows up in sysfs in several locations:
 
+   /sys/devices/.../CTLR ... physical node for a given SPI controller
+
    /sys/devices/.../CTLR/spiB.C ... spi_device on bus "B",
        chipselect C, accessed through CTLR.
 
+   /sys/bus/spi/devices/spiB.C ... symlink to that physical
+       .../CTLR/spiB.C device
+
    /sys/devices/.../CTLR/spiB.C/modalias ... identifies the driver
        that should be used with this device (for hotplug/coldplug)
 
-   /sys/bus/spi/devices/spiB.C ... symlink to the physical
-       spiB.C device
-
    /sys/bus/spi/drivers/D ... driver for one or more spi*.* devices
 
-   /sys/class/spi_master/spiB ... class device for the controller
-       managing bus "B".  All the spiB.* devices share the same
+   /sys/class/spi_master/spiB ... symlink (or actual device node) to
+       a logical node which could hold class related state for the
+       controller managing bus "B".  All spiB.* devices share one
        physical SPI bus segment, with SCLK, MOSI, and MISO.
 
+Note that the actual location of the controller's class state depends
+on whether you enabled CONFIG_SYSFS_DEPRECATED or not.  At this time,
+the only class-specific state is the bus number ("B" in "spiB"), so
+those /sys/class entries are only useful to quickly identify busses.
+
 
 How does board-specific init code declare SPI devices?
 ------------------------------------------------------
@@ -337,7 +345,8 @@ SPI protocol drivers somewhat resemble platform device drivers:
 
 The driver core will autmatically attempt to bind this driver to any SPI
 device whose board_info gave a modalias of "CHIP".  Your probe() code
-might look like this unless you're creating a class_device:
+might look like this unless you're creating a device which is managing
+a bus (appearing under /sys/class/spi_master).
 
        static int __devinit CHIP_probe(struct spi_device *spi)
        {
@@ -442,7 +451,7 @@ An SPI controller will probably be registered on the platform_bus; write
 a driver to bind to the device, whichever bus is involved.
 
 The main task of this type of driver is to provide an "spi_master".
-Use spi_alloc_master() to allocate the master, and class_get_devdata()
+Use spi_alloc_master() to allocate the master, and spi_master_get_devdata()
 to get the driver-private data allocated for that device.
 
        struct spi_master       *master;
@@ -452,7 +461,7 @@ to get the driver-private data allocated for that device.
        if (!master)
                return -ENODEV;
 
-       c = class_get_devdata(&master->cdev);
+       c = spi_master_get_devdata(master);
 
 The driver will initialize the fields of that spi_master, including the
 bus number (maybe the same as the platform device ID) and three methods
index 218e862152974283640311ab0b437f14b68fda35..cf0e3ce0d52682171688c07974e90fce66036d5f 100644 (file)
@@ -29,7 +29,7 @@ static void pabort(const char *s)
        abort();
 }
 
-static char *device = "/dev/spidev1.1";
+static const char *device = "/dev/spidev1.1";
 static uint8_t mode;
 static uint8_t bits = 8;
 static uint32_t speed = 500000;
@@ -69,7 +69,7 @@ static void transfer(int fd)
        puts("");
 }
 
-void print_usage(char *prog)
+void print_usage(const char *prog)
 {
        printf("Usage: %s [-DsbdlHOLC3]\n", prog);
        puts("  -D --device   device to use (default /dev/spidev1.1)\n"
@@ -88,7 +88,7 @@ void print_usage(char *prog)
 void parse_opts(int argc, char *argv[])
 {
        while (1) {
-               static struct option lopts[] = {
+               static const struct option lopts[] = {
                        { "device",  1, 0, 'D' },
                        { "speed",   1, 0, 's' },
                        { "delay",   1, 0, 'd' },
index 8242f52d0f2294833373621ed061e1eebeb2acdd..dd49864979964f10ee097fd46779294e4b2cbe21 100644 (file)
@@ -302,31 +302,30 @@ MEMORY POLICIES AND CPUSETS
 
 Memory policies work within cpusets as described above.  For memory policies
 that require a node or set of nodes, the nodes are restricted to the set of
-nodes whose memories are allowed by the cpuset constraints.  If the
-intersection of the set of nodes specified for the policy and the set of nodes
-allowed by the cpuset is the empty set, the policy is considered invalid and
-cannot be installed.
+nodes whose memories are allowed by the cpuset constraints.  If the nodemask
+specified for the policy contains nodes that are not allowed by the cpuset, or
+the intersection of the set of nodes specified for the policy and the set of
+nodes with memory is the empty set, the policy is considered invalid
+and cannot be installed.
 
 The interaction of memory policies and cpusets can be problematic for a
 couple of reasons:
 
-1) the memory policy APIs take physical node id's as arguments.  However, the
-   memory policy APIs do not provide a way to determine what nodes are valid
-   in the context where the application is running.  An application MAY consult
-   the cpuset file system [directly or via an out of tree, and not generally
-   available, libcpuset API] to obtain this information, but then the
-   application must be aware that it is running in a cpuset and use what are
-   intended primarily as administrative APIs.
-
-   However, as long as the policy specifies at least one node that is valid
-   in the controlling cpuset, the policy can be used.
+1) the memory policy APIs take physical node id's as arguments.  As mentioned
+   above, it is illegal to specify nodes that are not allowed in the cpuset.
+   The application must query the allowed nodes using the get_mempolicy()
+   API with the MPOL_F_MEMS_ALLOWED flag to determine the allowed nodes and
+   restrict itself to those nodes.  However, the resources available to a
+   cpuset can be changed by the system administrator, or a workload manager
+   application, at any time.  So, a task may still get errors attempting to
+   specify policy nodes, and must query the allowed memories again.
 
 2) when tasks in two cpusets share access to a memory region, such as shared
    memory segments created by shmget() of mmap() with the MAP_ANONYMOUS and
    MAP_SHARED flags, and any of the tasks install shared policy on the region,
    only nodes whose memories are allowed in both cpusets may be used in the
-   policies.  Again, obtaining this information requires "stepping outside"
-   the memory policy APIs, as well as knowing in what cpusets other task might
-   be attaching to the shared region, to use the cpuset information.
+   policies.  Obtaining this information requires "stepping outside" the
+   memory policy APIs to use the cpuset information and requires that one
+   know in what cpusets other task might be attaching to the shared region.
    Furthermore, if the cpusets' allowed memory sets are disjoint, "local"
    allocation is the only valid policy.
index f42798ed1c54c326be5021877757fef5e841f3f8..b89b6d2bebfa7b355aeffacc5c7e60e91eb54a86 100644 (file)
@@ -9,6 +9,7 @@ ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole
 ffff810000000000 - ffffc0ffffffffff (=46 bits) direct mapping of all phys. memory
 ffffc10000000000 - ffffc1ffffffffff (=40 bits) hole
 ffffc20000000000 - ffffe1ffffffffff (=45 bits) vmalloc/ioremap space
+ffffe20000000000 - ffffe2ffffffffff (=40 bits) virtual memory map (1TB)
 ... unused hole ...
 ffffffff80000000 - ffffffff82800000 (=40 MB)   kernel text mapping, from phys 0
 ... unused hole ...
index 1b704ee54bf3ad5210aab22c6f36d372aadc19e6..d1004b4d942fce7d75daccf7d6ea641bce233f0b 100644 (file)
@@ -12,73 +12,22 @@ NM := $(NM) -B
 
 LDFLAGS_vmlinux        := -static -N #-relax
 CHECKFLAGS     += -D__alpha__ -m64
-cflags-y       := -pipe -mno-fp-regs -ffixed-8
-
-# Determine if we can use the BWX instructions with GAS.
-old_gas := $(shell if $(AS) --version 2>&1 | grep 'version 2.7' > /dev/null; then echo y; else echo n; fi)
-
-ifeq ($(old_gas),y)
-$(error The assembler '$(AS)' does not support the BWX instruction)
-endif
-
-# Determine if GCC understands the -mcpu= option.
-have_mcpu        := $(call cc-option-yn, -mcpu=ev5)
-have_mcpu_pca56  := $(call cc-option-yn, -mcpu=pca56)
-have_mcpu_ev6    := $(call cc-option-yn, -mcpu=ev6)
-have_mcpu_ev67   := $(call cc-option-yn, -mcpu=ev67)
-have_msmall_data := $(call cc-option-yn, -msmall-data)
-
-cflags-$(have_msmall_data) += -msmall-data
-
-# Turn on the proper cpu optimizations.
-ifeq ($(have_mcpu),y)
-  mcpu_done := n
-  # If GENERIC, make sure to turn off any instruction set extensions that
-  # the host compiler might have on by default.  Given that EV4 and EV5
-  # have the same instruction set, prefer EV5 because an EV5 schedule is
-  # more likely to keep an EV4 processor busy than vice-versa.
-  ifeq ($(CONFIG_ALPHA_GENERIC),y)
-    mcpu := ev5
-    mcpu_done := y
-  endif
-  ifeq ($(mcpu_done)$(CONFIG_ALPHA_SX164)$(have_mcpu_pca56),nyy)
-    mcpu := pca56
-    mcpu_done := y
-  endif
-  ifeq ($(mcpu_done)$(CONFIG_ALPHA_POLARIS)$(have_mcpu_pca56),nyy)
-    mcpu := pca56
-    mcpu_done := y
-  endif
-  ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV4),ny)
-    mcpu := ev4
-    mcpu_done := y
-  endif
-  ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV56),ny)
-    mcpu := ev56
-    mcpu_done := y
-  endif
-  ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV5),ny)
-    mcpu := ev5
-    mcpu_done := y
-  endif
-  ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV67)$(have_mcpu_ev67),nyy)
-    mcpu := ev67
-    mcpu_done := y
-  endif
-  ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV6),ny)
-    ifeq ($(have_mcpu_ev6),y)
-      mcpu := ev6
-    else
-      ifeq ($(have_mcpu_pca56),y)
-        mcpu := pca56
-      else
-        mcpu=ev56
-      endif
-    endif
-    mcpu_done := y
-  endif
-  cflags-$(mcpu_done) += -mcpu=$(mcpu)
-endif
+cflags-y       := -pipe -mno-fp-regs -ffixed-8 -msmall-data
+
+cpuflags-$(CONFIG_ALPHA_EV67)          := -mcpu=ev67
+cpuflags-$(CONFIG_ALPHA_EV6)           := -mcpu=ev6
+cpuflags-$(CONFIG_ALPHA_POLARIS)       := -mcpu=pca56
+cpuflags-$(CONFIG_ALPHA_SX164)         := -mcpu=pca56
+cpuflags-$(CONFIG_ALPHA_EV56)          := -mcpu=ev56
+cpuflags-$(CONFIG_ALPHA_EV5)           := -mcpu=ev5
+cpuflags-$(CONFIG_ALPHA_EV4)           := -mcpu=ev4
+# If GENERIC, make sure to turn off any instruction set extensions that
+# the host compiler might have on by default.  Given that EV4 and EV5
+# have the same instruction set, prefer EV5 because an EV5 schedule is
+# more likely to keep an EV4 processor busy than vice-versa.
+cpuflags-$(CONFIG_ALPHA_GENERIC)       := -mcpu=ev5
+
+cflags-y                               += $(cpuflags-y)
 
 
 # For TSUNAMI, we must have the assembler not emulate our instructions.
index debc8f03886cf9edafa577664a90a6c8ec59c9ad..5fc61e281ac77724cbcf0270b4269dd4559a686b 100644 (file)
@@ -916,15 +916,6 @@ sys_pipe:
        ret
 .end sys_pipe
 
-       .align  4
-       .globl  sys_ptrace
-       .ent    sys_ptrace
-sys_ptrace:
-       .prologue 0
-       mov     $sp, $20
-       jmp     $31, do_sys_ptrace
-.end sys_ptrace
-
        .align  4
        .globl  sys_execve
        .ent    sys_execve
index 83a78184226623fa78f51e52c5643ce148de6f3f..1e9ad52c460ec293aa70f9cbc5bb3094adc08d74 100644 (file)
@@ -260,38 +260,12 @@ void ptrace_disable(struct task_struct *child)
        ptrace_cancel_bpt(child);
 }
 
-asmlinkage long
-do_sys_ptrace(long request, long pid, long addr, long data,
-             struct pt_regs *regs)
+long arch_ptrace(struct task_struct *child, long request, long addr, long data)
 {
-       struct task_struct *child;
        unsigned long tmp;
        size_t copied;
        long ret;
 
-       lock_kernel();
-       DBG(DBG_MEM, ("request=%ld pid=%ld addr=0x%lx data=0x%lx\n",
-                     request, pid, addr, data));
-       if (request == PTRACE_TRACEME) {
-               ret = ptrace_traceme();
-               goto out_notsk;
-       }
-
-       child = ptrace_get_task_struct(pid);
-       if (IS_ERR(child)) {
-               ret = PTR_ERR(child);
-               goto out_notsk;
-       }
-
-       if (request == PTRACE_ATTACH) {
-               ret = ptrace_attach(child);
-               goto out;
-       }
-
-       ret = ptrace_check_attach(child, request == PTRACE_KILL);
-       if (ret < 0)
-               goto out;
-
        switch (request) {
        /* When I and D space are separate, these will need to be fixed.  */
        case PTRACE_PEEKTEXT: /* read word at location addr. */
@@ -301,13 +275,13 @@ do_sys_ptrace(long request, long pid, long addr, long data,
                if (copied != sizeof(tmp))
                        break;
                
-               regs->r0 = 0;   /* special return: no errors */
+               force_successful_syscall_return();
                ret = tmp;
                break;
 
        /* Read register number ADDR. */
        case PTRACE_PEEKUSR:
-               regs->r0 = 0;   /* special return: no errors */
+               force_successful_syscall_return();
                ret = get_reg(child, addr);
                DBG(DBG_MEM, ("peek $%ld->%#lx\n", addr, ret));
                break;
@@ -353,7 +327,7 @@ do_sys_ptrace(long request, long pid, long addr, long data,
                /* make sure single-step breakpoint is gone. */
                ptrace_cancel_bpt(child);
                wake_up_process(child);
-               goto out;
+               break;
 
        case PTRACE_SINGLESTEP:  /* execute single instruction. */
                ret = -EIO;
@@ -366,20 +340,12 @@ do_sys_ptrace(long request, long pid, long addr, long data,
                wake_up_process(child);
                /* give it a chance to run. */
                ret = 0;
-               goto out;
-
-       case PTRACE_DETACH:      /* detach a process that was attached. */
-               ret = ptrace_detach(child, data);
-               goto out;
+               break;
 
        default:
                ret = ptrace_request(child, request, addr, data);
-               goto out;
+               break;
        }
- out:
-       put_task_struct(child);
- out_notsk:
-       unlock_kernel();
        return ret;
 }
 
index 7af07d3ad5f0dc0dcc276763c84d38453cca15dc..55c05b511f4c060d5a8cab8f7140d6f07563bd0f 100644 (file)
@@ -1,4 +1,5 @@
 #include <asm-generic/vmlinux.lds.h>
+#include <asm/page.h>
 
 OUTPUT_FORMAT("elf64-alpha")
 OUTPUT_ARCH(alpha)
@@ -8,138 +9,145 @@ jiffies = jiffies_64;
 SECTIONS
 {
 #ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS
-  . = 0xfffffc0000310000;
+       . = 0xfffffc0000310000;
 #else
-  . = 0xfffffc0001010000;
+       . = 0xfffffc0001010000;
 #endif
 
-  _text = .;                                   /* Text and read-only data */
-  .text : { 
+       _text = .;      /* Text and read-only data */
+       .text : {
        *(.text.head)
-       TEXT_TEXT
-       SCHED_TEXT
-       LOCK_TEXT
-       *(.fixup)
-       *(.gnu.warning)
-  } :kernel
-  _etext = .;                                  /* End of text section */
-
-  . = ALIGN(16);
-  __start___ex_table = .;                      /* Exception table */
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
-
-  NOTES :kernel :note
-  .dummy : { *(.dummy) } :kernel
-
-  RODATA
-
-  /* Will be freed after init */
-  . = ALIGN(8192);                             /* Init code and data */
-  __init_begin = .;
-  .init.text : { 
-       _sinittext = .;
-       *(.init.text)
-       _einittext = .;
-  }
-  .init.data : { *(.init.data) }
-
-  . = ALIGN(16);
-  __setup_start = .;
-  .init.setup : { *(.init.setup) }
-  __setup_end = .;
-
-  . = ALIGN(8);
-  __initcall_start = .;
-  .initcall.init : {
-       INITCALLS
-  }
-  __initcall_end = .;
+               TEXT_TEXT
+               SCHED_TEXT
+               LOCK_TEXT
+               *(.fixup)
+               *(.gnu.warning)
+       } :kernel
+       _etext = .;     /* End of text section */
+
+       /* Exception table */
+       . = ALIGN(16);
+       __ex_table : {
+               __start___ex_table = .;
+               *(__ex_table)
+               __stop___ex_table = .;
+       }
+
+       NOTES :kernel :note
+       .dummy : {
+               *(.dummy)
+       } :kernel
+
+       RODATA
+
+       /* Will be freed after init */
+       . = ALIGN(PAGE_SIZE);
+       /* Init code and data */
+       __init_begin = .;
+       .init.text : {
+               _sinittext = .;
+               *(.init.text)
+               _einittext = .;
+       }
+       .init.data : {
+               *(.init.data)
+       }
+
+       . = ALIGN(16);
+       .init.setup : {
+               __setup_start = .;
+               *(.init.setup)
+               __setup_end = .;
+       }
+
+       . = ALIGN(8);
+       .initcall.init : {
+               __initcall_start = .;
+               INITCALLS
+               __initcall_end = .;
+       }
 
 #ifdef CONFIG_BLK_DEV_INITRD
-  . = ALIGN(8192);
-  __initramfs_start = .;
-  .init.ramfs : { *(.init.ramfs) }
-  __initramfs_end = .;
+       . = ALIGN(PAGE_SIZE);
+       .init.ramfs : {
+               __initramfs_start = .;
+               *(.init.ramfs)
+               __initramfs_end = .;
+       }
 #endif
 
-  . = ALIGN(8);
-  .con_initcall.init : {
-       __con_initcall_start = .;
-       *(.con_initcall.init)
-       __con_initcall_end = .;
-  }
-
-  . = ALIGN(8);
-  SECURITY_INIT
-
-  PERCPU(8192)
-
-  . = ALIGN(2*8192);
-  __init_end = .;
-  /* Freed after init ends here */
-
-  /* Note 2 page alignment above.  */
-  .data.init_thread : { *(.data.init_thread) }
-
-  . = ALIGN(8192);
-  .data.page_aligned : { *(.data.page_aligned) }
-
-  . = ALIGN(64);
-  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
-
-  _data = .;
-  .data : {                                    /* Data */
-       DATA_DATA
-       CONSTRUCTORS
-  }
-
-  .got : { *(.got) }
-  .sdata : { *(.sdata) }
-
-  _edata = .;                                  /* End of data section */
-
-  __bss_start = .;
-  .sbss : { *(.sbss) *(.scommon) }
-  .bss : { *(.bss) *(COMMON) }
-  __bss_stop = .;
-
-  _end = .;
-
-  /* Sections to be discarded */
-  /DISCARD/ : { *(.exit.text) *(.exit.data) *(.exitcall.exit) }
-
-  .mdebug 0 : { *(.mdebug) }
-  .note 0 : { *(.note) }
-  .comment 0 : { *(.comment) }
-
-  /* Stabs debugging sections */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  /* DWARF 1 */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) }
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) }
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) }
+       . = ALIGN(8);
+       .con_initcall.init : {
+               __con_initcall_start = .;
+               *(.con_initcall.init)
+               __con_initcall_end = .;
+       }
+
+       . = ALIGN(8);
+       SECURITY_INIT
+
+       PERCPU(PAGE_SIZE)
+
+       . = ALIGN(2 * PAGE_SIZE);
+       __init_end = .;
+       /* Freed after init ends here */
+
+       /* Note 2 page alignment above.  */
+       .data.init_thread : {
+               *(.data.init_thread)
+       }
+
+       . = ALIGN(PAGE_SIZE);
+       .data.page_aligned : {
+               *(.data.page_aligned)
+       }
+
+       . = ALIGN(64);
+       .data.cacheline_aligned : {
+               *(.data.cacheline_aligned)
+       }
+
+       _data = .;
+       /* Data */
+       .data : {
+               DATA_DATA
+               CONSTRUCTORS
+       }
+
+       .got : {
+               *(.got)
+       }
+       .sdata : {
+               *(.sdata)
+       }
+       _edata = .;     /* End of data section */
+
+       __bss_start = .;
+       .sbss : {
+               *(.sbss)
+               *(.scommon)
+       }
+       .bss : {
+               *(.bss)
+               *(COMMON)
+       }
+       __bss_stop = .;
+       _end = .;
+
+       /* Sections to be discarded */
+       /DISCARD/ : {
+               *(.exit.text)
+               *(.exit.data)
+               *(.exitcall.exit)
+       }
+
+       .mdebug 0 : {
+               *(.mdebug)
+       }
+       .note 0 : {
+               *(.note)
+       }
+
+       STABS_DEBUG
+       DWARF_DEBUG
 }
index a0e18da594d94216e716d69f66b2cec0074aa43d..25154df3055abf7a501db5b5b00255d0bcbb410e 100644 (file)
@@ -197,7 +197,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
               current->comm, current->pid);
        if (!user_mode(regs))
                goto no_context;
-       do_exit(SIGKILL);
+       do_group_exit(SIGKILL);
 
  do_sigbus:
        /* Send a sigbus, regardless of whether we were in kernel
index 78c9f1a3d41f725c428b352d413289c564ec3933..5feee722ea9878e08a9f6415fe7de8e45d7595f9 100644 (file)
@@ -731,10 +731,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                        ret = 0;
                        break;
 
-               case PTRACE_DETACH:
-                       ret = ptrace_detach(child, data);
-                       break;
-
                case PTRACE_GETREGS:
                        ret = ptrace_getregs(child, (void __user *)data);
                        break;
index 43bb5e1063020fa112cdb9d5e6a2f6c8b7845eca..a67a0685664d0ca258b6bbc2b35ed6ea8f6156a2 100644 (file)
@@ -168,13 +168,31 @@ static void __init amlm5900_map_io(void)
 }
 
 #ifdef CONFIG_FB_S3C2410
-static struct s3c2410fb_mach_info __initdata amlm5900_lcd_info = {
+static struct s3c2410fb_display __initdata amlm5900_lcd_info = {
        .width          = 160,
        .height         = 160,
 
-/* commented out until stn patch is submitted
-*      .type           = S3C2410_LCDCON1_STN4,
-*/
+       .type           = S3C2410_LCDCON1_STN4,
+
+       .pixclock       = 680000, /* HCLK = 100MHz */
+       .xres           = 160,
+       .yres           = 160,
+       .bpp            = 4,
+       .left_margin    = 1 << (4 + 3),
+       .right_margin   = 8 << 3,
+       .hsync_len      = 48,
+       .upper_margin   = 0,
+       .lower_margin   = 0,
+
+       .lcdcon5        = 0x00000001,
+};
+
+static struct s3c2410fb_mach_info __initdata amlm5900_fb_info = {
+
+       .displays = &amlm5900_lcd_info,
+       .num_displays = 1,
+       .default_display = 0,
+
        .gpccon =       0xaaaaaaaa,
        .gpccon_mask =  0xffffffff,
        .gpcup =        0x0000ffff,
@@ -184,32 +202,6 @@ static struct s3c2410fb_mach_info __initdata amlm5900_lcd_info = {
        .gpdcon_mask =  0xffffffff,
        .gpdup =        0x0000ffff,
        .gpdup_mask =   0xffffffff,
-
-       .xres           = {
-               .min            = 160,
-               .max            = 160,
-               .defval         = 160,
-       },
-
-       .yres           = {
-               .min            = 160,
-               .max            = 160,
-               .defval         = 160,
-       },
-
-       .bpp            = {
-               .min            = 4,
-               .max            = 4,
-               .defval         = 4,
-       },
-
-       .regs           = {
-               .lcdcon1        = 0x00008225,
-               .lcdcon2        = 0x0027c000,
-               .lcdcon3        = 0x00182708,
-               .lcdcon4        = 0x00000002,
-               .lcdcon5        = 0x00000001,
-       }
 };
 #endif
 
@@ -239,7 +231,7 @@ static void __init amlm5900_init(void)
 {
        amlm5900_init_pm();
 #ifdef CONFIG_FB_S3C2410
-       s3c24xx_fb_set_platdata(&amlm5900_lcd_info);
+       s3c24xx_fb_set_platdata(&amlm5900_fb_info);
 #endif
        platform_add_devices(amlm5900_devices, ARRAY_SIZE(amlm5900_devices));
 }
index bc926992b4e447de12b0504ff7a3bbfed48bd923..587864fe25fb09f169b519dcc16d54dbb13c773d 100644 (file)
@@ -467,35 +467,70 @@ static struct platform_device bast_device_axpp = {
 
 /* LCD/VGA controller */
 
-static struct s3c2410fb_mach_info __initdata bast_lcd_info = {
-       .width          = 640,
-       .height         = 480,
-
-       .xres           = {
-               .min            = 320,
-               .max            = 1024,
-               .defval         = 640,
-       },
+static struct s3c2410fb_display __initdata bast_lcd_info[] = {
+       {
+               .type           = S3C2410_LCDCON1_TFT,
+               .width          = 640,
+               .height         = 480,
+
+               .pixclock       = 33333,
+               .xres           = 640,
+               .yres           = 480,
+               .bpp            = 4,
+               .left_margin    = 40,
+               .right_margin   = 20,
+               .hsync_len      = 88,
+               .upper_margin   = 30,
+               .lower_margin   = 32,
+               .vsync_len      = 3,
 
-       .yres           = {
-               .min            = 240,
-               .max            = 600,
-               .defval         = 480,
+               .lcdcon5        = 0x00014b02,
        },
+       {
+               .type           = S3C2410_LCDCON1_TFT,
+               .width          = 640,
+               .height         = 480,
+
+               .pixclock       = 33333,
+               .xres           = 640,
+               .yres           = 480,
+               .bpp            = 8,
+               .left_margin    = 40,
+               .right_margin   = 20,
+               .hsync_len      = 88,
+               .upper_margin   = 30,
+               .lower_margin   = 32,
+               .vsync_len      = 3,
 
-       .bpp            = {
-               .min            = 4,
-               .max            = 16,
-               .defval         = 8,
+               .lcdcon5        = 0x00014b02,
        },
+       {
+               .type           = S3C2410_LCDCON1_TFT,
+               .width          = 640,
+               .height         = 480,
+
+               .pixclock       = 33333,
+               .xres           = 640,
+               .yres           = 480,
+               .bpp            = 16,
+               .left_margin    = 40,
+               .right_margin   = 20,
+               .hsync_len      = 88,
+               .upper_margin   = 30,
+               .lower_margin   = 32,
+               .vsync_len      = 3,
 
-       .regs           = {
-               .lcdcon1        = 0x00000176,
-               .lcdcon2        = 0x1d77c7c2,
-               .lcdcon3        = 0x013a7f13,
-               .lcdcon4        = 0x00000057,
                .lcdcon5        = 0x00014b02,
-       }
+       },
+};
+
+/* LCD/VGA controller */
+
+static struct s3c2410fb_mach_info __initdata bast_fb_info = {
+
+       .displays = bast_lcd_info,
+       .num_displays = ARRAY_SIZE(bast_lcd_info),
+       .default_display = 4,
 };
 
 /* Standard BAST devices */
@@ -552,7 +587,7 @@ static void __init bast_map_io(void)
 
 static void __init bast_init(void)
 {
-       s3c24xx_fb_set_platdata(&bast_lcd_info);
+       s3c24xx_fb_set_platdata(&bast_fb_info);
        platform_add_devices(bast_devices, ARRAY_SIZE(bast_devices));
 }
 
index 9a172b4ad720f51980ab10c928eb2611970f253e..7c1145e87c121d0b4f492b3c4b8cea05ab4f4eb7 100644 (file)
@@ -133,29 +133,31 @@ static struct s3c2410_udc_mach_info h1940_udc_cfg __initdata = {
 /**
  * Set lcd on or off
  **/
-static struct s3c2410fb_mach_info h1940_lcdcfg __initdata = {
-       .fixed_syncs=           1,
-       .regs={
-               .lcdcon1=       S3C2410_LCDCON1_TFT16BPP | \
-                               S3C2410_LCDCON1_TFT | \
-                               S3C2410_LCDCON1_CLKVAL(0x0C),
-
-               .lcdcon2=       S3C2410_LCDCON2_VBPD(7) | \
-                               S3C2410_LCDCON2_LINEVAL(319) | \
-                               S3C2410_LCDCON2_VFPD(6) | \
-                               S3C2410_LCDCON2_VSPW(0),
-
-               .lcdcon3=       S3C2410_LCDCON3_HBPD(19) | \
-                               S3C2410_LCDCON3_HOZVAL(239) | \
-                               S3C2410_LCDCON3_HFPD(7),
-
-               .lcdcon4=       S3C2410_LCDCON4_MVAL(0) | \
-                               S3C2410_LCDCON4_HSPW(3),
-
-               .lcdcon5=       S3C2410_LCDCON5_FRM565 | \
-                               S3C2410_LCDCON5_INVVLINE | \
-                               S3C2410_LCDCON5_HWSWP,
-       },
+static struct s3c2410fb_display h1940_lcd __initdata = {
+       .lcdcon5=       S3C2410_LCDCON5_FRM565 | \
+                       S3C2410_LCDCON5_INVVLINE | \
+                       S3C2410_LCDCON5_HWSWP,
+
+       .type =         S3C2410_LCDCON1_TFT,
+       .width =        240,
+       .height =       320,
+       .pixclock =     260000,
+       .xres =         240,
+       .yres =         320,
+       .bpp =          16,
+       .left_margin =  20,
+       .right_margin = 8,
+       .hsync_len =    4,
+       .upper_margin = 8,
+       .lower_margin = 7,
+       .vsync_len =    1,
+};
+
+static struct s3c2410fb_mach_info h1940_fb_info __initdata = {
+       .displays = &h1940_lcd,
+       .num_displays = 1,
+       .default_display = 0,
+
        .lpcsel=        0x02,
        .gpccon=        0xaa940659,
        .gpccon_mask=   0xffffffff,
@@ -165,12 +167,6 @@ static struct s3c2410fb_mach_info h1940_lcdcfg __initdata = {
        .gpdcon_mask=   0xffffffff,
        .gpdup=         0x0000faff,
        .gpdup_mask=    0xffffffff,
-
-       .width=         240,
-       .height=        320,
-       .xres=          {240,240,240},
-       .yres=          {320,320,320},
-       .bpp=           {16,16,16},
 };
 
 static struct platform_device s3c_device_leds = {
@@ -217,7 +213,7 @@ static void __init h1940_init(void)
 {
        u32 tmp;
 
-       s3c24xx_fb_set_platdata(&h1940_lcdcfg);
+       s3c24xx_fb_set_platdata(&h1940_fb_info);
        s3c24xx_udc_set_platdata(&h1940_udc_cfg);
 
        /* Turn off suspend on both USB ports, and switch the
index e670b1e1631bd2619deb3189e7358bdeeb3ff185..a1caf4b0adacd839e82edb228476e5779155d9c1 100644 (file)
@@ -95,157 +95,83 @@ static struct s3c2410_uartcfg smdk2410_uartcfgs[] = {
 
 /* LCD driver info */
 
-/* Configuration for 640x480 SHARP LQ080V3DG01 */
-static struct s3c2410fb_mach_info qt2410_biglcd_cfg __initdata = {
-       .regs   = {
-
-               .lcdcon1        = S3C2410_LCDCON1_TFT16BPP |
-                                 S3C2410_LCDCON1_TFT |
-                                 S3C2410_LCDCON1_CLKVAL(0x01), /* HCLK/4 */
-
-               .lcdcon2        = S3C2410_LCDCON2_VBPD(18) |    /* 19 */
-                                 S3C2410_LCDCON2_LINEVAL(479) |
-                                 S3C2410_LCDCON2_VFPD(10) |    /* 11 */
-                                 S3C2410_LCDCON2_VSPW(14),     /* 15 */
-
-               .lcdcon3        = S3C2410_LCDCON3_HBPD(43) |    /* 44 */
-                                 S3C2410_LCDCON3_HOZVAL(639) | /* 640 */
-                                 S3C2410_LCDCON3_HFPD(115),    /* 116 */
-
-               .lcdcon4        = S3C2410_LCDCON4_MVAL(0) |
-                                 S3C2410_LCDCON4_HSPW(95),     /* 96 */
-
-               .lcdcon5        = S3C2410_LCDCON5_FRM565 |
-                                 S3C2410_LCDCON5_INVVLINE |
-                                 S3C2410_LCDCON5_INVVFRAME |
-                                 S3C2410_LCDCON5_PWREN |
-                                 S3C2410_LCDCON5_HWSWP,
+static struct s3c2410fb_display qt2410_lcd_cfg[] __initdata = {
+       {
+               /* Configuration for 640x480 SHARP LQ080V3DG01 */
+               .lcdcon5 = S3C2410_LCDCON5_FRM565 |
+                          S3C2410_LCDCON5_INVVLINE |
+                          S3C2410_LCDCON5_INVVFRAME |
+                          S3C2410_LCDCON5_PWREN |
+                          S3C2410_LCDCON5_HWSWP,
+
+               .type           = S3C2410_LCDCON1_TFT,
+               .width          = 640,
+               .height         = 480,
+
+               .pixclock       = 40000, /* HCLK/4 */
+               .xres           = 640,
+               .yres           = 480,
+               .bpp            = 16,
+               .left_margin    = 44,
+               .right_margin   = 116,
+               .hsync_len      = 96,
+               .upper_margin   = 19,
+               .lower_margin   = 11,
+               .vsync_len      = 15,
        },
-
-       .lpcsel         = ((0xCE6) & ~7) | 1<<4,
-
-       .width          = 640,
-       .height         = 480,
-
-       .xres           = {
-               .min    = 640,
-               .max    = 640,
-               .defval = 640,
-       },
-
-       .yres           = {
-               .min    = 480,
-               .max    = 480,
-               .defval = 480,
-       },
-
-       .bpp            = {
-               .min    = 16,
-               .max    = 16,
-               .defval = 16,
-       },
-};
-
-/* Configuration for 480x640 toppoly TD028TTEC1 */
-static struct s3c2410fb_mach_info qt2410_prodlcd_cfg __initdata = {
-       .regs   = {
-
-               .lcdcon1        = S3C2410_LCDCON1_TFT16BPP |
-                                 S3C2410_LCDCON1_TFT |
-                                 S3C2410_LCDCON1_CLKVAL(0x01), /* HCLK/4 */
-
-               .lcdcon2        = S3C2410_LCDCON2_VBPD(1) |     /* 2 */
-                                 S3C2410_LCDCON2_LINEVAL(639) |/* 640 */
-                                 S3C2410_LCDCON2_VFPD(3) |     /* 4 */
-                                 S3C2410_LCDCON2_VSPW(1),      /* 2 */
-
-               .lcdcon3        = S3C2410_LCDCON3_HBPD(7) |     /* 8 */
-                                 S3C2410_LCDCON3_HOZVAL(479) | /* 479 */
-                                 S3C2410_LCDCON3_HFPD(23),     /* 24 */
-
-               .lcdcon4        = S3C2410_LCDCON4_MVAL(0) |
-                                 S3C2410_LCDCON4_HSPW(7),      /* 8 */
-
-               .lcdcon5        = S3C2410_LCDCON5_FRM565 |
-                                 S3C2410_LCDCON5_INVVLINE |
-                                 S3C2410_LCDCON5_INVVFRAME |
-                                 S3C2410_LCDCON5_PWREN |
-                                 S3C2410_LCDCON5_HWSWP,
-       },
-
-       .lpcsel         = ((0xCE6) & ~7) | 1<<4,
-
-       .width          = 480,
-       .height         = 640,
-
-       .xres           = {
-               .min    = 480,
-               .max    = 480,
-               .defval = 480,
+       {
+               /* Configuration for 480x640 toppoly TD028TTEC1 */
+               .lcdcon5 = S3C2410_LCDCON5_FRM565 |
+                          S3C2410_LCDCON5_INVVLINE |
+                          S3C2410_LCDCON5_INVVFRAME |
+                          S3C2410_LCDCON5_PWREN |
+                          S3C2410_LCDCON5_HWSWP,
+
+               .type           = S3C2410_LCDCON1_TFT,
+               .width          = 480,
+               .height         = 640,
+               .pixclock       = 40000, /* HCLK/4 */
+               .xres           = 480,
+               .yres           = 640,
+               .bpp            = 16,
+               .left_margin    = 8,
+               .right_margin   = 24,
+               .hsync_len      = 8,
+               .upper_margin   = 2,
+               .lower_margin   = 4,
+               .vsync_len      = 2,
        },
-
-       .yres           = {
-               .min    = 640,
-               .max    = 640,
-               .defval = 640,
-       },
-
-       .bpp            = {
-               .min    = 16,
-               .max    = 16,
-               .defval = 16,
+       {
+               /* Config for 240x320 LCD */
+               .lcdcon5 = S3C2410_LCDCON5_FRM565 |
+                          S3C2410_LCDCON5_INVVLINE |
+                          S3C2410_LCDCON5_INVVFRAME |
+                          S3C2410_LCDCON5_PWREN |
+                          S3C2410_LCDCON5_HWSWP,
+
+               .type           = S3C2410_LCDCON1_TFT,
+               .width          = 240,
+               .height         = 320,
+               .pixclock       = 100000, /* HCLK/10 */
+               .xres           = 240,
+               .yres           = 320,
+               .bpp            = 16,
+               .left_margin    = 13,
+               .right_margin   = 8,
+               .hsync_len      = 4,
+               .upper_margin   = 2,
+               .lower_margin   = 7,
+               .vsync_len      = 4,
        },
 };
 
-/* Config for 240x320 LCD */
-static struct s3c2410fb_mach_info qt2410_lcd_cfg __initdata = {
-       .regs   = {
-
-               .lcdcon1        = S3C2410_LCDCON1_TFT16BPP |
-                                 S3C2410_LCDCON1_TFT |
-                                 S3C2410_LCDCON1_CLKVAL(0x04),
-
-               .lcdcon2        = S3C2410_LCDCON2_VBPD(1) |
-                                 S3C2410_LCDCON2_LINEVAL(319) |
-                                 S3C2410_LCDCON2_VFPD(6) |
-                                 S3C2410_LCDCON2_VSPW(3),
-
-               .lcdcon3        = S3C2410_LCDCON3_HBPD(12) |
-                                 S3C2410_LCDCON3_HOZVAL(239) |
-                                 S3C2410_LCDCON3_HFPD(7),
 
-               .lcdcon4        = S3C2410_LCDCON4_MVAL(0) |
-                                 S3C2410_LCDCON4_HSPW(3),
-
-               .lcdcon5        = S3C2410_LCDCON5_FRM565 |
-                                 S3C2410_LCDCON5_INVVLINE |
-                                 S3C2410_LCDCON5_INVVFRAME |
-                                 S3C2410_LCDCON5_PWREN |
-                                 S3C2410_LCDCON5_HWSWP,
-       },
+static struct s3c2410fb_mach_info qt2410_fb_info __initdata = {
+       .displays       = qt2410_lcd_cfg,
+       .num_displays   = ARRAY_SIZE(qt2410_lcd_cfg),
+       .default_display = 0,
 
        .lpcsel         = ((0xCE6) & ~7) | 1<<4,
-
-       .width          = 240,
-       .height         = 320,
-
-       .xres           = {
-               .min    = 240,
-               .max    = 240,
-               .defval = 240,
-       },
-
-       .yres           = {
-               .min    = 320,
-               .max    = 320,
-               .defval = 320,
-       },
-
-       .bpp            = {
-               .min    = 16,
-               .max    = 16,
-               .defval = 16,
-       },
 };
 
 /* CS8900 */
@@ -408,16 +334,17 @@ static void __init qt2410_machine_init(void)
 
        switch (tft_type) {
        case 'p': /* production */
-               s3c24xx_fb_set_platdata(&qt2410_prodlcd_cfg);
+               qt2410_fb_info.default_display = 1;
                break;
        case 'b': /* big */
-               s3c24xx_fb_set_platdata(&qt2410_biglcd_cfg);
+               qt2410_fb_info.default_display = 0;
                break;
        case 's': /* small */
        default:
-               s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
+               qt2410_fb_info.default_display = 2;
                break;
        }
+       s3c24xx_fb_set_platdata(&qt2410_fb_info);
 
        s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPIO_OUTPUT);
        s3c2410_gpio_setpin(S3C2410_GPB0, 1);
index b59e6d39f2f267f8cd09508c729665437df2e424..bac40c4878a50ae93dc1b309e2ed6c7bca1c1227 100644 (file)
@@ -110,28 +110,32 @@ static struct s3c2410_uartcfg rx3715_uartcfgs[] = {
 
 /* framebuffer lcd controller information */
 
-static struct s3c2410fb_mach_info rx3715_lcdcfg __initdata = {
-       .regs   = {
-               .lcdcon1 =      S3C2410_LCDCON1_TFT16BPP | \
-                               S3C2410_LCDCON1_TFT | \
-                               S3C2410_LCDCON1_CLKVAL(0x0C),
-
-               .lcdcon2 =      S3C2410_LCDCON2_VBPD(5) | \
-                               S3C2410_LCDCON2_LINEVAL(319) | \
-                               S3C2410_LCDCON2_VFPD(6) | \
-                               S3C2410_LCDCON2_VSPW(2),
-
-               .lcdcon3 =      S3C2410_LCDCON3_HBPD(35) | \
-                               S3C2410_LCDCON3_HOZVAL(239) | \
-                               S3C2410_LCDCON3_HFPD(35),
-
-               .lcdcon4 =      S3C2410_LCDCON4_MVAL(0) | \
-                               S3C2410_LCDCON4_HSPW(7),
-
-               .lcdcon5 =      S3C2410_LCDCON5_INVVLINE |
-                               S3C2410_LCDCON5_FRM565 |
-                               S3C2410_LCDCON5_HWSWP,
-       },
+static struct s3c2410fb_display rx3715_lcdcfg __initdata = {
+       .lcdcon5 =      S3C2410_LCDCON5_INVVLINE |
+                       S3C2410_LCDCON5_FRM565 |
+                       S3C2410_LCDCON5_HWSWP,
+
+       .type           = S3C2410_LCDCON1_TFT,
+       .width          = 240,
+       .height         = 320,
+
+       .pixclock       = 260000,
+       .xres           = 240,
+       .yres           = 320,
+       .bpp            = 16,
+       .left_margin    = 36,
+       .right_margin   = 36,
+       .hsync_len      = 8,
+       .upper_margin   = 6,
+       .lower_margin   = 7,
+       .vsync_len      = 3,
+};
+
+static struct s3c2410fb_mach_info rx3715_fb_info __initdata = {
+
+       .displays =     &rx3715_lcdcfg,
+       .num_displays = 1,
+       .default_display = 0,
 
        .lpcsel =       0xf82,
 
@@ -144,28 +148,6 @@ static struct s3c2410fb_mach_info rx3715_lcdcfg __initdata = {
        .gpdcon_mask =  0xffc0fff0,
        .gpdup =        0x0000faff,
        .gpdup_mask =   0xffffffff,
-
-       .fixed_syncs =  1,
-       .width  =       240,
-       .height =       320,
-
-       .xres   = {
-               .min =          240,
-               .max =          240,
-               .defval =       240,
-       },
-
-       .yres   = {
-               .max =          320,
-               .min =          320,
-               .defval =       320,
-       },
-
-       .bpp    = {
-               .min =          16,
-               .max =          16,
-               .defval =       16,
-       },
 };
 
 static struct mtd_partition rx3715_nand_part[] = {
@@ -224,7 +206,7 @@ static void __init rx3715_init_machine(void)
 #endif
        s3c2410_pm_init();
 
-       s3c24xx_fb_set_platdata(&rx3715_lcdcfg);
+       s3c24xx_fb_set_platdata(&rx3715_fb_info);
        platform_add_devices(rx3715_devices, ARRAY_SIZE(rx3715_devices));
 }
 
index 670115b8a12ea49c3592fa3bdbde0b6dc4f4e875..4552828bf8000965c4dcc7d09905dcf36b5668c8 100644 (file)
@@ -103,31 +103,35 @@ static struct s3c2410_uartcfg smdk2440_uartcfgs[] __initdata = {
 
 /* LCD driver info */
 
-static struct s3c2410fb_mach_info smdk2440_lcd_cfg __initdata = {
-       .regs   = {
-
-               .lcdcon1        = S3C2410_LCDCON1_TFT16BPP |
-                                 S3C2410_LCDCON1_TFT |
-                                 S3C2410_LCDCON1_CLKVAL(0x04),
-
-               .lcdcon2        = S3C2410_LCDCON2_VBPD(7) |
-                                 S3C2410_LCDCON2_LINEVAL(319) |
-                                 S3C2410_LCDCON2_VFPD(6) |
-                                 S3C2410_LCDCON2_VSPW(3),
-
-               .lcdcon3        = S3C2410_LCDCON3_HBPD(19) |
-                                 S3C2410_LCDCON3_HOZVAL(239) |
-                                 S3C2410_LCDCON3_HFPD(7),
-
-               .lcdcon4        = S3C2410_LCDCON4_MVAL(0) |
-                                 S3C2410_LCDCON4_HSPW(3),
-
-               .lcdcon5        = S3C2410_LCDCON5_FRM565 |
-                                 S3C2410_LCDCON5_INVVLINE |
-                                 S3C2410_LCDCON5_INVVFRAME |
-                                 S3C2410_LCDCON5_PWREN |
-                                 S3C2410_LCDCON5_HWSWP,
-       },
+static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
+
+       .lcdcon5        = S3C2410_LCDCON5_FRM565 |
+                         S3C2410_LCDCON5_INVVLINE |
+                         S3C2410_LCDCON5_INVVFRAME |
+                         S3C2410_LCDCON5_PWREN |
+                         S3C2410_LCDCON5_HWSWP,
+
+       .type           = S3C2410_LCDCON1_TFT,
+
+       .width          = 240,
+       .height         = 320,
+
+       .pixclock       = 166667, /* HCLK 60 MHz, divisor 10 */
+       .xres           = 240,
+       .yres           = 320,
+       .bpp            = 16,
+       .left_margin    = 20,
+       .right_margin   = 8,
+       .hsync_len      = 4,
+       .upper_margin   = 8,
+       .lower_margin   = 7,
+       .vsync_len      = 4,
+};
+
+static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {
+       .displays       = &smdk2440_lcd_cfg,
+       .num_displays   = 1,
+       .default_display = 0,
 
 #if 0
        /* currently setup by downloader */
@@ -142,28 +146,6 @@ static struct s3c2410fb_mach_info smdk2440_lcd_cfg __initdata = {
 #endif
 
        .lpcsel         = ((0xCE6) & ~7) | 1<<4,
-       .type           = S3C2410_LCDCON1_TFT16BPP,
-
-       .width          = 240,
-       .height         = 320,
-
-       .xres           = {
-               .min    = 240,
-               .max    = 240,
-               .defval = 240,
-       },
-
-       .yres           = {
-               .min    = 320,
-               .max    = 320,
-               .defval = 320,
-       },
-
-       .bpp            = {
-               .min    = 16,
-               .max    = 16,
-               .defval = 16,
-       },
 };
 
 static struct platform_device *smdk2440_devices[] __initdata = {
@@ -183,7 +165,7 @@ static void __init smdk2440_map_io(void)
 
 static void __init smdk2440_machine_init(void)
 {
-       s3c24xx_fb_set_platdata(&smdk2440_lcd_cfg);
+       s3c24xx_fb_set_platdata(&smdk2440_fb_info);
 
        platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
        smdk_machine_init();
index 846cce48e2b7fa8e2a012bfab6e76e1431390155..59ed1d05b71bf6d858e515d928da4ad102276d91 100644 (file)
@@ -266,7 +266,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
                 * the page fault gracefully.
                 */
                printk("VM: killing process %s\n", tsk->comm);
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
                return 0;
        }
        if (fault & VM_FAULT_SIGBUS) {
index 4942ee662e0b53c14fb84c572a1902992433a031..20b1c9d8f945e1e68e994286728476f548d82bf2 100644 (file)
@@ -22,6 +22,8 @@ DEFINE_PER_CPU(struct kprobe *, current_kprobe);
 static unsigned long kprobe_status;
 static struct pt_regs jprobe_saved_regs;
 
+struct kretprobe_blackpoint kretprobe_blacklist[] = {{NULL, NULL}};
+
 int __kprobes arch_prepare_kprobe(struct kprobe *p)
 {
        int ret = 0;
index 39060cbeb2a3e2acc45509fe8ea8303222bd17e3..9e16b8a447f206ff81bec212e69055dac79c3718 100644 (file)
@@ -227,11 +227,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                ret = 0;
                break;
 
-       /* Detach a process that was attached */
-       case PTRACE_DETACH:
-               ret = ptrace_detach(child, data);
-               break;
-
        case PTRACE_GETREGS:
                ret = ptrace_getregs(child, (void __user *)data);
                break;
index ae2d2c593b2b027efa74f6a69ab31efabf8ec5b6..11472f8701bdf4a88202d81e723efef38208e743 100644 (file)
@@ -216,7 +216,7 @@ out_of_memory:
        }
        printk("VM: Killing process %s\n", tsk->comm);
        if (user_mode(regs))
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
        goto no_context;
 
 do_sigbus:
index 64ce5fea8609afd848dbf301f2fccb10e53668a5..85caf9b711a16ff59eb069a42ee9fb29491a589b 100644 (file)
@@ -385,12 +385,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                        break;
                }
 
-       case PTRACE_DETACH:
-               {               /* detach a process that was attached. */
-                       ret = ptrace_detach(child, data);
-                       break;
-               }
-
        case PTRACE_GETREGS:
                {
 
index f4f9db698b445afff62158c4b8e00e3451145b0c..b570ae9b6cad22396e987508b3bfc3f38d61659f 100644 (file)
@@ -177,10 +177,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                        ret = 0;
                        break;
 
-               case PTRACE_DETACH:
-                       ret = ptrace_detach(child, data);
-                       break;
-
                /* Get all GP registers from the child. */
                case PTRACE_GETREGS: {
                        int i;
index 077e973c33f0c131be44a9c8e32fd4c149b61528..575a14bb110613bfba8dfc3eaf8d53191fe8bbfb 100644 (file)
@@ -254,8 +254,12 @@ timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  * it needs to be IRQF_DISABLED to make the jiffies update work properly
  */
 
-static struct irqaction irq2  = { timer_interrupt, IRQF_SHARED | IRQF_DISABLED,
-                                 CPU_MASK_NONE, "timer", NULL, NULL};
+static struct irqaction irq2  = {
+       .handler = timer_interrupt,
+       .flags = IRQF_SHARED | IRQF_DISABLED,
+       .mask = CPU_MASK_NONE,
+       .name = "timer",
+};
 
 void __init
 time_init(void)
index 38ece0cd47cbbd4c6195b9e9bc1dbcc13f80e353..2df60529a8af3b8a4c9c2b19410266faef2eead6 100644 (file)
@@ -245,10 +245,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                        break;
 
                }
-               case PTRACE_DETACH:
-                       ret = ptrace_detach(child, data);
-                       break;
-
                /* Get all GP registers from the child. */
                case PTRACE_GETREGS: {
                        int i;
index 77e655f26560a82660389d03e67c402a35627002..697494bc2de1ef360b47e811b740e48ae9fe7c55 100644 (file)
@@ -63,8 +63,12 @@ static unsigned long irq_regs[NR_CPUS] =
 
 static irqreturn_t crisv32_ipi_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 static int send_ipi(int vector, int wait, cpumask_t cpu_mask);
-static struct irqaction irq_ipi  = { crisv32_ipi_interrupt, IRQF_DISABLED,
-                                     CPU_MASK_NONE, "ipi", NULL, NULL};
+static struct irqaction irq_ipi  = {
+       .handler = crisv32_ipi_interrupt,
+       .flags = IRQF_DISABLED,
+       .mask = CPU_MASK_NONE,
+       .name = "ipi",
+};
 
 extern void cris_mmu_init(void);
 extern void cris_timer_init(void);
index 8672ab7d7978f4e0303c8bd466062487d246f478..8aab814306955a68a150a2453cfcb72f62c2441f 100644 (file)
@@ -360,7 +360,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
        up_read(&mm->mmap_sem);
        printk("VM: killing process %s\n", tsk->comm);
        if (user_mode(regs))
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
        goto no_context;
 
  do_sigbus:
index ed588d73d7d8528bb93f4909affca45403270d87..e83e0bccfab98d50af92d125e133ef8b275973fd 100644 (file)
@@ -43,7 +43,10 @@ unsigned long __delay_loops_MHz;
 static irqreturn_t timer_interrupt(int irq, void *dummy);
 
 static struct irqaction timer_irq  = {
-       timer_interrupt, IRQF_DISABLED, CPU_MASK_NONE, "timer", NULL, NULL
+       .handler = timer_interrupt,
+       .flags = IRQF_DISABLED,
+       .mask = CPU_MASK_NONE,
+       .name = "timer",
 };
 
 static inline int set_rtc_mmss(unsigned long nowtime)
index 6798fa0257b1521cab1c033c806d10236fc8c389..05093d41d98ea77c9213f50d8920cfc69d4c3874 100644 (file)
@@ -259,7 +259,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
        up_read(&mm->mmap_sem);
        printk("VM: killing process %s\n", current->comm);
        if (user_mode(__frame))
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
        goto no_context;
 
  do_sigbus:
index 2e6310b8eab71e9eeb3bc61fbfc7b0806f6250b3..59b91ac861ac5cbabc3373a770fa76e51955e287 100644 (file)
@@ -54,6 +54,11 @@ config ARCH_HAS_ILOG2_U64
        bool
        default n
 
+config HUGETLB_PAGE_SIZE_VARIABLE
+       bool
+       depends on HUGETLB_PAGE
+       default y
+
 config GENERIC_FIND_NEXT_BIT
        bool
        default y
@@ -300,6 +305,9 @@ config HOTPLUG_CPU
 config ARCH_ENABLE_MEMORY_HOTPLUG
        def_bool y
 
+config ARCH_ENABLE_MEMORY_HOTREMOVE
+       def_bool y
+
 config SCHED_SMT
        bool "SMT scheduler support"
        depends on SMP
@@ -348,6 +356,7 @@ config ARCH_FLATMEM_ENABLE
 config ARCH_SPARSEMEM_ENABLE
        def_bool y
        depends on ARCH_DISCONTIGMEM_ENABLE
+       select SPARSEMEM_VMEMMAP_ENABLE
 
 config ARCH_DISCONTIGMEM_DEFAULT
        def_bool y if (IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB)
index 6d198339bf85446d2f47d1bf7a2b5e9731dffbbb..44817d97ab43c91b7921ca83064d447da79034ad 100644 (file)
@@ -1,7 +1,8 @@
 /*
- * Linker script for gate DSO.  The gate pages are an ELF shared object prelinked to its
- * virtual address, with only one read-only segment and one execute-only segment (both fit
- * in one page).  This script controls its layout.
+ * Linker script for gate DSO.  The gate pages are an ELF shared object
+ * prelinked to its virtual address, with only one read-only segment and
+ * one execute-only segment (both fit in one page).  This script controls
+ * its layout.
  */
 
 
 
 SECTIONS
 {
-  . = GATE_ADDR + SIZEOF_HEADERS;
-
-  .hash                                : { *(.hash) }                          :readable
-  .gnu.hash                    : { *(.gnu.hash) }
-  .dynsym                      : { *(.dynsym) }
-  .dynstr                      : { *(.dynstr) }
-  .gnu.version                 : { *(.gnu.version) }
-  .gnu.version_d               : { *(.gnu.version_d) }
-  .gnu.version_r               : { *(.gnu.version_r) }
-  .dynamic                     : { *(.dynamic) }                       :readable :dynamic
-
-  /*
-   * This linker script is used both with -r and with -shared.  For the layouts to match,
-   * we need to skip more than enough space for the dynamic symbol table et al.  If this
-   * amount is insufficient, ld -shared will barf.  Just increase it here.
-   */
-  . = GATE_ADDR + 0x500;
-
-  .data.patch                  : {
-                                   __start_gate_mckinley_e9_patchlist = .;
-                                   *(.data.patch.mckinley_e9)
-                                   __end_gate_mckinley_e9_patchlist = .;
-
-                                   __start_gate_vtop_patchlist = .;
-                                   *(.data.patch.vtop)
-                                   __end_gate_vtop_patchlist = .;
-
-                                   __start_gate_fsyscall_patchlist = .;
-                                   *(.data.patch.fsyscall_table)
-                                   __end_gate_fsyscall_patchlist = .;
-
-                                   __start_gate_brl_fsys_bubble_down_patchlist = .;
-                                   *(.data.patch.brl_fsys_bubble_down)
-                                   __end_gate_brl_fsys_bubble_down_patchlist = .;
-  }                                                                    :readable
-  .IA_64.unwind_info           : { *(.IA_64.unwind_info*) }
-  .IA_64.unwind                        : { *(.IA_64.unwind*) }                 :readable :unwind
+       . = GATE_ADDR + SIZEOF_HEADERS;
+
+       .hash                   : { *(.hash) }          :readable
+       .gnu.hash               : { *(.gnu.hash) }
+       .dynsym                 : { *(.dynsym) }
+       .dynstr                 : { *(.dynstr) }
+       .gnu.version            : { *(.gnu.version) }
+       .gnu.version_d          : { *(.gnu.version_d) }
+       .gnu.version_r          : { *(.gnu.version_r) }
+
+       .dynamic                : { *(.dynamic) }       :readable       :dynamic
+
+       /*
+        * This linker script is used both with -r and with -shared.  For
+        * the layouts to match, we need to skip more than enough space for
+        * the dynamic symbol table et al.  If this amount is insufficient,
+        * ld -shared will barf.  Just increase it here.
+        */
+       . = GATE_ADDR + 0x500;
+
+       .data.patch             : {
+               __start_gate_mckinley_e9_patchlist = .;
+               *(.data.patch.mckinley_e9)
+               __end_gate_mckinley_e9_patchlist = .;
+
+               __start_gate_vtop_patchlist = .;
+               *(.data.patch.vtop)
+               __end_gate_vtop_patchlist = .;
+
+               __start_gate_fsyscall_patchlist = .;
+               *(.data.patch.fsyscall_table)
+               __end_gate_fsyscall_patchlist = .;
+
+               __start_gate_brl_fsys_bubble_down_patchlist = .;
+               *(.data.patch.brl_fsys_bubble_down)
+               __end_gate_brl_fsys_bubble_down_patchlist = .;
+       }                                               :readable
+
+       .IA_64.unwind_info      : { *(.IA_64.unwind_info*) }
+       .IA_64.unwind           : { *(.IA_64.unwind*) } :readable       :unwind
 #ifdef HAVE_BUGGY_SEGREL
-  .text (GATE_ADDR + PAGE_SIZE)        : { *(.text) *(.text.*) }               :readable
+       .text (GATE_ADDR + PAGE_SIZE) : { *(.text) *(.text.*) } :readable
 #else
-  . = ALIGN (PERCPU_PAGE_SIZE) + (. & (PERCPU_PAGE_SIZE - 1));
-  .text                                : { *(.text) *(.text.*) }               :epc
+       . = ALIGN(PERCPU_PAGE_SIZE) + (. & (PERCPU_PAGE_SIZE - 1));
+       .text                   : { *(.text) *(.text.*) }       :epc
 #endif
 
-  /DISCARD/                    : {
-       *(.got.plt) *(.got)
-       *(.data .data.* .gnu.linkonce.d.*)
-       *(.dynbss)
-       *(.bss .bss.* .gnu.linkonce.b.*)
-       *(__ex_table)
-       *(__mca_table)
-  }
+       /DISCARD/               : {
+               *(.got.plt) *(.got)
+               *(.data .data.* .gnu.linkonce.d.*)
+               *(.dynbss)
+               *(.bss .bss.* .gnu.linkonce.b.*)
+               *(__ex_table)
+               *(__mca_table)
+       }
 }
 
+/*
+ * ld does not recognize this name token; use the constant.
+ */
+#define        PT_IA_64_UNWIND 0x70000001
+
 /*
  * We must supply the ELF program headers explicitly to get just one
  * PT_LOAD segment, and set the flags explicitly to make segments read-only.
  */
 PHDRS
 {
-  readable  PT_LOAD    FILEHDR PHDRS   FLAGS(4);       /* PF_R */
+       readable        PT_LOAD FILEHDR PHDRS   FLAGS(4);       /* PF_R */
 #ifndef HAVE_BUGGY_SEGREL
-  epc      PT_LOAD     FILEHDR PHDRS   FLAGS(1);       /* PF_X */
+       epc             PT_LOAD FILEHDR PHDRS   FLAGS(1);       /* PF_X */
 #endif
-  dynamic   PT_DYNAMIC                 FLAGS(4);       /* PF_R */
-  unwind    0x70000001; /* PT_IA_64_UNWIND, but ld doesn't match the name */
+       dynamic         PT_DYNAMIC              FLAGS(4);       /* PF_R */
+       unwind          PT_IA_64_UNWIND;
 }
 
 /*
@@ -82,14 +91,14 @@ PHDRS
  */
 VERSION
 {
-  LINUX_2.5 {
-    global:
-       __kernel_syscall_via_break;
-       __kernel_syscall_via_epc;
-       __kernel_sigtramp;
-
-    local: *;
-  };
+       LINUX_2.5 {
+       global:
+               __kernel_syscall_via_break;
+               __kernel_syscall_via_epc;
+               __kernel_sigtramp;
+
+       local: *;
+       };
 }
 
 /* The ELF entry point can be used to set the AT_SYSINFO value.  */
index 5dc98b5abcfbcc3de963e60faaa139d86d362170..5fd65d8302c8561e50cf12a576f0c54569c30d1d 100644 (file)
@@ -40,6 +40,8 @@ extern void jprobe_inst_return(void);
 DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
 DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
 
+struct kretprobe_blackpoint kretprobe_blacklist[] = {{NULL, NULL}};
+
 enum instruction_type {A, I, M, F, B, L, X, u};
 static enum instruction_type bundle_encoding[32][3] = {
   { M, I, I },                         /* 00 */
index 9e392a30d19783d3426ca720b95fbea1221a71ff..777c8d8bd5e70febf80c8e5a8ed0c5d94d85de40 100644 (file)
@@ -528,10 +528,6 @@ setup_arch (char **cmdline_p)
 
 #ifdef CONFIG_SMP
        cpu_physical_id(0) = hard_smp_processor_id();
-
-       cpu_set(0, cpu_sibling_map[0]);
-       cpu_set(0, cpu_core_map[0]);
-
        check_for_logical_procs();
        if (smp_num_cpucores > 1)
                printk(KERN_INFO
@@ -873,6 +869,14 @@ cpu_init (void)
        void *cpu_data;
 
        cpu_data = per_cpu_init();
+       /*
+        * insert boot cpu into sibling and core mapes
+        * (must be done after per_cpu area is setup)
+        */
+       if (smp_processor_id() == 0) {
+               cpu_set(0, per_cpu(cpu_sibling_map, 0));
+               cpu_set(0, cpu_core_map[0]);
+       }
 
        /*
         * We set ar.k3 so that assembly code in MCA handler can compute
index 308772f7cddc23f9a733c1054f63dd3cf382d7aa..c57dbce25c12f2b7cbdc05557d2d3c8a7cd4b8bc 100644 (file)
@@ -138,7 +138,9 @@ cpumask_t cpu_possible_map = CPU_MASK_NONE;
 EXPORT_SYMBOL(cpu_possible_map);
 
 cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;
-cpumask_t cpu_sibling_map[NR_CPUS] __cacheline_aligned;
+DEFINE_PER_CPU_SHARED_ALIGNED(cpumask_t, cpu_sibling_map);
+EXPORT_PER_CPU_SYMBOL(cpu_sibling_map);
+
 int smp_num_siblings = 1;
 int smp_num_cpucores = 1;
 
@@ -650,12 +652,12 @@ clear_cpu_sibling_map(int cpu)
 {
        int i;
 
-       for_each_cpu_mask(i, cpu_sibling_map[cpu])
-               cpu_clear(cpu, cpu_sibling_map[i]);
+       for_each_cpu_mask(i, per_cpu(cpu_sibling_map, cpu))
+               cpu_clear(cpu, per_cpu(cpu_sibling_map, i));
        for_each_cpu_mask(i, cpu_core_map[cpu])
                cpu_clear(cpu, cpu_core_map[i]);
 
-       cpu_sibling_map[cpu] = cpu_core_map[cpu] = CPU_MASK_NONE;
+       per_cpu(cpu_sibling_map, cpu) = cpu_core_map[cpu] = CPU_MASK_NONE;
 }
 
 static void
@@ -666,7 +668,7 @@ remove_siblinginfo(int cpu)
        if (cpu_data(cpu)->threads_per_core == 1 &&
            cpu_data(cpu)->cores_per_socket == 1) {
                cpu_clear(cpu, cpu_core_map[cpu]);
-               cpu_clear(cpu, cpu_sibling_map[cpu]);
+               cpu_clear(cpu, per_cpu(cpu_sibling_map, cpu));
                return;
        }
 
@@ -807,8 +809,8 @@ set_cpu_sibling_map(int cpu)
                        cpu_set(i, cpu_core_map[cpu]);
                        cpu_set(cpu, cpu_core_map[i]);
                        if (cpu_data(cpu)->core_id == cpu_data(i)->core_id) {
-                               cpu_set(i, cpu_sibling_map[cpu]);
-                               cpu_set(cpu, cpu_sibling_map[i]);
+                               cpu_set(i, per_cpu(cpu_sibling_map, cpu));
+                               cpu_set(cpu, per_cpu(cpu_sibling_map, i));
                        }
                }
        }
@@ -839,7 +841,7 @@ __cpu_up (unsigned int cpu)
 
        if (cpu_data(cpu)->threads_per_core == 1 &&
            cpu_data(cpu)->cores_per_socket == 1) {
-               cpu_set(cpu, cpu_sibling_map[cpu]);
+               cpu_set(cpu, per_cpu(cpu_sibling_map, cpu));
                cpu_set(cpu, cpu_core_map[cpu]);
                return 0;
        }
index c58e933694d5d2724744f2d19d1c05dc1e993b2b..a7be4f203420ddfd82629fe5308d445911f236ba 100644 (file)
@@ -196,7 +196,7 @@ unsigned long uncached_alloc_page(int starting_nid)
        nid = starting_nid;
 
        do {
-               if (!node_online(nid))
+               if (!node_state(nid, N_HIGH_MEMORY))
                        continue;
                uc_pool = &uncached_pools[nid];
                if (uc_pool->pool == NULL)
@@ -268,7 +268,7 @@ static int __init uncached_init(void)
 {
        int nid;
 
-       for_each_online_node(nid) {
+       for_each_node_state(nid, N_ONLINE) {
                uncached_pools[nid].pool = gen_pool_create(PAGE_SHIFT, nid);
                mutex_init(&uncached_pools[nid].add_chunk_mutex);
        }
index 0d34585058c8d0044eb97af1370543e34afb2167..5628067a74d2f1c81f4d6b5f1d24cd3a718c8d77 100644 (file)
@@ -715,3 +715,11 @@ void arch_refresh_nodedata(int update_node, pg_data_t *update_pgdat)
        scatter_node_data();
 }
 #endif
+
+#ifdef CONFIG_SPARSEMEM_VMEMMAP
+int __meminit vmemmap_populate(struct page *start_page,
+                                               unsigned long size, int node)
+{
+       return vmemmap_populate_basepages(start_page, size, node);
+}
+#endif
index 9150ffaff9e891da5ed52fbc05ed040d026afabc..32f26253c4e8cea6b938e8babdffb96e826e6ac8 100644 (file)
@@ -281,6 +281,6 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
        }
        printk(KERN_CRIT "VM: killing process %s\n", current->comm);
        if (user_mode(regs))
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
        goto no_context;
 }
index a9ff685aea25acfbd6547d62d3845fb8016c96a6..d3ce8f3bcaa694070c8ccefb2ef4f03fac2fe6d0 100644 (file)
@@ -194,6 +194,6 @@ static int __init hugetlb_setup_sz(char *str)
         * override here with new page shift.
         */
        ia64_set_rr(HPAGE_REGION_BASE, hpage_shift << 2);
-       return 1;
+       return 0;
 }
-__setup("hugepagesz=", hugetlb_setup_sz);
+early_param("hugepagesz", hugetlb_setup_sz);
index c14abefabafae6ed8932d9231092a8b55aed3a1d..3e10152abbf0f5873194e383cfcd8845f202b252 100644 (file)
@@ -54,15 +54,12 @@ struct page *zero_page_memmap_ptr;  /* map entry for zero page */
 EXPORT_SYMBOL(zero_page_memmap_ptr);
 
 void
-lazy_mmu_prot_update (pte_t pte)
+__ia64_sync_icache_dcache (pte_t pte)
 {
        unsigned long addr;
        struct page *page;
        unsigned long order;
 
-       if (!pte_exec(pte))
-               return;                         /* not an executable page... */
-
        page = pte_page(pte);
        addr = (unsigned long) page_address(page);
 
@@ -721,10 +718,21 @@ int arch_add_memory(int nid, u64 start, u64 size)
 
        return ret;
 }
-
+#ifdef CONFIG_MEMORY_HOTREMOVE
 int remove_memory(u64 start, u64 size)
 {
-       return -EINVAL;
+       unsigned long start_pfn, end_pfn;
+       unsigned long timeout = 120 * HZ;
+       int ret;
+       start_pfn = start >> PAGE_SHIFT;
+       end_pfn = start_pfn + (size >> PAGE_SHIFT);
+       ret = offline_pages(start_pfn, end_pfn, timeout);
+       if (ret)
+               goto out;
+       /* we can free mem_map at this point */
+out:
+       return ret;
 }
 EXPORT_SYMBOL_GPL(remove_memory);
+#endif /* CONFIG_MEMORY_HOTREMOVE */
 #endif
index 62a51429306eb92269bb80817d5f4e3cb389f4db..ed4d0756c5dbd0abd84a39bd4b0c43cf20118aea 100644 (file)
@@ -570,7 +570,7 @@ withdraw_debug_trap(struct pt_regs *regs)
        }
 }
 
-static void
+void
 init_debug_traps(struct task_struct *child)
 {
        struct debug_trap *p = &child->thread.debug_trap;
@@ -593,8 +593,8 @@ void ptrace_disable(struct task_struct *child)
        /* nothing to do.. */
 }
 
-static int
-do_ptrace(long request, struct task_struct *child, long addr, long data)
+long
+arch_ptrace(struct task_struct *child, long request, long addr, long data)
 {
        int ret;
 
@@ -704,14 +704,6 @@ do_ptrace(long request, struct task_struct *child, long addr, long data)
                break;
        }
 
-       /*
-        * detach a process that was attached.
-        */
-       case PTRACE_DETACH:
-               ret = 0;
-               ret = ptrace_detach(child, data);
-               break;
-
        case PTRACE_GETREGS:
                ret = ptrace_getregs(child, (void __user *)data);
                break;
@@ -728,42 +720,6 @@ do_ptrace(long request, struct task_struct *child, long addr, long data)
        return ret;
 }
 
-asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
-{
-       struct task_struct *child;
-       int ret;
-
-       lock_kernel();
-       if (request == PTRACE_TRACEME) {
-               ret = ptrace_traceme();
-               goto out;
-       }
-
-       child = ptrace_get_task_struct(pid);
-       if (IS_ERR(child)) {
-               ret = PTR_ERR(child);
-               goto out;
-       }
-
-       if (request == PTRACE_ATTACH) {
-               ret = ptrace_attach(child);
-               if (ret == 0)
-                       init_debug_traps(child);
-               goto out_tsk;
-       }
-
-       ret = ptrace_check_attach(child, request == PTRACE_KILL);
-       if (ret == 0)
-               ret = do_ptrace(request, child, addr, data);
-
-out_tsk:
-       put_task_struct(child);
-out:
-       unlock_kernel();
-
-       return ret;
-}
-
 /* notification of system call entry/exit
  * - triggered by current->work.syscall_trace
  */
index 3858c9f39ba5fb2362ad60e5ce381514e5c7c933..994cc15563558b03cd8c6aef4deff3d74424779a 100644 (file)
@@ -228,8 +228,12 @@ irqreturn_t timer_interrupt(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
-struct irqaction irq0 = { timer_interrupt, IRQF_DISABLED, CPU_MASK_NONE,
-                         "MFT2", NULL, NULL };
+struct irqaction irq0 = {
+       .handler = timer_interrupt,
+       .flags = IRQF_DISABLED,
+       .mask = CPU_MASK_NONE,
+       .name = "MFT2",
+};
 
 void __init time_init(void)
 {
index 676a1c443d28c7dfbc22243f6aeb395fb3c84494..70a766aad3e0bdbcdc22b6dfd11033d3183846aa 100644 (file)
@@ -278,7 +278,7 @@ out_of_memory:
        }
        printk("VM: killing process %s\n", tsk->comm);
        if (error_code & ACE_USERMODE)
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
        goto no_context;
 
 do_sigbus:
index e792d3cba4c73e8cdfc9ac0cfd2e163cd471fa93..2075543c2d92182ce03d89a05479edf912559e36 100644 (file)
@@ -226,10 +226,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                wake_up_process(child);
                break;
 
-       case PTRACE_DETACH:     /* detach a process that was attached. */
-               ret = ptrace_detach(child, data);
-               break;
-
        case PTRACE_GETREGS:    /* Get all gp regs from the child. */
                for (i = 0; i < 19; i++) {
                        tmp = get_reg(child, i);
index 578b48f47b9e3db8a8f30397351fe841ca7ea85a..eaa618681159524ec1cf287b2ff1c91bf72d2da7 100644 (file)
@@ -188,7 +188,7 @@ out_of_memory:
 
        printk("VM: killing process %s\n", current->comm);
        if (user_mode(regs))
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
 
 no_context:
        current->thread.signo = SIGBUS;
index 7f14f70a1b88c99f72fd21bb588375186edd5005..0c7aee1682cd25852053683d7209ccf1f3fb5f16 100644 (file)
@@ -425,7 +425,7 @@ static int __init jmr3927_rtc_init(void)
                .flags  = IORESOURCE_MEM,
        };
        struct platform_device *dev;
-       dev = platform_device_register_simple("ds1742", -1, &res, 1);
+       dev = platform_device_register_simple("rtc-ds1742", -1, &res, 1);
        return IS_ERR(dev) ? PTR_ERR(dev) : 0;
 }
 device_initcall(jmr3927_rtc_init);
index 58aa6fec1146256696dd1a4619e7659810abb260..999f7853de26162893be99098d2a7221809ca40d 100644 (file)
@@ -435,10 +435,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                wake_up_process(child);
                break;
 
-       case PTRACE_DETACH: /* detach a process that was attached. */
-               ret = ptrace_detach(child, data);
-               break;
-
        case PTRACE_GET_THREAD_AREA:
                ret = put_user(task_thread_info(child)->tp_value,
                                (unsigned long __user *) data);
index 521771b373dedb2bb9dbab8e2a65c3c27be69044..5699c7713e2f01c5b42f7803df82c61c4b48ec8c 100644 (file)
@@ -180,7 +180,7 @@ out_of_memory:
        }
        printk("VM: killing process %s\n", tsk->comm);
        if (user_mode(regs))
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
        goto no_context;
 
 do_sigbus:
index acaf613358c7e4a0301708cfe6db079e0a91a2d4..b97102a1c635f2c1626ef714bcfac6f03f82a7ad 100644 (file)
@@ -963,7 +963,7 @@ static int __init toshiba_rbtx4927_rtc_init(void)
                .flags  = IORESOURCE_MEM,
        };
        struct platform_device *dev =
-               platform_device_register_simple("ds1742", -1, &res, 1);
+               platform_device_register_simple("rtc-ds1742", -1, &res, 1);
        return IS_ERR(dev) ? PTR_ERR(dev) : 0;
 }
 device_initcall(toshiba_rbtx4927_rtc_init);
index 26ec774c5027fd9b8377c99a6c77df4ba9ffd484..49c637970789ba81da5741a75817ef1274e3b1ac 100644 (file)
@@ -329,10 +329,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                /* give it a chance to run. */
                goto out_wake;
 
-       case PTRACE_DETACH:
-               ret = ptrace_detach(child, data);
-               goto out_tsk;
-
        case PTRACE_GETEVENTMSG:
                 ret = put_user(child->ptrace_message, (unsigned int __user *) data);
                goto out_tsk;
index 7899ab87785aab13576aedac86431d931699aae8..1c091b415cd9b8375506c470527ae929b9900b9c 100644 (file)
@@ -263,6 +263,6 @@ no_context:
        up_read(&mm->mmap_sem);
        printk(KERN_CRIT "VM: killing process %s\n", current->comm);
        if (user_mode(regs))
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
        goto no_context;
 }
index 037664d496d7dffb72c78f54c47be83d130bb628..5e001ad588a7d385ea5f916ccd32b72c92ed93fe 100644 (file)
@@ -295,6 +295,7 @@ config ARCH_FLATMEM_ENABLE
 config ARCH_SPARSEMEM_ENABLE
        def_bool y
        depends on PPC64
+       select SPARSEMEM_VMEMMAP_ENABLE
 
 config ARCH_SPARSEMEM_DEFAULT
        def_bool y
index 440f5a87271faf8e9467e198db21677e49ceded6..5338e48557127ca02e8238f421f73bcb88ae33b0 100644 (file)
@@ -38,6 +38,8 @@
 DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
 DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
 
+struct kretprobe_blackpoint kretprobe_blacklist[] = {{NULL, NULL}};
+
 int __kprobes arch_prepare_kprobe(struct kprobe *p)
 {
        int ret = 0;
index cf7732cdd6c7e1ef65df511297dceac941e54ef5..3e17d154d0d44be624cb42f638ac4799804fa880 100644 (file)
@@ -505,10 +505,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                ret = ptrace_set_debugreg(child, addr, data);
                break;
 
-       case PTRACE_DETACH:
-               ret = ptrace_detach(child, data);
-               break;
-
 #ifdef CONFIG_PPC64
        case PTRACE_GETREGS64:
 #endif
index 36c90ba2d31269a2fa32d950c1ec812c6e94264b..2de00f870edc34438352ae71ed54c7013228b7fa 100644 (file)
@@ -413,16 +413,28 @@ void __init smp_setup_cpu_maps(void)
                of_node_put(dn);
        }
 
+       vdso_data->processorCount = num_present_cpus();
+#endif /* CONFIG_PPC64 */
+}
+
+/*
+ * Being that cpu_sibling_map is now a per_cpu array, then it cannot
+ * be initialized until the per_cpu areas have been created.  This
+ * function is now called from setup_per_cpu_areas().
+ */
+void __init smp_setup_cpu_sibling_map(void)
+{
+#if defined(CONFIG_PPC64)
+       int cpu;
+
        /*
         * Do the sibling map; assume only two threads per processor.
         */
        for_each_possible_cpu(cpu) {
-               cpu_set(cpu, cpu_sibling_map[cpu]);
+               cpu_set(cpu, per_cpu(cpu_sibling_map, cpu));
                if (cpu_has_feature(CPU_FTR_SMT))
-                       cpu_set(cpu ^ 0x1, cpu_sibling_map[cpu]);
+                       cpu_set(cpu ^ 0x1, per_cpu(cpu_sibling_map, cpu));
        }
-
-       vdso_data->processorCount = num_present_cpus();
 #endif /* CONFIG_PPC64 */
 }
 #endif /* CONFIG_SMP */
index 008ab6823b022a1793259b62697008f15feb90d5..0e014550b83f714912b546c03169ade684e7d274 100644 (file)
@@ -597,6 +597,9 @@ void __init setup_per_cpu_areas(void)
                paca[i].data_offset = ptr - __per_cpu_start;
                memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start);
        }
+
+       /* Now that per_cpu is setup, initialize cpu_sibling_map */
+       smp_setup_cpu_sibling_map();
 }
 #endif
 
index d30f08fa029772dff196d73b6177924e27aeebc4..338950aeb6f6e3f3d19511e87cc992ad4e3535e4 100644 (file)
@@ -61,11 +61,11 @@ struct thread_info *secondary_ti;
 
 cpumask_t cpu_possible_map = CPU_MASK_NONE;
 cpumask_t cpu_online_map = CPU_MASK_NONE;
-cpumask_t cpu_sibling_map[NR_CPUS] = { [0 ... NR_CPUS-1] = CPU_MASK_NONE };
+DEFINE_PER_CPU(cpumask_t, cpu_sibling_map) = CPU_MASK_NONE;
 
 EXPORT_SYMBOL(cpu_online_map);
 EXPORT_SYMBOL(cpu_possible_map);
-EXPORT_SYMBOL(cpu_sibling_map);
+EXPORT_PER_CPU_SYMBOL(cpu_sibling_map);
 
 /* SMP operations for this machine */
 struct smp_ops_t *smp_ops;
index 26e138c4ce1756fe73ac995fc6c86e26cf5328ed..9352ab5200e591ba2a0b2cb551f125a2b29dc652 100644 (file)
-
 /*
  * This is the infamous ld script for the 32 bits vdso
  * library
  */
 #include <asm/vdso.h>
 
-/* Default link addresses for the vDSOs */
 OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
 OUTPUT_ARCH(powerpc:common)
 ENTRY(_start)
 
 SECTIONS
 {
-  . = VDSO32_LBASE + SIZEOF_HEADERS;
-  .hash           : { *(.hash) }                       :text
-  .gnu.hash       : { *(.gnu.hash) }
-  .dynsym         : { *(.dynsym) }
-  .dynstr         : { *(.dynstr) }
-  .gnu.version    : { *(.gnu.version) }
-  .gnu.version_d  : { *(.gnu.version_d) }
-  .gnu.version_r  : { *(.gnu.version_r) }
-
-  .note                  : { *(.note.*) }                      :text   :note
-
-  . = ALIGN (16);
-  .text :
-  {
-    *(.text .stub .text.* .gnu.linkonce.t.*)
-  }
-  PROVIDE (__etext = .);
-  PROVIDE (_etext = .);
-  PROVIDE (etext = .);
-
-  . = ALIGN(8);
-  __ftr_fixup : {
-    *(__ftr_fixup)
-  }
+       . = VDSO32_LBASE + SIZEOF_HEADERS;
+
+       .hash           : { *(.hash) }                  :text
+       .gnu.hash       : { *(.gnu.hash) }
+       .dynsym         : { *(.dynsym) }
+       .dynstr         : { *(.dynstr) }
+       .gnu.version    : { *(.gnu.version) }
+       .gnu.version_d  : { *(.gnu.version_d) }
+       .gnu.version_r  : { *(.gnu.version_r) }
+
+       .note           : { *(.note.*) }                :text   :note
+
+       . = ALIGN(16);
+       .text           : {
+               *(.text .stub .text.* .gnu.linkonce.t.*)
+       }
+       PROVIDE(__etext = .);
+       PROVIDE(_etext = .);
+       PROVIDE(etext = .);
+
+       . = ALIGN(8);
+       __ftr_fixup     : { *(__ftr_fixup) }
 
 #ifdef CONFIG_PPC64
-  . = ALIGN(8);
-  __fw_ftr_fixup : {
-    *(__fw_ftr_fixup)
-  }
+       . = ALIGN(8);
+       __fw_ftr_fixup  : { *(__fw_ftr_fixup) }
 #endif
 
-  /* Other stuff is appended to the text segment: */
-  .rodata              : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
-  .rodata1             : { *(.rodata1) }
-
-  .eh_frame_hdr                : { *(.eh_frame_hdr) }          :text   :eh_frame_hdr
-  .eh_frame            : { KEEP (*(.eh_frame)) }       :text
-  .gcc_except_table    : { *(.gcc_except_table) }
-  .fixup               : { *(.fixup) }
-
-  .dynamic             : { *(.dynamic) }               :text   :dynamic
-  .got : { *(.got) }
-  .plt : { *(.plt) }
-
-  _end = .;
-  __end = .;
-  PROVIDE (end = .);
-
-
-  /* Stabs debugging sections are here too
-   */
-  .stab 0 : { *(.stab) }
-  .stabstr 0 : { *(.stabstr) }
-  .stab.excl 0 : { *(.stab.excl) }
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment 0 : { *(.comment) }
-  .debug 0 : { *(.debug) }
-  .line 0 : { *(.line) }
-
-  .debug_srcinfo 0 : { *(.debug_srcinfo) }
-  .debug_sfnames 0 : { *(.debug_sfnames) }
-
-  .debug_aranges 0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-
-  .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
-  .debug_abbrev 0 : { *(.debug_abbrev) }
-  .debug_line 0 : { *(.debug_line) }
-  .debug_frame 0 : { *(.debug_frame) }
-  .debug_str 0 : { *(.debug_str) }
-  .debug_loc 0 : { *(.debug_loc) }
-  .debug_macinfo 0 : { *(.debug_macinfo) }
-
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames 0 : { *(.debug_varnames) }
-
-  /DISCARD/ : { *(.note.GNU-stack) }
-  /DISCARD/ : { *(.data .data.* .gnu.linkonce.d.* .sdata*) }
-  /DISCARD/ : { *(.bss .sbss .dynbss .dynsbss) }
+       /*
+        * Other stuff is appended to the text segment:
+        */
+       .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+       .rodata1        : { *(.rodata1) }
+
+       .eh_frame_hdr   : { *(.eh_frame_hdr) }          :text   :eh_frame_hdr
+       .eh_frame       : { KEEP (*(.eh_frame)) }       :text
+       .gcc_except_table : { *(.gcc_except_table) }
+       .fixup          : { *(.fixup) }
+
+       .dynamic        : { *(.dynamic) }               :text   :dynamic
+       .got            : { *(.got) }
+       .plt            : { *(.plt) }
+
+       _end = .;
+       __end = .;
+       PROVIDE(end = .);
+
+       /*
+        * Stabs debugging sections are here too.
+        */
+       .stab 0 : { *(.stab) }
+       .stabstr 0 : { *(.stabstr) }
+       .stab.excl 0 : { *(.stab.excl) }
+       .stab.exclstr 0 : { *(.stab.exclstr) }
+       .stab.index 0 : { *(.stab.index) }
+       .stab.indexstr 0 : { *(.stab.indexstr) }
+       .comment       0 : { *(.comment) }
+
+       /*
+        * DWARF debug sections.
+        * Symbols in the DWARF debugging sections are relative to the beginning
+        * of the section so we begin them at 0.
+        */
+       /* DWARF 1 */
+       .debug          0 : { *(.debug) }
+       .line           0 : { *(.line) }
+       /* GNU DWARF 1 extensions */
+       .debug_srcinfo  0 : { *(.debug_srcinfo) }
+       .debug_sfnames  0 : { *(.debug_sfnames) }
+       /* DWARF 1.1 and DWARF 2 */
+       .debug_aranges  0 : { *(.debug_aranges) }
+       .debug_pubnames 0 : { *(.debug_pubnames) }
+       /* DWARF 2 */
+       .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+       .debug_abbrev   0 : { *(.debug_abbrev) }
+       .debug_line     0 : { *(.debug_line) }
+       .debug_frame    0 : { *(.debug_frame) }
+       .debug_str      0 : { *(.debug_str) }
+       .debug_loc      0 : { *(.debug_loc) }
+       .debug_macinfo  0 : { *(.debug_macinfo) }
+       /* SGI/MIPS DWARF 2 extensions */
+       .debug_weaknames 0 : { *(.debug_weaknames) }
+       .debug_funcnames 0 : { *(.debug_funcnames) }
+       .debug_typenames 0 : { *(.debug_typenames) }
+       .debug_varnames  0 : { *(.debug_varnames) }
+
+       /DISCARD/       : {
+               *(.note.GNU-stack)
+               *(.data .data.* .gnu.linkonce.d.* .sdata*)
+               *(.bss .sbss .dynbss .dynsbss)
+       }
 }
 
+/*
+ * Very old versions of ld do not recognize this name token; use the constant.
+ */
+#define PT_GNU_EH_FRAME        0x6474e550
 
+/*
+ * We must supply the ELF program headers explicitly to get just one
+ * PT_LOAD segment, and set the flags explicitly to make segments read-only.
+ */
 PHDRS
 {
-  text PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */
-  note PT_NOTE FLAGS(4); /* PF_R */
-  dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
-  eh_frame_hdr 0x6474e550; /* PT_GNU_EH_FRAME, but ld doesn't match the name */
+       text            PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */
+       dynamic         PT_DYNAMIC FLAGS(4);            /* PF_R */
+       note            PT_NOTE FLAGS(4);               /* PF_R */
+       eh_frame_hdr    PT_GNU_EH_FRAME;
 }
 
-
 /*
  * This controls what symbols we export from the DSO.
  */
 VERSION
 {
-  VDSO_VERSION_STRING {
-    global:
-       __kernel_datapage_offset; /* Has to be there for the kernel to find */
-       __kernel_get_syscall_map;
-       __kernel_gettimeofday;
-       __kernel_clock_gettime;
-       __kernel_clock_getres;
-       __kernel_get_tbfreq;
-       __kernel_sync_dicache;
-       __kernel_sync_dicache_p5;
-       __kernel_sigtramp32;
-       __kernel_sigtramp_rt32;
-    local: *;
-  };
+       VDSO_VERSION_STRING {
+       global:
+               /*
+                * Has to be there for the kernel to find
+                */
+               __kernel_datapage_offset;
+
+               __kernel_get_syscall_map;
+               __kernel_gettimeofday;
+               __kernel_clock_gettime;
+               __kernel_clock_getres;
+               __kernel_get_tbfreq;
+               __kernel_sync_dicache;
+               __kernel_sync_dicache_p5;
+               __kernel_sigtramp32;
+               __kernel_sigtramp_rt32;
+
+       local: *;
+       };
 }
index 2d70f35d50b520bdd2d81bf78d0b2e1eb9a7601b..932b3fdb34b93ced7bd2c10da184f67ff906a66b 100644 (file)
@@ -10,100 +10,114 @@ ENTRY(_start)
 
 SECTIONS
 {
-  . = VDSO64_LBASE + SIZEOF_HEADERS;
-  .hash           : { *(.hash) }               :text
-  .gnu.hash       : { *(.gnu.hash) }
-  .dynsym         : { *(.dynsym) }
-  .dynstr         : { *(.dynstr) }
-  .gnu.version    : { *(.gnu.version) }
-  .gnu.version_d  : { *(.gnu.version_d) }
-  .gnu.version_r  : { *(.gnu.version_r) }
-
-  .note                  : { *(.note.*) }              :text   :note
-
-  . = ALIGN (16);
-  .text           :
-  {
-    *(.text .stub .text.* .gnu.linkonce.t.*)
-    *(.sfpr .glink)
-  }                                            :text
-  PROVIDE (__etext = .);
-  PROVIDE (_etext = .);
-  PROVIDE (etext = .);
-
-  . = ALIGN(8);
-  __ftr_fixup : {
-    *(__ftr_fixup)
-  }
-
-  . = ALIGN(8);
-  __fw_ftr_fixup : {
-    *(__fw_ftr_fixup)
-  }
-
-  /* Other stuff is appended to the text segment: */
-  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
-  .rodata1        : { *(.rodata1) }
-  .eh_frame_hdr   : { *(.eh_frame_hdr) }       :text   :eh_frame_hdr
-  .eh_frame       : { KEEP (*(.eh_frame)) }    :text
-  .gcc_except_table   : { *(.gcc_except_table) }
-
-  .opd           ALIGN(8) : { KEEP (*(.opd)) }
-  .got          ALIGN(8) : { *(.got .toc) }
-  .rela.dyn     ALIGN(8) : { *(.rela.dyn) }
-
-  .dynamic        : { *(.dynamic) }            :text   :dynamic
-
-  _end = .;
-  PROVIDE (end = .);
-
-  /* Stabs debugging sections are here too
-   */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment       0 : { *(.comment) }
-  /* DWARF debug sectio/ns.
-     Symbols in the DWARF debugging sections are relative to the beginning
-     of the section so we begin them at 0.  */
-  /* DWARF 1 */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) }
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) }
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) }
-
-  /DISCARD/ : { *(.note.GNU-stack) }
-  /DISCARD/ : { *(.branch_lt) }
-  /DISCARD/ : { *(.data .data.* .gnu.linkonce.d.*) }
-  /DISCARD/ : { *(.bss .sbss .dynbss .dynsbss) }
+       . = VDSO64_LBASE + SIZEOF_HEADERS;
+
+       .hash           : { *(.hash) }                  :text
+       .gnu.hash       : { *(.gnu.hash) }
+       .dynsym         : { *(.dynsym) }
+       .dynstr         : { *(.dynstr) }
+       .gnu.version    : { *(.gnu.version) }
+       .gnu.version_d  : { *(.gnu.version_d) }
+       .gnu.version_r  : { *(.gnu.version_r) }
+
+       .note           : { *(.note.*) }                :text   :note
+
+       . = ALIGN(16);
+       .text           : {
+               *(.text .stub .text.* .gnu.linkonce.t.*)
+               *(.sfpr .glink)
+       }                                               :text
+       PROVIDE(__etext = .);
+       PROVIDE(_etext = .);
+       PROVIDE(etext = .);
+
+       . = ALIGN(8);
+       __ftr_fixup     : { *(__ftr_fixup) }
+
+       . = ALIGN(8);
+       __fw_ftr_fixup  : { *(__fw_ftr_fixup) }
+
+       /*
+        * Other stuff is appended to the text segment:
+        */
+       .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+       .rodata1        : { *(.rodata1) }
+
+       .eh_frame_hdr   : { *(.eh_frame_hdr) }          :text   :eh_frame_hdr
+       .eh_frame       : { KEEP (*(.eh_frame)) }       :text
+       .gcc_except_table : { *(.gcc_except_table) }
+
+       .opd ALIGN(8)   : { KEEP (*(.opd)) }
+       .got ALIGN(8)   : { *(.got .toc) }
+       .rela.dyn ALIGN(8) : { *(.rela.dyn) }
+
+       .dynamic        : { *(.dynamic) }               :text   :dynamic
+
+       _end = .;
+       PROVIDE(end = .);
+
+       /*
+        * Stabs debugging sections are here too.
+        */
+       .stab          0 : { *(.stab) }
+       .stabstr       0 : { *(.stabstr) }
+       .stab.excl     0 : { *(.stab.excl) }
+       .stab.exclstr  0 : { *(.stab.exclstr) }
+       .stab.index    0 : { *(.stab.index) }
+       .stab.indexstr 0 : { *(.stab.indexstr) }
+       .comment       0 : { *(.comment) }
+
+       /*
+        * DWARF debug sections.
+        * Symbols in the DWARF debugging sections are relative to the beginning
+        * of the section so we begin them at 0.
+        */
+       /* DWARF 1 */
+       .debug          0 : { *(.debug) }
+       .line           0 : { *(.line) }
+       /* GNU DWARF 1 extensions */
+       .debug_srcinfo  0 : { *(.debug_srcinfo) }
+       .debug_sfnames  0 : { *(.debug_sfnames) }
+       /* DWARF 1.1 and DWARF 2 */
+       .debug_aranges  0 : { *(.debug_aranges) }
+       .debug_pubnames 0 : { *(.debug_pubnames) }
+       /* DWARF 2 */
+       .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+       .debug_abbrev   0 : { *(.debug_abbrev) }
+       .debug_line     0 : { *(.debug_line) }
+       .debug_frame    0 : { *(.debug_frame) }
+       .debug_str      0 : { *(.debug_str) }
+       .debug_loc      0 : { *(.debug_loc) }
+       .debug_macinfo  0 : { *(.debug_macinfo) }
+       /* SGI/MIPS DWARF 2 extensions */
+       .debug_weaknames 0 : { *(.debug_weaknames) }
+       .debug_funcnames 0 : { *(.debug_funcnames) }
+       .debug_typenames 0 : { *(.debug_typenames) }
+       .debug_varnames  0 : { *(.debug_varnames) }
+
+       /DISCARD/       : {
+               *(.note.GNU-stack)
+               *(.branch_lt)
+               *(.data .data.* .gnu.linkonce.d.* .sdata*)
+               *(.bss .sbss .dynbss .dynsbss)
+       }
 }
 
+/*
+ * Very old versions of ld do not recognize this name token; use the constant.
+ */
+#define PT_GNU_EH_FRAME        0x6474e550
+
+/*
+ * We must supply the ELF program headers explicitly to get just one
+ * PT_LOAD segment, and set the flags explicitly to make segments read-only.
+ */
 PHDRS
 {
-  text PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */
-  note PT_NOTE FLAGS(4); /* PF_R */
-  dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
-  eh_frame_hdr 0x6474e550; /* PT_GNU_EH_FRAME, but ld doesn't match the name */
+       text            PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */
+       dynamic         PT_DYNAMIC FLAGS(4);            /* PF_R */
+       note            PT_NOTE FLAGS(4);               /* PF_R */
+       eh_frame_hdr    PT_GNU_EH_FRAME;
 }
 
 /*
@@ -111,17 +125,22 @@ PHDRS
  */
 VERSION
 {
-  VDSO_VERSION_STRING {
-    global:
-       __kernel_datapage_offset; /* Has to be there for the kernel to find */
-       __kernel_get_syscall_map;
-       __kernel_gettimeofday;
-       __kernel_clock_gettime;
-       __kernel_clock_getres;
-       __kernel_get_tbfreq;
-       __kernel_sync_dicache;
-       __kernel_sync_dicache_p5;
-       __kernel_sigtramp_rt64;
-    local: *;
-  };
+       VDSO_VERSION_STRING {
+       global:
+               /*
+                * Has to be there for the kernel to find
+                */
+               __kernel_datapage_offset;
+
+               __kernel_get_syscall_map;
+               __kernel_gettimeofday;
+               __kernel_clock_gettime;
+               __kernel_clock_getres;
+               __kernel_get_tbfreq;
+               __kernel_sync_dicache;
+               __kernel_sync_dicache_p5;
+               __kernel_sigtramp_rt64;
+
+       local: *;
+       };
 }
index fa90f6561b9f8fcce44f6f0377c66e02228810db..29ed495444f5e109e477defddd0dee704397506e 100644 (file)
@@ -183,3 +183,70 @@ void pgtable_cache_init(void)
                                                     zero_ctor);
        }
 }
+
+#ifdef CONFIG_SPARSEMEM_VMEMMAP
+/*
+ * Given an address within the vmemmap, determine the pfn of the page that
+ * represents the start of the section it is within.  Note that we have to
+ * do this by hand as the proffered address may not be correctly aligned.
+ * Subtraction of non-aligned pointers produces undefined results.
+ */
+unsigned long __meminit vmemmap_section_start(unsigned long page)
+{
+       unsigned long offset = page - ((unsigned long)(vmemmap));
+
+       /* Return the pfn of the start of the section. */
+       return (offset / sizeof(struct page)) & PAGE_SECTION_MASK;
+}
+
+/*
+ * Check if this vmemmap page is already initialised.  If any section
+ * which overlaps this vmemmap page is initialised then this page is
+ * initialised already.
+ */
+int __meminit vmemmap_populated(unsigned long start, int page_size)
+{
+       unsigned long end = start + page_size;
+
+       for (; start < end; start += (PAGES_PER_SECTION * sizeof(struct page)))
+               if (pfn_valid(vmemmap_section_start(start)))
+                       return 1;
+
+       return 0;
+}
+
+int __meminit vmemmap_populate(struct page *start_page,
+                                       unsigned long nr_pages, int node)
+{
+       unsigned long mode_rw;
+       unsigned long start = (unsigned long)start_page;
+       unsigned long end = (unsigned long)(start_page + nr_pages);
+       unsigned long page_size = 1 << mmu_psize_defs[mmu_linear_psize].shift;
+
+       mode_rw = _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_COHERENT | PP_RWXX;
+
+       /* Align to the page size of the linear mapping. */
+       start = _ALIGN_DOWN(start, page_size);
+
+       for (; start < end; start += page_size) {
+               int mapped;
+               void *p;
+
+               if (vmemmap_populated(start, page_size))
+                       continue;
+
+               p = vmemmap_alloc_block(page_size, node);
+               if (!p)
+                       return -ENOMEM;
+
+               printk(KERN_WARNING "vmemmap %08lx allocated at %p, "
+                                       "physical %p.\n", start, p, __pa(p));
+
+               mapped = htab_bolt_mapping(start, start + page_size,
+                                       __pa(p), mode_rw, mmu_linear_psize);
+               BUG_ON(mapped < 0);
+       }
+
+       return 0;
+}
+#endif
index 32dcfc9b00827f0a6a0bbf90f77dfc6c75948aca..81eb96ec13b2de917bb8d12666aeed587f4b8838 100644 (file)
@@ -129,51 +129,6 @@ int __devinit arch_add_memory(int nid, u64 start, u64 size)
        return __add_pages(zone, start_pfn, nr_pages);
 }
 
-/*
- * First pass at this code will check to determine if the remove
- * request is within the RMO.  Do not allow removal within the RMO.
- */
-int __devinit remove_memory(u64 start, u64 size)
-{
-       struct zone *zone;
-       unsigned long start_pfn, end_pfn, nr_pages;
-
-       start_pfn = start >> PAGE_SHIFT;
-       nr_pages = size >> PAGE_SHIFT;
-       end_pfn = start_pfn + nr_pages;
-
-       printk("%s(): Attempting to remove memoy in range "
-                       "%lx to %lx\n", __func__, start, start+size);
-       /*
-        * check for range within RMO
-        */
-       zone = page_zone(pfn_to_page(start_pfn));
-
-       printk("%s(): memory will be removed from "
-