Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 24 Jan 2007 17:46:54 +0000 (09:46 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 24 Jan 2007 17:46:54 +0000 (09:46 -0800)
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
  [CIFS] Fix oops when Windows server sent bad domain name null terminator
  [CIFS]  cifs sprintf fix
  [CIFS] Remove 2 unneeded kzalloc casts
  [CIFS] Update CIFS version number

720 files changed:
CREDITS
Documentation/DocBook/Makefile
Documentation/DocBook/libata.tmpl
Documentation/SubmitChecklist
Documentation/SubmittingPatches
Documentation/arm/Samsung-S3C24XX/Overview.txt
Documentation/cachetlb.txt
Documentation/feature-removal-schedule.txt
Documentation/filesystems/Locking
Documentation/filesystems/fuse.txt
Documentation/filesystems/ntfs.txt
Documentation/hwmon/w83793
Documentation/kdump/kdump.txt
Documentation/pci.txt
Documentation/powerpc/mpc52xx-device-tree-bindings.txt
Documentation/scsi/aacraid.txt
Documentation/tty.txt
Documentation/usb/CREDITS
Documentation/usb/acm.txt
Documentation/x86_64/boot-options.txt
MAINTAINERS
Makefile
README
arch/arm/kernel/entry-armv.S
arch/arm/kernel/time.c
arch/arm/kernel/traps.c
arch/arm/mach-iop13xx/io.c
arch/arm/mach-omap2/board-apollon.c
arch/arm/mach-omap2/gpmc.c
arch/arm/mach-pxa/generic.c
arch/arm/mach-pxa/time.c
arch/arm/mach-s3c2410/dma.c
arch/arm/mm/copypage-v4mc.c
arch/arm/mm/copypage-v6.c
arch/arm/mm/copypage-xscale.c
arch/arm/mm/flush.c
arch/arm/vfp/vfpmodule.c
arch/cris/arch-v32/kernel/smp.c
arch/i386/Kconfig
arch/i386/boot/compressed/.gitignore [new file with mode: 0644]
arch/i386/boot/compressed/head.S
arch/i386/defconfig
arch/i386/kernel/acpi/boot.c
arch/i386/kernel/acpi/cstate.c
arch/i386/kernel/cpu/common.c
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
arch/i386/kernel/cpu/cpufreq/longhaul.c
arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
arch/i386/kernel/cpu/cyrix.c
arch/i386/kernel/mpparse.c
arch/i386/kernel/nmi.c
arch/i386/kernel/paravirt.c
arch/i386/kernel/setup.c
arch/i386/kernel/smpboot.c
arch/i386/kernel/trampoline.S
arch/i386/kernel/tsc.c
arch/i386/mach-generic/bigsmp.c
arch/i386/mach-generic/default.c
arch/i386/mach-generic/es7000.c
arch/i386/mach-generic/summit.c
arch/i386/mach-voyager/voyager_smp.c
arch/i386/mm/init.c
arch/i386/pci/mmconfig.c
arch/ia64/kernel/acpi.c
arch/ia64/mm/init.c
arch/ia64/sn/kernel/io_acpi_init.c
arch/m32r/kernel/smpboot.c
arch/mips/Kconfig
arch/mips/au1000/common/pci.c
arch/mips/kernel/linux32.c
arch/mips/kernel/mips_ksyms.c
arch/mips/kernel/scall64-n32.S
arch/mips/kernel/smp.c
arch/mips/kernel/smtc.c
arch/mips/kernel/time.c
arch/mips/lib/Makefile
arch/mips/lib/csum_partial.S
arch/mips/lib/csum_partial_copy.c [deleted file]
arch/mips/mips-boards/generic/time.c
arch/mips/mips-boards/malta/malta_mtd.c [new file with mode: 0644]
arch/mips/mips-boards/sead/sead_int.c
arch/mips/mm/pg-r4k.c
arch/mips/mm/tlb-r4k.c
arch/mips/pci/ops-pnx8550.c
arch/mips/philips/pnx8550/common/time.c
arch/mips/vr41xx/common/irq.c
arch/parisc/kernel/smp.c
arch/powerpc/Kconfig
arch/powerpc/boot/dts/lite5200.dts
arch/powerpc/boot/dts/lite5200b.dts
arch/powerpc/configs/cell_defconfig
arch/powerpc/configs/chrp32_defconfig
arch/powerpc/configs/g5_defconfig
arch/powerpc/configs/iseries_defconfig
arch/powerpc/configs/linkstation_defconfig
arch/powerpc/configs/lite5200_defconfig
arch/powerpc/configs/maple_defconfig
arch/powerpc/configs/mpc7448_hpc2_defconfig
arch/powerpc/configs/mpc834x_itx_defconfig
arch/powerpc/configs/mpc834x_mds_defconfig
arch/powerpc/configs/mpc8360emds_defconfig
arch/powerpc/configs/mpc8540_ads_defconfig
arch/powerpc/configs/mpc8560_ads_defconfig
arch/powerpc/configs/mpc85xx_cds_defconfig
arch/powerpc/configs/mpc8641_hpcn_defconfig
arch/powerpc/configs/pmac32_defconfig
arch/powerpc/configs/ppc64_defconfig
arch/powerpc/configs/ps3_defconfig
arch/powerpc/configs/pseries_defconfig
arch/powerpc/kernel/asm-offsets.c
arch/powerpc/kernel/entry_64.S
arch/powerpc/kernel/pci_32.c
arch/powerpc/kernel/smp.c
arch/powerpc/mm/hugetlbpage.c
arch/powerpc/platforms/52xx/lite5200.c
arch/powerpc/platforms/52xx/mpc52xx_common.c
arch/powerpc/platforms/83xx/mpc832x_mds.c
arch/powerpc/platforms/83xx/mpc8360e_pb.c
arch/powerpc/platforms/iseries/lpevents.c
arch/powerpc/platforms/iseries/mf.c
arch/powerpc/platforms/iseries/proc.c
arch/powerpc/platforms/iseries/setup.c
arch/powerpc/platforms/iseries/viopath.c
arch/powerpc/platforms/maple/setup.c
arch/powerpc/platforms/pasemi/setup.c
arch/powerpc/platforms/pseries/hvCall.S
arch/powerpc/platforms/pseries/hvCall_inst.c
arch/powerpc/platforms/pseries/iommu.c
arch/powerpc/platforms/pseries/xics.c
arch/powerpc/sysdev/Makefile
arch/powerpc/sysdev/mmio_nvram.c
arch/ppc/platforms/ev64360.c
arch/s390/kernel/head31.S
arch/s390/kernel/head64.S
arch/s390/kernel/setup.c
arch/s390/kernel/smp.c
arch/s390/lib/uaccess_pt.c
arch/s390/lib/uaccess_std.c
arch/s390/mm/vmem.c
arch/sparc/kernel/ioport.c
arch/sparc64/defconfig
arch/sparc64/kernel/isa.c
arch/sparc64/kernel/of_device.c
arch/sparc64/kernel/smp.c
arch/sparc64/mm/init.c
arch/x86_64/Kconfig
arch/x86_64/defconfig
arch/x86_64/ia32/ia32_aout.c
arch/x86_64/kernel/cpufreq/Kconfig
arch/x86_64/kernel/early-quirks.c
arch/x86_64/kernel/io_apic.c
arch/x86_64/kernel/nmi.c
arch/x86_64/kernel/pci-calgary.c
arch/x86_64/kernel/time.c
arch/x86_64/kernel/traps.c
block/cfq-iosched.c
block/elevator.c
drivers/acpi/Kconfig
drivers/acpi/bus.c
drivers/acpi/ec.c
drivers/acpi/ibm_acpi.c
drivers/acpi/processor_core.c
drivers/acpi/processor_perflib.c
drivers/acpi/toshiba_acpi.c
drivers/acpi/video.c
drivers/ata/Kconfig
drivers/ata/ahci.c
drivers/ata/libata-eh.c
drivers/ata/libata-scsi.c
drivers/ata/libata-sff.c
drivers/ata/pata_hpt37x.c
drivers/ata/sata_mv.c
drivers/ata/sata_nv.c
drivers/ata/sata_via.c
drivers/atm/horizon.c
drivers/block/cciss.c
drivers/block/pktcdvd.c
drivers/bluetooth/hci_usb.c
drivers/cdrom/cdrom.c
drivers/char/agp/agp.h
drivers/char/agp/amd64-agp.c
drivers/char/agp/generic.c
drivers/char/agp/intel-agp.c
drivers/char/agp/sgi-agp.c
drivers/char/drm/i915_irq.c
drivers/char/hw_random/amd-rng.c
drivers/char/hw_random/geode-rng.c
drivers/char/hw_random/intel-rng.c
drivers/char/hw_random/ixp4xx-rng.c
drivers/char/hw_random/via-rng.c
drivers/char/ip2/i2ellis.h
drivers/char/ipmi/ipmi_watchdog.c
drivers/char/isicom.c
drivers/char/mem.c
drivers/char/mxser.c
drivers/char/mxser_new.c
drivers/char/tlclk.c
drivers/char/vr41xx_giu.c
drivers/connector/cn_proc.c
drivers/cpufreq/cpufreq_stats.c
drivers/hid/Kconfig
drivers/hid/hid-core.c
drivers/hid/hid-input.c
drivers/hwmon/hwmon-vid.c
drivers/hwmon/w83793.c
drivers/i2c/busses/Kconfig
drivers/i2c/busses/i2c-mv64xxx.c
drivers/i2c/busses/i2c-pnx.c
drivers/i2c/chips/m41t00.c
drivers/i2c/i2c-core.c
drivers/ide/pci/atiixp.c
drivers/ide/pci/piix.c
drivers/ide/pci/slc90e66.c
drivers/ide/pci/via82cxxx.c
drivers/ieee1394/sbp2.c
drivers/infiniband/core/cma.c
drivers/infiniband/core/ucma.c
drivers/infiniband/hw/ehca/ehca_cq.c
drivers/infiniband/hw/ehca/ehca_hca.c
drivers/infiniband/hw/ehca/ehca_irq.c
drivers/infiniband/hw/ehca/ehca_iverbs.h
drivers/infiniband/hw/ehca/ehca_main.c
drivers/infiniband/hw/ehca/ehca_mrmw.c
drivers/infiniband/hw/ehca/ehca_qp.c
drivers/infiniband/hw/mthca/mthca_cq.c
drivers/infiniband/hw/mthca/mthca_memfree.c
drivers/infiniband/hw/mthca/mthca_provider.c
drivers/infiniband/hw/mthca/mthca_qp.c
drivers/infiniband/ulp/iser/iscsi_iser.c
drivers/infiniband/ulp/iser/iser_initiator.c
drivers/infiniband/ulp/srp/ib_srp.c
drivers/input/serio/i8042-sparcio.h
drivers/kvm/kvm.h
drivers/kvm/kvm_main.c
drivers/kvm/mmu.c
drivers/kvm/paging_tmpl.h
drivers/kvm/svm.c
drivers/kvm/vmx.c
drivers/kvm/vmx.h
drivers/kvm/x86_emulate.c
drivers/leds/leds-s3c24xx.c
drivers/macintosh/via-pmu-backlight.c
drivers/macintosh/via-pmu.c
drivers/md/raid1.c
drivers/md/raid10.c
drivers/media/common/ir-functions.c
drivers/media/dvb/dvb-core/dvb_net.c
drivers/media/dvb/dvb-usb/nova-t-usb2.c
drivers/media/dvb/frontends/dib3000mc.c
drivers/media/video/Kconfig
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/cafe_ccic.c
drivers/media/video/cpia2/cpia2_usb.c
drivers/media/video/cx2341x.c
drivers/media/video/cx25840/cx25840-vbi.c
drivers/media/video/cx88/cx88-cards.c
drivers/media/video/cx88/cx88-core.c
drivers/media/video/cx88/cx88-tvaudio.c
drivers/media/video/cx88/cx88.h
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/ks0127.c
drivers/media/video/meye.c
drivers/media/video/msp3400-driver.c
drivers/media/video/msp3400-kthreads.c
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/saa7134/saa7134-dvb.c
drivers/media/video/tuner-core.c
drivers/media/video/tveeprom.c
drivers/media/video/usbvideo/quickcam_messenger.h
drivers/media/video/usbvision/usbvision-cards.c
drivers/media/video/usbvision/usbvision-core.c
drivers/media/video/usbvision/usbvision-i2c.c
drivers/media/video/usbvision/usbvision-video.c
drivers/media/video/usbvision/usbvision.h
drivers/media/video/v4l2-common.c
drivers/media/video/video-buf.c
drivers/media/video/vivi.c
drivers/media/video/w9966.c
drivers/media/video/w9968cf.c
drivers/media/video/zoran_device.c
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptbase.h
drivers/message/fusion/mptctl.c
drivers/message/fusion/mptctl.h
drivers/message/fusion/mptfc.c
drivers/message/fusion/mptlan.c
drivers/message/fusion/mptlan.h
drivers/message/fusion/mptsas.c
drivers/message/fusion/mptscsih.c
drivers/message/fusion/mptscsih.h
drivers/message/fusion/mptspi.c
drivers/mmc/at91_mci.c
drivers/mmc/imxmmc.c
drivers/mmc/mmci.c
drivers/mmc/omap.c
drivers/mmc/pxamci.c
drivers/mmc/tifm_sd.c
drivers/mtd/Kconfig
drivers/mtd/Makefile
drivers/mtd/afs.c
drivers/mtd/chips/amd_flash.c
drivers/mtd/chips/cfi_cmdset_0001.c
drivers/mtd/chips/cfi_cmdset_0002.c
drivers/mtd/chips/cfi_cmdset_0020.c
drivers/mtd/chips/gen_probe.c
drivers/mtd/chips/jedec.c
drivers/mtd/chips/jedec_probe.c
drivers/mtd/chips/map_absent.c
drivers/mtd/chips/map_ram.c
drivers/mtd/chips/map_rom.c
drivers/mtd/chips/sharp.c
drivers/mtd/cmdlinepart.c
drivers/mtd/devices/block2mtd.c
drivers/mtd/devices/m25p80.c
drivers/mtd/devices/ms02-nv.c
drivers/mtd/devices/mtd_dataflash.c
drivers/mtd/devices/phram.c
drivers/mtd/devices/slram.c
drivers/mtd/ftl.c
drivers/mtd/inftlcore.c
drivers/mtd/maps/Kconfig
drivers/mtd/maps/Makefile
drivers/mtd/maps/amd76xrom.c
drivers/mtd/maps/bast-flash.c
drivers/mtd/maps/ceiva.c
drivers/mtd/maps/ck804xrom.c [new file with mode: 0644]
drivers/mtd/maps/cstm_mips_ixx.c [deleted file]
drivers/mtd/maps/esb2rom.c [new file with mode: 0644]
drivers/mtd/maps/integrator-flash.c
drivers/mtd/maps/nettel.c
drivers/mtd/maps/omap_nor.c
drivers/mtd/maps/pcmciamtd.c
drivers/mtd/maps/physmap.c
drivers/mtd/maps/physmap_of.c [new file with mode: 0644]
drivers/mtd/maps/plat-ram.c
drivers/mtd/maps/sa1100-flash.c
drivers/mtd/maps/tqm834x.c
drivers/mtd/maps/tqm8xxl.c
drivers/mtd/mtd_blkdevs.c
drivers/mtd/mtdblock.c
drivers/mtd/mtdblock_ro.c
drivers/mtd/mtdchar.c
drivers/mtd/mtdconcat.c
drivers/mtd/mtdcore.c
drivers/mtd/mtdpart.c
drivers/mtd/nand/Kconfig
drivers/mtd/nand/Makefile
drivers/mtd/nand/at91_nand.c [new file with mode: 0644]
drivers/mtd/nand/cafe.c [new file with mode: 0644]
drivers/mtd/nand/cafe_ecc.c [new file with mode: 0644]
drivers/mtd/nand/cs553x_nand.c
drivers/mtd/nand/diskonchip.c
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/nand_bbt.c
drivers/mtd/nand/nand_ecc.c
drivers/mtd/nand/nandsim.c
drivers/mtd/nand/ndfc.c
drivers/mtd/nand/rtc_from4.c
drivers/mtd/nand/s3c2410.c
drivers/mtd/nftlcore.c
drivers/mtd/onenand/generic.c
drivers/mtd/onenand/onenand_base.c
drivers/mtd/onenand/onenand_bbt.c
drivers/mtd/redboot.c
drivers/mtd/rfd_ftl.c
drivers/mtd/ssfdc.c
drivers/net/8139cp.c
drivers/net/Space.c
drivers/net/arm/ep93xx_eth.c
drivers/net/b44.c
drivers/net/bnx2.c
drivers/net/chelsio/my3126.c
drivers/net/e1000/e1000_ethtool.c
drivers/net/e1000/e1000_hw.c
drivers/net/e1000/e1000_hw.h
drivers/net/e1000/e1000_main.c
drivers/net/e1000/e1000_param.c
drivers/net/ehea/ehea.h
drivers/net/ehea/ehea_main.c
drivers/net/ehea/ehea_phyp.c
drivers/net/forcedeth.c
drivers/net/ibm_emac/ibm_emac_phy.c
drivers/net/ifb.c
drivers/net/irda/irda-usb.c
drivers/net/irda/irda-usb.h
drivers/net/irda/stir4200.c
drivers/net/irda/vlsi_ir.c
drivers/net/irda/vlsi_ir.h
drivers/net/ixgb/ixgb.h
drivers/net/ixgb/ixgb_ethtool.c
drivers/net/ixgb/ixgb_hw.c
drivers/net/ixgb/ixgb_main.c
drivers/net/loopback.c
drivers/net/mv643xx_eth.c
drivers/net/myri10ge/myri10ge.c
drivers/net/netxen/netxen_nic.h
drivers/net/netxen/netxen_nic_ethtool.c
drivers/net/netxen/netxen_nic_hw.c
drivers/net/netxen/netxen_nic_init.c
drivers/net/netxen/netxen_nic_ioctl.h [deleted file]
drivers/net/netxen/netxen_nic_isr.c
drivers/net/netxen/netxen_nic_main.c
drivers/net/pcmcia/3c574_cs.c
drivers/net/pcmcia/3c589_cs.c
drivers/net/pcmcia/com20020_cs.c
drivers/net/pcmcia/pcnet_cs.c
drivers/net/pcmcia/xirc2ps_cs.c
drivers/net/phy/phy.c
drivers/net/qla3xxx.c
drivers/net/r8169.c
drivers/net/s2io.c
drivers/net/sis190.c
drivers/net/skge.c
drivers/net/sky2.c
drivers/net/sungem.c
drivers/net/sungem_phy.c
drivers/net/sungem_phy.h
drivers/net/tg3.c
drivers/net/tg3.h
drivers/net/ucc_geth.c
drivers/net/ucc_geth_phy.c
drivers/net/via-velocity.c
drivers/net/wireless/bcm43xx/bcm43xx_main.c
drivers/net/wireless/ipw2100.c
drivers/net/wireless/netwave_cs.c
drivers/net/wireless/ray_cs.c
drivers/net/wireless/wl3501_cs.c
drivers/net/wireless/zd1211rw/zd_mac.c
drivers/net/wireless/zd1211rw/zd_mac.h
drivers/net/wireless/zd1211rw/zd_usb.c
drivers/pci/Kconfig
drivers/pci/pci-driver.c
drivers/pci/pci.c
drivers/pci/probe.c
drivers/pci/quirks.c
drivers/pci/search.c
drivers/rtc/rtc-at91rm9200.c
drivers/rtc/rtc-rs5c372.c
drivers/rtc/rtc-sh.c
drivers/s390/char/monwriter.c
drivers/s390/char/vmcp.c
drivers/s390/cio/cio.c
drivers/s390/net/Kconfig
drivers/s390/net/qeth.h
drivers/s390/net/qeth_main.c
drivers/scsi/3w-xxxx.c
drivers/scsi/3w-xxxx.h
drivers/scsi/Kconfig
drivers/scsi/aacraid/linit.c
drivers/scsi/advansys.c
drivers/scsi/ibmvscsi/Makefile
drivers/scsi/iscsi_tcp.c
drivers/scsi/libiscsi.c
drivers/scsi/lpfc/lpfc_mem.c
drivers/scsi/megaraid/megaraid_sas.c
drivers/scsi/pcmcia/nsp_cs.c
drivers/scsi/pcmcia/sym53c500_cs.c
drivers/scsi/qla1280.c
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_gs.c
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_version.h
drivers/scsi/scsi_scan.c
drivers/scsi/scsi_transport_iscsi.c
drivers/scsi/scsi_transport_spi.c
drivers/scsi/seagate.c
drivers/scsi/sr.c
drivers/serial/8250.c
drivers/serial/mpc52xx_uart.c
drivers/serial/sunsab.c
drivers/serial/sunsu.c
drivers/serial/sunzilog.c
drivers/spi/spi_mpc83xx.c
drivers/spi/spi_s3c24xx.c
drivers/spi/spi_s3c24xx_gpio.c
drivers/usb/class/usblp.c
drivers/usb/core/Kconfig
drivers/usb/core/endpoint.c
drivers/usb/core/hub.c
drivers/usb/gadget/omap_udc.c
drivers/usb/gadget/omap_udc.h
drivers/usb/host/ohci-ep93xx.c
drivers/usb/host/uhci-hcd.c
drivers/usb/input/Kconfig
drivers/usb/input/hid-core.c
drivers/usb/input/hid-ff.c
drivers/usb/input/hiddev.c
drivers/usb/input/usbhid.h
drivers/usb/input/usbtouchscreen.c
drivers/usb/misc/sisusbvga/sisusb_con.c
drivers/usb/net/asix.c
drivers/usb/net/rndis_host.c
drivers/usb/serial/funsoft.c
drivers/usb/serial/option.c
drivers/usb/storage/unusual_devs.h
drivers/video/backlight/corgi_bl.c
drivers/video/backlight/hp680_bl.c
drivers/video/backlight/locomolcd.c
drivers/video/bw2.c
drivers/video/cg14.c
drivers/video/cg3.c
drivers/video/cg6.c
drivers/video/ffb.c
drivers/video/leo.c
drivers/video/p9100.c
drivers/video/tcx.c
fs/adfs/dir_f.c
fs/aio.c
fs/bad_inode.c
fs/binfmt_elf.c
fs/block_dev.c
fs/buffer.c
fs/cifs/file.c
fs/gfs2/ops_fstype.c
fs/jffs/jffs_fm.c
fs/jffs2/debug.c
fs/jffs2/debug.h
fs/jffs2/fs.c
fs/jffs2/gc.c
fs/jffs2/nodelist.h
fs/jffs2/readinode.c
fs/jffs2/scan.c
fs/jffs2/summary.c
fs/jffs2/super.c
fs/jffs2/symlink.c
fs/jffs2/wbuf.c
fs/jffs2/xattr.c
fs/nfs/file.c
fs/ntfs/ChangeLog
fs/ntfs/Makefile
fs/ntfs/dir.c
fs/ntfs/inode.c
fs/ntfs/inode.h
fs/ntfs/super.c
fs/ocfs2/aops.c
fs/ocfs2/cluster/heartbeat.c
fs/ocfs2/dlmglue.c
fs/ocfs2/export.c
fs/ocfs2/file.c
fs/ocfs2/inode.c
fs/ocfs2/namei.c
fs/ocfs2/ocfs2_fs.h
fs/ocfs2/symlink.c
fs/proc/proc_misc.c
fs/ramfs/file-mmu.c
fs/ramfs/file-nommu.c
fs/reiserfs/file.c
fs/reiserfs/inode.c
fs/reiserfs/stree.c
fs/super.c
fs/ufs/balloc.c
fs/ufs/inode.c
include/acpi/acconfig.h
include/asm-alpha/posix_types.h
include/asm-arm/arch-ep93xx/irqs.h
include/asm-arm/arch-iop13xx/io.h
include/asm-arm/arch-iop32x/iop32x.h
include/asm-arm/arch-pxa/pxa-regs.h
include/asm-arm/arch-s3c2410/dma.h
include/asm-arm/arch-s3c2410/entry-macro.S
include/asm-arm/arch-s3c2410/hardware.h
include/asm-arm/arch-s3c2410/irqs.h
include/asm-arm/cacheflush.h
include/asm-arm/flat.h
include/asm-arm/hardware/iop3xx.h
include/asm-arm/irq.h
include/asm-generic/bug.h
include/asm-i386/boot.h
include/asm-i386/processor.h
include/asm-ia64/checksum.h
include/asm-ia64/posix_types.h
include/asm-mips/checksum.h
include/asm-mips/irq.h
include/asm-mips/irqflags.h
include/asm-parisc/cacheflush.h
include/asm-powerpc/atomic.h
include/asm-powerpc/bug.h
include/asm-powerpc/hvcall.h
include/asm-powerpc/mpc52xx.h
include/asm-powerpc/posix_types.h
include/asm-s390/futex.h
include/asm-s390/posix_types.h
include/asm-sparc/of_device.h
include/asm-sparc64/of_device.h
include/asm-x86_64/bitops.h
include/asm-xtensa/posix_types.h
include/linux/Kbuild
include/linux/acpi.h
include/linux/cpuset.h
include/linux/fs.h
include/linux/hid-debug.h
include/linux/highmem.h
include/linux/if_tunnel.h
include/linux/kernel.h
include/linux/kvm.h
include/linux/libata.h
include/linux/magic.h
include/linux/mm.h
include/linux/mmc/mmc.h
include/linux/mmzone.h
include/linux/mtd/blktrans.h
include/linux/mtd/mtd.h
include/linux/mtd/nand.h
include/linux/mtd/onenand.h
include/linux/mtd/onenand_regs.h
include/linux/mtio.h
include/linux/net.h
include/linux/netdevice.h
include/linux/netfilter/nf_conntrack_tcp.h
include/linux/netfilter_arp/arp_tables.h
include/linux/netfilter_ipv4/ip_tables.h
include/linux/pci_ids.h
include/linux/profile.h
include/linux/qic117.h [deleted file]
include/linux/reiserfs_fs_i.h
include/linux/spi/spi.h
include/linux/swap.h
include/linux/videodev2.h
include/media/cx2341x.h
include/media/ir-common.h
include/net/ieee80211.h
include/net/netfilter/nf_conntrack_compat.h
include/net/sctp/sm.h
include/net/tcp.h
include/net/x25.h
include/sound/version.h
init/Makefile
init/main.c
init/version.c
ipc/shm.c
kernel/cpu.c
kernel/cpuset.c
kernel/exit.c
kernel/irq/manage.c
kernel/irq/spurious.c
kernel/lockdep.c
kernel/module.c
kernel/params.c
kernel/power/swap.c
kernel/power/user.c
kernel/profile.c
kernel/rcutorture.c
kernel/sched.c
kernel/sys.c
mm/bounce.c
mm/memory.c
mm/memory_hotplug.c
mm/mempolicy.c
mm/oom_kill.c
mm/page-writeback.c
mm/page_alloc.c
mm/rmap.c
mm/slab.c
mm/slob.c
mm/swapfile.c
mm/truncate.c
mm/vmscan.c
net/bluetooth/cmtp/capi.c
net/bluetooth/hci_sysfs.c
net/bluetooth/l2cap.c
net/bluetooth/rfcomm/sock.c
net/bluetooth/rfcomm/tty.c
net/bridge/netfilter/ebtables.c
net/core/flow.c
net/core/pktgen.c
net/ieee80211/softmac/ieee80211softmac_assoc.c
net/ieee80211/softmac/ieee80211softmac_wx.c
net/ipv4/af_inet.c
net/ipv4/devinet.c
net/ipv4/netfilter.c
net/ipv4/netfilter/Kconfig
net/ipv4/netfilter/ip_conntrack_netlink.c
net/ipv4/netfilter/ip_tables.c
net/ipv4/netfilter/ipt_MASQUERADE.c
net/ipv4/netfilter/nf_nat_standalone.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_output.c
net/ipv4/tcp_probe.c
net/ipv6/addrconf.c
net/ipv6/af_inet6.c
net/ipv6/mcast.c
net/ipv6/netfilter/nf_conntrack_reasm.c
net/ipv6/route.c
net/netfilter/Kconfig
net/netfilter/nf_conntrack_netbios_ns.c
net/netfilter/nf_conntrack_netlink.c
net/netfilter/xt_hashlimit.c
net/netlabel/netlabel_cipso_v4.c
net/netlink/af_netlink.c
net/sctp/sm_make_chunk.c
net/sctp/sm_sideeffect.c
net/sctp/sm_statefuns.c
net/sctp/sm_statetable.c
net/x25/af_x25.c
net/x25/x25_dev.c
net/x25/x25_facilities.c
net/xfrm/xfrm_algo.c
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_user.c
scripts/kconfig/qconf.cc
scripts/mod/modpost.c
security/selinux/ss/context.h
security/selinux/ss/mls.c
security/selinux/ss/mls.h
security/selinux/ss/services.c
sound/pci/cmipci.c
sound/pci/echoaudio/midi.c
sound/pci/hda/hda_generic.c
sound/pci/hda/hda_intel.c
sound/pci/hda/patch_realtek.c
sound/sparc/cs4231.c
sound/usb/usbaudio.c
sound/usb/usbmixer.c
sound/usb/usx2y/usbusx2yaudio.c
sound/usb/usx2y/usx2yhwdeppcm.c

diff --git a/CREDITS b/CREDITS
index 8218e790f43d33d2c754df8f149b56ef7c19b816..ae08e4c10ed4f5c2364db7326cbdd4a7cce529f8 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -516,9 +516,10 @@ S: Orlando, Florida
 S: USA
 
 N: Lennert Buytenhek
-E: buytenh@gnu.org
-D: Rewrite of the ethernet bridging code
-S: Ravenhorst 58B
+E: kernel@wantstofly.org
+D: Original (2.4) rewrite of the ethernet bridging code
+D: Various ARM bits and pieces
+S: Ravenhorst 58
 S: 2317 AK Leiden
 S: The Netherlands
 
@@ -3278,7 +3279,7 @@ S: Sevilla 41005
 S: Spain
 
 N: Linus Torvalds
-E: torvalds@osdl.org
+E: torvalds@linux-foundation.org
 D: Original kernel hacker
 S: 12725 SW Millikan Way, Suite 400
 S: Beaverton, Oregon 97005
index 36526a1e76d753e83bc752acf584e93d5db2f0b5..867608ab3ca04606403cec807b18f80d4f404e3d 100644 (file)
@@ -53,8 +53,8 @@ installmandocs: mandocs
 
 ###
 #External programs used
-KERNELDOC = scripts/kernel-doc
-DOCPROC   = scripts/basic/docproc
+KERNELDOC = $(srctree)/scripts/kernel-doc
+DOCPROC   = $(objtree)/scripts/basic/docproc
 
 XMLTOFLAGS = -m $(srctree)/Documentation/DocBook/stylesheet.xsl
 #XMLTOFLAGS += --skip-validation
index 07a635590b36e8ff8c8a61086adb34e9d907bd65..e2e24b4778d447b8335e3f447f51883b618c306b 100644 (file)
@@ -883,7 +883,7 @@ and other resources, etc.
   </chapter>
 
   <chapter id="ataExceptions">
-     <title>ATA errors &amp; exceptions</title>
+     <title>ATA errors and exceptions</title>
 
   <para>
   This chapter tries to identify what error/exception conditions exist
index 2270efa101530f8f1de58e951d9c7b4a1f6969d0..bfbb2718a2799b972fa6663ffbc0b34a7b88b999 100644 (file)
@@ -72,3 +72,7 @@ kernel patches.
 
     If the new code is substantial, addition of subsystem-specific fault
     injection might be appropriate.
+
+22: Newly-added code has been compiled with `gcc -W'.  This will generate
+    lots of noise, but is good for finding bugs like "warning: comparison
+    between signed and unsigned".
index 302d148c2e18f0e0fe565bc9c9c1a2f4b232d346..b0d0043f7c46cdde154f6be25fe33ba3a98b645d 100644 (file)
@@ -134,9 +134,9 @@ Do not send more than 15 patches at once to the vger mailing lists!!!
 
 
 Linus Torvalds is the final arbiter of all changes accepted into the
-Linux kernel.  His e-mail address is <torvalds@osdl.org>.  He gets
-a lot of e-mail, so typically you should do your best to -avoid- sending
-him e-mail.
+Linux kernel.  His e-mail address is <torvalds@linux-foundation.org>. 
+He gets a lot of e-mail, so typically you should do your best to -avoid-
+sending him e-mail. 
 
 Patches which are bug fixes, are "obvious" changes, or similarly
 require little discussion should be sent or CC'd to Linus.  Patches
index dda7ecdde87bab1de56867759f2a3aaab246db3d..28d014714ab8930fbfb9c3c65fb0f85644b807b4 100644 (file)
@@ -76,6 +76,15 @@ Machines
     A S3C2410 based PDA from Acer.  There is a Wiki page at
     http://handhelds.org/moin/moin.cgi/AcerN30Documentation .
 
+  AML M5900
+
+    American Microsystems' M5900
+
+  Nex Vision Nexcoder
+  Nex Vision Otom
+
+    Two machines by Nex Vision
+
 
 Adding New Machines
 -------------------
@@ -115,6 +124,10 @@ RTC
 
   Support for the onboard RTC unit, including alarm function.
 
+  This has recently been upgraded to use the new RTC core,
+  and the module has been renamed to rtc-s3c to fit in with
+  the new rtc naming scheme.
+
 
 Watchdog
 --------
@@ -128,7 +141,7 @@ NAND
 
   The current kernels now have support for the s3c2410 NAND
   controller. If there are any problems the latest linux-mtd
-  CVS can be found from http://www.linux-mtd.infradead.org/
+  code can be found from http://www.linux-mtd.infradead.org/
 
 
 Serial
@@ -168,6 +181,21 @@ Suspend to RAM
   See Suspend.txt for more information.
 
 
+SPI
+---
+
+  SPI drivers are available for both the in-built hardware
+  (although there is no DMA support yet) and a generic
+  GPIO based solution.
+
+
+LEDs
+----
+
+  There is support for GPIO based LEDs via a platform driver
+  in the LED subsystem.
+
+
 Platform Data
 -------------
 
index 73e794f0ff0924e2432e305cb5520345f776160b..debf6813934af05e878863c4a8c53bbf6ae64e62 100644 (file)
@@ -373,14 +373,15 @@ maps this page at its virtual address.
        likely that you will need to flush the instruction cache
        for copy_to_user_page().
 
-  void flush_anon_page(struct page *page, unsigned long vmaddr)
+  void flush_anon_page(struct vm_area_struct *vma, struct page *page,
+                       unsigned long vmaddr)
        When the kernel needs to access the contents of an anonymous
        page, it calls this function (currently only
        get_user_pages()).  Note: flush_dcache_page() deliberately
        doesn't work for an anonymous page.  The default
        implementation is a nop (and should remain so for all coherent
        architectures).  For incoherent architectures, it should flush
-       the cache of the page at vmaddr in the current user process.
+       the cache of the page at vmaddr.
 
   void flush_kernel_dcache_page(struct page *page)
        When the kernel needs to modify a user page is has obtained
index 30f3c8c9c12aeb60f66c925949be8648a0bafd91..0ba6af02cdaf9ce2b48b11767d54ad06d4ff918e 100644 (file)
@@ -226,6 +226,23 @@ Who:       Jean Delvare <khali@linux-fr.org>
 
 ---------------------------
 
+What:  i2c_adapter.dev
+       i2c_adapter.list
+When:  July 2007
+Why:   Superfluous, given i2c_adapter.class_dev:
+         * The "dev" was a stand-in for the physical device node that legacy
+           drivers would not have; but now it's almost always present.  Any
+           remaining legacy drivers must upgrade (they now trigger warnings).
+         * The "list" duplicates class device children.
+       The delay in removing this is so upgraded lm_sensors and libsensors
+       can get deployed.  (Removal causes minor changes in the sysfs layout,
+       notably the location of the adapter type name and parenting the i2c
+       client hardware directly from their controller.)
+Who:   Jean Delvare <khali@linux-fr.org>,
+       David Brownell <dbrownell@users.sourceforge.net>
+
+---------------------------
+
 What:  IPv4 only connection tracking/NAT/helpers
 When:  2.6.22
 Why:   The new layer 3 independant connection tracking replaces the old
@@ -256,3 +273,55 @@ Why:       Speedstep-centrino driver with ACPI hooks and acpi-cpufreq driver are
 Who:   Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
 
 ---------------------------
+
+What:  ACPI hotkey driver (CONFIG_ACPI_HOTKEY)
+When:  2.6.21
+Why:   hotkey.c was an attempt to consolidate multiple drivers that use
+       ACPI to implement hotkeys.  However, hotkeys are not documented
+       in the ACPI specification, so the drivers used undocumented
+       vendor-specific hooks and turned out to be more different than
+       the same.
+
+       Further, the keys and the features supplied by each platform
+       are different, so there will always be a need for
+       platform-specific drivers.
+
+       So the new plan is to delete hotkey.c and instead, work on the
+       platform specific drivers to try to make them look the same
+       to the user when they supply the same features.
+
+       hotkey.c has always depended on CONFIG_EXPERIMENTAL
+
+Who:   Len Brown <len.brown@intel.com>
+
+---------------------------
+
+What:  /sys/firmware/acpi/namespace
+When:  2.6.21
+Why:   The ACPI namespace is effectively the symbol list for
+       the BIOS.  The device names are completely arbitrary
+       and have no place being exposed to user-space.
+
+       For those interested in the BIOS ACPI namespace,
+       the BIOS can be extracted and disassembled with acpidump
+       and iasl as documented in the pmtools package here:
+       http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/utils
+
+Who:   Len Brown <len.brown@intel.com>
+
+---------------------------
+
+What:  /proc/acpi/button
+When:  August 2007
+Why:   /proc/acpi/button has been replaced by events to the input layer
+       since 2.6.20.
+Who:   Len Brown <len.brown@intel.com>
+
+---------------------------
+
+What:  JFFS (version 1)
+When:  2.6.21
+Why:   Unmaintained for years, superceded by JFFS2 for years.
+Who:   Jeff Garzik <jeff@garzik.org>
+
+---------------------------
index 790ef6fbe495914f94ea351e92834d9fb206f80c..28bfea75bcf26151ac5594d131cbbc71d0dc93d0 100644 (file)
@@ -171,6 +171,7 @@ prototypes:
        int (*releasepage) (struct page *, int);
        int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
                        loff_t offset, unsigned long nr_segs);
+       int (*launder_page) (struct page *);
 
 locking rules:
        All except set_page_dirty may block
@@ -188,6 +189,7 @@ bmap:                       yes
 invalidatepage:                no      yes
 releasepage:           no      yes
 direct_IO:             no
+launder_page:          no      yes
 
        ->prepare_write(), ->commit_write(), ->sync_page() and ->readpage()
 may be called from the request handler (/dev/loop).
@@ -281,6 +283,12 @@ buffers from the page in preparation for freeing it.  It returns zero to
 indicate that the buffers are (or may be) freeable.  If ->releasepage is zero,
 the kernel assumes that the fs has no private interest in the buffers.
 
+       ->launder_page() may be called prior to releasing a page if
+it is still found to be dirty. It returns zero if the page was successfully
+cleaned, or an error value if not. Note that in order to prevent the page
+getting mapped back in and redirtied, it needs to be kept locked
+across the entire operation.
+
        Note: currently almost all instances of address_space methods are
 using BKL for internal serialization and that's one of the worst sources
 of contention. Normally they are calling library functions (in fs/buffer.c)
index 345392c4caebdb1d7bc806d4f6f6b9fa911fc8e6..397a41adb4c3f0ab93a0fe1718105ab2c5bba61c 100644 (file)
@@ -94,8 +94,8 @@ Mount options
   filesystem is free to implement it's access policy or leave it to
   the underlying file access mechanism (e.g. in case of network
   filesystems).  This option enables permission checking, restricting
-  access based on file mode.  This is option is usually useful
-  together with the 'allow_other' mount option.
+  access based on file mode.  It is usually useful together with the
+  'allow_other' mount option.
 
 'allow_other'
 
index 13ba649bda75dae1010891a62da6399ca25d7113..81779068b09bc4b63274460cf0a40977bf4b1bfd 100644 (file)
@@ -457,6 +457,8 @@ ChangeLog
 
 Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
 
+2.1.28:
+       - Fix a deadlock.
 2.1.27:
        - Implement page migration support so the kernel can move memory used
          by NTFS files and directories around for management purposes.
index 45e5408340e06c9b41fbc65eb802a925ad46133c..51171a83165bab36fbda7c6d44d9a124be6ec0d6 100644 (file)
@@ -45,18 +45,14 @@ This driver implements support for Winbond W83793G/W83793R chips.
   temp5-6 have a 1 degree Celsiis resolution.
 
 * Temperature sensor types
-  Temp1-4 have 3 possible types. It can be read from (and written to)
+  Temp1-4 have 2 possible types. It can be read from (and written to)
   temp[1-4]_type.
-  - If the value of 0, the related temperature channel stops
-    monitoring.
   - If the value is 3, it starts monitoring using a remote termal diode
     (default).
-  - If the value is 5, it starts monitoring using the temperature sensor
-    in AMD CPU and get result by AMDSI.
   - If the value is 6, it starts monitoring using the temperature sensor
     in Intel CPU and get result by PECI.
   Temp5-6 can be connected to external thermistors (value of
-  temp[5-6]_type is 4). They can also be disabled (value is 0).
+  temp[5-6]_type is 4).
 
 * Alarm mechanism
   For voltage sensors, an alarm triggers if the measured value is below
index 99f2d4d4bf7ddb18218a4bc3a089aaf51fa5f993..073306818347fad7b2899a6a9eaa704c38a39723 100644 (file)
@@ -17,7 +17,7 @@ You can use common Linux commands, such as cp and scp, to copy the
 memory image to a dump file on the local disk, or across the network to
 a remote system.
 
-Kdump and kexec are currently supported on the x86, x86_64, and ppc64
+Kdump and kexec are currently supported on the x86, x86_64, ppc64 and ia64
 architectures.
 
 When the system kernel boots, it reserves a small section of memory for
@@ -54,59 +54,69 @@ memory," in two ways:
 Setup and Installation
 ======================
 
-Install kexec-tools and the Kdump patch
----------------------------------------
+Install kexec-tools
+-------------------
 
 1) Login as the root user.
 
 2) Download the kexec-tools user-space package from the following URL:
 
-   http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-1.101.tar.gz
+http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools-testing.tar.gz
 
-3) Unpack the tarball with the tar command, as follows:
-
-   tar xvpzf kexec-tools-1.101.tar.gz
-
-4) Download the latest consolidated Kdump patch from the following URL:
+This is a symlink to the latest version, which at the time of writing is
+20061214, the only release of kexec-tools-testing so far. As other versions
+are made released, the older onese will remain available at
+http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/
 
-   http://lse.sourceforge.net/kdump/
+Note: Latest kexec-tools-testing git tree is available at
 
-   (This location is being used until all the user-space Kdump patches
-   are integrated with the kexec-tools package.)
+git://git.kernel.org/pub/scm/linux/kernel/git/horms/kexec-tools-testing.git
+or
+http://www.kernel.org/git/?p=linux/kernel/git/horms/kexec-tools-testing.git;a=summary
 
-5) Change to the kexec-tools-1.101 directory, as follows:
+3) Unpack the tarball with the tar command, as follows:
 
-   cd kexec-tools-1.101
+   tar xvpzf kexec-tools-testing.tar.gz
 
-6) Apply the consolidated patch to the kexec-tools-1.101 source tree
-   with the patch command, as follows. (Modify the path to the downloaded
-   patch as necessary.)
+4) Change to the kexec-tools directory, as follows:
 
-   patch -p1 < /path-to-kdump-patch/kexec-tools-1.101-kdump.patch
+   cd kexec-tools-testing-VERSION
 
-7) Configure the package, as follows:
+5) Configure the package, as follows:
 
    ./configure
 
-8) Compile the package, as follows:
+6) Compile the package, as follows:
 
    make
 
-9) Install the package, as follows:
+7) Install the package, as follows:
 
    make install
 
 
-Download and build the system and dump-capture kernels
-------------------------------------------------------
+Build the system and dump-capture kernels
+-----------------------------------------
+There are two possible methods of using Kdump.
+
+1) Build a separate custom dump-capture kernel for capturing the
+   kernel core dump.
 
-Download the mainline (vanilla) kernel source code (2.6.13-rc1 or newer)
-from http://www.kernel.org. Two kernels must be built: a system kernel
-and a dump-capture kernel. Use the following steps to configure these
-kernels with the necessary kexec and Kdump features:
+2) Or use the system kernel binary itself as dump-capture kernel and there is
+   no need to build a separate dump-capture kernel. This is possible
+   only with the architecutres which support a relocatable kernel. As
+   of today i386 and ia64 architectures support relocatable kernel.
 
-System kernel
--------------
+Building a relocatable kernel is advantageous from the point of view that
+one does not have to build a second kernel for capturing the dump. But
+at the same time one might want to build a custom dump capture kernel
+suitable to his needs.
+
+Following are the configuration setting required for system and
+dump-capture kernels for enabling kdump support.
+
+System kernel config options
+----------------------------
 
 1) Enable "kexec system call" in "Processor type and features."
 
@@ -132,88 +142,182 @@ System kernel
    analysis tools require a vmlinux with debug symbols in order to read
    and analyze a dump file.
 
-4) Make and install the kernel and its modules. Update the boot loader
-   (such as grub, yaboot, or lilo) configuration files as necessary.
+Dump-capture kernel config options (Arch Independent)
+-----------------------------------------------------
 
-5) Boot the system kernel with the boot parameter "crashkernel=Y@X",
-   where Y specifies how much memory to reserve for the dump-capture kernel
-   and X specifies the beginning of this reserved memory. For example,
-   "crashkernel=64M@16M" tells the system kernel to reserve 64 MB of memory
-   starting at physical address 0x01000000 for the dump-capture kernel.
-
-   On x86 and x86_64, use "crashkernel=64M@16M".
-
-   On ppc64, use "crashkernel=128M@32M".
+1) Enable "kernel crash dumps" support under "Processor type and
+   features":
 
+   CONFIG_CRASH_DUMP=y
 
-The dump-capture kernel
------------------------
+2) Enable "/proc/vmcore support" under "Filesystems" -> "Pseudo filesystems".
 
-1) Under "General setup," append "-kdump" to the current string in
-   "Local version."
+   CONFIG_PROC_VMCORE=y
+   (CONFIG_PROC_VMCORE is set by default when CONFIG_CRASH_DUMP is selected.)
 
-2) On x86, enable high memory support under "Processor type and
+Dump-capture kernel config options (Arch Dependent, i386)
+--------------------------------------------------------
+1) On x86, enable high memory support under "Processor type and
    features":
 
    CONFIG_HIGHMEM64G=y
    or
    CONFIG_HIGHMEM4G
 
-3) On x86 and x86_64, disable symmetric multi-processing support
+2) On x86 and x86_64, disable symmetric multi-processing support
    under "Processor type and features":
 
    CONFIG_SMP=n
+
    (If CONFIG_SMP=y, then specify maxcpus=1 on the kernel command line
    when loading the dump-capture kernel, see section "Load the Dump-capture
    Kernel".)
 
-4) On ppc64, disable NUMA support and enable EMBEDDED support:
+3) If one wants to build and use a relocatable kernel,
+   Enable "Build a relocatable kernel" support under "Processor type and
+   features"
 
-   CONFIG_NUMA=n
-   CONFIG_EMBEDDED=y
-   CONFIG_EEH=N for the dump-capture kernel
+   CONFIG_RELOCATABLE=y
 
-5) Enable "kernel crash dumps" support under "Processor type and
-   features":
+4) Use a suitable value for "Physical address where the kernel is
+   loaded" (under "Processor type and features"). This only appears when
+   "kernel crash dumps" is enabled. A suitable value depends upon
+   whether kernel is relocatable or not.
+
+   If you are using a relocatable kernel use CONFIG_PHYSICAL_START=0x100000
+   This will compile the kernel for physical address 1MB, but given the fact
+   kernel is relocatable, it can be run from any physical address hence
+   kexec boot loader will load it in memory region reserved for dump-capture
+   kernel.
+
+   Otherwise it should be the start of memory region reserved for
+   second kernel using boot parameter "crashkernel=Y@X". Here X is
+   start of memory region reserved for dump-capture kernel.
+   Generally X is 16MB (0x1000000). So you can set
+   CONFIG_PHYSICAL_START=0x1000000
+
+5) Make and install the kernel and its modules. DO NOT add this kernel
+   to the boot loader configuration files.
 
-   CONFIG_CRASH_DUMP=y
+Dump-capture kernel config options (Arch Dependent, x86_64)
+----------------------------------------------------------
+1) On x86 and x86_64, disable symmetric multi-processing support
+   under "Processor type and features":
 
-6) Use a suitable value for "Physical address where the kernel is
+   CONFIG_SMP=n
+
+   (If CONFIG_SMP=y, then specify maxcpus=1 on the kernel command line
+   when loading the dump-capture kernel, see section "Load the Dump-capture
+   Kernel".)
+
+2) Use a suitable value for "Physical address where the kernel is
    loaded" (under "Processor type and features"). This only appears when
    "kernel crash dumps" is enabled. By default this value is 0x1000000
    (16MB). It should be the same as X in the "crashkernel=Y@X" boot
-   parameter discussed above.
+   parameter.
 
-   On x86 and x86_64, use "CONFIG_PHYSICAL_START=0x1000000".
+   For x86_64, normally "CONFIG_PHYSICAL_START=0x1000000".
 
-   On ppc64 the value is automatically set at 32MB when
-   CONFIG_CRASH_DUMP is set.
+3) Make and install the kernel and its modules. DO NOT add this kernel
+   to the boot loader configuration files.
 
-6) Optionally enable "/proc/vmcore support" under "Filesystems" ->
-   "Pseudo filesystems".
+Dump-capture kernel config options (Arch Dependent, ppc64)
+----------------------------------------------------------
 
-   CONFIG_PROC_VMCORE=y
-   (CONFIG_PROC_VMCORE is set by default when CONFIG_CRASH_DUMP is selected.)
-
-7) Make and install the kernel and its modules. DO NOT add this kernel
+-  Make and install the kernel and its modules. DO NOT add this kernel
    to the boot loader configuration files.
 
+Dump-capture kernel config options (Arch Dependent, ia64)
+----------------------------------------------------------
+
+- No specific options are required to create a dump-capture kernel
+  for ia64, other than those specified in the arch idependent section
+  above. This means that it is possible to use the system kernel
+  as a dump-capture kernel if desired.
+
+  The crashkernel region can be automatically placed by the system
+  kernel at run time. This is done by specifying the base address as 0,
+  or omitting it all together.
+
+  crashkernel=256M@0
+  or
+  crashkernel=256M
+
+  If the start address is specified, note that the start address of the
+  kernel will be aligned to 64Mb, so if the start address is not then
+  any space below the alignment point will be wasted.
+
+
+Boot into System Kernel
+=======================
+
+1) Make and install the kernel and its modules. Update the boot loader
+   (such as grub, yaboot, or lilo) configuration files as necessary.
+
+2) Boot the system kernel with the boot parameter "crashkernel=Y@X",
+   where Y specifies how much memory to reserve for the dump-capture kernel
+   and X specifies the beginning of this reserved memory. For example,
+   "crashkernel=64M@16M" tells the system kernel to reserve 64 MB of memory
+   starting at physical address 0x01000000 (16MB) for the dump-capture kernel.
+
+   On x86 and x86_64, use "crashkernel=64M@16M".
+
+   On ppc64, use "crashkernel=128M@32M".
+
+   On ia64, 256M@256M is a generous value that typically works.
+   The region may be automatically placed on ia64, see the
+   dump-capture kernel config option notes above.
 
 Load the Dump-capture Kernel
 ============================
 
-After booting to the system kernel, load the dump-capture kernel using
-the following command:
+After booting to the system kernel, dump-capture kernel needs to be
+loaded.
+
+Based on the architecture and type of image (relocatable or not), one
+can choose to load the uncompressed vmlinux or compressed bzImage/vmlinuz
+of dump-capture kernel. Following is the summary.
+
+For i386:
+       - Use vmlinux if kernel is not relocatable.
+       - Use bzImage/vmlinuz if kernel is relocatable.
+For x86_64:
+       - Use vmlinux
+For ppc64:
+       - Use vmlinux
+For ia64:
+       - Use vmlinux or vmlinuz.gz
+
 
-   kexec -p <dump-capture-kernel> \
+If you are using a uncompressed vmlinux image then use following command
+to load dump-capture kernel.
+
+   kexec -p <dump-capture-kernel-vmlinux-image> \
    --initrd=<initrd-for-dump-capture-kernel> --args-linux \
-   --append="root=<root-dev> init 1 irqpoll"
+   --append="root=<root-dev> <arch-specific-options>"
 
+If you are using a compressed bzImage/vmlinuz, then use following command
+to load dump-capture kernel.
 
-Notes on loading the dump-capture kernel:
+   kexec -p <dump-capture-kernel-bzImage> \
+   --initrd=<initrd-for-dump-capture-kernel> \
+   --append="root=<root-dev> <arch-specific-options>"
+
+Please note, that --args-linux does not need to be specified for ia64.
+It is planned to make this a no-op on that architecture, but for now
+it should be omitted
+
+Following are the arch specific command line options to be used while
+loading dump-capture kernel.
 
-* <dump-capture-kernel> must be a vmlinux image (that is, an
-  uncompressed ELF image). bzImage does not work at this time.
+For i386, x86_64 and ia64:
+       "init 1 irqpoll maxcpus=1"
+
+For ppc64:
+       "init 1 maxcpus=1 noirqdistrib"
+
+
+Notes on loading the dump-capture kernel:
 
 * By default, the ELF headers are stored in ELF64 format to support
   systems with more than 4GB memory. The --elf32-core-headers option can
@@ -231,6 +335,9 @@ Notes on loading the dump-capture kernel:
 * "init 1" boots the dump-capture kernel into single-user mode without
   networking. If you want networking, use "init 3."
 
+* We generally don' have to bring up a SMP kernel just to capture the
+  dump. Hence generally it is useful either to build a UP dump-capture
+  kernel or specify maxcpus=1 option while loading dump-capture kernel.
 
 Kernel Panic
 ============
index 2b395e478961ca6606a97dfce813c0da91346317..fd5028eca13e68a99cee05d613eff1ac43b9b9a2 100644 (file)
-                        How To Write Linux PCI Drivers
 
-                  by Martin Mares <mj@ucw.cz> on 07-Feb-2000
+                       How To Write Linux PCI Drivers
+
+               by Martin Mares <mj@ucw.cz> on 07-Feb-2000
+       updated by Grant Grundler <grundler@parisc-linux.org> on 23-Dec-2006
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The world of PCI is vast and it's full of (mostly unpleasant) surprises.
-Different PCI devices have different requirements and different bugs --
-because of this, the PCI support layer in Linux kernel is not as trivial
-as one would wish. This short pamphlet tries to help all potential driver
-authors find their way through the deep forests of PCI handling.
+The world of PCI is vast and full of (mostly unpleasant) surprises.
+Since each CPU architecture implements different chip-sets and PCI devices
+have different requirements (erm, "features"), the result is the PCI support
+in the Linux kernel is not as trivial as one would wish. This short paper
+tries to introduce all potential driver authors to Linux APIs for
+PCI device drivers.
+
+A more complete resource is the third edition of "Linux Device Drivers"
+by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman.
+LDD3 is available for free (under Creative Commons License) from:
+
+       http://lwn.net/Kernel/LDD3/
+
+However, keep in mind that all documents are subject to "bit rot".
+Refer to the source code if things are not working as described here.
+
+Please send questions/comments/patches about Linux PCI API to the
+"Linux PCI" <linux-pci@atrey.karlin.mff.cuni.cz> mailing list.
+
 
 
 0. Structure of PCI drivers
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
-There exist two kinds of PCI drivers: new-style ones (which leave most of
-probing for devices to the PCI layer and support online insertion and removal
-of devices [thus supporting PCI, hot-pluggable PCI and CardBus in a single
-driver]) and old-style ones which just do all the probing themselves. Unless
-you have a very good reason to do so, please don't use the old way of probing
-in any new code. After the driver finds the devices it wishes to operate
-on (either the old or the new way), it needs to perform the following steps:
+PCI drivers "discover" PCI devices in a system via pci_register_driver().
+Actually, it's the other way around. When the PCI generic code discovers
+a new device, the driver with a matching "description" will be notified.
+Details on this below.
+
+pci_register_driver() leaves most of the probing for devices to
+the PCI layer and supports online insertion/removal of devices [thus
+supporting hot-pluggable PCI, CardBus, and Express-Card in a single driver].
+pci_register_driver() call requires passing in a table of function
+pointers and thus dictates the high level structure of a driver.
+
+Once the driver knows about a PCI device and takes ownership, the
+driver generally needs to perform the following initialization:
 
        Enable the device
-       Access device configuration space
-       Discover resources (addresses and IRQ numbers) provided by the device
-       Allocate these resources
-       Communicate with the device
+       Request MMIO/IOP resources
+       Set the DMA mask size (for both coherent and streaming DMA)
+       Allocate and initialize shared control data (pci_allocate_coherent())
+       Access device configuration space (if needed)
+       Register IRQ handler (request_irq())
+       Initialize non-PCI (i.e. LAN/SCSI/etc parts of the chip)
+       Enable DMA/processing engines
+
+When done using the device, and perhaps the module needs to be unloaded,
+the driver needs to take the follow steps:
+       Disable the device from generating IRQs
+       Release the IRQ (free_irq())
+       Stop all DMA activity
+       Release DMA buffers (both streaming and coherent)
+       Unregister from other subsystems (e.g. scsi or netdev)
+       Release MMIO/IOP resources
        Disable the device
 
-Most of these topics are covered by the following sections, for the rest
-look at <linux/pci.h>, it's hopefully well commented.
+Most of these topics are covered in the following sections.
+For the rest look at LDD3 or <linux/pci.h> .
 
 If the PCI subsystem is not configured (CONFIG_PCI is not set), most of
-the functions described below are defined as inline functions either completely
-empty or just returning an appropriate error codes to avoid lots of ifdefs
-in the drivers.
+the PCI functions described below are defined as inline functions either
+completely empty or just returning an appropriate error codes to avoid
+lots of ifdefs in the drivers.
+
 
 
-1. New-style drivers
-~~~~~~~~~~~~~~~~~~~~
-The new-style drivers just call pci_register_driver during their initialization
-with a pointer to a structure describing the driver (struct pci_driver) which
-contains:
+1. pci_register_driver() call
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-       name            Name of the driver
+PCI device drivers call pci_register_driver() during their
+initialization with a pointer to a structure describing the driver
+(struct pci_driver):
+
+       field name      Description
+       ----------      ------------------------------------------------------
        id_table        Pointer to table of device ID's the driver is
                        interested in.  Most drivers should export this
                        table using MODULE_DEVICE_TABLE(pci,...).
-       probe           Pointer to a probing function which gets called (during
-                       execution of pci_register_driver for already existing
-                       devices or later if a new device gets inserted) for all
-                       PCI devices which match the ID table and are not handled
-                       by the other drivers yet. This function gets passed a
-                       pointer to the pci_dev structure representing the device
-                       and also which entry in the ID table did the device
-                       match. It returns zero when the driver has accepted the
-                       device or an error code (negative number) otherwise.
-                       This function always gets called from process context,
-                       so it can sleep.
-       remove          Pointer to a function which gets called whenever a
-                       device being handled by this driver is removed (either
-                       during deregistration of the driver or when it's
-                       manually pulled out of a hot-pluggable slot). This
-                       function always gets called from process context, so it
-                       can sleep.
-       save_state      Save a device's state before it's suspend.
+
+       probe           This probing function gets called (during execution
+                       of pci_register_driver() for already existing
+                       devices or later if a new device gets inserted) for
+                       all PCI devices which match the ID table and are not
+                       "owned" by the other drivers yet. This function gets
+                       passed a "struct pci_dev *" for each device whose
+                       entry in the ID table matches the device. The probe
+                       function returns zero when the driver chooses to
+                       take "ownership" of the device or an error code
+                       (negative number) otherwise.
+                       The probe function always gets called from process
+                       context, so it can sleep.
+
+       remove          The remove() function gets called whenever a device
+                       being handled by this driver is removed (either during
+                       deregistration of the driver or when it's manually
+                       pulled out of a hot-pluggable slot).
+                       The remove function always gets called from process
+                       context, so it can sleep.
+
        suspend         Put device into low power state.
+       suspend_late    Put device into low power state.
+
+       resume_early    Wake device from low power state.
        resume          Wake device from low power state.
+
+               (Please see Documentation/power/pci.txt for descriptions
+               of PCI Power Management and the related functions.)
+
        enable_wake     Enable device to generate wake events from a low power
                        state.
 
-                       (Please see Documentation/power/pci.txt for descriptions
-                       of PCI Power Management and the related functions)
+       shutdown        Hook into reboot_notifier_list (kernel/sys.c).
+                       Intended to stop any idling DMA operations.
+                       Useful for enabling wake-on-lan (NIC) or changing
+                       the power state of a device before reboot.
+                       e.g. drivers/net/e100.c.
+
+       err_handler     See Documentation/pci-error-recovery.txt
+
+       multithread_probe       Enable multi-threaded probe/scan. Driver must
+                       provide its own locking/syncronization for init
+                       operations if this is enabled.
+
 
-The ID table is an array of struct pci_device_id ending with a all-zero entry.
-Each entry consists of:
+The ID table is an array of struct pci_device_id entries ending with an
+all-zero entry.  Each entry consists of:
+
+       vendor,device   Vendor and device ID to match (or PCI_ANY_ID)
 
-       vendor, device  Vendor and device ID to match (or PCI_ANY_ID)
        subvendor,      Subsystem vendor and device ID to match (or PCI_ANY_ID)
-       subdevice
-       class,          Device class to match. The class_mask tells which bits
-       class_mask      of the class are honored during the comparison.
+       subdevice,
+
+       class           Device class, subclass, and "interface" to match.
+                       See Appendix D of the PCI Local Bus Spec or
+                       include/linux/pci_ids.h for a full list of classes.
+                       Most drivers do not need to specify class/class_mask
+                       as vendor/device is normally sufficient.
+
+       class_mask      limit which sub-fields of the class field are compared.
+                       See drivers/scsi/sym53c8xx_2/ for example of usage.
+
        driver_data     Data private to the driver.
+                       Most drivers don't need to use driver_data field.
+                       Best practice is to use driver_data as an index
+                       into a static list of equivalent device types,
+                       instead of using it as a pointer.
 
-Most drivers don't need to use the driver_data field.  Best practice
-for use of driver_data is to use it as an index into a static list of
-equivalent device types, not to use it as a pointer.
 
-Have a table entry {PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID}
-to have probe() called for every PCI device known to the system.
+Most drivers only need PCI_DEVICE() or PCI_DEVICE_CLASS() to set up
+a pci_device_id table.
 
-New PCI IDs may be added to a device driver at runtime by writing
-to the file /sys/bus/pci/drivers/{driver}/new_id.  When added, the
-driver will probe for all devices it can support.
+New PCI IDs may be added to a device driver pci_ids table at runtime
+as shown below:
 
 echo "vendor device subvendor subdevice class class_mask driver_data" > \
- /sys/bus/pci/drivers/{driver}/new_id
-where all fields are passed in as hexadecimal values (no leading 0x).
-Users need pass only as many fields as necessary; vendor, device,
-subvendor, and subdevice fields default to PCI_ANY_ID (FFFFFFFF),
-class and classmask fields default to 0, and driver_data defaults to
-0UL.  Device drivers must initialize use_driver_data in the dynids struct
-in their pci_driver struct prior to calling pci_register_driver in order
-for the driver_data field to get passed to the driver. Otherwise, only a
-0 is passed in that field.
+/sys/bus/pci/drivers/{driver}/new_id
+
+All fields are passed in as hexadecimal values (no leading 0x).
+Users need pass only as many fields as necessary:
+       o vendor, device, subvendor, and subdevice fields default
+         to PCI_ANY_ID (FFFFFFFF),
+       o class and classmask fields default to 0
+       o driver_data defaults to 0UL.
+
+Once added, the driver probe routine will be invoked for any unclaimed
+PCI devices listed in its (newly updated) pci_ids list.
 
 When the driver exits, it just calls pci_unregister_driver() and the PCI layer
 automatically calls the remove hook for all devices handled by the driver.
 
+
+1.1 "Attributes" for driver functions/data
+
 Please mark the initialization and cleanup functions where appropriate
 (the corresponding macros are defined in <linux/init.h>):
 
        __init          Initialization code. Thrown away after the driver
                        initializes.
        __exit          Exit code. Ignored for non-modular drivers.
-       __devinit       Device initialization code. Identical to __init if
-                       the kernel is not compiled with CONFIG_HOTPLUG, normal
-                       function otherwise.
+
+
+       __devinit       Device initialization code.
+                       Identical to __init if the kernel is not compiled
+                       with CONFIG_HOTPLUG, normal function otherwise.
        __devexit       The same for __exit.
 
-Tips:
-       The module_init()/module_exit() functions (and all initialization
-        functions called only from these) should be marked __init/exit.
-       The struct pci_driver shouldn't be marked with any of these tags.
-       The ID table array should be marked __devinitdata.
-       The probe() and remove() functions (and all initialization
-       functions called only from these) should be marked __devinit/exit.
-       If you are sure the driver is not a hotplug driver then use only 
-       __init/exit __initdata/exitdata.
+Tips on when/where to use the above attributes:
+       o The module_init()/module_exit() functions (and all
+         initialization functions called _only_ from these)
+         should be marked __init/__exit.
 
-        Pointers to functions marked as __devexit must be created using
-        __devexit_p(function_name).  That will generate the function
-        name or NULL if the __devexit function will be discarded.
+       o Do not mark the struct pci_driver.
 
+       o The ID table array should be marked __devinitdata.
 
-2. How to find PCI devices manually (the old style)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-PCI drivers not using the pci_register_driver() interface search
-for PCI devices manually using the following constructs:
+       o The probe() and remove() functions should be marked __devinit
+         and __devexit respectively.  All initialization functions
+         exclusively called by the probe() routine, can be marked __devinit.
+         Ditto for remove() and __devexit.
+
+       o If mydriver_probe() is marked with __devinit(), then all address
+         references to mydriver_probe must use __devexit_p(mydriver_probe)
+         (in the struct pci_driver declaration for example).
+         __devexit_p() will generate the function name _or_ NULL if the
+         function will be discarded.  For an example, see drivers/net/tg3.c.
+
+       o Do NOT mark a function if you are not sure which mark to use.
+         Better to not mark the function than mark the function wrong.
+
+
+
+2. How to find PCI devices manually
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+PCI drivers should have a really good reason for not using the
+pci_register_driver() interface to search for PCI devices.
+The main reason PCI devices are controlled by multiple drivers
+is because one PCI device implements several different HW services.
+E.g. combined serial/parallel port/floppy controller.
+
+A manual search may be performed using the following constructs:
 
 Searching by vendor and device ID:
 
@@ -150,87 +239,311 @@ Searching by class ID (iterate in a similar way):
 
 Searching by both vendor/device and subsystem vendor/device ID:
 
-       pci_get_subsys(VENDOR_ID, DEVICE_ID, SUBSYS_VENDOR_ID, SUBSYS_DEVICE_ID, dev).
+       pci_get_subsys(VENDOR_ID,DEVICE_ID, SUBSYS_VENDOR_ID, SUBSYS_DEVICE_ID, dev).
 
-   You can use the constant PCI_ANY_ID as a wildcard replacement for
+You can use the constant PCI_ANY_ID as a wildcard replacement for
 VENDOR_ID or DEVICE_ID.  This allows searching for any device from a
 specific vendor, for example.
 
-   These functions are hotplug-safe. They increment the reference count on
+These functions are hotplug-safe. They increment the reference count on
 the pci_dev that they return. You must eventually (possibly at module unload)
 decrement the reference count on these devices by calling pci_dev_put().
 
 
-3. Enabling and disabling devices
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-   Before you do anything with the device you've found, you need to enable
-it by calling pci_enable_device() which enables I/O and memory regions of
-the device, allocates an IRQ if necessary, assigns missing resources if
-needed and wakes up the device if it was in suspended state. Please note
-that this function can fail.
 
-   If you want to use the device in bus mastering mode, call pci_set_master()
-which enables the bus master bit in PCI_COMMAND register and also fixes
-the latency timer value if it's set to something bogus by the BIOS.
+3. Device Initialization Steps
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+As noted in the introduction, most PCI drivers need the following steps
+for device initialization:
 
-   If you want to use the PCI Memory-Write-Invalidate transaction,
+       Enable the device
+       Request MMIO/IOP resources
+       Set the DMA mask size (for both coherent and streaming DMA)
+       Allocate and initialize shared control data (pci_allocate_coherent())
+       Access device configuration space (if needed)
+       Register IRQ handler (request_irq())
+       Initialize non-PCI (i.e. LAN/SCSI/etc parts of the chip)
+       Enable DMA/processing engines.
+
+The driver can access PCI config space registers at any time.
+(Well, almost. When running BIST, config space can go away...but
+that will just result in a PCI Bus Master Abort and config reads
+will return garbage).
+
+
+3.1 Enable the PCI device
+~~~~~~~~~~~~~~~~~~~~~~~~~
+Before touching any device registers, the driver needs to enable
+the PCI device by calling pci_enable_device(). This will:
+       o wake up the device if it was in suspended state,
+       o allocate I/O and memory regions of the device (if BIOS did not),
+       o allocate an IRQ (if BIOS did not).
+
+NOTE: pci_enable_device() can fail! Check the return value.
+NOTE2: Also see pci_enable_device_bars() below. Drivers can
+    attempt to enable only a subset of BARs they need.
+
+[ OS BUG: we don't check resource allocations before enabling those
+  resources. The sequence would make more sense if we called
+  pci_request_resources() before calling pci_enable_device().
+  Currently, the device drivers can't detect the bug when when two
+  devices have been allocated the same range. This is not a common
+  problem and unlikely to get fixed soon.
+
+  This has been discussed before but not changed as of 2.6.19:
+       http://lkml.org/lkml/2006/3/2/194
+]
+
+pci_set_master() will enable DMA by setting the bus master bit
+in the PCI_COMMAND register. It also fixes the latency timer value if
+it's set to something bogus by the BIOS.
+
+If the PCI device can use the PCI Memory-Write-Invalidate transaction,
 call pci_set_mwi().  This enables the PCI_COMMAND bit for Mem-Wr-Inval
 and also ensures that the cache line size register is set correctly.
-Make sure to check the return value of pci_set_mwi(), not all architectures
-may support Memory-Write-Invalidate.
+Check the return value of pci_set_mwi() as not all architectures
+or chip-sets may support Memory-Write-Invalidate.
+
+
+3.2 Request MMIO/IOP resources
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Memory (MMIO), and I/O port addresses should NOT be read directly
+from the PCI device config space. Use the values in the pci_dev structure
+as the PCI "bus address" might have been remapped to a "host physical"
+address by the arch/chip-set specific kernel support.
 
-   If your driver decides to stop using the device (e.g., there was an
-error while setting it up or the driver module is being unloaded), it
-should call pci_disable_device() to deallocate any IRQ resources, disable
-PCI bus-mastering, etc.  You should not do anything with the device after
+See Documentation/IO-mapping.txt for how to access device registers
+or device memory.
+
+The device driver needs to call pci_request_region() to verify
+no other device is already using the same address resource.
+Conversely, drivers should call pci_release_region() AFTER
 calling pci_disable_device().
+The idea is to prevent two devices colliding on the same address range.
+
+[ See OS BUG comment above. Currently (2.6.19), The driver can only
+  determine MMIO and IO Port resource availability _after_ calling
+  pci_enable_device(). ]
+
+Generic flavors of pci_request_region() are request_mem_region()
+(for MMIO ranges) and request_region() (for IO Port ranges).
+Use these for address resources that are not described by "normal" PCI
+BARs.
+
+Also see pci_request_selected_regions() below.
+
+
+3.3 Set the DMA mask size
+~~~~~~~~~~~~~~~~~~~~~~~~~
+[ If anything below doesn't make sense, please refer to
+  Documentation/DMA-API.txt. This section is just a reminder that
+  drivers need to indicate DMA capabilities of the device and is not
+  an authoritative source for DMA interfaces. ]
+
+While all drivers should explicitly indicate the DMA capability
+(e.g. 32 or 64 bit) of the PCI bus master, devices with more than
+32-bit bus master capability for streaming data need the driver
+to "register" this capability by calling pci_set_dma_mask() with
+appropriate parameters.  In general this allows more efficient DMA
+on systems where System RAM exists above 4G _physical_ address.
+
+Drivers for all PCI-X and PCIe compliant devices must call
+pci_set_dma_mask() as they are 64-bit DMA devices.
+
+Similarly, drivers must also "register" this capability if the device
+can directly address "consistent memory" in System RAM above 4G physical
+address by calling pci_set_consistent_dma_mask().
+Again, this includes drivers for all PCI-X and PCIe compliant devices.
+Many 64-bit "PCI" devices (before PCI-X) and some PCI-X devices are
+64-bit DMA capable for payload ("streaming") data but not control
+("consistent") data.
+
+
+3.4 Setup shared control data
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Once the DMA masks are set, the driver can allocate "consistent" (a.k.a. shared)
+memory.  See Documentation/DMA-API.txt for a full description of
+the DMA APIs. This section is just a reminder that it needs to be done
+before enabling DMA on the device.
+
+
+3.5 Initialize device registers
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Some drivers will need specific "capability" fields programmed
+or other "vendor specific" register initialized or reset.
+E.g. clearing pending interrupts.
+
+
+3.6 Register IRQ handler
+~~~~~~~~~~~~~~~~~~~~~~~~
+While calling request_irq() is the the last step described here,
+this is often just another intermediate step to initialize a device.
+This step can often be deferred until the device is opened for use.
+
+All interrupt handlers for IRQ lines should be registered with IRQF_SHARED
+and use the devid to map IRQs to devices (remember that all PCI IRQ lines
+can be shared).
+
+request_irq() will associate an interrupt handler and device handle
+with an interrupt number. Historically interrupt numbers represent
+IRQ lines which run from the PCI device to the Interrupt controller.
+With MSI and MSI-X (more below) the interrupt number is a CPU "vector".
+
+request_irq() also enables the interrupt. Make sure the device is
+quiesced and does not have any interrupts pending before registering
+the interrupt handler.
+
+MSI and MSI-X are PCI capabilities. Both are "Message Signaled Interrupts"
+which deliver interrupts to the CPU via a DMA write to a Local APIC.
+The fundamental difference between MSI and MSI-X is how multiple
+"vectors" get allocated. MSI requires contiguous blocks of vectors
+while MSI-X can allocate several individual ones.
+
+MSI capability can be enabled by calling pci_enable_msi() or
+pci_enable_msix() before calling request_irq(). This causes
+the PCI support to program CPU vector data into the PCI device
+capability registers.
+
+If your PCI device supports both, try to enable MSI-X first.
+Only one can be enabled at a time.  Many architectures, chip-sets,
+or BIOSes do NOT support MSI or MSI-X and the call to pci_enable_msi/msix
+will fail. This is important to note since many drivers have
+two (or more) interrupt handlers: one for MSI/MSI-X and another for IRQs.
+They choose which handler to register with request_irq() based on the
+return value from pci_enable_msi/msix().
+
+There are (at least) two really good reasons for using MSI:
+1) MSI is an exclusive interrupt vector by definition.
+   This means the interrupt handler doesn't have to verify
+   its device caused the interrupt.
+
+2) MSI avoids DMA/IRQ race conditions. DMA to host memory is guaranteed
+   to be visible to the host CPU(s) when the MSI is delivered. This
+   is important for both data coherency and avoiding stale control data.
+   This guarantee allows the driver to omit MMIO reads to flush
+   the DMA stream.
+
+See drivers/infiniband/hw/mthca/ or drivers/net/tg3.c for examples
+of MSI/MSI-X usage.
+
+
+
+4. PCI device shutdown
+~~~~~~~~~~~~~~~~~~~~~~~
+
+When a PCI device driver is being unloaded, most of the following
+steps need to be performed:
+
+       Disable the device from generating IRQs
+       Release the IRQ (free_irq())
+       Stop all DMA activity
+       Release DMA buffers (both streaming and consistent)
+       Unregister from other subsystems (e.g. scsi or netdev)
+       Disable device from responding to MMIO/IO Port addresses
+       Release MMIO/IO Port resource(s)
+
+
+4.1 Stop IRQs on the device
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+How to do this is chip/device specific. If it's not done, it opens
+the possibility of a "screaming interrupt" if (and only if)
+the IRQ is shared with another device.
+
+When the shared IRQ handler is "unhooked", the remaining devices
+using the same IRQ line will still need the IRQ enabled. Thus if the
+"unhooked" device asserts IRQ line, the system will respond assuming
+it was one of the remaining devices asserted the IRQ line. Since none
+of the other devices will handle the IRQ, the system will "hang" until
+it decides the IRQ isn't going to get handled and masks the IRQ (100,000
+iterations later). Once the shared IRQ is masked, the remaining devices
+will stop functioning properly. Not a nice situation.
+
+This is another reason to use MSI or MSI-X if it's available.
+MSI and MSI-X are defined to be exclusive interrupts and thus
+are not susceptible to the "screaming interrupt" problem.
+
+
+4.2 Release the IRQ
+~~~~~~~~~~~~~~~~~~~
+Once the device is quiesced (no more IRQs), one can call free_irq().
+This function will return control once any pending IRQs are handled,
+"unhook" the drivers IRQ handler from that IRQ, and finally release
+the IRQ if no one else is using it.
+
+
+4.3 Stop all DMA activity
+~~~~~~~~~~~~~~~~~~~~~~~~~
+It's extremely important to stop all DMA operations BEFORE attempting
+to deallocate DMA control data. Failure to do so can result in memory
+corruption, hangs, and on some chip-sets a hard crash.
 
-4. How to access PCI config space
+Stopping DMA after stopping the IRQs can avoid races where the
+IRQ handler might restart DMA engines.
+
+While this step sounds obvious and trivial, several "mature" drivers
+didn't get this step right in the past.
+
+
+4.4 Release DMA buffers
+~~~~~~~~~~~~~~~~~~~~~~~
+Once DMA is stopped, clean up streaming DMA first.
+I.e. unmap data buffers and return buffers to "upstream"
+owners if there is one.
+
+Then clean up "consistent" buffers which contain the control data.
+
+See Documentation/DMA-API.txt for details on unmapping interfaces.
+
+
+4.5 Unregister from other subsystems
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Most low level PCI device drivers support some other subsystem
+like USB, ALSA, SCSI, NetDev, Infiniband, etc. Make sure your
+driver isn't losing resources from that other subsystem.
+If this happens, typically the symptom is an Oops (panic) when
+the subsystem attempts to call into a driver that has been unloaded.
+
+
+4.6 Disable Device from responding to MMIO/IO Port addresses
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+io_unmap() MMIO or IO Port resources and then call pci_disable_device().
+This is the symmetric opposite of pci_enable_device().
+Do not access device registers after calling pci_disable_device().
+
+
+4.7 Release MMIO/IO Port Resource(s)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Call pci_release_region() to mark the MMIO or IO Port range as available.
+Failure to do so usually results in the inability to reload the driver.
+
+
+
+5. How to access PCI config space
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-   You can use pci_(read|write)_config_(byte|word|dword) to access the config
+
+You can use pci_(read|write)_config_(byte|word|dword) to access the config
 space of a device represented by struct pci_dev *. All these functions return 0
 when successful or an error code (PCIBIOS_...) which can be translated to a text
 string by pcibios_strerror. Most drivers expect that accesses to valid PCI
 devices don't fail.
 
-   If you don't have a struct pci_dev available, you can call
+If you don't have a struct pci_dev available, you can call
 pci_bus_(read|write)_config_(byte|word|dword) to access a given device
 and function on that bus.
 
-   If you access fields in the standard portion of the config header, please
+If you access fields in the standard portion of the config header, please
 use symbolic names of locations and bits declared in <linux/pci.h>.
 
-   If you need to access Extended PCI Capability registers, just call
+If you need to access Extended PCI Capability registers, just call
 pci_find_capability() for the particular capability and it will find the
 corresponding register block for you.
 
 
-5. Addresses and interrupts
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-   Memory and port addresses and interrupt numbers should NOT be read from the
-config space. You should use the values in the pci_dev structure as they might
-have been remapped by the kernel.
-
-   See Documentation/IO-mapping.txt for how to access device memory.
-
-   The device driver needs to call pci_request_region() to make sure
-no other device is already using the same resource. The driver is expected
-to determine MMIO and IO Port resource availability _before_ calling
-pci_enable_device().  Conversely, drivers should call pci_release_region()
-_after_ calling pci_disable_device(). The idea is to prevent two devices
-colliding on the same address range.
-
-Generic flavors of pci_request_region() are request_mem_region()
-(for MMIO ranges) and request_region() (for IO Port ranges).
-Use these for address resources that are not described by "normal" PCI
-interfaces (e.g. BAR).
-
-   All interrupt handlers should be registered with IRQF_SHARED and use the devid
-to map IRQs to devices (remember that all PCI interrupts are shared).
-
 
 6. Other interesting functions
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 pci_find_slot()                        Find pci_dev corresponding to given bus and
                                slot numbers.
 pci_set_power_state()          Set PCI Power Management state (0=D0 ... 3=D3)
@@ -247,11 +560,12 @@ pci_set_mwi()                     Enable Memory-Write-Invalidate transactions.
 pci_clear_mwi()                        Disable Memory-Write-Invalidate transactions.
 
 
+
 7. Miscellaneous hints
 ~~~~~~~~~~~~~~~~~~~~~~
-When displaying PCI slot names to the user (for example when a driver wants
-to tell the user what card has it found), please use pci_name(pci_dev)
-for this purpose.
+
+When displaying PCI device names to the user (for example when a driver wants
+to tell the user what card has it found), please use pci_name(pci_dev).
 
 Always refer to the PCI devices by a pointer to the pci_dev structure.
 All PCI layer functions use this identification and it's the only
@@ -259,31 +573,113 @@ reasonable one. Don't use bus/slot/function numbers except for very
 special purposes -- on systems with multiple primary buses their semantics
 can be pretty complex.
 
-If you're going to use PCI bus mastering DMA, take a look at
-Documentation/DMA-mapping.txt.
-
 Don't try to turn on Fast Back to Back writes in your driver.  All devices
 on the bus need to be capable of doing it, so this is something which needs
 to be handled by platform and generic code, not individual drivers.
 
 
+
 8. Vendor and device identifications
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-For the future, let's avoid adding device ids to include/linux/pci_ids.h.
 
-PCI_VENDOR_ID_xxx for vendors, and a hex constant for device ids.
+One is not not required to add new device ids to include/linux/pci_ids.h.
+Please add PCI_VENDOR_ID_xxx for vendors and a hex constant for device ids.
+
+PCI_VENDOR_ID_xxx constants are re-used. The device ids are arbitrary
+hex numbers (vendor controlled) and normally used only in a single
+location, the pci_device_id table.
+
+Please DO submit new vendor/device ids to pciids.sourceforge.net project.
+
 
-Rationale:  PCI_VENDOR_ID_xxx constants are re-used, but device ids are not.
-    Further, device ids are arbitrary hex numbers, normally used only in a
-    single location, the pci_device_id table.
 
 9. Obsolete functions
 ~~~~~~~~~~~~~~~~~~~~~
+
 There are several functions which you might come across when trying to
 port an old driver to the new PCI interface.  They are no longer present
 in the kernel as they aren't compatible with hotplug or PCI domains or
 having sane locking.
 
-pci_find_device()              Superseded by pci_get_device()
-pci_find_subsys()              Superseded by pci_get_subsys()
-pci_find_slot()                        Superseded by pci_get_slot()
+pci_find_device()      Superseded by pci_get_device()
+pci_find_subsys()      Superseded by pci_get_subsys()
+pci_find_slot()                Superseded by pci_get_slot()
+
+
+The alternative is the traditional PCI device driver that walks PCI
+device lists. This is still possible but discouraged.
+
+
+
+10. pci_enable_device_bars() and Legacy I/O Port space
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Large servers may not be able to provide I/O port resources to all PCI
+devices. I/O Port space is only 64KB on Intel Architecture[1] and is
+likely also fragmented since the I/O base register of PCI-to-PCI
+bridge will usually be aligned to a 4KB boundary[2]. On such systems,
+pci_enable_device() and pci_request_region() will fail when
+attempting to enable I/O Port regions that don't have I/O Port
+resources assigned.
+
+Fortunately, many PCI devices which request I/O Port resources also
+provide access to the same registers via MMIO BARs. These devices can
+be handled without using I/O port space and the drivers typically
+offer a CONFIG_ option to only use MMIO regions
+(e.g. CONFIG_TULIP_MMIO). PCI devices typically provide I/O port
+interface for legacy OSes and will work when I/O port resources are not
+assigned. The "PCI Local Bus Specification Revision 3.0" discusses
+this on p.44, "IMPLEMENTATION NOTE".
+
+If your PCI device driver doesn't need I/O port resources assigned to
+I/O Port BARs, you should use pci_enable_device_bars() instead of
+pci_enable_device() in order not to enable I/O port regions for the
+corresponding devices. In addition, you should use
+pci_request_selected_regions() and pci_release_selected_regions()
+instead of pci_request_regions()/pci_release_regions() in order not to
+request/release I/O port regions for the corresponding devices.
+
+[1] Some systems support 64KB I/O port space per PCI segment.
+[2] Some PCI-to-PCI bridges support optional 1KB aligned I/O base.
+
+
+
+11. MMIO Space and "Write Posting"
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Converting a driver from using I/O Port space to using MMIO space
+often requires some additional changes. Specifically, "write posting"
+needs to be handled. Many drivers (e.g. tg3, acenic, sym53c8xx_2)
+already do this. I/O Port space guarantees write transactions reach the PCI
+device before the CPU can continue. Writes to MMIO space allow the CPU
+to continue before the transaction reaches the PCI device. HW weenies
+call this "Write Posting" because the write completion is "posted" to
+the CPU before the transaction has reached its destination.
+
+Thus, timing sensitive code should add readl() where the CPU is
+expected to wait before doing other work.  The classic "bit banging"
+sequence works fine for I/O Port space:
+
+       for (i = 8; --i; val >>= 1) {
+               outb(val & 1, ioport_reg);      /* write bit */
+               udelay(10);
+       }
+
+The same sequence for MMIO space should be:
+
+       for (i = 8; --i; val >>= 1) {
+               writeb(val & 1, mmio_reg);      /* write bit */
+               readb(safe_mmio_reg);           /* flush posted write */
+               udelay(10);
+       }
+
+It is important that "safe_mmio_reg" not have any side effects that
+interferes with the correct operation of the device.
+
+Another case to watch out for is when resetting a PCI device. Use PCI
+Configuration space reads to flush the writel(). This will gracefully
+handle the PCI master abort on all platforms if the PCI device is
+expected to not respond to a readl().  Most x86 platforms will allow
+MMIO reads to master abort (a.k.a. "Soft Fail") and return garbage
+(e.g. ~0). But many RISC platforms will crash (a.k.a."Hard Fail").
+
index d077d764f82b0ce73148063e694f842e7ab00ff9..69f016f02bb0f6055913528b2fa19428872a6584 100644 (file)
@@ -4,6 +4,12 @@ MPC52xx Device Tree Bindings
 (c) 2006 Secret Lab Technologies Ltd
 Grant Likely <grant.likely at secretlab.ca>
 
+********** DRAFT ***********
+* WARNING: Do not depend on the stability of these bindings just yet.
+* The MPC5200 device tree conventions are still in flux
+* Keep an eye on the linuxppc-dev mailing list for more details
+********** DRAFT ***********
+
 I - Introduction
 ================
 Boards supported by the arch/powerpc architecture require device tree be
@@ -157,8 +163,8 @@ rtc@<addr>  rtc             *-rtc           Real time clock
 mscan@<addr>   mscan           *-mscan         CAN bus controller
 pci@<addr>     pci             *-pci           PCI bridge
 serial@<addr>  serial          *-psc-uart      PSC in serial mode
-i2s@<addr>     i2s             *-psc-i2s       PSC in i2s mode
-ac97@<addr>    ac97            *-psc-ac97      PSC in ac97 mode
+i2s@<addr>     sound           *-psc-i2s       PSC in i2s mode
+ac97@<addr>    sound           *-psc-ac97      PSC in ac97 mode
 spi@<addr>     spi             *-psc-spi       PSC in spi mode
 irda@<addr>    irda            *-psc-irda      PSC in IrDA mode
 spi@<addr>     spi             *-spi           MPC52xx spi device
index 3367130e64f6508b5501cfc2d9170970a870c30c..dc8e44fc650f25fd343ad680fbaa0e1ae2fd1ff9 100644 (file)
@@ -11,43 +11,42 @@ the original).
 Supported Cards/Chipsets
 -------------------------
        PCI ID (pci.ids)        OEM     Product
-       9005:0283:9005:0283     Adaptec Catapult (3210S with arc firmware)
-       9005:0284:9005:0284     Adaptec Tomcat (3410S with arc firmware)
        9005:0285:9005:0285     Adaptec 2200S (Vulcan)
        9005:0285:9005:0286     Adaptec 2120S (Crusader)
        9005:0285:9005:0287     Adaptec 2200S (Vulcan-2m)
        9005:0285:9005:0288     Adaptec 3230S (Harrier)
        9005:0285:9005:0289     Adaptec 3240S (Tornado)
        9005:0285:9005:028a     Adaptec 2020ZCR (Skyhawk)
-       9005:0285:9005:028b     Adaptec 2025ZCR (Terminator)
+       9005:0285:9005:028b     Adaptec 2025ZCR (Terminator)
        9005:0286:9005:028c     Adaptec 2230S (Lancer)
        9005:0286:9005:028c     Adaptec 2230SLP (Lancer)
        9005:0286:9005:028d     Adaptec 2130S (Lancer)
        9005:0285:9005:028e     Adaptec 2020SA (Skyhawk)
-       9005:0285:9005:028f     Adaptec 2025SA (Terminator)
+       9005:0285:9005:028f     Adaptec 2025SA (Terminator)
        9005:0285:9005:0290     Adaptec 2410SA (Jaguar)
-       9005:0285:103c:3227     Adaptec 2610SA (Bearcat HP release)
-       9005:0285:9005:0293     Adaptec 21610SA (Corsair-16)
+       9005:0285:103c:3227     Adaptec 2610SA (Bearcat HP release)
+       9005:0285:9005:0293     Adaptec 21610SA (Corsair-16)
        9005:0285:9005:0296     Adaptec 2240S (SabreExpress)
        9005:0285:9005:0292     Adaptec 2810SA (Corsair-8)
-       9005:0285:9005:0294     Adaptec Prowler
-       9005:0285:9005:0297     Adaptec 4005SAS (AvonPark)
-       9005:0285:9005:0298     Adaptec 4000SAS (BlackBird)
+       9005:0285:9005:0297     Adaptec 4005 (AvonPark)
+       9005:0285:9005:0298     Adaptec 4000 (BlackBird)
        9005:0285:9005:0299     Adaptec 4800SAS (Marauder-X)
        9005:0285:9005:029a     Adaptec 4805SAS (Marauder-E)
        9005:0286:9005:029b     Adaptec 2820SA (Intruder)
        9005:0286:9005:029c     Adaptec 2620SA (Intruder)
        9005:0286:9005:029d     Adaptec 2420SA (Intruder HP release)
-       9005:0286:9005:02a2     Adaptec 3800SAS (Hurricane44)
-       9005:0286:9005:02a7     Adaptec 3805SAS (Hurricane80)
-       9005:0286:9005:02a8     Adaptec 3400SAS (Hurricane40)
-       9005:0286:9005:02ac     Adaptec 1800SAS (Typhoon44)
-       9005:0286:9005:02b3     Adaptec 2400SAS (Hurricane40lm)
-       9005:0285:9005:02b5     Adaptec ASR5800 (Voodoo44)
-       9005:0285:9005:02b6     Adaptec ASR5805 (Voodoo80)
-       9005:0285:9005:02b7     Adaptec ASR5808 (Voodoo08)
+       9005:0286:9005:02ac     Adaptec 1800 (Typhoon44)
+       9005:0285:9005:02b5     Adaptec 5445 (Voodoo44)
+       9005:0285:9005:02b6     Adaptec 5805 (Voodoo80)
+       9005:0285:9005:02b7     Adaptec 5085 (Voodoo08)
+       9005:0285:9005:02bb     Adaptec 3405 (Marauder40LP)
+       9005:0285:9005:02bc     Adaptec 3805 (Marauder80LP)
+       9005:0285:9005:02c7     Adaptec 3085 (Marauder08ELP)
+       9005:0285:9005:02bd     Adaptec 31205 (Marauder120)
+       9005:0285:9005:02be     Adaptec 31605 (Marauder160)
+       9005:0285:9005:02c3     Adaptec 51205 (Voodoo120)
+       9005:0285:9005:02c4     Adaptec 51605 (Voodoo160)
        1011:0046:9005:0364     Adaptec 5400S (Mustang)
-       1011:0046:9005:0365     Adaptec 5400S (Mustang)
        9005:0287:9005:0800     Adaptec Themisto (Jupiter)
        9005:0200:9005:0200     Adaptec Themisto (Jupiter)
        9005:0286:9005:0800     Adaptec Callisto (Jupiter)
@@ -68,21 +67,32 @@ Supported Cards/Chipsets
        9005:0285:17aa:0287     Legend  S230 (Vulcan)
        9005:0285:9005:0290     IBM     ServeRAID 7t (Jaguar)
        9005:0285:1014:02F2     IBM     ServeRAID 8i (AvonPark)
-       9005:0285:1014:0312     IBM     ServeRAID 8i (AvonParkLite)
        9005:0286:1014:9540     IBM     ServeRAID 8k/8k-l4 (AuroraLite)
        9005:0286:1014:9580     IBM     ServeRAID 8k/8k-l8 (Aurora)
-       9005:0286:1014:034d     IBM     ServeRAID 8s (Hurricane)
-       9005:0286:9005:029e     ICP     ICP9024R0 (Lancer)
-       9005:0286:9005:029f     ICP     ICP9014R0 (Lancer)
+       9005:0285:1014:034d     IBM     ServeRAID 8s (Marauder-E)
+       9005:0286:9005:029e     ICP     ICP9024RO (Lancer)
+       9005:0286:9005:029f     ICP     ICP9014RO (Lancer)
        9005:0286:9005:02a0     ICP     ICP9047MA (Lancer)
        9005:0286:9005:02a1     ICP     ICP9087MA (Lancer)
-       9005:0286:9005:02a3     ICP     ICP5445AU (Hurricane44)
-       9005:0286:9005:02a4     ICP     ICP9085LI (Marauder-X)
-       9005:0286:9005:02a5     ICP     ICP5085BR (Marauder-E)
+       9005:0285:9005:02a4     ICP     ICP9085LI (Marauder-X)
+       9005:0285:9005:02a5     ICP     ICP5085BR (Marauder-E)
        9005:0286:9005:02a6     ICP     ICP9067MA (Intruder-6)
-       9005:0286:9005:02a9     ICP     ICP5085AU (Hurricane80)
-       9005:0286:9005:02aa     ICP     ICP5045AU (Hurricane40)
-       9005:0286:9005:02b4     ICP     ICP5045AL (Hurricane40lm)
+       9005:0285:9005:02b2     ICP     (Voodoo 8 internal 8 external)
+       9005:0285:9005:02b8     ICP     ICP5445SL (Voodoo44)
+       9005:0285:9005:02b9     ICP     ICP5085SL (Voodoo80)
+       9005:0285:9005:02ba     ICP     ICP5805SL (Voodoo08)
+       9005:0285:9005:02bf     ICP     ICP5045BL (Marauder40LP)
+       9005:0285:9005:02c0     ICP     ICP5085BL (Marauder80LP)
+       9005:0285:9005:02c8     ICP     ICP5805BL (Marauder08ELP)
+       9005:0285:9005:02c1     ICP     ICP5125BR (Marauder120)
+       9005:0285:9005:02c2     ICP     ICP5165BR (Marauder160)
+       9005:0285:9005:02c5     ICP     ICP5125SL (Voodoo120)
+       9005:0285:9005:02c6     ICP     ICP5165SL (Voodoo160)
+       9005:0286:9005:02ab             (Typhoon40)
+       9005:0286:9005:02ad             (Aurora ARK)
+       9005:0286:9005:02ae             (Aurora Lite ARK)
+       9005:0285:9005:02b0             (Sunrise Lake ARK)
+       9005:0285:9005:02b1     Adaptec (Voodoo 8 internal 8 external)
 
 People
 -------------------------
index dab56604745df3d8eaefb9daa9b978befbe3aa1c..5f799e612e039f19f530090cd01161fdfc12c1ca 100644 (file)
@@ -39,28 +39,37 @@ Line Discipline Methods
 
 TTY side interfaces:
 
+open()         -       Called when the line discipline is attached to
+                       the terminal. No other call into the line
+                       discipline for this tty will occur until it
+                       completes successfully. Can sleep.
+
 close()                -       This is called on a terminal when the line
                        discipline is being unplugged. At the point of
                        execution no further users will enter the
                        ldisc code for this tty. Can sleep.
 
-open()         -       Called when the line discipline is attached to
-                       the terminal. No other call into the line
-                       discipline for this tty will occur until it
-                       completes successfully. Can sleep.
+hangup()       -       Called when the tty line is hung up.
+                       The line discipline should cease I/O to the tty.
+                       No further calls into the ldisc code will occur.
+                       Can sleep.
 
 write()                -       A process is writing data through the line
                        discipline.  Multiple write calls are serialized
                        by the tty layer for the ldisc.  May sleep. 
 
-flush_buffer() -       May be called at any point between open and close.
+flush_buffer() -       (optional) May be called at any point between
+                       open and close, and instructs the line discipline
+                       to empty its input buffer.
 
-chars_in_buffer() -    Report the number of bytes in the buffer.
+chars_in_buffer() -    (optional) Report the number of bytes in the input
+                       buffer.
 
-set_termios()  -       Called on termios structure changes. The caller
-                       passes the old termios data and the current data
-                       is in the tty. Called under the termios semaphore so
-                       allowed to sleep. Serialized against itself only.
+set_termios()  -       (optional) Called on termios structure changes.
+                       The caller passes the old termios data and the
+                       current data is in the tty. Called under the
+                       termios semaphore so allowed to sleep. Serialized
+                       against itself only.
 
 read()         -       Move data from the line discipline to the user.
                        Multiple read calls may occur in parallel and the
@@ -92,6 +101,88 @@ write_wakeup()      -       May be called at any point between open and close.
                        this function. In such a situation defer it.
 
 
+Driver Access
+
+Line discipline methods can call the following methods of the underlying
+hardware driver through the function pointers within the tty->driver
+structure:
+
+write()                        Write a block of characters to the tty device.
+                       Returns the number of characters accepted.
+
+put_char()             Queues a character for writing to the tty device.
+                       If there is no room in the queue, the character is
+                       ignored.
+
+flush_chars()          (Optional) If defined, must be called after
+                       queueing characters with put_char() in order to
+                       start transmission.
+
+write_room()           Returns the numbers of characters the tty driver
+                       will accept for queueing to be written.
+
+ioctl()                        Invoke device specific ioctl.
+                       Expects data pointers to refer to userspace.
+                       Returns ENOIOCTLCMD for unrecognized ioctl numbers.
+
+set_termios()          Notify the tty driver that the device's termios
+                       settings have changed. New settings are in
+                       tty->termios. Previous settings should be passed in
+                       the "old" argument.
+
+throttle()             Notify the tty driver that input buffers for the
+                       line discipline are close to full, and it should
+                       somehow signal that no more characters should be
+                       sent to the tty.
+
+unthrottle()           Notify the tty driver that characters can now be
+                       sent to the tty without fear of overrunning the
+                       input buffers of the line disciplines.
+
+stop()                 Ask the tty driver to stop outputting characters
+                       to the tty device.
+
+start()                        Ask the tty driver to resume sending characters
+                       to the tty device.
+
+hangup()               Ask the tty driver to hang up the tty device.
+
+break_ctl()            (Optional) Ask the tty driver to turn on or off
+                       BREAK status on the RS-232 port.  If state is -1,
+                       then the BREAK status should be turned on; if
+                       state is 0, then BREAK should be turned off.
+                       If this routine is not implemented, use ioctls
+                       TIOCSBRK / TIOCCBRK instead.
+
+wait_until_sent()      Waits until the device has written out all of the
+                       characters in its transmitter FIFO.
+
+send_xchar()           Send a high-priority XON/XOFF character to the device.
+
+
+Flags
+
+Line discipline methods have access to tty->flags field containing the
+following interesting flags:
+
+TTY_THROTTLED          Driver input is throttled. The ldisc should call
+                       tty->driver->unthrottle() in order to resume
+                       reception when it is ready to process more data.
+
+TTY_DO_WRITE_WAKEUP    If set, causes the driver to call the ldisc's
+                       write_wakeup() method in order to resume
+                       transmission when it can accept more data
+                       to transmit.
+
+TTY_IO_ERROR           If set, causes all subsequent userspace read/write
+                       calls on the tty to fail, returning -EIO.
+
+TTY_OTHER_CLOSED       Device is a pty and the other side has closed.
+
+TTY_NO_WRITE_SPLIT     Prevent driver from splitting up writes into
+                       smaller chunks.
+
+
 Locking
 
 Callers to the line discipline functions from the tty layer are required to
index 01e7f857ef35b9ec1e7bc5b230b12b0d083ee77e..27a721635f924808f1953e3a1e9cf3fdecd487a4 100644 (file)
@@ -21,7 +21,7 @@ difficult to maintain, add yourself with a patch if desired.
   Bill Ryder <bryder@sgi.com>
   Thomas Sailer <sailer@ife.ee.ethz.ch>
   Gregory P. Smith <greg@electricrain.com>
-  Linus Torvalds <torvalds@osdl.org>
+  Linus Torvalds <torvalds@linux-foundation.org>
   Roman Weissgaerber <weissg@vienna.at>
   <Kazuki.Yasumatsu@fujixerox.co.jp>
 
index 737d6104c3f39fb294774fc5c16de0cb99612a58..17f5c2e1a5708bb493edd779730e5f40d0dc988d 100644 (file)
@@ -46,6 +46,10 @@ Abstract Control Model (USB CDC ACM) specification.
 
        3Com USR ISDN Pro TA
 
+  Some cell phones also connect via USB. I know the following phones work:
+
+       SonyEricsson K800i
+
   Unfortunately many modems and most ISDN TAs use proprietary interfaces and
 thus won't work with this drivers. Check for ACM compliance before buying.
 
index dbdcaf68e3ea382304784bf66fce502216f1d1f1..5c86ed6f0448a8e2378a4ba62d6cedecf236215c 100644 (file)
@@ -52,6 +52,10 @@ APICs
                 apicmaintimer. Useful when your PIT timer is totally
                 broken.
 
+   disable_8254_timer / enable_8254_timer
+                Enable interrupt 0 timer routing over the 8254 in addition to over
+                the IO-APIC. The kernel tries to set a sensible default.
+
 Early Console
 
    syntax: earlyprintk=vga
index db090362d731813b35f5caf8989b5faa8737d74e..d6f04a81f7617de1afd1aae631071b6708f654ff 100644 (file)
@@ -207,16 +207,45 @@ S:        Supported
 ACPI
 P:     Len Brown
 M:     len.brown@intel.com
+M:     lenb@kernel.org
 L:     linux-acpi@vger.kernel.org
 W:     http://acpi.sourceforge.net/
 T:     git kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
-S:     Maintained
+S:     Supported
+
+ACPI BATTERY DRIVERS
+P:     Vladimir P. Lebedev
+M:     vladimir.p.lebedev@intel.com
+L:     linux-acpi@vger.kernel.org
+W:     http://acpi.sourceforge.net/
+S:     Supported
+
+ACPI EC DRIVER
+P:     Alexey Starikovskiy
+M:     alexey.y.starikovskiy@linux.intel.com
+L:     linux-acpi@vger.kernel.org
+W:     http://acpi.sourceforge.net/
+S:     Supported
+
+ACPI FAN DRIVER
+P:     Konstantin A. Karasyov
+M:     konstantin.a.karasyov@intel.com
+L:     linux-acpi@vger.kernel.org
+W:     http://acpi.sourceforge.net/
+S:     Supported
 
 ACPI PCI HOTPLUG DRIVER
 P:     Kristen Carlson Accardi
 M:     kristen.c.accardi@intel.com
 L:     pcihpd-discuss@lists.sourceforge.net
-S:     Maintained
+S:     Supported
+
+ACPI THERMAL DRIVER
+P:     Konstantin A. Karasyov
+M:     konstantin.a.karasyov@intel.com
+L:     linux-acpi@vger.kernel.org
+W:     http://acpi.sourceforge.net/
+S:     Supported
 
 AD1816 SOUND DRIVER
 P:     Thorsten Knabe
@@ -355,6 +384,24 @@ P: Ian Molton
 M:     spyro@f2s.com
 S:     Maintained
 
+ARM/ADI ROADRUNNER MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+ARM/ADS SPHERE MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+ARM/AJECO 1ARM MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
 ARM/ATMEL AT91RM9200 ARM ARCHITECTURE
 P:      Andrew Victor
 M:      andrew@sanpeople.com
@@ -362,17 +409,103 @@ L:      linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:      http://maxim.org.za/at91_26.html
 S:      Maintained
 
+ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+ARM/CIRRUS LOGIC EDB9315A MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
 ARM/CORGI MACHINE SUPPORT
 P:     Richard Purdie
 M:     rpurdie@rpsys.net
 S:     Maintained
 
+ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
 ARM/HP JORNADA 7XX MACHINE SUPPORT
 P:      Kristoffer Ericson
 M:      kristoffer_e1@hotmail.com
 W:      www.jlime.com
 S:      Maintained
 
+ARM/INTEL IOP32X ARM ARCHITECTURE
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+P:     Dan Williams
+M:     dan.j.williams@intel.com
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Supported
+
+ARM/INTEL IOP33X ARM ARCHITECTURE
+P:     Dan Williams
+M:     dan.j.williams@intel.com
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Supported
+
+ARM/INTEL IOP13XX ARM ARCHITECTURE
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+P:     Dan Williams
+M:     dan.j.williams@intel.com
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Supported
+
+ARM/INTEL IQ81342EX MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+P:     Dan Williams
+M:     dan.j.williams@intel.com
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Supported
+
+ARM/INTEL IXP2000 ARM ARCHITECTURE
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+ARM/INTEL IXDP2850 MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+ARM/INTEL IXP23XX ARM ARCHITECTURE
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+ARM/INTEL XSC3 (MANZANO) ARM CORE
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+P:     Dan Williams
+M:     dan.j.williams@intel.com
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Supported
+
+ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+ARM/LOGICPD PXA270 MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
 ARM/TOSA MACHINE SUPPORT
 P:     Dirk Opfer
 M:     dirk@opfer-online.de
@@ -391,6 +524,12 @@ L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.arm.linux.org.uk/
 S:     Maintained
 
+ARM/RADISYS ENP2611 MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
 ARM/SHARK MACHINE SUPPORT
 P:     Alexander Schulz
 M:     alex@shark-linux.de
@@ -418,19 +557,31 @@ L:        linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 W:     http://www.fluff.org/ben/linux/
 S:     Maintained
 
+ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+ARM/THECUS N2100 MACHINE SUPPORT
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
 ARPD SUPPORT
 P:     Jonathan Layes
 L:     netdev@vger.kernel.org
 S:     Maintained
 
 ASUS ACPI EXTRAS DRIVER
+P:     Corentin Chary
+M:     corentincj@iksaif.net
 P:     Karol Kozimor
 M:     sziwan@users.sourceforge.net
-P:     Julien Lerouge
-M:     julien.lerouge@free.fr
 L:     acpi4asus-user@lists.sourceforge.net
 W:     http://sourceforge.net/projects/acpi4asus
-W:     http://julien.lerouge.free.fr
+W:     http://xf.iksaif.net/acpi4asus
 S:     Maintained
 
 ATA OVER ETHERNET DRIVER
@@ -688,12 +839,24 @@ M:        joel.becker@oracle.com
 L:     linux-kernel@vger.kernel.org
 S:     Supported
 
+CIRRUS LOGIC EP93XX ETHERNET DRIVER
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     netdev@vger.kernel.org
+S:     Maintained
+
 CIRRUS LOGIC GENERIC FBDEV DRIVER
 P:     Jeff Garzik
 M:     jgarzik@pobox.com
 L:     linux-fbdev-devel@lists.sourceforge.net (subscribers-only)
 S:     Odd Fixes
 
+CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     linux-usb-devel@lists.sourceforge.net
+S:     Maintained
+
 CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER
 P:     Cirrus Logic Corporation (kernel 2.2 driver)
 M:     Cirrus Logic Corporation, Thomas Woller <twoller@crystal.cirrus.com>
@@ -951,7 +1114,7 @@ DOCKING STATION DRIVER
 P:     Kristen Carlson Accardi
 M:     kristen.c.accardi@intel.com
 L:     linux-acpi@vger.kernel.org
-S:     Maintained
+S:     Supported
 
 DOUBLETALK DRIVER
 P:     James R. Van Zandt
@@ -1091,7 +1254,7 @@ S:        Maintained
 
 ETHERNET BRIDGE
 P:     Stephen Hemminger
-M:     shemminger@osdl.org
+M:     shemminger@linux-foundation.org
 L:     bridge@osdl.org
 W:     http://bridge.sourceforge.net/
 S:     Maintained
@@ -1444,10 +1607,9 @@ T:       git kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git
 S:     Maintained
 
 IDE/ATAPI CDROM DRIVER
-P:     Jens Axboe
-M:     axboe@kernel.dk
-L:     linux-kernel@vger.kernel.org
-W:     http://www.kernel.dk
+P:     Alan Cox
+M:     alan@lxorguk.ukuu.org.uk
+L:     linux-ide@vger.kernel.org
 S:     Maintained
 
 IDE/ATAPI FLOPPY DRIVERS
@@ -1563,6 +1725,12 @@ P:       Deepak Saxena
 M:     dsaxena@plexity.net
 S:     Maintained
 
+INTEL IXP2000 ETHERNET DRIVER
+P:     Lennert Buytenhek
+M:     kernel@wantstofly.org
+L:     netdev@vger.kernel.org
+S:     Maintained
+
 INTEL PRO/100 ETHERNET SUPPORT
 P:     John Ronciak
 M:     john.ronciak@intel.com
@@ -1931,9 +2099,9 @@ S:        Maintained
 
 LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
 P:     Eric Moore
-M:     Eric.Moore@lsil.com
-M:     support@lsil.com
-L:     mpt_linux_developer@lsil.com
+M:     Eric.Moore@lsi.com
+M:     support@lsi.com
+L:     mpt_linux_developer@lsi.com
 L:     linux-scsi@vger.kernel.org
 W:     http://www.lsilogic.com/support
 S:     Supported
@@ -2109,7 +2277,7 @@ S:        Maintained
 
 NETEM NETWORK EMULATOR
 P:     Stephen Hemminger
-M:     shemminger@osdl.org
+M:     shemminger@linux-foundation.org
 L:     netem@osdl.org
 S:     Maintained
 
@@ -2396,7 +2564,7 @@ PCIE HOTPLUG DRIVER
 P:     Kristen Carlson Accardi
 M:     kristen.c.accardi@intel.com
 L:     pcihpd-discuss@lists.sourceforge.net
-S:     Maintained
+S:     Supported
 
 PCMCIA SUBSYSTEM
 P:     Linux PCMCIA Team
@@ -2454,6 +2622,12 @@ P:       Adam Belay
 M:     ambx1@neo.rr.com
 S:     Maintained
 
+PNXxxxx I2C DRIVER
+P:     Vitaly Wool
+M:     vitalywool@gmail.com
+L:     i2c@lm-sensors.org
+S:     Maintained
+
 PPP PROTOCOL DRIVERS AND COMPRESSORS
 P:     Paul Mackerras
 M:     paulus@samba.org
@@ -2491,6 +2665,12 @@ M:       promise@pnd-pc.demon.co.uk
 W:     http://www.pnd-pc.demon.co.uk/promise/
 S:     Maintained
 
+PROMISE SATA TX2/TX4 CONTROLLER LIBATA DRIVER
+P:     Mikael Pettersson
+M:     mikpe@it.uu.se
+L:     linux-ide@vger.kernel.org
+S:     Maintained
+
 PS3 PLATFORM SUPPORT
 P:     Geoff Levand
 M:     geoffrey.levand@am.sony.com
@@ -2890,7 +3070,7 @@ SHPC HOTPLUG DRIVER
 P:     Kristen Carlson Accardi
 M:     kristen.c.accardi@intel.com
 L:     pcihpd-discuss@lists.sourceforge.net
-S:     Maintained
+S:     Supported
 
 SECURE DIGITAL HOST CONTROLLER INTERFACE DRIVER
 P:     Pierre Ossman
@@ -2901,7 +3081,7 @@ S:        Maintained
 
 SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
 P:     Stephen Hemminger
-M:     shemminger@osdl.org
+M:     shemminger@linux-foundation.org
 L:     netdev@vger.kernel.org
 S:     Maintained
 
@@ -3154,9 +3334,8 @@ W:        http://www.linux-usb.org/gadget
 S:     Maintained
 
 USB HID/HIDBP DRIVERS
-P:     Vojtech Pavlik
-M:     vojtech@suse.cz
-L:     linux-usb-users@lists.sourceforge.net
+P:     Jiri Kosina
+M:     jkosina@suse.cz
 L:     linux-usb-devel@lists.sourceforge.net
 S:     Maintained
 
index 97155a8fd73cd8866e9151c004917779ccdb45f9..477f52e3c7f673089914c2ddb4c8995f61e9892f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 20
-EXTRAVERSION =-rc1
-NAME=Avast! A bilge rat!
+EXTRAVERSION =-rc5
+NAME = Homicidal Dwarf Hamster
 
 # *DOCUMENTATION*
 # To see a list of typical targets execute "make help"
@@ -368,14 +368,10 @@ endif
 # Detect when mixed targets is specified, and make a second invocation
 # of make so .config is not included in this case either (for *config).
 
-PHONY += generated_headers
-
-generated_headers: include/linux/version.h include/linux/compile.h \
-               include/linux/utsrelease.h
-
-no-dot-config-targets := generated_headers clean mrproper distclean \
+no-dot-config-targets := clean mrproper distclean \
                         cscope TAGS tags help %docs check% \
-                        headers_% kernelrelease kernelversion
+                        include/linux/version.h headers_% \
+                        kernelrelease kernelversion
 
 config-targets := 0
 mixed-targets  := 0
@@ -738,16 +734,6 @@ debug_kallsyms: .tmp_map$(last_kallsyms)
 
 endif # ifdef CONFIG_KALLSYMS
 
-# compile.h changes depending on hostname, generation number, etc,
-# so we regenerate it always.
-# mkcompile_h will make sure to only update the
-# actual file if its content has changed.
-
-include/linux/compile.h: FORCE
-       @echo '  CHK     $@'
-       $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
-       "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(CFLAGS)"
-
 # vmlinux image - including updated kernel symbols
 vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
 ifdef CONFIG_HEADERS_CHECK
@@ -866,8 +852,8 @@ endif
 # prepare2 creates a makefile if using a separate output directory
 prepare2: prepare3 outputmakefile
 
-prepare1: prepare2 generated_headers include/asm include/config/auto.conf
-
+prepare1: prepare2 include/linux/version.h include/linux/utsrelease.h \
+                   include/asm include/config/auto.conf
 ifneq ($(KBUILD_MODULES),)
        $(Q)mkdir -p $(MODVERDIR)
        $(Q)rm -f $(MODVERDIR)/*
@@ -936,14 +922,14 @@ export INSTALL_HDR_PATH
 HDRARCHES=$(filter-out generic,$(patsubst $(srctree)/include/asm-%/Kbuild,%,$(wildcard $(srctree)/include/asm-*/Kbuild)))
 
 PHONY += headers_install_all
-headers_install_all: generated_headers scripts_basic FORCE
+headers_install_all: include/linux/version.h scripts_basic FORCE
        $(Q)$(MAKE) $(build)=scripts scripts/unifdef
        $(Q)for arch in $(HDRARCHES); do \
         $(MAKE) ARCH=$$arch -f $(srctree)/scripts/Makefile.headersinst obj=include BIASMDIR=-bi-$$arch ;\
         done
 
 PHONY += headers_install
-headers_install: generated_headers scripts_basic FORCE
+headers_install: include/linux/version.h scripts_basic FORCE
        @if [ ! -r $(srctree)/include/asm-$(ARCH)/Kbuild ]; then \
          echo '*** Error: Headers not exportable for this architecture ($(ARCH))'; \
          exit 1 ; fi
@@ -1040,7 +1026,8 @@ CLEAN_FILES +=    vmlinux System.map \
 # Directories & files removed with 'make mrproper'
 MRPROPER_DIRS  += include/config include2 usr/include
 MRPROPER_FILES += .config .config.old include/asm .version .old_version \
-                  include/linux/autoconf.h generated-headers           \
+                  include/linux/autoconf.h include/linux/version.h      \
+                  include/linux/utsrelease.h                            \
                  Module.symvers tags TAGS cscope*
 
 # clean - Delete most, but leave enough to build external modules
diff --git a/README b/README
index c0556152302981b8369325d17d5d5634af064be9..46a66c6e76df3d14b1f3a50896c6100b02c2227c 100644 (file)
--- a/README
+++ b/README
@@ -278,8 +278,8 @@ IF SOMETHING GOES WRONG:
    the file MAINTAINERS to see if there is a particular person associated
    with the part of the kernel that you are having trouble with. If there
    isn't anyone listed there, then the second best thing is to mail
-   them to me (torvalds@osdl.org), and possibly to any other relevant
-   mailing-list or to the newsgroup.
+   them to me (torvalds@linux-foundation.org), and possibly to any other
+   relevant mailing-list or to the newsgroup.
 
  - In all bug-reports, *please* tell what kernel you are talking about,
    how to duplicate the problem, and what your setup is (use your common
index 2db42b18f53f060a1040ba65cf01114793535ad9..8517c3c3eb3393c8ba539add942342757c117f2b 100644 (file)
@@ -436,7 +436,7 @@ __und_usr:
        usr_entry
 
        tst     r3, #PSR_T_BIT                  @ Thumb mode?
-       bne     fpundefinstr                    @ ignore FP
+       bne     __und_usr_unknown               @ ignore FP
        sub     r4, r2, #4
 
        @
@@ -448,7 +448,7 @@ __und_usr:
        @
 1:     ldrt    r0, [r4]
        adr     r9, ret_from_exception
-       adr     lr, fpundefinstr
+       adr     lr, __und_usr_unknown
        @
        @ fallthrough to call_fpe
        @
@@ -476,7 +476,9 @@ __und_usr:
  * Emulators may wish to make use of the following registers:
  *  r0  = instruction opcode.
  *  r2  = PC+4
+ *  r9  = normal "successful" return address
  *  r10 = this threads thread_info structure.
+ *  lr  = unrecognised instruction return address
  */
 call_fpe:
        tst     r0, #0x08000000                 @ only CDP/CPRT/LDC/STC have bit 27
@@ -545,10 +547,12 @@ do_fpe:
 
        .data
 ENTRY(fp_enter)
-       .word   fpundefinstr
+       .word   no_fp
        .text
 
-fpundefinstr:
+no_fp: mov     pc, lr
+
+__und_usr_unknown:
        mov     r0, sp
        adr     lr, ret_from_exception
        b       do_undefinstr
index 6ff5e3ff6cb57a781a672b631596f924c75f3ee4..3c8cdcfe8d4a9f72c9ffb3762a72b260be85d73c 100644 (file)
@@ -29,6 +29,8 @@
 #include <linux/timer.h>
 #include <linux/irq.h>
 
+#include <linux/mc146818rtc.h>
+
 #include <asm/leds.h>
 #include <asm/thread_info.h>
 #include <asm/mach/time.h>
@@ -85,6 +87,17 @@ unsigned long long __attribute__((weak)) sched_clock(void)
        return (unsigned long long)jiffies * (1000000000 / HZ);
 }
 
+/*
+ * An implementation of printk_clock() independent from
+ * sched_clock().  This avoids non-bootable kernels when
+ * printk_clock is enabled.
+ */
+unsigned long long printk_clock(void)
+{
+       return (unsigned long long)(jiffies - INITIAL_JIFFIES) *
+                       (1000000000 / HZ);
+}
+
 static unsigned long next_rtc_update;
 
 /*
index 042a12982e980c43bb0520e289477df525a50fc2..908915675edcb3f66520c9a3765441d388ef29c0 100644 (file)
@@ -27,6 +27,7 @@
 #include <asm/uaccess.h>
 #include <asm/unistd.h>
 #include <asm/traps.h>
+#include <asm/io.h>
 
 #include "ptrace.h"
 #include "signal.h"
index fbf9f88e46eaec7637fa81cd36250bd1f9e9c7f0..e79a1b62600fa013ca4c6d027d2f02ae259d4f92 100644 (file)
 #include <asm/hardware.h>
 #include <asm/io.h>
 
+void * __iomem __iop13xx_io(unsigned long io_addr)
+{
+       void __iomem * io_virt;
+
+       switch (io_addr) {
+       case IOP13XX_PCIE_LOWER_IO_PA ... IOP13XX_PCIE_UPPER_IO_PA:
+               io_virt = (void *) IOP13XX_PCIE_IO_PHYS_TO_VIRT(io_addr);
+               break;
+       case IOP13XX_PCIX_LOWER_IO_PA ... IOP13XX_PCIX_UPPER_IO_PA:
+               io_virt = (void *) IOP13XX_PCIX_IO_PHYS_TO_VIRT(io_addr);
+               break;
+       default:
+               BUG();
+       }
+
+       return io_virt;
+}
+EXPORT_SYMBOL(__iop13xx_io);
+
 void * __iomem __iop13xx_ioremap(unsigned long cookie, size_t size,
        unsigned long flags)
 {
index 03d6905ba490ce1ac7e93e3e146f4ac5ecf30e16..878ff9181d0e5159477f5560e571da9cedecf91d 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/onenand.h>
+#include <linux/irq.h>
 #include <linux/interrupt.h>
 #include <linux/delay.h>
 
index f4f04d87df32902ae37b377af9cbb352d906e021..d8f57824423f63708ca42a5b6a118c5470fb6406 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/spinlock.h>
 
 #include <asm/io.h>
+#include <asm/mach-types.h>
 #include <asm/arch/gpmc.h>
 
 #undef DEBUG
@@ -338,19 +339,13 @@ void __init gpmc_mem_init(void)
        int cs;
        unsigned long boot_rom_space = 0;
 
-       if (cpu_is_omap242x()) {
-               u32 l;
-               l = omap_readl(OMAP242X_CONTROL_STATUS);
-               /* In case of internal boot the 1st MB is redirected to the
-                * boot ROM memory space.
-                */
-               if (l & (1 << 3))
-                       boot_rom_space = BOOT_ROM_SPACE;
-       } else
-               /* We assume internal boot if the mode can't be
-                * determined.
-                */
-               boot_rom_space = BOOT_ROM_SPACE;
+       /* never allocate the first page, to facilitate bug detection;
+        * even if we didn't boot from ROM.
+        */
+       boot_rom_space = BOOT_ROM_SPACE;
+       /* In apollon the CS0 is mapped as 0x0000 0000 */
+       if (machine_is_omap_apollon())
+               boot_rom_space = 0;
        gpmc_mem_root.start = GPMC_MEM_START + boot_rom_space;
        gpmc_mem_root.end = GPMC_MEM_END;
 
index 6ae605857ca9bfb6764bfbe68761ff960ba35ddb..9de1278d234f86d655880c6f587e10b785cb843a 100644 (file)
@@ -76,7 +76,9 @@ unsigned long long sched_clock(void)
        /*
         * 96-bit math to perform tick * NSEC_PER_SEC / CLOCK_TICK_RATE for
         * any value of CLOCK_TICK_RATE. Max value is in the 80 thousand
-        * years range which is nice, but with higher computation cost.
+        * years range and truncation to unsigned long long limits it to
+        * sched_clock's max range of ~584 years.  This is nice but with
+        * higher computation cost.
         */
        {
                union {
index 3775b8f3842942c209a4238b7745faaaa24dcd68..ee2beb400414653cdba4166df543633c62ca83b3 100644 (file)
@@ -101,7 +101,7 @@ static struct irqaction pxa_timer_irq = {
        .handler        = pxa_timer_interrupt,
 };
 
-cycle_t pxa_get_cycles(void)
+static cycle_t pxa_get_cycles(void)
 {
        return OSCR;
 }
@@ -134,13 +134,13 @@ static void __init pxa_timer_init(void)
        OSMR0 = OSCR + LATCH;   /* set initial match */
        local_irq_restore(flags);
 
-       /* on PXA OSCR runs continiously and is not written to, so we can use it
-        * as clock source directly.
+       /*
+        * OSCR runs continuously on PXA and is not written to,
+        * so we can use it as clock source directly.
         */
        clocksource_pxa.mult =
                clocksource_hz2mult(CLOCK_TICK_RATE, clocksource_pxa.shift);
        clocksource_register(&clocksource_pxa);
-
 }
 
 #ifdef CONFIG_NO_IDLE_HZ
index 717322a0916bd4f9a9f5831a11db6d6cb3fecc83..fa860e716b4ff74e5af753a81ae3a2c8152b3e30 100644 (file)
@@ -1053,11 +1053,11 @@ int s3c2410_dma_config(dmach_t channel,
        if (chan == NULL)
                return -EINVAL;
 
-       printk("Initial dcon is %08x\n", dcon);
+       pr_debug("%s: Initial dcon is %08x\n", __FUNCTION__, dcon);
 
        dcon |= chan->dcon & dma_sel.dcon_mask;
 
-       printk("New dcon is %08x\n", dcon);
+       pr_debug("%s: New dcon is %08x\n", __FUNCTION__, dcon);
 
        switch (xferunit) {
        case 1:
index 408b05ae6b9b63dddec06afadf96f0780c089fa7..ded0e96d069d01994786f0afa39fe6734f513b50 100644 (file)
@@ -19,6 +19,7 @@
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/tlbflush.h>
+#include <asm/cacheflush.h>
 
 #include "mm.h"
 
@@ -69,6 +70,11 @@ mc_copy_user_page(void *from, void *to)
 
 void v4_mc_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr)
 {
+       struct page *page = virt_to_page(kfrom);
+
+       if (test_and_clear_bit(PG_dcache_dirty, &page->flags))
+               __flush_dcache_page(page_mapping(page), page);
+
        spin_lock(&minicache_lock);
 
        set_pte_ext(TOP_PTE(0xffff8000), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, minicache_pgprot), 0);
index 865777dec161d3d27fa3c931b56e75965afa97ab..3adb79257f43527339b9c891974d3f2a58e84ece 100644 (file)
@@ -53,6 +53,10 @@ static void v6_copy_user_page_aliasing(void *kto, const void *kfrom, unsigned lo
 {
        unsigned int offset = CACHE_COLOUR(vaddr);
        unsigned long from, to;
+       struct page *page = virt_to_page(kfrom);
+
+       if (test_and_clear_bit(PG_dcache_dirty, &page->flags))
+               __flush_dcache_page(page_mapping(page), page);
 
        /*
         * Discard data in the kernel mapping for the new page.
index aea5da723596727ada083f15ea141fa82cb57870..2e455f82a4d50fbdc390100f6cbcf77c11e1ac4b 100644 (file)
@@ -19,6 +19,7 @@
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/tlbflush.h>
+#include <asm/cacheflush.h>
 
 #include "mm.h"
 
@@ -91,6 +92,11 @@ mc_copy_user_page(void *from, void *to)
 
 void xscale_mc_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr)
 {
+       struct page *page = virt_to_page(kfrom);
+
+       if (test_and_clear_bit(PG_dcache_dirty, &page->flags))
+               __flush_dcache_page(page_mapping(page), page);
+
        spin_lock(&minicache_lock);
 
        set_pte_ext(TOP_PTE(COPYPAGE_MINICACHE), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, minicache_pgprot), 0);
index 628348c9f6c5f17ded5fa62ec700bdb8666e85a7..9df507d36e0b9b0f0291395da5cecd007b627f0f 100644 (file)
@@ -202,3 +202,42 @@ void flush_dcache_page(struct page *page)
        }
 }
 EXPORT_SYMBOL(flush_dcache_page);
+
+/*
+ * Flush an anonymous page so that users of get_user_pages()
+ * can safely access the data.  The expected sequence is:
+ *
+ *  get_user_pages()
+ *    -> flush_anon_page
+ *  memcpy() to/from page
+ *  if written to page, flush_dcache_page()
+ */
+void __flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vmaddr)
+{
+       unsigned long pfn;
+
+       /* VIPT non-aliasing caches need do nothing */
+       if (cache_is_vipt_nonaliasing())
+               return;
+
+       /*
+        * Write back and invalidate userspace mapping.
+        */
+       pfn = page_to_pfn(page);
+       if (cache_is_vivt()) {
+               flush_cache_page(vma, vmaddr, pfn);
+       } else {
+               /*
+                * For aliasing VIPT, we can flush an alias of the
+                * userspace address only.
+                */
+               flush_pfn_alias(pfn, vmaddr);
+       }
+
+       /*
+        * Invalidate kernel mapping.  No data should be contained
+        * in this mapping of the page.  FIXME: this is overkill
+        * since we actually ask for a write-back and invalidate.
+        */
+       __cpuc_flush_dcache_page(page_address(page));
+}
index e26cc1f599489f24274bbd0625b49bddc8bd31f4..490d9d18a7d1c166dbef16e988050ec870e406a8 100644 (file)
@@ -264,6 +264,18 @@ void VFP9_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs)
                vfp_raise_exceptions(exceptions, trigger, orig_fpscr, regs);
 }
 
+static void vfp_enable(void *unused)
+{
+       u32 access = get_copro_access();
+
+       /*
+        * Enable full access to VFP (cp10 and cp11)
+        */
+       set_copro_access(access | CPACC_FULL(10) | CPACC_FULL(11));
+}
+
+#include <linux/smp.h>
+
 /*
  * VFP support code initialisation.
  */
@@ -288,6 +300,7 @@ static int __init vfp_init(void)
         * we just need to read the VFPSID register.
         */
        vfpsid = fmrx(FPSID);
+       barrier();
 
        printk(KERN_INFO "VFP support v0.3: ");
        if (VFP_arch) {
@@ -301,6 +314,8 @@ static int __init vfp_init(void)
        } else if (vfpsid & FPSID_NODOUBLE) {
                printk("no double precision support\n");
        } else {
+               smp_call_function(vfp_enable, NULL, 1, 1);
+
                VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT;  /* Extract the architecture version */
                printk("implementor %02x architecture %d part %02x variant %x rev %x\n",
                        (vfpsid & FPSID_IMPLEMENTER_MASK) >> FPSID_IMPLEMENTER_BIT,
index 2d0023f2d49bc01ade50767f8b2f9d9584034691..77e655f26560a82660389d03e67c402a35627002 100644 (file)
@@ -195,7 +195,7 @@ int setup_profiling_timer(unsigned int multiplier)
  */
 unsigned long cache_decay_ticks = 1;
 
-int __devinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu)
 {
        smp_boot_one_cpu(cpu);
        return cpu_online(cpu) ? 0 : -ENOSYS;
index 0d67a0a1151e8ef263ae67d1489ea5ad98f8a1d4..0dfee812811a9c75427551ef8177b45f2ca7a998 100644 (file)
@@ -777,6 +777,47 @@ config CRASH_DUMP
           PHYSICAL_START.
          For more details see Documentation/kdump/kdump.txt
 
+config PHYSICAL_START
+       hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
+       default "0x100000"
+       help
+         This gives the physical address where the kernel is loaded.
+
+         If kernel is a not relocatable (CONFIG_RELOCATABLE=n) then
+         bzImage will decompress itself to above physical address and
+         run from there. Otherwise, bzImage will run from the address where
+         it has been loaded by the boot loader and will ignore above physical
+         address.
+
+         In normal kdump cases one does not have to set/change this option
+         as now bzImage can be compiled as a completely relocatable image
+         (CONFIG_RELOCATABLE=y) and be used to load and run from a different
+         address. This option is mainly useful for the folks who don't want
+         to use a bzImage for capturing the crash dump and want to use a
+         vmlinux instead. vmlinux is not relocatable hence a kernel needs
+         to be specifically compiled to run from a specific memory area
+         (normally a reserved region) and this option comes handy.
+
+         So if you are using bzImage for capturing the crash dump, leave
+         the value here unchanged to 0x100000 and set CONFIG_RELOCATABLE=y.
+         Otherwise if you plan to use vmlinux for capturing the crash dump
+         change this value to start of the reserved region (Typically 16MB
+         0x1000000). In other words, it can be set based on the "X" value as
+         specified in the "crashkernel=YM@XM" command line boot parameter
+         passed to the panic-ed kernel. Typically this parameter is set as
+         crashkernel=64M@16M. Please take a look at
+         Documentation/kdump/kdump.txt for more details about crash dumps.
+
+         Usage of bzImage for capturing the crash dump is recommended as
+         one does not have to build two kernels. Same kernel can be used
+         as production kernel and capture kernel. Above option should have
+         gone away after relocatable bzImage support is introduced. But it
+         is present because there are users out there who continue to use
+         vmlinux for dump capture. This option should go away down the
+         line.
+
+         Don't change this unless you know what you are doing.
+
 config RELOCATABLE
        bool "Build a relocatable kernel(EXPERIMENTAL)"
        depends on EXPERIMENTAL
diff --git a/arch/i386/boot/compressed/.gitignore b/arch/i386/boot/compressed/.gitignore
new file mode 100644 (file)
index 0000000..be0ed06
--- /dev/null
@@ -0,0 +1 @@
+relocs
index f395a4bb38bbe63740e0fe35a77decafe474dff4..3517a32aaf4152a67098f70dc43e1f43f16d5851 100644 (file)
@@ -28,7 +28,7 @@
 #include <asm/page.h>
 #include <asm/boot.h>
 
-.section ".text.head"
+.section ".text.head","ax",@progbits
        .globl startup_32
 
 startup_32:
index e075ff05c46dea818606f791a4178e0aa7b414c6..5d80edfc61b7f61f36ed0183c886921c8a79ffd1 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-git14
-# Sat Dec  9 21:23:14 2006
+# Linux kernel version: 2.6.20-rc3
+# Fri Jan  5 11:54:46 2007
 #
 CONFIG_X86_32=y
 CONFIG_GENERIC_TIME=y
@@ -1167,7 +1167,7 @@ CONFIG_USB_STORAGE=y
 # USB Input Devices
 #
 CONFIG_USB_HID=y
-# CONFIG_USB_HID_POWERBOOK is not set
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
 # CONFIG_HID_FF is not set
 # CONFIG_USB_HIDDEV is not set
 # CONFIG_USB_AIPTEK is not set
@@ -1286,6 +1286,11 @@ CONFIG_USB_MON=y
 # DMA Devices
 #
 
+#
+# Virtualization
+#
+# CONFIG_KVM is not set
+
 #
 # File systems
 #
@@ -1471,6 +1476,8 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_UNUSED_SYMBOLS=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
 CONFIG_DEBUG_KERNEL=y
 CONFIG_LOG_BUF_SHIFT=18
 CONFIG_DETECT_SOFTLOCKUP=y
@@ -1489,12 +1496,10 @@ CONFIG_DETECT_SOFTLOCKUP=y
 # CONFIG_DEBUG_HIGHMEM is not set
 CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
 # CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_LIST is not set
 # CONFIG_FRAME_POINTER is not set
 # CONFIG_FORCED_INLINING is not set
-# CONFIG_HEADERS_CHECK is not set
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_LKDTM is not set
 CONFIG_EARLY_PRINTK=y
@@ -1527,6 +1532,7 @@ CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
 CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_PENDING_IRQ=y
index 094300b3a81fad123f347403434ff20f645cb5cc..cbcb2c27f48b8e796b87fc79b7f0fd3c92c5e81b 100644 (file)
@@ -333,7 +333,7 @@ acpi_parse_ioapic(acpi_table_entry_header * header, const unsigned long end)
 /*
  * Parse Interrupt Source Override for the ACPI SCI
  */
-static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
+static void __init acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
 {
        if (trigger == 0)       /* compatible SCI trigger is level */
                trigger = 3;
index 12e937c1ce4bbe11feccd1be11d75e728adc1f44..2d39f55d29a88ca36283d2f87206cd646649e521 100644 (file)
@@ -47,13 +47,13 @@ EXPORT_SYMBOL(acpi_processor_power_init_bm_check);
 
 /* The code below handles cstate entry with monitor-mwait pair on Intel*/
 
-struct cstate_entry_s {
+struct cstate_entry {
        struct {
                unsigned int eax;
                unsigned int ecx;
        } states[ACPI_PROCESSOR_MAX_POWER];
 };
-static struct cstate_entry_s *cpu_cstate_entry;        /* per CPU ptr */
+static struct cstate_entry *cpu_cstate_entry;  /* per CPU ptr */
 
 static short mwait_supported[ACPI_PROCESSOR_MAX_POWER];
 
@@ -71,7 +71,7 @@ static short mwait_supported[ACPI_PROCESSOR_MAX_POWER];
 int acpi_processor_ffh_cstate_probe(unsigned int cpu,
                struct acpi_processor_cx *cx, struct acpi_power_register *reg)
 {
-       struct cstate_entry_s *percpu_entry;
+       struct cstate_entry *percpu_entry;
        struct cpuinfo_x86 *c = cpu_data + cpu;
 
        cpumask_t saved_mask;
@@ -136,7 +136,7 @@ EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_probe);
 void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cx)
 {
        unsigned int cpu = smp_processor_id();
-       struct cstate_entry_s *percpu_entry;
+       struct cstate_entry *percpu_entry;
 
        percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
        mwait_idle_with_hints(percpu_entry->states[cx->index].eax,
@@ -150,7 +150,7 @@ static int __init ffh_cstate_init(void)
        if (c->x86_vendor != X86_VENDOR_INTEL)
                return -1;
 
-       cpu_cstate_entry = alloc_percpu(struct cstate_entry_s);
+       cpu_cstate_entry = alloc_percpu(struct cstate_entry);
        return 0;
 }
 
index 1b34c56f8123ac7f4ccb7a7e677bee6ef8f7cb6f..8a8bbdaaf38aba279fa3df1672f05a0cdc5253cb 100644 (file)
@@ -54,7 +54,7 @@ static struct cpu_dev __cpuinitdata default_cpu = {
        .c_init = default_init,
        .c_vendor = "Unknown",
 };
-static struct cpu_dev * this_cpu = &default_cpu;
+static struct cpu_dev * this_cpu __cpuinitdata = &default_cpu;
 
 static int __init cachesize_setup(char *str)
 {
@@ -710,11 +710,8 @@ __cpuinit int init_gdt(int cpu, struct task_struct *idle)
        return 1;
 }
 
-/* Common CPU init for both boot and secondary CPUs */
-static void __cpuinit _cpu_init(int cpu, struct task_struct *curr)
+void __cpuinit cpu_set_gdt(int cpu)
 {
-       struct tss_struct * t = &per_cpu(init_tss, cpu);
-       struct thread_struct *thread = &curr->thread;
        struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu);
 
        /* Reinit these anyway, even if they've already been done (on
@@ -722,6 +719,13 @@ static void __cpuinit _cpu_init(int cpu, struct task_struct *curr)
           the real ones). */
        load_gdt(cpu_gdt_descr);
        set_kernel_gs();
+}
+
+/* Common CPU init for both boot and secondary CPUs */
+static void __cpuinit _cpu_init(int cpu, struct task_struct *curr)
+{
+       struct tss_struct * t = &per_cpu(init_tss, cpu);
+       struct thread_struct *thread = &curr->thread;
 
        if (cpu_test_and_set(cpu, cpu_initialized)) {
                printk(KERN_WARNING "CPU#%d already initialized!\n", cpu);
@@ -807,6 +811,7 @@ void __cpuinit cpu_init(void)
                        local_irq_enable();
        }
 
+       cpu_set_gdt(cpu);
        _cpu_init(cpu, curr);
 }
 
index b735458c6e3aece33291afa2065efe3f551a1059..10baa3501ed336c37b5d9a5662ce99484c48d651 100644 (file)
@@ -373,8 +373,8 @@ static int acpi_cpufreq_target(struct cpufreq_policy *policy,
        cpumask_t online_policy_cpus;
        struct drv_cmd cmd;
        unsigned int msr;
-       unsigned int next_state = 0;
-       unsigned int next_perf_state = 0;
+       unsigned int next_state = 0; /* Index into freq_table */
+       unsigned int next_perf_state = 0; /* Index into perf table */
        unsigned int i;
        int result = 0;
 
@@ -420,6 +420,7 @@ static int acpi_cpufreq_target(struct cpufreq_policy *policy,
                msr =
                    (u32) perf->states[next_perf_state].
                    control & INTEL_MSR_RANGE;
+               cmd.val = get_cur_val(online_policy_cpus);
                cmd.val = (cmd.val & ~INTEL_MSR_RANGE) | msr;
                break;
        case SYSTEM_IO_CAPABLE:
@@ -439,8 +440,8 @@ static int acpi_cpufreq_target(struct cpufreq_policy *policy,
        else
                cpu_set(policy->cpu, cmd.mask);
 
-       freqs.old = data->freq_table[perf->state].frequency;
-       freqs.new = data->freq_table[next_perf_state].frequency;
+       freqs.old = perf->states[perf->state].core_frequency * 1000;
+       freqs.new = data->freq_table[next_state].frequency;
        for_each_cpu_mask(i, cmd.mask) {
                freqs.cpu = i;
                cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
@@ -677,6 +678,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
                valid_states++;
        }
        data->freq_table[valid_states].frequency = CPUFREQ_TABLE_END;
+       perf->state = 0;
 
        result = cpufreq_frequency_table_cpuinfo(policy, data->freq_table);
        if (result)
index 6d9c97a690fd076e520a8134a3f87976ff064663..e940e00b96c99df51836d78ef3ab54e290d59ffa 100644 (file)
 #define        CPU_EZRA_T      4
 #define        CPU_NEHEMIAH    5
 
+/* Flags */
+#define USE_ACPI_C3            (1 << 1)
+#define USE_NORTHBRIDGE                (1 << 2)
+
 static int cpu_model;
 static unsigned int numscales=16;
 static unsigned int fsb;
@@ -68,7 +72,7 @@ static unsigned int minmult, maxmult;
 static int can_scale_voltage;
 static struct acpi_processor *pr = NULL;
 static struct acpi_processor_cx *cx = NULL;
-static int port22_en;
+static u8 longhaul_flags;
 
 /* Module parameters */
 static int scale_voltage;
@@ -80,7 +84,6 @@ static int ignore_latency;
 /* Clock ratios multiplied by 10 */
 static int clock_ratio[32];
 static int eblcr_table[32];
-static unsigned int highest_speed, lowest_speed; /* kHz */
 static int longhaul_version;
 static struct cpufreq_frequency_table *longhaul_table;
 
@@ -178,7 +181,7 @@ static void do_powersaver(int cx_address, unsigned int clock_ratio_index)
        safe_halt();
        /* Change frequency on next halt or sleep */
        wrmsrl(MSR_VIA_LONGHAUL, longhaul.val);
-       if (port22_en) {
+       if (!cx_address) {
                ACPI_FLUSH_CPU_CACHE();
                /* Invoke C1 */
                halt();
@@ -189,7 +192,6 @@ static void do_powersaver(int cx_address, unsigned int clock_ratio_index)
                /* Dummy op - must do something useless after P_LVL3 read */
                t = inl(acpi_fadt.xpm_tmr_blk.address);
        }
-
        /* Disable bus ratio bit */
        local_irq_disable();
        longhaul.bits.RevisionKey = longhaul.bits.RevisionID;
@@ -243,15 +245,14 @@ static void longhaul_setstate(unsigned int clock_ratio_index)
        outb(0xFF,0xA1);        /* Overkill */
        outb(0xFE,0x21);        /* TMR0 only */
 
-       if (pr->flags.bm_control) {
+       if (longhaul_flags & USE_NORTHBRIDGE) {
+               /* Disable AGP and PCI arbiters */
+               outb(3, 0x22);
+       } else if ((pr != NULL) && pr->flags.bm_control) {
                /* Disable bus master arbitration */
                acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1,
                                  ACPI_MTX_DO_NOT_LOCK);
-       } else if (port22_en) {
-               /* Disable AGP and PCI arbiters */
-               outb(3, 0x22);
        }
-
        switch (longhaul_version) {
 
        /*
@@ -278,22 +279,25 @@ static void longhaul_setstate(unsigned int clock_ratio_index)
         * to work in practice.
         */
        case TYPE_POWERSAVER:
-               /* Don't allow wakeup */
-               acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0,
-                                 ACPI_MTX_DO_NOT_LOCK);
-               do_powersaver(cx->address, clock_ratio_index);
+               if (longhaul_flags & USE_ACPI_C3) {
+                       /* Don't allow wakeup */
+                       acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0,
+                                         ACPI_MTX_DO_NOT_LOCK);
+                       do_powersaver(cx->address, clock_ratio_index);
+               } else {
+                       do_powersaver(0, clock_ratio_index);
+               }
                break;
        }
 
-       if (pr->flags.bm_control) {
+       if (longhaul_flags & USE_NORTHBRIDGE) {
+               /* Enable arbiters */
+               outb(0, 0x22);
+       } else if ((pr != NULL) && pr->flags.bm_control) {
                /* Enable bus master arbitration */
                acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0,
                                  ACPI_MTX_DO_NOT_LOCK);
-       } else if (port22_en) {
-               /* Enable arbiters */
-               outb(0, 0x22);
        }
-
        outb(pic2_mask,0xA1);   /* restore mask */
        outb(pic1_mask,0x21);
 
@@ -314,12 +318,12 @@ static void longhaul_setstate(unsigned int clock_ratio_index)
 
 #define ROUNDING       0xf
 
-static int _guess(int guess)
+static int _guess(int guess, int mult)
 {
        int target;
 
-       target = ((maxmult/10)*guess);
-       if (maxmult%10 != 0)
+       target = ((mult/10)*guess);
+       if (mult%10 != 0)
                target += (guess/2);
        target += ROUNDING/2;
        target &= ~ROUNDING;
@@ -327,17 +331,17 @@ static int _guess(int guess)
 }
 
 
-static int guess_fsb(void)
+static int guess_fsb(int mult)
 {
        int speed = (cpu_khz/1000);
        int i;
-       int speeds[3] = { 66, 100, 133 };
+       int speeds[] = { 66, 100, 133, 200 };
 
        speed += ROUNDING/2;
        speed &= ~ROUNDING;
 
-       for (i=0; i<3; i++) {
-               if (_guess(speeds[i]) == speed)
+       for (i=0; i<4; i++) {
+               if (_guess(speeds[i], mult) == speed)
                        return speeds[i];
        }
        return 0;
@@ -354,9 +358,7 @@ static int __init longhaul_get_ranges(void)
                        130, 150, 160, 140,  -1, 155,  -1, 145 };
        unsigned int j, k = 0;
        union msr_longhaul longhaul;
-       unsigned long lo, hi;
-       unsigned int eblcr_fsb_table_v1[] = { 66, 133, 100, -1 };
-       unsigned int eblcr_fsb_table_v2[] = { 133, 100, -1, 66 };
+       int mult = 0;
 
        switch (longhaul_version) {
        case TYPE_LONGHAUL_V1:
@@ -364,30 +366,18 @@ static int __init longhaul_get_ranges(void)
                /* Ugh, Longhaul v1 didn't have the min/max MSRs.
                   Assume min=3.0x & max = whatever we booted at. */
                minmult = 30;
-               maxmult = longhaul_get_cpu_mult();
-               rdmsr (MSR_IA32_EBL_CR_POWERON, lo, hi);
-               invalue = (lo & (1<<18|1<<19)) >>18;
-               if (cpu_model==CPU_SAMUEL || cpu_model==CPU_SAMUEL2)
-                       fsb = eblcr_fsb_table_v1[invalue];
-               else
-                       fsb = guess_fsb();
+               maxmult = mult = longhaul_get_cpu_mult();
                break;
 
        case TYPE_POWERSAVER:
                /* Ezra-T */
                if (cpu_model==CPU_EZRA_T) {
+                       minmult = 30;
                        rdmsrl (MSR_VIA_LONGHAUL, longhaul.val);
                        invalue = longhaul.bits.MaxMHzBR;
                        if (longhaul.bits.MaxMHzBR4)
                                invalue += 16;
-                       maxmult=ezra_t_multipliers[invalue];
-
-                       invalue = longhaul.bits.MinMHzBR;
-                       if (longhaul.bits.MinMHzBR4 == 1)
-                               minmult = 30;
-                       else
-                               minmult = ezra_t_multipliers[invalue];
-                       fsb = eblcr_fsb_table_v2[longhaul.bits.MaxMHzFSB];
+                       maxmult = mult = ezra_t_multipliers[invalue];
                        break;
                }
 
@@ -407,21 +397,16 @@ static int __init longhaul_get_ranges(void)
                         *   But it works, so we don't grumble.
                         */
                        minmult=40;
-                       maxmult=longhaul_get_cpu_mult();
-
-                       /* Starting with the 1.2GHz parts, theres a 200MHz bus. */
-                       if ((cpu_khz/maxmult) > 13400)
-                               fsb = 200;
-                       else
-                               fsb = eblcr_fsb_table_v2[longhaul.bits.MaxMHzFSB];
+                       maxmult = mult = longhaul_get_cpu_mult();
                        break;
                }
        }
+       fsb = guess_fsb(mult);
 
        dprintk ("MinMult:%d.%dx MaxMult:%d.%dx\n",
                 minmult/10, minmult%10, maxmult/10, maxmult%10);
 
-       if (fsb == -1) {
+       if (fsb == 0) {
                printk (KERN_INFO PFX "Invalid (reserved) FSB!\n");
                return -EINVAL;
        }
@@ -691,27 +676,32 @@ static int __init longhaul_cpu_init(struct cpufreq_policy *policy)
        /* Find ACPI data for processor */
        acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
                            &longhaul_walk_callback, NULL, (void *)&pr);
-       if (pr == NULL)
-               goto err_acpi;
 
-       if (longhaul_version == TYPE_POWERSAVER) {
-               /* Check ACPI support for C3 state */
+       /* Check ACPI support for C3 state */
+       if ((pr != NULL) && (longhaul_version == TYPE_POWERSAVER)) {
                cx = &pr->power.states[ACPI_STATE_C3];
                if (cx->address > 0 &&
                   (cx->latency <= 1000 || ignore_latency != 0) ) {
+                       longhaul_flags |= USE_ACPI_C3;
                        goto print_support_type;
                }
        }
+       /* Check if northbridge is friendly */
+       if (enable_arbiter_disable()) {
+               longhaul_flags |= USE_NORTHBRIDGE;
+               goto print_support_type;
+       }
+
+       /* No ACPI C3 or we can't use it */
        /* Check ACPI support for bus master arbiter disable */
-       if (!pr->flags.bm_control) {
-               if (enable_arbiter_disable()) {
-                       port22_en = 1;
-               } else {
-                       goto err_acpi;
-               }
+       if ((pr == NULL) || !(pr->flags.bm_control)) {
+               printk(KERN_ERR PFX
+                       "No ACPI support. Unsupported northbridge.\n");
+               return -ENODEV;
        }
+
 print_support_type:
-       if (!port22_en) {
+       if (!(longhaul_flags & USE_NORTHBRIDGE)) {
                printk (KERN_INFO PFX "Using ACPI support.\n");
        } else {
                printk (KERN_INFO PFX "Using northbridge support.\n");
@@ -736,10 +726,6 @@ print_support_type:
        cpufreq_frequency_table_get_attr(longhaul_table, policy->cpu);
 
        return 0;
-
-err_acpi:
-       printk(KERN_ERR PFX "No ACPI support. Unsupported northbridge. Aborting.\n");
-       return -ENODEV;
 }
 
 static int __devexit longhaul_cpu_exit(struct cpufreq_policy *policy)
@@ -774,8 +760,8 @@ static int __init longhaul_init(void)
 
 #ifdef CONFIG_SMP
        if (num_online_cpus() > 1) {
-               return -ENODEV;
                printk(KERN_ERR PFX "More than 1 CPU detected, longhaul disabled.\n");
+               return -ENODEV;
        }
 #endif
 #ifdef CONFIG_X86_IO_APIC
index 5113e923163404c2b74b9718d24631b2aafec95d..f43b987f952b0870c36d114924960ffc65ffa92c 100644 (file)
@@ -533,9 +533,9 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy *policy)
 
        /* notify BIOS that we exist */
        acpi_processor_notify_smm(THIS_MODULE);
-       printk("speedstep-centrino with X86_SPEEDSTEP_CENTRINO_ACPI"
-                       "config is deprecated.\n "
-                       "Use X86_ACPI_CPUFREQ (acpi-cpufreq instead.\n" );
+       printk("speedstep-centrino with X86_SPEEDSTEP_CENTRINO_ACPI "
+              "config is deprecated.\n "
+              "Use X86_ACPI_CPUFREQ (acpi-cpufreq) instead.\n" );
 
        return 0;
 
index c0c3b59de32c4d183b677e843ffacffa5aa2f1bb..abcff92f994c06eafd9aa52f13b1401498c789fa 100644 (file)
@@ -173,7 +173,7 @@ static void __cpuinit geode_configure(void)
        ccr4 = getCx86(CX86_CCR4);
        ccr4 |= 0x38;           /* FPU fast, DTE cache, Mem bypass */
        
-       setCx86(CX86_CCR3, ccr3);
+       setCx86(CX86_CCR4, ccr4);
        
        set_cx86_memwb();
        set_cx86_reorder();     
index 2ce67228dff8a28e634b714b03e1898aa9fd3b7c..49bff3596bffd980862fcfd4480268a6b55131c1 100644 (file)
@@ -36,7 +36,7 @@
 
 /* Have we found an MP table */
 int smp_found_config;
-unsigned int __initdata maxcpus = NR_CPUS;
+unsigned int __cpuinitdata maxcpus = NR_CPUS;
 
 /*
  * Various Linux-internal data structures created from the
@@ -102,9 +102,9 @@ static int __init mpf_checksum(unsigned char *mp, int len)
  */
 
 static int mpc_record; 
-static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __initdata;
+static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __cpuinitdata;
 
-static void __devinit MP_processor_info (struct mpc_config_processor *m)
+static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
 {
        int ver, apicid;
        physid_mask_t phys_cpu;
@@ -822,7 +822,7 @@ void __init mp_register_lapic_address(u64 address)
        Dprintk("Boot CPU = %d\n", boot_cpu_physical_apicid);
 }
 
-void __devinit mp_register_lapic (u8 id, u8 enabled)
+void __cpuinit mp_register_lapic (u8 id, u8 enabled)
 {
        struct mpc_config_processor processor;
        int boot_cpu = 0;
index a5e34d655965ca28582e8806603bd1f631e606da..1a6f8bb8881ce72fa99909914beb70141b4a519f 100644 (file)
@@ -310,13 +310,7 @@ static int __init setup_nmi_watchdog(char *str)
 
        if ((nmi >= NMI_INVALID) || (nmi < NMI_NONE))
                return 0;
-       /*
-        * If any other x86 CPU has a local APIC, then
-        * please test the NMI stuff there and send me the
-        * missing bits. Right now Intel P6/P4 and AMD K7 only.
-        */
-       if ((nmi == NMI_LOCAL_APIC) && (nmi_known_cpu() == 0))
-               return 0;  /* no lapic support */
+
        nmi_watchdog = nmi;
        return 1;
 }
index 3dceab5828f1be6431fe3fbc9bd761a98a2f027d..e55fd05da0f521048c03bf68206f336e1cb6f94f 100644 (file)
@@ -566,4 +566,11 @@ struct paravirt_ops paravirt_ops = {
        .irq_enable_sysexit = native_irq_enable_sysexit,
        .iret = native_iret,
 };
-EXPORT_SYMBOL(paravirt_ops);
+
+/*
+ * NOTE: CONFIG_PARAVIRT is experimental and the paravirt_ops
+ * semantics are subject to change. Hence we only do this
+ * internal-only export of this, until it gets sorted out and
+ * all lowlevel CPU ops used by modules are separately exported.
+ */
+EXPORT_SYMBOL_GPL(paravirt_ops);
index 6f6cb7b31d18a6384f7debe36040fd4ae80ff07e..4b31ad70c1ac6699c6710faf415ec6e1c30d488b 100644 (file)
@@ -77,7 +77,7 @@ extern struct resource code_resource;
 extern struct resource data_resource;
 
 /* cpu data as detected by the assembly code in head.S */
-struct cpuinfo_x86 new_cpu_data __initdata = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
+struct cpuinfo_x86 new_cpu_data __cpuinitdata = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
 /* common cpu data for all cpus */
 struct cpuinfo_x86 boot_cpu_data __read_mostly = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
 EXPORT_SYMBOL(boot_cpu_data);
@@ -495,7 +495,7 @@ static void set_mca_bus(int x) { }
 #endif
 
 /* Overridden in paravirt.c if CONFIG_PARAVIRT */
-char * __attribute__((weak)) memory_setup(void)
+char * __init __attribute__((weak)) memory_setup(void)
 {
        return machine_specific_memory_setup();
 }
index aef39be813614f0e2591836a4f1fa7aefb5ee9d3..8c6c8c52b95c0b574b837c279f84647d3b4ba867 100644 (file)
@@ -159,7 +159,7 @@ void __init smp_alloc_memory(void)
  * a given CPU
  */
 
-static void __devinit smp_store_cpu_info(int id)
+static void __cpuinit smp_store_cpu_info(int id)
 {
        struct cpuinfo_x86 *c = cpu_data + id;
 
@@ -227,7 +227,7 @@ static struct {
        atomic_t count_start;
        atomic_t count_stop;
        unsigned long long values[NR_CPUS];
-} tsc __initdata = {
+} tsc __cpuinitdata = {
        .start_flag = ATOMIC_INIT(0),
        .count_start = ATOMIC_INIT(0),
        .count_stop = ATOMIC_INIT(0),
@@ -332,7 +332,7 @@ static void __init synchronize_tsc_bp(void)
                printk("passed.\n");
 }
 
-static void __init synchronize_tsc_ap(void)
+static void __cpuinit synchronize_tsc_ap(void)
 {
        int i;
 
@@ -364,7 +364,7 @@ extern void calibrate_delay(void);
 
 static atomic_t init_deasserted;
 
-static void __devinit smp_callin(void)
+static void __cpuinit smp_callin(void)
 {
        int cpuid, phys_id;
        unsigned long timeout;
@@ -538,7 +538,7 @@ set_cpu_sibling_map(int cpu)
 /*
  * Activate a secondary processor.
  */
-static void __devinit start_secondary(void *unused)
+static void __cpuinit start_secondary(void *unused)
 {
        /*
         * Don't put *anything* before secondary_cpu_init(), SMP
@@ -595,6 +595,12 @@ static void __devinit start_secondary(void *unused)
  */
 void __devinit initialize_secondary(void)
 {
+       /*
+        * switch to the per CPU GDT we already set up
+        * in do_boot_cpu()
+        */
+       cpu_set_gdt(current_thread_info()->cpu);
+
        /*
         * We don't actually need to load the full TSS,
         * basically just the stack pointer and the eip.
@@ -931,7 +937,7 @@ static inline struct task_struct * alloc_idle_task(int cpu)
 #define alloc_idle_task(cpu) fork_idle(cpu)
 #endif
 
-static int __devinit do_boot_cpu(int apicid, int cpu)
+static int __cpuinit do_boot_cpu(int apicid, int cpu)
 /*
  * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
  * (ie clustered apic addressing mode), this is a LOGICAL apic ID.
@@ -972,9 +978,6 @@ static int __devinit do_boot_cpu(int apicid, int cpu)
        /* Stack for startup_32 can be just as for start_secondary onwards */
        stack_start.esp = (void *) idle->thread.esp;
 
-       start_pda = cpu_pda(cpu);
-       cpu_gdt_descr = per_cpu(cpu_gdt_descr, cpu);
-
        irq_ctx_init(cpu);
 
        x86_cpu_to_apicid[cpu] = apicid;
@@ -1432,7 +1435,7 @@ void __cpu_die(unsigned int cpu)
 }
 #endif /* CONFIG_HOTPLUG_CPU */
 
-int __devinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu)
 {
 #ifdef CONFIG_HOTPLUG_CPU
      &n