]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
authorSteve French <sfrench@us.ibm.com>
Sat, 20 Oct 2007 04:26:44 +0000 (04:26 +0000)
committerSteve French <sfrench@us.ibm.com>
Sat, 20 Oct 2007 04:26:44 +0000 (04:26 +0000)
746 files changed:
.gitignore
CREDITS
Documentation/DocBook/Makefile
Documentation/DocBook/mtdnand.tmpl
Documentation/SubmitChecklist
Documentation/SubmittingDrivers
Documentation/arm/Samsung-S3C24XX/DMA.txt
Documentation/cdrom/cdrom-standard.tex
Documentation/device-mapper/dm-uevent.txt [new file with mode: 0644]
Documentation/devices.txt
Documentation/driver-model/devres.txt
Documentation/fb/deferred_io.txt
Documentation/filesystems/9p.txt
Documentation/filesystems/Locking
Documentation/filesystems/ext3.txt
Documentation/filesystems/files.txt
Documentation/filesystems/proc.txt
Documentation/filesystems/sysfs.txt
Documentation/filesystems/vfs.txt
Documentation/i2c/i2c-protocol
Documentation/ia64/err_inject.txt
Documentation/input/atarikbd.txt
Documentation/input/ff.txt
Documentation/input/iforce-protocol.txt
Documentation/input/input-programming.txt
Documentation/isdn/CREDITS
Documentation/isdn/README.concap
Documentation/java.txt
Documentation/kbuild/kconfig-language.txt
Documentation/kbuild/makefiles.txt
Documentation/kernel-docs.txt
Documentation/kernel-parameters.txt
Documentation/m68k/kernel-options.txt
Documentation/mips/AU1xxx_IDE.README
Documentation/mutex-design.txt
Documentation/networking/bcm43xx.txt
Documentation/networking/ip-sysctl.txt
Documentation/networking/rxrpc.txt
Documentation/networking/udplite.txt
Documentation/power/swsusp-and-swap-files.txt
Documentation/powerpc/eeh-pci-error-recovery.txt
Documentation/powerpc/mpc52xx-device-tree-bindings.txt
Documentation/scsi/aic79xx.txt
Documentation/scsi/aic7xxx.txt
Documentation/scsi/arcmsr_spec.txt
Documentation/scsi/ibmmca.txt
Documentation/sharedsubtree.txt
Documentation/sound/alsa/soc/DAI.txt
Documentation/sound/alsa/soc/clocking.txt
Documentation/sound/alsa/soc/codec.txt
Documentation/sound/alsa/soc/dapm.txt
Documentation/sound/alsa/soc/overview.txt
Documentation/sound/alsa/soc/platform.txt
Documentation/sound/alsa/soc/pops_clicks.txt
Documentation/spi/pxa2xx
Documentation/thinkpad-acpi.txt
Documentation/usb/usb-serial.txt
MAINTAINERS
Makefile
arch/alpha/kernel/err_marvel.c
arch/alpha/kernel/err_titan.c
arch/alpha/kernel/osf_sys.c
arch/alpha/kernel/smp.c
arch/alpha/kernel/sys_alcor.c
arch/alpha/kernel/sys_sio.c
arch/alpha/lib/checksum.c
arch/alpha/lib/csum_partial_copy.c
arch/alpha/mm/init.c
arch/alpha/oprofile/op_impl.h
arch/arm/Kconfig
arch/arm/mach-at91/gpio.c
arch/arm/mach-omap1/irq.c
arch/arm/mach-omap2/timer-gp.c
arch/arm/mach-s3c2410/clock.c
arch/arm/mach-s3c2412/clock.c
arch/arm/mach-s3c2443/clock.c
arch/arm/nwfpe/fpopcode.h
arch/arm/plat-omap/dma.c
arch/arm/plat-omap/gpio.c
arch/avr32/Kconfig
arch/blackfin/Kconfig
arch/cris/arch-v10/Kconfig
arch/cris/arch-v10/boot/compressed/misc.c
arch/cris/arch-v10/drivers/pcf8563.c
arch/cris/arch-v10/kernel/debugport.c
arch/cris/arch-v10/kernel/entry.S
arch/cris/arch-v10/kernel/fasttimer.c
arch/cris/arch-v10/kernel/irq.c
arch/cris/arch-v10/kernel/kgdb.c
arch/cris/arch-v10/kernel/process.c
arch/cris/arch-v10/kernel/shadows.c
arch/cris/arch-v10/lib/dram_init.S
arch/cris/arch-v10/lib/string.c
arch/cris/arch-v10/lib/usercopy.c
arch/cris/arch-v32/boot/compressed/misc.c
arch/cris/arch-v32/drivers/axisflashmap.c
arch/cris/arch-v32/drivers/i2c.c
arch/cris/arch-v32/drivers/nandflash.c
arch/cris/arch-v32/drivers/pcf8563.c
arch/cris/arch-v32/kernel/fasttimer.c
arch/cris/arch-v32/kernel/irq.c
arch/cris/arch-v32/kernel/process.c
arch/cris/arch-v32/kernel/signal.c
arch/cris/arch-v32/kernel/smp.c
arch/cris/arch-v32/kernel/time.c
arch/cris/arch-v32/kernel/traps.c
arch/cris/arch-v32/lib/dram_init.S
arch/cris/arch-v32/lib/string.c
arch/cris/arch-v32/lib/usercopy.c
arch/cris/arch-v32/mm/tlb.c
arch/cris/kernel/irq.c
arch/cris/mm/fault.c
arch/cris/mm/init.c
arch/cris/mm/tlb.c
arch/frv/kernel/irq.c
arch/frv/kernel/semaphore.c
arch/frv/kernel/time.c
arch/h8300/Kconfig.debug
arch/h8300/kernel/irq.c
arch/h8300/kernel/time.c
arch/h8300/kernel/traps.c
arch/h8300/platform/h8s/ints.c
arch/h8300/platform/h8s/ints_h8s.c
arch/i386/Kconfig
arch/i386/Makefile
arch/ia64/Kconfig
arch/m32r/kernel/irq.c
arch/m32r/kernel/signal.c
arch/m32r/kernel/smp.c
arch/m32r/kernel/smpboot.c
arch/m32r/kernel/sys_m32r.c
arch/m68k/amiga/pcmcia.c
arch/m68k/ifpsp060/CHANGES
arch/m68k/ifpsp060/MISC
arch/m68k/ifpsp060/README
arch/m68k/ifpsp060/TEST.DOC
arch/m68k/ifpsp060/fplsp.doc
arch/m68k/ifpsp060/fpsp.doc
arch/m68k/ifpsp060/fskeleton.S
arch/m68k/ifpsp060/ilsp.doc
arch/m68k/ifpsp060/iskeleton.S
arch/m68k/ifpsp060/isp.doc
arch/m68k/ifpsp060/os.S
arch/m68k/ifpsp060/src/fplsp.S
arch/m68k/ifpsp060/src/fpsp.S
arch/m68k/ifpsp060/src/ftest.S
arch/m68k/ifpsp060/src/ilsp.S
arch/m68k/ifpsp060/src/isp.S
arch/m68k/ifpsp060/src/itest.S
arch/m68k/ifpsp060/src/pfpsp.S
arch/m68k/mac/config.c
arch/m68k/mac/iop.c
arch/m68k/mac/oss.c
arch/m68k/mac/via.c
arch/m68k/math-emu/fp_log.c
arch/m68k/q40/q40ints.c
arch/m68k/sun3/mmu_emu.c
arch/m68k/tools/amiga/dmesg.c
arch/m68knommu/platform/5307/pit.c
arch/mips/Kconfig
arch/mips/kernel/module.c
arch/mips/pci/pci-excite.c
arch/mips/sni/pcimt.c
arch/powerpc/kernel/cpu_setup_6xx.S
arch/powerpc/kernel/irq.c
arch/powerpc/kernel/l2cr_6xx.S
arch/powerpc/platforms/Kconfig
arch/powerpc/platforms/cell/spufs/file.c
arch/powerpc/platforms/celleb/scc_uhc.c
arch/sh64/kernel/pci_sh5.c
arch/um/Kconfig
arch/um/drivers/line.c
arch/um/drivers/null.c
arch/um/drivers/stderr_console.c
arch/um/kernel/gmon_syms.c
arch/um/kernel/irq.c
arch/um/kernel/ptrace.c
arch/um/sys-i386/bug.c
arch/um/sys-i386/tls.c
arch/um/sys-x86_64/bug.c
arch/v850/kernel/me2.c
arch/v850/kernel/rte_mb_a_pci.c
arch/x86/boot/compressed/misc_32.c
arch/x86/boot/compressed/misc_64.c
arch/x86/ia32/ia32_binfmt.c
arch/x86/kernel/Makefile_32
arch/x86/kernel/Makefile_64
arch/x86/kernel/acpi/Makefile_32
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/acpi/cstate.c
arch/x86/kernel/acpi/earlyquirk_32.c [deleted file]
arch/x86/kernel/acpi/processor.c
arch/x86/kernel/alternative.c
arch/x86/kernel/apic_32.c
arch/x86/kernel/apm_32.c
arch/x86/kernel/cpu/amd.c
arch/x86/kernel/cpu/centaur.c
arch/x86/kernel/cpu/common.c
arch/x86/kernel/cpu/cpufreq/Kconfig_32 [moved from arch/x86/kernel/cpu/cpufreq/Kconfig with 100% similarity]
arch/x86/kernel/cpu/cpufreq/Kconfig_64 [moved from arch/x86/kernel/cpufreq/Kconfig with 97% similarity]
arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
arch/x86/kernel/cpu/cpufreq/cpufreq-nforce2.c
arch/x86/kernel/cpu/cpufreq/e_powersaver.c
arch/x86/kernel/cpu/cpufreq/elanfreq.c
arch/x86/kernel/cpu/cpufreq/gx-suspmod.c
arch/x86/kernel/cpu/cpufreq/longhaul.c
arch/x86/kernel/cpu/cpufreq/longrun.c
arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
arch/x86/kernel/cpu/cpufreq/powernow-k6.c
arch/x86/kernel/cpu/cpufreq/powernow-k7.c
arch/x86/kernel/cpu/cpufreq/powernow-k8.c
arch/x86/kernel/cpu/cpufreq/powernow-k8.h
arch/x86/kernel/cpu/cpufreq/sc520_freq.c
arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c
arch/x86/kernel/cpu/cpufreq/speedstep-lib.c
arch/x86/kernel/cpu/cyrix.c
arch/x86/kernel/cpu/intel_cacheinfo.c
arch/x86/kernel/cpu/mtrr/cyrix.c
arch/x86/kernel/cpu/mtrr/generic.c
arch/x86/kernel/cpu/mtrr/main.c
arch/x86/kernel/cpu/perfctr-watchdog.c
arch/x86/kernel/cpu/proc.c
arch/x86/kernel/cpuid.c
arch/x86/kernel/e820_32.c
arch/x86/kernel/early-quirks.c [moved from arch/x86/kernel/early-quirks_64.c with 88% similarity]
arch/x86/kernel/genapic_64.c
arch/x86/kernel/genapic_flat_64.c
arch/x86/kernel/head64.c
arch/x86/kernel/hpet.c
arch/x86/kernel/i8253.c
arch/x86/kernel/i8259_32.c
arch/x86/kernel/init_task.c [moved from arch/x86/kernel/init_task_32.c with 79% similarity]
arch/x86/kernel/init_task_64.c [deleted file]
arch/x86/kernel/io_apic_32.c
arch/x86/kernel/io_apic_64.c
arch/x86/kernel/mce_64.c
arch/x86/kernel/mce_amd_64.c
arch/x86/kernel/microcode.c
arch/x86/kernel/mpparse_32.c
arch/x86/kernel/mpparse_64.c
arch/x86/kernel/msr.c
arch/x86/kernel/pci-dma_64.c
arch/x86/kernel/process_32.c
arch/x86/kernel/ptrace_32.c
arch/x86/kernel/quirks.c
arch/x86/kernel/reboot_64.c
arch/x86/kernel/reboot_fixups_32.c
arch/x86/kernel/setup64.c
arch/x86/kernel/setup_32.c
arch/x86/kernel/setup_64.c
arch/x86/kernel/signal_32.c
arch/x86/kernel/signal_64.c
arch/x86/kernel/smp_32.c
arch/x86/kernel/smp_64.c
arch/x86/kernel/smpboot_32.c
arch/x86/kernel/smpboot_64.c
arch/x86/kernel/summit_32.c
arch/x86/kernel/suspend_64.c
arch/x86/kernel/traps_32.c
arch/x86/kernel/traps_64.c
arch/x86/kernel/tsc_32.c
arch/x86/kernel/tsc_64.c
arch/x86/kernel/vsyscall_64.c
arch/x86/lib/delay_32.c
arch/x86/lib/delay_64.c
arch/x86/mach-default/setup.c
arch/x86/mach-generic/default.c
arch/x86/mach-generic/probe.c
arch/x86/mach-voyager/voyager_smp.c
arch/x86/mach-voyager/voyager_thread.c
arch/x86/mm/boot_ioremap_32.c
arch/x86/mm/discontig_32.c
arch/x86/mm/fault_32.c
arch/x86/mm/fault_64.c
arch/x86/mm/numa_64.c
arch/x86/mm/srat_64.c
arch/x86/oprofile/backtrace.c
arch/x86/oprofile/op_x86_model.h
arch/x86/pci/irq.c
arch/x86_64/.gitignore [new file with mode: 0644]
arch/x86_64/Kconfig
arch/x86_64/Makefile
arch/xtensa/platform-iss/network.c
block/elevator.c
crypto/api.c
crypto/fcrypt.c
drivers/acpi/Kconfig
drivers/acpi/processor_core.c
drivers/ata/ahci.c
drivers/ata/libata-core.c
drivers/ata/libata-sff.c
drivers/ata/pata_cmd64x.c
drivers/ata/pata_cs5530.c
drivers/ata/pata_cs5535.c
drivers/ata/pata_cs5536.c
drivers/ata/pata_it821x.c
drivers/ata/pata_mpiix.c
drivers/ata/pata_ns87410.c
drivers/ata/pata_oldpiix.c
drivers/ata/pata_radisys.c
drivers/ata/pata_sc1200.c
drivers/ata/pata_sil680.c
drivers/ata/pata_via.c
drivers/ata/sata_sis.c
drivers/atm/firestream.c
drivers/block/Kconfig
drivers/block/loop.c
drivers/block/nbd.c
drivers/block/rd.c
drivers/char/cyclades.c
drivers/char/drm/drm_hashtab.c
drivers/char/drm/drm_hashtab.h
drivers/char/drm/drm_mm.c
drivers/char/drm/drm_pci.c
drivers/char/drm/drm_sarea.h
drivers/char/drm/drm_sman.c
drivers/char/drm/drm_sman.h
drivers/char/drm/r128_drv.h
drivers/char/drm/radeon_irq.c
drivers/char/drm/radeon_state.c
drivers/char/drm/sis_mm.c
drivers/char/drm/via_mm.c
drivers/char/drm/via_verifier.h
drivers/char/esp.c
drivers/char/hw_random/omap-rng.c
drivers/char/i8k.c
drivers/char/n_tty.c
drivers/char/rocket.c
drivers/char/sonypi.c
drivers/char/tty_io.c
drivers/char/tty_ioctl.c
drivers/firewire/fw-transaction.c
drivers/hid/usbhid/hid-ff.c
drivers/hwmon/coretemp.c
drivers/hwmon/gl520sm.c
drivers/hwmon/hwmon-vid.c
drivers/hwmon/sis5595.c
drivers/hwmon/via686a.c
drivers/i2c/algos/i2c-algo-bit.c
drivers/i2c/algos/i2c-algo-pca.c
drivers/i2c/algos/i2c-algo-pcf.c
drivers/i2c/busses/Kconfig
drivers/i2c/busses/i2c-elektor.c
drivers/i2c/busses/i2c-hydra.c
drivers/i2c/busses/i2c-ibm_iic.c
drivers/i2c/busses/i2c-omap.c
drivers/i2c/busses/i2c-parport-light.c
drivers/i2c/busses/i2c-parport.c
drivers/i2c/busses/i2c-via.c
drivers/i2c/busses/i2c-viapro.c
drivers/i2c/i2c-core.c
drivers/ide/Kconfig
drivers/ide/arm/bast-ide.c
drivers/ide/arm/icside.c
drivers/ide/arm/ide_arm.c
drivers/ide/arm/rapide.c
drivers/ide/cris/ide-cris.c
drivers/ide/h8300/ide-h8300.c
drivers/ide/ide-acpi.c
drivers/ide/ide-cd.c
drivers/ide/ide-disk.c
drivers/ide/ide-dma.c
drivers/ide/ide-io.c
drivers/ide/ide-iops.c
drivers/ide/ide-pnp.c
drivers/ide/ide-probe.c
drivers/ide/ide-proc.c
drivers/ide/ide-tape.c
drivers/ide/ide-taskfile.c
drivers/ide/ide.c
drivers/ide/legacy/ali14xx.c
drivers/ide/legacy/buddha.c
drivers/ide/legacy/dtc2278.c
drivers/ide/legacy/falconide.c
drivers/ide/legacy/gayle.c
drivers/ide/legacy/ht6560b.c
drivers/ide/legacy/ide-cs.c
drivers/ide/legacy/ide_platform.c
drivers/ide/legacy/macide.c
drivers/ide/legacy/q40ide.c
drivers/ide/legacy/qd65xx.c
drivers/ide/legacy/umc8672.c
drivers/ide/mips/au1xxx-ide.c
drivers/ide/mips/swarm.c
drivers/ide/pci/aec62xx.c
drivers/ide/pci/alim15x3.c
drivers/ide/pci/amd74xx.c
drivers/ide/pci/atiixp.c
drivers/ide/pci/cmd640.c
drivers/ide/pci/cmd64x.c
drivers/ide/pci/cs5520.c
drivers/ide/pci/cs5530.c
drivers/ide/pci/cs5535.c
drivers/ide/pci/cy82c693.c
drivers/ide/pci/delkin_cb.c
drivers/ide/pci/generic.c
drivers/ide/pci/hpt34x.c
drivers/ide/pci/hpt366.c
drivers/ide/pci/it8213.c
drivers/ide/pci/it821x.c
drivers/ide/pci/jmicron.c
drivers/ide/pci/ns87415.c
drivers/ide/pci/opti621.c
drivers/ide/pci/pdc202xx_new.c
drivers/ide/pci/pdc202xx_old.c
drivers/ide/pci/piix.c
drivers/ide/pci/rz1000.c
drivers/ide/pci/sc1200.c
drivers/ide/pci/scc_pata.c
drivers/ide/pci/serverworks.c
drivers/ide/pci/sgiioc4.c
drivers/ide/pci/siimage.c
drivers/ide/pci/sis5513.c
drivers/ide/pci/sl82c105.c
drivers/ide/pci/slc90e66.c
drivers/ide/pci/tc86c001.c
drivers/ide/pci/triflex.c
drivers/ide/pci/trm290.c
drivers/ide/pci/via82cxxx.c
drivers/ide/ppc/mpc8xx.c
drivers/ide/ppc/pmac.c
drivers/ide/setup-pci.c
drivers/input/fixp-arith.h
drivers/input/gameport/gameport.c
drivers/input/joystick/db9.c
drivers/input/joystick/iforce/Makefile
drivers/input/keyboard/omap-keypad.c
drivers/input/misc/Kconfig
drivers/input/mouse/psmouse-base.c
drivers/input/mouse/vsxxxaa.c
drivers/isdn/act2000/act2000_isa.c
drivers/isdn/hardware/eicon/capifunc.c
drivers/isdn/hisax/amd7930_fn.c
drivers/isdn/hisax/enternow_pci.c
drivers/isdn/hisax/hfc_pci.c
drivers/isdn/hisax/isdnhdlc.c
drivers/isdn/hisax/isdnhdlc.h
drivers/isdn/hisax/jade.c
drivers/isdn/pcbit/capi.c
drivers/leds/leds-s3c24xx.c
drivers/macintosh/mediabay.c
drivers/macintosh/via-pmu.c
drivers/md/Kconfig
drivers/md/Makefile
drivers/md/dm-bio-list.h
drivers/md/dm-crypt.c
drivers/md/dm-delay.c
drivers/md/dm-emc.c
drivers/md/dm-hw-handler.c
drivers/md/dm-hw-handler.h
drivers/md/dm-ioctl.c
drivers/md/dm-log.c
drivers/md/dm-log.h
drivers/md/dm-mpath-hp-sw.c [new file with mode: 0644]
drivers/md/dm-mpath-rdac.c
drivers/md/dm-mpath.c
drivers/md/dm-path-selector.c
drivers/md/dm-raid1.c
drivers/md/dm-snap.c
drivers/md/dm-stripe.c
drivers/md/dm-table.c
drivers/md/dm-target.c
drivers/md/dm-uevent.c [new file with mode: 0644]
drivers/md/dm-uevent.h [new file with mode: 0644]
drivers/md/dm.c
drivers/md/kcopyd.c
drivers/md/raid1.c
drivers/media/common/saa7146_hlp.c
drivers/media/dvb/bt8xx/bt878.c
drivers/media/dvb/cinergyT2/cinergyT2.c
drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
drivers/media/video/bt8xx/bttv-cards.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/meye.c
drivers/media/video/meye.h
drivers/media/video/saa5246a.c
drivers/media/video/saa5249.c
drivers/media/video/usbvideo/vicam.c
drivers/media/video/v4l2-common.c
drivers/message/i2o/README
drivers/message/i2o/exec-osm.c
drivers/message/i2o/i2o_config.c
drivers/message/i2o/i2o_proc.c
drivers/message/i2o/iop.c
drivers/message/i2o/pci.c
drivers/mfd/Kconfig
drivers/misc/Kconfig
drivers/misc/ibmasm/remote.c
drivers/misc/sony-laptop.c
drivers/mtd/maps/Kconfig
drivers/net/8139too.c
drivers/net/Kconfig
drivers/net/amd8111e.c
drivers/net/ariadne.c
drivers/net/ariadne.h
drivers/net/au1000_eth.c
drivers/net/bonding/bond_sysfs.c
drivers/net/dm9000.c
drivers/net/e100.c
drivers/net/e1000/e1000_main.c
drivers/net/fealnx.c
drivers/net/hamradio/6pack.c
drivers/net/hamradio/Kconfig
drivers/net/irda/actisys-sir.c
drivers/net/irda/actisys.c
drivers/net/irda/donauboe.c
drivers/net/irda/girbil-sir.c
drivers/net/irda/girbil.c
drivers/net/irda/irport.h
drivers/net/irda/irtty-sir.c
drivers/net/irda/nsc-ircc.c
drivers/net/irda/nsc-ircc.h
drivers/net/irda/tekram-sir.c
drivers/net/irda/tekram.c
drivers/net/irda/w83977af_ir.h
drivers/net/natsemi.c
drivers/net/phy/mdio-bitbang.c
drivers/net/smc911x.c
drivers/net/spider_net.c
drivers/net/tc35815.c
drivers/net/tsi108_eth.c
drivers/net/tulip/Kconfig
drivers/net/tulip/winbond-840.c
drivers/net/usb/Kconfig
drivers/net/via-velocity.c
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43legacy/main.c
drivers/net/wireless/bcm43xx/bcm43xx_xmit.h
drivers/net/wireless/ipw2100.c
drivers/net/wireless/ipw2100.h
drivers/net/wireless/ipw2200.c
drivers/net/wireless/iwlwifi/iwl-3945-rs.c
drivers/net/wireless/iwlwifi/iwl-3945.c
drivers/net/wireless/iwlwifi/iwl-4965-rs.c
drivers/net/wireless/iwlwifi/iwl-4965.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/iwlwifi/iwl4965-base.c
drivers/net/wireless/iwlwifi/iwlwifi.h
drivers/net/wireless/netwave_cs.c
drivers/net/wireless/p54common.c
drivers/net/wireless/rt2x00/rt2x00dev.c
drivers/net/wireless/rt2x00/rt73usb.c
drivers/net/wireless/rtl8187_dev.c
drivers/net/wireless/zd1201.c
drivers/net/wireless/zd1211rw/zd_usb.c
drivers/rtc/Kconfig
drivers/s390/block/dasd_3990_erp.c
drivers/s390/char/sclp_cpi.c
drivers/s390/cio/cmf.c
drivers/s390/net/ctcmain.c
drivers/s390/net/qeth_main.c
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aha152x.c
drivers/scsi/aic7xxx/cam.h
drivers/scsi/dc395x.c
drivers/scsi/megaraid/megaraid_mbox.c
drivers/scsi/qla4xxx/ql4_init.c
drivers/scsi/sd.c
drivers/scsi/sun3_NCR5380.c
drivers/scsi/sym53c8xx_2/sym_fw2.h
drivers/scsi/wd33c93.h
drivers/serial/Kconfig
drivers/serial/s3c2410.c
drivers/spi/mpc52xx_psc_spi.c
drivers/usb/gadget/lh7a40x_udc.c
drivers/usb/host/ehci-hub.c
drivers/usb/host/sl811-hcd.c
drivers/usb/image/Kconfig
drivers/usb/misc/cytherm.c
drivers/usb/misc/emi26.c
drivers/usb/misc/emi62.c
drivers/usb/serial/ChangeLog.history
drivers/usb/serial/Kconfig
drivers/usb/serial/ftdi_sio.c
drivers/usb/serial/ftdi_sio.h
drivers/usb/serial/ipaq.c
drivers/usb/storage/isd200.c
drivers/usb/storage/unusual_devs.h
drivers/video/Kconfig
drivers/video/amifb.c
drivers/video/aty/atyfb_base.c
drivers/video/console/Kconfig
drivers/video/geode/video_gx.c
drivers/video/intelfb/intelfbdrv.c
drivers/video/intelfb/intelfbhw.c
drivers/video/omap/Kconfig
drivers/video/s3c2410fb.c
drivers/video/vermilion/vermilion.c
drivers/video/vermilion/vermilion.h
drivers/watchdog/i6300esb.c
drivers/watchdog/iTCO_vendor_support.c
drivers/watchdog/w83697hf_wdt.c
drivers/zorro/zorro.ids
fs/binfmt_em86.c
fs/binfmt_misc.c
fs/binfmt_script.c
fs/isofs/inode.c
fs/jfs/jfs_dtree.c
fs/nfs/delegation.c
fs/nfs/dir.c
fs/nfs/file.c
fs/nfs/inode.c
fs/nfs/nfs4_fs.h
fs/nfs/nfs4proc.c
fs/nfs/nfs4state.c
fs/nfs/nfsroot.c
fs/nfs/unlink.c
fs/nfs/write.c
fs/ntfs/ChangeLog
fs/ntfs/sysctl.c
fs/ntfs/sysctl.h
fs/ocfs2/dcache.c
fs/reiserfs/super.c
fs/super.c
fs/sysfs/file.c
include/asm-alpha/ide.h
include/asm-arm/arch-aaec2000/aaec2000.h
include/asm-arm/dma-mapping.h
include/asm-arm/ide.h
include/asm-blackfin/ide.h
include/asm-blackfin/system.h
include/asm-cris/arch-v32/ide.h
include/asm-h8300/system.h
include/asm-ia64/ide.h
include/asm-m32r/ide.h
include/asm-m68k/ide.h
include/asm-m68knommu/system.h
include/asm-mips/mach-generic/ide.h
include/asm-mips/pci/bridge.h
include/asm-parisc/ide.h
include/asm-powerpc/ide.h
include/asm-powerpc/io.h
include/asm-powerpc/paca.h
include/asm-sh/se7751.h
include/asm-sh/systemh7751.h
include/asm-sh64/ide.h
include/asm-sh64/system.h
include/asm-sparc/ide.h
include/asm-sparc64/ide.h
include/asm-v850/system.h
include/asm-x86/acpi_32.h
include/asm-x86/compat.h
include/asm-x86/desc_64.h
include/asm-x86/geode.h
include/asm-x86/hpet.h
include/asm-x86/ide.h
include/asm-x86/io_apic_64.h
include/asm-x86/ipi.h
include/asm-x86/irq_32.h
include/asm-x86/msr-index.h
include/asm-x86/processor_32.h
include/asm-x86/processor_64.h
include/asm-x86/proto.h
include/asm-x86/ptrace_32.h
include/asm-x86/ptrace_64.h
include/asm-x86/smp_32.h
include/asm-x86/smp_64.h
include/asm-x86/system_32.h
include/asm-x86/topology_32.h
include/asm-x86/topology_64.h
include/linux/cdrom.h
include/linux/crypto.h
include/linux/device-mapper.h
include/linux/dm-ioctl.h
include/linux/fs.h
include/linux/ide.h
include/linux/ipmi_smi.h
include/linux/nfs_fs.h
include/linux/prefetch.h
include/linux/security.h
include/net/irda/irttp.h
init/main.c
kernel/Makefile
kernel/hrtimer.c
kernel/panic.c
kernel/power/snapshot.c
kernel/sched.c
kernel/taskstats.c
lib/argv_split.c
lib/kernel_lock.c
lib/kobject_uevent.c
mm/Kconfig
mm/hugetlb.c
mm/memory.c
mm/memory_hotplug.c
mm/mempool.c
mm/migrate.c
mm/nommu.c
mm/page-writeback.c
mm/page_alloc.c
mm/prio_tree.c
mm/slab.c
mm/swap.c
mm/vmalloc.c
mm/vmscan.c
net/9p/Kconfig
net/ax25/ax25_ds_in.c
net/ax25/ax25_ds_subr.c
net/bluetooth/bnep/core.c
net/bluetooth/bnep/netdev.c
net/bridge/netfilter/ebtables.c
net/core/pktgen.c
net/ieee80211/ieee80211_wx.c
net/ipv4/Kconfig
net/irda/discovery.c
net/irda/iriap.c
net/irda/iriap_event.c
net/irda/irias_object.c
net/irda/irlan/irlan_client.c
net/irda/irlan/irlan_client_event.c
net/irda/irlan/irlan_common.c
net/irda/irlan/irlan_eth.c
net/irda/irlan/irlan_event.c
net/irda/irlan/irlan_filter.c
net/irda/irlan/irlan_provider.c
net/irda/irlan/irlan_provider_event.c
net/irda/irlap_event.c
net/irda/irlap_frame.c
net/irda/irlmp.c
net/irda/irlmp_event.c
net/irda/irlmp_frame.c
net/irda/irmod.c
net/irda/irqueue.c
net/irda/irsysctl.c
net/irda/irttp.c
net/irda/timer.c
net/irda/wrapper.c
net/iucv/iucv.c
net/netfilter/xt_CONNMARK.c
net/netfilter/xt_connmark.c
net/netfilter/xt_limit.c
net/sched/em_meta.c
scripts/Kbuild.include
scripts/basic/docproc.c
scripts/kconfig/Makefile
scripts/kconfig/menu.c
scripts/mod/modpost.c
scripts/package/builddeb
sound/core/seq/seq_midi_emul.c
sound/drivers/opl3/opl3_midi.c
sound/isa/es18xx.c
sound/mips/au1x00.c
sound/pci/au88x0/au88x0.c
sound/soc/soc-core.c
sound/soc/soc-dapm.c
sound/synth/emux/emux_synth.c

index 22fb8fa9bc3d283c829a7d7ce6da13a6db59262e..8d14531846b95bfa3564b58ccfb7913a034323b8 100644 (file)
@@ -12,6 +12,7 @@
 *.s
 *.ko
 *.so
+*.so.dbg
 *.mod.c
 *.i
 *.lst
diff --git a/CREDITS b/CREDITS
index 99566b1a6eebda3aea4c73f487d82e39072ffce8..ee909f2cc49e54f0799a4739d24c4cb9151ae453 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -959,7 +959,7 @@ S: 2037 Walnut #6
 S: Boulder, Colorado 80302
 S: USA
 
-N: Heiko Eissfeldt
+N: Heiko Eißfeldt
 E: heiko@colossus.escape.de heiko@unifix.de
 D: verify_area stuff, generic SCSI fixes
 D: SCSI Programming HOWTO
@@ -1988,8 +1988,8 @@ N: Volker Lendecke
 E: vl@kki.org
 D: Kernel smbfs (to mount WfW, NT and OS/2 network drives.)
 D: NCP filesystem support (to mount NetWare volumes)
-S: Von Ossietzky Str. 12
-S: 37085 Goettingen
+S: Von-Ossietzky-Str. 12
+S: 37085 Göttingen
 S: Germany
 
 N: Kevin Lentin
@@ -2431,11 +2431,11 @@ S: 12725 SW Millikan Way, Suite 400
 S: Beaverton, Oregon 97005
 S: USA
 
-N: Eberhard Moenkeberg
+N: Eberhard Mönkeberg
 E: emoenke@gwdg.de
 D: CDROM driver "sbpcd" (Matsushita/Panasonic/Soundblaster)
-S: Ruhstrathoehe 2 b.
-S: D-37085 Goettingen
+S: Ruhstrathöhe 2 b.
+S: D-37085 Göttingen
 S: Germany
 
 N: Thomas Molina
index 1a7f53068ec2a01f0881be61c22d707b40381a67..054a7ecf64c6257551db24c986671f06a7e3d772 100644 (file)
@@ -165,7 +165,7 @@ quiet_cmd_db2man = MAN     $@
        @touch $@
 
 ###
-# Rules to generate postscripts and PNG imgages from .fig format files
+# Rules to generate postscripts and PNG images from .fig format files
 quiet_cmd_fig2eps = FIG2EPS $@
       cmd_fig2eps = fig2dev -Leps $< $@
 
index 6fbc41d98c1eb56a0779499ed6d9dd8ce45235f6..957cf5c26831a31df5b8adca8ecc3eb2feabad67 100644 (file)
@@ -282,7 +282,7 @@ int __init board_init (void)
                goto out;
        }
 
-       /* map physical adress */
+       /* map physical address */
        baseaddr = (unsigned long)ioremap(CHIP_PHYSICAL_ADDRESS, 1024);
        if(!baseaddr){
                printk("Ioremap to access NAND chip failed\n");
@@ -306,7 +306,7 @@ int __init board_init (void)
        this->dev_ready = board_dev_ready;
        this->eccmode = NAND_ECC_SOFT;
 
-       /* Scan to find existance of the device */
+       /* Scan to find existence of the device */
        if (nand_scan (board_mtd, 1)) {
                err = -ENXIO;
                goto out_ior;
@@ -340,7 +340,7 @@ static void __exit board_cleanup (void)
        /* Release resources, unregister device */
        nand_release (board_mtd);
 
-       /* unmap physical adress */
+       /* unmap physical address */
        iounmap((void *)baseaddr);
        
        /* Free the MTD device structure */
index 19e7f65c269f21616347effd9035caeee4d2cb60..34e06d2f194fe58f082743a9407e670c442b9d85 100644 (file)
@@ -67,7 +67,7 @@ kernel patches.
 20: Check that it all passes `make headers_check'.
 
 21: Has been checked with injection of at least slab and page-allocation
-    fauilures.  See Documentation/fault-injection/.
+    failures.  See Documentation/fault-injection/.
 
     If the new code is substantial, addition of subsystem-specific fault
     injection might be appropriate.
index d7e26427e426929a35b339c35799c476c8f3573b..24f2eb40cae5e00491204e11fe8db8afd16b4aef 100644 (file)
@@ -36,8 +36,7 @@ Linux 2.4:
        If the code area has a general maintainer then please submit it to
        the maintainer listed in MAINTAINERS in the kernel file. If the
        maintainer does not respond or you cannot find the appropriate
-       maintainer then please contact Marcelo Tosatti
-       <marcelo.tosatti@cyclades.com>.
+       maintainer then please contact Willy Tarreau <w@1wt.eu>.
 
 Linux 2.6:
        The same rules apply as 2.4 except that you should follow linux-kernel
index 37f4edcc5d871570dd363365d6ffcdc21d8cd750..3ed82383efea95c2293e7876c8e765cf1df42e13 100644 (file)
@@ -5,7 +5,7 @@ Introduction
 ------------
 
    The kernel provides an interface to manage DMA transfers
-   using the DMA channels in the cpu, so that the central
+   using the DMA channels in the CPU, so that the central
    duty of managing channel mappings, and programming the
    channel generators is in one place.
 
@@ -17,24 +17,24 @@ DMA Channel Ordering
    channels to all sources, which means that some devices
    have a restricted number of channels that can be used.
 
-   To allow flexibilty for each cpu type and board, the
-   dma code can be given an dma ordering structure which
+   To allow flexibility for each CPU type and board, the
+   DMA code can be given a DMA ordering structure which
    allows the order of channel search to be specified, as
    well as allowing the prohibition of certain claims.
 
    struct s3c24xx_dma_order has a list of channels, and
-   each channel within has a slot for a list of dma
-   channel numbers. The slots are searched in order, for
-   the presence of a dma channel number with DMA_CH_VALID
-   orred in.
+   each channel within has a slot for a list of DMA
+   channel numbers. The slots are searched in order for
+   the presence of a DMA channel number with DMA_CH_VALID
+   or-ed in.
 
    If the order has the flag DMA_CH_NEVER set, then after
    checking the channel list, the system will return no
    found channel, thus denying the request.
 
    A board support file can call s3c24xx_dma_order_set()
-   to register an complete ordering set. The routine will
-   copy the data, so the original can be discared with
+   to register a complete ordering set. The routine will
+   copy the data, so the original can be discarded with
    __initdata.
 
 
index 92f94e59758229cb395a8acd28ebf8f3eb59b27f..c713aeb020c40f6bfba883031d87e83e9d783b09 100644 (file)
@@ -1009,7 +1009,7 @@ taken over the torch in maintaining \cdromc\ and integrating much
 \cdrom-related code in the 2.1-kernel.  Thanks to Scott Snyder and
 Gerd Knorr, who were the first to implement this interface for SCSI
 and IDE-CD drivers and added many ideas for extension of the data
-structures relative to kernel~2.0.  Further thanks to Heiko Eissfeldt,
+structures relative to kernel~2.0.  Further thanks to Heiko Ei{\sz}feldt,
 Thomas Quinot, Jon Tombs, Ken Pizzini, Eberhard M\"onkeberg and Andrew
 Kroll, the \linux\ \cdrom\ device driver developers who were kind
 enough to give suggestions and criticisms during the writing. Finally
diff --git a/Documentation/device-mapper/dm-uevent.txt b/Documentation/device-mapper/dm-uevent.txt
new file mode 100644 (file)
index 0000000..07edbd8
--- /dev/null
@@ -0,0 +1,97 @@
+The device-mapper uevent code adds the capability to device-mapper to create
+and send kobject uevents (uevents).  Previously device-mapper events were only
+available through the ioctl interface.  The advantage of the uevents interface
+is the event contains environment attributes providing increased context for
+the event avoiding the need to query the state of the device-mapper device after
+the event is received.
+
+There are two functions currently for device-mapper events.  The first function
+listed creates the event and the second function sends the event(s).
+
+void dm_path_uevent(enum dm_uevent_type event_type, struct dm_target *ti,
+                    const char *path, unsigned nr_valid_paths)
+
+void dm_send_uevents(struct list_head *events, struct kobject *kobj)
+
+
+The variables added to the uevent environment are:
+
+Variable Name: DM_TARGET
+Uevent Action(s): KOBJ_CHANGE
+Type: string
+Description:
+Value: Name of device-mapper target that generated the event.
+
+Variable Name: DM_ACTION
+Uevent Action(s): KOBJ_CHANGE
+Type: string
+Description:
+Value: Device-mapper specific action that caused the uevent action.
+       PATH_FAILED - A path has failed.
+       PATH_REINSTATED - A path has been reinstated.
+
+Variable Name: DM_SEQNUM
+Uevent Action(s): KOBJ_CHANGE
+Type: unsigned integer
+Description: A sequence number for this specific device-mapper device.
+Value: Valid unsigned integer range.
+
+Variable Name: DM_PATH
+Uevent Action(s): KOBJ_CHANGE
+Type: string
+Description: Major and minor number of the path device pertaining to this
+event.
+Value: Path name in the form of "Major:Minor"
+
+Variable Name: DM_NR_VALID_PATHS
+Uevent Action(s): KOBJ_CHANGE
+Type: unsigned integer
+Description:
+Value: Valid unsigned integer range.
+
+Variable Name: DM_NAME
+Uevent Action(s): KOBJ_CHANGE
+Type: string
+Description: Name of the device-mapper device.
+Value: Name
+
+Variable Name: DM_UUID
+Uevent Action(s): KOBJ_CHANGE
+Type: string
+Description: UUID of the device-mapper device.
+Value: UUID. (Empty string if there isn't one.)
+
+An example of the uevents generated as captured by udevmonitor is shown
+below.
+
+1.) Path failure.
+UEVENT[1192521009.711215] change@/block/dm-3
+ACTION=change
+DEVPATH=/block/dm-3
+SUBSYSTEM=block
+DM_TARGET=multipath
+DM_ACTION=PATH_FAILED
+DM_SEQNUM=1
+DM_PATH=8:32
+DM_NR_VALID_PATHS=0
+DM_NAME=mpath2
+DM_UUID=mpath-35333333000002328
+MINOR=3
+MAJOR=253
+SEQNUM=1130
+
+2.) Path reinstate.
+UEVENT[1192521132.989927] change@/block/dm-3
+ACTION=change
+DEVPATH=/block/dm-3
+SUBSYSTEM=block
+DM_TARGET=multipath
+DM_ACTION=PATH_REINSTATED
+DM_SEQNUM=2
+DM_PATH=8:32
+DM_NR_VALID_PATHS=1
+DM_NAME=mpath2
+DM_UUID=mpath-35333333000002328
+MINOR=3
+MAJOR=253
+SEQNUM=1131
index 6c46730c631a6952fc34beb4302011463d754011..e6244cde26e9406527dfcaa9aae9edf9e17c6161 100644 (file)
@@ -2188,7 +2188,7 @@ Your cooperation is appreciated.
 
 136-143 char   Unix98 PTY slaves
                  0 = /dev/pts/0        First Unix98 pseudo-TTY
-                 1 = /dev/pts/1        Second Unix98 pesudo-TTY
+                 1 = /dev/pts/1        Second Unix98 pseudo-TTY
                    ...
 
                These device nodes are automatically generated with
index 8569072fa38725b942dea4d9c8a53e8d692f2397..387b8a720f4a6fdc3bb1cd01a4aff8b7ac6cd263 100644 (file)
@@ -32,7 +32,7 @@ braindamaged document, if it's finally working, well, it's working.
 
 For one reason or another, low level drivers don't receive as much
 attention or testing as core code, and bugs on driver detach or
-initilaization failure doesn't happen often enough to be noticeable.
+initialization failure don't happen often enough to be noticeable.
 Init failure path is worse because it's much less travelled while
 needs to handle multiple entry points.
 
@@ -160,7 +160,7 @@ resources on failure.  For example,
   devres_release_group(dev, NULL);
   return err_code;
 
-As resource acquision failure usually means probe failure, constructs
+As resource acquisition failure usually means probe failure, constructs
 like above are usually useful in midlayer driver (e.g. libata core
 layer) where interface function shouldn't have side effect on failure.
 For LLDs, just returning error code suffices in most cases.
index 73cf9fb7cf60aa61a895c2d030b127673b45e526..63883a892120e125be75db301e1c49322c1c7a71 100644 (file)
@@ -3,7 +3,7 @@ Deferred IO
 
 Deferred IO is a way to delay and repurpose IO. It uses host memory as a
 buffer and the MMU pagefault as a pretrigger for when to perform the device
-IO. The following example may be a useful explaination of how one such setup
+IO. The following example may be a useful explanation of how one such setup
 works:
 
 - userspace app like Xfbdev mmaps framebuffer
@@ -28,7 +28,7 @@ a relatively more expensive operation.
 
 For some types of nonvolatile high latency displays, the desired image is
 the final image rather than the intermediate stages which is why it's okay
-to not update for each write that is occuring.
+to not update for each write that is occurring.
 
 It may be the case that this is useful in other scenarios as well. Paul Mundt
 has mentioned a case where it is beneficial to use the page count to decide
index d6fd6c6e424411a37ed26af88b280cd7fac07c91..b90f537af35cd13ff135b0900de96c1a95d0b344 100644 (file)
@@ -54,7 +54,7 @@ OPTIONS
   aname=name   aname specifies the file tree to access when the server is
                offering several exported file systems.
 
-  cache=mode   specifies a cacheing policy.  By default, no caches are used.
+  cache=mode   specifies a caching policy.  By default, no caches are used.
                        loose = no attempts are made at consistency,
                                 intended for exclusive, read-only mounts
 
index fe26cc978523959b468cd8fa5398eed5ef1b8559..37c10cba717725f599ec999eb0a0a4ff6b1fc483 100644 (file)
@@ -224,7 +224,7 @@ against the page the filesystem should redirty the page with
 redirty_page_for_writepage(), then unlock the page and return zero.
 This may also be done to avoid internal deadlocks, but rarely.
 
-If the filesytem is called for sync then it must wait on any
+If the filesystem is called for sync then it must wait on any
 in-progress I/O and then start new I/O.
 
 The filesystem should unlock the page synchronously, before returning to the
index 4aecc9bdb273a3df8656a2db59899cf52e47de21..b45f3c1b8b431655f500b0a8842553ea21a5d6a0 100644 (file)
@@ -130,12 +130,12 @@ Device layer.
 
 Journaling Block Device layer
 -----------------------------
-The Journaling Block Device layer (JBD) isn't ext3 specific.  It was design to
-add journaling capabilities on a block device.  The ext3 filesystem code will
-inform the JBD of modifications it is performing (called a transaction).  The
-journal supports the transactions start and stop, and in case of crash, the
-journal can replayed the transactions to put the partition back in a
-consistent state fast.
+The Journaling Block Device layer (JBD) isn't ext3 specific.  It was designed
+to add journaling capabilities to a block device.  The ext3 filesystem code
+will inform the JBD of modifications it is performing (called a transaction).
+The journal supports the transactions start and stop, and in case of a crash,
+the journal can replay the transactions to quickly put the partition back into
+a consistent state.
 
 Handles represent a single atomic update to a filesystem.  JBD can handle an
 external journal on a block device.
@@ -164,7 +164,7 @@ written to the journal first, and then to its final location.
 In the event of a crash, the journal can be replayed, bringing both data and
 metadata into a consistent state.  This mode is the slowest except when data
 needs to be read from and written to disk at the same time where it
-outperforms all others modes.
+outperforms all other modes.
 
 Compatibility
 -------------
index 133e213ebb721912a79c2c6621ef30050941ce6e..bb0142f6108458f6ccd27b90e965a6bdf820e501 100644 (file)
@@ -76,13 +76,13 @@ the fdtable structure -
 5. Handling of the file structures is special. Since the look-up
    of the fd (fget()/fget_light()) are lock-free, it is possible
    that look-up may race with the last put() operation on the
-   file structure. This is avoided using the rcuref APIs
+   file structure. This is avoided using atomic_inc_not_zero()
    on ->f_count :
 
        rcu_read_lock();
        file = fcheck_files(files, fd);
        if (file) {
-               if (rcuref_inc_lf(&file->f_count))
+               if (atomic_inc_not_zero(&file->f_count))
                        *fput_needed = 1;
                else
                /* Didn't get the reference, someone's freed */
@@ -92,7 +92,7 @@ the fdtable structure -
        ....
        return file;
 
-   rcuref_inc_lf() detects if refcounts is already zero or
+   atomic_inc_not_zero() detects if refcounts is already zero or
    goes to zero during increment. If it does, we fail
    fget()/fget_light().
 
index e5c1df52a876fe9ab83173966772960ce0b25a77..dec99455321fdf86018ca5b2b62936103fd73031 100644 (file)
@@ -813,9 +813,9 @@ Various pieces   of  information about  kernel activity  are  available in the
 since the system first booted.  For a quick look, simply cat the file:
 
   > cat /proc/stat
-  cpu  2255 34 2290 22625563 6290 127 456
-  cpu0 1132 34 1441 11311718 3675 127 438
-  cpu1 1123 0 849 11313845 2614 0 18
+  cpu  2255 34 2290 22625563 6290 127 456 0
+  cpu0 1132 34 1441 11311718 3675 127 438 0
+  cpu1 1123 0 849 11313845 2614 0 18 0
   intr 114930548 113199788 3 0 5 263 0 4 [... lots more numbers ...]
   ctxt 1990473
   btime 1062191376
@@ -835,6 +835,7 @@ second).  The meanings of the columns are as follows, from left to right:
 - iowait: waiting for I/O to complete
 - irq: servicing interrupts
 - softirq: servicing softirqs
+- steal: involuntary wait
 
 The "intr" line gives counts of interrupts  serviced since boot time, for each
 of the  possible system interrupts.   The first  column  is the  total of  all
index 4b5ca26e50485cef96afb94f1d6be4238bbe90af..4598ef7b622bb88711cb22595a9b2f85a5050d9c 100644 (file)
@@ -51,7 +51,7 @@ for the attributes, providing a means to read and write kernel
 attributes.
 
 Attributes should be ASCII text files, preferably with only one value
-per file. It is noted that it may not be efficient to contain only
+per file. It is noted that it may not be efficient to contain only one
 value per file, so it is socially acceptable to express an array of
 values of the same type. 
 
index 6f8e16e3d6c0c65c97f5d1dfe650977aa711e6d5..9d019d35728f28bcb9ecfeaf5bd3a4227f026586 100644 (file)
@@ -706,7 +706,7 @@ struct address_space_operations {
         wants to make it a free page.  If ->releasepage succeeds, the
         page will be removed from the address_space and become free.
 
-       The second case if when a request has been made to invalidate
+       The second case is when a request has been made to invalidate
         some or all pages in an address_space.  This can happen
         through the fadvice(POSIX_FADV_DONTNEED) system call or by the
         filesystem explicitly requesting it as nfs and 9fs do (when
index 579b92d5f3a38c4796d6bcf4c1de559277090974..10518dd588146f6d57c1e3c9c912bb525bc86425 100644 (file)
@@ -68,7 +68,7 @@ We have found some I2C devices that needs the following modifications:
 
   Flags I2C_M_IGNORE_NAK
     Normally message is interrupted immediately if there is [NA] from the
-    client. Setting this flag treats any [NA] as [A], and all of
+    client. Setting this flag treats any [NA] as [A], and all of
     message is sent.
     These messages may still fail to SCL lo->hi timeout.
 
index 6449a7090dbbf6e18c31f54a458561cf50ccd80e..223e4f0582d018254e692b8e83d809fe77dbc400 100644 (file)
@@ -21,10 +21,10 @@ software test suits to do stressful testing on IPF.
 
 Below is a sample application as part of the whole tool. The sample
 can be used as a working test tool. Or it can be expanded to include
-more features. It also can be a integrated into a libary or other user
+more features. It also can be a integrated into a library or other user
 application to have more thorough test.
 
-The sample application takes err.conf as error configuation input. Gcc
+The sample application takes err.conf as error configuration input. GCC
 compiles the code. After you install err_inject driver, you can run
 this sample application to inject errors.
 
@@ -809,7 +809,7 @@ int err_inj()
        }
 
        /* Create semaphore: If one_lock, one semaphore for all processors.
-          Otherwise, one sempaphore for each processor. */
+          Otherwise, one semaphore for each processor. */
        if (one_lock) {
                if (create_sem(0)) {
                        printf("Can not create semaphore...exit\n");
index ab050621e20f7878f19c19392f1007718fd6dddc..f3a3ba8847ba7749c0d881220f50a56c217d8c31 100644 (file)
@@ -170,7 +170,7 @@ major controller faults (ROM checksum and RAM test) and such things as stuck
 keys. Any keys down at power-up are presumed to be stuck, and their BREAK
 (sic) code is returned (which without the preceding MAKE code is a flag for a
 keyboard error). If the controller self-test completes without error, the code
-0xF0 is returned. (This code will be used to indicate the version/rlease of
+0xF0 is returned. (This code will be used to indicate the version/release of
 the ikbd controller. The first release of the ikbd is version 0xF0, should
 there be a second release it will be 0xF1, and so on.)
 The ikbd defaults to a mouse position reporting with threshold of 1 unit in
@@ -413,7 +413,7 @@ INTERROGATION MODE.
             %nnnnmmmm   ; where m is JOYSTICK1 state
                         ; and n is JOYSTICK0 state
 
-Sets the ikbd to do nothing but monitor the serial command lne, maintain the
+Sets the ikbd to do nothing but monitor the serial command line, maintain the
 time-of-day clock, and monitor the joystick. The rate sets the interval
 between joystick samples.
 N.B. The user should not set the rate higher than the serial communications
@@ -446,10 +446,10 @@ The sample interval should be as constant as possible.
                         ; until vertical cursor key is generated before RY
                         ; has elapsed
     VX                  ; length (in tenths of seconds) of joystick closure
-                        ; until horizontal cursor keystokes are generated
+                        ; until horizontal cursor keystrokes are generated
                         ; after RX has elapsed
     VY                  ; length (in tenths of seconds) of joystick closure
-                        ; until vertical cursor keystokes are generated
+                        ; until vertical cursor keystrokes are generated
                         ; after RY has elapsed
 
 In this mode, joystick 0 is scanned in a way that simulates cursor keystrokes.
index 085eb15b45b7c5655d0c8363e19bdde2cf4e4699..ded4d5f53109d13e79aa47e277a7dde674f5c883 100644 (file)
@@ -1,5 +1,5 @@
 Force feedback for Linux.
-By Johann Deneux <deneux@ifrance.com> on 2001/04/22.
+By Johann Deneux <johann.deneux@gmail.com> on 2001/04/22.
 Updated by Anssi Hannula <anssi.hannula@gmail.com> on 2006/04/09.
 You may redistribute this file. Please remember to include shape.fig and
 interactive.fig as well.
index 8777d2d321e38437424896c9f45e26ddff81ebbc..3ac92413c8748f8e0f4ae0998d2a0f0dfff334e0 100644 (file)
@@ -4,10 +4,10 @@ specify force effects to I-Force 2.0 devices.  None of this information comes
 from Immerse. That's why you should not trust what is written in this
 document. This document is intended to help understanding the protocol.
 This is not a reference. Comments and corrections are welcome.  To contact me,
-send an email to: deneux@ifrance.com
+send an email to: johann.deneux@gmail.com
 
 ** WARNING **
-I may not be held responsible for any dammage or harm caused if you try to
+I shall not be held responsible for any damage or harm caused if you try to
 send data to your I-Force device based on what you read in this document.
 
 ** Preliminary Notes:
@@ -151,13 +151,13 @@ OP=  ff
 Query command. Length varies according to the query type.
 The general format of this packet is:
 ff 01 QUERY [INDEX] CHECKSUM
-reponses are of the same form:
+responses are of the same form:
 FF LEN QUERY VALUE_QUERIED CHECKSUM2
 where LEN = 1 + length(VALUE_QUERIED)
 
 **** Query ram size ****
 QUERY = 42 ('B'uffer size)
-The device should reply with the same packet plus two additionnal bytes
+The device should reply with the same packet plus two additional bytes
 containing the size of the memory:
 ff 03 42 03 e8 CS would mean that the device has 1000 bytes of ram available.
 
@@ -234,19 +234,23 @@ is the amount of memory apparently needed for every set of parameters:
 
 ** Appendix: How to study the protocol ? **
 
-1. Generate effects using the force editor provided with the DirectX SDK, or use Immersion Studio (freely available at their web site in the developer section: www.immersion.com)
-2. Start a soft spying RS232 or USB (depending on where you connected your joystick/wheel). I used ComPortSpy from fCoder (alpha version!)
+1. Generate effects using the force editor provided with the DirectX SDK, or 
+use Immersion Studio (freely available at their web site in the developer section: 
+www.immersion.com)
+2. Start a soft spying RS232 or USB (depending on where you connected your 
+joystick/wheel). I used ComPortSpy from fCoder (alpha version!)
 3. Play the effect, and watch what happens on the spy screen.
 
 A few words about ComPortSpy:
-At first glance, this soft seems, hum, well... buggy. In fact, data appear with a few seconds latency. Personnaly, I restart it every time I play an effect.
+At first glance, this software seems, hum, well... buggy. In fact, data appear with a
+few seconds latency. Personally, I restart it every time I play an effect.
 Remember it's free (as in free beer) and alpha!
 
 ** URLS **
 Check www.immerse.com for Immersion Studio, and www.fcoder.com for ComPortSpy.
 
 ** Author of this document **
-Johann Deneux <deneux@ifrance.com>
+Johann Deneux <johann.deneux@gmail.com>
 Home page at http://www.esil.univ-mrs.fr/~jdeneux/projects/ff/
 
 Additions by Vojtech Pavlik.
index 4d932dc660982d34fe488a2e9d8f10957a4d030b..47fc86830cd7691a5ea256a971065393d422f9b8 100644 (file)
@@ -79,7 +79,7 @@ In the _init function, which is called either upon module load or when
 booting the kernel, it grabs the required resources (it should also check
 for the presence of the device).
 
-Then it allocates a new input device structure with input_aloocate_device()
+Then it allocates a new input device structure with input_allocate_device()
 and sets up input bitfields. This way the device driver tells the other
 parts of the input systems what it is - what events can be generated or
 accepted by this input device. Our example device can only generate EV_KEY
index 7c17c837064fbfe7cd5f688de32947f5c4182fe2..8cac6c2f23ee3dd1337efb71db394e51c3284492 100644 (file)
@@ -40,7 +40,7 @@ Andreas Kool (akool@Kool.f.EUnet.de)
 Pedro Roque Marques (roque@di.fc.ul.pt)
   For lot of new ideas and the pcbit driver.
 
-Eberhard Moenkeberg (emoenke@gwdg.de)
+Eberhard Mönkeberg (emoenke@gwdg.de)
   For testing and help to get into kernel.
 
 Thomas Neumann (tn@ruhr.de)
index 2f114babe4b6a22538274deff8f384eece7a801f..a76d74845a4c8bea3500d1475ad526a3924d8672 100644 (file)
@@ -111,7 +111,7 @@ struct concap_proto_ops{
        struct concap_proto *  (*proto_new) (void);
 
        /* delete encapsulation protocol instance and free all its resources.
-          cprot may no loger be referenced after calling this */
+          cprot may no longer be referenced after calling this */
        void (*proto_del)(struct concap_proto *cprot);
 
        /* initialize the protocol's data. To be called at interface startup
index 3cce3fbb664437a2fb1acf65fda6ff3360e36273..e6a72328154783fc6e983904658eb8eb8c0c4ee8 100644 (file)
@@ -37,7 +37,7 @@ other program after you have done the following:
    or the following, if you want to be more selective:
      ':Applet:M::<!--applet::/usr/bin/appletviewer:'
 
-   Of cause you have to fix the path names. Given path/file names in this
+   Of course you have to fix the path names. The path/file names given in this
    document match the Debian 2.1 system. (i.e. jdk installed in /usr,
    custom wrappers from this document in /usr/local)
 
index fe8b0c4892cf14e6f39e255ac368f150c41647c8..616043a6da99a0afd945e3cb5acb93b26bbb3f17 100644 (file)
@@ -77,7 +77,12 @@ applicable everywhere (see syntax).
   Optionally, dependencies only for this default value can be added with
   "if".
 
-- dependencies: "depends on"/"requires" <expr>
+- type definition + default value:
+       "def_bool"/"def_tristate" <expr> ["if" <expr>]
+  This is a shorthand notation for a type definition plus a value.
+  Optionally dependencies for this default value can be added with "if".
+
+- dependencies: "depends on" <expr>
   This defines a dependency for this menu entry. If multiple
   dependencies are defined, they are connected with '&&'. Dependencies
   are applied to all other options within this menu entry (which also
@@ -289,3 +294,10 @@ source:
        "source" <prompt>
 
 This reads the specified configuration file. This file is always parsed.
+
+mainmenu:
+
+       "mainmenu" <prompt>
+
+This sets the config program's title bar if the config program chooses
+to use it.
index f099b814d383c49d44667954fe9e625c90c9a6e4..6166e2d7da76244d628da0543a25ae36f97da4da 100644 (file)
@@ -518,6 +518,28 @@ more details, with real examples.
        In this example for a specific GCC version the build will error out explaining
        to the user why it stops.
 
+    cc-cross-prefix
+       cc-cross-prefix is used to check if there exist a $(CC) in path with
+       one of the listed prefixes. The first prefix where there exist a
+       prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found
+       then nothing is returned.
+       Additional prefixes are separated by a single space in the
+       call of cc-cross-prefix.
+       This functionality is usefull for architecture Makefile that try
+       to set CROSS_COMPILE to well know values but may have several
+       values to select between.
+       It is recommended only to try to set CROSS_COMPILE is it is a cross
+       build (host arch is different from target arch). And is CROSS_COMPILE
+       is already set then leave it with the old value.
+
+       Example:
+               #arch/m68k/Makefile
+               ifneq ($(SUBARCH),$(ARCH))
+                       ifeq ($(CROSS_COMPILE),)
+                              CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-)
+                       endif
+               endif
+
 === 4 Host Program support
 
 Kbuild supports building executables on the host for use during the
index d9e3b199929bd6fb158576a040e88ee01276561f..5a4ef48224aeac7ce4cfef6eea9dd3e545a7300e 100644 (file)
@@ -76,9 +76,9 @@
      * Title: "Conceptual Architecture of the Linux Kernel"
        Author: Ivan T. Bowman.
        URL: http://plg.uwaterloo.ca/~itbowman/papers/CS746G-a1.html
-       Keywords: conceptual software arquitecture, extracted design,
+       Keywords: conceptual software architecture, extracted design,
        reverse engineering, system structure.
-       Description: Conceptual software arquitecture of the Linux kernel,
+       Description: Conceptual software architecture of the Linux kernel,
        automatically extracted from the source code. Very detailed. Good
        figures. Gives good overall kernel understanding.
 
index 0a3fed445249f84b8e42c9f904d0e0df16a75d42..6accd360da735cce8f9e9adecf0e5938d2e8e590 100644 (file)
@@ -222,9 +222,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        Warning: Many of these options can produce a lot of
                        output and make your system unusable. Be very careful.
 
-
-       acpi_fake_ecdt  [HW,ACPI] Workaround failure due to BIOS lacking ECDT
-
        acpi_pm_good    [X86-32,X86-64]
                        Override the pmtimer bug detection: force the kernel
                        to assume that this machine's pmtimer latches its value
@@ -297,9 +294,6 @@ and is between 256 and 4096 characters. It is defined in the file
        apm=            [APM] Advanced Power Management
                        See header of arch/i386/kernel/apm.c.
 
-       applicom=       [HW]
-                       Format: <mem>,<irq>
-
        arcrimi=        [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards
                        Format: <io>,<irq>,<nodeID>
 
@@ -345,12 +339,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        Format: <io>,<irq>,<mode>
                        See header of drivers/net/hamradio/baycom_ser_hdx.c.
 
-       blkmtd_device=  [HW,MTD]
-       blkmtd_erasesz=
-       blkmtd_ro=
-       blkmtd_bs=
-       blkmtd_count=
-
        boot_delay=     Milliseconds to delay each printk during boot.
                        Values larger than 10 seconds (10000) are changed to
                        no delay (0).
@@ -431,8 +419,10 @@ and is between 256 and 4096 characters. It is defined in the file
                        over the 8254 in addition to over the IO-APIC. The
                        kernel tries to set a sensible default.
 
-       hpet=           [X86-32,HPET] option to disable HPET and use PIT.
-                       Format: disable
+       hpet=           [X86-32,HPET] option to control HPET usage
+                       Format: { enable (default) | disable | force }
+                       disable: disable HPET and use PIT instead
+                       force: allow force enabled of undocumented chips (ICH4, VIA)
 
        com20020=       [HW,NET] ARCnet - COM20020 chipset
                        Format:
@@ -513,8 +503,6 @@ and is between 256 and 4096 characters. It is defined in the file
        cs89x0_media=   [HW,NET]
                        Format: { rj45 | aui | bnc }
 
-       cyclades=       [HW,SERIAL] Cyclades multi-serial port adapter.
-
        dasd=           [HW,NET]
                        See header of drivers/s390/block/dasd_devmap.c.
 
@@ -572,10 +560,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        See drivers/char/README.epca and
                        Documentation/digiepca.txt.
 
-       dmascc=         [HW,AX25,SERIAL] AX.25 Z80SCC driver with DMA
-                       support available.
-                       Format: <io_dev0>[,<io_dev1>[,..<io_dev32>]]
-
        dmasound=       [HW,OSS] Sound subsystem buffers
 
        dscc4.setup=    [NET]
@@ -606,17 +590,10 @@ and is between 256 and 4096 characters. It is defined in the file
                        0: polling mode
                        non-0: interrupt mode (default)
 
-       eda=            [HW,PS2]
-
-       edb=            [HW,PS2]
-
        edd=            [EDD]
                        Format: {"of[f]" | "sk[ipmbr]"}
                        See comment in arch/i386/boot/edd.S
 
-       eicon=          [HW,ISDN]
-                       Format: <id>,<membase>,<irq>
-
        eisa_irq_edge=  [PARISC,HW]
                        See header of drivers/parisc/eisa.c.
 
@@ -892,9 +869,6 @@ and is between 256 and 4096 characters. It is defined in the file
        lapic_timer_c2_ok       [X86-32,x86-64,APIC] trust the local apic timer in
                        C2 power state.
 
-       lasi=           [HW,SCSI] PARISC LASI driver for the 53c700 chip
-                       Format: addr:<io>,irq:<irq>
-
        libata.noacpi   [LIBATA] Disables use of ACPI in libata suspend/resume
                        when set.
                        Format: <int>
@@ -1142,9 +1116,6 @@ and is between 256 and 4096 characters. It is defined in the file
        noapic          [SMP,APIC] Tells the kernel to not make use of any
                        IOAPICs that may be present in the system.
 
-       noasync         [HW,M68K] Disables async and sync negotiation for
-                       all devices.
-
        nobats          [PPC] Do not use BATs for mapping kernel lowmem
                        on "Classic" PPC cores.
 
@@ -1456,6 +1427,7 @@ and is between 256 and 4096 characters. It is defined in the file
                        Param: <number> - step/bucket size as a power of 2 for
                                statistical time based profiling.
                        Param: "sleep" - profile D-state sleeping (millisecs)
+                       Param: "kvm" - profile VM exits.
 
        processor.max_cstate=   [HW,ACPI]
                        Limit processor to maximum C-state
@@ -1582,9 +1554,6 @@ and is between 256 and 4096 characters. It is defined in the file
        sa1100ir        [NET]
                        See drivers/net/irda/sa1100_ir.c.
 
-       sb=             [HW,OSS]
-                       Format: <io>,<irq>,<dma>,<dma2>
-
        sbni=           [NET] Granch SBNI12 leased line adapter
 
        sc1200wdt=      [HW,WDT] SC1200 WDT (watchdog) driver
@@ -1628,8 +1597,6 @@ and is between 256 and 4096 characters. It is defined in the file
 
        serialnumber    [BUGS=X86-32]
 
-       sg_def_reserved_size=   [SCSI]
-
        shapers=        [NET]
                        Maximal number of shapers.
 
@@ -2020,10 +1987,6 @@ and is between 256 and 4096 characters. It is defined in the file
        norandmaps      Don't use address space randomization
                        Equivalent to echo 0 > /proc/sys/kernel/randomize_va_space
 
-       unwind_debug=N  N > 0 will enable dwarf2 unwinder debugging
-                       This is useful to get more information why
-                       you got a "dwarf2 unwinder stuck"
-
 ______________________________________________________________________
 
 TODO:
index 8a523f6af48ab754ad1fc51dc9a65d726bde9c23..248589e8bcf5b8da6be48877bccb0c233eb00be5 100644 (file)
@@ -890,10 +890,7 @@ Syntax: nosync:0
 5.5.2) noasync
 --------------
 
-Syntax: noasync:0
-
-  Disables async and sync negotiation for all devices.  Any value
-  after the colon is acceptable (and has the same effect).
+[OBSOLETE, REMOVED]
 
 5.5.3) nodisconnect
 -------------------
index afb31c141d9d281a3a5b406cffb29220961d02cc..5c8334123f4f7b6f29d41c6129ecd511a7e03d10 100644 (file)
@@ -59,7 +59,7 @@ Four configs variables are introduced:
   CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA    - enable the PIO+DBDMA mode
   CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA  - enable the MWDMA mode
   CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON - set Burstable FIFO in DBDMA
-                                           controler
+                                           controller
   CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ - maximum transfer size
                                            per descriptor
 
index 51f935191ae5d86fbf21fb801853eb20dff546a3..aa60d1f627e523929dff9e787498e96ef661cfe6 100644 (file)
@@ -133,4 +133,6 @@ the APIs of 'struct mutex' have been streamlined:
  int  mutex_trylock(struct mutex *lock);
  void mutex_unlock(struct mutex *lock);
  int  mutex_is_locked(struct mutex *lock);
-
+ void mutex_lock_nested(struct mutex *lock, unsigned int subclass);
+ int  mutex_lock_interruptible_nested(struct mutex *lock,
+                                      unsigned int subclass);
index a136721499bfbb1d7683ed2c47a1340a6482ab24..d602c8d6ff3e5d6ea9614286550d6bc15756c24b 100644 (file)
@@ -37,7 +37,7 @@ all, distributions.  There is, however, additional software that is
 required. The firmware used by the chip is the intellectual property
 of Broadcom and they have not given the bcm43xx team redistribution
 rights to this firmware.  Since we cannot legally redistribute
-the firwmare we cannot include it with the driver. Furthermore, it
+the firmware we cannot include it with the driver. Furthermore, it
 cannot be placed in the downloadable archives of any distributing
 organization; therefore, the user is responsible for obtaining the
 firmware and placing it in the appropriate location so that the driver
index 6ae2feff3087edfc13f58fb1ea9d9ddfc6f06a97..747a5d15d529c8bff449d88802b79b70a213a775 100644 (file)
@@ -293,7 +293,7 @@ tcp_no_metrics_save - BOOLEAN
        when the connection closes, so that connections established in the
        near future can use these to set initial conditions.  Usually, this
        increases overall performance, but may sometimes cause performance
-       degredation.  If set, TCP will not cache metrics on closing
+       degradation.  If set, TCP will not cache metrics on closing
        connections.
 
 tcp_orphan_retries - INTEGER
index c36b64b0020fc670063519c4c8e64ac4f44af3d1..c3669a3fb4af284997fac1b5cd5a58d023a6be90 100644 (file)
@@ -689,7 +689,7 @@ such as the AFS filesystem.  This permits such a utility to:
      buffers manipulated directly.
 
 To use the RxRPC facility, a kernel utility must still open an AF_RXRPC socket,
-bind an addess as appropriate and listen if it's to be a server socket, but
+bind an address as appropriate and listen if it's to be a server socket, but
 then it passes this to the kernel interface functions.
 
 The kernel interface functions are as follows:
index 6be09ba24a365f25e1c16881f7560d63a2cef3e3..b6409cab075ca53aa3a5f4a6276403e0a0463c89 100644 (file)
@@ -12,7 +12,7 @@
   For in-depth information, you can consult:
 
    o The UDP-Lite Homepage: http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/
-       Fom here you can also download some example application source code.
+       From here you can also download some example application source code.
 
    o The UDP-Lite HOWTO on
        http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/files/UDP-Lite-HOWTO.txt
   While it is important that such cases are dealt with correctly, they
   are (annoyingly) rare: UDP-Lite is designed for optimising multimedia
   performance over wireless (or generally noisy) links and thus smaller
-  coverage lenghts are likely to be expected.
+  coverage lengths are likely to be expected.
 
 
   V) UDP-LITE RUNTIME STATISTICS AND THEIR MEANING
   VI) IPTABLES
 
   There is packet match support for UDP-Lite as well as support for the LOG target.
-  If you copy and paste the following line into /etc/protcols,
+  If you copy and paste the following line into /etc/protocols,
 
   udplite 136     UDP-Lite        # UDP-Lite [RFC 3828]
 
index 06f911a5f885bfc022c3d4098e08be2dd17ff105..f281886de4902041bbda38942772384a622d0319 100644 (file)
@@ -39,7 +39,7 @@ resume=<swap_file_partition> resume_offset=<swap_file_offset>
 where <swap_file_partition> is the partition on which the swap file is located
 and <swap_file_offset> is the offset of the swap header determined by the
 application in 2) (of course, this step may be carried out automatically
-by the same application that determies the swap file's header offset using the
+by the same application that determines the swap file's header offset using the
 FIBMAP ioctl)
 
 OR
index 4530d1bf0286f68a5642f8ad6e99096447e14aa4..df7afe43d46286a1c0cb50bb95269e7d7c99e7d6 100644 (file)
@@ -36,8 +36,8 @@ Causes of EEH Errors
 EEH was originally designed to guard against hardware failure, such
 as PCI cards dying from heat, humidity, dust, vibration and bad
 electrical connections. The vast majority of EEH errors seen in
-"real life" are due to eithr poorly seated PCI cards, or,
-unfortunately quite commonly, due device driver bugs, device firmware
+"real life" are due to either poorly seated PCI cards, or,
+unfortunately quite commonly, due to device driver bugs, device firmware
 bugs, and sometimes PCI card hardware bugs.
 
 The most common software bug, is one that causes the device to
index e59fcbbe338cb437dabb6fd28d8d0f5d1e14345b..5f7d536cb0c60351eae676c1fe5dd81407ae55ef 100644 (file)
@@ -17,12 +17,12 @@ passed by the boot loader to the kernel at boot time.  The device tree
 describes what devices are present on the board and how they are
 connected.  The device tree can either be passed as a binary blob (as
 described in Documentation/powerpc/booting-without-of.txt), or passed
-by Open Firmare (IEEE 1275) compatible firmware using an OF compatible
+by Open Firmware (IEEE 1275) compatible firmware using an OF compatible
 client interface API.
 
 This document specifies the requirements on the device-tree for mpc5200
 based boards.  These requirements are above and beyond the details
-specified in either the OpenFirmware spec or booting-without-of.txt
+specified in either the Open Firmware spec or booting-without-of.txt
 
 All new mpc5200-based boards are expected to match this document.  In
 cases where this document is not sufficient to support a new board port,
@@ -73,8 +73,8 @@ match on the compatible list; the 'most compatible' driver should be
 selected.
 
 The split between the MPC5200 and the MPC5200B leaves a bit of a
-connundrum.  How should the compatible property be set up to provide
-maximum compatability information; but still acurately describe the
+conundrum.  How should the compatible property be set up to provide
+maximum compatibility information; but still accurately describe the
 chip?  For the MPC5200; the answer is easy.  Most of the SoC devices
 originally appeared on the MPC5200.  Since they didn't exist anywhere
 else; the 5200 compatible properties will contain only one item;
@@ -84,7 +84,7 @@ The 5200B is almost the same as the 5200, but not quite.  It fixes
 silicon bugs and it adds a small number of enhancements.  Most of the
 devices either provide exactly the same interface as on the 5200.  A few
 devices have extra functions but still have a backwards compatible mode.
-To express this infomation as completely as possible, 5200B device trees
+To express this information as completely as possible, 5200B device trees
 should have two items in the compatible list;
 "mpc5200b-<device>\0mpc5200-<device>".  It is *strongly* recommended
 that 5200B device trees follow this convention (instead of only listing
@@ -199,7 +199,7 @@ ethernet@<addr>     network         mpc5200-fec       MPC5200 ethernet device
 ata@<addr>     ata             mpc5200-ata       IDE ATA interface
 i2c@<addr>     i2c             mpc5200-i2c       I2C controller
 usb@<addr>     usb-ohci-be     mpc5200-ohci,ohci-be    USB controller
-xlb@<addr>     xlb             mpc5200-xlb       XLB arbritrator
+xlb@<addr>     xlb             mpc5200-xlb       XLB arbitrator
 
 Important child node properties
 name           type            description
index 6aa9a891f3d00ec20df21d49c4a531f1ba574a2e..683ccae00ad412aa498e979d574627e87ade2088 100644 (file)
@@ -120,7 +120,7 @@ The following information is available in this file:
           list size to avoid SCSI malloc pool fragmentation.
         - Cleanup channel display in our /proc output.
         - Workaround duplicate device entries in the mid-layer
-          devlice list during add-single-device.
+          device list during add-single-device.
 
    1.3.6 (March 28th, 2003)
         - Correct a double free in the Domain Validation code.
index 5f34d2ba69b47ce0e4571ac5288a3415c314c05d..b7e238cbb5a7c72a527f73ffa5a93cd8aa4a9fa7 100644 (file)
@@ -159,7 +159,7 @@ The following information is available in this file:
         - Add support for 2.5.X's scsi_report_device_reset().
 
    6.2.34 (May 5th, 2003)
-        - Fix locking regression instroduced in 6.2.29 that
+        - Fix locking regression introduced in 6.2.29 that
           could cause a lock order reversal between the io_request_lock
           and our per-softc lock.  This was only possible on RH9,
           SuSE, and kernel.org 2.4.X kernels.
@@ -264,7 +264,7 @@ The following information is available in this file:
               Option: tag_info:{{value[,value...]}[,{value[,value...]}...]}
           Definition: Set the per-target tagged queue depth on a
                       per controller basis.  Both controllers and targets
-                      may be ommitted indicating that they should retain
+                      may be omitted indicating that they should retain
                       the default tag depth.
             Examples: tag_info:{{16,32,32,64,8,8,,32,32,32,32,32,32,32,32,32}
                         On Controller 0
@@ -290,7 +290,7 @@ The following information is available in this file:
    -----------------------------------------------------------------
               Option: dv: {value[,value...]} 
           Definition: Set Domain Validation Policy on a per-controller basis.
-                      Controllers may be ommitted indicating that
+                      Controllers may be omitted indicating that
                       they should retain the default read streaming setting.
              Example: dv:{-1,0,,1,1,0}
                         On Controller 0 leave DV at its default setting.
index 5e0042340fd3e2c51eb4335868633d23fb0dd808..45d9482c151760b01b618a5faa66b5fcf7bf2b56 100644 (file)
@@ -3,7 +3,7 @@
 *******************************************************************************
 **     Usage of IOP331 adapter
 **     (All In/Out is in IOP331's view)
-**     1. Message 0 --> InitThread message and retrun code
+**     1. Message 0 --> InitThread message and return code
 **     2. Doorbell is used for RS-232 emulation
 **             inDoorBell :    bit0 -- data in ready
 **                     (DRIVER DATA WRITE OK)
index a08e225653d6fae25fdf0fe0be7a577a0639927c..a810421f1fb3dfab2e256bcb097db6b1fbc484d9 100644 (file)
@@ -21,7 +21,7 @@
    versions older than 4.0 do not work with kernels 2.4.0 or later! If you
    try to compile your kernel with the wrong driver source, the 
    compilation is aborted and you get a corresponding error message. This is
-   no bug in the driver. It prevents you from using the wrong sourcecode
+   no bug in the driver; it prevents you from using the wrong source code
    with the wrong kernel version.
 
    Authors of this Driver
@@ -58,7 +58,7 @@
    5 Users' Manual
      5.1 Commandline Parameters
      5.2 Troubleshooting
-     5.3 Bugreports
+     5.3 Bug reports
      5.4 Support WWW-page
    6 References
    7 Credits to
 
    1 Abstract
    ----------
-   This README-file describes the IBM SCSI-subsystem low level driver for 
-   Linux. The descriptions which were formerly kept in the source-code have 
-   been taken out to this file to easify the codes' readability. The driver 
+   This README-file describes the IBM SCSI-subsystem low level driver for
+   Linux. The descriptions which were formerly kept in the source code have
+   been taken out of this file to simplify the codes readability. The driver
    description has been updated, as most of the former description was already
-   quite outdated. The history of the driver development is also kept inside 
-   here. Multiple historical developments have been summarized to shorten the 
-   textsize a bit. At the end of this file you can find a small manual for 
+   quite outdated. The history of the driver development is also kept inside
+   here. Multiple historical developments have been summarized to shorten the
+   text size a bit. At the end of this file you can find a small manual for
    this driver and hints to get it running on your machine.
 
    2 Driver Description
    between 0 and 7). The IBM SCSI-2 F/W adapter offers this on up to two
    busses and provides support for 30 logical devices at the same time, where
    in wide-addressing mode you can have 16 puns with 32 luns on each device.
-   This section dexribes you the handling of devices on non-F/W adapters.
+   This section describes the handling of devices on non-F/W adapters.
    Just imagine, that you can have 16 * 32 = 512 devices on a F/W adapter
    which means a lot of possible devices for such a small machine.
 
    --------------------------------------------------------
    One consequence of information hiding is that the real (pun,lun)    
    numbers are also hidden. The two possibilities to get around this problem
-   is to offer fake pun/lun combinations to the operating system or to 
+   are to offer fake pun/lun combinations to the operating system or to 
    delete the whole mapping of the adapter and to reassign the ldns, using
    the immediate assign command of the SCSI-subsystem for probing through
-   all possible pun/lun combinations. a ldn is a "logical device number"
+   all possible pun/lun combinations.  An ldn is a "logical device number"
    which is used by IBM SCSI-subsystems to access some valid SCSI-device.
    At the beginning of the development of this driver, the following approach 
    was used:
    lun>0 or to non-existing devices, in order to satisfy the subsystem, if 
    there are less than 15 SCSI-devices connected. In the case of more than 15 
    devices, the dynamical mapping goes active. If the get_scsi[][] reports a 
-   device to be existant, but it has no ldn assigned, it gets a ldn out of 7 
-   to 14. The numbers are assigned in cyclic order. Therefore it takes 8 
-   dynamical reassignments on the SCSI-devices, until a certain device 
+   device to be existent, but it has no ldn assigned, it gets an ldn out of 7
+   to 14. The numbers are assigned in cyclic order, therefore it takes 8 
+   dynamical reassignments on the SCSI-devices until a certain device 
    loses its ldn again. This assures that dynamical remapping is avoided 
    during intense I/O between up to 15 SCSI-devices (means pun,lun 
    combinations). A further advantage of this method is that people who
       than devices are available, they are assigned to non existing pun,lun
       combinations to satisfy the adapter. With this, the dynamical mapping
       was possible to implement. (For further info see the text in the 
-      source-code and in the description below. Read the description
+      source code and in the description below. Read the description
       below BEFORE installing this driver on your system!)
    2) Changed the name IBMMCA_DRIVER_VERSION to IBMMCA_SCSI_DRIVER_VERSION.
    3) The LED-display shows on PS/2-95 no longer the ldn, but the SCSI-ID
    - Michael Lang
 
    Apr 23, 2000 (v3.2pre1)
-   1) During a very long time, I collected a huge amount of bugreports from
+   1) During a very long time, I collected a huge amount of bug reports from
       various people, trying really quite different things on their SCSI-
-      PS/2s. Today, all these bugreports are taken into account and should be
+      PS/2s. Today, all these bug reports are taken into account and should be
       mostly solved. The major topics were:
       - Driver crashes during boottime by no obvious reason.
       - Driver panics while the midlevel-SCSI-driver is trying to inquire
    - Michael Lang
    
    July 17, 2000 (v3.2pre8)
-   A long period of collecting bugreports from all corners of the world
+   A long period of collecting bug reports from all corners of the world
    now lead to the following corrections to the code:
    1) SCSI-2 F/W support crashed with a COMMAND ERROR. The reason for this 
       was that it is possible to disable Fast-SCSI for the external bus.
    July 26, 2000 (v3.2pre11)
    1) I passed a horrible weekend getting mad with NMIs on kernel 2.2.14 and
       a model 9595. Asking around in the community, nobody except of me has
-      seen such errors. Weired, but I am trying to recompile everything on
+      seen such errors. Weird, but I am trying to recompile everything on
       the model 9595. Maybe, as I use a specially modified gcc, that could
       cause problems. But, it was not the reason. The true background was,
       that the kernel was compiled for i386 and the 9595 has a 486DX-2. 
       alive rotator during boottime. This makes sense, when no monitor is 
       connected to the system. You can get rid of all display activity, if
       you do not use any parameter or just ibmmcascsi=activity, for the 
-      harddrive activity LED, existant on all PS/2, except models 8595-XXX.
+      harddrive activity LED, existent on all PS/2, except models 8595-XXX.
       If no monitor is available, please use ibmmcascsi=display, which works
       fine together with the linuxinfo utility for the LED-panel.
    - Michael Lang
         If this really happens, do also send e-mail to the maintainer, as
        forced detection should be never necessary. Forced detection is in
        principal some flaw of the driver adapter detection and goes into 
-       bugreports.
+       bug reports.
      Q: The driver screws up, if it starts to probe SCSI-devices, is there
         some way out of it?
      A: Yes, that was some recognition problem of the correct SCSI-adapter
        recommended version is 3.2 or later. Here, the F/W support is in
        a stable and reliable condition. Wide-addressing is in addition 
        supported.
-     Q: I get a Ooops message and something like "killing interrupt".
+     Q: I get an Oops message and something like "killing interrupt".
      A: The reason for this is that the IBM SCSI-subsystem only sends a 
         termination status back, if some error appeared. In former releases
        of the driver, it was not checked, if the termination status block
        problem. Not yet tried, but guessing that it could work. To get this,
        set unchecked_isa_dma argument of ibmmca.h from 0 to 1.
 
-   5.3 Bugreports
+   5.3 Bug reports
    --------------
-   If you really find bugs in the sourcecode or the driver will successfully
+   If you really find bugs in the source code or the driver will successfully
    refuse to work on your machine, you should send a bug report to me. The
    best for this is to follow the instructions on the WWW-page for this
    driver. Fill out the bug-report form, placed on the WWW-page and ship it,
    so the bugs can be taken into account with maximum efforts. But, please
    do not send bug reports about this driver to Linus Torvalds or Leonard
-   Zubkoff, as Linus is burried in E-Mail and Leonard is supervising all
+   Zubkoff, as Linus is buried in E-Mail and Leonard is supervising all
    SCSI-drivers and won't have the time left to look inside every single
    driver to fix a bug and especially DO NOT send modified code to Linus
    Torvalds or Alan J. Cox which has not been checked here!!! They are both
-   quite burried in E-mail (as me, sometimes, too) and one should first check
+   quite buried in E-mail (as me, sometimes, too) and one should first check
    for problems on my local teststand. Recently, I got a lot of 
-   bugreports for errors in the ibmmca.c code, which I could not imagine, but
+   bug reports for errors in the ibmmca.c code, which I could not imagine, but
    a look inside some Linux-distribution showed me quite often some modified
    code, which did no longer work on most other machines than the one of the
    modifier. Ok, so now that there is maintenance service available for this
    some e-mail directly, but at least with the same information as required by
    the formular.
    
-   If you have extensive bugreports, including Ooops messages and 
+   If you have extensive bug reports, including Oops messages and
    screen-shots, please feel free to send it directly to the address
    of the maintainer, too. The current address of the maintainer is:
    
                detailed bug reports and ideas for this driver (and his 
                patience ;-)).
    Alan J. Cox  
-                for his bugreports and his bold activities in cross-checking
+                for his bug reports and his bold activities in cross-checking
                the driver-code with his teststand.
                
    7.2 Sponsors & Supporters
index ccf1cebe744f8b4a6901ff7f61bd23029562344a..736540045dc7b7c9e448fb90bd72fc63346e082d 100644 (file)
@@ -153,6 +153,7 @@ replicas continue to be exactly same.
        #include <stdio.h>
        #include <stdlib.h>
        #include <unistd.h>
+       #include <string.h>
        #include <sys/mount.h>
        #include <sys/fsuid.h>
 
index 58cbfd01ea8f5cb658e759db4b0ea1e001bc7d2e..3feeb9ecdec49719443cba15fcac628a0c24b058 100644 (file)
@@ -20,12 +20,12 @@ I2S
 ===
 
  I2S is a common 4 wire DAI used in HiFi, STB and portable devices. The Tx and
-Rx lines are used for audio transmision, whilst the bit clock (BCLK) and
+Rx lines are used for audio transmission, whilst the bit clock (BCLK) and
 left/right clock (LRC) synchronise the link. I2S is flexible in that either the
 controller or CODEC can drive (master) the BCLK and LRC clock lines. Bit clock
 usually varies depending on the sample rate and the master system clock
 (SYSCLK). LRCLK is the same as the sample rate. A few devices support separate
-ADC and DAC LRCLK's, this allows for similtanious capture and playback at
+ADC and DAC LRCLK's, this allows for simultaneous capture and playback at
 different sample rates.
 
 I2S has several different operating modes:-
@@ -41,12 +41,12 @@ I2S has several different operating modes:-
 PCM
 ===
 
-PCM is another 4 wire interface, very similar to I2S, that can support a more
+PCM is another 4 wire interface, very similar to I2S, which can support a more
 flexible protocol. It has bit clock (BCLK) and sync (SYNC) lines that are used
 to synchronise the link whilst the Tx and Rx lines are used to transmit and
 receive the audio data. Bit clock usually varies depending on sample rate
 whilst sync runs at the sample rate. PCM also supports Time Division
-Multiplexing (TDM) in that several devices can use the bus similtaniuosly (This
+Multiplexing (TDM) in that several devices can use the bus simultaneously (this
 is sometimes referred to as network mode).
 
 Common PCM operating modes:-
index e93960d53a1ea8f58512e43219cda0261cd594c9..14930887c25f194c206a43dd6c56bd6188e07dd2 100644 (file)
@@ -2,20 +2,20 @@ Audio Clocking
 ==============
 
 This text describes the audio clocking terms in ASoC and digital audio in
-general. Note: Audio clocking can be complex !
+general. Note: Audio clocking can be complex!
 
 
 Master Clock
 ------------
 
-Every audio subsystem is driven by a master clock (sometimes refered to as MCLK
+Every audio subsystem is driven by a master clock (sometimes referred to as MCLK
 or SYSCLK). This audio master clock can be derived from a number of sources
 (e.g. crystal, PLL, CPU clock) and is responsible for producing the correct
 audio playback and capture sample rates.
 
-Some master clocks (e.g. PLL's and CPU based clocks) are configuarble in that
+Some master clocks (e.g. PLL's and CPU based clocks) are configurable in that
 their speed can be altered by software (depending on the system use and to save
-power). Other master clocks are fixed at at set frequency (i.e. crystals).
+power). Other master clocks are fixed at a set frequency (i.e. crystals).
 
 
 DAI Clocks
@@ -44,7 +44,7 @@ This relationship depends on the codec or SoC CPU in particular. In general
 it's best to configure BCLK to the lowest possible speed (depending on your
 rate, number of channels and wordsize) to save on power.
 
-It's also desireable to use the codec (if possible) to drive (or master) the
+It's also desirable to use the codec (if possible) to drive (or master) the
 audio clocks as it's usually gives more accurate sample rates than the CPU.
 
 
index 48983c75aad9cacd7052a484408425602ff6f98b..1e766ad0ebd1f4f28f4e20cb88899d4b8f5717da 100644 (file)
@@ -19,7 +19,7 @@ Optionally, codec drivers can also provide:-
  6) DAPM event handler.
  7) DAC Digital mute control.
 
-It's probably best to use this guide in conjuction with the existing codec
+It's probably best to use this guide in conjunction with the existing codec
 driver code in sound/soc/codecs/
 
 ASoC Codec driver breakdown
@@ -28,7 +28,7 @@ ASoC Codec driver breakdown
 1 - Codec DAI and PCM configuration
 -----------------------------------
 Each codec driver must have a struct snd_soc_codec_dai to define it's DAI and
-PCM's capablities and operations. This struct is exported so that it can be
+PCM's capabilities and operations. This struct is exported so that it can be
 registered with the core by your machine driver.
 
 e.g.
@@ -67,7 +67,7 @@ EXPORT_SYMBOL_GPL(wm8731_dai);
 
 2 - Codec control IO
 --------------------
-The codec can ususally be controlled via an I2C or SPI style interface (AC97
+The codec can usually be controlled via an I2C or SPI style interface (AC97
 combines control with data in the DAI). The codec drivers will have to provide
 functions to read and write the codec registers along with supplying a register
 cache:-
index c11877f5b4a1d93abbae1a31acd074d334a3e361..ab0766fd78690859e1594602fcd62155f48b0529 100644 (file)
@@ -11,7 +11,7 @@ other PM systems.
 
 DAPM is also completely transparent to all user space applications as all power
 switching is done within the ASoC core. No code changes or recompiling are
-required for user space applications. DAPM makes power switching descisions based
+required for user space applications. DAPM makes power switching decisions based
 upon any audio stream (capture/playback) activity and audio mixer settings
 within the device.
 
@@ -38,7 +38,7 @@ There are 4 power domains within DAPM
       Enabled and disabled when stream playback/capture is started and
       stopped respectively. e.g. aplay, arecord.
 
-All DAPM power switching descisons are made automatically by consulting an audio
+All DAPM power switching decisions are made automatically by consulting an audio
 routing map of the whole machine. This map is specific to each machine and
 consists of the interconnections between every audio component (including
 internal codec components). All audio components that effect power are called
index 753c5cc5984a8b059799fb7e0f779e820b1c071c..c47ce9530677961142f371784bc7550cdc58c460 100644 (file)
@@ -2,18 +2,19 @@ ALSA SoC Layer
 ==============
 
 The overall project goal of the ALSA System on Chip (ASoC) layer is to provide
-better ALSA support for embedded system on chip procesors (e.g. pxa2xx, au1x00,
+better ALSA support for embedded system-on-chip processors (e.g. pxa2xx, au1x00,
 iMX, etc) and portable audio codecs. Currently there is some support in the
 kernel for SoC audio, however it has some limitations:-
 
   * Currently, codec drivers are often tightly coupled to the underlying SoC
-    cpu. This is not ideal and leads to code duplication i.e. Linux now has 4
+    CPU. This is not ideal and leads to code duplication i.e. Linux now has 4
     different wm8731 drivers for 4 different SoC platforms.
 
-  * There is no standard method to signal user initiated audio events.
-    e.g. Headphone/Mic insertion, Headphone/Mic detection after an insertion
-    event. These are quite common events on portable devices and ofter require
-    machine specific code to re route audio, enable amps etc after such an event.
+  * There is no standard method to signal user initiated audio events (e.g.
+    Headphone/Mic insertion, Headphone/Mic detection after an insertion
+    event). These are quite common events on portable devices and often require
+    machine specific code to re-route audio, enable amps, etc., after such an
+    event.
 
   * Current drivers tend to power up the entire codec when playing
     (or recording) audio. This is fine for a PC, but tends to waste a lot of
@@ -44,7 +45,7 @@ features :-
     signals the codec when to change power states.
 
   * Machine specific controls: Allow machines to add controls to the sound card
-    e.g. volume control for speaker amp.
+    (e.g. volume control for speaker amp).
 
 To achieve all this, ASoC basically splits an embedded audio system into 3
 components :-
@@ -57,7 +58,7 @@ components :-
     interface drivers (e.g. I2S, AC97, PCM) for that platform.
 
   * Machine driver: The machine driver handles any machine specific controls and
-    audio events. i.e. turing on an amp at start of playback.
+    audio events (e.g. turning on an amp at start of playback).
 
 
 Documentation
index e95b16d5a53b155aace06da2f28111e46c419194..d4678b4dc6c6704869763c98b584bf015584fda2 100644 (file)
@@ -20,7 +20,7 @@ struct snd_soc_ops {
        int (*trigger)(struct snd_pcm_substream *, int);
 };
 
-The platform driver exports it's DMA functionailty via struct snd_soc_platform:-
+The platform driver exports its DMA functionality via struct snd_soc_platform:-
 
 struct snd_soc_platform {
        char *name;
index 2cf7ee5b3d7446d901c4d9b0b2530a79d84af683..3371bd9d7cfa52c46c7713b78b932326090f996c 100644 (file)
@@ -2,7 +2,7 @@ Audio Pops and Clicks
 =====================
 
 Pops and clicks are unwanted audio artifacts caused by the powering up and down
-of components within the audio subsystem. This is noticable on PC's when an
+of components within the audio subsystem. This is noticeable on PCs when an
 audio module is either loaded or unloaded (at module load time the sound card is
 powered up and causes a popping noise on the speakers).
 
@@ -16,7 +16,7 @@ Minimising Playback Pops and Clicks
 ===================================
 
 Playback pops in portable audio subsystems cannot be completely eliminated atm,
-however future audio codec hardware will have better pop and click supression.
+however future audio codec hardware will have better pop and click suppression.
 Pops can be reduced within playback by powering the audio components in a
 specific order. This order is different for startup and shutdown and follows
 some basic rules:-
@@ -33,7 +33,7 @@ Minimising Capture Pops and Clicks
 ==================================
 
 Capture artifacts are somewhat easier to get rid as we can delay activating the
-ADC until all the pops have occured. This follows similar power rules to
+ADC until all the pops have occurred. This follows similar power rules to
 playback in that components are powered in a sequence depending upon stream
 startup or shutdown.
 
index 215e3b8e72666b78f92addd070e74be29389711a..f3853cc37bde387e4608c27833e4653aa3811d3b 100644 (file)
@@ -1,4 +1,4 @@
-PXA2xx SPI on SSP driver HOWTO
+PXA2xx SPI on SSP driver HOWTO
 ===================================================
 This a mini howto on the pxa2xx_spi driver.  The driver turns a PXA2xx
 synchronous serial port into a SPI master controller
index 3b95bbacc77505d46c0b9154b632f654b0eedb66..ec499265decaa45b7c2495e51bdc660f1959dc6f 100644 (file)
@@ -1035,7 +1035,7 @@ enable it if necessary to avoid overheating.
 
 An enabled fan in level "auto" may stop spinning if the EC decides the
 ThinkPad is cool enough and doesn't need the extra airflow.  This is
-normal, and the EC will spin the fan up if the varios thermal readings
+normal, and the EC will spin the fan up if the various thermal readings
 rise too much.
 
 On the X40, this seems to depend on the CPU and HDD temperatures.
@@ -1203,7 +1203,7 @@ for example:
 Enabling debugging output
 -------------------------
 
-The module takes a debug paramater which can be used to selectively
+The module takes a debug parameter which can be used to selectively
 enable various classes of debugging output, for example:
 
         modprobe ibm_acpi debug=0xffff
index 4e0b62b8566ff266d3242e55efea5977e9d8bbbb..8b077e43eee7168c0a6594e88911636301c72c56 100644 (file)
@@ -338,7 +338,7 @@ MCT USB Single Port Serial Adapter U232
   This driver is for the MCT USB-RS232 Converter (25 pin, Model No.
   U232-P25) from Magic Control Technology Corp. (there is also a 9 pin
   Model No. U232-P9). More information about this device can be found at
-  the manufacture's web-site: http://www.mct.com.tw.
+  the manufacturer's web-site: http://www.mct.com.tw.
 
   The driver is generally working, though it still needs some more testing.
   It is derived from the Belkin USB Serial Adapter F5U103 driver and its
index 2534dc4aa95a58cfe8b6d617f1ec424ac74a7d5f..4ed41394e492423220afc320856913f4cc45aba1 100644 (file)
@@ -2178,7 +2178,7 @@ S:        Maintained
 KCONFIG
 P:     Roman Zippel
 M:     zippel@linux-m68k.org
-L:     kbuild-devel@lists.sourceforge.net
+L:     linux-kbuild@vger.kernel.org
 S:     Maintained
 
 KDUMP
@@ -2207,6 +2207,7 @@ KERNEL BUILD (kbuild: Makefile, scripts/Makefile.*)
 P:     Sam Ravnborg
 M:     sam@ravnborg.org
 T:     git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git
+L:     linux-kbuild@vger.kernel.org
 S:     Maintained
 
 KERNEL JANITORS
index 68ef80b30340371e13ff8e38777d0bf9d715dc33..f9c264e243a2a01e78cd85d209b8cdae8102a6ab 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -887,10 +887,7 @@ prepare2: prepare3 outputmakefile
 
 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)/*
-endif
+       $(cmd_crmodverdir)
 
 archprepare: prepare1 scripts_basic
 
@@ -906,14 +903,24 @@ prepare: prepare0
 
 export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
 
-# FIXME: The asm symlink changes when $(ARCH) changes. That's
-# hard to detect, but I suppose "make mrproper" is a good idea
-# before switching between archs anyway.
-
-include/asm:
-       @echo '  SYMLINK $@ -> include/asm-$(SRCARCH)'
-       $(Q)if [ ! -d include ]; then mkdir -p include; fi;
-       @ln -fsn asm-$(SRCARCH) $@
+# The asm symlink changes when $(ARCH) changes.
+# Detect this and ask user to run make mrproper
+
+include/asm: FORCE
+       $(Q)set -e; asmlink=`readlink include/asm | cut -d '-' -f 2`;   \
+       if [ -L include/asm ]; then                                     \
+               if [ "$$asmlink" != "$(SRCARCH)" ]; then                \
+                       echo "ERROR: the symlink $@ points to asm-$$asmlink but asm-$(SRCARCH) was expected"; \
+                       echo "       set ARCH or save .config and run 'make mrproper' to fix it";             \
+                       exit 1;                                         \
+               fi;                                                     \
+       else                                                            \
+               echo '  SYMLINK $@ -> include/asm-$(SRCARCH)';          \
+               if [ ! -d include ]; then                               \
+                       mkdir -p include;                               \
+               fi;                                                     \
+               ln -fsn asm-$(SRCARCH) $@;                              \
+       fi
 
 # Generate some files
 # ---------------------------------------------------------------------------
@@ -1023,19 +1030,12 @@ _modinst_:
        fi
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
 
-# If System.map exists, run depmod.  This deliberately does not have a
-# dependency on System.map since that would run the dependency tree on
-# vmlinux.  This depmod is only for convenience to give the initial
+# This depmod is only for convenience to give the initial
 # boot a modules.dep even before / is mounted read-write.  However the
 # boot script depmod is the master version.
-ifeq "$(strip $(INSTALL_MOD_PATH))" ""
-depmod_opts    :=
-else
-depmod_opts    := -b $(INSTALL_MOD_PATH) -r
-endif
 PHONY += _modinst_post
 _modinst_post: _modinst_
-       if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
+       $(call cmd,depmod)
 
 else # CONFIG_MODULES
 
@@ -1223,8 +1223,7 @@ else # KBUILD_EXTMOD
 KBUILD_MODULES := 1
 PHONY += crmodverdir
 crmodverdir:
-       $(Q)mkdir -p $(MODVERDIR)
-       $(Q)rm -f $(MODVERDIR)/*
+       $(cmd_crmodverdir)
 
 PHONY += $(objtree)/Module.symvers
 $(objtree)/Module.symvers:
@@ -1252,15 +1251,6 @@ _emodinst_:
        $(Q)mkdir -p $(MODLIB)/$(install-dir)
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
 
-# Run depmod only is we have System.map and depmod is executable
-quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
-      cmd_depmod = if [ -r System.map -a -x $(DEPMOD) ]; then \
-                      $(DEPMOD) -ae -F System.map             \
-                      $(if $(strip $(INSTALL_MOD_PATH)),      \
-                     -b $(INSTALL_MOD_PATH) -r)              \
-                     $(KERNELRELEASE);                       \
-                   fi
-
 PHONY += _emodinst_post
 _emodinst_post: _emodinst_
        $(call cmd,depmod)
@@ -1344,7 +1334,7 @@ define find-sources
          find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
               -name $1 -print; \
          find $(__srctree) $(RCS_FIND_IGNORE) \
-              \( -name include -o -name arch \) -prune -o \
+              \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \
               -name $1 -print; \
          )
 endef
@@ -1493,9 +1483,11 @@ endif
 
 # Modules
 / %/: prepare scripts FORCE
+       $(cmd_crmodverdir)
        $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
        $(build)=$(build-dir)
 %.ko: prepare scripts FORCE
+       $(cmd_crmodverdir)
        $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
        $(build)=$(build-dir) $(@:.ko=.o)
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
@@ -1509,6 +1501,19 @@ quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))
 quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
       cmd_rmfiles = rm -f $(rm-files)
 
+# Run depmod only is we have System.map and depmod is executable
+# and we build for the host arch
+quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
+      cmd_depmod = \
+       if [ -r System.map -a -x $(DEPMOD) -a "$(SUBARCH)" == "$(ARCH)" ]; then \
+               $(DEPMOD) -ae -F System.map                                     \
+               $(if $(strip $(INSTALL_MOD_PATH)), -b $(INSTALL_MOD_PATH) -r)   \
+               $(KERNELRELEASE);                                               \
+       fi
+
+# Create temporary dir for module support files
+cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR); rm -f $(MODVERDIR)/*
+
 
 a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \
          $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) \
index f2956ac8dccc775f60f866a24eadae130333e5fe..497877bf20127daad85ee837ea829eec85c982aa 100644 (file)
@@ -1082,7 +1082,7 @@ marvel_machine_check(u64 vector, u64 la_ptr)
        }       
 
        /*
-        * A system event or error has occured, handle it here.
+        * A system event or error has occurred, handle it here.
         *
         * Any errors in the logout frame have already been cleared by the
         * PALcode, so just parse it.
index 543d96d7fa2b6f32d1629812fc269e149e1677f4..6f3867877d9e451f9e8278094f385d50a0fed660 100644 (file)
@@ -591,7 +591,7 @@ privateer_process_680_frame(struct el_common *mchk_header, int print)
                (struct el_PRIVATEER_envdata_mcheck *)
                ((unsigned long)mchk_header + mchk_header->sys_offset);
 
-       /* TODO - catagorize errors, for now, no error */
+       /* TODO - categorize errors, for now, no error */
 
        if (!print)
                return status;
index ce857158c1eacc2a1b22ac0f6c278a5501d9d42b..6413c5f232264dbc9b165489396dbb6987d42351 100644 (file)
@@ -715,7 +715,7 @@ osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
                /* 
                 * Alpha Architecture Handbook 4.7.7.3:
                 * To be fully IEEE compiant, we must track the current IEEE
-                * exception state in software, because spurrious bits can be
+                * exception state in software, because spurious bits can be
                 * set in the trap shadow of a software-complete insn.
                 */
 
index ad176441be558bcf41d7dfd109913ef77a36fa7d..f4ab233201b296013c7c45511a953838d29226d8 100644 (file)
@@ -439,7 +439,6 @@ setup_smp(void)
                                ((char *)cpubase + i*hwrpb->processor_size);
                        if ((cpu->flags & 0x1cc) == 0x1cc) {
                                smp_num_probed++;
-                               /* Assume here that "whami" == index */
                                cpu_set(i, cpu_present_map);
                                cpu->pal_revision = boot_cpu_palrev;
                        }
index 49bedfbbd31bedc7986f31b6182356d8d2690959..d187d01d2a17b72dc603241c26c85b6cf426d1ad 100644 (file)
@@ -138,7 +138,7 @@ alcor_init_irq(void)
 
        for (i = 16; i < 48; ++i) {
                /* On Alcor, at least, lines 20..30 are not connected
-                  and can generate spurrious interrupts if we turn them
+                  and can generate spurious interrupts if we turn them
                   on while IRQ probing.  */
                if (i >= 16+20 && i <= 16+30)
                        continue;
index 14b5a753aba50ec40bb9a31e38e9824b9beee5a5..ee7b9009ebb4f45c19d50fbf93d0a762769e0154 100644 (file)
@@ -78,7 +78,7 @@ alphabook1_init_arch(void)
  * example, sound boards seem to like using IRQ 9.
  *
  * This is NOT how we should do it. PIRQ0-X should have
- * their own IRQ's, the way intel uses the IO-APIC irq's.
+ * their own IRQs, the way intel uses the IO-APIC IRQs.
  */
 
 static void __init
index 8698e0746f9fd594e4647aed11f6c772dd9885da..199f6efa83faa9d809faec8aab319672dc4eed4f 100644 (file)
@@ -5,7 +5,7 @@
  * in an architecture-specific manner due to speed..
  * Comments in other versions indicate that the algorithms are from RFC1071
  *
- * accellerated versions (and 21264 assembly versions ) contributed by
+ * accelerated versions (and 21264 assembly versions ) contributed by
  *     Rick Gorton     <rick.gorton@alpha-processor.com>
  */
  
index 4ca75c74ce908f99bc7aea0887c73a327e995b44..40736da9bea87aef7d5e43e4af8672d46a58ef9e 100644 (file)
@@ -2,7 +2,7 @@
  * csum_partial_copy - do IP checksumming and copy
  *
  * (C) Copyright 1996 Linus Torvalds
- * accellerated versions (and 21264 assembly versions ) contributed by
+ * accelerated versions (and 21264 assembly versions ) contributed by
  *     Rick Gorton     <rick.gorton@alpha-processor.com>
  *
  * Don't look at this too closely - you'll go mad. The things
index 5e6da47779a408afd3392689f434444f81ee2d9a..40c15e7301ded438baa46d83e67fcac06062efd6 100644 (file)
@@ -235,7 +235,7 @@ callback_init(void * kernel_end)
                        unsigned long pfn = crb->map[i].pa >> PAGE_SHIFT;
                        crb->map[i].va = vaddr;
                        for (j = 0; j < crb->map[i].count; ++j) {
-                               /* Newer console's (especially on larger
+                               /* Newer consoles (especially on larger
                                   systems) may require more pages of
                                   PTEs. Grab additional pages as needed. */
                                if (pmd != pmd_offset(pgd, vaddr)) {
index 6b97893c1a80c9547a89985298d874c2c4790f51..b2b87ae9a353a9c3370499592f0858133179d79a 100644 (file)
@@ -38,7 +38,7 @@ struct op_register_config {
        unsigned long need_reset;
 };
 
-/* Per-architecture configury and hooks.  */
+/* Per-architecture configuration and hooks.  */
 struct op_axp_model {
        void (*reg_setup) (struct op_register_config *,
                           struct op_counter_config *,
index 4cee938df01ef87e951613d54b6b23c890d6ade5..a0cdaafa115b65accca46e4fdf8a4307d4ee2408 100644 (file)
@@ -851,7 +851,7 @@ config KEXEC
        help
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
-         but it is indepedent of the system firmware.   And like a reboot
+         but it is independent of the system firmware.   And like a reboot
          you can start any kernel with it, not just Linux.
 
          It is an ongoing process to be certain the hardware in a machine
index ba4a1bb3ee4027c8dd51392abe670dd0e2ce3992..aa2d365c93fb65a7bbacd45263b77262b24b4b4a 100644 (file)
@@ -439,7 +439,7 @@ void __init at91_gpio_irq_setup(void)
                for (i = 0; i < 32; i++, pin++) {
                        /*
                         * Can use the "simple" and not "edge" handler since it's
-                        * shorter, and the AIC handles interupts sanely.
+                        * shorter, and the AIC handles interrupts sanely.
                         */
                        set_irq_chip(pin, &gpio_irqchip);
                        set_irq_handler(pin, handle_simple_irq);
index 0733078940faabf0703a086199cfd754c63a8a9e..1da9d59a0347049c5959fd48cdfdd36d1407023e 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (C) 2004 Nokia Corporation
  * Written by Tony Lindgren <tony@atomide.com>
- * Major cleanups by Juha Yrjölä <juha.yrjola@nokia.com>
+ * Major cleanups by Juha Yrjölä <juha.yrjola@nokia.com>
  *
  * Completely re-written to support various OMAP chips with bank specific
  * interrupt handlers.
index 62e801ef9ad9ef59ee91e920089b84dbefa8ba56..8d322c20ccaedd0e65f8537d376e2bceae3f42c4 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (C) 2005 Nokia Corporation
  * Author: Paul Mundt <paul.mundt@nokia.com>
- *         Juha Yrjölä <juha.yrjola@nokia.com>
+ *         Juha Yrjölä <juha.yrjola@nokia.com>
  * OMAP Dual-mode timer framework support by Timo Teras
  *
  * Some parts based off of TI's 24xx code:
index cab9d6265e9ee513d37cae781a89e068721df398..2bfaa61020254e3e1db8cc6ebee26a8450edec33 100644 (file)
@@ -238,7 +238,7 @@ int __init s3c2410_baseclk_add(void)
        }
 
        /* We must be careful disabling the clocks we are not intending to
-        * be using at boot time, as subsytems such as the LCD which do
+        * be using at boot time, as subsystems such as the LCD which do
         * their own DMA requests to the bus can cause the system to lockup
         * if they where in the middle of requesting bus access.
         *
index 8543dd6df391e17cbeb895beef52af22b0091fb9..458993601897044244a767bc357f21e0f1d183b1 100644 (file)
@@ -689,7 +689,7 @@ int __init s3c2412_baseclk_add(void)
        }
 
        /* We must be careful disabling the clocks we are not intending to
-        * be using at boot time, as subsytems such as the LCD which do
+        * be using at boot time, as subsystems such as the LCD which do
         * their own DMA requests to the bus can cause the system to lockup
         * if they where in the middle of requesting bus access.
         *
index 58402948c47cd6c9a7099ef1ec233577ed18f833..b42f956738d0fa3620051a5f36bf543c0723fffc 100644 (file)
@@ -1005,7 +1005,7 @@ void __init s3c2443_init_clocks(int xtal)
        }
 
        /* We must be careful disabling the clocks we are not intending to
-        * be using at boot time, as subsytems such as the LCD which do
+        * be using at boot time, as subsystems such as the LCD which do
         * their own DMA requests to the bus can cause the system to lockup
         * if they where in the middle of requesting bus access.
         *
index 0090b19bbe616203f2a94ec4987d5a596cfa1ae5..786e4c96156dcea95429d0ebca6fd9c0c2bfad23 100644 (file)
@@ -78,11 +78,11 @@ TABLE 1
 +-------------------------+---+---+---------+---------+
 |  Precision              | u | v | FPSR.EP | length  |
 +-------------------------+---+---+---------+---------+
-| Single                  | 0 ü 0 |    x    | 1 words |
-| Double                  | 1 ü 1 |    x    | 2 words |
-| Extended                | 1 ü 1 |    x    | 3 words |
-| Packed decimal          | 1 ü 1 |    0    | 3 words |
-| Expanded packed decimal | 1 ü 1 |    1    | 4 words |
+| Single                  | 0 | 0 |    x    | 1 words |
+| Double                  | 1 | 1 |    x    | 2 words |
+| Extended                | 1 | 1 |    x    | 3 words |
+| Packed decimal          | 1 | 1 |    0    | 3 words |
+| Expanded packed decimal | 1 | 1 |    1    | 4 words |
 +-------------------------+---+---+---------+---------+
 Note: x = don't care
 */
@@ -92,10 +92,10 @@ TABLE 2
 +---+---+---------------------------------+
 | w | x | Number of registers to transfer |
 +---+---+---------------------------------+
-| 0 ü 1 |  1                              |
-| 1 ü 0 |  2                              |
-| 1 ü 1 |  3                              |
-| 0 ü 0 |  4                              |
+| 0 | 1 |  1                              |
+| 1 | 0 |  2                              |
+| 1 | 1 |  3                              |
+| 0 | 0 |  4                              |
 +---+---+---------------------------------+
 */
 
@@ -156,10 +156,10 @@ TABLE 5
 +-------------------------+---+---+
 |  Rounding Precision     | e | f |
 +-------------------------+---+---+
-| IEEE Single precision   | 0 ü 0 |
-| IEEE Double precision   | 0 ü 1 |
-| IEEE Extended precision | 1 ü 0 |
-| undefined (trap)        | 1 ü 1 |
+| IEEE Single precision   | 0 | 0 |
+| IEEE Double precision   | 0 | 1 |
+| IEEE Extended precision | 1 | 0 |
+| undefined (trap)        | 1 | 1 |
 +-------------------------+---+---+
 */
 
@@ -168,10 +168,10 @@ TABLE 5
 +---------------------------------+---+---+
 |  Rounding Mode                  | g | h |
 +---------------------------------+---+---+
-| Round to nearest (default)      | 0 ü 0 |
-| Round toward plus infinity      | 0 ü 1 |
-| Round toward negative infinity  | 1 ü 0 |
-| Round toward zero               | 1 ü 1 |
+| Round to nearest (default)      | 0 | 0 |
+| Round toward plus infinity      | 0 | 1 |
+| Round toward negative infinity  | 1 | 0 |
+| Round toward zero               | 1 | 1 |
 +---------------------------------+---+---+
 */
 
index 05a38498cbe06c3527260a12186fda3d2732a7fc..dcbba07cf98aad648367b62b5d47bc2ba51b52e2 100644 (file)
@@ -2,7 +2,7 @@
  * linux/arch/arm/plat-omap/dma.c
  *
  * Copyright (C) 2003 Nokia Corporation
- * Author: Juha Yrjölä <juha.yrjola@nokia.com>
+ * Author: Juha Yrjölä <juha.yrjola@nokia.com>
  * DMA channel linking for 1610 by Samuel Ortiz <samuel.ortiz@nokia.com>
  * Graphics DMA and LCD DMA graphics tranformations
  * by Imre Deak <imre.deak@nokia.com>
index 337455dfe64d493e64746d62caf38e7d169e71d2..6097753394adaef923105fe47a6b6237fc1a27f7 100644 (file)
@@ -4,7 +4,7 @@
  * Support functions for OMAP GPIO
  *
  * Copyright (C) 2003-2005 Nokia Corporation
- * Written by Juha Yrjölä <juha.yrjola@nokia.com>
+ * Written by Juha Yrjölä <juha.yrjola@nokia.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
index d12346aaa88bdb19a76c54f1bd876657571271fa..bbecbd8469b59a449b6d525c1bc0725f81b7da29 100644 (file)
@@ -189,7 +189,7 @@ config CMDLINE
 
 endmenu
 
-menu "Power managment options"
+menu "Power management options"
 
 menu "CPU Frequency scaling"
 
index 4c5ca9d5e40f74f0083e21b7dd2cc1f0bdf78467..ad28dc76fc979f0a726fd6952f4761bdf436eab8 100644 (file)
@@ -613,85 +613,86 @@ config I_ENTRY_L1
        bool "Locate interrupt entry code in L1 Memory"
        default y
        help
-         If enabled interrupt entry code (STORE/RESTORE CONTEXT) is linked
-         into L1 instruction memory.(less latency)
+         If enabled, interrupt entry code (STORE/RESTORE CONTEXT) is linked
+         into L1 instruction memory. (less latency)
 
 config EXCPT_IRQ_SYSC_L1
-       bool "Locate entire ASM lowlevel excepetion / interrupt - Syscall and CPLB handler code in L1 Memory"
+       bool "Locate entire ASM lowlevel exception / interrupt - Syscall and CPLB handler code in L1 Memory"
        default y
        help
-         If enabled entire ASM lowlevel exception and interrupt entry code (STORE/RESTORE CONTEXT) is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the entire ASM lowlevel exception and interrupt entry code
+         (STORE/RESTORE CONTEXT) is linked into L1 instruction memory. 
+         (less latency)
 
 config DO_IRQ_L1
        bool "Locate frequently called do_irq dispatcher function in L1 Memory"
        default y
        help
-         If enabled frequently called do_irq dispatcher function is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the frequently called do_irq dispatcher function is linked
+         into L1 instruction memory. (less latency)
 
 config CORE_TIMER_IRQ_L1
        bool "Locate frequently called timer_interrupt() function in L1 Memory"
        default y
        help
-         If enabled frequently called timer_interrupt() function is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the frequently called timer_interrupt() function is linked
+         into L1 instruction memory. (less latency)
 
 config IDLE_L1
        bool "Locate frequently idle function in L1 Memory"
        default y
        help
-         If enabled frequently called idle function is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the frequently called idle function is linked
+         into L1 instruction memory. (less latency)
 
 config SCHEDULE_L1
        bool "Locate kernel schedule function in L1 Memory"
        default y
        help
-         If enabled frequently called kernel schedule is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the frequently called kernel schedule is linked
+         into L1 instruction memory. (less latency)
 
 config ARITHMETIC_OPS_L1
        bool "Locate kernel owned arithmetic functions in L1 Memory"
        default y
        help
-         If enabled arithmetic functions are linked
-         into L1 instruction memory.(less latency)
+         If enabled, arithmetic functions are linked
+         into L1 instruction memory. (less latency)
 
 config ACCESS_OK_L1
        bool "Locate access_ok function in L1 Memory"
        default y
        help
-         If enabled access_ok function is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the access_ok function is linked
+         into L1 instruction memory. (less latency)
 
 config MEMSET_L1
        bool "Locate memset function in L1 Memory"
        default y
        help
-         If enabled memset function is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the memset function is linked
+         into L1 instruction memory. (less latency)
 
 config MEMCPY_L1
        bool "Locate memcpy function in L1 Memory"
        default y
        help
-         If enabled memcpy function is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the memcpy function is linked
+         into L1 instruction memory. (less latency)
 
 config SYS_BFIN_SPINLOCK_L1
        bool "Locate sys_bfin_spinlock function in L1 Memory"
        default y
        help
-         If enabled sys_bfin_spinlock function is linked
-         into L1 instruction memory.(less latency)
+         If enabled, sys_bfin_spinlock function is linked
+         into L1 instruction memory. (less latency)
 
 config IP_CHECKSUM_L1
        bool "Locate IP Checksum function in L1 Memory"
        default n
        help
-         If enabled IP Checksum function is linked
-         into L1 instruction memory.(less latency)
+         If enabled, the IP Checksum function is linked
+         into L1 instruction memory. (less latency)
 
 config CACHELINE_ALIGNED_L1
        bool "Locate cacheline_aligned data to L1 Data Memory"
@@ -699,24 +700,24 @@ config CACHELINE_ALIGNED_L1
        default n if BF54x
        depends on !BF531
        help
-         If enabled cacheline_anligned data is linked
-         into L1 data memory.(less latency)
+         If enabled, cacheline_anligned data is linked
+         into L1 data memory. (less latency)
 
 config SYSCALL_TAB_L1
        bool "Locate Syscall Table L1 Data Memory"
        default n
        depends on !BF531
        help
-         If enabled the Syscall LUT is linked
-         into L1 data memory.(less latency)
+         If enabled, the Syscall LUT is linked
+         into L1 data memory. (less latency)
 
 config CPLB_SWITCH_TAB_L1
        bool "Locate CPLB Switch Tables L1 Data Memory"
        default n
        depends on !BF531
        help
-         If enabled the CPLB Switch Tables are linked
-         into L1 data memory.(less latency)
+         If enabled, the CPLB Switch Tables are linked
+         into L1 data memory. (less latency)
 
 endmenu
 
@@ -1029,13 +1030,13 @@ config DEBUG_HWERR
          from.
 
 config DEBUG_ICACHE_CHECK
-       bool "Check Instruction cache coherancy"
+       bool "Check Instruction cache coherency"
        depends on DEBUG_KERNEL
        depends on DEBUG_HWERR
        help
-         Say Y here if you are getting wierd unexplained errors. This will
-         ensure that icache is what SDRAM says it should be, by doing a
-         byte wise comparision between SDRAM and instruction cache. This
+         Say Y here if you are getting weird unexplained errors. This will
+         ensure that icache is what SDRAM says it should be by doing a
+         byte wise comparison between SDRAM and instruction cache. This
          also relocates the irq_panic() function to L1 memory, (which is
          un-cached).
 
index c7ea9efd01049875e9e8a46f99b779480d008189..f1ce6f64401dd45c4e375a466146790f53aeb8eb 100644 (file)
@@ -182,7 +182,7 @@ config ETRAX_LED7G
          set this to same as CONFIG_ETRAX_LED1G (normally 2).
 
 config ETRAX_LED8Y
-       int "Eigth yellow LED bit"
+       int "Eighth yellow LED bit"
        depends on ETRAX_CSP0_LEDS
        default "2"
        help
index ffb8d21b2f83f16c8020aabc5c90177b8083fb6e..e205d2e7e0897202aed04742d0ff3cd67b399960 100644 (file)
@@ -8,7 +8,7 @@
  *
  * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
  * puts by Nick Holloway 1993, better puts by Martin Mares 1995
- * adoptation for Linux/CRIS Axis Communications AB, 1999
+ * adaptation for Linux/CRIS Axis Communications AB, 1999
  * 
  */
 
index 1de0026bb94ef7255d7f693bbb7fec57e3979b43..c263b8232dbcdfa6148d026db5253a4effc3c6a2 100644 (file)
@@ -4,7 +4,7 @@
  * From Phillips' datasheet:
  *
  * The PCF8563 is a CMOS real-time clock/calendar optimized for low power
- * consumption. A programmable clock output, interupt output and voltage
+ * consumption. A programmable clock output, interrupt output and voltage
  * low detector are also provided. All address and data are transferred
  * serially via two-line bidirectional I2C-bus. Maximum bus speed is
  * 400 kbits/s. The built-in word address register is incremented
index 2b536ca6f4446f6fb1ecc64df9305d8eaa303104..93679a48c791528625cd4e3949ef2e13ad4504e4 100644 (file)
@@ -83,7 +83,7 @@
  *
  * Revision 1.4  2002/11/19 14:35:24  starvik
  * Changes from linux 2.4
- * Changed struct initializer syntax to the currently prefered notation
+ * Changed struct initializer syntax to the currently preferred notation
  *
  * Revision 1.3  2002/11/06 09:47:03  starvik
  * Modified for new interrupt macros
index ae45d4522e6551982c9c57ffbc318dce71918fc3..c5844cb70f095bc96333bc46f9b114db2f725439 100644 (file)
@@ -97,7 +97,7 @@
  *
  *  Revision 1.36  2001/11/22 13:36:36  bjornw
  *  * In ret_from_intr, check regs->dccr for usermode reentrance instead of
- *    DCCR explicitely (because the latter might not reflect current reality)
+ *    DCCR explicitly (because the latter might not reflect current reality)
  *  * In mmu_bus_fault, set $r9 _after_ calling the C-code instead of before
  *    since $r9 is call-clobbered and is potentially needed afterwards
  *
index 8cbdf594b36955373629baa9bf6cd7b4fe6a6493..d3ea052e5ee148581a64d451e45d3033ad23ea67 100644 (file)
@@ -84,7 +84,7 @@
  * with time based on jiffies and *R_TIMER0_DATA, uses a table
  * for fast conversion of timer value to microseconds.
  * (Much faster the standard do_gettimeofday() and we don't really
- * wan't to use the true time - we wan't the "uptime" so timers don't screw up
+ * want to use the true time - we want the "uptime" so timers don't screw up
  * when we change the time.
  * TODO: Add efficient support for continuous timers as well.
  *
index 96094cbf12552ff0d5115f8a643d014550971ad2..845c95f6e87117318511e164ada754c321d97b6d 100644 (file)
@@ -169,7 +169,7 @@ init_IRQ(void)
         for (i = 0; i < 256; i++)
                etrax_irv->v[i] = weird_irq;
 
-       /* Initialize IRQ handler descriptiors. */
+       /* Initialize IRQ handler descriptors. */
        for(i = 2; i < NR_IRQS; i++) {
                irq_desc[i].chip = &crisv10_irq_type;
                set_int_vector(i, interrupt[i]);
index 07628a13c6c492c8c9574caeefd5c5fca6c3a894..77f4b142372590a4bce1b8dcfbaf59e6f4ee2712 100644 (file)
@@ -959,7 +959,7 @@ stub_is_stopped(int sigval)
 
        /* Send register contents. We probably only need to send the
         * PC, frame pointer and stack pointer here. Other registers will be
-        * explicitely asked for. But for now, send all. 
+        * explicitly asked for. But for now, send all.
         */
        
        for (regno = R0; regno <= USP; regno++) {
index b6831ceb6a62ee35bfa4108c8a88c654909824a6..1a3760c94f8578444787fc9f2424814ba45f8aa7 100644 (file)
@@ -64,7 +64,7 @@ void hard_reset_now (void)
 #if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM)
        cause_of_death = 0xbedead;
 #else
-       /* Since we dont plan to keep on reseting the watchdog,
+       /* Since we dont plan to keep on resetting the watchdog,
           the key can be arbitrary hence three */
        *R_WATCHDOG = IO_FIELD(R_WATCHDOG, key, 3) |
                IO_STATE(R_WATCHDOG, enable, start);
index 38fd44dfbc5b3e506f2a9c85c2d6a7e6bfb350e1..326178aef6ee45f1172133b76f4663efc297bac5 100644 (file)
@@ -20,7 +20,7 @@ unsigned long r_timer_ctrl_shadow;
  * These are only usable if there actually IS a latch connected
  * to the corresponding external chip-select pin.
  *
- * A common usage is that CSP0 controls LED's and CSP4 video chips.
+ * A common usage is that CSP0 controls LEDs and CSP4 video chips.
  */
 
 unsigned long port_cse1_shadow;
index 9cf83932cd5dd60d5b4352be0241307966f3b1a4..6a6bdfd6984d6725db83d667f12116e7a380391d 100644 (file)
@@ -40,7 +40,7 @@
  * Copy warning from head.S about r8 and r9
  *
  * Revision 1.7  2001/04/18 12:05:39  bjornw
- * Fixed comments, and explicitely include config.h to be sure its there
+ * Fixed comments, and explicitly include config.h to be sure its there
  *
  * Revision 1.6  2001/04/10 06:20:16  starvik
  * Delay should be 200us, not 200ns
@@ -66,7 +66,7 @@
  */
 
 /* Just to be certain the config file is included, we include it here
- * explicitely instead of depending on it being included in the file that
+ * explicitly instead of depending on it being included in the file that
  * uses this code.
  */
 
index 8ffde4901b5730c9738b047c608926f9ceaa1f84..15d6662b03b17212e2f57fb2588a93e0ae247859 100644 (file)
@@ -41,7 +41,7 @@ void *memcpy(void *pdst,
      Make sure the compiler is able to make something useful of this.
       As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
 
-     If gcc was allright, it really would need no temporaries, and no
+     If gcc was alright, it really would need no temporaries, and no
      stack space to save stuff on. */
 
   register void *return_dst __asm__ ("r10") = pdst;
index 43778d53c254c7ae60044ba72203a8c486c59c73..a12c708afc9a46ad12d83ca1bcafa5ee22af449b 100644 (file)
@@ -38,7 +38,7 @@ __copy_user (void __user *pdst, const void *psrc, unsigned long pn)
      As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
 
      FIXME: Comment for old gcc version.  Check.
-     If gcc was allright, it really would need no temporaries, and no
+     If gcc was alright, it really would need no temporaries, and no
      stack space to save stuff on. */
 
   register char *dst __asm__ ("r13") = pdst;
@@ -200,7 +200,7 @@ __copy_user_zeroing (void __user *pdst, const void *psrc, unsigned long pn)
      As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
 
      FIXME: Comment for old gcc version.  Check.
-     If gcc was allright, it really would need no temporaries, and no
+     If gcc was alright, it really would need no temporaries, and no
      stack space to save stuff on.  */
 
   register char *dst __asm__ ("r13") = pdst;
@@ -380,7 +380,7 @@ __do_clear_user (void __user *pto, unsigned long pn)
       As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
 
      FIXME: Comment for old gcc version.  Check.
-     If gcc was allright, it really would need no temporaries, and no
+     If gcc was alright, it really would need no temporaries, and no
      stack space to save stuff on. */
 
   register char *dst __asm__ ("r13") = pto;
index 11902697196d3f19027905d8cde5d4b25ab696bf..0169ba1ca9c90172e83dc6ed8ad6899669c29fd7 100644 (file)
@@ -8,7 +8,7 @@
  *
  * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
  * puts by Nick Holloway 1993, better puts by Martin Mares 1995
- * adoptation for Linux/CRIS Axis Communications AB, 1999
+ * adaptation for Linux/CRIS Axis Communications AB, 1999
  *
  */
 
@@ -151,7 +151,7 @@ serout(const char *s, reg_scope_instances regi_ser)
        do {
                rs = REG_RD(ser, regi_ser, rs_stat_din);
        }
-       while (!rs.tr_rdy);/* Wait for tranceiver. */
+       while (!rs.tr_rdy);/* Wait for transceiver. */
 
        REG_WR(ser, regi_ser, rw_dout, dout);
 }
@@ -264,7 +264,7 @@ serial_setup(reg_scope_instances regi_ser)
        tr_ctrl.stop_bits = 1;  /* 2 stop bits. */
 
        /*
-        * The baudrate setup is a bit fishy, but in the end the tranceiver is
+        * The baudrate setup is a bit fishy, but in the end the transceiver is
         * set to 4800 and the receiver to 115200. The magic value is
         * 29.493 MHz.
         */
index 5180d45412fc55db169dc132988e5f7b93cadedc..3ec12ea44e8ede39efda94ac85b3c6562243c4e7 100644 (file)
@@ -205,7 +205,7 @@ static struct mtd_info *probe_cs(struct map_info *map_cs)
 /*
  * Probe each chip select individually for flash chips. If there are chips on
  * both cse0 and cse1, the mtd_info structs will be concatenated to one struct
- * so that MTD partitions can cross chip boundries.
+ * so that MTD partitions can cross chip boundaries.
  *
  * The only known restriction to how you can mount your chips is that each
  * chip select must hold similar flash chips. But you need external hardware
index e12f6cc6f4a2f24e12306011924f2f53db088e2a..f1edd2e359b2dcf3dac6a1fed0e6dd35d4000671 100644 (file)
@@ -275,7 +275,7 @@ i2c_getack(void)
                ack = 0;
        i2c_delay(CLOCK_HIGH_TIME/2);
        if(!ack){
-               if(!i2c_getbit()) /* receiver pulld SDA low */
+               if(!i2c_getbit()) /* receiver pulled SDA low */
                        ack = 1;
                i2c_delay(CLOCK_HIGH_TIME/2);
        }
index 93ddea4d956490640a95da0ca2676ac1e2678958..5ce015c6bb0dec899179d281b813cf0c5edb9576 100644 (file)
@@ -138,7 +138,7 @@ struct mtd_info* __init crisv32_nand_flash_probe (void)
        /* Enable the following for a flash based bad block table */
        this->options = NAND_USE_FLASH_BBT;
 
-       /* Scan to find existance of the device */
+       /* Scan to find existence of the device */
        if (nand_scan (crisv32_mtd, 1)) {
                err = -ENXIO;
                goto out_ior;
index da479a14f8369dc9d9e13750c93ec1c380bdf6ea..6dbd700d3d667c3dc9d06f3390d01b509ce91433 100644 (file)
@@ -4,7 +4,7 @@
  * From Phillips' datasheet:
  *
  * The PCF8563 is a CMOS real-time clock/calendar optimized for low power
- * consumption. A programmable clock output, interupt output and voltage
+ * consumption. A programmable clock output, interrupt output and voltage
  * low detector are also provided. All address and data are transferred
  * serially via two-line bidirectional I2C-bus. Maximum bus speed is
  * 400 kbits/s. The built-in word address register is incremented
index 79e1e4c2ca1d6a11a6cf80d339def48faf9f4521..b40551f9f40dce0a4f771d63cc6e738126ad6477 100644 (file)
@@ -97,7 +97,7 @@
  * with time based on jiffies and *R_TIMER0_DATA, uses a table
  * for fast conversion of timer value to microseconds.
  * (Much faster the standard do_gettimeofday() and we don't really
- * wan't to use the true time - we wan't the "uptime" so timers don't screw up
+ * want to use the true time - we want the "uptime" so timers don't screw up
  * when we change the time.
  * TODO: Add efficient support for continuous timers as well.
  *
index cc361bf578aef8ae4907491b87ec265f9b5c3c30..a9acaa270243f9fb64b0aefc7eefdf895e39ca3c 100644 (file)
@@ -140,7 +140,7 @@ block_irq(int irq, int cpu)
         spin_lock_irqsave(&irq_lock, flags);
         intr_mask = REG_RD_INT(intr_vect, irq_regs[cpu], rw_mask);
 
-       /* Remember; 1 let thru, 0 block. */
+       /* Remember; 1 let through, 0 block. */
        intr_mask &= ~(1 << (irq - FIRST_IRQ));
 
        REG_WR_INT(intr_vect, irq_regs[cpu], rw_mask, intr_mask);
@@ -156,7 +156,7 @@ unblock_irq(int irq, int cpu)
         spin_lock_irqsave(&irq_lock, flags);
         intr_mask = REG_RD_INT(intr_vect, irq_regs[cpu], rw_mask);
 
-       /* Remember; 1 let thru, 0 block. */
+       /* Remember; 1 let through, 0 block. */
        intr_mask |= (1 << (irq - FIRST_IRQ));
 
        REG_WR_INT(intr_vect, irq_regs[cpu], rw_mask, intr_mask);
@@ -308,7 +308,7 @@ crisv32_do_multiple(struct pt_regs* regs)
         */
        irq_enter();
 
-       /* Get which IRQs that happend. */
+       /* Get which IRQs that happened. */
        masked = REG_RD_INT(intr_vect, irq_regs[cpu], r_masked_vect);
 
        /* Calculate new IRQ mask with these IRQs disabled. */
@@ -366,7 +366,7 @@ init_IRQ(void)
        for (i = 0; i < 256; i++)
                etrax_irv->v[i] = weird_irq;
 
-       /* Point all IRQ's to bad handlers. */
+       /* Point all IRQs to bad handlers. */
        for (i = FIRST_IRQ, j = 0; j < NR_IRQS; i++, j++) {
                irq_desc[j].chip = &crisv32_irq_type;
                set_exception_vector(i, interrupt[j]);
index 6326351af2528300ec01f287ed3bff40d4019ac8..b72a15580dc73a674ab832e5184939ebe42ec25f 100644 (file)
@@ -162,7 +162,7 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
        /* Put the switch stack right below the pt_regs. */
        swstack = ((struct switch_stack *) childregs) - 1;
 
-       /* Paramater to ret_from_sys_call. 0 is don't restart the syscall. */
+       /* Parameter to ret_from_sys_call. 0 is don't restart the syscall. */
        swstack->r9 = 0;
 
        /*
index 7cd6ac80340940300defd4f75ce48be1629461e9..024cc690197450a27f563915c5fc4bcfa98927cc 100644 (file)
@@ -347,7 +347,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
 /* Grab and setup a signal frame.
  *
  * Basically a lot of state-info is stacked, and arranged for the
- * user-mode program to return to the kernel using either a trampiline
+ * user-mode program to return to the kernel using either a trampoline
  * which performs the syscall sigreturn(), or a provided user-mode
  * trampoline.
   */
@@ -641,7 +641,7 @@ ugdb_trap_user(struct thread_info *ti, int sig)
                user_regs(ti)->spc = 0;
        }
        /* FIXME: Filter out false h/w breakpoint hits (i.e. EDA
-          not withing any configured h/w breakpoint range). Synchronize with
+          not within any configured h/w breakpoint range). Synchronize with
           what already exists for kernel debugging.  */
        if (((user_regs(ti)->exs & 0xff00) >> 8) == BREAK_8_INTR_VECT) {
                /* Break 8: subtract 2 from ERP unless in a delay slot. */
index 697494bc2de1ef360b47e811b740e48ae9fe7c55..171c96e0a5d35a770c01a3630a5a8bc2b14e436c 100644 (file)
@@ -142,7 +142,7 @@ smp_boot_one_cpu(int cpuid)
        return -1;
 }
 
-/* Secondary CPUs starts uing C here. Here we need to setup CPU
+/* Secondary CPUs starts using C here. Here we need to setup CPU
  * specific stuff such as the local timer and the MMU. */
 void __init smp_callin(void)
 {
index be0a01657d4fc88076e120b88264977acd25d2ed..2f7e8e200f2cdd033a387eb96a0baa9b5f91ddd6 100644 (file)
@@ -99,7 +99,7 @@ unsigned long do_slow_gettimeoffset(void)
 /* From timer MDS describing the hardware watchdog:
  * 4.3.1 Watchdog Operation
  * The watchdog timer is an 8-bit timer with a configurable start value.
- * Once started the whatchdog counts downwards with a frequency of 763 Hz
+ * Once started the watchdog counts downwards with a frequency of 763 Hz
  * (100/131072 MHz). When the watchdog counts down to 1, it generates an
  * NMI (Non Maskable Interrupt), and when it counts down to 0, it resets the
  * chip.
index 2462b1ef1fbba56fe13e559bf09caa03424f4821..17fd3dbd1c80ed3daa804f1f9b29bcc8a1abc4f5 100644 (file)
@@ -105,7 +105,7 @@ bad_value:
 
 /*
  * This gets called from entry.S when the watchdog has bitten. Show something
- * similiar to an Oops dump, and if the kernel if configured to be a nice doggy;
+ * similar to an Oops dump, and if the kernel is configured to be a nice doggy;
  * halt instead of reboot.
  */
 void
index 158b3dbb4d9d91a67b499afb057db5206d88585d..218fbe259ee50eab7e5efec576606a9895e3fd66 100644 (file)
@@ -12,7 +12,7 @@
  */
 
 /* Just to be certain the config file is included, we include it here
- * explicitely instead of depending on it being included in the file that
+ * explicitly instead of depending on it being included in the file that
  * uses this code.
  */
 
index 98e282ac824af373cf75c85e252518ada91ded77..6740b2cebae5169d05a09d69ad5f99851394d8bc 100644 (file)
@@ -41,7 +41,7 @@ void *memcpy(void *pdst,
      Make sure the compiler is able to make something useful of this.
       As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
 
-     If gcc was allright, it really would need no temporaries, and no
+     If gcc was alright, it really would need no temporaries, and no
      stack space to save stuff on. */
 
   register void *return_dst __asm__ ("r10") = pdst;
index f0b08460c1be59e96466da1571ad5f0cd4bd8683..04d0cf35a2761b531c1350c58ecf36e081961fb7 100644 (file)
@@ -34,7 +34,7 @@ __copy_user (void __user *pdst, const void *psrc, unsigned long pn)
      As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
 
      FIXME: Comment for old gcc version.  Check.
-     If gcc was allright, it really would need no temporaries, and no
+     If gcc was alright, it really would need no temporaries, and no
      stack space to save stuff on. */
 
   register char *dst __asm__ ("r13") = pdst;
@@ -168,7 +168,7 @@ __copy_user_zeroing (void __user *pdst, const void *psrc, unsigned long pn)
      As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
 
      FIXME: Comment for old gcc version.  Check.
-     If gcc was allright, it really would need no temporaries, and no
+     If gcc was alright, it really would need no temporaries, and no
      stack space to save stuff on.  */
 
   register char *dst __asm__ ("r13") = pdst;
@@ -332,7 +332,7 @@ __do_clear_user (void __user *pto, unsigned long pn)
       As it is now: r10 -> r13; r11 -> r11 (nop); r12 -> r12 (nop).
 
      FIXME: Comment for old gcc version.  Check.
-     If gcc was allright, it really would need no temporaries, and no
+     If gcc was alright, it really would need no temporaries, and no
      stack space to save stuff on. */
 
   register char *dst __asm__ ("r13") = pto;
index c2d12e9c40d79a2e5720837bdaca10bebd07693c..a076ef6e93893756436d32f6ef15927a33b642bd 100644 (file)
@@ -30,8 +30,8 @@ do {                                          \
  * The TLB can host up to 256 different mm contexts at the same time. The running
  * context is found in the PID register. Each TLB entry contains a page_id that
  * has to match the PID register to give a hit. page_id_map keeps track of which
- * mm's is assigned to which page_id's, making sure it's known when to
- * invalidate TLB entries.
+ * mm is assigned to which page_id, making sure it's known when to invalidate TLB
+ * entries.
  *
  * The last page_id is never running, it is used as an invalid page_id so that
  * it's possible to make TLB entries that will nerver match.
@@ -188,7 +188,7 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
        spin_unlock(&mmu_context_lock);
 
        /*
-        * Remember the pgd for the fault handlers. Keep a seperate copy of it
+        * Remember the pgd for the fault handlers. Keep a separate copy of it
         * because current and active_mm might be invalid at points where
         * there's still a need to derefer the pgd.
         */
index 903ea62c6e21b6ac5fa6ed899cba5c5c261b6015..5c27ff86121b9c40ccb39a60b9e3772d52c8a331 100644 (file)
@@ -7,7 +7,7 @@
  *      Authors: Bjorn Wesen (bjornw@axis.com)
  *
  * This file contains the code used by various IRQ handling routines:
- * asking for different IRQ's should be done through these routines
+ * asking for different IRQs should be done through these routines
  * instead of just grabbing them. Thus setups with different IRQ numbers
  * shouldn't result in any weird surprises, and installing new handlers
  * should be easier.
@@ -15,7 +15,7 @@
  */
 
 /*
- * IRQ's are in fact implemented a bit like signal handlers for the kernel.
+ * IRQs are in fact implemented a bit like signal handlers for the kernel.
  * Naturally it's not a 1:1 relation, but there are similarities.
  */
 
@@ -83,9 +83,9 @@ skip:
 
 
 /* called by the assembler IRQ entry functions defined in irq.h
- * to dispatch the interrupts to registred handlers
+ * to dispatch the interrupts to registered handlers
  * interrupts are disabled upon entry - depending on if the
- * interrupt was registred with IRQF_DISABLED or not, interrupts
+ * interrupt was registered with IRQF_DISABLED or not, interrupts
  * are re-enabled or not.
  */
 
index 8aab814306955a68a150a2453cfcb72f62c2441f..3034f3ff950c6014f807ad03a898b1619ac9669c 100644 (file)
@@ -13,7 +13,7 @@
  *  Fixed warning.
  *
  *  Revision 1.18  2005/01/12 08:10:14  starvik
- *  Readded the change of frametype when handling kernel page fault fixup
+ *  Re-added the change of frametype when handling kernel page fault fixup
  *  for v10. This is necessary to avoid that the CPU remakes the faulting
  *  access.
  *
@@ -49,7 +49,7 @@
  *
  *  Revision 1.8  2003/07/04 13:02:48  tobiasa
  *  Moved code snippet from arch/cris/mm/fault.c that searches for fixup code
- *  to seperate function in arch-specific files.
+ *  to separate function in arch-specific files.
  *
  *  Revision 1.7  2003/01/22 06:48:38  starvik
  *  Fixed warnings issued by GCC 3.2.1
index b7842ff213a6688f3e675e5c39b78bf311a34c12..0c833d176226516c6d664ef20c4aa36e4a387c18 100644 (file)
@@ -8,7 +8,7 @@
  *
  *  $Log: init.c,v $
  *  Revision 1.11  2004/05/28 09:28:56  starvik
- *  Calculation of loops_per_usec moved because initalization order has changed
+ *  Calculation of loops_per_usec moved because initialization order has changed
  *  in Linux 2.6.
  *
  *  Revision 1.10  2004/05/14 07:58:05  starvik
index c4a98e2e529e04dd46b85ff768bdabad3df8d1a4..b7f8de576777f83ab8f9c7f2e75c125b2d88822b 100644 (file)
@@ -16,7 +16,7 @@
 /* The TLB can host up to 64 different mm contexts at the same time.
  * The running context is R_MMU_CONTEXT, and each TLB entry contains a
  * page_id that has to match to give a hit. In page_id_map, we keep track
- * of which mm's we have assigned which page_id's, so that we know when
+ * of which mm we have assigned to which page_id, so that we know when
  * to invalidate TLB entries.
  *
  * The last page_id is never running - it is used as an invalid page_id
index 7ddb69089ed47c1373cad3e65a517cb2833d33e0..73abae767fdc8a089c468372ba7ae499a21f65f2 100644 (file)
@@ -134,7 +134,7 @@ static struct irq_chip frv_cpu_pic = {
 };
 
 /*
- * handles all normal device IRQ's
+ * handles all normal device IRQs
  * - registers are referred to by the __frame variable (GR28)
  * - IRQ distribution is complicated in this arch because of the many PICs, the
  *   way they work and the way they cascade
index 8e182ced1a0f028d1020e5f44df4da8e5512722c..7ee3a147b47143cefb3b8c184727edaf933c1117 100644 (file)
@@ -139,7 +139,7 @@ void __up(struct semaphore *sem)
        waiter = list_entry(sem->wait_list.next, struct sem_waiter, list);
 
        /* We must be careful not to touch 'waiter' after we set ->task = NULL.
-        * It is an allocated on the waiter's stack and may become invalid at
+        * It is allocated on the waiter's stack and may become invalid at
         * any time after that point (due to a wakeup from another source).
         */
        list_del_init(&waiter->list);
index e83e0bccfab98d50af92d125e133ef8b275973fd..925fb0199a0f21cc8df27e2cbaf137b67a7a3d47 100644 (file)
@@ -66,7 +66,7 @@ static irqreturn_t timer_interrupt(int irq, void *dummy)
        /*
         * Here we are in the timer irq handler. We just have irqs locally
         * disabled but we don't know if the timer_bh is running on the other
-        * CPU. We need to avoid to SMP race with it. NOTE: we don' t need
+        * CPU. We need to avoid to SMP race with it. NOTE: we don't need
         * the irq version of write_lock because as just said we have irq
         * locally disabled. -arca
         */
@@ -126,7 +126,7 @@ void time_init(void)
 
        /* FIX by dqg : Set to zero for platforms that don't have tod */
        /* without this time is undefined and can overflow time_t, causing  */
-       /* very stange errors */
+       /* very strange errors */
        year = 1980;
        mon = day = 1;
        hour = min = sec = 0;
index 996d97e953b07e2508ecc888717add2665a38cef..ee671c3f2c743eac455f2ac0b94fc798a2020c1c 100644 (file)
@@ -42,16 +42,16 @@ config SH_STANDARD_BIOS
          Require eCos/RedBoot
 
 config DEFAULT_CMDLINE
-       bool "Use buildin commandline"
+       bool "Use builtin commandline"
        default n
        help
-         buildin kernel commandline enabled.
+         builtin kernel commandline enabled.
 
 config KERNEL_COMMAND
        string "Buildin commmand string"
        depends on DEFAULT_CMDLINE
        help
-         buildin kernel commandline strings.
+         builtin kernel commandline strings.
 
 config BLKDEV_RESERVE
        bool "BLKDEV Reserved Memory"
index 43d21e93f41ff734eff4805399765232f9c723d6..8dec4dd57b4e06ff44f26da88a0f9d89d8b954da 100644 (file)
@@ -68,7 +68,7 @@ static void h8300_shutdown_irq(unsigned int irq)
 }
 
 /*
- * h8300 interrupt controler implementation
+ * h8300 interrupt controller implementation
  */
 struct irq_chip h8300irq_chip = {
        .name           = "H8300-INTC",
index 330638220a2e92792a692ba5d6b9ee95fac43bad..e37c835e67cf2bee6538e07a50913d08cb7a6eca 100644 (file)
@@ -53,7 +53,7 @@ void time_init(void)
 
        /* FIX by dqg : Set to zero for platforms that don't have tod */
        /* without this time is undefined and can overflow time_t, causing  */
-       /* very stange errors */
+       /* very strange errors */
        year = 1980;
        mon = day = 1;
        hour = min = sec = 0;
index f97183011c2cb501ccf6cb07de9d12a87e00d93a..f8f7d7ea97f17298522e599d22ce4e388cc5009a 100644 (file)
@@ -5,7 +5,7 @@
  * Cloned from Linux/m68k.
  *
  * No original Copyright holder listed,
- * Probabily original (C) Roman Zippel (assigned DJD, 1999)
+ * Probable original (C) Roman Zippel (assigned DJD, 1999)
  *
  * Copyright 1999-2000 D. Jeff Dionne, <jeff@rt-control.com>
  *
index a71d6e2a3919d1075785fa9bf4101d4d47b7cab5..551fd5f30d826ae0a25ab015100c18d9d0b3d4c4 100644 (file)
@@ -179,7 +179,7 @@ int request_irq(unsigned int irq,
        if (use_kmalloc)
                irq_handle = kmalloc(sizeof(irq_handler_t), GFP_ATOMIC);
        else {
-               /* use bootmem allocater */
+               /* use bootmem allocator */
                irq_handle = (irq_handler_t *)alloc_bootmem(sizeof(irq_handler_t));
                irq_handle = (irq_handler_t *)((unsigned long)irq_handle | 0x80000000);
        }
index 93395d2a8a0795808f54d3e4d90e9630079921b7..faa8a459d95268a869208df0b964136e137812c1 100644 (file)
@@ -63,7 +63,7 @@ static const struct irq_pins irq_assign_table1[16]={
        {H8300_GPIO_P2,H8300_GPIO_B6},{H8300_GPIO_P2,H8300_GPIO_B7},
 };
 
-/* IRQ to GPIO pinno transrate */
+/* IRQ to GPIO pin translation */
 #define IRQ_GPIO_MAP(irqbit,irq,port,bit)                        \
 do {                                                             \
        if (*(volatile unsigned short *)ITSR & irqbit) {          \
index d0a4ea1ba14d166d83c60fd269b1595d101bb742..f6e44fc5283c4d1684f9ee3eac98ed373f92f7a4 100644 (file)
@@ -392,7 +392,7 @@ config X86_MCE_NONFATAL
          will look at the machine check registers to see if anything happened.
          Non-fatal problems automatically get corrected (but still logged).
          Disable this if you don't want to see these messages.
-         Seeing the messages this option prints out may be indicative of dying hardware,
+         Seeing the messages this option prints out may be indicative of dying
          or out-of-spec (ie, overclocked) hardware.
          This option only does something on certain CPUs.
          (AMD Athlon/Duron and Intel Pentium 4)
@@ -631,7 +631,7 @@ config NUMA
        default n if X86_PC
        default y if (X86_NUMAQ || X86_SUMMIT)
        help
-         NUMA support for i386. This is currently high experimental
+         NUMA support for i386. This is currently highly experimental
          and should be only used for kernel development. It might also
          cause boot failures.
 
@@ -1080,7 +1080,7 @@ config APM_REAL_MODE_POWER_OFF
 
 endif # APM
 
-source "arch/x86/kernel/cpu/cpufreq/Kconfig"
+source "arch/x86/kernel/cpu/cpufreq/Kconfig_32"
 
 source "drivers/cpuidle/Kconfig"
 
index f036d2dee3def4508411ebb9401e06e433039303..b88e47ca3032e8efc7f10dddebc3d12eb87e5f84 100644 (file)
@@ -102,7 +102,7 @@ core-$(CONFIG_XEN)          += arch/x86/xen/
 # default subarch .h files
 mflags-y += -Iinclude/asm-x86/mach-default
 
-head-y := arch/x86/kernel/head_32.o arch/x86/kernel/init_task_32.o
+head-y := arch/x86/kernel/head_32.o arch/x86/kernel/init_task.o
 
 libs-y                                         += arch/x86/lib/
 core-y                                 += arch/x86/kernel/ \
@@ -131,9 +131,9 @@ all: bzImage
 zImage zlilo zdisk: KBUILD_IMAGE := arch/x86/boot/zImage
 
 zImage bzImage: vmlinux
-       $(Q)mkdir -p $(objtree)/arch/i386/boot
-       $(Q)ln -fsn $(objtree)/arch/x86/boot/bzImage $(objtree)/arch/i386/boot/bzImage
        $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE)
+       $(Q)mkdir -p $(objtree)/arch/i386/boot
+       $(Q)ln -fsn ../../x86/boot/bzImage $(objtree)/arch/i386/boot/bzImage
 
 compressed: zImage
 
index c89108e9770dbea0c29a21a25ea8d422b995bf78..bef47725d4ad461310e181d98fb3d04aa214b061 100644 (file)
@@ -452,9 +452,9 @@ config IA64_PALINFO
 config IA64_MC_ERR_INJECT
        tristate "MC error injection support"
        help
-         Selets whether support for MC error injection. By enabling the
-         support, kernel provide sysfs interface for user application to
-         call MC error injection PAL procedure to inject various errors.
+         Adds support for MC error injection. If enabled, the kernel 
+         will provide a sysfs interface for user applications to
+         call MC error injection PAL procedures to inject various errors.
          This is a useful tool for MCA testing.
 
          If you're unsure, do not select this option.
@@ -491,7 +491,7 @@ config KEXEC
          but it is independent of the system firmware.   And like a reboot
          you can start any kernel with it, not just Linux.
 
-         The name comes from the similiarity to the exec system call.
+         The name comes from the similarity to the exec system call.
 
          It is an ongoing process to be certain the hardware in a machine
          is properly shutdown, so do not be surprised if this code does not
index f8d8650383e0e6ecb09dd6d36a9ff42df69e3731..d0c5b0b7da2f0f571fa8e37c44b5f1a41ac5f363 100644 (file)
@@ -71,7 +71,7 @@ skip:
 }
 
 /*
- * do_IRQ handles all normal device IRQ's (the special
+ * do_IRQ handles all normal device IRQs (the special
  * SMP cross-CPU interrupts have their own specific
  * handlers).
  */
index 916faf6070af7d1a29b1c91f7a875166ccef88d1..a753d79c4e894f1fe2cd04429e28c6e4c103165f 100644 (file)
@@ -358,7 +358,7 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
 
        signr = get_signal_to_deliver(&info, &ka, regs, NULL);
        if (signr > 0) {
-               /* Reenable any watchpoints before delivering the
+               /* Re-enable any watchpoints before delivering the
                 * signal to user space. The processor register will
                 * have been cleared if the watchpoint triggered
                 * inside the kernel.
index 360129174b2bd17aaeed1fcc37c91e80a8100d05..c837bc13b015d01a72b9ec671c07b1144045d5b2 100644 (file)
@@ -202,7 +202,7 @@ void smp_flush_cache_all_interrupt(void)
 }
 
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-/* TLB flush request Routin                                                */
+/* TLB flush request Routines                                                */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 
 /*==========================================================================*
@@ -378,7 +378,7 @@ void smp_flush_tlb_page(struct vm_area_struct *vma, unsigned long va)
  * Name:         flush_tlb_others
  *
  * Description:  This routine requests other CPU to execute flush TLB.
- *               1.Setup parmeters.
+ *               1.Setup parameters.
  *               2.Send 'INVALIDATE_TLB_IPI' to other CPU.
  *                 Request other CPU to execute 'smp_invalidate_interrupt()'.
  *               3.Wait for other CPUs operation finished.
@@ -502,7 +502,7 @@ void smp_invalidate_interrupt(void)
 }
 
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-/* Stop CPU request Routins                                                 */
+/* Stop CPU request Routines                                                 */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 
 /*==========================================================================*
@@ -566,7 +566,7 @@ static void stop_this_cpu(void *dummy)
 }
 
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-/* Call function Routin                                                    */
+/* Call function Routines                                                    */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 
 /*==========================================================================*
@@ -690,7 +690,7 @@ void smp_call_function_interrupt(void)
 }
 
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-/* Timer Routin                                                            */
+/* Timer Routines                                                            */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 
 /*==========================================================================*
@@ -802,7 +802,7 @@ void smp_local_timer_interrupt(void)
 }
 
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-/* Send IPI Routin                                                         */
+/* Send IPI Routines                                                         */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 
 /*==========================================================================*
@@ -814,7 +814,7 @@ void smp_local_timer_interrupt(void)
  *
  * Arguments:    ipi_num - Number of IPI
  *               try -  0 : Send IPI certainly.
- *                     !0 : The following IPI is not sended when Target CPU
+ *                     !0 : The following IPI is not sent when Target CPU
  *                          has not received the before IPI.
  *
  * Returns:      void (cannot fail)
@@ -844,7 +844,7 @@ void send_IPI_allbutself(int ipi_num, int try)
  * Arguments:    cpu_mask - Bitmap of target CPUs logical ID
  *               ipi_num - Number of IPI
  *               try -  0 : Send IPI certainly.
- *                     !0 : The following IPI is not sended when Target CPU
+ *                     !0 : The following IPI is not sent when Target CPU
  *                          has not received the before IPI.
  *
  * Returns:      void (cannot fail)
@@ -885,7 +885,7 @@ static void send_IPI_mask(cpumask_t cpumask, int ipi_num, int try)
  * Arguments:    cpu_mask - Bitmap of target CPUs physical ID
  *               ipi_num - Number of IPI
  *               try -  0 : Send IPI certainly.
- *                     !0 : The following IPI is not sended when Target CPU
+ *                     !0 : The following IPI is not sent when Target CPU
  *                          has not received the before IPI.
  *
  * Returns:      IPICRi regster value.
index 9dae410014d821c7d773ea65ba2441387538b1a3..0e383da158e95c3a84dfc7ffecb14f94b6325395 100644 (file)
@@ -133,7 +133,7 @@ static void map_cpu_to_physid(int, int);
 static void unmap_cpu_to_physid(int, int);
 
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-/* Boot up APs Routins : BSP                                                 */
+/* Boot up APs Routines : BSP                                                */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 void __devinit smp_prepare_boot_cpu(void)
 {
@@ -404,7 +404,7 @@ void __init smp_cpus_done(unsigned int max_cpus)
 }
 
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-/* Activate a secondary processor Routin                                   */
+/* Activate a secondary processor Routines                                   */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 
 /*==========================================================================*
@@ -509,7 +509,7 @@ static void __init smp_online(void)
 }
 
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-/* Boot up CPUs common Routin                                              */
+/* Boot up CPUs common Routines                                              */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 static void __init show_mp_info(int nr_cpu)
 {
index 0fc2efec18f635f91f8191cebf001bd22dce7642..6d7a80fdad488676b8e69c43b0db180e68baf823 100644 (file)
@@ -214,7 +214,7 @@ asmlinkage int sys_uname(struct old_utsname __user * name)
 
 asmlinkage int sys_cacheflush(void *addr, int bytes, int cache)
 {
-       /* This should flush more selectivly ...  */
+       /* This should flush more selectively ...  */
        _flush_cache_all();
        return 0;
 }
index fc57c6e72acf10d2bd30997f25cc222488f07813..186662ca1a89dd0603d8df5e9865b9d62dddbb32 100644 (file)
@@ -33,7 +33,7 @@ void pcmcia_reset(void)
 
 
 /* copy a tuple, including tuple header. return nb bytes copied */
-/* be carefull as this may trigger a GAYLE_IRQ_WR interrupt ! */
+/* be careful as this may trigger a GAYLE_IRQ_WR interrupt ! */
 
 int pcmcia_copy_tuple(unsigned char tuple_id, void *tuple, int max_len)
 {
index c1e712dfc2e7abff08c0e8f8f19cf9845c9ba343..ba96596910fd99b0ede9e263b9d352ec68c07cd9 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index b7e644b94ae2338eb416fbdfce5873c1724d6512..1a63913daa16b5908863ce2d4f72beb44f130a65 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index e3bced429bd3a8f46c480f7772d93bbe604be324..f6f8f5c59419458a643aad58f3d2fe9b2e6ae0e8 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index 5e5900cb2dc4897fde603f8c98cf9a8955fc12c8..1ba3aef1500f72ff7148858e77353d3e54301c64 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index fb637c4367626592fd6287809c6349c8839f60ab..89730a934c5ef488d40f546f7ae62a32371661d8 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index 408315209e62c12b9166761096fda8924267f82e..23d513f72ed9a16648253c21e75ee00f5d6712ea 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index a45a4ff9d2af09b2c7e25de23f1406a06205728b..0a1ae4f44130f4a1a8ed502314431f68d51eb360 100644 (file)
@@ -4,7 +4,7 @@
 |M68060 Software Package
 |Production Release P1.00 -- October 10, 1994
 |
-|M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+|M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 |
 |THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 |To the maximum extent permitted by applicable law,
index f6fae6d900ae17f4987edc23dbfcfa2d0c5ccd92..4e6292f095aaa05689547d624ed77278608ea2d0 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index b2dbdf5ee3090ba7359eda1fcdca7971aa76ecae..91a9c65fee8a9568b1bd1be5256b767d31476d9f 100644 (file)
@@ -4,7 +4,7 @@
 |M68060 Software Package
 |Production Release P1.00 -- October 10, 1994
 |
-|M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+|M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 |
 |THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 |To the maximum extent permitted by applicable law,
index 5a90fded3f0b0e5e06334a996bb2030fd7a1d4cf..9dadd727fc50717c1c9850b33a1635e5527444fd 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index aa4df87a6c4271d6beb6fd0f04d0628f2b7646d8..7a0d6e42806656a59f7b5da80f019aed1d1626c6 100644 (file)
@@ -4,7 +4,7 @@
 |M68060 Software Package
 |Production Release P1.00 -- October 10, 1994
 |
-|M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+|M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 |
 |THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 |To the maximum extent permitted by applicable law,
index fdb79b927ef1671e63f1a1bf9b73487b524adc8e..3b7ea2dc9f1bbf098fe6cf03fdffeb1bb934e5ab 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index 3b597a9bbf438272f0c9f15bfc49ac3c89891efe..6c1a9a217887d01208562323ab4ec999dc5253ee 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index 2edcbae0fd53a18c893dc20a8ffa78771286bab9..1f947915d81e1d945a6aa36014e45c7b9e707376 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index afa7422cddb5b3de87ef6940b76d4634e5385769..970abaf3303e037184fb8bde424ee67624c0f125 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index b269091d9df65ddb9c99c8532a0ec60c6a21e4e8..6dccda766e22be661235d9af581cdae7f86b6772 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index ba4a30cbcbeaee303fa2c99f4f7b40fb0567ea90..beca47e7d514891ed31bee07c649d4a6e79d8eec 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index 0c997c436bebe0040352b6a1b7980438a37a1880..51b9f7d879dd714d677b9c04fd0ac0a3795316a7 100644 (file)
@@ -4,7 +4,7 @@ M68000 Hi-Performance Microprocessor Division
 M68060 Software Package
 Production Release P1.00 -- October 10, 1994
 
-M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
+M68060 Software Package Copyright Â© 1993, 1994 Motorola Inc.  All rights reserved.
 
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
index 8547dbc5e8d73335a9b78a2bb37a1e416ac37b8f..01b468b9392ec68cb1aade95d598adb06a51cdc5 100644 (file)
@@ -284,7 +284,7 @@ static struct mac_model mac_data_table[] = {
        },
 
        /*
-        *      Weirdified MacII hardware - all subtley different. Gee thanks
+        *      Weirdified MacII hardware - all subtly different. Gee thanks
         *      Apple. All these boxes seem to have VIA2 in a different place to
         *      the MacII (+1A000 rather than +4000)
         * CSA: see http://developer.apple.com/technotes/hw/hw_09.html
@@ -707,7 +707,7 @@ static struct mac_model mac_data_table[] = {
         * All of these probably have onboard SONIC in the Dock which
         * means we'll have to probe for it eventually.
         *
-        * Are these reallly MAC_VIA_IIci? The developer notes for the
+        * Are these really MAC_VIA_IIci? The developer notes for the
         * Duos show pretty much the same custom parts as in most of
         * the other PowerBooks which would imply MAC_VIA_QUADRA.
         */
index 0cea21f581926b07241e35ce621d1a6fc2b685fa..5b2799eb96a68f930d6d93e30873f6c796487c25 100644 (file)
  * finished; this function moves the message state to MSG_COMPLETE and signals
  * the IOP. This two-step process is provided to allow the handler to defer
  * message processing to a bottom-half handler if the processing will take
- * a signifigant amount of time (handlers are called at interrupt time so they
+ * a significant amount of time (handlers are called at interrupt time so they
  * should execute quickly.)
  */
 
 
 /*#define DEBUG_IOP*/
 
-/* Set to nonezero if the IOPs are present. Set by iop_init() */
+/* Set to non-zero if the IOPs are present. Set by iop_init() */
 
 int iop_scc_present,iop_ism_present;
 
index d7be16917efdf307292d90c68ec3ebc6900adc48..50603d3dce843798b488f249b95bc53d984cdb76 100644 (file)
@@ -8,7 +8,7 @@
  *
  * 990502 (jmt) - Major rewrite for new interrupt architecture as well as some
  *               recent insights into OSS operational details.
- * 990610 (jmt) - Now taking fulll advantage of the OSS. Interrupts are mapped
+ * 990610 (jmt) - Now taking full advantage of the OSS. Interrupts are mapped
  *               to mostly match the A/UX interrupt scheme supported on the
  *               VIA side. Also added support for enabling the ISM irq again
  *               since we now have a functional IOP manager.
index d5cac72eb3db1d25b41ef780372a69a36742c925..8df270e950fabead2b0f0a2f2cf247d6fb02c41b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     6522 Versatile Interface Adapter (VIA)
  *
- *     There are two of these on the Mac II. Some IRQ's are vectored
+ *     There are two of these on the Mac II. Some IRQs are vectored
  *     via them as are assorted bits and bobs - eg RTC, ADB.
  *
  * CSA: Motorola seems to have removed documentation on the 6522 from
index 87b4f0158560492d4ddfb243debbd8a6e4902a38..b1033ae0d6f084a357ddf318a8e67b10d789098a 100644 (file)
@@ -65,7 +65,7 @@ fp_fsqrt(struct fp_ext *dest, struct fp_ext *src)
        fp_copy_ext(&src2, dest);
 
        /*
-        * The taylor row arround a for sqrt(x) is:
+        * The taylor row around a for sqrt(x) is:
         *      sqrt(x) = sqrt(a) + 1/(2*sqrt(a))*(x-a) + R
         * With a=1 this gives:
         *      sqrt(x) = 1 + 1/2*(x-1)
index ad3ed1fb88793e066aca96628a8ecb505f038d05..46161cef08b95520733b048b6cd40e53b7ad2716 100644 (file)
@@ -184,7 +184,7 @@ static struct IRQ_TABLE eirqs[] = {
 };
 
 /* complain only this many times about spurious ints : */
-static int ccleirq=60;    /* ISA dev IRQ's*/
+static int ccleirq=60;    /* ISA dev IRQs*/
 /*static int cclirq=60;*/     /* internal */
 
 /* FIXME: add shared ints,mask,unmask,probing.... */
@@ -234,7 +234,7 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp)
  * There is a little mess wrt which IRQ really caused this irq request. The
  * main problem is that IIRQ_REG and EIRQ_REG reflect the state when they
  * are read - which is long after the request came in. In theory IRQs should
- * not just go away but they occassionally do
+ * not just go away but they occasionally do
  */
                                if (irq > 4 && irq <= 15 && mext_disabled) {
                                        /*aliased_irq++;*/
index 7a0e3a22068708a47b1872c4dcc35507a3f515c5..fb0f6a20cc3c80dab2ca2f3f073bef4d006d63ae 100644 (file)
@@ -239,7 +239,7 @@ void clear_context(unsigned long context)
 /* gets an empty context.  if full, kills the next context listed to
    die first */
 /* This context invalidation scheme is, well, totally arbitrary, I'm
-   sure it could be much more intellegent...  but it gets the job done
+   sure it could be much more intelligent...  but it gets the job done
    for now without much overhead in making it's decision. */
 /* todo: come up with optimized scheme for flushing contexts */
 unsigned long get_free_context(struct mm_struct *mm)
index e892748e73865e633a3e2a6d4f3349647eb17424..7340f5b6cf6d55dbafe7b86fbf18ff58f4f6ada3 100644 (file)
@@ -3,7 +3,7 @@
  *                                        in Chip RAM with the kernel command
  *                                        line option `debug=mem'.
  *
- *  © Copyright 1996 by Geert Uytterhoeven <geert@linux-m68k.org>
+ *  Â© Copyright 1996 by Geert Uytterhoeven <geert@linux-m68k.org>
  *
  *
  *  Usage:
index e53c446d10e4d9cd2343293b82f0017756a23f58..f18352fa35a69c9b1fadc5d3b434782d2a225676 100644 (file)
@@ -83,7 +83,7 @@ unsigned long coldfire_pit_offset(void)
 
        /*
         * If we are still in the first half of the upcount and a
-        * timer interupt is pending, then add on a ticks worth of time.
+        * timer interrupt is pending, then add on a ticks worth of time.
         */
        offset = ((pmr - pcntr) * (1000000 / HZ)) / pmr;
        if ((offset < (1000000 / HZ / 2)) && (*ipr & MCFPIT_IMR_IBIT))
index 4dc142d394a348233c5c764c9105f61f5cee2c64..3ecff5e9e4f32554e24a1131d17692b05f48f371 100644 (file)
@@ -1812,7 +1812,7 @@ config KEXEC
          but it is independent of the system firmware.   And like a reboot
          you can start any kernel with it, not just Linux.
 
-         The name comes from the similiarity to the exec system call.
+         The name comes from the similarity to the exec system call.
 
          It is an ongoing process to be certain the hardware in a machine
          is properly shutdown, so do not be surprised if this code does not
index cb0801437b666a7769fedbb2e0a7a82651c44ab6..e7ed0ac485375744bf8b78be07d2ef595357d644 100644 (file)
@@ -381,7 +381,7 @@ const struct exception_table_entry *search_module_dbetables(unsigned long addr)
        return e;
 }
 
-/* Put in dbe list if neccessary. */
+/* Put in dbe list if necessary. */
 int module_finalize(const Elf_Ehdr *hdr,
                    const Elf_Shdr *sechdrs,
                    struct module *me)
index 3c86c77cb74fa026ffa16303e64f09faa64bb26b..8a56876afcc678dcb7d52783e482fb0e8e2ff545 100644 (file)
@@ -131,7 +131,7 @@ static int __init basler_excite_pci_setup(void)
                ocd_writel(0x00000000, bar + 0x100);
        }
 
-       /* Finally, enable the PCI interupt */
+       /* Finally, enable the PCI interrupt */
 #if USB_IRQ > 7
        set_c0_intcontrol(1 << USB_IRQ);
 #else
index 39bb15f1f2a65e3b46f24975d985caf982ea4d28..4df070f2ff5dd488736cd49af07674e6f3844f1d 100644 (file)
@@ -246,7 +246,7 @@ static void pcimt_hwint1(void)
                /*
                 * Note: ASIC PCI's builtin interrupt achknowledge feature is
                 * broken.  Using it may result in loss of some or all i8259
-                * interupts, so don't use PCIMT_INT_ACKNOWLEDGE ...
+                * interrupts, so don't use PCIMT_INT_ACKNOWLEDGE ...
                 */
                irq = i8259_irq();
                if (unlikely(irq < 0))
index 8b4a4ee85eca24b8b229bf1c46b42c26bba82e6d..f1ee0b3f78f26fc1e0364244b2819486e637191f 100644 (file)
@@ -113,7 +113,7 @@ setup_604_hid0:
  * around #3 and with the same fix we use. We may want to
  * check if the CPU is using 60x bus mode in which case
  * the workaround for errata #4 is useless. Also, we may
- * want to explicitely clear HID0_NOPDST as this is not
+ * want to explicitly clear HID0_NOPDST as this is not
  * needed once we have applied workaround #5 (though it's
  * not set by Apple's firmware at least).
  */
index 2250f9e6c5ca0ceb517a571bebc8967a9b1dcd4f..b0e5deb4274f89a62ee4ce4991468aec726ffed3 100644 (file)
@@ -491,7 +491,7 @@ struct irq_host *irq_alloc_host(struct device_node *of_node,
 
                        /* Legacy flags are left to default at this point,
                         * one can then use irq_create_mapping() to
-                        * explicitely change them
+                        * explicitly change them
                         */
                        ops->map(host, i, i);
                }
index 858f28ac8a06e4cee41e3b4696144dccb1724bc6..2a2f3c3f6d80321e3076cea3db5ae237a9fcbe6d 100644 (file)
@@ -1,6 +1,6 @@
 /*
        L2CR functions
-       Copyright © 1997-1998 by PowerLogix R & D, Inc.
+       Copyright Â© 1997-1998 by PowerLogix R & D, Inc.
 
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
index 229d355ed86a7264548e1dcb0b4145a3e0349c6a..ea22cad2cd0af5bb7cb67827abc7cbedc7d58756 100644 (file)
@@ -120,7 +120,7 @@ config PPC_PMI
        depends on PPC_IBM_CELL_BLADE
        help
          PMI (Platform Management Interrupt) is a way to
-         communicate with the BMC (Baseboard Mangement Controller).
+         communicate with the BMC (Baseboard Management Controller).
          It is used in some IBM Cell blades.
        default m
 
index d72b16d6816e065b9010ff2b51afed56d0aeb289..d9e56a503795246ee9f4848a23224a27635a2577 100644 (file)
@@ -748,7 +748,7 @@ static ssize_t spufs_wbox_write(struct file *file, const char __user *buf,
        if (count)
                goto out;
 
-       /* write aѕ much as possible */
+       /* write as much as possible */
        for (count = 4, udata++; (count + 4) <= len; count += 4, udata++) {
                int ret;
                ret = __get_user(wbox_data, udata);
index a7c548bde2e37d66170693a7d4cc2847a6c6d1f4..b59c38a06e3e46299d6d622a039660ab7e61291b 100644 (file)
@@ -36,7 +36,7 @@ static inline int uhc_clkctrl_ready(u32 val)
 }
 
 /*
- * UHC(usb host controler) enable function.
+ * UHC(usb host controller) enable function.
  * affect to both of OHCI and EHCI core module.
  */
 static void enable_scc_uhc(struct pci_dev *dev)
index 388bb711f1b02ec0c46dac25723dfee1fa3a95df..b4d9534d2b0eb3861e1331299778a53e0605140d 100644 (file)
@@ -480,7 +480,7 @@ static int __init pcibios_init(void)
                 return -EINVAL;
         }
 
-       /* The pci subsytem needs to know where memory is and how much
+       /* The pci subsystem needs to know where memory is and how much
         * of it there is. I've simply made these globals. A better mechanism
         * is probably needed.
         */
index d8925d285573c1ce67ce9acfd5a0cac9eadb72a1..dd1689b814cb5a842c456a0337f66ec9db2dbe2e 100644 (file)
@@ -3,7 +3,7 @@ config DEFCONFIG_LIST
        option defconfig_list
        default "arch/$ARCH/defconfig"
 
-# UML uses the generic IRQ sugsystem
+# UML uses the generic IRQ subsystem
 config GENERIC_HARDIRQS
        bool
        default y
index 76fe0b0da9960fe36bc6fd5c59e7432aa8cf511d..83bf15a3dda88472dc5aea5ade3353e3f772e0e2 100644 (file)
@@ -35,7 +35,7 @@ static void line_timer_cb(struct work_struct *work)
 /*
  * Returns the free space inside the ring buffer of this line.
  *
- * Should be called while holding line->lock (this does not modify datas).
+ * Should be called while holding line->lock (this does not modify data).
  */
 static int write_room(struct line *line)
 {
index 21ad3d7932b350605a3294f9b5b5705a7a49c7ac..2b45a1446c86b5bf34f01cfe9d71d19ec1a118cc 100644 (file)
@@ -9,7 +9,7 @@
 #include "chan_user.h"
 #include "os.h"
 
-/* This address is used only as a unique identifer */
+/* This address is used only as a unique identifier */
 static int null_chan;
 
 static void *null_init(char *str, int device, const struct chan_opts *opts)
index 4739dd527b43ab8ff5cf59ab007cfbbd033b90d8..d07a97f8b9945343791d4fb32c9ad0bf5c7d9df2 100644 (file)
@@ -8,7 +8,7 @@
 /* trivial console driver -- simply dump everything to stderr                    */
 
 /*
- * Don't register by default -- as this registeres very early in the
+ * Don't register by default -- as this registers very early in the
  * boot process it becomes the default console.
  *
  * Initialized at init time.
index 13aa115cd1b4b521d3bdc1259454626f6b3a4a33..734f873cab12437885af0d61d7dfe3a902f1ae9b 100644 (file)
@@ -12,8 +12,8 @@ EXPORT_SYMBOL(__bb_init_func);
  * versions in libgcov.
  *
  * Since SuSE backported the fix, we cannot handle it depending on GCC version.
- * So, unconditinally export it. But also give it a weak declaration, which will
- * be overriden by any other one.
+ * So, unconditionally export it. But also give it a weak declaration, which will
+ * be overridden by any other one.
  */
 
 extern void __gcov_init(void *) __attribute__((weak));
index 277fce17b0881c7f04894a6040bb32f6a65e7d73..70c2d625b0702a284c5b72c65fa3eb4c907e4428 100644 (file)
@@ -326,7 +326,7 @@ int deactivate_all_fds(void)
 }
 
 /*
- * do_IRQ handles all normal device IRQ's (the special
+ * do_IRQ handles all normal device IRQs (the special
  * SMP cross-CPU interrupts have their own specific
  * handlers).
  */
index a0eba083306882b6f647b74d4ff3324272c3c23b..47b57b497d5529e570591e97a0f041e0d55d842e 100644 (file)
@@ -237,7 +237,7 @@ void send_sigtrap(struct task_struct *tsk, struct uml_pt_regs *regs,
        /* User-mode eip? */
        info.si_addr = UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL;
 
-       /* Send us the fakey SIGTRAP */
+       /* Send us the fake SIGTRAP */
        force_sig_info(SIGTRAP, &info, tsk);
 }
 
index 200c8ba2879bef1415f3b6fa8818e81ad7c7b0c6..a4360b5207db9e6c2e49676522c168942ff5b7f2 100644 (file)
@@ -6,7 +6,7 @@
 #include <linux/uaccess.h>
 
 /* Mostly copied from i386/x86_86 - eliminated the eip < PAGE_OFFSET because
- * that's not relevent in skas mode.
+ * that's not relevant in skas mode.
  */
 
 int is_valid_bugaddr(unsigned long eip)
index b02266ab5c55fbf212cd6a6734b508880d3ae9a0..fcaff86b000c7397656320d67952821e44c73be2 100644 (file)
@@ -45,7 +45,7 @@ int do_get_thread_area(struct user_desc *info)
  * XXX: Consider leaving one free slot for glibc usage at first place. This must
  * be done here (and by changing GDT_ENTRY_TLS_* macros) and nowhere else.
  *
- * Also, this must be tested when compiling in SKAS mode with dinamic linking
+ * Also, this must be tested when compiling in SKAS mode with dynamic linking
  * and running against NPTL.
  */
 static int get_free_idx(struct task_struct* task)
index 200c8ba2879bef1415f3b6fa8818e81ad7c7b0c6..a4360b5207db9e6c2e49676522c168942ff5b7f2 100644 (file)
@@ -6,7 +6,7 @@
 #include <linux/uaccess.h>
 
 /* Mostly copied from i386/x86_86 - eliminated the eip < PAGE_OFFSET because
- * that's not relevent in skas mode.
+ * that's not relevant in skas mode.
  */
 
 int is_valid_bugaddr(unsigned long eip)
index 38be5c194f6b9a5ca782a2b71f07e66f60e0e7e3..007115dc9ce0e14d8fc380f29134ebc28a2c5e49 100644 (file)
@@ -58,13 +58,13 @@ void __init me2_init_irqs (void)
 void me2_uart_pre_configure (unsigned chan, unsigned cflags, unsigned baud)
 {
        if (chan == 0) {
-               /* Specify that the relevent pins on the chip should do
+               /* Specify that the relevant pins on the chip should do
                   serial I/O, not direct I/O.  */
                ME2_PORT1_PMC |= 0xC;
                /* Specify that we're using the UART, not the CSI device. */
                ME2_PORT1_PFC |= 0xC;
        } else if (chan == 1) {
-               /* Specify that the relevent pins on the chip should do
+               /* Specify that the relevant pins on the chip should do
                   serial I/O, not direct I/O.  */
                ME2_PORT2_PMC |= 0x6;
                /* Specify that we're using the UART, not the CSI device. */
index 35a4bd5515cb53c8903d612fc43ebda0a4cb5535..7165478824e7405757536e65d04d493d281d762c 100644 (file)
@@ -179,7 +179,7 @@ static int __devinit pcibios_init (void)
                   default uses.  */
 
                /* Significant address bits used for decoding PCI GCS5 space
-                  accessess.  */
+                  accesses.  */
                MB_A_PCI_DMRR = ~(MB_A_PCI_MEM_SIZE - 1);
 
                /* I don't understand this, but the SolutionGear example code
@@ -775,7 +775,7 @@ pci_alloc_consistent (struct pci_dev *pdev, size_t size, dma_addr_t *dma_addr)
 /* Free and unmap a consistent DMA buffer.  CPU_ADDR and DMA_ADDR must
    be values that were returned from pci_alloc_consistent.  SIZE must be
    the same as what as passed into pci_alloc_consistent.  References to
-   the memory and mappings assosciated with CPU_ADDR or DMA_ADDR past
+   the memory and mappings associated with CPU_ADDR or DMA_ADDR past
    this call are illegal.  */
 void
 pci_free_consistent (struct pci_dev *pdev, size_t size, void *cpu_addr,
index b28505c544c9ca60306c5029326fb82b16ef4b95..1dc1e19c0a9f200fe11fd1a2f051896c8eddf54f 100644 (file)
@@ -25,7 +25,7 @@
 
 /*
  * Getting to provable safe in place decompression is hard.
- * Worst case behaviours need to be analized.
+ * Worst case behaviours need to be analyzed.
  * Background information:
  *
  * The file layout is:
@@ -94,7 +94,7 @@
  * Adding 32768 instead of 32767 just makes for round numbers.
  * Adding the decompressor_size is necessary as it musht live after all
  * of the data as well.  Last I measured the decompressor is about 14K.
- * 10K of actuall data and 4K of bss.
+ * 10K of actual data and 4K of bss.
  *
  */
 
index f932b0e89096afaf0eefdcf723a27d1957c4a3d5..6ea015aa65e4666420fe4f45de6885d64bbd8245 100644 (file)
@@ -25,7 +25,7 @@
 
 /*
  * Getting to provable safe in place decompression is hard.
- * Worst case behaviours need to be analized.
+ * Worst case behaviours need to be analyzed.
  * Background information:
  *
  * The file layout is:
@@ -94,7 +94,7 @@
  * Adding 32768 instead of 32767 just makes for round numbers.
  * Adding the decompressor_size is necessary as it musht live after all
  * of the data as well.  Last I measured the decompressor is about 14K.
- * 10K of actuall data and 4K of bss.
+ * 10K of actual data and 4K of bss.
  *
  */
 
index 5027650eb273158ea70b6b9a3a8ccd04eddf085c..55822d2cf05319acdf7464acdfd3e37271279b4b 100644 (file)
@@ -5,10 +5,6 @@
  * This tricks binfmt_elf.c into loading 32bit binaries using lots 
  * of ugly preprocessor tricks. Talk about very very poor man's inheritance.
  */ 
-#define __ASM_X86_64_ELF_H 1
-
-#undef ELF_CLASS
-#define ELF_CLASS ELFCLASS32
 
 #include <linux/types.h>
 #include <linux/stddef.h>
@@ -19,6 +15,7 @@
 #include <linux/binfmts.h>
 #include <linux/mm.h>
 #include <linux/security.h>
+#include <linux/elfcore-compat.h>
 
 #include <asm/segment.h> 
 #include <asm/ptrace.h>
 #include <asm/ia32.h>
 #include <asm/vsyscall32.h>
 
+#undef ELF_ARCH
+#undef ELF_CLASS
+#define ELF_CLASS      ELFCLASS32
+#define ELF_ARCH       EM_386
+
+#undef elfhdr
+#undef elf_phdr
+#undef elf_note
+#undef elf_addr_t
+#define elfhdr         elf32_hdr
+#define elf_phdr       elf32_phdr
+#define elf_note       elf32_note
+#define elf_addr_t     Elf32_Off
+
 #define ELF_NAME "elf/i386"
 
 #define AT_SYSINFO 32
@@ -48,74 +59,20 @@ int sysctl_vsyscall32 = 1;
 } while(0)
 
 struct file;
-struct elf_phdr; 
 
 #define IA32_EMULATOR 1
 
-#define ELF_ET_DYN_BASE                (TASK_UNMAPPED_BASE + 0x1000000)
-
-#undef ELF_ARCH
-#define ELF_ARCH EM_386
-
-#define ELF_DATA       ELFDATA2LSB
+#undef ELF_ET_DYN_BASE
 
-#define USE_ELF_CORE_DUMP 1
-
-/* Override elfcore.h */ 
-#define _LINUX_ELFCORE_H 1
-typedef unsigned int elf_greg_t;
-
-#define ELF_NGREG (sizeof (struct user_regs_struct32) / sizeof(elf_greg_t))
-typedef elf_greg_t elf_gregset_t[ELF_NGREG];
-
-struct elf_siginfo
-{
-       int     si_signo;                       /* signal number */
-       int     si_code;                        /* extra code */
-       int     si_errno;                       /* errno */
-};
+#define ELF_ET_DYN_BASE                (TASK_UNMAPPED_BASE + 0x1000000)
 
 #define jiffies_to_timeval(a,b) do { (b)->tv_usec = 0; (b)->tv_sec = (a)/HZ; }while(0)
 
-struct elf_prstatus
-{
-       struct elf_siginfo pr_info;     /* Info associated with signal */
-       short   pr_cursig;              /* Current signal */
-       unsigned int pr_sigpend;        /* Set of pending signals */
-       unsigned int pr_sighold;        /* Set of held signals */
-       pid_t   pr_pid;
-       pid_t   pr_ppid;
-       pid_t   pr_pgrp;
-       pid_t   pr_sid;
-       struct compat_timeval pr_utime; /* User time */
-       struct compat_timeval pr_stime; /* System time */
-       struct compat_timeval pr_cutime;        /* Cumulative user time */
-       struct compat_timeval pr_cstime;        /* Cumulative system time */
-       elf_gregset_t pr_reg;   /* GP registers */
-       int pr_fpvalid;         /* True if math co-processor being used.  */
-};
-
-#define ELF_PRARGSZ    (80)    /* Number of chars for args */
-
-struct elf_prpsinfo
-{
-       char    pr_state;       /* numeric process state */
-       char    pr_sname;       /* char for pr_state */
-       char    pr_zomb;        /* zombie */
-       char    pr_nice;        /* nice val */
-       unsigned int pr_flag;   /* flags */
-       __u16   pr_uid;
-       __u16   pr_gid;
-       pid_t   pr_pid, pr_ppid, pr_pgrp, pr_sid;
-       /* Lots missing */
-       char    pr_fname[16];   /* filename of executable */
-       char    pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
-};
-
 #define _GET_SEG(x) \
        ({ __u32 seg; asm("movl %%" __stringify(x) ",%0" : "=r"(seg)); seg; })
 
 /* Assumes current==process to be dumped */
+#undef ELF_CORE_COPY_REGS
 #define ELF_CORE_COPY_REGS(pr_reg, regs)                       \
        pr_reg[0] = regs->rbx;                          \
        pr_reg[1] = regs->rcx;                          \
@@ -135,36 +92,41 @@ struct elf_prpsinfo
        pr_reg[15] = regs->rsp;                         \
        pr_reg[16] = regs->ss;
 
-#define user user32
+
+#define elf_prstatus   compat_elf_prstatus
+#define elf_prpsinfo   compat_elf_prpsinfo
+#define elf_fpregset_t struct user_i387_ia32_struct
+#define        elf_fpxregset_t struct user32_fxsr_struct
+#define user           user32
 
 #undef elf_read_implies_exec
 #define elf_read_implies_exec(ex, executable_stack)     (executable_stack != EXSTACK_DISABLE_X)
-//#include <asm/ia32.h>
-#include <linux/elf.h>
-
-typedef struct user_i387_ia32_struct elf_fpregset_t;
-typedef struct user32_fxsr_struct elf_fpxregset_t;
-
 
-static inline void elf_core_copy_regs(elf_gregset_t *elfregs, struct pt_regs *regs)
+#define elf_core_copy_regs             elf32_core_copy_regs
+static inline void elf32_core_copy_regs(compat_elf_gregset_t *elfregs,
+                                       struct pt_regs *regs)
 {
-       ELF_CORE_COPY_REGS((*elfregs), regs)
+       ELF_CORE_COPY_REGS((&elfregs->ebx), regs)
 }
 
-static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregset_t* elfregs)
+#define elf_core_copy_task_regs                elf32_core_copy_task_regs
+static inline int elf32_core_copy_task_regs(struct task_struct *t,
+                                           compat_elf_gregset_t* elfregs)
 {      
        struct pt_regs *pp = task_pt_regs(t);
-       ELF_CORE_COPY_REGS((*elfregs), pp);
+       ELF_CORE_COPY_REGS((&elfregs->ebx), pp);
        /* fix wrong segments */ 
-       (*elfregs)[7] = t->thread.ds; 
-       (*elfregs)[9] = t->thread.fsindex; 
-       (*elfregs)[10] = t->thread.gsindex; 
-       (*elfregs)[8] = t->thread.es;   
+       elfregs->ds = t->thread.ds;
+       elfregs->fs = t->thread.fsindex;
+       elfregs->gs = t->thread.gsindex;
+       elfregs->es = t->thread.es;
        return 1; 
 }
 
+#define elf_core_copy_task_fpregs      elf32_core_copy_task_fpregs
 static inline int 
-elf_core_copy_task_fpregs(struct task_struct *tsk, struct pt_regs *regs, elf_fpregset_t *fpu)
+elf32_core_copy_task_fpregs(struct task_struct *tsk, struct pt_regs *regs,
+                           elf_fpregset_t *fpu)
 {
        struct _fpstate_ia32 *fpstate = (void*)fpu; 
        mm_segment_t oldfs = get_fs();
@@ -186,8 +148,9 @@ elf_core_copy_task_fpregs(struct task_struct *tsk, struct pt_regs *regs, elf_fpr
 
 #define ELF_CORE_COPY_XFPREGS 1
 #define ELF_CORE_XFPREG_TYPE NT_PRXFPREG
+#define elf_core_copy_task_xfpregs     elf32_core_copy_task_xfpregs
 static inline int 
-elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregset_t *xfpu)
+elf32_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregset_t *xfpu)
 {
        struct pt_regs *regs = task_pt_regs(t);
        if (!tsk_used_math(t))
@@ -206,6 +169,10 @@ elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregset_t *xfpu)
 
 extern int force_personality32;
 
+#undef ELF_EXEC_PAGESIZE
+#undef ELF_HWCAP
+#undef ELF_PLATFORM
+#undef SET_PERSONALITY
 #define ELF_EXEC_PAGESIZE PAGE_SIZE
 #define ELF_HWCAP (boot_cpu_data.x86_capability[0])
 #define ELF_PLATFORM  ("i686")
@@ -231,6 +198,7 @@ do {                                                        \
 
 #define load_elf_binary load_elf32_binary
 
+#undef ELF_PLAT_INIT
 #define ELF_PLAT_INIT(r, load_addr)    elf32_init(r)
 
 #undef start_thread
index a3fa11f8f4609f6744cba78d95cd829dd617a4ea..ccea590bbb920e914358a77083ec8a7f3cdd423c 100644 (file)
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-extra-y := head_32.o init_task_32.o vmlinux.lds
+extra-y := head_32.o init_task.o vmlinux.lds
 
 obj-y  := process_32.o signal_32.o entry_32.o traps_32.o irq_32.o \
                ptrace_32.o time_32.o ioport_32.o ldt_32.o setup_32.o i8259_32.o sys_i386_32.o \
@@ -17,6 +17,7 @@ obj-$(CONFIG_MCA)             += mca_32.o
 obj-$(CONFIG_X86_MSR)          += msr.o
 obj-$(CONFIG_X86_CPUID)                += cpuid.o
 obj-$(CONFIG_MICROCODE)                += microcode.o
+obj-$(CONFIG_PCI)              += early-quirks.o
 obj-$(CONFIG_APM)              += apm_32.o
 obj-$(CONFIG_X86_SMP)          += smp_32.o smpboot_32.o tsc_sync.o
 obj-$(CONFIG_SMP)              += smpcommon_32.o
index 43da66213a479117a91c05f62e4b67447d412205..dec06e769281b18751d5518e9528b84646101ec9 100644 (file)
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-extra-y        := head_64.o head64.o init_task_64.o vmlinux.lds
+extra-y        := head_64.o head64.o init_task.o vmlinux.lds
 EXTRA_AFLAGS   := -traditional
 obj-y  := process_64.o signal_64.o entry_64.o traps_64.o irq_64.o \
                ptrace_64.o time_64.o ioport_64.o ldt_64.o setup_64.o i8259_64.o sys_x86_64.o \
@@ -39,7 +39,7 @@ obj-$(CONFIG_K8_NB)           += k8.o
 obj-$(CONFIG_AUDIT)            += audit_64.o
 
 obj-$(CONFIG_MODULES)          += module_64.o
-obj-$(CONFIG_PCI)              += early-quirks_64.o
+obj-$(CONFIG_PCI)              += early-quirks.o
 
 obj-y                          += topology.o
 obj-y                          += intel_cacheinfo.o
index a4852a2e9190c147f1faa66ac3ba271e9f3a8a6c..045dd54b33e052498a3f6a2ab7445156cff1d704 100644 (file)
@@ -1,7 +1,4 @@
 obj-$(CONFIG_ACPI)             += boot.o
-ifneq ($(CONFIG_PCI),)
-obj-$(CONFIG_X86_IO_APIC)      += earlyquirk_32.o
-endif
 obj-$(CONFIG_ACPI_SLEEP)       += sleep_32.o wakeup_32.o
 
 ifneq ($(CONFIG_ACPI_PROCESSOR),)
index afd2afe9102d33e26d8c837333ca4115215d578b..289247d974c60fe77ed4b989a2a2634734392ab9 100644 (file)
@@ -99,7 +99,7 @@ static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
 
 /*
  * The default interrupt routing model is PIC (8259).  This gets
- * overriden if IOAPICs are enumerated (below).
+ * overridden if IOAPICs are enumerated (below).
  */
 enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC;
 
@@ -414,8 +414,8 @@ acpi_parse_nmi_src(struct acpi_subtable_header * header, const unsigned long end
  *
  * Port 0x4d0-4d1 are ECLR1 and ECLR2, the Edge/Level Control Registers
  * for the 8259 PIC.  bit[n] = 1 means irq[n] is Level, otherwise Edge.
- * ECLR1 is IRQ's 0-7 (IRQ 0, 1, 2 must be 0)
- * ECLR2 is IRQ's 8-15 (IRQ 8, 13 must be 0)
+ * ECLR1 is IRQs 0-7 (IRQ 0, 1, 2 must be 0)
+ * ECLR2 is IRQs 8-15 (IRQ 8, 13 must be 0)
  */
 
 void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
@@ -427,7 +427,7 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
        old = inb(0x4d0) | (inb(0x4d1) << 8);
 
        /*
-        * If we use ACPI to set PCI irq's, then we should clear ELCR
+        * If we use ACPI to set PCI IRQs, then we should clear ELCR
         * since we will set it correctly as we enable the PCI irq
         * routing.
         */
@@ -555,7 +555,7 @@ EXPORT_SYMBOL(acpi_map_lsapic);
 
 int acpi_unmap_lsapic(int cpu)
 {
-       x86_cpu_to_apicid[cpu] = -1;
+       per_cpu(x86_cpu_to_apicid, cpu) = -1;
        cpu_clear(cpu, cpu_present_map);
        num_processors--;
 
index 2d39f55d29a88ca36283d2f87206cd646649e521..10b67170b133eccc3ed2dff7fef44e95a44e76ad 100644 (file)
@@ -29,7 +29,7 @@
 void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags,
                                        unsigned int cpu)
 {
-       struct cpuinfo_x86 *c = cpu_data + cpu;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        flags->bm_check = 0;
        if (num_online_cpus() == 1)
@@ -72,7 +72,7 @@ int acpi_processor_ffh_cstate_probe(unsigned int cpu,
                struct acpi_processor_cx *cx, struct acpi_power_register *reg)
 {
        struct cstate_entry *percpu_entry;
-       struct cpuinfo_x86 *c = cpu_data + cpu;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        cpumask_t saved_mask;
        int retval;
diff --git a/arch/x86/kernel/acpi/earlyquirk_32.c b/arch/x86/kernel/acpi/earlyquirk_32.c
deleted file mode 100644 (file)
index 23f78ef..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
- * Do early PCI probing for bug detection when the main PCI subsystem is 
- * not up yet.
- */
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/pci.h>
-#include <linux/acpi.h>
-
-#include <asm/pci-direct.h>
-#include <asm/acpi.h>
-#include <asm/apic.h>
-
-#ifdef CONFIG_ACPI
-
-static int __init nvidia_hpet_check(struct acpi_table_header *header)
-{
-       return 0;
-}
-#endif
-
-static int __init check_bridge(int vendor, int device)
-{
-#ifdef CONFIG_ACPI
-       static int warned;
-       /* According to Nvidia all timer overrides are bogus unless HPET
-          is enabled. */
-       if (!acpi_use_timer_override && vendor == PCI_VENDOR_ID_NVIDIA) {
-               if (!warned && acpi_table_parse(ACPI_SIG_HPET,
-                                               nvidia_hpet_check)) {
-                       warned = 1;
-                       acpi_skip_timer_override = 1;
-                         printk(KERN_INFO "Nvidia board "
-                       "detected. Ignoring ACPI "
-                       "timer override.\n");
-                printk(KERN_INFO "If you got timer trouble "
-                                "try acpi_use_timer_override\n");
-
-               }
-       }
-#endif
-       if (vendor == PCI_VENDOR_ID_ATI && timer_over_8254 == 1) {
-               timer_over_8254 = 0;
-               printk(KERN_INFO "ATI board detected. Disabling timer routing "
-                               "over 8254.\n");
-       }
-       return 0;
-}
-
-void __init check_acpi_pci(void)
-{
-       int num, slot, func;
-
-       /* Assume the machine supports type 1. If not it will 
-          always read ffffffff and should not have any side effect.
-          Actually a few buggy systems can machine check. Allow the user
-          to disable it by command line option at least -AK */
-       if (!early_pci_allowed())
-               return;
-
-       /* Poor man's PCI discovery */
-       for (num = 0; num < 32; num++) {
-               for (slot = 0; slot < 32; slot++) {
-                       for (func = 0; func < 8; func++) {
-                               u32 class;
-                               u32 vendor;
-                               class = read_pci_config(num, slot, func,
-                                                       PCI_CLASS_REVISION);
-                               if (class == 0xffffffff)
-                                       break;
-
-                               if ((class >> 16) != PCI_CLASS_BRIDGE_PCI)
-                                       continue;
-
-                               vendor = read_pci_config(num, slot, func,
-                                                        PCI_VENDOR_ID);
-
-                               if (check_bridge(vendor & 0xffff, vendor >> 16))
-                                       return;
-                       }
-
-               }
-       }
-}
index b54fded49834ade14daa22ce53418fc501c5653f..2ed0a4ce62f02ebc77750fe11adec66e7e6f9f8e 100644 (file)
@@ -63,7 +63,7 @@ static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
 void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
 {
        unsigned int cpu = pr->id;
-       struct cpuinfo_x86 *c = cpu_data + cpu;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        pr->pdc = NULL;
        if (c->x86_vendor == X86_VENDOR_INTEL)
index 3bd2688bd4432a9cab554d6c665e1ceb64e9d410..d6405e0842b55d35835a9ffa203c6b22ea41c189 100644 (file)
@@ -357,14 +357,14 @@ void alternatives_smp_switch(int smp)
        if (smp) {
                printk(KERN_INFO "SMP alternatives: switching to SMP code\n");
                clear_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
-               clear_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
+               clear_bit(X86_FEATURE_UP, cpu_data(0).x86_capability);
                list_for_each_entry(mod, &smp_alt_modules, next)
                        alternatives_smp_lock(mod->locks, mod->locks_end,
                                              mod->text, mod->text_end);
        } else {
                printk(KERN_INFO "SMP alternatives: switching to UP code\n");
                set_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
-               set_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
+               set_bit(X86_FEATURE_UP, cpu_data(0).x86_capability);
                list_for_each_entry(mod, &smp_alt_modules, next)
                        alternatives_smp_unlock(mod->locks, mod->locks_end,
                                                mod->text, mod->text_end);
@@ -432,7 +432,7 @@ void __init alternative_instructions(void)
                if (1 == num_possible_cpus()) {
                        printk(KERN_INFO "SMP alternatives: switching to UP code\n");
                        set_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
-                       set_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
+                       set_bit(X86_FEATURE_UP, cpu_data(0).x86_capability);
                        alternatives_smp_unlock(__smp_locks, __smp_locks_end,
                                                _text, _etext);
                }
index 793341fffc81af62eb9049fbafd535d0c216eea9..08b07c176962f9c525d402adf5609d5c7c64f771 100644 (file)
@@ -947,7 +947,7 @@ void __devinit setup_local_APIC(void)
         * Set up LVT0, LVT1:
         *
         * set up through-local-APIC on the BP's LINT0. This is not
-        * strictly necessery in pure symmetric-IO mode, but sometimes
+        * strictly necessary in pure symmetric-IO mode, but sometimes
         * we delegate interrupts to the 8259A.
         */
        /*
@@ -998,7 +998,7 @@ void __devinit setup_local_APIC(void)
        } else {
                if (esr_disable)
                        /*
-                        * Something untraceble is creating bad interrupts on
+                        * Something untraceable is creating bad interrupts on
                         * secondary quads ... for the moment, just leave the
                         * ESR disabled - we can't do anything useful with the
                         * errors anyway - mbligh
index 32f2365c26ed3bcaef228f0d494f3edc18145d4f..17089a041028d5447f2c20503b10dd1058b030d5 100644 (file)
@@ -57,7 +57,7 @@
  *         screen-blanking and gpm (Stephen Rothwell); Linux 1.99.4
  *    1.2a:Simple change to stop mysterious bug reports with SMP also added
  *        levels to the printk calls. APM is not defined for SMP machines.
- *         The new replacment for it is, but Linux doesn't yet support this.
+ *         The new replacement for it is, but Linux doesn't yet support this.
  *         Alan Cox Linux 2.1.55
  *    1.3: Set up a valid data descriptor 0x40 for buggy BIOS's
  *    1.4: Upgraded to support APM 1.2. Integrated ThinkPad suspend patch by
index 5f8af875f457bcaa99dda66e2deee7179f925ae9..1ff88c7f45cff837b581c02cc6a8beda9bb70947 100644 (file)
@@ -266,7 +266,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 #ifdef CONFIG_X86_HT
        /*
         * On a AMD multi core setup the lower bits of the APIC id
-        * distingush the cores.
+        * distinguish the cores.
         */
        if (c->x86_max_cores > 1) {
                int cpu = smp_processor_id();
index 473eac883c7b4133e8af4f8251bbbbd19b207da8..9681fa15ddf076f43e02741c7f4f9bbadfab6554 100644 (file)
@@ -53,7 +53,7 @@ static u32 __cpuinit ramtop(void)             /* 16388 */
                        continue;
                /*
                 *      Don't MCR over reserved space. Ignore the ISA hole
-                *      we frob around that catastrophy already
+                *      we frob around that catastrophe already
                 */
                                        
                if (e820.map[i].type == E820_RESERVED)
@@ -287,7 +287,7 @@ static void __cpuinit init_c3(struct cpuinfo_x86 *c)
                c->x86_capability[5] = cpuid_edx(0xC0000001);
        }
 
-       /* Cyrix III family needs CX8 & PGE explicity enabled. */
+       /* Cyrix III family needs CX8 & PGE explicitly enabled. */
        if (c->x86_model >=6 && c->x86_model <= 9) {
                rdmsr (MSR_VIA_FCR, lo, hi);
                lo |= (1<<1 | 1<<7);
index d506201d397c5fb2e13b364189a37d058876dd46..e2fcf2051bdb26c87161b4c6dc90b5d0a893ce7a 100644 (file)
@@ -207,7 +207,7 @@ static void __cpuinit get_cpu_vendor(struct cpuinfo_x86 *c, int early)
 
 static int __init x86_fxsr_setup(char * s)
 {
-       /* Tell all the other CPU's to not use it... */
+       /* Tell all the other CPUs to not use it... */
        disable_x86_fxsr = 1;
 
        /*
similarity index 97%
rename from arch/x86/kernel/cpufreq/Kconfig
rename to arch/x86/kernel/cpu/cpufreq/Kconfig_64
index a3fd51926cbd0fe0c59185f8a94764505a961560..9c9699fdcf52b896fe0b5667d55484ea838a9b0d 100644 (file)
@@ -19,7 +19,7 @@ config X86_POWERNOW_K8
          To compile this driver as a module, choose M here: the
          module will be called powernow-k8.
 
-         For details, take a look at <file:Documentation/cpu-freq/>. 
+         For details, take a look at <file:Documentation/cpu-freq/>.
 
          If in doubt, say N.
 
index 2ca43ba32bc0ea50e99c4f872dfac269bde7ee8f..fea0af0476b96371f4c71fabcb463ab65d74fc89 100644 (file)
@@ -77,7 +77,7 @@ static unsigned int acpi_pstate_strict;
 
 static int check_est_cpu(unsigned int cpuid)
 {
-       struct cpuinfo_x86 *cpu = &cpu_data[cpuid];
+       struct cpuinfo_x86 *cpu = &cpu_data(cpuid);
 
        if (cpu->x86_vendor != X86_VENDOR_INTEL ||
            !cpu_has(cpu, X86_FEATURE_EST))
@@ -560,7 +560,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
        unsigned int cpu = policy->cpu;
        struct acpi_cpufreq_data *data;
        unsigned int result = 0;
-       struct cpuinfo_x86 *c = &cpu_data[policy->cpu];
+       struct cpuinfo_x86 *c = &cpu_data(policy->cpu);
        struct acpi_processor_performance *perf;
 
        dprintk("acpi_cpufreq_cpu_init\n");
index 32f0bda3fc953a4568c194b13773f5a70ba22c69..f03e9153618e52d68f2730f7e7a07e3d9fd71c2b 100644 (file)
@@ -260,7 +260,7 @@ static int nforce2_target(struct cpufreq_policy *policy,
 
        freqs.old = nforce2_get(policy->cpu);
        freqs.new = target_fsb * fid * 100;
-       freqs.cpu = 0;          /* Only one CPU on nForce2 plattforms */
+       freqs.cpu = 0;          /* Only one CPU on nForce2 platforms */
 
        if (freqs.old == freqs.new)
                return 0;
index c11baaf9f2b403f6624e1fa0d4fd5756491d8383..326a4c81f68493cd8802ce13093689858577ad63 100644 (file)
@@ -305,7 +305,7 @@ static struct cpufreq_driver eps_driver = {
 
 static int __init eps_init(void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
 
        /* This driver will work only on Centaur C7 processors with
         * Enhanced SpeedStep/PowerSaver registers */
index 1e7ae7dafcf6a50921d1271347e2f522ad13ad2b..94619c22f56326a555fa47114bf2df365634343a 100644 (file)
@@ -199,7 +199,7 @@ static int elanfreq_target (struct cpufreq_policy *policy,
 
 static int elanfreq_cpu_init(struct cpufreq_policy *policy)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
        unsigned int i;
        int result;
 
@@ -280,7 +280,7 @@ static struct cpufreq_driver elanfreq_driver = {
 
 static int __init elanfreq_init(void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
 
        /* Test if we have the right hardware */
        if ((c->x86_vendor != X86_VENDOR_AMD) ||
index ed2bda127c44b8734fbc88af3bc394ed95290ff9..2ed7db2fd257b3a25c78dd61dd48683bb60a49f7 100644 (file)
  *      of any nature resulting due to the use of this software. This
  *      software is provided AS-IS with no warranties.
  *
- * Theoritical note:
+ * Theoretical note:
  *
  *     (see Geode(tm) CS5530 manual (rev.4.1) page.56)
  *
  *     CPU frequency control on NatSemi Geode GX1/GXLV processor and CS55x0
- *     are based on Suspend Moduration.
+ *     are based on Suspend Modulation.
  *
  *     Suspend Modulation works by asserting and de-asserting the SUSP# pin
  *     to CPU(GX1/GXLV) for configurable durations. When asserting SUSP#
 
 /* SUSCFG bits */
 #define SUSMOD         (1<<0)  /* enable/disable suspend modulation */
-/* the belows support only with cs5530 (after rev.1.2)/cs5530A */
+/* the below is supported only with cs5530 (after rev.1.2)/cs5530A */
 #define SMISPDUP       (1<<1)  /* select how SMI re-enable suspend modulation: */
                                /* IRQTC timer or read SMI speedup disable reg.(F1BAR[08-09h]) */
 #define SUSCFG         (1<<2)  /* enable powering down a GXLV processor. "Special 3Volt Suspend" mode */
-/* the belows support only with cs5530A */
+/* the below is supported only with cs5530A */
 #define PWRSVE_ISA     (1<<3)  /* stop ISA clock  */
 #define PWRSVE         (1<<4)  /* active idle */
 
index 5045f5d583c81954fa7123df8697188a39012583..749d00cb2ebdde52ae67719ecc4514191b6c20fe 100644 (file)
@@ -780,7 +780,7 @@ static int longhaul_setup_southbridge(void)
 
 static int __init longhaul_cpu_init(struct cpufreq_policy *policy)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
        char *cpuname=NULL;
        int ret;
        u32 lo, hi;
@@ -959,7 +959,7 @@ static struct cpufreq_driver longhaul_driver = {
 
 static int __init longhaul_init(void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
 
        if (c->x86_vendor != X86_VENDOR_CENTAUR || c->x86 != 6)
                return -ENODEV;
index b2689514295ab361057623dd7c2afb56d7deb81e..af4a867a097cdcc5f8296eca454199e39a56e675 100644 (file)
@@ -172,7 +172,7 @@ static unsigned int __init longrun_determine_freqs(unsigned int *low_freq,
        u32 save_lo, save_hi;
        u32 eax, ebx, ecx, edx;
        u32 try_hi;
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
 
        if (!low_freq || !high_freq)
                return -EINVAL;
@@ -298,7 +298,7 @@ static struct cpufreq_driver longrun_driver = {
  */
 static int __init longrun_init(void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
 
        if (c->x86_vendor != X86_VENDOR_TRANSMETA ||
            !cpu_has(c, X86_FEATURE_LONGRUN))
index 793eae854f4f779e26ba95404a054c94349cc395..14791ec55cfd16798eb0366cb908b31d0dedf1e7 100644 (file)
@@ -195,7 +195,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
 
 static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
 {
-       struct cpuinfo_x86 *c = &cpu_data[policy->cpu];
+       struct cpuinfo_x86 *c = &cpu_data(policy->cpu);
        int cpuid = 0;
        unsigned int i;
 
@@ -279,7 +279,7 @@ static struct cpufreq_driver p4clockmod_driver = {
 
 static int __init cpufreq_p4_init(void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
        int ret;
 
        /*
index 6d02853393175305e8f749b99a8500379d1353d2..eb9b62b0830c8941ee7ea990304596e2a1d82316 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  This file was based upon code in Powertweak Linux (http://powertweak.sf.net)
- *  (C) 2000-2003  Dave Jones, Arjan van de Ven, Janne Pänkälä, Dominik Brodowski.
+ *  (C) 2000-2003  Dave Jones, Arjan van de Ven, Janne Pänkälä, Dominik Brodowski.
  *
  *  Licensed under the terms of the GNU GPL License version 2.
  *
@@ -215,7 +215,7 @@ static struct cpufreq_driver powernow_k6_driver = {
  */
 static int __init powernow_k6_init(void)
 {
-       struct cpuinfo_x86      *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
 
        if ((c->x86_vendor != X86_VENDOR_AMD) || (c->x86 != 5) ||
                ((c->x86_model != 12) && (c->x86_model != 13)))
index f3686a5f2308ab0d9832fad24df58fb7bb4b07e9..b5a9863d6cdc336ce7b13f5c9d797944b179cbc6 100644 (file)
@@ -114,7 +114,7 @@ static int check_fsb(unsigned int fsbspeed)
 
 static int check_powernow(void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
        unsigned int maxei, eax, ebx, ecx, edx;
 
        if ((c->x86_vendor != X86_VENDOR_AMD) || (c->x86 !=6)) {
index c06ac680c9cace052135ed7e790118a7b4e71c86..9c36a53676b770830e1efffb5770788d34ab2ee4 100644 (file)
@@ -168,7 +168,7 @@ static void count_off_irt(struct powernow_k8_data *data)
        return;
 }
 
-/* the voltage stabalization time */
+/* the voltage stabilization time */
 static void count_off_vst(struct powernow_k8_data *data)
 {
        udelay(data->vstable * VST_UNITS_20US);
index b06c812208ca488a8b427fcfd9bb60edc28ec900..7c4f6e0faed4a555ac599837d347dee7958d4feb 100644 (file)
@@ -148,10 +148,10 @@ struct powernow_k8_data {
 #define PLL_LOCK_CONVERSION (1000/5) /* ms to ns, then divide by clock period */
 
 #define MAXIMUM_VID_STEPS 1  /* Current cpus only allow a single step of 25mV */
-#define VST_UNITS_20US 20   /* Voltage Stabalization Time is in units of 20us */
+#define VST_UNITS_20US 20   /* Voltage Stabilization Time is in units of 20us */
 
 /*
- * Most values of interest are enocoded in a single field of the _PSS
+ * Most values of interest are encoded in a single field of the _PSS
  * entries: the "control" value.
  */
 
index d9f3e90a7ae080c9ba1e316c56ccb3afe6022231..42da9bd677d6ee91ed3cb41f2b09c62d3bf5b26b 100644 (file)
@@ -102,7 +102,7 @@ static int sc520_freq_target (struct cpufreq_policy *policy,
 
 static int sc520_freq_cpu_init(struct cpufreq_policy *policy)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
        int result;
 
        /* capability check */
@@ -151,7 +151,7 @@ static struct cpufreq_driver sc520_freq_driver = {
 
 static int __init sc520_freq_init(void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
        int err;
 
        /* Test if we have the right hardware */
index 811d47438546974e41651794cecf380a26e53c33..3031f119619212d40946ee2d0b297bf8a43bc576 100644 (file)
@@ -230,7 +230,7 @@ static struct cpu_model models[] =
 
 static int centrino_cpu_init_table(struct cpufreq_policy *policy)
 {
-       struct cpuinfo_x86 *cpu = &cpu_data[policy->cpu];
+       struct cpuinfo_x86 *cpu = &cpu_data(policy->cpu);
        struct cpu_model *model;
 
        for(model = models; model->cpu_id != NULL; model++)
@@ -340,7 +340,7 @@ static unsigned int get_cur_freq(unsigned int cpu)
 
 static int centrino_cpu_init(struct cpufreq_policy *policy)
 {
-       struct cpuinfo_x86 *cpu = &cpu_data[policy->cpu];
+       struct cpuinfo_x86 *cpu = &cpu_data(policy->cpu);
        unsigned freq;
        unsigned l, h;
        int ret;
@@ -612,7 +612,7 @@ static struct cpufreq_driver centrino_driver = {
  */
 static int __init centrino_init(void)
 {
-       struct cpuinfo_x86 *cpu = cpu_data;
+       struct cpuinfo_x86 *cpu = &cpu_data(0);
 
        if (!cpu_has(cpu, X86_FEATURE_EST))
                return -ENODEV;
index b1acc8ce3167c8f02d0747f7282fc8b685e1d94a..76c3ab0da468db354af1d55da7f5b5af39fdca50 100644 (file)
@@ -228,7 +228,7 @@ EXPORT_SYMBOL_GPL(speedstep_get_processor_frequency);
 
 unsigned int speedstep_detect_processor (void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
        u32 ebx, msr_lo, msr_hi;
 
        dprintk("x86: %x, model: %x\n", c->x86, c->x86_model);
index 122d2d75aa9f9bbce77211038240686ebf2dc7e8..88d66fb8411d183cc5c96091b4722c165a2058bb 100644 (file)
@@ -93,7 +93,7 @@ static void __cpuinit check_cx686_slop(struct cpuinfo_x86 *c)
 
                local_irq_save(flags);
                ccr3 = getCx86(CX86_CCR3);
-               setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN  */
+               setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */
                ccr5 = getCx86(CX86_CCR5);
                if (ccr5 & 2)
                        setCx86(CX86_CCR5, ccr5 & 0xfd);  /* reset SLOP */
@@ -115,9 +115,9 @@ static void __cpuinit set_cx86_reorder(void)
 
        printk(KERN_INFO "Enable Memory access reorder on Cyrix/NSC processor.\n");
        ccr3 = getCx86(CX86_CCR3);
-       setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN  */
+       setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */
 
-       /* Load/Store Serialize to mem access disable (=reorder it)  */
+       /* Load/Store Serialize to mem access disable (=reorder it) */
        setCx86(CX86_PCR0, getCx86(CX86_PCR0) & ~0x80);
        /* set load/store serialize from 1GB to 4GB */
        ccr3 |= 0xe0;
@@ -146,7 +146,7 @@ static void __cpuinit set_cx86_inc(void)
        printk(KERN_INFO "Enable Incrementor on Cyrix/NSC processor.\n");
 
        ccr3 = getCx86(CX86_CCR3);
-       setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN  */
+       setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */
        /* PCR1 -- Performance Control */
        /* Incrementor on, whatever that is */
        setCx86(CX86_PCR1, getCx86(CX86_PCR1) | 0x02);
@@ -256,7 +256,7 @@ static void __cpuinit init_cyrix(struct cpuinfo_x86 *c)
                u32 vendor, device;
                /* It isn't really a PCI quirk directly, but the cure is the
                   same. The MediaGX has deep magic SMM stuff that handles the
-                  SB emulation. It thows away the fifo on disable_dma() which
+                  SB emulation. It throws away the fifo on disable_dma() which
                   is wrong and ruins the audio. 
 
                   Bug2: VSA1 has a wrap bug so that using maximum sized DMA 
index 297a24116949152324e3cb8edd8f91e2a2a310ba..9921b01fe19907bd9fb22dc9ca00d3d61e9c4381 100644 (file)
@@ -295,7 +295,7 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
        unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */
        unsigned int l2_id = 0, l3_id = 0, num_threads_sharing, index_msb;
 #ifdef CONFIG_X86_HT
-       unsigned int cpu = (c == &boot_cpu_data) ? 0 : (c - cpu_data);
+       unsigned int cpu = c->cpu_index;
 #endif
 
        if (c->cpuid_level > 3) {
@@ -417,14 +417,14 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
        if (new_l2) {
                l2 = new_l2;
 #ifdef CONFIG_X86_HT
-               cpu_llc_id[cpu] = l2_id;
+               per_cpu(cpu_llc_id, cpu) = l2_id;
 #endif
        }
 
        if (new_l3) {
                l3 = new_l3;
 #ifdef CONFIG_X86_HT
-               cpu_llc_id[cpu] = l3_id;
+               per_cpu(cpu_llc_id, cpu) = l3_id;
 #endif
        }
 
@@ -459,7 +459,7 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
        struct _cpuid4_info     *this_leaf, *sibling_leaf;
        unsigned long num_threads_sharing;
        int index_msb, i;
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        this_leaf = CPUID4_INFO_IDX(cpu, index);
        num_threads_sharing = 1 + this_leaf->eax.split.num_threads_sharing;
@@ -470,8 +470,8 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
                index_msb = get_count_order(num_threads_sharing);
 
                for_each_online_cpu(i) {
-                       if (c[i].apicid >> index_msb ==
-                           c[cpu].apicid >> index_msb) {
+                       if (cpu_data(i).apicid >> index_msb ==
+                           c->apicid >> index_msb) {
                                cpu_set(i, this_leaf->shared_cpu_map);
                                if (i != cpu && cpuid4_info[i])  {
                                        sibling_leaf = CPUID4_INFO_IDX(i, index);
index 2287d4863a8a01f7b060c39ffcebfe05dc33a94e..9964be3de2b7ceb2a80b26561738ab23f5b4ffed 100644 (file)
@@ -147,10 +147,10 @@ static void prepare_set(void)
        write_cr0(cr0);
        wbinvd();
 
-       /* Cyrix ARRs - everything else were excluded at the top */
+       /* Cyrix ARRs - everything else was excluded at the top */
        ccr3 = getCx86(CX86_CCR3);
 
-       /* Cyrix ARRs - everything else were excluded at the top */
+       /* Cyrix ARRs - everything else was excluded at the top */
        setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10);
 
 }
index 56f64e34829f937e878b0855187689e1abb35bab..992f08dfbb6c39d2df5f786d4310fd7d0704cb75 100644 (file)
@@ -182,7 +182,7 @@ static inline void k8_enable_fixed_iorrs(void)
 
 /**
  * Checks and updates an fixed-range MTRR if it differs from the value it
- * should have. If K8 extenstions are wanted, update the K8 SYSCFG MSR also.
+ * should have. If K8 extentions are wanted, update the K8 SYSCFG MSR also.
  * see AMD publication no. 24593, chapter 7.8.1, page 233 for more information
  * \param msr MSR address of the MTTR which should be checked and updated
  * \param changed pointer which indicates whether the MTRR needed to be changed
index 5e4be30ff903800a47ab47bfcec5198aacc7c81e..9abbdf7562c50ffe86a3024d07cc5829f902d8d6 100644 (file)
@@ -748,7 +748,7 @@ static int __init mtrr_init_finialize(void)
        if (use_intel())
                mtrr_state_warn();
        else {
-               /* The CPUs haven't MTRR and seemes not support SMP. They have
+               /* The CPUs haven't MTRR and seem to not support SMP. They have
                 * specific drivers, we use a tricky method to support
                 * suspend/resume for them.
                 * TBD: is there any system with such CPU which supports
index 54cdbf1a40f1a054bb5d9affc0c9c77fb913482b..c02541e6e653f72ae1856df090b0719041cd2664 100644 (file)
@@ -120,7 +120,9 @@ int reserve_perfctr_nmi(unsigned int msr)
        unsigned int counter;
 
        counter = nmi_perfctr_msr_to_bit(msr);
-       BUG_ON(counter > NMI_MAX_COUNTER_BITS);
+       /* register not managed by the allocator? */
+       if (counter > NMI_MAX_COUNTER_BITS)
+               return 1;
 
        if (!test_and_set_bit(counter, perfctr_nmi_owner))
                return 1;
@@ -132,7 +134,9 @@ void release_perfctr_nmi(unsigned int msr)
        unsigned int counter;
 
        counter = nmi_perfctr_msr_to_bit(msr);
-       BUG_ON(counter > NMI_MAX_COUNTER_BITS);
+       /* register not managed by the allocator? */
+       if (counter > NMI_MAX_COUNTER_BITS)
+               return;
 
        clear_bit(counter, perfctr_nmi_owner);
 }
@@ -142,7 +146,9 @@ int reserve_evntsel_nmi(unsigned int msr)
        unsigned int counter;
 
        counter = nmi_evntsel_msr_to_bit(msr);
-       BUG_ON(counter > NMI_MAX_COUNTER_BITS);
+       /* register not managed by the allocator? */
+       if (counter > NMI_MAX_COUNTER_BITS)
+               return 1;
 
        if (!test_and_set_bit(counter, evntsel_nmi_owner))
                return 1;
@@ -154,7 +160,9 @@ void release_evntsel_nmi(unsigned int msr)
        unsigned int counter;
 
        counter = nmi_evntsel_msr_to_bit(msr);
-       BUG_ON(counter > NMI_MAX_COUNTER_BITS);
+       /* register not managed by the allocator? */
+       if (counter > NMI_MAX_COUNTER_BITS)
+               return;
 
        clear_bit(counter, evntsel_nmi_owner);
 }
index 879a0f789b1e223026ec820c873cca43a70dec89..2d42b414b7779b37604d9c564f044642c8cb0832 100644 (file)
@@ -85,12 +85,13 @@ static int show_cpuinfo(struct seq_file *m, void *v)
                /* nothing */
        };
        struct cpuinfo_x86 *c = v;
-       int i, n = c - cpu_data;
+       int i, n = 0;
        int fpu_exception;
 
 #ifdef CONFIG_SMP
        if (!cpu_online(n))
                return 0;
+       n = c->cpu_index;
 #endif
        seq_printf(m, "processor\t: %d\n"
                "vendor_id\t: %s\n"
@@ -175,11 +176,15 @@ static int show_cpuinfo(struct seq_file *m, void *v)
 
 static void *c_start(struct seq_file *m, loff_t *pos)
 {
-       return *pos < NR_CPUS ? cpu_data + *pos : NULL;
+       if (*pos == 0)  /* just in case, cpu 0 is not the first */
+               *pos = first_cpu(cpu_possible_map);
+       if ((*pos) < NR_CPUS && cpu_possible(*pos))
+               return &cpu_data(*pos);
+       return NULL;
 }
 static void *c_next(struct seq_file *m, void *v, loff_t *pos)
 {
-       ++*pos;
+       *pos = next_cpu(*pos, cpu_possible_map);
        return c_start(m, pos);
 }
 static void c_stop(struct seq_file *m, void *v)
index 70dcf912d9fb3076e1116a438a3dcde699205ab9..05c9936a16ccc50c015dae4c3af81552d4564fa7 100644 (file)
@@ -114,7 +114,7 @@ static ssize_t cpuid_read(struct file *file, char __user *buf,
 static int cpuid_open(struct inode *inode, struct file *file)
 {
        unsigned int cpu = iminor(file->f_path.dentry->d_inode);
-       struct cpuinfo_x86 *c = &(cpu_data)[cpu];
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        if (cpu >= NR_CPUS || !cpu_online(cpu))
                return -ENXIO;  /* No such CPU */
@@ -134,15 +134,18 @@ static const struct file_operations cpuid_fops = {
        .open = cpuid_open,
 };
 
-static int __cpuinit cpuid_device_create(int i)
+static __cpuinit int cpuid_device_create(int cpu)
 {
-       int err = 0;
        struct device *dev;
 
-       dev = device_create(cpuid_class, NULL, MKDEV(CPUID_MAJOR, i), "cpu%d",i);
-       if (IS_ERR(dev))
-               err = PTR_ERR(dev);
-       return err;
+       dev = device_create(cpuid_class, NULL, MKDEV(CPUID_MAJOR, cpu),
+                           "cpu%d", cpu);
+       return IS_ERR(dev) ? PTR_ERR(dev) : 0;
+}
+
+static void cpuid_device_destroy(int cpu)
+{
+       device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
 }
 
 static int __cpuinit cpuid_class_cpu_callback(struct notifier_block *nfb,
@@ -150,18 +153,21 @@ static int __cpuinit cpuid_class_cpu_callback(struct notifier_block *nfb,
                                              void *hcpu)
 {
        unsigned int cpu = (unsigned long)hcpu;
+       int err = 0;
 
        switch (action) {
-       case CPU_ONLINE:
-       case CPU_ONLINE_FROZEN:
-               cpuid_device_create(cpu);
+       case CPU_UP_PREPARE:
+       case CPU_UP_PREPARE_FROZEN:
+               err = cpuid_device_create(cpu);
                break;
+       case CPU_UP_CANCELED:
+       case CPU_UP_CANCELED_FROZEN:
        case CPU_DEAD:
        case CPU_DEAD_FROZEN:
-               device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
+               cpuid_device_destroy(cpu);
                break;
        }
-       return NOTIFY_OK;
+       return err ? NOTIFY_BAD : NOTIFY_OK;
 }
 
 static struct notifier_block __cpuinitdata cpuid_class_cpu_notifier =
@@ -198,7 +204,7 @@ static int __init cpuid_init(void)
 out_class:
        i = 0;
        for_each_online_cpu(i) {
-               device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, i));
+               cpuid_device_destroy(i);
        }
        class_destroy(cpuid_class);
 out_chrdev:
@@ -212,7 +218,7 @@ static void __exit cpuid_exit(void)
        int cpu = 0;
 
        for_each_online_cpu(cpu)
-               device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
+               cpuid_device_destroy(cpu);
        class_destroy(cpuid_class);
        unregister_chrdev(CPUID_MAJOR, "cpu/cpuid");
        unregister_hotcpu_notifier(&cpuid_class_cpu_notifier);
index d58039e8de7480163af7d153d4df3b2396948e1a..58fd54eb5577b763ff1f6976475e699864ef4cdc 100644 (file)
@@ -706,7 +706,7 @@ void __init e820_register_memory(void)
        int i;
 
        /*
-        * Search for the bigest gap in the low 32 bits of the e820
+        * Search for the biggest gap in the low 32 bits of the e820
         * memory space.
         */
        last = 0x100000000ull;
similarity index 88%
rename from arch/x86/kernel/early-quirks_64.c
rename to arch/x86/kernel/early-quirks.c
index 13aa4fd728f3dc7543ad49a37f825852a9a8ef00..dc34acbd54aafd1710808e422eea853edaba1531 100644 (file)
 #include <linux/acpi.h>
 #include <linux/pci_ids.h>
 #include <asm/pci-direct.h>
-#include <asm/proto.h>
-#include <asm/iommu.h>
 #include <asm/dma.h>
+#include <asm/io_apic.h>
+#include <asm/apic.h>
+
+#ifdef CONFIG_IOMMU
+#include <asm/iommu.h>
+#endif
 
 static void __init via_bugs(void)
 {
@@ -23,7 +27,8 @@ static void __init via_bugs(void)
        if ((end_pfn > MAX_DMA32_PFN ||  force_iommu) &&
            !iommu_aperture_allowed) {
                printk(KERN_INFO
-  "Looks like a VIA chipset. Disabling IOMMU. Override with iommu=allowed\n");
+                      "Looks like a VIA chipset. Disabling IOMMU."
+                      " Override with iommu=allowed\n");
                iommu_aperture_disabled = 1;
        }
 #endif
@@ -40,6 +45,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header)
 static void __init nvidia_bugs(void)
 {
 #ifdef CONFIG_ACPI
+#ifdef CONFIG_X86_IO_APIC
        /*
         * All timer overrides on Nvidia are
         * wrong unless HPET is enabled.
@@ -58,6 +64,7 @@ static void __init nvidia_bugs(void)
                printk(KERN_INFO "If you got timer trouble "
                        "try acpi_use_timer_override\n");
        }
+#endif
 #endif
        /* RED-PEN skip them on mptables too? */
 
@@ -65,11 +72,13 @@ static void __init nvidia_bugs(void)
 
 static void __init ati_bugs(void)
 {
+#ifdef CONFIG_X86_IO_APIC
        if (timer_over_8254 == 1) {
                timer_over_8254 = 0;
                printk(KERN_INFO
-               "ATI board detected. Disabling timer routing over 8254.\n");
+               "ATI board detected. Disabling timer routing over 8254.\n");
        }
+#endif
 }
 
 struct chipset {
@@ -104,7 +113,7 @@ void __init early_quirks(void)
                                if (class == 0xffffffff)
                                        break;
 
-                               if ((class >> 16) != PCI_CLASS_BRIDGE_PCI)
+                               if ((class >> 16) != PCI_CLASS_BRIDGE_PCI)
                                        continue;
 
                                vendor = read_pci_config(num, slot, func,
index 4ae03e3e829441a27ed27decdd8905acf9b18411..ce703e21c91212485ccf04fdae476e806e755ac4 100644 (file)
 #include <acpi/acpi_bus.h>
 #endif
 
-/* which logical CPU number maps to which CPU (physical APIC ID) */
-u8 x86_cpu_to_apicid[NR_CPUS] __read_mostly
+/*
+ * which logical CPU number maps to which CPU (physical APIC ID)
+ *
+ * The following static array is used during kernel startup
+ * and the x86_cpu_to_apicid_ptr contains the address of the
+ * array during this time.  Is it zeroed when the per_cpu
+ * data area is removed.
+ */
+u8 x86_cpu_to_apicid_init[NR_CPUS] __initdata
                                        = { [0 ... NR_CPUS-1] = BAD_APICID };
-EXPORT_SYMBOL(x86_cpu_to_apicid);
+void *x86_cpu_to_apicid_ptr;
+DEFINE_PER_CPU(u8, x86_cpu_to_apicid) = BAD_APICID;
+EXPORT_PER_CPU_SYMBOL(x86_cpu_to_apicid);
 
 struct genapic __read_mostly *genapic = &apic_flat;
 
index 91c7526768ee8e0f934c7c7e7d8c1b987ad46112..07352b74bda6dfaac343ef5caa5674c6fde77a9e 100644 (file)
@@ -172,7 +172,7 @@ static unsigned int physflat_cpu_mask_to_apicid(cpumask_t cpumask)
         */
        cpu = first_cpu(cpumask);
        if ((unsigned)cpu < NR_CPUS)
-               return x86_cpu_to_apicid[cpu];
+               return per_cpu(x86_cpu_to_apicid, cpu);
        else
                return BAD_APICID;
 }
index a7eee0a4751d6b42568aac385c8c9625fa4e3741..6b3469311e42736a630d9d95d907c8230277ee51 100644 (file)
@@ -58,7 +58,7 @@ void __init x86_64_start_kernel(char * real_mode_data)
 
        for (i = 0; i < IDT_ENTRIES; i++)
                set_intr_gate(i, early_idt_handler);
-       asm volatile("lidt %0" :: "m" (idt_descr));
+       load_idt((const struct desc_ptr *)&idt_descr);
 
        early_printk("Kernel alive\n");
 
index f8367074da0dc1919fc45049c6ccaff94e0cc2a3..53303f2e547582e282f5a941cc2311b79a821238 100644 (file)
@@ -69,12 +69,15 @@ static inline void hpet_clear_mapping(void)
  * HPET command line enable / disable
  */
 static int boot_hpet_disable;
+int hpet_force_user;
 
 static int __init hpet_setup(char* str)
 {
        if (str) {
                if (!strncmp("disable", str, 7))
                        boot_hpet_disable = 1;
+               if (!strncmp("force", str, 5))
+                       hpet_force_user = 1;
        }
        return 1;
 }
@@ -350,7 +353,7 @@ static int hpet_clocksource_register(void)
         *
         * hpet period is in femto seconds per cycle
         * so we need to convert this to ns/cyc units
-        * aproximated by mult/2^shift
+        * approximated by mult/2^shift
         *
         *  fsec/cyc * 1nsec/1000000fsec = nsec/cyc = mult/2^shift
         *  fsec/cyc * 1ns/1000000fsec * 2^shift = mult
index 5cc8841ca2c695bfeb6c514f0e461f1294312cc0..a42c807453253f83fad63373567ed050a6ae1ac1 100644 (file)
@@ -86,7 +86,7 @@ static int pit_next_event(unsigned long delta, struct clock_event_device *evt)
  * On UP the PIT can serve all of the possible timer functions. On SMP systems
  * it can be solely used for the global tick.
  *
- * The profiling and update capabilites are switched off once the local apic is
+ * The profiling and update capabilities are switched off once the local apic is
  * registered. This mechanism replaces the previous #ifdef LOCAL_APIC -
  * !using_apic_timer decisions in do_timer_interrupt_hook()
  */
index d34a10cc13a7dbe4eba3b456ed5eeca83e7be526..f634fc715c99b455d3973645d4d16c3a80e13361 100644 (file)
@@ -403,7 +403,8 @@ void __init native_init_IRQ(void)
                int vector = FIRST_EXTERNAL_VECTOR + i;
                if (i >= NR_IRQS)
                        break;
-               if (vector != SYSCALL_VECTOR) 
+               /* SYSCALL_VECTOR was reserved in trap_init. */
+               if (!test_bit(vector, used_vectors))
                        set_intr_gate(vector, interrupt[i]);
        }
 
similarity index 79%
rename from arch/x86/kernel/init_task_32.c
rename to arch/x86/kernel/init_task.c
index d26fc063a760c508dd0060b784a6d070ff0bf4dc..468c9c43784261823bbd018550d113c4a49df777 100644 (file)
@@ -15,7 +15,6 @@ static struct files_struct init_files = INIT_FILES;
 static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
 static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
 struct mm_struct init_mm = INIT_MM(init_mm);
-
 EXPORT_SYMBOL(init_mm);
 
 /*
@@ -25,7 +24,7 @@ EXPORT_SYMBOL(init_mm);
  * way process stacks are handled. This is done by having a special
  * "init_task" linker map entry..
  */
-union thread_union init_thread_union 
+union thread_union init_thread_union
        __attribute__((__section__(".data.init_task"))) =
                { INIT_THREAD_INFO(init_task) };
 
@@ -35,12 +34,14 @@ union thread_union init_thread_union
  * All other task structs will be allocated on slabs in fork.c
  */
 struct task_struct init_task = INIT_TASK(init_task);
-
 EXPORT_SYMBOL(init_task);
 
 /*
  * per-CPU TSS segments. Threads are completely 'soft' on Linux,
- * no more per-task TSS's.
- */ 
+ * no more per-task TSS's. The TSS size is kept cacheline-aligned
+ * so they are allowed to end up in the .data.cacheline_aligned
+ * section. Since TSS's are completely CPU-local, we want them
+ * on exact cacheline boundaries, to eliminate cacheline ping-pong.
+ */
 DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) = INIT_TSS;
 
diff --git a/arch/x86/kernel/init_task_64.c b/arch/x86/kernel/init_task_64.c
deleted file mode 100644 (file)
index 4ff33d4..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/init.h>
-#include <linux/init_task.h>
-#include <linux/fs.h>
-#include <linux/mqueue.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/desc.h>
-
-static struct fs_struct init_fs = INIT_FS;
-static struct files_struct init_files = INIT_FILES;
-static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
-static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
-struct mm_struct init_mm = INIT_MM(init_mm);
-
-EXPORT_SYMBOL(init_mm);
-
-/*
- * Initial task structure.
- *
- * We need to make sure that this is 8192-byte aligned due to the
- * way process stacks are handled. This is done by having a special
- * "init_task" linker map entry..
- */
-union thread_union init_thread_union 
-       __attribute__((__section__(".data.init_task"))) =
-               { INIT_THREAD_INFO(init_task) };
-
-/*
- * Initial task structure.
- *
- * All other task structs will be allocated on slabs in fork.c
- */
-struct task_struct init_task = INIT_TASK(init_task);
-
-EXPORT_SYMBOL(init_task);
-/*
- * per-CPU TSS segments. Threads are completely 'soft' on Linux,
- * no more per-task TSS's. The TSS size is kept cacheline-aligned
- * so they are allowed to end up in the .data.cacheline_aligned
- * section. Since TSS's are completely CPU-local, we want them
- * on exact cacheline boundaries, to eliminate cacheline ping-pong.
- */ 
-DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) = INIT_TSS;
-
-/* Copies of the original ist values from the tss are only accessed during
- * debugging, no special alignment required.
- */
-DEFINE_PER_CPU(struct orig_ist, orig_ist);
-
-#define ALIGN_TO_4K __attribute__((section(".data.init_task")))
index 5f10c7189534807fa2c6eddd2ef838e06c85d09f..f35c6eb33da9b7a5e0caa1dee4f0e075121349af 100644 (file)
@@ -584,7 +584,7 @@ tryanotherirq:
 
        imbalance = move_this_load;
        
-       /* For physical_balance case, we accumlated both load
+       /* For physical_balance case, we accumulated both load
         * values in the one of the siblings cpu_irq[],
         * to use the same code for physical and logical processors
         * as much as possible. 
@@ -1198,7 +1198,7 @@ static u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_DEVICE_VECTOR , 0 }
 static int __assign_irq_vector(int irq)
 {
        static int current_vector = FIRST_DEVICE_VECTOR, current_offset = 0;
-       int vector, offset, i;
+       int vector, offset;
 
        BUG_ON((unsigned)irq >= NR_IRQ_VECTORS);
 
@@ -1215,11 +1215,8 @@ next:
        }
        if (vector == current_vector)
                return -ENOSPC;
-       if (vector == SYSCALL_VECTOR)
+       if (test_and_set_bit(vector, used_vectors))
                goto next;
-       for (i = 0; i < NR_IRQ_VECTORS; i++)
-               if (irq_vector[i] == vector)
-                       goto next;
 
        current_vector = vector;
        current_offset = offset;
@@ -2295,6 +2292,12 @@ static inline void __init check_timer(void)
 
 void __init setup_IO_APIC(void)
 {
+       int i;
+
+       /* Reserve all the system vectors. */
+       for (i = FIRST_SYSTEM_VECTOR; i < NR_VECTORS; i++)
+               set_bit(i, used_vectors);
+
        enable_IO_APIC();
 
        if (acpi_ioapic)
@@ -2472,7 +2475,7 @@ void destroy_irq(unsigned int irq)
 }
 
 /*
- * MSI mesage composition
+ * MSI message composition
  */
 #ifdef CONFIG_PCI_MSI
 static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_msg *msg)
index 1c2c7bf6a9d333fb512094752aa3c7dc0fc87e9a..b3c2d268d70889dd4e218e51b83e16189fe2e2ee 100644 (file)
@@ -1770,7 +1770,7 @@ __setup("no_timer_check", notimercheck);
 
 /*
  *
- * IRQ's that are handled by the PIC in the MPS IOAPIC case.
+ * IRQs that are handled by the PIC in the MPS IOAPIC case.
  * - IRQ2 is the cascade IRQ, and cannot be a io-apic IRQ.
  *   Linux doesn't really care, as it's not actually used
  *   for any interrupt handling anyway.
@@ -1921,7 +1921,7 @@ void destroy_irq(unsigned int irq)
 }
 
 /*
- * MSI mesage composition
+ * MSI message composition
  */
 #ifdef CONFIG_PCI_MSI
 static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_msg *msg)
index 66e6b797b2cb69a5819ab61155e0ab853d830338..07bbfe7aa7f70efa86fceb4adb87139296efad5c 100644 (file)
@@ -320,7 +320,7 @@ void do_machine_check(struct pt_regs * regs, long error_code)
 #ifdef CONFIG_X86_MCE_INTEL
 /***
  * mce_log_therm_throt_event - Logs the thermal throttling event to mcelog
- * @cpu: The CPU on which the event occured.
+ * @cpu: The CPU on which the event occurred.
  * @status: Event status information
  *
  * This function should be called by the thermal interrupt after the
@@ -688,7 +688,7 @@ static int __init mcheck_disable(char *str)
        return 1;
 }
 
-/* mce=off disables machine check. Note you can reenable it later
+/* mce=off disables machine check. Note you can re-enable it later
    using sysfs.
    mce=TOLERANCELEVEL (number, see above)
    mce=bootlog Log MCEs from before booting. Disabled by default on AMD.
@@ -799,7 +799,8 @@ static __cpuinit int mce_create_device(unsigned int cpu)
 {
        int err;
        int i;
-       if (!mce_available(&cpu_data[cpu]))
+
+       if (!mce_available(&cpu_data(cpu)))
                return -EIO;
 
        memset(&per_cpu(device_mce, cpu).kobj, 0, sizeof(struct kobject));
index 0d2afd96aca40b7ff5a458f1890b9422ba32873e..752fb16a817d7187ac1732e66c426a12a19ff352 100644 (file)
@@ -472,11 +472,11 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank)
        sprintf(name, "threshold_bank%i", bank);
 
 #ifdef CONFIG_SMP
-       if (cpu_data[cpu].cpu_core_id && shared_bank[bank]) {   /* symlink */
+       if (cpu_data(cpu).cpu_core_id && shared_bank[bank]) {   /* symlink */
                i = first_cpu(per_cpu(cpu_core_map, cpu));
 
                /* first core not up yet */
-               if (cpu_data[i].cpu_core_id)
+               if (cpu_data(i).cpu_core_id)
                        goto out;
 
                /* already linked */
index 09cf78110358fadc78bbc704349b8283737f5f90..09c315214a5ec87fdddd00f039255d69f3c01b9a 100644 (file)
@@ -132,7 +132,7 @@ static struct ucode_cpu_info {
 
 static void collect_cpu_info(int cpu_num)
 {
-       struct cpuinfo_x86 *c = cpu_data + cpu_num;
+       struct cpuinfo_x86 *c = &cpu_data(cpu_num);
        struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num;
        unsigned int val[2];
 
@@ -522,7 +522,7 @@ static struct platform_device *microcode_pdev;
 static int cpu_request_microcode(int cpu)
 {
        char name[30];
-       struct cpuinfo_x86 *c = cpu_data + cpu;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
        const struct firmware *firmware;
        void *buf;
        unsigned long size;
@@ -570,7 +570,7 @@ static int cpu_request_microcode(int cpu)
 
 static int apply_microcode_check_cpu(int cpu)
 {
-       struct cpuinfo_x86 *c = cpu_data + cpu;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
        struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
        cpumask_t old;
        unsigned int val[2];
index 13abb4ebfb79b3f831f8b7f5373c16d31844c2bd..7a05a7f6099a4ee31b7bb72e6c11c956282588da 100644 (file)
@@ -1001,7 +1001,7 @@ void __init mp_config_acpi_legacy_irqs (void)
 
        /* 
         * Use the default configuration for the IRQs 0-15.  Unless
-        * overriden by (MADT) interrupt source override entries.
+        * overridden by (MADT) interrupt source override entries.
         */
        for (i = 0; i < 16; i++) {
                int idx;
index 8bf0ca03ac8e8a78f13ca5ea86842e02cfca9be0..ef4aab123581a54ac17019d4441138a90b36b980 100644 (file)
@@ -57,6 +57,8 @@ unsigned long mp_lapic_addr = 0;
 
 /* Processor that is doing the boot up */
 unsigned int boot_cpu_id = -1U;
+EXPORT_SYMBOL(boot_cpu_id);
+
 /* Internal processor count */
 unsigned int num_processors __cpuinitdata = 0;
 
@@ -86,7 +88,7 @@ static int __init mpf_checksum(unsigned char *mp, int len)
        return sum & 0xFF;
 }
 
-static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
+static void __cpuinit MP_processor_info(struct mpc_config_processor *m)
 {
        int cpu;
        cpumask_t tmp_map;
@@ -123,7 +125,18 @@ static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
                cpu = 0;
        }
        bios_cpu_apicid[cpu] = m->mpc_apicid;
-       x86_cpu_to_apicid[cpu] = m->mpc_apicid;
+       /*
+        * We get called early in the the start_kernel initialization
+        * process when the per_cpu data area is not yet setup, so we
+        * use a static array that is removed after the per_cpu data
+        * area is created.
+        */
+       if (x86_cpu_to_apicid_ptr) {
+               u8 *x86_cpu_to_apicid = (u8 *)x86_cpu_to_apicid_ptr;
+               x86_cpu_to_apicid[cpu] = m->mpc_apicid;
+       } else {
+               per_cpu(x86_cpu_to_apicid, cpu) = m->mpc_apicid;
+       }
 
        cpu_set(cpu, cpu_possible_map);
        cpu_set(cpu, cpu_present_map);
index e18e516cf5491bf875d5fbe6a3ef42fc10e39fef..ee6eba4ecfeaadee33e8875be5a4f3b1ccd253d0 100644 (file)
@@ -112,7 +112,7 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
 static int msr_open(struct inode *inode, struct file *file)
 {
        unsigned int cpu = iminor(file->f_path.dentry->d_inode);
-       struct cpuinfo_x86 *c = &(cpu_data)[cpu];
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        if (cpu >= NR_CPUS || !cpu_online(cpu))
                return -ENXIO;  /* No such CPU */
index b2b42bdb0a150c8f1d74f6630d1f9dc0be3569a2..afaf9f12c03290c24b2fd781233b464aa26343f5 100644 (file)
@@ -11,7 +11,7 @@
 #include <asm/iommu.h>
 #include <asm/calgary.h>
 
-int iommu_merge __read_mostly = 0;
+int iommu_merge __read_mostly = 1;
 EXPORT_SYMBOL(iommu_merge);
 
 dma_addr_t bad_dma_address __read_mostly;
index 044a47745a5cfe5eee6999297da3582e18681dc2..7b899584d290833cdbfed7dee779e20043a91ddb 100644 (file)
@@ -295,34 +295,52 @@ static int __init idle_setup(char *str)
 }
 early_param("idle", idle_setup);
 
-void show_regs(struct pt_regs * regs)
+void __show_registers(struct pt_regs *regs, int all)
 {
        unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
        unsigned long d0, d1, d2, d3, d6, d7;
+       unsigned long esp;
+       unsigned short ss, gs;
+
+       if (user_mode_vm(regs)) {
+               esp = regs->esp;
+               ss = regs->xss & 0xffff;
+               savesegment(gs, gs);
+       } else {
+               esp = (unsigned long) (&regs->esp);
+               savesegment(ss, ss);
+               savesegment(gs, gs);
+       }
 
        printk("\n");
-       printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm);
-       printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id());
+       printk("Pid: %d, comm: %s %s (%s %.*s)\n",
+                       task_pid_nr(current), current->comm,
+                       print_tainted(), init_utsname()->release,
+                       (int)strcspn(init_utsname()->version, " "),
+                       init_utsname()->version);
+
+       printk("EIP: %04x:[<%08lx>] EFLAGS: %08lx CPU: %d\n",
+                       0xffff & regs->xcs, regs->eip, regs->eflags,
+                       smp_processor_id());
        print_symbol("EIP is at %s\n", regs->eip);
 
-       if (user_mode_vm(regs))
-               printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
-       printk(" EFLAGS: %08lx    %s  (%s %.*s)\n",
-              regs->eflags, print_tainted(), init_utsname()->release,
-              (int)strcspn(init_utsname()->version, " "),
-              init_utsname()->version);
        printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
-               regs->eax,regs->ebx,regs->ecx,regs->edx);
-       printk("ESI: %08lx EDI: %08lx EBP: %08lx",
-               regs->esi, regs->edi, regs->ebp);
-       printk(" DS: %04x ES: %04x FS: %04x\n",
-              0xffff & regs->xds,0xffff & regs->xes, 0xffff & regs->xfs);
+               regs->eax, regs->ebx, regs->ecx, regs->edx);
+       printk("ESI: %08lx EDI: %08lx EBP: %08lx ESP: %08lx\n",
+               regs->esi, regs->edi, regs->ebp, esp);
+       printk(" DS: %04x ES: %04x FS: %04x GS: %04x SS: %04x\n",
+              regs->xds & 0xffff, regs->xes & 0xffff,
+              regs->xfs & 0xffff, gs, ss);
+
+       if (!all)
+               return;
 
        cr0 = read_cr0();
        cr2 = read_cr2();
        cr3 = read_cr3();
        cr4 = read_cr4_safe();
-       printk("CR0: %08lx CR2: %08lx CR3: %08lx CR4: %08lx\n", cr0, cr2, cr3, cr4);
+       printk("CR0: %08lx CR2: %08lx CR3: %08lx CR4: %08lx\n",
+                       cr0, cr2, cr3, cr4);
 
        get_debugreg(d0, 0);
        get_debugreg(d1, 1);
@@ -330,10 +348,16 @@ void show_regs(struct pt_regs * regs)
        get_debugreg(d3, 3);
        printk("DR0: %08lx DR1: %08lx DR2: %08lx DR3: %08lx\n",
                        d0, d1, d2, d3);
+
        get_debugreg(d6, 6);
        get_debugreg(d7, 7);
-       printk("DR6: %08lx DR7: %08lx\n", d6, d7);
+       printk("DR6: %08lx DR7: %08lx\n",
+                       d6, d7);
+}
 
+void show_regs(struct pt_regs *regs)
+{
+       __show_registers(regs, 1);
        show_trace(NULL, regs, &regs->esp);
 }
 
index 99102ec5fade9dc79ff01fde4469ef10a39cff33..ff5431cc03ee8ea949704fa19d6f289afc7f74bd 100644 (file)
@@ -632,7 +632,7 @@ void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code)
        /* User-mode eip? */
        info.si_addr = user_mode_vm(regs) ? (void __user *) regs->eip : NULL;
 
-       /* Send us the fakey SIGTRAP */
+       /* Send us the fake SIGTRAP */
        force_sig_info(SIGTRAP, &info, tsk);
 }
 
index d769e204f942904b389daba44417cd9c97f61dc1..a4ce1911efdf948691b8ae2afef62ed878033bfa 100644 (file)
@@ -45,9 +45,12 @@ static void __devinit quirk_intel_irqbalance(struct pci_dev *dev)
        if (!(config & 0x2))
                pci_write_config_byte(dev, 0xf4, config);
 }
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_E7320_MCH,  quirk_intel_irqbalance);
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_E7525_MCH,  quirk_intel_irqbalance);
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_E7520_MCH,  quirk_intel_irqbalance);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH,
+                       quirk_intel_irqbalance);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH,
+                       quirk_intel_irqbalance);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH,
+                       quirk_intel_irqbalance);
 #endif
 
 #if defined(CONFIG_HPET_TIMER)
@@ -56,7 +59,8 @@ unsigned long force_hpet_address;
 static enum {
        NONE_FORCE_HPET_RESUME,
        OLD_ICH_FORCE_HPET_RESUME,
-       ICH_FORCE_HPET_RESUME
+       ICH_FORCE_HPET_RESUME,
+       VT8237_FORCE_HPET_RESUME
 } force_hpet_resume_type;
 
 static void __iomem *rcba_base;
@@ -146,17 +150,17 @@ static void ich_force_enable_hpet(struct pci_dev *dev)
 }
 
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_0,
-                         ich_force_enable_hpet);
+                        ich_force_enable_hpet);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1,
-                         ich_force_enable_hpet);
+                        ich_force_enable_hpet);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0,
-                         ich_force_enable_hpet);
+                        ich_force_enable_hpet);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_1,
-                         ich_force_enable_hpet);
+                        ich_force_enable_hpet);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_31,
-                         ich_force_enable_hpet);
+                        ich_force_enable_hpet);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_1,
-                         ich_force_enable_hpet);
+                        ich_force_enable_hpet);
 
 
 static struct pci_dev *cached_dev;
@@ -232,10 +236,91 @@ static void old_ich_force_enable_hpet(struct pci_dev *dev)
        printk(KERN_DEBUG "Failed to force enable HPET\n");
 }
 
+/*
+ * Undocumented chipset features. Make sure that the user enforced
+ * this.
+ */
+static void old_ich_force_enable_hpet_user(struct pci_dev *dev)
+{
+       if (hpet_force_user)
+               old_ich_force_enable_hpet(dev);
+}
+
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0,
+                        old_ich_force_enable_hpet_user);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12,
+                        old_ich_force_enable_hpet_user);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0,
+                        old_ich_force_enable_hpet_user);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12,
+                        old_ich_force_enable_hpet_user);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0,
-                         old_ich_force_enable_hpet);
+                        old_ich_force_enable_hpet);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_12,
-                         old_ich_force_enable_hpet);
+                        old_ich_force_enable_hpet);
+
+
+static void vt8237_force_hpet_resume(void)
+{
+       u32 val;
+
+       if (!force_hpet_address || !cached_dev)
+               return;
+
+       val = 0xfed00000 | 0x80;
+       pci_write_config_dword(cached_dev, 0x68, val);
+
+       pci_read_config_dword(cached_dev, 0x68, &val);
+       if (val & 0x80)
+               printk(KERN_DEBUG "Force enabled HPET at resume\n");
+       else
+               BUG();
+}
+
+static void vt8237_force_enable_hpet(struct pci_dev *dev)
+{
+       u32 uninitialized_var(val);
+
+       if (!hpet_force_user || hpet_address || force_hpet_address)
+               return;
+
+       pci_read_config_dword(dev, 0x68, &val);
+       /*
+        * Bit 7 is HPET enable bit.
+        * Bit 31:10 is HPET base address (contrary to what datasheet claims)
+        */
+       if (val & 0x80) {
+               force_hpet_address = (val & ~0x3ff);
+               printk(KERN_DEBUG "HPET at base address 0x%lx\n",
+                              force_hpet_address);
+               return;
+       }
+
+       /*
+        * HPET is disabled. Trying enabling at FED00000 and check
+        * whether it sticks
+        */
+       val = 0xfed00000 | 0x80;
+       pci_write_config_dword(dev, 0x68, val);
+
+       pci_read_config_dword(dev, 0x68, &val);
+       if (val & 0x80) {
+               force_hpet_address = (val & ~0x3ff);
+               printk(KERN_DEBUG "Force enabled HPET at base address 0x%lx\n",
+                              force_hpet_address);
+               cached_dev = dev;
+               force_hpet_resume_type = VT8237_FORCE_HPET_RESUME;
+               return;
+       }
+
+       printk(KERN_DEBUG "Failed to force enable HPET\n");
+}
+
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235,
+                        vt8237_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237,
+                        vt8237_force_enable_hpet);
+
 
 void force_hpet_resume(void)
 {
@@ -246,6 +331,9 @@ void force_hpet_resume(void)
            case OLD_ICH_FORCE_HPET_RESUME:
                return old_ich_force_hpet_resume();
 
+           case VT8237_FORCE_HPET_RESUME:
+               return vt8237_force_hpet_resume();
+
            default:
                break;
        }
index 368db2b9c5ac3977b0ec32edabe2aec9359df6de..776eb06b6512dcf61e0a0d85daa23992870ac7e2 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/sched.h>
 #include <asm/io.h>
 #include <asm/delay.h>
+#include <asm/desc.h>
 #include <asm/hw_irq.h>
 #include <asm/system.h>
 #include <asm/pgtable.h>
@@ -136,7 +137,7 @@ void machine_emergency_restart(void)
                }
 
                case BOOT_TRIPLE: 
-                       __asm__ __volatile__("lidt (%0)": :"r" (&no_idt));
+                       load_idt((const struct desc_ptr *)&no_idt);
                        __asm__ __volatile__("int3");
 
                        reboot_type = BOOT_KBD;
index 8b30b26ad0698161276c2b87c4c64594887aa4ad..1a07bbea7be36eadcea68843d7b727eaa03ee9a4 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/interrupt.h>
 #include <asm/reboot_fixups.h>
 #include <asm/msr.h>
+#include <asm/geode.h>
 
 static void cs5530a_warm_reset(struct pci_dev *dev)
 {
@@ -24,11 +25,8 @@ static void cs5530a_warm_reset(struct pci_dev *dev)
 
 static void cs5536_warm_reset(struct pci_dev *dev)
 {
-       /*
-        * 6.6.2.12 Soft Reset (DIVIL_SOFT_RESET)
-        * writing 1 to the LSB of this MSR causes a hard reset.
-        */
-       wrmsrl(0x51400017, 1ULL);
+       /* writing 1 to the LSB of this MSR causes a hard reset */
+       wrmsrl(MSR_DIVIL_SOFT_RESET, 1ULL);
        udelay(50); /* shouldn't get here but be safe and spin a while */
 }
 
index ba9188235057b17a6002a10c36493646aa747da8..3558ac78c9265517a4eb22628708f9774ded1f8b 100644 (file)
@@ -184,6 +184,12 @@ void __cpuinit check_efer(void)
 
 unsigned long kernel_eflags;
 
+/*
+ * Copies of the original ist values from the tss are only accessed during
+ * debugging, no special alignment required.
+ */
+DEFINE_PER_CPU(struct orig_ist, orig_ist);
+
 /*
  * cpu_init() initializes state that is per-CPU. Some data is already
  * initialized (naturally) in the bootstrap process, such as the GDT
@@ -224,8 +230,8 @@ void __cpuinit cpu_init (void)
                memcpy(cpu_gdt(cpu), cpu_gdt_table, GDT_SIZE);
 
        cpu_gdt_descr[cpu].size = GDT_SIZE;
-       asm volatile("lgdt %0" :: "m" (cpu_gdt_descr[cpu]));
-       asm volatile("lidt %0" :: "m" (idt_descr));
+       load_gdt((const struct desc_ptr *)&cpu_gdt_descr[cpu]);
+       load_idt((const struct desc_ptr *)&idt_descr);
 
        memset(me->thread.tls_array, 0, GDT_ENTRY_TLS_ENTRIES * 8);
        syscall_init();
index 978dc0196a0f1101ab77095b8d74948159cead4b..ba2e165a8a0f7fb8d25d7945ca9a101607f81c03 100644 (file)
@@ -624,7 +624,7 @@ void __init setup_arch(char **cmdline_p)
        /*
         * NOTE: before this point _nobody_ is allowed to allocate
         * any memory using the bootmem allocator.  Although the
-        * alloctor is now initialised only the first 8Mb of the kernel
+        * allocator is now initialised only the first 8Mb of the kernel
         * virtual address space has been mapped.  All allocations before
         * paging_init() has completed must use the alloc_bootmem_low_pages()
         * variant (which allocates DMA'able memory) and care must be taken
@@ -661,9 +661,7 @@ void __init setup_arch(char **cmdline_p)
 #endif
 
 #ifdef CONFIG_PCI
-#ifdef CONFIG_X86_IO_APIC
-       check_acpi_pci();       /* Checks more than just ACPI actually */
-#endif
+       early_quirks();
 #endif
 
 #ifdef CONFIG_ACPI
index cdcba69752263678c1d5337c5a8d75a000f30be7..31322d42eaae688b066e1ad3c74cb90886c4947c 100644 (file)
@@ -302,6 +302,11 @@ void __init setup_arch(char **cmdline_p)
 
        dmi_scan_machine();
 
+#ifdef CONFIG_SMP
+       /* setup to use the static apicid table during kernel startup */
+       x86_cpu_to_apicid_ptr = (void *)&x86_cpu_to_apicid_init;
+#endif
+
 #ifdef CONFIG_ACPI
        /*
         * Initialize the ACPI boot-time table parser (gets the RSDP and SDT).
@@ -554,7 +559,7 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
                   but in the same order as the HT nodeids.
                   If that doesn't result in a usable node fall back to the
                   path for the previous case.  */
-               int ht_nodeid = apicid - (cpu_data[0].phys_proc_id << bits);
+               int ht_nodeid = apicid - (cpu_data(0).phys_proc_id << bits);
                if (ht_nodeid >= 0 &&
                    apicid_to_node[ht_nodeid] != NUMA_NO_NODE)
                        node = apicid_to_node[ht_nodeid];
@@ -878,6 +883,7 @@ void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c)
 
 #ifdef CONFIG_SMP
        c->phys_proc_id = (cpuid_ebx(1) >> 24) & 0xff;
+       c->cpu_index = 0;
 #endif
 }
 
@@ -984,6 +990,7 @@ void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 static int show_cpuinfo(struct seq_file *m, void *v)
 {
        struct cpuinfo_x86 *c = v;
+       int cpu = 0;
 
        /* 
         * These flag bits must match the definitions in <asm/cpufeature.h>.
@@ -1062,8 +1069,9 @@ static int show_cpuinfo(struct seq_file *m, void *v)
 
 
 #ifdef CONFIG_SMP
-       if (!cpu_online(c-cpu_data))
+       if (!cpu_online(c->cpu_index))
                return 0;
+       cpu = c->cpu_index;
 #endif
 
        seq_printf(m,"processor\t: %u\n"
@@ -1071,7 +1079,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
                     "cpu family\t: %d\n"
                     "model\t\t: %d\n"
                     "model name\t: %s\n",
-                    (unsigned)(c-cpu_data),
+                    (unsigned)cpu,
                     c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
                     c->x86,
                     (int)c->x86_model,
@@ -1083,7 +1091,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
                seq_printf(m, "stepping\t: unknown\n");
        
        if (cpu_has(c,X86_FEATURE_TSC)) {
-               unsigned int freq = cpufreq_quick_get((unsigned)(c-cpu_data));
+               unsigned int freq = cpufreq_quick_get((unsigned)cpu);
                if (!freq)
                        freq = cpu_khz;
                seq_printf(m, "cpu MHz\t\t: %u.%03u\n",
@@ -1096,7 +1104,6 @@ static int show_cpuinfo(struct seq_file *m, void *v)
        
 #ifdef CONFIG_SMP
        if (smp_num_siblings * c->x86_max_cores > 1) {
-               int cpu = c - cpu_data;
                seq_printf(m, "physical id\t: %d\n", c->phys_proc_id);
                seq_printf(m, "siblings\t: %d\n",
                               cpus_weight(per_cpu(cpu_core_map, cpu)));
@@ -1154,12 +1161,16 @@ static int show_cpuinfo(struct seq_file *m, void *v)
 
 static void *c_start(struct seq_file *m, loff_t *pos)
 {
-       return *pos < NR_CPUS ? cpu_data + *pos : NULL;
+       if (*pos == 0)  /* just in case, cpu 0 is not the first */
+               *pos = first_cpu(cpu_possible_map);
+       if ((*pos) < NR_CPUS && cpu_possible(*pos))
+               return &cpu_data(*pos);
+       return NULL;
 }
 
 static void *c_next(struct seq_file *m, void *v, loff_t *pos)
 {
-       ++*pos;
+       *pos = next_cpu(*pos, cpu_possible_map);
        return c_start(m, pos);
 }
 
index 6dc394b8725526dfc03c7fbefd04aedc64ec671f..9bdd83022f5f1659588409a2704d6a157f13e23e 100644 (file)
@@ -594,7 +594,7 @@ static void fastcall do_signal(struct pt_regs *regs)
 
        signr = get_signal_to_deliver(&info, &ka, regs, NULL);
        if (signr > 0) {
-               /* Reenable any watchpoints before delivering the
+               /* Re-enable any watchpoints before delivering the
                 * signal to user space. The processor register will
                 * have been cleared if the watchpoint triggered
                 * inside the kernel.
index 683802bec419121944a9ec54fc68c013e86bb600..ab086b0357fc7cc977378a97f3525ad47f105095 100644 (file)
@@ -410,7 +410,7 @@ static void do_signal(struct pt_regs *regs)
 
        signr = get_signal_to_deliver(&info, &ka, regs, NULL);
        if (signr > 0) {
-               /* Reenable any watchpoints before delivering the
+               /* Re-enable any watchpoints before delivering the
                 * signal to user space. The processor register will
                 * have been cleared if the watchpoint triggered
                 * inside the kernel.
index 791d9f8036ae94019b2def24ed94a267414baf34..f32115308399453305598431f9955f97eb22387e 100644 (file)
@@ -69,7 +69,7 @@
  *
  *             B stepping CPUs may hang. There are hardware work arounds
  *     for this. We warn about it in case your board doesn't have the work
- *     arounds. Basically thats so I can tell anyone with a B stepping
+ *     arounds. Basically that's so I can tell anyone with a B stepping
  *     CPU and SMP problems "tough".
  *
  *     Specific items [From Pentium Processor Specification Update]
@@ -273,7 +273,7 @@ void leave_mm(unsigned long cpu)
  * 1a1) cpu_clear(cpu, old_mm->cpu_vm_mask);
  *     Stop ipi delivery for the old mm. This is not synchronized with
  *     the other cpus, but smp_invalidate_interrupt ignore flush ipis
- *     for the wrong mm, and in the worst case we perform a superflous
+ *     for the wrong mm, and in the worst case we perform a superfluous
  *     tlb flush.
  * 1a2) set cpu_tlbstate to TLBSTATE_OK
  *     Now the smp_invalidate_interrupt won't call leave_mm if cpu0
@@ -610,7 +610,7 @@ static void stop_this_cpu (void * dummy)
         */
        cpu_clear(smp_processor_id(), cpu_online_map);
        disable_local_APIC();
-       if (cpu_data[smp_processor_id()].hlt_works_ok)
+       if (cpu_data(smp_processor_id()).hlt_works_ok)
                for(;;) halt();
        for (;;);
 }
@@ -676,7 +676,7 @@ static int convert_apicid_to_cpu(int apic_id)
        int i;
 
        for (i = 0; i < NR_CPUS; i++) {
-               if (x86_cpu_to_apicid[i] == apic_id)
+               if (per_cpu(x86_cpu_to_apicid, i) == apic_id)
                        return i;
        }
        return -1;
index 5c2964727d197faf6bc135e50c7c95399781bcae..03fa6ed559c637f5bf3b240184db97c16642aa65 100644 (file)
@@ -322,17 +322,27 @@ void unlock_ipi_call_lock(void)
 }
 
 /*
- * this function sends a 'generic call function' IPI to one other CPU
- * in the system.
- *
- * cpu is a standard Linux logical CPU number.
+ * this function sends a 'generic call function' IPI to all other CPU
+ * of the system defined in the mask.
  */
-static void
-__smp_call_function_single(int cpu, void (*func) (void *info), void *info,
-                               int nonatomic, int wait)
+
+static int
+__smp_call_function_mask(cpumask_t mask,
+                        void (*func)(void *), void *info,
+                        int wait)
 {
        struct call_data_struct data;
-       int cpus = 1;
+       cpumask_t allbutself;
+       int cpus;
+
+       allbutself = cpu_online_map;
+       cpu_clear(smp_processor_id(), allbutself);
+
+       cpus_and(mask, mask, allbutself);
+       cpus = cpus_weight(mask);
+
+       if (!cpus)
+               return 0;
 
        data.func = func;
        data.info = info;
@@ -343,19 +353,55 @@ __smp_call_function_single(int cpu, void (*func) (void *info), void *info,
 
        call_data = &data;
        wmb();
-       /* Send a message to all other CPUs and wait for them to respond */
-       send_IPI_mask(cpumask_of_cpu(cpu), CALL_FUNCTION_VECTOR);
+
+       /* Send a message to other CPUs */
+       if (cpus_equal(mask, allbutself))
+               send_IPI_allbutself(CALL_FUNCTION_VECTOR);
+       else
+               send_IPI_mask(mask, CALL_FUNCTION_VECTOR);
 
        /* Wait for response */
        while (atomic_read(&data.started) != cpus)
                cpu_relax();
 
        if (!wait)
-               return;
+               return 0;
 
        while (atomic_read(&data.finished) != cpus)
                cpu_relax();
+
+       return 0;
+}
+/**
+ * smp_call_function_mask(): Run a function on a set of other CPUs.
+ * @mask: The set of cpus to run on.  Must not include the current cpu.
+ * @func: The function to run. This must be fast and non-blocking.
+ * @info: An arbitrary pointer to pass to the function.
+ * @wait: If true, wait (atomically) until function has completed on other CPUs.
+ *
+ * Returns 0 on success, else a negative status code.
+ *
+ * If @wait is true, then returns once @func has returned; otherwise
+ * it returns just before the target cpu calls @func.
+ *
+ * You must not call this function with disabled interrupts or from a
+ * hardware interrupt handler or from a bottom half handler.
+ */
+int smp_call_function_mask(cpumask_t mask,
+                          void (*func)(void *), void *info,
+                          int wait)
+{
+       int ret;
+
+       /* Can deadlock when called with interrupts disabled */
+       WARN_ON(irqs_disabled());
+
+       spin_lock(&call_lock);
+       ret = __smp_call_function_mask(mask, func, info, wait);
+       spin_unlock(&call_lock);
+       return ret;
 }
+EXPORT_SYMBOL(smp_call_function_mask);
 
 /*
  * smp_call_function_single - Run a function on a specific CPU
@@ -374,6 +420,7 @@ int smp_call_function_single (int cpu, void (*func) (void *info), void *info,
        int nonatomic, int wait)
 {
        /* prevent preemption and reschedule on another processor */
+       int ret;
        int me = get_cpu();
 
        /* Can deadlock when called with interrupts disabled */
@@ -387,50 +434,13 @@ int smp_call_function_single (int cpu, void (*func) (void *info), void *info,
                return 0;
        }
 
-       spin_lock(&call_lock);
-       __smp_call_function_single(cpu, func, info, nonatomic, wait);
-       spin_unlock(&call_lock);
+       ret = smp_call_function_mask(cpumask_of_cpu(cpu), func, info, wait);
+
        put_cpu();
-       return 0;
+       return ret;
 }
 EXPORT_SYMBOL(smp_call_function_single);
 
-/*
- * this function sends a 'generic call function' IPI to all other CPUs
- * in the system.
- */
-static void __smp_call_function (void (*func) (void *info), void *info,
-                               int nonatomic, int wait)
-{
-       struct call_data_struct data;
-       int cpus = num_online_cpus()-1;
-
-       if (!cpus)
-               return;
-
-       data.func = func;
-       data.info = info;
-       atomic_set(&data.started, 0);
-       data.wait = wait;
-       if (wait)
-               atomic_set(&data.finished, 0);
-
-       call_data = &data;
-       wmb();
-       /* Send a message to all other CPUs and wait for them to respond */
-       send_IPI_allbutself(CALL_FUNCTION_VECTOR);
-
-       /* Wait for response */
-       while (atomic_read(&data.started) != cpus)
-               cpu_relax();
-
-       if (!wait)
-               return;
-
-       while (atomic_read(&data.finished) != cpus)
-               cpu_relax();
-}
-
 /*
  * smp_call_function - run a function on all other CPUs.
  * @func: The function to run. This must be fast and non-blocking.
@@ -449,10 +459,7 @@ static void __smp_call_function (void (*func) (void *info), void *info,
 int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
                        int wait)
 {
-       spin_lock(&call_lock);
-       __smp_call_function(func,info,nonatomic,wait);
-       spin_unlock(&call_lock);
-       return 0;
+       return smp_call_function_mask(cpu_online_map, func, info, wait);
 }
 EXPORT_SYMBOL(smp_call_function);
 
@@ -479,7 +486,7 @@ void smp_send_stop(void)
        /* Don't deadlock on the call lock in panic */
        nolock = !spin_trylock(&call_lock);
        local_irq_save(flags);
-       __smp_call_function(stop_this_cpu, NULL, 0, 0);
+       __smp_call_function_mask(cpu_online_map, stop_this_cpu, NULL, 0);
        if (!nolock)
                spin_unlock(&call_lock);
        disable_local_APIC();
index be3faac047190e2647d95baae8d0322dc1a922c4..ef0f34ede1ab34c4db94e1d6c5bd22f4b4a2b4d6 100644 (file)
@@ -67,7 +67,7 @@ int smp_num_siblings = 1;
 EXPORT_SYMBOL(smp_num_siblings);
 
 /* Last level cache ID of each logical CPU */
-int cpu_llc_id[NR_CPUS] __cpuinitdata = {[0 ... NR_CPUS-1] = BAD_APICID};
+DEFINE_PER_CPU(u8, cpu_llc_id) = BAD_APICID;
 
 /* representing HT siblings of each logical CPU */
 DEFINE_PER_CPU(cpumask_t, cpu_sibling_map);
@@ -89,12 +89,20 @@ EXPORT_SYMBOL(cpu_possible_map);
 static cpumask_t smp_commenced_mask;
 
 /* Per CPU bogomips and other parameters */
-struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
-EXPORT_SYMBOL(cpu_data);
+DEFINE_PER_CPU_SHARED_ALIGNED(struct cpuinfo_x86, cpu_info);
+EXPORT_PER_CPU_SYMBOL(cpu_info);
 
-u8 x86_cpu_to_apicid[NR_CPUS] __read_mostly =
-                       { [0 ... NR_CPUS-1] = 0xff };
-EXPORT_SYMBOL(x86_cpu_to_apicid);
+/*
+ * The following static array is used during kernel startup
+ * and the x86_cpu_to_apicid_ptr contains the address of the
+ * array during this time.  Is it zeroed when the per_cpu
+ * data area is removed.
+ */
+u8 x86_cpu_to_apicid_init[NR_CPUS] __initdata =
+                       { [0 ... NR_CPUS-1] = BAD_APICID };
+void *x86_cpu_to_apicid_ptr;
+DEFINE_PER_CPU(u8, x86_cpu_to_apicid) = BAD_APICID;
+EXPORT_PER_CPU_SYMBOL(x86_cpu_to_apicid);
 
 u8 apicid_2_node[MAX_APICID];
 
@@ -150,9 +158,10 @@ void __init smp_alloc_memory(void)
 
 void __cpuinit smp_store_cpu_info(int id)
 {
-       struct cpuinfo_x86 *c = cpu_data + id;
+       struct cpuinfo_x86 *c = &cpu_data(id);
 
        *c = boot_cpu_data;
+       c->cpu_index = id;
        if (id!=0)
                identify_secondary_cpu(c);
        /*
@@ -294,7 +303,7 @@ static int cpucount;
 /* maps the cpu to the sched domain representing multi-core */
 cpumask_t cpu_coregroup_map(int cpu)
 {
-       struct cpuinfo_x86 *c = cpu_data + cpu;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
        /*
         * For perf, we return last level cache shared map.
         * And for power savings, we return cpu_core_map
@@ -311,41 +320,41 @@ static cpumask_t cpu_sibling_setup_map;
 void __cpuinit set_cpu_sibling_map(int cpu)
 {
        int i;
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        cpu_set(cpu, cpu_sibling_setup_map);
 
        if (smp_num_siblings > 1) {
                for_each_cpu_mask(i, cpu_sibling_setup_map) {
-                       if (c[cpu].phys_proc_id == c[i].phys_proc_id &&
-                           c[cpu].cpu_core_id == c[i].cpu_core_id) {
+                       if (c->phys_proc_id == cpu_data(i).phys_proc_id &&
+                           c->cpu_core_id == cpu_data(i).cpu_core_id) {
                                cpu_set(i, per_cpu(cpu_sibling_map, cpu));
                                cpu_set(cpu, per_cpu(cpu_sibling_map, i));
                                cpu_set(i, per_cpu(cpu_core_map, cpu));
                                cpu_set(cpu, per_cpu(cpu_core_map, i));
-                               cpu_set(i, c[cpu].llc_shared_map);
-                               cpu_set(cpu, c[i].llc_shared_map);
+                               cpu_set(i, c->llc_shared_map);
+                               cpu_set(cpu, cpu_data(i).llc_shared_map);
                        }
                }
        } else {
                cpu_set(cpu, per_cpu(cpu_sibling_map, cpu));
        }
 
-       cpu_set(cpu, c[cpu].llc_shared_map);
+       cpu_set(cpu, c->llc_shared_map);
 
        if (current_cpu_data.x86_max_cores == 1) {
                per_cpu(cpu_core_map, cpu) = per_cpu(cpu_sibling_map, cpu);
-               c[cpu].booted_cores = 1;
+               c->booted_cores = 1;
                return;
        }
 
        for_each_cpu_mask(i, cpu_sibling_setup_map) {
-               if (cpu_llc_id[cpu] != BAD_APICID &&
-                   cpu_llc_id[cpu] == cpu_llc_id[i]) {
-                       cpu_set(i, c[cpu].llc_shared_map);
-                       cpu_set(cpu, c[i].llc_shared_map);
+               if (per_cpu(cpu_llc_id, cpu) != BAD_APICID &&
+                   per_cpu(cpu_llc_id, cpu) == per_cpu(cpu_llc_id, i)) {
+                       cpu_set(i, c->llc_shared_map);
+                       cpu_set(cpu, cpu_data(i).llc_shared_map);
                }
-               if (c[cpu].phys_proc_id == c[i].phys_proc_id) {
+               if (c->phys_proc_id == cpu_data(i).phys_proc_id) {
                        cpu_set(i, per_cpu(cpu_core_map, cpu));
                        cpu_set(cpu, per_cpu(cpu_core_map, i));
                        /*
@@ -357,15 +366,15 @@ void __cpuinit set_cpu_sibling_map(int cpu)
                                 * the booted_cores for this new cpu
                                 */
                                if (first_cpu(per_cpu(cpu_sibling_map, i)) == i)
-                                       c[cpu].booted_cores++;
+                                       c->booted_cores++;
                                /*
                                 * increment the core count for all
                                 * the other cpus in this package
                                 */
                                if (i != cpu)
-                                       c[i].booted_cores++;
-                       } else if (i != cpu && !c[cpu].booted_cores)
-                               c[cpu].booted_cores = c[i].booted_cores;
+                                       cpu_data(i).booted_cores++;
+                       } else if (i != cpu && !c->booted_cores)
+                               c->booted_cores = cpu_data(i).booted_cores;
                }
        }
 }
@@ -412,7 +421,7 @@ static void __cpuinit start_secondary(void *unused)
        /*
         * We need to hold call_lock, so there is no inconsistency
         * between the time smp_call_function() determines number of
-        * IPI receipients, and the time when the determination is made
+        * IPI recipients, and the time when the determination is made
         * for which cpus receive the IPI. Holding this
         * lock helps us to not include this cpu in a currently in progress
         * smp_call_function().
@@ -804,7 +813,7 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu)
 
        irq_ctx_init(cpu);
 
-       x86_cpu_to_apicid[cpu] = apicid;
+       per_cpu(x86_cpu_to_apicid, cpu) = apicid;
        /*
         * This grunge runs the startup process for
         * the targeted processor.
@@ -844,7 +853,7 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu)
                        /* number CPUs logically, starting from 1 (BSP is 0) */
                        Dprintk("OK.\n");
                        printk("CPU%d: ", cpu);
-                       print_cpu_info(&cpu_data[cpu]);
+                       print_cpu_info(&cpu_data(cpu));
                        Dprintk("CPU has booted.\n");
                } else {
                        boot_error= 1;
@@ -866,7 +875,7 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu)
                cpu_clear(cpu, cpu_initialized); /* was set by cpu_init() */
                cpucount--;
        } else {
-               x86_cpu_to_apicid[cpu] = apicid;
+               per_cpu(x86_cpu_to_apicid, cpu) = apicid;
                cpu_set(cpu, cpu_present_map);
        }
 
@@ -915,7 +924,7 @@ static int __cpuinit __smp_prepare_cpu(int cpu)
        struct warm_boot_cpu_info info;
        int     apicid, ret;
 
-       apicid = x86_cpu_to_apicid[cpu];
+       apicid = per_cpu(x86_cpu_to_apicid, cpu);
        if (apicid == BAD_APICID) {
                ret = -ENODEV;
                goto exit;
@@ -961,11 +970,11 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
         */
        smp_store_cpu_info(0); /* Final full version of the data */
        printk("CPU%d: ", 0);
-       print_cpu_info(&cpu_data[0]);
+       print_cpu_info(&cpu_data(0));
 
        boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID));
        boot_cpu_logical_apicid = logical_smp_processor_id();
-       x86_cpu_to_apicid[0] = boot_cpu_physical_apicid;
+       per_cpu(x86_cpu_to_apicid, 0) = boot_cpu_physical_apicid;
 
        current_thread_info()->cpu = 0;
 
@@ -1008,6 +1017,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
                printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
                smpboot_clear_io_apic_irqs();
                phys_cpu_present_map = physid_mask_of_physid(0);
+               map_cpu_to_logical_apicid();
                cpu_set(0, per_cpu(cpu_sibling_map, 0));
                cpu_set(0, per_cpu(cpu_core_map, 0));
                return;
@@ -1029,6 +1039,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
                }
                smpboot_clear_io_apic_irqs();
                phys_cpu_present_map = physid_mask_of_physid(0);
+               map_cpu_to_logical_apicid();
                cpu_set(0, per_cpu(cpu_sibling_map, 0));
                cpu_set(0, per_cpu(cpu_core_map, 0));
                return;
@@ -1082,7 +1093,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
        Dprintk("Before bogomips.\n");
        for (cpu = 0; cpu < NR_CPUS; cpu++)
                if (cpu_isset(cpu, cpu_callout_map))
-                       bogosum += cpu_data[cpu].loops_per_jiffy;
+                       bogosum += cpu_data(cpu).loops_per_jiffy;
        printk(KERN_INFO
                "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
                cpucount+1,
@@ -1152,7 +1163,7 @@ void __init native_smp_prepare_boot_cpu(void)
 void remove_siblinginfo(int cpu)
 {
        int sibling;
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        for_each_cpu_mask(sibling, per_cpu(cpu_core_map, cpu)) {
                cpu_clear(cpu, per_cpu(cpu_core_map, sibling));
@@ -1160,15 +1171,15 @@ void remove_siblinginfo(int cpu)
                 * last thread sibling in this cpu core going down
                 */
                if (cpus_weight(per_cpu(cpu_sibling_map, cpu)) == 1)
-                       c[sibling].booted_cores--;
+                       cpu_data(sibling).booted_cores--;
        }
                        
        for_each_cpu_mask(sibling, per_cpu(cpu_sibling_map, cpu))
                cpu_clear(cpu, per_cpu(cpu_sibling_map, sibling));
        cpus_clear(per_cpu(cpu_sibling_map, cpu));
        cpus_clear(per_cpu(cpu_core_map, cpu));
-       c[cpu].phys_proc_id = 0;
-       c[cpu].cpu_core_id = 0;
+       c->phys_proc_id = 0;
+       c->cpu_core_id = 0;
        cpu_clear(cpu, cpu_sibling_setup_map);
 }
 
index e351ac4ab5b1b2f3f430dfc4d5b974af04cbb77c..b7e768dd87c90c731770cdce985649409626b73a 100644 (file)
@@ -65,7 +65,7 @@ int smp_num_siblings = 1;
 EXPORT_SYMBOL(smp_num_siblings);
 
 /* Last level cache ID of each logical CPU */
-u8 cpu_llc_id[NR_CPUS] __cpuinitdata  = {[0 ... NR_CPUS-1] = BAD_APICID};
+DEFINE_PER_CPU(u8, cpu_llc_id) = BAD_APICID;
 
 /* Bitmask of currently online CPUs */
 cpumask_t cpu_online_map __read_mostly;
@@ -84,8 +84,8 @@ cpumask_t cpu_possible_map;
 EXPORT_SYMBOL(cpu_possible_map);
 
 /* Per CPU bogomips and other parameters */
-struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
-EXPORT_SYMBOL(cpu_data);
+DEFINE_PER_CPU_SHARED_ALIGNED(struct cpuinfo_x86, cpu_info);
+EXPORT_PER_CPU_SYMBOL(cpu_info);
 
 /* Set when the idlers are all forked */
 int smp_threads_ready;
@@ -138,9 +138,10 @@ static unsigned long __cpuinit setup_trampoline(void)
 
 static void __cpuinit smp_store_cpu_info(int id)
 {
-       struct cpuinfo_x86 *c = cpu_data + id;
+       struct cpuinfo_x86 *c = &cpu_data(id);
 
        *c = boot_cpu_data;
+       c->cpu_index = id;
        identify_cpu(c);
        print_cpu_info(c);
 }
@@ -237,7 +238,7 @@ void __cpuinit smp_callin(void)
 /* maps the cpu to the sched domain representing multi-core */
 cpumask_t cpu_coregroup_map(int cpu)
 {
-       struct cpuinfo_x86 *c = cpu_data + cpu;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
        /*
         * For perf, we return last level cache shared map.
         * And for power savings, we return cpu_core_map
@@ -254,41 +255,41 @@ static cpumask_t cpu_sibling_setup_map;
 static inline void set_cpu_sibling_map(int cpu)
 {
        int i;
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        cpu_set(cpu, cpu_sibling_setup_map);
 
        if (smp_num_siblings > 1) {
                for_each_cpu_mask(i, cpu_sibling_setup_map) {
-                       if (c[cpu].phys_proc_id == c[i].phys_proc_id &&
-                           c[cpu].cpu_core_id == c[i].cpu_core_id) {
+                       if (c->phys_proc_id == cpu_data(i).phys_proc_id &&
+                           c->cpu_core_id == cpu_data(i).cpu_core_id) {
                                cpu_set(i, per_cpu(cpu_sibling_map, cpu));
                                cpu_set(cpu, per_cpu(cpu_sibling_map, i));
                                cpu_set(i, per_cpu(cpu_core_map, cpu));
                                cpu_set(cpu, per_cpu(cpu_core_map, i));
-                               cpu_set(i, c[cpu].llc_shared_map);
-                               cpu_set(cpu, c[i].llc_shared_map);
+                               cpu_set(i, c->llc_shared_map);
+                               cpu_set(cpu, cpu_data(i).llc_shared_map);
                        }
                }
        } else {
                cpu_set(cpu, per_cpu(cpu_sibling_map, cpu));
        }
 
-       cpu_set(cpu, c[cpu].llc_shared_map);
+       cpu_set(cpu, c->llc_shared_map);
 
        if (current_cpu_data.x86_max_cores == 1) {
                per_cpu(cpu_core_map, cpu) = per_cpu(cpu_sibling_map, cpu);
-               c[cpu].booted_cores = 1;
+               c->booted_cores = 1;
                return;
        }
 
        for_each_cpu_mask(i, cpu_sibling_setup_map) {
-               if (cpu_llc_id[cpu] != BAD_APICID &&
-                   cpu_llc_id[cpu] == cpu_llc_id[i]) {
-                       cpu_set(i, c[cpu].llc_shared_map);
-                       cpu_set(cpu, c[i].llc_shared_map);
+               if (per_cpu(cpu_llc_id, cpu) != BAD_APICID &&
+                   per_cpu(cpu_llc_id, cpu) == per_cpu(cpu_llc_id, i)) {
+                       cpu_set(i, c->llc_shared_map);
+                       cpu_set(cpu, cpu_data(i).llc_shared_map);
                }
-               if (c[cpu].phys_proc_id == c[i].phys_proc_id) {
+               if (c->phys_proc_id == cpu_data(i).phys_proc_id) {
                        cpu_set(i, per_cpu(cpu_core_map, cpu));
                        cpu_set(cpu, per_cpu(cpu_core_map, i));
                        /*
@@ -300,15 +301,15 @@ static inline void set_cpu_sibling_map(int cpu)
                                 * the booted_cores for this new cpu
                                 */
                                if (first_cpu(per_cpu(cpu_sibling_map, i)) == i)
-                                       c[cpu].booted_cores++;
+                                       c->booted_cores++;
                                /*
                                 * increment the core count for all
                                 * the other cpus in this package
                                 */
                                if (i != cpu)
-                                       c[i].booted_cores++;
-                       } else if (i != cpu && !c[cpu].booted_cores)
-                               c[cpu].booted_cores = c[i].booted_cores;
+                                       cpu_data(i).booted_cores++;
+                       } else if (i != cpu && !c->booted_cores)
+                               c->booted_cores = cpu_data(i).booted_cores;
                }
        }
 }
@@ -350,7 +351,7 @@ void __cpuinit start_secondary(void)
        /*
         * We need to hold call_lock, so there is no inconsistency
         * between the time smp_call_function() determines number of
-        * IPI receipients, and the time when the determination is made
+        * IPI recipients, and the time when the determination is made
         * for which cpus receive the IPI in genapic_flat.c. Holding this
         * lock helps us to not include this cpu in a currently in progress
         * smp_call_function().
@@ -694,7 +695,7 @@ do_rest:
                clear_node_cpumask(cpu); /* was set by numa_add_cpu */
                cpu_clear(cpu, cpu_present_map);
                cpu_clear(cpu, cpu_possible_map);
-               x86_cpu_to_apicid[cpu] = BAD_APICID;
+               per_cpu(x86_cpu_to_apicid, cpu) = BAD_APICID;
                return -EIO;
        }
 
@@ -840,6 +841,26 @@ static int __init smp_sanity_check(unsigned max_cpus)
        return 0;
 }
 
+/*
+ * Copy apicid's found by MP_processor_info from initial array to the per cpu
+ * data area.  The x86_cpu_to_apicid_init array is then expendable and the
+ * x86_cpu_to_apicid_ptr is zeroed indicating that the static array is no
+ * longer available.
+ */
+void __init smp_set_apicids(void)
+{
+       int cpu;
+
+       for_each_cpu_mask(cpu, cpu_possible_map) {
+               if (per_cpu_offset(cpu))
+                       per_cpu(x86_cpu_to_apicid, cpu) =
+                                               x86_cpu_to_apicid_init[cpu];
+       }
+
+       /* indicate the static array will be going away soon */
+       x86_cpu_to_apicid_ptr = NULL;
+}
+
 /*
  * Prepare for SMP bootup.  The MP table or ACPI has been read
  * earlier.  Just do some sanity checking here and enable APIC mode.
@@ -849,6 +870,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
        nmi_watchdog_default();
        current_cpu_data = boot_cpu_data;
        current_thread_info()->cpu = 0;  /* needed? */
+       smp_set_apicids();
        set_cpu_sibling_map(0);
 
        if (smp_sanity_check(max_cpus) < 0) {
@@ -968,7 +990,7 @@ void __init smp_cpus_done(unsigned int max_cpus)
 static void remove_siblinginfo(int cpu)
 {
        int sibling;
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(cpu);
 
        for_each_cpu_mask(sibling, per_cpu(cpu_core_map, cpu)) {
                cpu_clear(cpu, per_cpu(cpu_core_map, sibling));
@@ -976,15 +998,15 @@ static void remove_siblinginfo(int cpu)
                 * last thread sibling in this cpu core going down
                 */
                if (cpus_weight(per_cpu(cpu_sibling_map, cpu)) == 1)
-                       c[sibling].booted_cores--;
+                       cpu_data(sibling).booted_cores--;
        }
                        
        for_each_cpu_mask(sibling, per_cpu(cpu_sibling_map, cpu))
                cpu_clear(cpu, per_cpu(cpu_sibling_map, sibling));
        cpus_clear(per_cpu(cpu_sibling_map, cpu));
        cpus_clear(per_cpu(cpu_core_map, cpu));
-       c[cpu].phys_proc_id = 0;
-       c[cpu].cpu_core_id = 0;
+       c->phys_proc_id = 0;
+       c->cpu_core_id = 0;
        cpu_clear(cpu, cpu_sibling_setup_map);
 }
 
index 91c7acc8d999305f17c613798748d92a07b3b93e..72f463401592bfd997e502eaa9ca7264523ee640 100644 (file)
@@ -64,7 +64,7 @@ static int __init setup_pci_node_map_for_wpeg(int wpeg_num, int last_bus)
 
        switch (rio_devs[wpeg_num]->type){
        case CompatWPEG:
-               /* The Compatability Winnipeg controls the 2 legacy buses,
+               /* The Compatibility Winnipeg controls the 2 legacy buses,
                 * the 66MHz PCI bus [2 slots] and the 2 "extra" buses in case
                 * a PCI-PCI bridge card is used in either slot: total 5 buses.
                 */
index f8fafe527ff1cbf76e8fa513839f21650b0e1615..bc9f59c246fd99890da74eec868d92cc3f8f7f2b 100644 (file)
@@ -32,9 +32,9 @@ void __save_processor_state(struct saved_context *ctxt)
        /*
         * descriptor tables
         */
-       asm volatile ("sgdt %0" : "=m" (ctxt->gdt_limit));
-       asm volatile ("sidt %0" : "=m" (ctxt->idt_limit));
-       asm volatile ("str %0"  : "=m" (ctxt->tr));
+       store_gdt((struct desc_ptr *)&ctxt->gdt_limit);
+       store_idt((struct desc_ptr *)&ctxt->idt_limit);
+       store_tr(ctxt->tr);
 
        /* XMM0..XMM15 should be handled by kernel_fpu_begin(). */
        /*
@@ -91,8 +91,9 @@ void __restore_processor_state(struct saved_context *ctxt)
         * now restore the descriptor tables to their proper values
         * ltr is done i fix_processor_context().
         */
-       asm volatile ("lgdt %0" :: "m" (ctxt->gdt_limit));
-       asm volatile ("lidt %0" :: "m" (ctxt->idt_limit));
+       load_gdt((const struct desc_ptr *)&ctxt->gdt_limit);
+       load_idt((const struct desc_ptr *)&ctxt->idt_limit);
+
 
        /*
         * segment registers
@@ -123,7 +124,7 @@ void fix_processor_context(void)
        int cpu = smp_processor_id();
        struct tss_struct *t = &per_cpu(init_tss, cpu);
 
-       set_tss_desc(cpu,t);    /* This just modifies memory; should not be neccessary. But... This is neccessary, because 386 hardware has concept of busy TSS or some similar stupidity. */
+       set_tss_desc(cpu,t);    /* This just modifies memory; should not be necessary. But... This is necessary, because 386 hardware has concept of busy TSS or some similar stupidity. */
 
        cpu_gdt(cpu)[GDT_ENTRY_TSS].type = 9;
 
index 1e9d57256eb11ff9061d3713f3844ce1fa8634aa..cc9acace7e23ba05b810afcf3c9d96bff0516d6c 100644 (file)
@@ -63,6 +63,9 @@
 
 int panic_on_unrecovered_nmi;
 
+DECLARE_BITMAP(used_vectors, NR_VECTORS);
+EXPORT_SYMBOL_GPL(used_vectors);
+
 asmlinkage int system_call(void);
 
 /* Do we ignore FPU interrupts ? */
@@ -288,33 +291,9 @@ EXPORT_SYMBOL(dump_stack);
 void show_registers(struct pt_regs *regs)
 {
        int i;
-       int in_kernel = 1;
-       unsigned long esp;
-       unsigned short ss, gs;
-
-       esp = (unsigned long) (&regs->esp);
-       savesegment(ss, ss);
-       savesegment(gs, gs);
-       if (user_mode_vm(regs)) {
-               in_kernel = 0;
-               esp = regs->esp;
-               ss = regs->xss & 0xffff;
-       }
+
        print_modules();
-       printk(KERN_EMERG "CPU:    %d\n"
-               KERN_EMERG "EIP:    %04x:[<%08lx>]    %s VLI\n"
-               KERN_EMERG "EFLAGS: %08lx   (%s %.*s)\n",
-               smp_processor_id(), 0xffff & regs->xcs, regs->eip,
-               print_tainted(), regs->eflags, init_utsname()->release,
-               (int)strcspn(init_utsname()->version, " "),
-               init_utsname()->version);
-       print_symbol(KERN_EMERG "EIP is at %s\n", regs->eip);
-       printk(KERN_EMERG "eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
-               regs->eax, regs->ebx, regs->ecx, regs->edx);
-       printk(KERN_EMERG "esi: %08lx   edi: %08lx   ebp: %08lx   esp: %08lx\n",
-               regs->esi, regs->edi, regs->ebp, esp);
-       printk(KERN_EMERG "ds: %04x   es: %04x   fs: %04x  gs: %04x  ss: %04x\n",
-              regs->xds & 0xffff, regs->xes & 0xffff, regs->xfs & 0xffff, gs, ss);
+       __show_registers(regs, 0);
        printk(KERN_EMERG "Process %.*s (pid: %d, ti=%p task=%p task.ti=%p)",
                TASK_COMM_LEN, current->comm, task_pid_nr(current),
                current_thread_info(), current, task_thread_info(current));
@@ -322,14 +301,14 @@ void show_registers(struct pt_regs *regs)
         * When in-kernel, we also print out the stack and code at the
         * time of the fault..
         */
-       if (in_kernel) {
+       if (!user_mode_vm(regs)) {
                u8 *eip;
                unsigned int code_prologue = code_bytes * 43 / 64;
                unsigned int code_len = code_bytes;
                unsigned char c;
 
                printk("\n" KERN_EMERG "Stack: ");
-               show_stack_log_lvl(NULL, regs, (unsigned long *)esp, KERN_EMERG);
+               show_stack_log_lvl(NULL, regs, &regs->esp, KERN_EMERG);
 
                printk(KERN_EMERG "Code: ");
 
@@ -374,11 +353,11 @@ int is_valid_bugaddr(unsigned long eip)
 void die(const char * str, struct pt_regs * regs, long err)
 {
        static struct {
-               spinlock_t lock;
+               raw_spinlock_t lock;
                u32 lock_owner;
                int lock_owner_depth;
        } die = {
-               .lock =                 __SPIN_LOCK_UNLOCKED(die.lock),
+               .lock =                 __RAW_SPIN_LOCK_UNLOCKED,
                .lock_owner =           -1,
                .lock_owner_depth =     0
        };
@@ -389,13 +368,14 @@ void die(const char * str, struct pt_regs * regs, long err)
 
        if (die.lock_owner != raw_smp_processor_id()) {
                console_verbose();
-               spin_lock_irqsave(&die.lock, flags);
+               __raw_spin_lock(&die.lock);
+               raw_local_save_flags(flags);
                die.lock_owner = smp_processor_id();
                die.lock_owner_depth = 0;
                bust_spinlocks(1);
        }
        else
-               local_save_flags(flags);
+               raw_local_save_flags(flags);
 
        if (++die.lock_owner_depth < 3) {
                unsigned long esp;
@@ -439,7 +419,8 @@ void die(const char * str, struct pt_regs * regs, long err)
        bust_spinlocks(0);
        die.lock_owner = -1;
        add_taint(TAINT_DIE);
-       spin_unlock_irqrestore(&die.lock, flags);
+       __raw_spin_unlock(&die.lock);
+       raw_local_irq_restore(flags);
 
        if (!regs)
                return;
@@ -1142,6 +1123,8 @@ static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
 
 void __init trap_init(void)
 {
+       int i;
+
 #ifdef CONFIG_EISA
        void __iomem *p = ioremap(0x0FFFD9, 4);
        if (readl(p) == 'E'+('I'<<8)+('S'<<16)+('A'<<24)) {
@@ -1201,6 +1184,11 @@ void __init trap_init(void)
 
        set_system_gate(SYSCALL_VECTOR,&system_call);
 
+       /* Reserve all the builtin and the syscall vector. */
+       for (i = 0; i < FIRST_EXTERNAL_VECTOR; i++)
+               set_bit(i, used_vectors);
+       set_bit(SYSCALL_VECTOR, used_vectors);
+
        /*
         * Should be a barrier for any external CPU state.
         */
index b4a9b3db19941ee62359798d05e5964bd954de91..d0c2bc7ab2ec561dc91e12dee87fde8b563f8770 100644 (file)
@@ -201,7 +201,7 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack,
 #define MSG(txt) ops->warning(data, txt)
 
 /*
- * x86-64 can have upto three kernel stacks: 
+ * x86-64 can have up to three kernel stacks: 
  * process stack
  * interrupt stack
  * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack
@@ -462,7 +462,7 @@ void out_of_line_bug(void)
 EXPORT_SYMBOL(out_of_line_bug);
 #endif
 
-static DEFINE_SPINLOCK(die_lock);
+static raw_spinlock_t die_lock = __RAW_SPIN_LOCK_UNLOCKED;
 static int die_owner = -1;
 static unsigned int die_nest_count;
 
@@ -474,13 +474,13 @@ unsigned __kprobes long oops_begin(void)
        oops_enter();
 
        /* racy, but better than risking deadlock. */
-       local_irq_save(flags);
+       raw_local_irq_save(flags);
        cpu = smp_processor_id();
-       if (!spin_trylock(&die_lock)) { 
+       if (!__raw_spin_trylock(&die_lock)) {
                if (cpu == die_owner) 
                        /* nested oops. should stop eventually */;
                else
-                       spin_lock(&die_lock);
+                       __raw_spin_lock(&die_lock);
        }
        die_nest_count++;
        die_owner = cpu;
@@ -494,12 +494,10 @@ void __kprobes oops_end(unsigned long flags)
        die_owner = -1;
        bust_spinlocks(0);
        die_nest_count--;
-       if (die_nest_count)
-               /* We still own the lock */
-               local_irq_restore(flags);
-       else
+       if (!die_nest_count)
                /* Nest count reaches zero, release the lock. */
-               spin_unlock_irqrestore(&die_lock, flags);
+               __raw_spin_unlock(&die_lock);
+       raw_local_irq_restore(flags);
        if (panic_on_oops)
                panic("Fatal exception");
        oops_exit();
index e87a3939ed406d37fa8dfac066fc803a4a9ece58..d78444c788a3b8f8c4fa6824a6afcf3860d2f4fe 100644 (file)
@@ -59,7 +59,7 @@ int check_tsc_unstable(void)
 }
 EXPORT_SYMBOL_GPL(check_tsc_unstable);
 
-/* Accellerators for sched_clock()
+/* Accelerators for sched_clock()
  * convert from cycles(64bits) => nanoseconds (64bits)
  *  basic equation:
  *             ns = cycles / (freq / ns_per_sec)
@@ -74,7 +74,7 @@ EXPORT_SYMBOL_GPL(check_tsc_unstable);
  *     And since SC is a constant power of two, we can convert the div
  *  into a shift.
  *
- *  We can use khz divisor instead of mhz to keep a better percision, since
+ *  We can use khz divisor instead of mhz to keep a better precision, since
  *  cyc2ns_scale is limited to 10^6 * 2^10, which fits in 32 bits.
  *  (mathieu.desnoyers@polymtl.ca)
  *
@@ -181,8 +181,8 @@ int recalibrate_cpu_khz(void)
        if (cpu_has_tsc) {
                cpu_khz = calculate_cpu_khz();
                tsc_khz = cpu_khz;
-               cpu_data[0].loops_per_jiffy =
-                       cpufreq_scale(cpu_data[0].loops_per_jiffy,
+               cpu_data(0).loops_per_jiffy =
+                       cpufreq_scale(cpu_data(0).loops_per_jiffy,
                                        cpu_khz_old, cpu_khz);
                return 0;
        } else
@@ -215,7 +215,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, void *data)
                        return 0;
                }
                ref_freq = freq->old;
-               loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
+               loops_per_jiffy_ref = cpu_data(freq->cpu).loops_per_jiffy;
                cpu_khz_ref = cpu_khz;
        }
 
@@ -223,7 +223,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, void *data)
            (val == CPUFREQ_POSTCHANGE && freq->old > freq->new) ||
            (val == CPUFREQ_RESUMECHANGE)) {
                if (!(freq->flags & CPUFREQ_CONST_LOOPS))
-                       cpu_data[freq->cpu].loops_per_jiffy =
+                       cpu_data(freq->cpu).loops_per_jiffy =
                                cpufreq_scale(loops_per_jiffy_ref,
                                                ref_freq, freq->new);
 
index 9f22e542c37409e84967b4903f4a24bb7db56dfd..9c70af45b42bcbe7683cf2c37b593f4da7b793ee 100644 (file)
@@ -73,13 +73,13 @@ static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
        struct cpufreq_freqs *freq = data;
        unsigned long *lpj, dummy;
 
-       if (cpu_has(&cpu_data[freq->cpu], X86_FEATURE_CONSTANT_TSC))
+       if (cpu_has(&cpu_data(freq->cpu), X86_FEATURE_CONSTANT_TSC))
                return 0;
 
        lpj = &dummy;
        if (!(freq->flags & CPUFREQ_CONST_LOOPS))
 #ifdef CONFIG_SMP
-               lpj = &cpu_data[freq->cpu].loops_per_jiffy;
+               lpj = &cpu_data(freq->cpu).loops_per_jiffy;
 #else
                lpj = &boot_cpu_data.loops_per_jiffy;
 #endif
index 585541ca1a7e3410be012acfdabb5d3404f7849c..ad4005c6d4a1113d47c289a06d46328743fd2b2b 100644 (file)
        ({unsigned long v;              \
        extern char __vsyscall_0;       \
          asm("" : "=r" (v) : "0" (x)); \
-         ((v - VSYSCALL_FIRST_PAGE) + __pa_symbol(&__vsyscall_0)); })
+         ((v - VSYSCALL_START) + __pa_symbol(&__vsyscall_0)); })
 
 /*
  * vsyscall_gtod_data contains data that is :
  * - readonly from vsyscalls
- * - writen by timer interrupt or systcl (/proc/sys/kernel/vsyscall64)
+ * - written by timer interrupt or systcl (/proc/sys/kernel/vsyscall64)
  * Try to keep this structure as small as possible to avoid cache line ping pongs
  */
 int __vgetcpu_mode __section_vgetcpu_mode;
@@ -291,7 +291,7 @@ static void __cpuinit vsyscall_set_cpu(int cpu)
 #ifdef CONFIG_NUMA
        node = cpu_to_node(cpu);
 #endif
-       if (cpu_has(&cpu_data[cpu], X86_FEATURE_RDTSCP))
+       if (cpu_has(&cpu_data(cpu), X86_FEATURE_RDTSCP))
                write_rdtscp_aux((node << 12) | cpu);
 
        /* Store cpu number in limit so that it can be loaded quickly
index f6edb11364dfe5edef9ffac33341b24307a85434..952e7a89c2ac4f0cc218b310e6a0f84da3845d99 100644 (file)
@@ -82,7 +82,7 @@ inline void __const_udelay(unsigned long xloops)
        __asm__("mull %0"
                :"=d" (xloops), "=&a" (d0)
                :"1" (xloops), "0"
-               (cpu_data[raw_smp_processor_id()].loops_per_jiffy * (HZ/4)));
+               (cpu_data(raw_smp_processor_id()).loops_per_jiffy * (HZ/4)));
 
        __delay(++xloops);
 }
index 2dbebd308347f21be2ad931ce480a6ade16e72b2..0ebbfb9e7c7f8d2b86abeb23f07b0cfbf0ebe56f 100644 (file)
@@ -40,7 +40,8 @@ EXPORT_SYMBOL(__delay);
 
 inline void __const_udelay(unsigned long xloops)
 {
-       __delay(((xloops * HZ * cpu_data[raw_smp_processor_id()].loops_per_jiffy) >> 32) + 1);
+       __delay(((xloops * HZ *
+               cpu_data(raw_smp_processor_id()).loops_per_jiffy) >> 32) + 1);
 }
 EXPORT_SYMBOL(__const_udelay);
 
index 3f08010f3517287e595585c2dfed73890e054c25..0c28a071824c2bd0789eb9c7d929615e8ba944d1 100644 (file)
@@ -108,7 +108,7 @@ void __init time_init_hook(void)
  * mca_nmi_hook - hook into MCA specific NMI chain
  *
  * Description:
- *     The MCA (Microchannel Arcitecture) has an NMI chain for NMI sources
+ *     The MCA (Microchannel Architecture) has an NMI chain for NMI sources
  *     along the MCA bus.  Use this to hook into that chain if you will need
  *     it.
  **/
@@ -131,7 +131,7 @@ static __init int no_ipi_broadcast(char *str)
        return 1;
 }
 
-__setup("no_ipi_broadcast", no_ipi_broadcast);
+__setup("no_ipi_broadcast=", no_ipi_broadcast);
 
 static int __init print_ipi_mode(void)
 {
index 8685208d85125fab08ba234a4dcaafdfbf6894dd..1af0cc7648f0487bcef1546510a91c7bc2e237d9 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * Default generic APIC driver. This handles upto 8 CPUs.
+ * Default generic APIC driver. This handles up to 8 CPUs.
  */
 #define APIC_DEFINITION 1
 #include <linux/threads.h>
index 4121d1551800053a48c160d0a70eea7b635a3029..f410d3cb565945565bf8270dd5aef93e30b24ab8 100644 (file)
@@ -56,7 +56,7 @@ void __init generic_bigsmp_probe(void)
        /*
         * This routine is used to switch to bigsmp mode when
         * - There is no apic= option specified by the user
-        * - generic_apic_probe() has choosen apic_default as the sub_arch
+        * - generic_apic_probe() has chosen apic_default as the sub_arch
         * - we find more than 8 CPUs in acpi LAPIC listing with xAPIC support
         */
 
index e4928aa6bdfb783a57363364c159b5223ad5262a..361ac5107b33efcc2331eabc6342912e071e2090 100644 (file)
@@ -36,8 +36,8 @@ static unsigned long cpu_irq_affinity[NR_CPUS] __cacheline_aligned = { [0 ... NR
 
 /* per CPU data structure (for /proc/cpuinfo et al), visible externally
  * indexed physically */
-struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
-EXPORT_SYMBOL(cpu_data);
+DEFINE_PER_CPU(cpuinfo_x86, cpu_info) __cacheline_aligned;
+EXPORT_PER_CPU_SYMBOL(cpu_info);
 
 /* physical ID of the CPU used to boot the system */
 unsigned char boot_cpu_id;
@@ -389,7 +389,7 @@ find_smp_config(void)
 
        /* The boot CPU must be extended */
        voyager_extended_vic_processors = 1<<boot_cpu_id;
-       /* initially, all of the first 8 cpu's can boot */
+       /* initially, all of the first 8 CPUs can boot */
        voyager_allowed_boot_processors = 0xff;
        /* set up everything for just this CPU, we can alter
         * this as we start the other CPUs later */
@@ -430,7 +430,7 @@ find_smp_config(void)
 void __init
 smp_store_cpu_info(int id)
 {
-       struct cpuinfo_x86 *c=&cpu_data[id];
+       struct cpuinfo_x86 *c = &cpu_data(id);
 
        *c = boot_cpu_data;
 
@@ -634,7 +634,7 @@ do_boot_cpu(__u8 cpu)
                        cpu, smp_processor_id()));
        
                printk("CPU%d: ", cpu);
-               print_cpu_info(&cpu_data[cpu]);
+               print_cpu_info(&cpu_data(cpu));
                wmb();
                cpu_set(cpu, cpu_callout_map);
                cpu_set(cpu, cpu_present_map);
@@ -683,7 +683,7 @@ smp_boot_cpus(void)
         */
        smp_store_cpu_info(boot_cpu_id);
        printk("CPU%d: ", boot_cpu_id);
-       print_cpu_info(&cpu_data[boot_cpu_id]);
+       print_cpu_info(&cpu_data(boot_cpu_id));
 
        if(is_cpu_quad()) {
                /* booting on a Quad CPU */
@@ -714,7 +714,7 @@ smp_boot_cpus(void)
                unsigned long bogosum = 0;
                for (i = 0; i < NR_CPUS; i++)
                        if (cpu_isset(i, cpu_online_map))
-                               bogosum += cpu_data[i].loops_per_jiffy;
+                               bogosum += cpu_data(i).loops_per_jiffy;
                printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
                        cpucount+1,
                        bogosum/(500000/HZ),
@@ -1010,7 +1010,7 @@ static struct call_data_struct * call_data;
 
 /* execute a thread on a new CPU.  The function to be called must be
  * previously set up.  This is used to schedule a function for
- * execution on all CPU's - set up the function then broadcast a
+ * execution on all CPUs - set up the function then broadcast a
  * function_interrupt CPI to come here on each CPU */
 static void
 smp_call_function_interrupt(void)
@@ -1095,7 +1095,7 @@ voyager_smp_call_function_mask (cpumask_t cpumask,
  * CPI here.  We don't use this actually for counting so losing
  * ticks doesn't matter 
  *
- * FIXME: For those CPU's which actually have a local APIC, we could
+ * FIXME: For those CPUs which actually have a local APIC, we could
  * try to use it to trigger this interrupt instead of having to
  * broadcast the timer tick.  Unfortunately, all my pentium DYADs have
  * no local APIC, so I can't do this
@@ -1287,7 +1287,7 @@ smp_local_timer_interrupt(void)
 
        /*
         * We take the 'long' return path, and there every subsystem
-        * grabs the apropriate locks (kernel lock/ irq lock).
+        * grabs the appropriate locks (kernel lock/ irq lock).
         *
         * we might want to decouple profiling from the 'long path',
         * and do the profiling totally in assembly.
@@ -1759,7 +1759,7 @@ set_vic_irq_affinity(unsigned int irq, cpumask_t mask)
        real_mask = cpus_addr(mask)[0] & voyager_extended_vic_processors;
        
        if(cpus_addr(mask)[0] == 0)
-               /* can't have no cpu's to accept the interrupt -- extremely
+               /* can't have no CPUs to accept the interrupt -- extremely
                 * bad things will happen */
                return;
 
@@ -1791,7 +1791,7 @@ set_vic_irq_affinity(unsigned int irq, cpumask_t mask)
        }
        /* this is magic, we now have the correct affinity maps, so
         * enable the interrupt.  This will send an enable CPI to
-        * those cpu's who need to enable it in their local masks,
+        * those CPUs who need to enable it in their local masks,
         * causing them to correct for the new affinity . If the
         * interrupt is currently globally disabled, it will simply be
         * disabled again as it comes in (voyager lazy disable).  If
index f9d5953381595bdef0df4671d1e8cd4cbdc05bbe..50f9366c411edb94ce6daa8f6b5546ad9657e650 100644 (file)
@@ -64,7 +64,7 @@ check_from_kernel(void)
 {
        if(voyager_status.switch_off) {
                
-               /* FIXME: This should be configureable via proc */
+               /* FIXME: This should be configurable via proc */
                execute("umask 600; echo 0 > /etc/initrunlvl; kill -HUP 1");
        } else if(voyager_status.power_fail) {
                VDEBUG(("Voyager daemon detected AC power failure\n"));
index 4de95a17a7d4de6e7cefc8604da03f3dda0fa56f..f14da2a53ecea61124959c9db146173a9ad4822c 100644 (file)
@@ -10,7 +10,7 @@
 
 /*
  * We need to use the 2-level pagetable functions, but CONFIG_X86_PAE
- * keeps that from happenning.  If anyone has a better way, I'm listening.
+ * keeps that from happening.  If anyone has a better way, I'm listening.
  *
  * boot_pte_t is defined only if this all works correctly
  */
index 13893772cc48c9da72a8370dbf423898b105c0ce..fe608a45ffb66956e67b31b60d80b1c83bfa408f 100644 (file)
@@ -273,7 +273,7 @@ unsigned long __init setup_memory(void)
         * When mapping a NUMA machine we allocate the node_mem_map arrays
         * from node local memory.  They are then mapped directly into KVA
         * between zone normal and vmalloc space.  Calculate the size of
-        * this space and use it to adjust the boundry between ZONE_NORMAL
+        * this space and use it to adjust the boundary between ZONE_NORMAL
         * and ZONE_HIGHMEM.
         */
        find_max_pfn();
index 4d3e538c57ab55e81faa71bfec11a002c51d03a8..503dfc05111b051de74265e2d44ae7de86a80145 100644 (file)
@@ -354,7 +354,7 @@ fastcall void __kprobes do_page_fault(struct pt_regs *regs,
 
        /* When running in the kernel we expect faults to occur only to
         * addresses in user space.  All other faults represent errors in the
-        * kernel and should generate an OOPS.  Unfortunatly, in the case of an
+        * kernel and should generate an OOPS.  Unfortunately, in the case of an
         * erroneous fault occurring in a code path which already holds mmap_sem
         * we will deadlock attempting to validate the fault against the
         * address space.  Luckily the kernel only validly references user
@@ -362,7 +362,7 @@ fastcall void __kprobes do_page_fault(struct pt_regs *regs,
         * exceptions table.
         *
         * As the vast majority of faults will be valid we will only perform
-        * the source reference check when there is a possibilty of a deadlock.
+        * the source reference check when there is a possibility of a deadlock.
         * Attempt to lock the address space, if we cannot we then validate the
         * source.  If this is invalid we can skip the address space check,
         * thus avoiding the deadlock.
@@ -564,7 +564,8 @@ no_context:
                 * it's allocated already.
                 */
                if ((page >> PAGE_SHIFT) < max_low_pfn
-                   && (page & _PAGE_PRESENT)) {
+                   && (page & _PAGE_PRESENT)
+                   && !(page & _PAGE_PSE)) {
                        page &= PAGE_MASK;
                        page = ((__typeof__(page) *) __va(page))[(address >> PAGE_SHIFT)
                                                                 & (PTRS_PER_PTE - 1)];
index 5149ac136a5db0bcc25330b86b188b71e570b858..644b4f7ece10acc498fd9ac61c0d93637f519a82 100644 (file)
@@ -169,7 +169,7 @@ void dump_pagetable(unsigned long address)
        pmd = pmd_offset(pud, address);
        if (bad_address(pmd)) goto bad;
        printk("PMD %lx ", pmd_val(*pmd));
-       if (!pmd_present(*pmd)) goto ret;        
+       if (!pmd_present(*pmd) || pmd_large(*pmd)) goto ret;
 
        pte = pte_offset_kernel(pmd, address);
        if (bad_address(pte)) goto bad;
@@ -285,7 +285,6 @@ static int vmalloc_fault(unsigned long address)
        return 0;
 }
 
-static int page_fault_trace;
 int show_unhandled_signals = 1;
 
 /*
@@ -354,10 +353,6 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
        if (likely(regs->eflags & X86_EFLAGS_IF))
                local_irq_enable();
 
-       if (unlikely(page_fault_trace))
-               printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx error %lx\n",
-                      regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code); 
-
        if (unlikely(error_code & PF_RSVD))
                pgtable_bad(address, regs, error_code);
 
@@ -378,7 +373,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
  again:
        /* When running in the kernel we expect faults to occur only to
         * addresses in user space.  All other faults represent errors in the
-        * kernel and should generate an OOPS.  Unfortunatly, in the case of an
+        * kernel and should generate an OOPS.  Unfortunately, in the case of an
         * erroneous fault occurring in a code path which already holds mmap_sem
         * we will deadlock attempting to validate the fault against the
         * address space.  Luckily the kernel only validly references user
@@ -386,7 +381,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
         * exceptions table.
         *
         * As the vast majority of faults will be valid we will only perform
-        * the source reference check when there is a possibilty of a deadlock.
+        * the source reference check when there is a possibility of a deadlock.
         * Attempt to lock the address space, if we cannot we then validate the
         * source.  If this is invalid we can skip the address space check,
         * thus avoiding the deadlock.
@@ -488,7 +483,7 @@ bad_area_nosemaphore:
                if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) &&
                    printk_ratelimit()) {
                        printk(
-                      "%s%s[%d]: segfault at %016lx rip %016lx rsp %016lx error %lx\n",
+                      "%s%s[%d]: segfault at %lx rip %lx rsp %lx error %lx\n",
                                        tsk->pid > 1 ? KERN_INFO : KERN_EMERG,
                                        tsk->comm, tsk->pid, address, regs->rip,
                                        regs->rsp, error_code);
@@ -621,10 +616,3 @@ void vmalloc_sync_all(void)
        BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) == 
                                (__START_KERNEL & PGDIR_MASK)));
 }
-
-static int __init enable_pagefaulttrace(char *str)
-{
-       page_fault_trace = 1;
-       return 1;
-}
-__setup("pagefaulttrace", enable_pagefaulttrace);
index 5eec5e56d07f3a2b7d5bb6b48b1d4acadf15e689..3d6926ba8995e4d54131c2660ffb1348955d6e32 100644 (file)
@@ -612,7 +612,7 @@ void __init init_cpu_to_node(void)
 {
        int i;
        for (i = 0; i < NR_CPUS; i++) {
-               u8 apicid = x86_cpu_to_apicid[i];
+               u8 apicid = x86_cpu_to_apicid_init[i];
                if (apicid == BAD_APICID)
                        continue;
                if (apicid_to_node[apicid] == NUMA_NO_NODE)
index 56089ccc394927d50465476fe65935b7e3c4e023..ea85172fc0cc6c33fd20ec49981411ea9b73d031 100644 (file)
@@ -218,7 +218,7 @@ static inline int save_add_info(void) {return 0;}
 /*
  * Update nodes_add and decide if to include add are in the zone.
  * Both SPARSE and RESERVE need nodes_add infomation.
- * This code supports one contigious hot add area per node.
+ * This code supports one contiguous hot add area per node.
  */
 static int reserve_hotadd(int node, unsigned long start, unsigned long end)
 {
index c049ce414f010359c0c312e08c6bd903b683797d..0ed046a187f77fb1d29228780c395f4e8d4636a1 100644 (file)
 #include <linux/mm.h>
 #include <asm/ptrace.h>
 #include <asm/uaccess.h>
+#include <asm/stacktrace.h>
 
-struct frame_head {
-       struct frame_head * ebp;
-       unsigned long ret;
-} __attribute__((packed));
+static void backtrace_warning_symbol(void *data, char *msg,
+                                    unsigned long symbol)
+{
+       /* Ignore warnings */
+}
 
-static struct frame_head *
-dump_kernel_backtrace(struct frame_head * head)
+static void backtrace_warning(void *data, char *msg)
 {
-       oprofile_add_trace(head->ret);
+       /* Ignore warnings */
+}
 
-       /* frame pointers should strictly progress back up the stack
-        * (towards higher addresses) */
-       if (head >= head->ebp)
-               return NULL;
+static int backtrace_stack(void *data, char *name)
+{
+       /* Yes, we want all stacks */
+       return 0;
+}
+
+static void backtrace_address(void *data, unsigned long addr)
+{
+       unsigned int *depth = data;
 
-       return head->ebp;
+       if ((*depth)--)
+               oprofile_add_trace(addr);
 }
 
+static struct stacktrace_ops backtrace_ops = {
+       .warning = backtrace_warning,
+       .warning_symbol = backtrace_warning_symbol,
+       .stack = backtrace_stack,
+       .address = backtrace_address,
+};
+
+struct frame_head {
+       struct frame_head *ebp;
+       unsigned long ret;
+} __attribute__((packed));
+
 static struct frame_head *
 dump_user_backtrace(struct frame_head * head)
 {
@@ -53,72 +73,16 @@ dump_user_backtrace(struct frame_head * head)
        return bufhead[0].ebp;
 }
 
-/*
- * |             | /\ Higher addresses
- * |             |
- * --------------- stack base (address of current_thread_info)
- * | thread info |
- * .             .
- * |    stack    |
- * --------------- saved regs->ebp value if valid (frame_head address)
- * .             .
- * --------------- saved regs->rsp value if x86_64
- * |             |
- * --------------- struct pt_regs * stored on stack if 32-bit
- * |             |
- * .             .
- * |             |
- * --------------- %esp
- * |             |
- * |             | \/ Lower addresses
- *
- * Thus, regs (or regs->rsp for x86_64) <-> stack base restricts the
- * valid(ish) ebp values. Note: (1) for x86_64, NMI and several other
- * exceptions use special stacks, maintained by the interrupt stack table
- * (IST). These stacks are set up in trap_init() in
- * arch/x86_64/kernel/traps.c. Thus, for x86_64, regs now does not point
- * to the kernel stack; instead, it points to some location on the NMI
- * stack. On the other hand, regs->rsp is the stack pointer saved when the
- * NMI occurred. (2) For 32-bit, regs->esp is not valid because the
- * processor does not save %esp on the kernel stack when interrupts occur
- * in the kernel mode.
- */
-#ifdef CONFIG_FRAME_POINTER
-static int valid_kernel_stack(struct frame_head * head, struct pt_regs * regs)
-{
-       unsigned long headaddr = (unsigned long)head;
-#ifdef CONFIG_X86_64
-       unsigned long stack = (unsigned long)regs->rsp;
-#else
-       unsigned long stack = (unsigned long)regs;
-#endif
-       unsigned long stack_base = (stack & ~(THREAD_SIZE - 1)) + THREAD_SIZE;
-
-       return headaddr > stack && headaddr < stack_base;
-}
-#else
-/* without fp, it's just junk */
-static int valid_kernel_stack(struct frame_head * head, struct pt_regs * regs)
-{
-       return 0;
-}
-#endif
-
-
 void
 x86_backtrace(struct pt_regs * const regs, unsigned int depth)
 {
-       struct frame_head *head;
-
-#ifdef CONFIG_X86_64
-       head = (struct frame_head *)regs->rbp;
-#else
-       head = (struct frame_head *)regs->ebp;
-#endif
+       struct frame_head *head = (struct frame_head *)frame_pointer(regs);
+       unsigned long stack = stack_pointer(regs);
 
        if (!user_mode_vm(regs)) {
-               while (depth-- && valid_kernel_stack(head, regs))
-                       head = dump_kernel_backtrace(head);
+               if (depth)
+                       dump_trace(NULL, regs, (unsigned long *)stack,
+                                  &backtrace_ops, &depth);
                return;
        }
 
index abb1aa95b979f8dbc0fa65a90210d11409715f61..45b605fa71d06f6064b7fb6f3d34a017106b3cb9 100644 (file)
@@ -29,7 +29,7 @@ struct op_msrs {
 struct pt_regs;
 
 /* The model vtable abstracts the differences between
- * various x86 CPU model's perfctr support.
+ * various x86 CPU models' perfctr support.
  */
 struct op_x86_model_spec {
        unsigned int const num_counters;
index c52150fdf82b51015515c1a7bb3716be515a7ef7..88d8f5c0ecb5e2e8bb5bc05f5aff97790ddd667a 100644 (file)
@@ -169,7 +169,7 @@ void eisa_set_level_irq(unsigned int irq)
 }
 
 /*
- * Common IRQ routing practice: nybbles in config space,
+ * Common IRQ routing practice: nibbles in config space,
  * offset by some magic constant.
  */
 static unsigned int read_config_nybble(struct pci_dev *router, unsigned offset, unsigned nr)
@@ -585,7 +585,7 @@ static __init int via_router_probe(struct irq_router *r,
        /* FIXME: We should move some of the quirk fixup stuff here */
 
        /*
-        * work arounds for some buggy BIOSes
+        * workarounds for some buggy BIOSes
         */
        if (device == PCI_DEVICE_ID_VIA_82C586_0) {
                switch(router->device) {
diff --git a/arch/x86_64/.gitignore b/arch/x86_64/.gitignore
new file mode 100644 (file)
index 0000000..36ef4c3
--- /dev/null
@@ -0,0 +1 @@
+boot
index 25785b23df87fabe74ff640459dc5ecc04d68f6a..aab25f3ba3cee2fff6733344f3ea44d5f0c26e12 100644 (file)
@@ -723,7 +723,7 @@ config ARCH_HIBERNATION_HEADER
 
 source "drivers/acpi/Kconfig"
 
-source "arch/x86/kernel/cpufreq/Kconfig"
+source "arch/x86/kernel/cpu/cpufreq/Kconfig_64"
 
 source "drivers/cpuidle/Kconfig"
 
@@ -768,9 +768,9 @@ source "fs/Kconfig.binfmt"
 config IA32_EMULATION
        bool "IA32 Emulation"
        help
-         Include code to run 32-bit programs under a 64-bit kernel. You should likely
-         turn this on, unless you're 100% sure that you don't have any 32-bit programs
-         left.
+         Include code to run 32-bit programs under a 64-bit kernel. You should
+         likely turn this on, unless you're 100% sure that you don't have any
+         32-bit programs left.
 
 config IA32_AOUT
        tristate "IA32 a.out support"
index 03e1ede27b8541c627f8db895ae5e8534cff3166..6d89ab762ffcf759b2dc6d344babe73ce056a239 100644 (file)
@@ -74,7 +74,7 @@ KBUILD_CFLAGS += $(cflags-y)
 CFLAGS_KERNEL += $(cflags-kernel-y)
 KBUILD_AFLAGS += -m64
 
-head-y := arch/x86/kernel/head_64.o arch/x86/kernel/head64.o arch/x86/kernel/init_task_64.o
+head-y := arch/x86/kernel/head_64.o arch/x86/kernel/head64.o arch/x86/kernel/init_task.o
 
 libs-y                                         += arch/x86/lib/
 core-y                                 += arch/x86/kernel/ \
@@ -97,9 +97,9 @@ BOOTIMAGE                     := arch/x86/boot/bzImage
 KBUILD_IMAGE                  := $(BOOTIMAGE)
 
 bzImage: vmlinux
-       $(Q)mkdir -p $(objtree)/arch/x86_64/boot
-       $(Q)ln -fsn $(objtree)/arch/x86/boot/bzImage $(objtree)/arch/x86_64/boot/bzImage
        $(Q)$(MAKE) $(build)=$(boot) $(BOOTIMAGE)
+       $(Q)mkdir -p $(objtree)/arch/x86_64/boot
+       $(Q)ln -fsn ../../x86/boot/bzImage $(objtree)/arch/x86_64/boot/bzImage
 
 bzlilo: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zlilo
index f09962fa98c09a5594358d22c23b0b7d993209f0..b61fb36674e7f7e571aac77bb534165aa750d875 100644 (file)
@@ -798,7 +798,7 @@ static int iss_net_setup(char *str)
 
 #undef ERR
 
-__setup("eth", iss_net_setup);
+__setup("eth=", iss_net_setup);
 
 /*
  * Initialize all ISS Ethernet devices previously registered in iss_net_setup.
index 952aee04a68ad7cc240b8ecb7a8a0e1590b9a33f..446aea2a3cfbd17e6ff8d15fc0b069785d196e7f 100644 (file)
@@ -390,7 +390,7 @@ EXPORT_SYMBOL(elv_rb_find);
 
 /*
  * Insert rq into dispatch queue of q.  Queue lock must be held on
- * entry.  rq is sort insted into the dispatch queue. To be used by
+ * entry.  rq is sort instead into the dispatch queue. To be used by
  * specific elevators.
  */
 void elv_dispatch_sort(struct request_queue *q, struct request *rq)
index 4ccc5af6c26530c81d0da2a6fed9b7bf609c2b8c..1f5c724773568acf31f7dde568972f4925f39407 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (c) 2005 Herbert Xu <herbert@gondor.apana.org.au>
  *
  * Portions derived from Cryptoapi, by Alexander Kjeldaas <astor@fast.no>
- * and Nettle, by Niels Möller.
+ * and Nettle, by Niels Möller.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the Free
index 9c2bb535b09ab7fa78872ff72756931292b0743e..d161949fdb94d28eb318a70cfae495ac2a742434 100644 (file)
@@ -10,7 +10,7 @@
  *
  * Based on code:
  *
- * Copyright (c) 1995 - 2000 Kungliga Tekniska Högskolan
+ * Copyright (c) 1995 - 2000 Kungliga Tekniska Högskolan
  * (Royal Institute of Technology, Stockholm, Sweden).
  * All rights reserved.
  *
index b83389145f2868c04e5173fabd0d7a308998a5b4..5d0e26a5c34cd55455ee776891acac0e861b93f6 100644 (file)
@@ -52,7 +52,7 @@ config ACPI_PROCFS
        depends on PROC_FS
        ---help---
          For backwards compatibility, this option allows
-         depricated /proc/acpi/ files to exist, even when
+         deprecated /proc/acpi/ files to exist, even when
          they have been replaced by functions in /sys.
          The deprecated files (and their replacements) include:
 
index a7351084f2f8d48a28c5e024aff9a0b83ac8dce2..235a51e328c3467522e16ac1d4bb26c5a7227537 100644 (file)
@@ -422,12 +422,6 @@ static int map_lsapic_id(struct acpi_subtable_header *entry,
        return 0;
 }
 
-#ifdef CONFIG_IA64
-#define arch_cpu_to_apicid     ia64_cpu_to_sapicid
-#else
-#define arch_cpu_to_apicid     x86_cpu_to_apicid
-#endif
-
 static int map_madt_entry(u32 acpi_id)
 {
        unsigned long madt_end, entry;
@@ -501,7 +495,7 @@ static int get_cpu_id(acpi_handle handle, u32 acpi_id)
                return apic_id;
 
        for (i = 0; i < NR_CPUS; ++i) {
-               if (arch_cpu_to_apicid[i] == apic_id)
+               if (cpu_physical_id(i) == apic_id)
                        return i;
        }
        return -1;
index 10bc3f64c453d50896be9178d20879aef65abb1a..47c8060405240bb7b2ac6797821a8b7d2d86ea52 100644 (file)
@@ -1479,7 +1479,7 @@ static void ahci_port_intr(struct ata_port *ap)
                return;
        }
 
-       /* hmmm... a spurious interupt */
+       /* hmmm... a spurious interrupt */
 
        /* if !NCQ, ignore.  No modern ATA device has broken HSM
         * implementation for non-NCQ commands.
index bbaa545ea999817200366d54f3ea4b65cb6f32af..629eadbd0ec09c17f538ace9ffd7921161679eac 100644 (file)
@@ -1392,7 +1392,7 @@ static void ata_qc_complete_internal(struct ata_queued_cmd *qc)
  *     @tf: Taskfile registers for the command and the result
  *     @cdb: CDB for packet command
  *     @dma_dir: Data tranfer direction of the command
- *     @sg: sg list for the data buffer of the command
+ *     @sgl: sg list for the data buffer of the command
  *     @n_elem: Number of sg entries
  *     @timeout: Timeout in msecs (0 for default)
  *
index f9e4cd5279423c678343aca53d2078937df6fe7f..8227c45109ecd95771a5cf7eb775fe715902971e 100644 (file)
@@ -856,7 +856,7 @@ err_out:
  *     @pdev: PCI device
  *
  *     Some PCI ATA devices report simplex mode but in fact can be told to
- *     enter non simplex mode. This implements the neccessary logic to
+ *     enter non simplex mode. This implements the necessary logic to
  *     perform the task on such devices. Calling it on other devices will
  *     have -undefined- behaviour.
  */
index 9e412c26b2a360202f951055071c4a3d82abd3da..7acbbd9ee4691d81ab576659e16feeb400457fa1 100644 (file)
@@ -215,7 +215,7 @@ static void cmd64x_set_dmamode(struct ata_port *ap, struct ata_device *adev)
        regU &= ~(0x05 << adev->devno);
 
        if (adev->dma_mode >= XFER_UDMA_0) {
-               /* Merge thge timing value */
+               /* Merge the timing value */
                regU |= udma_data[adev->dma_mode - XFER_UDMA_0] << shift;
                /* Merge the control bits */
                regU |= 1 << adev->devno; /* UDMA on */
index 57e827e4109e939ac9e83561f8284bf19a0d6a9e..e1818fdd9159eaa4a87fc5326ce660c3531d3fcb 100644 (file)
@@ -138,7 +138,7 @@ static void cs5530_set_dmamode(struct ata_port *ap, struct ata_device *adev)
  *
  *     Called when the libata layer is about to issue a command. We wrap
  *     this interface so that we can load the correct ATA timings if
- *     neccessary.  Specifically we have a problem that there is only
+ *     necessary.  Specifically we have a problem that there is only
  *     one MWDMA/UDMA bit.
  */
 
index 3578593a882b503921ca139d2dfec11192ab2467..01324530d052c807ae31d82e94a1b22ae3002df6 100644 (file)
@@ -25,7 +25,7 @@
  * Documentation:
  *     Available from AMD web site.
  * TODO
- *     Review errata to see if serializing is neccessary
+ *     Review errata to see if serializing is necessary
  */
 
 #include <linux/kernel.h>
index 53070f6b1fc4e1c7e005482cb95c9f00cc92a351..d753e568588ea585e4fed4970e1940b63d4382d3 100644 (file)
@@ -40,7 +40,7 @@
 #include <asm/msr.h>
 
 #define DRV_NAME       "pata_cs5536"
-#define DRV_VERSION    "0.0.5"
+#define DRV_VERSION    "0.0.6"
 
 enum {
        CFG                     = 0,
@@ -214,7 +214,7 @@ static void cs5536_set_dmamode(struct ata_port *ap, struct ata_device *adev)
                cs5536_read(pdev, DTC, &dtc);
 
                dtc &= ~(IDE_DRV_MASK << dshift);
-               dtc |= mwdma_timings[mode] << dshift;
+               dtc |= mwdma_timings[mode - XFER_MW_DMA_0] << dshift;
 
                cs5536_write(pdev, DTC, dtc);
        }
index 988ef736b936ca7db206d62fbc6a9809bbdcff76..ca9aae09daed17b5dacfbf7b23e964a77b3d6077 100644 (file)
@@ -105,7 +105,7 @@ struct it821x_dev
 
 /*
  *     We allow users to force the card into non raid mode without
- *     flashing the alternative BIOS. This is also neccessary right now
+ *     flashing the alternative BIOS. This is also necessary right now
  *     for embedded platforms that cannot run a PC BIOS but are using this
  *     device.
  */
@@ -383,7 +383,7 @@ static void it821x_passthru_bmdma_stop(struct ata_queued_cmd *qc)
  *     @ap: ATA port
  *     @device: Device number (not pointer)
  *
- *     Device selection hook. If neccessary perform clock switching
+ *     Device selection hook. If necessary perform clock switching
  */
 
 static void it821x_passthru_dev_select(struct ata_port *ap,
index d5483087a3faa366db7895c15d26bcf827c38bd7..c0d9e0cf208c5737f57f32bac833b3f42d29feaa 100644 (file)
@@ -129,7 +129,7 @@ static void mpiix_set_piomode(struct ata_port *ap, struct ata_device *adev)
  *
  *     Called when the libata layer is about to issue a command. We wrap
  *     this interface so that we can load the correct ATA timings if
- *     neccessary. Our logic also clears TIME0/TIME1 for the other device so
+ *     necessary. Our logic also clears TIME0/TIME1 for the other device so
  *     that, even if we get this wrong, cycles to the other device will
  *     be made PIO0.
  */
index 6e8e55745b7b3943c6e9c757a38236ee7cfb65f1..9fe66fd75017ef692c98c141f523b7512d4329b0 100644 (file)
@@ -124,7 +124,7 @@ static void ns87410_set_piomode(struct ata_port *ap, struct ata_device *adev)
  *
  *     Called when the libata layer is about to issue a command. We wrap
  *     this interface so that we can load the correct ATA timings if
- *     neccessary.
+ *     necessary.
  */
 
 static unsigned int ns87410_qc_issue_prot(struct ata_queued_cmd *qc)
index 3cd5eb2b6c9191383ee2fa64acc81d7e129d9315..44da09ace52c53e98280f18f39659663ad87fe3a 100644 (file)
@@ -200,7 +200,7 @@ static void oldpiix_set_dmamode (struct ata_port *ap, struct ata_device *adev)
  *
  *     Called when the libata layer is about to issue a command. We wrap
  *     this interface so that we can load the correct ATA timings if
- *     neccessary. Our logic also clears TIME0/TIME1 for the other device so
+ *     necessary. Our logic also clears TIME0/TIME1 for the other device so
  *     that, even if we get this wrong, cycles to the other device will
  *     be made PIO0.
  */
index d5b76497f4a24ad891776e5d0a1b71d221954f05..8109b08fc0246f483f78fd350f1c0991abbc8b12 100644 (file)
@@ -161,7 +161,7 @@ static void radisys_set_dmamode (struct ata_port *ap, struct ata_device *adev)
  *
  *     Called when the libata layer is about to issue a command. We wrap
  *     this interface so that we can load the correct ATA timings if
- *     neccessary. Our logic also clears TIME0/TIME1 for the other device so
+ *     necessary. Our logic also clears TIME0/TIME1 for the other device so
  *     that, even if we get this wrong, cycles to the other device will
  *     be made PIO0.
  */
index 21ebc485ca4b4d71913a0ae302b35ba7f2924e35..725a8586cd6e40744a04c5091d3a642d2f9b65ca 100644 (file)
@@ -156,7 +156,7 @@ static void sc1200_set_dmamode(struct ata_port *ap, struct ata_device *adev)
  *
  *     Called when the libata layer is about to issue a command. We wrap
  *     this interface so that we can load the correct ATA timings if
- *     neccessary.  Specifically we have a problem that there is only
+ *     necessary.  Specifically we have a problem that there is only
  *     one MWDMA/UDMA bit.
  */
 
index 4dc2e73298fdeae67bfdbcc81a8031ed5a9b97bc..5c1e9cb59ecb66ed07ace0e1739516300e7c0280 100644 (file)
@@ -16,7 +16,7 @@
  *
  *     If you have strange problems with nVidia chipset systems please
  *     see the SI support documentation and update your system BIOS
- *     if neccessary
+ *     if necessary
  *
  * TODO
  *     If we know all our devices are LBA28 (or LBA28 sized)  we could use
index 5d41b6612d7f2626189e6a2653f47153f0cfd282..ea7a9a652e6118c8ab1cc2c20088abcb67670067 100644 (file)
@@ -420,7 +420,7 @@ static struct ata_port_operations via_port_ops_noirq = {
  *     @pdev: PCI device
  *     @flags: configuration flags
  *
- *     Set the FIFO properties for this device if neccessary. Used both on
+ *     Set the FIFO properties for this device if necessary. Used both on
  *     set up and on and the resume path
  */
 
index 8d98a9fb0a42d12162f744204b25c279a3706dde..f147dc7bf464ff74f404440bb74c75df0f3ea622 100644 (file)
@@ -92,7 +92,7 @@ static struct scsi_host_template sis_sht = {
        .queuecommand           = ata_scsi_queuecmd,
        .can_queue              = ATA_DEF_QUEUE,
        .this_id                = ATA_SHT_THIS_ID,
-       .sg_tablesize           = ATA_MAX_PRD,
+       .sg_tablesize           = LIBATA_MAX_PRD,
        .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
        .emulated               = ATA_SHT_EMULATED,
        .use_clustering         = ATA_SHT_USE_CLUSTERING,
@@ -166,11 +166,11 @@ static unsigned int get_scr_cfg_addr(struct ata_port *ap, unsigned int sc_reg)
        return addr;
 }
 
-static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg)
+static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg, u32 *val)
 {
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
        unsigned int cfg_addr = get_scr_cfg_addr(ap, sc_reg);
-       u32 val, val2 = 0;
+       u32 val2 = 0;
        u8 pmr;
 
        if (sc_reg == SCR_ERROR) /* doesn't exist in PCI cfg space */
@@ -178,13 +178,16 @@ static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg)
 
        pci_read_config_byte(pdev, SIS_PMR, &pmr);
 
-       pci_read_config_dword(pdev, cfg_addr, &val);
+       pci_read_config_dword(pdev, cfg_addr, val);
 
        if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
            (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
                pci_read_config_dword(pdev, cfg_addr+0x10, &val2);
 
-       return (val|val2) &  0xfffffffb; /* avoid problems with powerdowned ports */
+       *val |= val2;
+       *val &= 0xfffffffb;     /* avoid problems with powerdowned ports */
+
+       return 0;
 }
 
 static void sis_scr_cfg_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
@@ -214,7 +217,7 @@ static int sis_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val)
                return -EINVAL;
 
        if (ap->flags & SIS_FLAG_CFGSCR)
-               return sis_scr_cfg_read(ap, sc_reg);
+               return sis_scr_cfg_read(ap, sc_reg, val);
 
        pci_read_config_byte(pdev, SIS_PMR, &pmr);
 
index 94ebc9dc40fd64434f06e48f1923ad21e5db5112..f8f7139c07c1a9997954e7bb97db1aed5affafd2 100644 (file)
@@ -1596,7 +1596,7 @@ static irqreturn_t fs_irq (int irq, void *dev_id)
 
        /* print the bits in the ISR register. */
        if (fs_debug & FS_DEBUG_IRQ) {
-               /* The FS_DEBUG things are unneccesary here. But this way it is
+               /* The FS_DEBUG things are unnecessary here. But this way it is
                   clear for grep that these are debug prints. */
                fs_dprintk (FS_DEBUG_IRQ,  "IRQ status:");
                for (i=0;i<27;i++) 
index ca4d7f0d09b79af954b814ce11299b4e69e996b8..ce4b1e484e64501f43b18e8b786b9639854ed0d0 100644 (file)
@@ -204,23 +204,6 @@ config BLK_DEV_COW_COMMON
        bool
        default BLK_DEV_UBD
 
-config MMAPPER
-       tristate "Example IO memory driver (BROKEN)"
-       depends on UML && BROKEN
-       ---help---
-          The User-Mode Linux port can provide support for IO Memory
-          emulation with this option.  This allows a host file to be
-          specified as an I/O region on the kernel command line. That file
-          will be mapped into UML's kernel address space where a driver can
-          locate it and do whatever it wants with the memory, including
-          providing an interface to it for UML processes to use.
-
-          For more information, see
-          <http://user-mode-linux.sourceforge.net/iomem.html>.
-
-          If you'd like to be able to provide a simulated IO port space for
-          User-Mode Linux processes, say Y.  If unsure, say N.
-
 config BLK_DEV_LOOP
        tristate "Loopback device support"
        ---help---
@@ -351,7 +334,7 @@ config BLK_DEV_RAM_COUNT
        default "16"
        depends on BLK_DEV_RAM
        help
-         The default value is 16 RAM disks. Change this if you know what
+         The default value is 16 RAM disks. Change this if you know what you
          are doing. If you boot from a filesystem that needs to be extracted
          in memory, you will need at least one RAM disk (e.g. root on cramfs).
 
@@ -361,7 +344,7 @@ config BLK_DEV_RAM_SIZE
        default "4096"
        help
          The default value is 4096 kilobytes. Only change this if you know
-         what are you doing.
+         what you are doing.
 
 config BLK_DEV_RAM_BLOCKSIZE
        int "Default RAM disk block size (bytes)"
index 589cbbd9cd4f4f54f77338ee9ec09bb2f8af591a..56e23042728ae093776a86a499da310511d51a91 100644 (file)
@@ -29,7 +29,7 @@
  *
  * Maximum number of loop devices when compiled-in now selectable by passing
  * max_loop=<1-255> to the kernel on boot.
- * Erik I. Bolsø, <eriki@himolde.no>, Oct 31, 1999
+ * Erik I. Bolsø, <eriki@himolde.no>, Oct 31, 1999
  *
  * Completely rewrite request handling to be make_request_fn style and
  * non blocking, pushing work to a helper thread. Lots of fixes from
index ac4a0cb217ab33b75a6a41814df03d08f39ccca2..6332acad078c5f6976854b0f394e3496dc1f4e81 100644 (file)
@@ -508,7 +508,6 @@ error_out:
                nbd_end_request(req);
                spin_lock(q->queue_lock);
        }
-       return;
 }
 
 static int nbd_ioctl(struct inode *inode, struct file *file,
index 08176d23a46cd421690aca1d13a2edecf1499b71..47f8ac6cce574c81b1e845099000e019a0098468 100644 (file)
@@ -365,7 +365,7 @@ static int rd_open(struct inode *inode, struct file *filp)
                /*
                 * Deep badness.  rd_blkdev_pagecache_IO() needs to allocate
                 * pagecache pages within a request_fn.  We cannot recur back
-                * into the filesytem which is mounted atop the ramdisk, because
+                * into the filesystem which is mounted atop the ramdisk, because
                 * that would deadlock on fs locks.  And we really don't want
                 * to reenter rd_blkdev_pagecache_IO when we're already within
                 * that function.
index d15234c5965e60ffeb4a74251462981ed604beb6..d1bd0f08a331bcf0d98f3a8526eec05173666552 100644 (file)
  *
  * Revision 1.36.3.8  1996/06/07 16:29:00  bentson
  * starting minor number at zero; added missing verify_area
- * as noted by Heiko Eissfeldt <heiko@colossus.escape.de>
+ * as noted by Heiko Eißfeldt <heiko@colossus.escape.de>
  *
  * Revision 1.36.3.7  1996/04/19 21:06:18  bentson
  * remove unneeded boot message & fix CLOCAL hardware flow
@@ -727,8 +727,6 @@ static struct tty_driver *cy_serial_driver;
    driver to probe addresses at a different address, add it to
    this table.  If the driver is probing some other board and
    causing problems, remove the offending address from this table.
-   The cy_setup function extracts additional addresses from the
-   boot options line.  The form is "cyclades=address,address..."
 */
 
 static unsigned int cy_isa_addresses[] = {
index 3ad319070704ca7921b5016e35f17384ce5e19d3..4b8e7db5a23256452bff323f1d1b6acd0de34dc2 100644 (file)
@@ -29,7 +29,7 @@
  * Simple open hash tab implementation.
  *
  * Authors:
- * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 #include "drmP.h"
index 0f1376774168bdd8796d04780e719cfa88101a42..573e333ac4573168b6e073847f7e4ce88c1ca63d 100644 (file)
@@ -29,7 +29,7 @@
  * Simple open hash tab implementation.
  *
  * Authors:
- * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 #ifndef DRM_HASHTAB_H
index 3e6bc14f744139c758df485a30d30568e4370142..86f4eb61a6a46c2a26247852231e5a612bf1a73e 100644 (file)
@@ -38,7 +38,7 @@
  * Aligned allocations can also see improvement.
  *
  * Authors:
- * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 #include "drmP.h"
index e292bb0eaca2a3c4a303b76939ed94d38dd54be3..b55d5bc6ea612922209ff9236b75789762697515 100644 (file)
@@ -8,12 +8,12 @@
  * \todo Implement the remaining ioctl's for the PCI pools.
  * \todo The wrappers here are so thin that they would be better off inlined..
  *
- * \author Jose Fonseca <jrfonseca@tungstengraphics.com>
+ * \author José Fonseca <jrfonseca@tungstengraphics.com>
  * \author Leif Delgass <ldelgass@retinalburn.net>
  */
 
 /*
- * Copyright 2003 JosFonseca.
+ * Copyright 2003 José Fonseca.
  * Copyright 2003 Leif Delgass.
  * All Rights Reserved.
  *
index f5466966081e9446eda11a1f0b51d2990ab7cf2d..e040f47f369f94255c9e0e4bd843be71b9184e22 100644 (file)
@@ -2,7 +2,7 @@
  * \file drm_sarea.h
  * \brief SAREA definitions
  *
- * \author Michel Dänzer <michel@daenzer.net>
+ * \author Michel Dänzer <michel@daenzer.net>
  */
 
 /*
index 8421a93946d864ed3e44af7d3e168f8f7a06522b..926f146390cec73e40aec3f2eee185f6d311b65b 100644 (file)
@@ -33,7 +33,7 @@
  * struct or a context identifier.
  *
  * Authors:
- * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 #include "drm_sman.h"
index 39a39fefeef14784f6f4a5bbe292a692e2ae427b..08ecf83ad5d4ac73f763663eaf7be302b58e0e60 100644 (file)
@@ -33,7 +33,7 @@
  * struct or a context identifier.
  *
  * Authors:
- * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 #ifndef DRM_SMAN_H
index 250d2aa46581750a349a85fe8742ea0b0aa519d9..5041bd8dbed86b40f719c5d3eac865a7ccf02eaa 100644 (file)
@@ -29,7 +29,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  *    Kevin E. Martin <martin@valinux.com>
  *    Gareth Hughes <gareth@valinux.com>
- *    Michel Dzer <daenzerm@student.ethz.ch>
+ *    Michel Dänzer <daenzerm@student.ethz.ch>
  */
 
 #ifndef __R128_DRV_H__
index 2b2407ee490e784c1fc4c12f5344f0c9b4a8ab59..84f5bc36252b92d8cbaf6fc9a5a4a00ee835f463 100644 (file)
@@ -27,7 +27,7 @@
  *
  * Authors:
  *    Keith Whitwell <keith@tungstengraphics.com>
- *    Michel Dzer <michel@daenzer.net>
+ *    Michel Dänzer <michel@daenzer.net>
  */
 
 #include "drmP.h"
index 69c9f2febf43a9b42bb05dada49ac9df8e572c46..f824f2f5fdc29d4474c2da6c57dedf27456e8809 100644 (file)
@@ -3005,7 +3005,7 @@ static int radeon_cp_getparam(struct drm_device *dev, void *data, struct drm_fil
                /*
                 * This ioctl() doesn't work on 64-bit platforms because hw_lock is a
                 * pointer which can't fit into an int-sized variable.  According to
-                * Michel Dänzer, the ioctl() is only used on embedded platforms, so
+                * Michel Dänzer, the ioctl() is only used on embedded platforms, so
                 * not supporting it shouldn't be a problem.  If the same functionality
                 * is needed on 64-bit platforms, a new ioctl() would have to be added,
                 * so backwards-compatibility for the embedded platforms can be
index 8c66838ff515cf3904832ed070b988312f58fd92..6be1c575758063ff0721bf723544ff3d3d418a63 100644 (file)
@@ -28,7 +28,7 @@
 
 /*
  * Authors:
- *    Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ *    Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 #include "drmP.h"
index 9afc1684348d443d7cba58788484337776be6d93..3ffbf86498331453f64bdf1d7b7060d655088099 100644 (file)
@@ -22,7 +22,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 /*
- * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 #include "drmP.h"
index 28b50296a7bdfb18453a0eff61b59c7c4d7269fc..d6f8214b69f59ab3e2934a810205b81e699a7956 100644 (file)
@@ -20,7 +20,7 @@
  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  *
- * Author: Thomas Hellström 2004.
+ * Author: Thomas Hellström 2004.
  */
 
 #ifndef _VIA_VERIFIER_H_
index 0f8fb135da53108f1015aee4ebd47e821373bb0c..28607763ae649001d31894bdd1654c470ebc7818 100644 (file)
@@ -19,7 +19,7 @@
  *
  *  rs_set_termios fixed to look also for changes of the input
  *      flags INPCK, BRKINT, PARMRK, IGNPAR and IGNBRK.
- *                                            Bernd Anhpl 05/17/96.
+ *                                            Bernd Anhäupl 05/17/96.
  *
  * --- End of notices from serial.c ---
  *
index e13dd1892bfdf95bb8c8e731528c12eab1a4fb4d..3f35a1c562b1a1bb6c1fa211577caa87ac92c015 100644 (file)
@@ -10,7 +10,7 @@
  * Mostly based on original driver:
  *
  * Copyright (C) 2005 Nokia Corporation
- * Author: Juha Yrj��<juha.yrjola@nokia.com>
+ * Author: Juha Yrjölä <juha.yrjola@nokia.com>
  *
  * This file is licensed under  the terms of the GNU General Public
  * License version 2. This program is licensed "as is" without any
index cd406416effdb30eba7d25c97495052d2b8151f2..30e564516422edd31d42996d520c2fdb6bb7206b 100644 (file)
@@ -371,14 +371,14 @@ static int i8k_proc_show(struct seq_file *seq, void *offset)
        int fn_key, cpu_temp, ac_power;
        int left_fan, right_fan, left_speed, right_speed;
 
-       cpu_temp        = i8k_get_temp(0);                      /* 11100 µs */
-       left_fan        = i8k_get_fan_status(I8K_FAN_LEFT);     /*   580 µs */
-       right_fan       = i8k_get_fan_status(I8K_FAN_RIGHT);    /*   580 µs */
-       left_speed      = i8k_get_fan_speed(I8K_FAN_LEFT);      /*   580 µs */
-       right_speed     = i8k_get_fan_speed(I8K_FAN_RIGHT);     /*   580 µs */
-       fn_key          = i8k_get_fn_status();                  /*   750 µs */
+       cpu_temp        = i8k_get_temp(0);                      /* 11100 Âµs */
+       left_fan        = i8k_get_fan_status(I8K_FAN_LEFT);     /*   580 Âµs */
+       right_fan       = i8k_get_fan_status(I8K_FAN_RIGHT);    /*   580 Âµs */
+       left_speed      = i8k_get_fan_speed(I8K_FAN_LEFT);      /*   580 Âµs */
+       right_speed     = i8k_get_fan_speed(I8K_FAN_RIGHT);     /*   580 Âµs */
+       fn_key          = i8k_get_fn_status();                  /*   750 Âµs */
        if (power_status)
-               ac_power = i8k_get_power_status();              /* 14700 µs */
+               ac_power = i8k_get_power_status();              /* 14700 Âµs */
        else
                ac_power = -1;
 
index 038056911934c3b60a10a70553702ff33cb070b6..596c7173997b577d1216d479604435053da4f92f 100644 (file)
@@ -437,7 +437,7 @@ static inline void finish_erasing(struct tty_struct *tty)
  *     @c: character input
  *     @tty: terminal device
  *
- *     Perform erase and neccessary output when an erase character is
+ *     Perform erase and necessary output when an erase character is
  *     present in the stream from the driver layer. Handles the complexities
  *     of UTF-8 multibyte symbols.
  */
@@ -657,7 +657,7 @@ static inline void n_tty_receive_overrun(struct tty_struct *tty)
  *     @c: character
  *
  *     Process a parity error and queue the right data to indicate
- *     the error case if neccessary. Locking as per n_tty_receive_buf.
+ *     the error case if necessary. Locking as per n_tty_receive_buf.
  */
 static inline void n_tty_receive_parity_error(struct tty_struct *tty,
                                              unsigned char c)
index 7e6a3a413bb23d801ececee502d9676fda3bd612..d83419c3857e92baa4d28a8a53806b4b465484a4 100644 (file)
@@ -563,7 +563,7 @@ static void rp_do_poll(unsigned long dummy)
                /*  Get a ptr to the board's control struct */
                ctlp = sCtlNumToCtlPtr(ctrl);
 
-               /*  Get the interupt status from the board */
+               /*  Get the interrupt status from the board */
 #ifdef CONFIG_PCI
                if (ctlp->BusType == isPCI)
                        CtlMask = sPCIGetControllerIntStatus(ctlp);
index 9782cb4d30dcaedbd0e5405dfc657c111b33c49b..877e53dcb9968a2215816b10c4351fb5e2ba4224 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (C) 2005 Narayanan R S <nars@kadamba.org>
  *
- * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
+ * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
  *
  * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au>
  *
index 13a53575a0164bf82ea5716c7c1d5fbc30b8cbbf..f36fecd3fd264a67cf7d66b2fd8e74369a38f406 100644 (file)
@@ -943,7 +943,7 @@ EXPORT_SYMBOL_GPL(tty_ldisc_deref);
  *     @tty: terminal to activate ldisc on
  *
  *     Set the TTY_LDISC flag when the line discipline can be called
- *     again. Do neccessary wakeups for existing sleepers.
+ *     again. Do necessary wakeups for existing sleepers.
  *
  *     Note: nobody should set this bit except via this function. Clearing
  *     directly is allowed.
@@ -1504,7 +1504,7 @@ EXPORT_SYMBOL(tty_hangup);
  *
  *     The user has asked via system call for the terminal to be hung up.
  *     We do this synchronously so that when the syscall returns the process
- *     is complete. That guarantee is neccessary for security reasons.
+ *     is complete. That guarantee is necessary for security reasons.
  */
 
 void tty_vhangup(struct tty_struct * tty)
@@ -1691,7 +1691,7 @@ EXPORT_SYMBOL(stop_tty);
  *     @tty: tty to start
  *
  *     Start a tty that has been stopped if at all possible. Perform
- *     any neccessary wakeups and propagate the TIOCPKT status. If this
+ *     any necessary wakeups and propagate the TIOCPKT status. If this
  *     is the tty was previous stopped and is being started then the
  *     driver start method is invoked and the line discipline woken.
  *
@@ -2877,7 +2877,7 @@ static int tty_fasync(int fd, struct file * filp, int on)
  *     @tty: tty to fake input into
  *     @p: pointer to character
  *
- *     Fake input to a tty device. Does the neccessary locking and
+ *     Fake input to a tty device. Does the necessary locking and
  *     input management.
  *
  *     FIXME: does not honour flow control ??
index 0def089cc1f296fa205ec836b501349c94172e44..7a003504c265f73ee5f99aaffb140d97d1853991 100644 (file)
@@ -444,7 +444,7 @@ static void change_termios(struct tty_struct * tty, struct ktermios * new_termio
  *     @arg: user data
  *     @opt: option information
  *
- *     Helper function to prepare termios data and run neccessary other
+ *     Helper function to prepare termios data and run necessary other
  *     functions before using change_termios to do the actual changes.
  *
  *     Locking:
index 9959b799dbe2f100351be40f5b44e564669e2ffb..c00d4a9b39e5861980d884823e9d46d41c18a61f 100644 (file)
@@ -228,7 +228,7 @@ fw_fill_request(struct fw_packet *packet, int tcode, int tlabel,
  *
  * @param card the card from which to send the request
  * @param tcode the tcode for this transaction.  Do not use
- *   TCODE_LOCK_REQUEST directly, insted use TCODE_LOCK_MASK_SWAP
+ *   TCODE_LOCK_REQUEST directly, instead use TCODE_LOCK_MASK_SWAP
  *   etc. to specify tcode and ext_tcode.
  * @param node_id the destination node ID (bus ID and PHY ID concatenated)
  * @param generation the generation for which node_id is valid
index 22329feb3b5ae63d7b65a3e561f263da7935342d..4c210e16b1b4d5b0ef8f4a17e7a2e79be5061136 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id: hid-ff.c,v 1.2 2002/04/18 22:02:47 jdeneux Exp $
- *
  *  Force feedback support for hid devices.
  *  Not all hid devices use the same protocol. For example, some use PID,
  *  other use their own proprietary procotol.
index 6f66551d9e51ab00f787dfe5c2d5d9182affd4bc..5c82ec7f8bbda7fea7ec8a1f81c14add4a25c6d8 100644 (file)
@@ -150,7 +150,7 @@ static struct coretemp_data *coretemp_update_device(struct device *dev)
 static int __devinit coretemp_probe(struct platform_device *pdev)
 {
        struct coretemp_data *data;
-       struct cpuinfo_x86 *c = &(cpu_data)[pdev->id];
+       struct cpuinfo_x86 *c = &cpu_data(pdev->id);
        int err;
        u32 eax, edx;
 
@@ -359,7 +359,7 @@ static int __init coretemp_init(void)
        struct pdev_entry *p, *n;
 
        /* quick check if we run Intel */
-       if (cpu_data[0].x86_vendor != X86_VENDOR_INTEL)
+       if (cpu_data(0).x86_vendor != X86_VENDOR_INTEL)
                goto exit;
 
        err = platform_driver_register(&coretemp_driver);
@@ -367,7 +367,7 @@ static int __init coretemp_init(void)
                goto exit;
 
        for_each_online_cpu(i) {
-               struct cpuinfo_x86 *c = &(cpu_data)[i];
+               struct cpuinfo_x86 *c = &cpu_data(i);
 
                /* check if family 6, models e, f, 16 */
                if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
index a3b56c816e11d3924c98698f6978802c27e6fc29..2d39d8fc2389fbc904fbc1c93632981efa7d1be5 100644 (file)
@@ -2,7 +2,7 @@
     gl520sm.c - Part of lm_sensors, Linux kernel modules for hardware
                 monitoring
     Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>,
-                              Kyösti Mälkki <kmalkki@cc.hut.fi>
+                              Kyösti Mälkki <kmalkki@cc.hut.fi>
     Copyright (c) 2005        Maarten Deprez <maartendeprez@users.sourceforge.net>
 
     This program is free software; you can redistribute it and/or modify
@@ -805,7 +805,7 @@ static void __exit sensors_gl520sm_exit(void)
 
 
 MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, "
-       "Kyösti Mälkki <kmalkki@cc.hut.fi>, "
+       "Kyösti Mälkki <kmalkki@cc.hut.fi>, "
        "Maarten Deprez <maartendeprez@users.sourceforge.net>");
 MODULE_DESCRIPTION("GL520SM driver");
 MODULE_LICENSE("GPL");
index f17e771e42f8aa6c699a21e429b0a1d557fbb048..3330667280b9aa5d5b3d9a7852934041a384bf8c 100644 (file)
@@ -200,7 +200,7 @@ static u8 find_vrm(u8 eff_family, u8 eff_model, u8 eff_stepping, u8 vendor)
 
 u8 vid_which_vrm(void)
 {
-       struct cpuinfo_x86 *c = cpu_data;
+       struct cpuinfo_x86 *c = &cpu_data(0);
        u32 eax;
        u8 eff_family, eff_model, eff_stepping, vrm_ret;
 
index 860b71ccbb86bde3e27dcc549303d8ea95ee76b8..7e2d9787babc4b5776ea262a84473f0d36824331 100644 (file)
@@ -3,7 +3,7 @@
                for hardware monitoring
 
     Copyright (C) 1998 - 2001 Frodo Looijaard <frodol@dds.nl>,
-                       Kyösti Mälkki <kmalkki@cc.hut.fi>, and
+                       Kyösti Mälkki <kmalkki@cc.hut.fi>, and
                        Mark D. Studebaker <mdsxyz123@yahoo.com>
     Ported to Linux 2.6 by Aurelien Jarno <aurelien@aurel32.net> with
     the help of Jean Delvare <khali@linux-fr.org>
index 8f63dada6019347eb9ee40bb4f6ff8c8177ef738..2635bba1e3fc96f75fa2c7561f59c06486601ef6 100644 (file)
@@ -3,7 +3,7 @@
                for hardware monitoring
 
     Copyright (c) 1998 - 2002  Frodo Looijaard <frodol@dds.nl>,
-                       Kyösti Mälkki <kmalkki@cc.hut.fi>,
+                       Kyösti Mälkki <kmalkki@cc.hut.fi>,
                        Mark Studebaker <mdsxyz123@yahoo.com>,
                        and Bob Dougherty <bobd@stanford.edu>
     (Some conversion-factor data were contributed by Jonathan Teh Soon Yew
@@ -866,7 +866,7 @@ static void __exit sm_via686a_exit(void)
        }
 }
 
-MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>, "
+MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>, "
              "Mark Studebaker <mdsxyz123@yahoo.com> "
              "and Bob Dougherty <bobd@stanford.edu>");
 MODULE_DESCRIPTION("VIA 686A Sensor device");
index 7f0a0a62cf60fc2d9524a4c3bd113767c98f4c59..a37cb6b8593cf715c957d49a400d01209ff69187 100644 (file)
@@ -18,7 +18,7 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.               */
 /* ------------------------------------------------------------------------- */
 
-/* With some changes from Frodo Looijaard <frodol@dds.nl>, Kyösti Mälkki
+/* With some changes from Frodo Looijaard <frodol@dds.nl>, Kyösti Mälkki
    <kmalkki@cc.hut.fi> and Jean Delvare <khali@linux-fr.org> */
 
 #include <linux/kernel.h>
index 36fdf971f08092f1997268046d039aec98fe912d..2a16211f12e55dfe2aca3ca77848a694b05d652c 100644 (file)
@@ -350,7 +350,7 @@ static int pca_init(struct i2c_algo_pca_data *adap)
        pca_outw(adap, I2C_PCA_ADR, own << 1);
 
        pca_set_con(adap, I2C_PCA_CON_ENSIO | clock);
-       udelay(500); /* 500 µs for oscilator to stabilise */
+       udelay(500); /* 500 Âµs for oscilator to stabilise */
 
        return 0;
 }
index ecb2c2d7d540241745e27137f45da6b1cf52c081..ab2e6f3498b4a585cafcb84952bfa0113e27d123 100644 (file)
@@ -19,7 +19,7 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.               */
 /* ------------------------------------------------------------------------- */
 
-/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and 
+/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and
    Frodo Looijaard <frodol@dds.nl> ,and also from Martin Bailey
    <mbailey@littlefeet-inc.com> */
 
index de95c75efb41e71d2796107331913adb0f0a0d61..c466c6cfc2e53512c402f2eae138c625a1fb1e69 100644 (file)
@@ -278,7 +278,7 @@ config I2C_IXP2000
        depends on ARCH_IXP2000
        select I2C_ALGOBIT
        help
-         Say Y here if you have an Intel IXP2000(2400, 2800, 2850) based 
+         Say Y here if you have an Intel IXP2000 (2400, 2800, 2850) based 
          system and are using GPIO lines for an I2C bus.
 
          This support is also available as a module. If so, the module
@@ -293,8 +293,8 @@ config I2C_POWERMAC
        default y
        help
          This exposes the various PowerMac i2c interfaces to the linux i2c
-         layer and to userland. It is used by various drivers on the powemac
-         platform, thus should generally be enabled.
+         layer and to userland. It is used by various drivers on the PowerMac
+         platform, and should generally be enabled.
 
          This support is also available as a module.  If so, the module
          will be called i2c-powermac.
@@ -438,12 +438,12 @@ config I2C_SIMTEC
        tristate "Simtec Generic I2C interface"
        select I2C_ALGOBIT
        help
-         If you say yes to this option, support will be inclyded for
+         If you say yes to this option, support will be included for
          the Simtec Generic I2C interface. This driver is for the
          simple I2C bus used on newer Simtec products for general
          I2C, such as DDC on the Simtec BBD2016A.
 
-         This driver can also be build as a module. If so, the module
+         This driver can also be built as a module. If so, the module
          will be called i2c-simtec.
 
 config SCx200_I2C
index 804f0a551c055fd9447f6b75d6b364d19a89567e..b7a9977b025f31a492d632f8b57cb49930f05466 100644 (file)
@@ -19,7 +19,7 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.               */
 /* ------------------------------------------------------------------------- */
 
-/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even
+/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even
    Frodo Looijaard <frodol@dds.nl> */
 
 /* Partialy rewriten by Oleg I. Vdovikin for mmapped support of
index 9832f773651ddfba8324bce580ff4d6e5a6c8001..f9972f9651e45f3497386cae1d16a55686066eab 100644 (file)
@@ -7,7 +7,7 @@
     Copyright (c) 1999-2004 Geert Uytterhoeven <geert@linux-m68k.org>
 
     Based on i2c Support for Via Technologies 82C586B South Bridge
-    Copyright (c) 1998, 1999 Kyösti Mälkki <kmalkki@cc.hut.fi>
+    Copyright (c) 1998, 1999 Kyösti Mälkki <kmalkki@cc.hut.fi>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
index e08bacadd6bc2ae7adc0445341d8996eff6ddee5..9b43ff7270d0213db406e034ec486e78af984336 100644 (file)
@@ -18,7 +18,7 @@
  *     Copyright 1995-97 Simon G. Vogl
  *                1998-99 Hans Berglund
  *
- *     With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> 
+ *     With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>
  *     and even Frodo Looijaard <frodol@dds.nl>
  *
  * This program is free software; you can redistribute  it and/or modify it
index e471e3bfdc1e08872dcc9d4dd23e1e81a5d422cd..89a30028ddb6e40d9cd00402936460e196a32f9b 100644 (file)
@@ -8,7 +8,7 @@
  * Tony Lindgren <tony@atomide.com> and Imre Deak <imre.deak@nokia.com>
  * Copyright (C) 2005 Nokia Corporation
  *
- * Cleaned up by Juha Yrjölä <juha.yrjola@nokia.com>
+ * Cleaned up by Juha Yrjölä <juha.yrjola@nokia.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 49a95e2887bc39221d63dd9c1511d54004cb3af2..c6faf9bdad18d1ddda022243a4de7cc29d83f185 100644 (file)
@@ -7,7 +7,7 @@
    Copyright (C) 1995-2000 Simon G. Vogl
    With some changes from:
    Frodo Looijaard <frodol@dds.nl>
-   Kyösti Mälkki <kmalkki@cc.hut.fi>
+   Kyösti Mälkki <kmalkki@cc.hut.fi>
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 039a07fde908f679851fb990e1e6ad04667002fd..59ba2086d2f92ffd5aa9c3c866b362ff6232ed3f 100644 (file)
@@ -7,7 +7,7 @@
    Copyright (C) 1995-2000 Simon G. Vogl
    With some changes from:
    Frodo Looijaard <frodol@dds.nl>
-   Kyösti Mälkki <kmalkki@cc.hut.fi>
+   Kyösti Mälkki <kmalkki@cc.hut.fi>
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 81520868797b84e8f3915a8c23360660c7291022..61716f6b14dcd2435c1b65f0fe27e05fc4f090cb 100644 (file)
@@ -4,7 +4,7 @@
 
     i2c Support for Via Technologies 82C586B South Bridge
 
-    Copyright (c) 1998, 1999 Kyösti Mälkki <kmalkki@cc.hut.fi>
+    Copyright (c) 1998, 1999 Kyösti Mälkki <kmalkki@cc.hut.fi>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -176,7 +176,7 @@ static void __exit i2c_vt586b_exit(void)
 }
 
 
-MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>");
+MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>");
 MODULE_DESCRIPTION("i2c for Via vt82c586b southbridge");
 MODULE_LICENSE("GPL");
 
index edc275002f8087a2501251a37dc2c29e5b637838..c9ce77f13c0ed366e03704d2fc81d22142fe0ae8 100644 (file)
@@ -2,7 +2,7 @@
     i2c-viapro.c - Part of lm_sensors, Linux kernel modules for hardware
               monitoring
     Copyright (c) 1998 - 2002  Frodo Looijaard <frodol@dds.nl>,
-    Philip Edelbrock <phil@netroedge.com>, Kyösti Mälkki <kmalkki@cc.hut.fi>,
+    Philip Edelbrock <phil@netroedge.com>, Kyösti Mälkki <kmalkki@cc.hut.fi>,
     Mark D. Studebaker <mdsxyz123@yahoo.com>
     Copyright (C) 2005 - 2007  Jean Delvare <khali@linux-fr.org>
 
index e73d58c43f386a349856cdb95f2935510c2a79fe..1a4e8dc03b365dfb2e5b99fd3e56d617bbe4b113 100644 (file)
@@ -17,7 +17,7 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.               */
 /* ------------------------------------------------------------------------- */
 
-/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>.
+/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>.
    All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
    SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and
    Jean Delvare <khali@linux-fr.org> */
index 6d9fd92763f46bf853bacbf091c92be3d1294c92..6eaece96524eac2c9e7d709559c4c99f4eb8a2a1 100644 (file)
@@ -1056,6 +1056,9 @@ endif
 config BLK_DEV_IDEDMA
        def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
 
+config IDE_ARCH_OBSOLETE_INIT
+       def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC
+
 endif
 
 config BLK_DEV_HD_ONLY
index f7449d04114a1b1e984917e35fb23755424abaf3..48db6167bb90f6005927590431ba56a231061cd3 100644 (file)
@@ -45,7 +45,7 @@ bastide_register(unsigned int base, unsigned int aux, int irq,
        hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20);
        hw.irq = irq;
 
-       ide_register_hw(&hw, 0, hwif);
+       ide_register_hw(&hw, NULL, 0, hwif);
 
        return 0;
 }
index 3af33fbf1f8859da5f2dc6c7ea0f9aeaf52e1c3a..410a0d13e35e847ad8695a7e8585cbb3d322e72b 100644 (file)
@@ -316,27 +316,29 @@ static int icside_dma_end(ide_drive_t *drive)
 
        drive->waiting_for_dma = 0;
 
-       disable_dma(hwif->hw.dma);
+       disable_dma(state->dev->dma);
 
        /* Teardown mappings after DMA has completed. */
        dma_unmap_sg(state->dev, hwif->sg_table, hwif->sg_nents,
                     hwif->sg_dma_direction);
 
-       return get_dma_residue(hwif->hw.dma) != 0;
+       return get_dma_residue(state->dev->dma) != 0;
 }
 
 static void icside_dma_start(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = HWIF(drive);
+       struct icside_state *state = hwif->hwif_data;
 
        /* We can not enable DMA on both channels simultaneously. */
-       BUG_ON(dma_channel_active(hwif->hw.dma));
-       enable_dma(hwif->hw.dma);
+       BUG_ON(dma_channel_active(state->dev->dma));
+       enable_dma(state->dev->dma);
 }
 
 static int icside_dma_setup(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = HWIF(drive);
+       struct icside_state *state = hwif->hwif_data;
        struct request *rq = hwif->hwgroup->rq;
        unsigned int dma_mode;
 
@@ -348,7 +350,7 @@ static int icside_dma_setup(ide_drive_t *drive)
        /*
         * We can not enable DMA on both channels.
         */
-       BUG_ON(dma_channel_active(hwif->hw.dma));
+       BUG_ON(dma_channel_active(state->dev->dma));
 
        icside_build_sglist(drive, rq);
 
@@ -365,14 +367,14 @@ static int icside_dma_setup(ide_drive_t *drive)
        /*
         * Select the correct timing for this drive.
         */
-       set_dma_speed(hwif->hw.dma, drive->drive_data);
+       set_dma_speed(state->dev->dma, drive->drive_data);
 
        /*
         * Tell the DMA engine about the SG table and
         * data direction.
         */
-       set_dma_sg(hwif->hw.dma, hwif->sg_table, hwif->sg_nents);
-       set_dma_mode(hwif->hw.dma, dma_mode);
+       set_dma_sg(state->dev->dma, hwif->sg_table, hwif->sg_nents);
+       set_dma_mode(state->dev->dma, dma_mode);
 
        drive->waiting_for_dma = 1;
 
@@ -438,40 +440,16 @@ static void icside_dma_init(ide_hwif_t *hwif)
 #define icside_dma_init(hwif)  (0)
 #endif
 
-static ide_hwif_t *icside_find_hwif(unsigned long dataport)
-{
-       ide_hwif_t *hwif;
-       int index;
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = &ide_hwifs[index];
-               if (hwif->io_ports[IDE_DATA_OFFSET] == dataport)
-                       goto found;
-       }
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = &ide_hwifs[index];
-               if (!hwif->io_ports[IDE_DATA_OFFSET])
-                       goto found;
-       }
-
-       hwif = NULL;
-found:
-       return hwif;
-}
-
 static ide_hwif_t *
 icside_setup(void __iomem *base, struct cardinfo *info, struct expansion_card *ec)
 {
        unsigned long port = (unsigned long)base + info->dataoffset;
        ide_hwif_t *hwif;
 
-       hwif = icside_find_hwif(port);
+       hwif = ide_find_port(port);
        if (hwif) {
                int i;
 
-               memset(&hwif->hw, 0, sizeof(hw_regs_t));
-
                /*
                 * Ensure we're using MMIO
                 */
@@ -479,13 +457,10 @@ icside_setup(void __iomem *base, struct cardinfo *info, struct expansion_card *e
                hwif->mmio = 1;
 
                for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
-                       hwif->hw.io_ports[i] = port;
                        hwif->io_ports[i] = port;
                        port += 1 << info->stepping;
                }
-               hwif->hw.io_ports[IDE_CONTROL_OFFSET] = (unsigned long)base + info->ctrloffset;
                hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)base + info->ctrloffset;
-               hwif->hw.irq  = ec->irq;
                hwif->irq     = ec->irq;
                hwif->noprobe = 0;
                hwif->chipset = ide_acorn;
@@ -500,6 +475,7 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
 {
        ide_hwif_t *hwif;
        void __iomem *base;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
        if (!base)
@@ -523,9 +499,9 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
 
        state->hwif[0] = hwif;
 
-       probe_hwif_init(hwif);
+       idx[0] = hwif->index;
 
-       ide_proc_register_port(hwif);
+       ide_device_add(idx);
 
        return 0;
 }
@@ -537,6 +513,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
        void __iomem *ioc_base, *easi_base;
        unsigned int sel = 0;
        int ret;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
        if (!ioc_base) {
@@ -592,7 +569,6 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
        hwif->serialized  = 1;
        hwif->config_data = (unsigned long)ioc_base;
        hwif->select_data = sel;
-       hwif->hw.dma      = ec->dma;
 
        mate->maskproc    = icside_maskproc;
        mate->channel     = 1;
@@ -601,18 +577,16 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
        mate->serialized  = 1;
        mate->config_data = (unsigned long)ioc_base;
        mate->select_data = sel | 1;
-       mate->hw.dma      = ec->dma;
 
        if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) {
                icside_dma_init(hwif);
                icside_dma_init(mate);
        }
 
-       probe_hwif_init(hwif);
-       probe_hwif_init(mate);
+       idx[0] = hwif->index;
+       idx[1] = mate->index;
 
-       ide_proc_register_port(hwif);
-       ide_proc_register_port(mate);
+       ide_device_add(idx);
 
        return 0;
 
index bce2bec81413eafa8f9358bb81efc3306ca7ad83..8957cbadf5c2a8c5870800a54ebd1d4b6eebae70 100644 (file)
@@ -31,5 +31,5 @@ void __init ide_arm_init(void)
        memset(&hw, 0, sizeof(hw));
        ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206);
        hw.irq = IDE_ARM_IRQ;
-       ide_register_hw(&hw, 1, NULL);
+       ide_register_hw(&hw, NULL, 1, NULL);
 }
index 83811af11610d91a371825ca5e937af6ec327927..0775a3afef4862d5e5b2b5646443cbcfdec1448c 100644 (file)
 
 #include <asm/ecard.h>
 
-/*
- * Something like this really should be in generic code, but isn't.
- */
 static ide_hwif_t *
 rapide_locate_hwif(void __iomem *base, void __iomem *ctrl, unsigned int sz, int irq)
 {
        unsigned long port = (unsigned long)base;
-       ide_hwif_t *hwif;
-       int index, i;
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = ide_hwifs + index;
-               if (hwif->io_ports[IDE_DATA_OFFSET] == port)
-                       goto found;
-       }
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = ide_hwifs + index;
-               if (hwif->io_ports[IDE_DATA_OFFSET] == 0)
-                       goto found;
-       }
+       ide_hwif_t *hwif = ide_find_port(port);
+       int i;
 
-       return NULL;
+       if (hwif == NULL)
+               goto out;
 
- found:
        for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
-               hwif->hw.io_ports[i] = port;
                hwif->io_ports[i] = port;
                port += sz;
        }
-       hwif->hw.io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl;
        hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl;
-       hwif->hw.irq = hwif->irq = irq;
+       hwif->irq = irq;
        hwif->mmio = 1;
        default_hwif_mmiops(hwif);
-
+out:
        return hwif;
 }
 
@@ -58,6 +41,7 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
        ide_hwif_t *hwif;
        void __iomem *base;
        int ret;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        ret = ecard_request_resources(ec);
        if (ret)
@@ -74,8 +58,11 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
                hwif->hwif_data = base;
                hwif->gendev.parent = &ec->dev;
                hwif->noprobe = 0;
-               probe_hwif_init(hwif);
-               ide_proc_register_port(hwif);
+
+               idx[0] = hwif->index;
+
+               ide_device_add(idx);
+
                ecard_set_drvdata(ec, hwif);
                goto out;
        }
index 9a96a10ba9d3a7f69573f117b59c34a95db3a220..ff20377b4c822d4a562929d7c8f122b17488d5f4 100644 (file)
@@ -782,7 +782,7 @@ init_e100_ide (void)
                                ide_offsets,
                                0, 0, cris_ide_ack_intr,
                                ide_default_irq(0));
-               ide_register_hw(&hw, 1, &hwif);
+               ide_register_hw(&hw, NULL, 1, &hwif);
                hwif->mmio = 1;
                hwif->chipset = ide_etrax100;
                hwif->set_pio_mode = &cris_set_pio_mode;
index 6d26ad7360d52c35dd01ab897dafe24b8fd2dacd..4a49b5c59acb3949fa87656814678956b7855e17 100644 (file)
@@ -68,7 +68,6 @@ static inline void hw_setup(hw_regs_t *hw)
                hw->io_ports[i] = CONFIG_H8300_IDE_BASE + H8300_IDE_GAP*i;
        hw->io_ports[IDE_CONTROL_OFFSET] = CONFIG_H8300_IDE_ALT;
        hw->irq = EXT_IRQ0 + CONFIG_H8300_IDE_IRQ;
-       hw->dma = NO_DMA;
        hw->chipset = ide_generic;
 }
 
@@ -101,7 +100,7 @@ void __init h8300_ide_init(void)
        hw_setup(&hw);
 
        /* register if */
-       idx = ide_register_hw(&hw, 1, &hwif);
+       idx = ide_register_hw(&hw, NULL, 1, &hwif);
        if (idx == -1) {
                printk(KERN_ERR "ide-h8300: IDE I/F register failed\n");
                return;
index 1d5f6823101c26c2e73980c6705878956e68be85..89df48fdc69d7b6109098153813524862fe4bff1 100644 (file)
@@ -350,7 +350,7 @@ static int taskfile_load_raw(ide_drive_t *drive,
 
        memset(&args, 0, sizeof(ide_task_t));
        args.command_type = IDE_DRIVE_TASK_NO_DATA;
-       args.data_phase   = TASKFILE_IN;
+       args.data_phase   = TASKFILE_NO_DATA;
        args.handler      = &task_no_data_intr;
 
        /* convert gtf to IDE Taskfile */
index ca843522f91dc914e26f656e5011116f5f2b5ca0..57a5f63d6ae3ed46be61de6660ddd4a96f9034d8 100644 (file)
  *                       Reformat to match kernel tabbing style.
  *                       Add CDROM_GET_UPC ioctl.
  * 3.10  Apr 10, 1996 -- Fix compilation error with STANDARD_ATAPI.
- * 3.11  Apr 29, 1996 -- Patch from Heiko Eissfeldt <heiko@colossus.escape.de>
+ * 3.11  Apr 29, 1996 -- Patch from Heiko Eißfeldt <heiko@colossus.escape.de>
  *                       to remove redundant verify_area calls.
  * 3.12  May  7, 1996 -- Rudimentary changer support.  Based on patches
  *                        from Gerhard Zuber <zuber@berlin.snafu.de>.
  *                     - Minimize the TOC reading - only do it when we
  *                       know a media change has occurred.
  *                     - Moved all the CDROMREADx ioctls to the Uniform layer.
- *                     - Heiko Eissfeldt <heiko@colossus.escape.de> supplied
+ *                     - Heiko Eißfeldt <heiko@colossus.escape.de> supplied
  *                       some fixes for CDI.
  *                     - CD-ROM leaving door locked fix from Andries
  *                       Brouwer <Andries.Brouwer@cwi.nl>
@@ -2341,7 +2341,7 @@ static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense)
                   If we get an error for the regular case, we assume
                   a CDI without additional audio tracks. In this case
                   the readable TOC is empty (CDI tracks are not included)
-                  and only holds the Leadout entry. Heiko Eißfeldt */
+                  and only holds the Leadout entry. Heiko Eißfeldt */
                ntracks = 0;
                stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0,
                                           (char *)&toc->hdr,
index 2722d9165b6bee75abfd066536deda80b0ce4707..00123d99527ab72c28ce29fd5d2f08b558211e78 100644 (file)
@@ -593,28 +593,12 @@ static int smart_enable(ide_drive_t *drive)
        return ide_raw_taskfile(drive, &args, NULL);
 }
 
-static int get_smart_values(ide_drive_t *drive, u8 *buf)
+static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd)
 {
        ide_task_t args;
 
        memset(&args, 0, sizeof(ide_task_t));
-       args.tfRegister[IDE_FEATURE_OFFSET]     = SMART_READ_VALUES;
-       args.tfRegister[IDE_NSECTOR_OFFSET]     = 0x01;
-       args.tfRegister[IDE_LCYL_OFFSET]        = SMART_LCYL_PASS;
-       args.tfRegister[IDE_HCYL_OFFSET]        = SMART_HCYL_PASS;
-       args.tfRegister[IDE_COMMAND_OFFSET]     = WIN_SMART;
-       args.command_type                       = IDE_DRIVE_TASK_IN;
-       args.data_phase                         = TASKFILE_IN;
-       args.handler                            = &task_in_intr;
-       (void) smart_enable(drive);
-       return ide_raw_taskfile(drive, &args, buf);
-}
-
-static int get_smart_thresholds(ide_drive_t *drive, u8 *buf)
-{
-       ide_task_t args;
-       memset(&args, 0, sizeof(ide_task_t));
-       args.tfRegister[IDE_FEATURE_OFFSET]     = SMART_READ_THRESHOLDS;
+       args.tfRegister[IDE_FEATURE_OFFSET]     = sub_cmd;
        args.tfRegister[IDE_NSECTOR_OFFSET]     = 0x01;
        args.tfRegister[IDE_LCYL_OFFSET]        = SMART_LCYL_PASS;
        args.tfRegister[IDE_HCYL_OFFSET]        = SMART_HCYL_PASS;
@@ -656,7 +640,7 @@ static int proc_idedisk_read_smart_thresholds
        ide_drive_t     *drive = (ide_drive_t *)data;
        int             len = 0, i = 0;
 
-       if (!get_smart_thresholds(drive, page)) {
+       if (get_smart_data(drive, page, SMART_READ_THRESHOLDS) == 0) {
                unsigned short *val = (unsigned short *) page;
                char *out = ((char *)val) + (SECTOR_WORDS * 4);
                page = out;
@@ -675,7 +659,7 @@ static int proc_idedisk_read_smart_values
        ide_drive_t     *drive = (ide_drive_t *)data;
        int             len = 0, i = 0;
 
-       if (!get_smart_values(drive, page)) {
+       if (get_smart_data(drive, page, SMART_READ_VALUES) == 0) {
                unsigned short *val = (unsigned short *) page;
                char *out = ((char *)val) + (SECTOR_WORDS * 4);
                page = out;
index 80b4f17f3941deeeb42c9791d1ff40e42ae62d30..428f7a8a00b628715d86d7f9c27007db33952d3d 100644 (file)
@@ -901,10 +901,7 @@ void ide_dma_timeout (ide_drive_t *drive)
 
 EXPORT_SYMBOL(ide_dma_timeout);
 
-/*
- * Needed for allowing full modular support of ide-driver
- */
-static int ide_release_dma_engine(ide_hwif_t *hwif)
+static void ide_release_dma_engine(ide_hwif_t *hwif)
 {
        if (hwif->dmatable_cpu) {
                pci_free_consistent(hwif->pci_dev,
@@ -913,7 +910,6 @@ static int ide_release_dma_engine(ide_hwif_t *hwif)
                                    hwif->dmatable_dma);
                hwif->dmatable_cpu = NULL;
        }
-       return 1;
 }
 
 static int ide_release_iomio_dma(ide_hwif_t *hwif)
@@ -956,12 +952,6 @@ static int ide_mapped_mmio_dma(ide_hwif_t *hwif, unsigned long base, unsigned in
 {
        printk(KERN_INFO "    %s: MMIO-DMA ", hwif->name);
 
-       hwif->dma_base = base;
-
-       if(hwif->mate)
-               hwif->dma_master = (hwif->channel) ? hwif->mate->dma_base : base;
-       else
-               hwif->dma_master = base;
        return 0;
 }
 
@@ -975,8 +965,6 @@ static int ide_iomio_dma(ide_hwif_t *hwif, unsigned long base, unsigned int port
                return 1;
        }
 
-       hwif->dma_base = base;
-
        if (hwif->cds->extra) {
                hwif->extra_base = base + (hwif->channel ? 8 : 16);
 
@@ -991,10 +979,6 @@ static int ide_iomio_dma(ide_hwif_t *hwif, unsigned long base, unsigned int port
                }
        }
 
-       if(hwif->mate)
-               hwif->dma_master = (hwif->channel) ? hwif->mate->dma_base:base;
-       else
-               hwif->dma_master = base;
        return 0;
 }
 
@@ -1006,12 +990,9 @@ static int ide_dma_iobase(ide_hwif_t *hwif, unsigned long base, unsigned int por
        return ide_iomio_dma(hwif, base, ports);
 }
 
-/*
- * This can be called for a dynamically installed interface. Don't __init it
- */
-void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_ports)
+void ide_setup_dma(ide_hwif_t *hwif, unsigned long base, unsigned num_ports)
 {
-       if (ide_dma_iobase(hwif, dma_base, num_ports))
+       if (ide_dma_iobase(hwif, base, num_ports))
                return;
 
        if (ide_allocate_dma_engine(hwif)) {
@@ -1019,6 +1000,13 @@ void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_p
                return;
        }
 
+       hwif->dma_base = base;
+
+       if (hwif->mate)
+               hwif->dma_master = hwif->channel ? hwif->mate->dma_base : base;
+       else
+               hwif->dma_master = base;
+
        if (!(hwif->dma_command))
                hwif->dma_command       = hwif->dma_base;
        if (!(hwif->dma_vendor1))
index 32eaa3f8051592f4ecb132ccaa08fb8ced966d60..c89f0d3058e934767bc1c2a3b8b7e2231b43a587 100644 (file)
@@ -55,7 +55,7 @@
 #include <asm/io.h>
 
 static int __ide_end_request(ide_drive_t *drive, struct request *rq,
-                            int uptodate, unsigned int nr_bytes)
+                            int uptodate, unsigned int nr_bytes, int dequeue)
 {
        int ret = 1;
 
@@ -80,9 +80,11 @@ static int __ide_end_request(ide_drive_t *drive, struct request *rq,
 
        if (!end_that_request_chunk(rq, uptodate, nr_bytes)) {
                add_disk_randomness(rq->rq_disk);
-               if (!list_empty(&rq->queuelist))
-                       blkdev_dequeue_request(rq);
-               HWGROUP(drive)->rq = NULL;
+               if (dequeue) {
+                       if (!list_empty(&rq->queuelist))
+                               blkdev_dequeue_request(rq);
+                       HWGROUP(drive)->rq = NULL;
+               }
                end_that_request_last(rq, uptodate);
                ret = 0;
        }
@@ -122,7 +124,7 @@ int ide_end_request (ide_drive_t *drive, int uptodate, int nr_sectors)
                        nr_bytes = rq->hard_cur_sectors << 9;
        }
 
-       ret = __ide_end_request(drive, rq, uptodate, nr_bytes);
+       ret = __ide_end_request(drive, rq, uptodate, nr_bytes, 1);
 
        spin_unlock_irqrestore(&ide_lock, flags);
        return ret;
@@ -255,39 +257,13 @@ int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq,
                             int uptodate, int nr_sectors)
 {
        unsigned long flags;
-       int ret = 1;
+       int ret;
 
        spin_lock_irqsave(&ide_lock, flags);
-
        BUG_ON(!blk_rq_started(rq));
-
-       /*
-        * if failfast is set on a request, override number of sectors and
-        * complete the whole request right now
-        */
-       if (blk_noretry_request(rq) && end_io_error(uptodate))
-               nr_sectors = rq->hard_nr_sectors;
-
-       if (!blk_fs_request(rq) && end_io_error(uptodate) && !rq->errors)
-               rq->errors = -EIO;
-
-       /*
-        * decide whether to reenable DMA -- 3 is a random magic for now,
-        * if we DMA timeout more than 3 times, just stay in PIO
-        */
-       if (drive->state == DMA_PIO_RETRY && drive->retry_pio <= 3) {
-               drive->state = 0;
-               HWGROUP(drive)->hwif->ide_dma_on(drive);
-       }
-
-       if (!end_that_request_first(rq, uptodate, nr_sectors)) {
-               add_disk_randomness(rq->rq_disk);
-               if (blk_rq_tagged(rq))
-                       blk_queue_end_tag(drive->queue, rq);
-               end_that_request_last(rq, uptodate);
-               ret = 0;
-       }
+       ret = __ide_end_request(drive, rq, uptodate, nr_sectors << 9, 0);
        spin_unlock_irqrestore(&ide_lock, flags);
+
        return ret;
 }
 EXPORT_SYMBOL_GPL(ide_end_dequeued_request);
@@ -800,7 +776,20 @@ static ide_startstop_t do_special (ide_drive_t *drive)
                s->b.set_tune = 0;
 
                if (set_pio_mode_abuse(drive->hwif, req_pio)) {
-                       if (hwif->set_pio_mode)
+
+                       if (hwif->set_pio_mode == NULL)
+                               return ide_stopped;
+
+                       /*
+                        * take ide_lock for drive->[no_]unmask/[no_]io_32bit
+                        */
+                       if (req_pio == 8 || req_pio == 9) {
+                               unsigned long flags;
+
+                               spin_lock_irqsave(&ide_lock, flags);
+                               hwif->set_pio_mode(drive, req_pio);
+                               spin_unlock_irqrestore(&ide_lock, flags);
+                       } else
                                hwif->set_pio_mode(drive, req_pio);
                } else {
                        int keep_dma = drive->using_dma;
index d4d790f91f91afc7e7156b442143caa46d32f932..95168833d0691a82c896197a7a4d01beae361479 100644 (file)
@@ -693,35 +693,16 @@ static u8 ide_auto_reduce_xfer (ide_drive_t *drive)
 }
 #endif /* CONFIG_BLK_DEV_IDEDMA */
 
-/*
- * Update the 
- */
-int ide_driveid_update (ide_drive_t *drive)
+int ide_driveid_update(ide_drive_t *drive)
 {
-       ide_hwif_t *hwif        = HWIF(drive);
+       ide_hwif_t *hwif = drive->hwif;
        struct hd_driveid *id;
-#if 0
-       id = kmalloc(SECTOR_WORDS*4, GFP_ATOMIC);
-       if (!id)
-               return 0;
-
-       taskfile_lib_get_identify(drive, (char *)&id);
+       unsigned long timeout, flags;
 
-       ide_fix_driveid(id);
-       if (id) {
-               drive->id->dma_ultra = id->dma_ultra;
-               drive->id->dma_mword = id->dma_mword;
-               drive->id->dma_1word = id->dma_1word;
-               /* anything more ? */
-               kfree(id);
-       }
-       return 1;
-#else
        /*
         * Re-read drive->id for possible DMA mode
         * change (copied from ide-probe.c)
         */
-       unsigned long timeout, flags;
 
        SELECT_MASK(drive, 1);
        if (IDE_CONTROL_REG)
@@ -763,7 +744,6 @@ int ide_driveid_update (ide_drive_t *drive)
        }
 
        return 1;
-#endif
 }
 
 int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
index 2b8009c50e91363c1316c3a8bbfad6208e823942..e245521af7b55d3aa9ae97c381c2234213183179 100644 (file)
@@ -40,9 +40,8 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
        ide_std_init_ports(&hw, pnp_port_start(dev, 0),
                                pnp_port_start(dev, 1));
        hw.irq = pnp_irq(dev, 0);
-       hw.dma = NO_DMA;
 
-       index = ide_register_hw(&hw, 1, &hwif);
+       index = ide_register_hw(&hw, NULL, 1, &hwif);
 
        if (index != -1) {
                printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
index e294c7415c27aa048e9a734f3f4736f304e87483..d5146c57e5b3151e33bcb0defc4496d25bcef674 100644 (file)
@@ -717,7 +717,7 @@ EXPORT_SYMBOL_GPL(ide_undecoded_slave);
  * This routine only knows how to look for drive units 0 and 1
  * on an interface, so any setting of MAX_DRIVES > 2 won't work here.
  */
-static void probe_hwif(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif))
+static void probe_hwif(ide_hwif_t *hwif)
 {
        unsigned long flags;
        unsigned int irqd;
@@ -819,8 +819,8 @@ static void probe_hwif(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif))
                return;
        }
 
-       if (fixup)
-               fixup(hwif);
+       if (hwif->fixup)
+               hwif->fixup(hwif);
 
        for (unit = 0; unit < MAX_DRIVES; ++unit) {
                ide_drive_t *drive = &hwif->drives[unit];
@@ -859,10 +859,11 @@ static void probe_hwif(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif))
 }
 
 static int hwif_init(ide_hwif_t *hwif);
+static void hwif_register_devices(ide_hwif_t *hwif);
 
-int probe_hwif_init_with_fixup(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif))
+static int probe_hwif_init(ide_hwif_t *hwif)
 {
-       probe_hwif(hwif, fixup);
+       probe_hwif(hwif);
 
        if (!hwif_init(hwif)) {
                printk(KERN_INFO "%s: failed to initialize IDE interface\n",
@@ -870,34 +871,12 @@ int probe_hwif_init_with_fixup(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif)
                return -1;
        }
 
-       if (hwif->present) {
-               u16 unit = 0;
-               int ret;
+       if (hwif->present)
+               hwif_register_devices(hwif);
 
-               for (unit = 0; unit < MAX_DRIVES; ++unit) {
-                       ide_drive_t *drive = &hwif->drives[unit];
-                       /* For now don't attach absent drives, we may
-                          want them on default or a new "empty" class
-                          for hotplug reprobing ? */
-                       if (drive->present) {
-                               ret = device_register(&drive->gendev);
-                               if (ret < 0)
-                                       printk(KERN_WARNING "IDE: %s: "
-                                               "device_register error: %d\n",
-                                               __FUNCTION__, ret);
-                       }
-               }
-       }
        return 0;
 }
 
-int probe_hwif_init(ide_hwif_t *hwif)
-{
-       return probe_hwif_init_with_fixup(hwif, NULL);
-}
-
-EXPORT_SYMBOL(probe_hwif_init);
-
 #if MAX_HWIFS > 1
 /*
  * save_match() is used to simplify logic in init_irq() below.
@@ -1379,6 +1358,24 @@ out:
        return 0;
 }
 
+static void hwif_register_devices(ide_hwif_t *hwif)
+{
+       unsigned int i;
+
+       for (i = 0; i < MAX_DRIVES; i++) {
+               ide_drive_t *drive = &hwif->drives[i];
+
+               if (drive->present) {
+                       int ret = device_register(&drive->gendev);
+
+                       if (ret < 0)
+                               printk(KERN_WARNING "IDE: %s: "
+                                       "device_register error: %d\n",
+                                       __FUNCTION__, ret);
+               }
+       }
+}
+
 int ideprobe_init (void)
 {
        unsigned int index;
@@ -1390,27 +1387,18 @@ int ideprobe_init (void)
 
        for (index = 0; index < MAX_HWIFS; ++index)
                if (probe[index])
-                       probe_hwif(&ide_hwifs[index], NULL);
+                       probe_hwif(&ide_hwifs[index]);
        for (index = 0; index < MAX_HWIFS; ++index)
                if (probe[index])
                        hwif_init(&ide_hwifs[index]);
        for (index = 0; index < MAX_HWIFS; ++index) {
                if (probe[index]) {
                        ide_hwif_t *hwif = &ide_hwifs[index];
-                       int unit;
                        if (!hwif->present)
                                continue;
                        if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced)
                                hwif->chipset = ide_generic;
-                       for (unit = 0; unit < MAX_DRIVES; ++unit)
-                               if (hwif->drives[unit].present) {
-                                       int ret = device_register(
-                                               &hwif->drives[unit].gendev);
-                                       if (ret < 0)
-                                               printk(KERN_WARNING "IDE: %s: "
-                                                       "device_register error: %d\n",
-                                                       __FUNCTION__, ret);
-                               }
+                       hwif_register_devices(hwif);
                }
        }
        for (index = 0; index < MAX_HWIFS; ++index)
@@ -1420,3 +1408,22 @@ int ideprobe_init (void)
 }
 
 EXPORT_SYMBOL_GPL(ideprobe_init);
+
+int ide_device_add(u8 idx[4])
+{
+       int i, rc = 0;
+
+       for (i = 0; i < 4; i++) {
+               if (idx[i] != 0xff)
+                       rc |= probe_hwif_init(&ide_hwifs[idx[i]]);
+       }
+
+       for (i = 0; i < 4; i++) {
+               if (idx[i] != 0xff)
+                       ide_proc_register_port(&ide_hwifs[idx[i]]);
+       }
+
+       return rc;
+}
+
+EXPORT_SYMBOL_GPL(ide_device_add);
index fc1d8ae6a80381d08937faf4dc5d2fd687d33c7c..a4007d30da520c091491f4ca6e9923b9cc83d232 100644 (file)
@@ -804,8 +804,6 @@ void ide_proc_register_port(ide_hwif_t *hwif)
        create_proc_ide_drives(hwif);
 }
 
-EXPORT_SYMBOL_GPL(ide_proc_register_port);
-
 #ifdef CONFIG_BLK_DEV_IDEPCI
 void ide_pci_create_host_proc(const char *name, get_info_t *get_info)
 {
index 1fa57947bca0777a3b173aa8011edfb251edded3..7b9181b5469d3be9d3e8e0929c5a0c2d4122c8d5 100644 (file)
@@ -565,7 +565,7 @@ typedef struct os_dat_s {
  *     The following parameter is used to select the point in the internal
  *     tape fifo in which we will start to refill the buffer. Decreasing
  *     the following parameter will improve the system's latency and
- *     interactive response, while using a high value might improve sytem
+ *     interactive response, while using a high value might improve system
  *     throughput.
  */
 #define IDETAPE_FIFO_THRESHOLD                 2
@@ -621,7 +621,6 @@ typedef struct os_dat_s {
  */
 #define USE_IOTRACE    0
 #if USE_IOTRACE
-#include <linux/io_trace.h>
 #define IO_IDETAPE_FIFO        500
 #endif
 
index 2a3c8d498343ff417f398d1fb4b93e8678dbf82f..73ef6bf5fbcc51470f6638f81766c63cd86b755d 100644 (file)
@@ -8,23 +8,6 @@
  *  Copyright (C) 2003-2004    Bartlomiej Zolnierkiewicz
  *
  *  The big the bad and the ugly.
- *
- *  Problems to be fixed because of BH interface or the lack therefore.
- *
- *  Fill me in stupid !!!
- *
- *  HOST:
- *     General refers to the Controller and Driver "pair".
- *  DATA HANDLER:
- *     Under the context of Linux it generally refers to an interrupt handler.
- *     However, it correctly describes the 'HOST'
- *  DATA BLOCK:
- *     The amount of data needed to be transfered as predefined in the
- *     setup of the device.
- *  STORAGE ATOMIC:
- *     The 'DATA BLOCK' associated to the 'DATA HANDLER', and can be as
- *     small as a single sector or as large as the entire command block
- *     request.
  */
 
 #include <linux/module.h>
@@ -695,9 +678,6 @@ int ide_wait_cmd (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors,
        return ide_do_drive_cmd(drive, &rq, ide_wait);
 }
 
-/*
- * FIXME : this needs to map into at taskfile. <andre@linux-ide.org>
- */
 int ide_cmd_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
 {
        int err = 0;
@@ -761,9 +741,6 @@ static int ide_wait_cmd_task(ide_drive_t *drive, u8 *buf)
        return ide_do_drive_cmd(drive, &rq, ide_wait);
 }
 
-/*
- * FIXME : this needs to map into at taskfile. <andre@linux-ide.org>
- */
 int ide_task_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
 {
        void __user *p = (void __user *)arg;
@@ -860,9 +837,14 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task)
                case TASKFILE_OUT_DMA:
                case TASKFILE_IN_DMAQ:
                case TASKFILE_IN_DMA:
-                       hwif->dma_setup(drive);
-                       hwif->dma_exec_cmd(drive, taskfile->command);
-                       hwif->dma_start(drive);
+                       if (!drive->using_dma)
+                               break;
+
+                       if (!hwif->dma_setup(drive)) {
+                               hwif->dma_exec_cmd(drive, taskfile->command);
+                               hwif->dma_start(drive);
+                               return ide_started;
+                       }
                        break;
 
                default:
@@ -876,7 +858,8 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task)
                                return task->prehandler(drive, task->rq);
                        }
                        ide_execute_command(drive, taskfile->command, task->handler, WAIT_WORSTCASE, NULL);
+                       return ide_started;
        }
 
-       return ide_started;
+       return ide_stopped;
 }
index 961e6c897286e7a1245d7c56ba3eda2420374761..674a65c1a1308986743237c46792a6c7661d1c7c 100644 (file)
@@ -168,7 +168,6 @@ static void init_hwif_default(ide_hwif_t *hwif, unsigned int index)
 
        ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, &hwif->irq);
 
-       memcpy(&hwif->hw, &hw, sizeof(hw));
        memcpy(hwif->io_ports, hw.io_ports, sizeof(hw.io_ports));
 
        hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET];
@@ -214,7 +213,7 @@ static void __init init_ide_data (void)
                init_hwif_data(hwif, index);
                init_hwif_default(hwif, index);
 #if !defined(CONFIG_PPC32) || !defined(CONFIG_PCI)
-               hwif->irq = hwif->hw.irq =
+               hwif->irq =
                        ide_init_default_irq(hwif->io_ports[IDE_DATA_OFFSET]);
 #endif
        }
@@ -265,6 +264,30 @@ static int ide_system_bus_speed(void)
        return system_bus_speed;
 }
 
+ide_hwif_t * ide_find_port(unsigned long base)
+{
+       ide_hwif_t *hwif;
+       int i;
+
+       for (i = 0; i < MAX_HWIFS; i++) {
+               hwif = &ide_hwifs[i];
+               if (hwif->io_ports[IDE_DATA_OFFSET] == base)
+                       goto found;
+       }
+
+       for (i = 0; i < MAX_HWIFS; i++) {
+               hwif = &ide_hwifs[i];
+               if (hwif->io_ports[IDE_DATA_OFFSET] == 0)
+                       goto found;
+       }
+
+       hwif = NULL;
+found:
+       return hwif;
+}
+
+EXPORT_SYMBOL_GPL(ide_find_port);
+
 static struct resource* hwif_request_region(ide_hwif_t *hwif,
                                            unsigned long addr, int num)
 {
@@ -391,6 +414,8 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif)
        hwif->cds                       = tmp_hwif->cds;
 #endif
 
+       hwif->fixup                     = tmp_hwif->fixup;
+
        hwif->set_pio_mode              = tmp_hwif->set_pio_mode;
        hwif->set_dma_mode              = tmp_hwif->set_dma_mode;
        hwif->mdma_filter               = tmp_hwif->mdma_filter;
@@ -652,7 +677,6 @@ void ide_setup_ports (      hw_regs_t *hw,
                }
        }
        hw->irq = irq;
-       hw->dma = NO_DMA;
        hw->ack_intr = ack_intr;
 /*
  *     hw->iops = iops;
@@ -660,11 +684,11 @@ void ide_setup_ports (    hw_regs_t *hw,
 }
 
 /**
- *     ide_register_hw_with_fixup      -       register IDE interface
+ *     ide_register_hw         -       register IDE interface
  *     @hw: hardware registers
+ *     @fixup: fixup function
  *     @initializing: set while initializing built-in drivers
  *     @hwifp: pointer to returned hwif
- *     @fixup: fixup function
  *
  *     Register an IDE interface, specifying exactly the registers etc.
  *     Set init=1 iff calling before probes have taken place.
@@ -672,9 +696,8 @@ void ide_setup_ports (      hw_regs_t *hw,
  *     Returns -1 on error.
  */
 
-int ide_register_hw_with_fixup(hw_regs_t *hw, int initializing,
-                              ide_hwif_t **hwifp,
-                              void(*fixup)(ide_hwif_t *hwif))
+int ide_register_hw(hw_regs_t *hw, void (*fixup)(ide_hwif_t *),
+                   int initializing, ide_hwif_t **hwifp)
 {
        int index, retry = 1;
        ide_hwif_t *hwif;
@@ -682,7 +705,7 @@ int ide_register_hw_with_fixup(hw_regs_t *hw, int initializing,
        do {
                for (index = 0; index < MAX_HWIFS; ++index) {
                        hwif = &ide_hwifs[index];
-                       if (hwif->hw.io_ports[IDE_DATA_OFFSET] == hw->io_ports[IDE_DATA_OFFSET])
+                       if (hwif->io_ports[IDE_DATA_OFFSET] == hw->io_ports[IDE_DATA_OFFSET])
                                goto found;
                }
                for (index = 0; index < MAX_HWIFS; ++index) {
@@ -690,7 +713,7 @@ int ide_register_hw_with_fixup(hw_regs_t *hw, int initializing,
                        if (hwif->hold)
                                continue;
                        if ((!hwif->present && !hwif->mate && !initializing) ||
-                           (!hwif->hw.io_ports[IDE_DATA_OFFSET] && initializing))
+                           (!hwif->io_ports[IDE_DATA_OFFSET] && initializing))
                                goto found;
                }
                for (index = 0; index < MAX_HWIFS; index++)
@@ -706,16 +729,18 @@ found:
        }
        if (hwif->present)
                return -1;
-       memcpy(&hwif->hw, hw, sizeof(*hw));
-       memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports));
+       memcpy(hwif->io_ports, hw->io_ports, sizeof(hwif->io_ports));
        hwif->irq = hw->irq;
        hwif->noprobe = 0;
+       hwif->fixup = fixup;
        hwif->chipset = hw->chipset;
        hwif->gendev.parent = hw->dev;
+       hwif->ack_intr = hw->ack_intr;
+
+       if (initializing == 0) {
+               u8 idx[4] = { index, 0xff, 0xff, 0xff };
 
-       if (!initializing) {
-               probe_hwif_init_with_fixup(hwif, fixup);
-               ide_proc_register_port(hwif);
+               ide_device_add(idx);
        }
 
        if (hwifp)
@@ -724,13 +749,6 @@ found:
        return (initializing || hwif->present) ? index : -1;
 }
 
-EXPORT_SYMBOL(ide_register_hw_with_fixup);
-
-int ide_register_hw(hw_regs_t *hw, int initializing, ide_hwif_t **hwifp)
-{
-       return ide_register_hw_with_fixup(hw, initializing, hwifp, NULL);
-}
-
 EXPORT_SYMBOL(ide_register_hw);
 
 /*
@@ -1046,7 +1064,7 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
                        ide_init_hwif_ports(&hw, (unsigned long) args[0],
                                            (unsigned long) args[1], NULL);
                        hw.irq = args[2];
-                       if (ide_register_hw(&hw, 0, NULL) == -1)
+                       if (ide_register_hw(&hw, NULL, 0, NULL) == -1)
                                return -EIO;
                        return 0;
                }
@@ -1397,6 +1415,9 @@ static int __init ide_setup(char *s)
                        "reset", "minus6", "ata66", "minus8", "minus9",
                        "minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb",
                        "dtc2278", "umc8672", "ali14xx", NULL };
+
+               hw_regs_t hwregs;
+
                hw = s[3] - '0';
                hwif = &ide_hwifs[hw];
                i = match_parm(&s[4], ide_words, vals, 3);
@@ -1506,9 +1527,9 @@ static int __init ide_setup(char *s)
                        case 2: /* base,ctl */
                                vals[2] = 0;    /* default irq = probe for it */
                        case 3: /* base,ctl,irq */
-                               hwif->hw.irq = vals[2];
-                               ide_init_hwif_ports(&hwif->hw, (unsigned long) vals[0], (unsigned long) vals[1], &hwif->irq);
-                               memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
+                               memset(&hwregs, 0, sizeof(hwregs));
+                               ide_init_hwif_ports(&hwregs, vals[0], vals[1], &hwif->irq);
+                               memcpy(hwif->io_ports, hwregs.io_ports, sizeof(hwif->io_ports));
                                hwif->irq      = vals[2];
                                hwif->noprobe  = 0;
                                hwif->chipset  = ide_forced;
index 2f0ef9b440335d9e1f6654c54424a4faa30b145a..10311ecc674a4440511de0b4b27d0601d3718a45 100644 (file)
@@ -102,6 +102,8 @@ static void outReg (u8 data, u8 reg)
        outb_p(data, dataPort);
 }
 
+static DEFINE_SPINLOCK(ali14xx_lock);
+
 /*
  * Set PIO mode for the specified drive.
  * This function computes timing parameters
@@ -129,14 +131,14 @@ static void ali14xx_set_pio_mode(ide_drive_t *drive, const u8 pio)
 
        /* stuff timing parameters into controller registers */
        driveNum = (HWIF(drive)->index << 1) + drive->select.b.unit;
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&ali14xx_lock, flags);
        outb_p(regOn, basePort);
        outReg(param1, regTab[driveNum].reg1);
        outReg(param2, regTab[driveNum].reg2);
        outReg(param3, regTab[driveNum].reg3);
        outReg(param4, regTab[driveNum].reg4);
        outb_p(regOff, basePort);
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&ali14xx_lock, flags);
 }
 
 /*
@@ -193,6 +195,7 @@ static int __init initRegisters (void) {
 static int __init ali14xx_probe(void)
 {
        ide_hwif_t *hwif, *mate;
+       static u8 idx[4] = { 0, 1, 0xff, 0xff };
 
        printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n",
                          basePort, regOn);
@@ -217,11 +220,7 @@ static int __init ali14xx_probe(void)
        mate->mate = hwif;
        mate->channel = 1;
 
-       probe_hwif_init(hwif);
-       probe_hwif_init(mate);
-
-       ide_proc_register_port(hwif);
-       ide_proc_register_port(mate);
+       ide_device_add(idx);
 
        return 0;
 }
index 101aee1711c489c7985bc1d730e3ca6fb1452c29..4a0be251a05fd84ddaa606c2b1161c2c99d93a59 100644 (file)
@@ -212,8 +212,8 @@ fail_base2:
 //                                             xsurf_iops,
                                                IRQ_AMIGA_PORTS);
                        }       
-                       
-                       index = ide_register_hw(&hw, 1, &hwif);
+
+                       index = ide_register_hw(&hw, NULL, 1, &hwif);
                        if (index != -1) {
                                hwif->mmio = 1;
                                printk("ide%d: ", index);
index f165212548673729f412bbfb031aea67ba20c49c..24a845d45bd29b369001979b9b24cede2c6bda05 100644 (file)
@@ -67,20 +67,24 @@ static void sub22 (char b, char c)
        }
 }
 
+static DEFINE_SPINLOCK(dtc2278_lock);
+
 static void dtc2278_set_pio_mode(ide_drive_t *drive, const u8 pio)
 {
        unsigned long flags;
 
        if (pio >= 3) {
-               spin_lock_irqsave(&ide_lock, flags);
+               spin_lock_irqsave(&dtc2278_lock, flags);
                /*
                 * This enables PIO mode4 (3?) on the first interface
                 */
                sub22(1,0xc3);
                sub22(0,0xa0);
-               spin_unlock_irqrestore(&ide_lock, flags);
+               spin_unlock_irqrestore(&dtc2278_lock, flags);
        } else {
                /* we don't know how to set it back again.. */
+               /* Actually we do - there is a data sheet available for the
+                  Winbond but does anyone actually care */
        }
 
        /*
@@ -94,6 +98,7 @@ static int __init dtc2278_probe(void)
 {
        unsigned long flags;
        ide_hwif_t *hwif, *mate;
+       static u8 idx[4] = { 0, 1, 0xff, 0xff };
 
        hwif = &ide_hwifs[0];
        mate = &ide_hwifs[1];
@@ -129,16 +134,13 @@ static int __init dtc2278_probe(void)
 
        mate->serialized = 1;
        mate->chipset = ide_dtc2278;
+       mate->pio_mask = ATA_PIO4;
        mate->drives[0].no_unmask = 1;
        mate->drives[1].no_unmask = 1;
        mate->mate = hwif;
        mate->channel = 1;
 
-       probe_hwif_init(hwif);
-       probe_hwif_init(mate);
-
-       ide_proc_register_port(hwif);
-       ide_proc_register_port(mate);
+       ide_device_add(idx);
 
        return 0;
 }
index f0829b83e970db20c5f7a500eee860bf1aa484a2..7d7936f1b9007b06c50bfe477f1171ef49a33150 100644 (file)
@@ -72,7 +72,7 @@ void __init falconide_init(void)
                        0, 0, NULL,
 //                     falconide_iops,
                        IRQ_MFP_IDE);
-       index = ide_register_hw(&hw, 1, NULL);
+       index = ide_register_hw(&hw, NULL, 1, NULL);
 
        if (index != -1)
            printk("ide%d: Falcon IDE interface\n", index);
index 0830a021bbb609d4b103dc037239a0f2ec5bc934..53331ee1e957c9a71c651a2eeb3c5ae2aaa191bf 100644 (file)
@@ -165,7 +165,7 @@ found:
 //                     &gayle_iops,
                        IRQ_AMIGA_PORTS);
 
-       index = ide_register_hw(&hw, 1, &hwif);
+       index = ide_register_hw(&hw, NULL, 1, &hwif);
        if (index != -1) {
            hwif->mmio = 1;
            switch (i) {
index 2e5a9cc5c0f7ab1a48a2b26bef35ca12922f4837..a4245d13f11b83d2dced3d1f82d33f0caa6c34e7 100644 (file)
@@ -247,6 +247,8 @@ static u8 ht_pio2timings(ide_drive_t *drive, const u8 pio)
        }
 }
 
+static DEFINE_SPINLOCK(ht6560b_lock);
+
 /*
  *  Enable/Disable so called prefetch mode
  */
@@ -254,9 +256,9 @@ static void ht_set_prefetch(ide_drive_t *drive, u8 state)
 {
        unsigned long flags;
        int t = HT_PREFETCH_MODE << 8;
-       
-       spin_lock_irqsave(&ide_lock, flags);
-       
+
+       spin_lock_irqsave(&ht6560b_lock, flags);
+
        /*
         *  Prefetch mode and unmask irq seems to conflict
         */
@@ -268,9 +270,9 @@ static void ht_set_prefetch(ide_drive_t *drive, u8 state)
                drive->drive_data &= ~t;  /* disable prefetch mode */
                drive->no_unmask = 0;
        }
-       
-       spin_unlock_irqrestore(&ide_lock, flags);
-       
+
+       spin_unlock_irqrestore(&ht6560b_lock, flags);
+
 #ifdef DEBUG
        printk("ht6560b: drive %s prefetch mode %sabled\n", drive->name, (state ? "en" : "dis"));
 #endif
@@ -287,16 +289,14 @@ static void ht6560b_set_pio_mode(ide_drive_t *drive, const u8 pio)
                ht_set_prefetch(drive, pio & 1);
                return;
        }
-       
+
        timing = ht_pio2timings(drive, pio);
-       
-       spin_lock_irqsave(&ide_lock, flags);
-       
+
+       spin_lock_irqsave(&ht6560b_lock, flags);
        drive->drive_data &= 0xff00;
        drive->drive_data |= timing;
-       
-       spin_unlock_irqrestore(&ide_lock, flags);
-       
+       spin_unlock_irqrestore(&ht6560b_lock, flags);
+
 #ifdef DEBUG
        printk("ht6560b: drive %s tuned to pio mode %#x timing=%#x\n", drive->name, pio, timing);
 #endif
@@ -311,6 +311,7 @@ MODULE_PARM_DESC(probe, "probe for HT6560B chipset");
 int __init ht6560b_init(void)
 {
        ide_hwif_t *hwif, *mate;
+       static u8 idx[4] = { 0, 1, 0xff, 0xff };
        int t;
 
        if (probe_ht6560b == 0)
@@ -359,11 +360,7 @@ int __init ht6560b_init(void)
        mate->drives[0].drive_data = t;
        mate->drives[1].drive_data = t;
 
-       probe_hwif_init(hwif);
-       probe_hwif_init(mate);
-
-       ide_proc_register_port(hwif);
-       ide_proc_register_port(mate);
+       ide_device_add(idx);
 
        return 0;
 
index e8e360c2619d1eea7365ae2bd5645716834c97f5..03715c05866408b1d14773e365d265d74b7194c4 100644 (file)
@@ -153,7 +153,7 @@ static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq
     hw.irq = irq;
     hw.chipset = ide_pci;
     hw.dev = &handle->dev;
-    return ide_register_hw_with_fixup(&hw, 0, NULL, ide_undecoded_slave);
+    return ide_register_hw(&hw, &ide_undecoded_slave, 0, NULL);
 }
 
 /*======================================================================
index b992b2b91fe2ba684dadbc7345ffb96d4161f8bc..7bb79f53dac804e708ef6a49e110804d903f993d 100644 (file)
@@ -33,39 +33,24 @@ static ide_hwif_t *__devinit plat_ide_locate_hwif(void __iomem *base,
            int mmio)
 {
        unsigned long port = (unsigned long)base;
-       ide_hwif_t *hwif;
-       int index, i;
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = ide_hwifs + index;
-               if (hwif->io_ports[IDE_DATA_OFFSET] == port)
-                       goto found;
-       }
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = ide_hwifs + index;
-               if (hwif->io_ports[IDE_DATA_OFFSET] == 0)
-                       goto found;
-       }
+       ide_hwif_t *hwif = ide_find_port(port);
+       int i;
 
-       return NULL;
-
-found:
+       if (hwif == NULL)
+               goto out;
 
-       hwif->hw.io_ports[IDE_DATA_OFFSET] = port;
+       hwif->io_ports[IDE_DATA_OFFSET] = port;
 
        port += (1 << pdata->ioport_shift);
        for (i = IDE_ERROR_OFFSET; i <= IDE_STATUS_OFFSET;
             i++, port += (1 << pdata->ioport_shift))
-               hwif->hw.io_ports[i] = port;
+               hwif->io_ports[i] = port;
 
-       hwif->hw.io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl;
+       hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl;
 
-       memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports));
-       hwif->hw.irq = hwif->irq = irq;
+       hwif->irq = irq;
 
-       hwif->hw.dma = NO_DMA;
-       hwif->chipset = hwif->hw.chipset = ide_generic;
+       hwif->chipset = ide_generic;
 
        if (mmio) {
                hwif->mmio = 1;
@@ -73,8 +58,8 @@ found:
        }
 
        hwif_prop.hwif = hwif;
-       hwif_prop.index = index;
-
+       hwif_prop.index = hwif->index;
+out:
        return hwif;
 }
 
@@ -83,6 +68,7 @@ static int __devinit plat_ide_probe(struct platform_device *pdev)
        struct resource *res_base, *res_alt, *res_irq;
        ide_hwif_t *hwif;
        struct pata_platform_info *pdata;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
        int ret = 0;
        int mmio = 0;
 
@@ -130,10 +116,11 @@ static int __devinit plat_ide_probe(struct platform_device *pdev)
        hwif->gendev.parent = &pdev->dev;
        hwif->noprobe = 0;
 
-       probe_hwif_init(hwif);
+       idx[0] = hwif->index;
+
+       ide_device_add(idx);
 
        platform_set_drvdata(pdev, hwif);
-       ide_proc_register_port(hwif);
 
        return 0;
 
index b557c45a5a9dc614e7aa556e07554f5b3623457a..e87cd2f16430a6555e4f7e88fca5ee1e17d0e3e0 100644 (file)
@@ -93,21 +93,21 @@ void macide_init(void)
                                0, 0, macide_ack_intr,
 //                             quadra_ide_iops,
                                IRQ_NUBUS_F);
-               index = ide_register_hw(&hw, 1, &hwif);
+               index = ide_register_hw(&hw, NULL, 1, &hwif);
                break;
        case MAC_IDE_PB:
                ide_setup_ports(&hw, IDE_BASE, macide_offsets,
                                0, 0, macide_ack_intr,
 //                             macide_pb_iops,
                                IRQ_NUBUS_C);
-               index = ide_register_hw(&hw, 1, &hwif);
+               index = ide_register_hw(&hw, NULL, 1, &hwif);
                break;
        case MAC_IDE_BABOON:
                ide_setup_ports(&hw, BABOON_BASE, macide_offsets,
                                0, 0, NULL,
 //                             macide_baboon_iops,
                                IRQ_BABOON_1);
-               index = ide_register_hw(&hw, 1, &hwif);
+               index = ide_register_hw(&hw, NULL, 1, &hwif);
                if (index == -1) break;
                if (macintosh_config->ident == MAC_MODEL_PB190) {
 
index e628a983ce3395706cdf905c52a37eab15abc9d9..a73db1bd482d6ecbdcf023f72aba169e61595f4b 100644 (file)
@@ -89,9 +89,8 @@ void q40_ide_setup_ports ( hw_regs_t *hw,
                else
                        hw->io_ports[i] = Q40_ISA_IO_B(base + offsets[i]);
        }
-       
+
        hw->irq = irq;
-       hw->dma = NO_DMA;
        hw->ack_intr = ack_intr;
 /*
  *     hw->iops = iops;
@@ -102,7 +101,7 @@ void q40_ide_setup_ports ( hw_regs_t *hw,
 
 /* 
  * the static array is needed to have the name reported in /proc/ioports,
- * hwif->name unfortunately isn´t available yet
+ * hwif->name unfortunately isn't available yet
  */
 static const char *q40_ide_names[Q40IDE_NUM_HWIFS]={
        "ide0", "ide1"
@@ -142,7 +141,7 @@ void q40ide_init(void)
                        0, NULL,
 //                     m68kide_iops,
                        q40ide_default_irq(pcide_bases[i]));
-       index = ide_register_hw(&hw, 1, &hwif);
+       index = ide_register_hw(&hw, NULL, 1, &hwif);
        // **FIXME**
        if (index != -1)
                hwif->mmio = 1;
index 0c81d2d0b9418a2a2f7db1ca85a119b1038b41b9..912e73853faa1b3fa2082031cd6687e95be94dde 100644 (file)
 
 static int timings[4]={-1,-1,-1,-1}; /* stores current timing for each timer */
 
-static void qd_write_reg (u8 content, unsigned long reg)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&ide_lock, flags);
-       outb(content,reg);
-       spin_unlock_irqrestore(&ide_lock, flags);
-}
-
-static u8 __init qd_read_reg (unsigned long reg)
-{
-       unsigned long flags;
-       u8 read;
-
-       spin_lock_irqsave(&ide_lock, flags);
-       read = inb(reg);
-       spin_unlock_irqrestore(&ide_lock, flags);
-       return read;
-}
-
 /*
  * qd_select:
  *
@@ -121,7 +101,7 @@ static void qd_select (ide_drive_t *drive)
                        (QD_TIMREG(drive) & 0x02);
 
        if (timings[index] != QD_TIMING(drive))
-               qd_write_reg(timings[index] = QD_TIMING(drive), QD_TIMREG(drive));
+               outb(timings[index] = QD_TIMING(drive), QD_TIMREG(drive));
 }
 
 /*
@@ -284,7 +264,7 @@ static void qd6580_set_pio_mode(ide_drive_t *drive, const u8 pio)
        }
 
        if (!HWIF(drive)->channel && drive->media != ide_disk) {
-               qd_write_reg(0x5f, QD_CONTROL_PORT);
+               outb(0x5f, QD_CONTROL_PORT);
                printk(KERN_WARNING "%s: ATAPI: disabled read-ahead FIFO "
                        "and post-write buffer on %s.\n",
                        drive->name, HWIF(drive)->name);
@@ -301,16 +281,15 @@ static void qd6580_set_pio_mode(ide_drive_t *drive, const u8 pio)
 
 static int __init qd_testreg(int port)
 {
-       u8 savereg;
-       u8 readreg;
        unsigned long flags;
+       u8 savereg, readreg;
 
-       spin_lock_irqsave(&ide_lock, flags);
+       local_irq_save(flags);
        savereg = inb_p(port);
        outb_p(QD_TESTVAL, port);       /* safe value */
        readreg = inb_p(port);
        outb(savereg, port);
-       spin_unlock_irqrestore(&ide_lock, flags);
+       local_irq_restore(flags);
 
        if (savereg == QD_TESTVAL) {
                printk(KERN_ERR "Outch ! the probe for qd65xx isn't reliable !\n");
@@ -364,13 +343,13 @@ static void __exit qd_unsetup(ide_hwif_t *hwif)
 
        if (set_pio_mode == (void *)qd6500_set_pio_mode) {
                // will do it for both
-               qd_write_reg(QD6500_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
+               outb(QD6500_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
        } else if (set_pio_mode == (void *)qd6580_set_pio_mode) {
                if (QD_CONTROL(hwif) & QD_CONTR_SEC_DISABLED) {
-                       qd_write_reg(QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
-                       qd_write_reg(QD6580_DEF_DATA2, QD_TIMREG(&hwif->drives[1]));
+                       outb(QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
+                       outb(QD6580_DEF_DATA2, QD_TIMREG(&hwif->drives[1]));
                } else {
-                       qd_write_reg(hwif->channel ? QD6580_DEF_DATA2 : QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
+                       outb(hwif->channel ? QD6580_DEF_DATA2 : QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
                }
        } else {
                printk(KERN_WARNING "Unknown qd65xx tuning fonction !\n");
@@ -389,10 +368,11 @@ static void __exit qd_unsetup(ide_hwif_t *hwif)
 static int __init qd_probe(int base)
 {
        ide_hwif_t *hwif;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
        u8 config;
        u8 unit;
 
-       config = qd_read_reg(QD_CONFIG_PORT);
+       config = inb(QD_CONFIG_PORT);
 
        if (! ((config & QD_CONFIG_BASEPORT) >> 1 == (base == 0xb0)) )
                return 1;
@@ -419,9 +399,9 @@ static int __init qd_probe(int base)
 
                hwif->set_pio_mode = &qd6500_set_pio_mode;
 
-               probe_hwif_init(hwif);
+               idx[0] = unit;
 
-               ide_proc_register_port(hwif);
+               ide_device_add(idx);
 
                return 1;
        }
@@ -436,7 +416,7 @@ static int __init qd_probe(int base)
 
                /* qd6580 found */
 
-               control = qd_read_reg(QD_CONTROL_PORT);
+               control = inb(QD_CONTROL_PORT);
 
                printk(KERN_NOTICE "qd6580 at %#x\n", base);
                printk(KERN_DEBUG "qd6580: config=%#x, control=%#x, ID3=%u\n",
@@ -453,11 +433,11 @@ static int __init qd_probe(int base)
 
                        hwif->set_pio_mode = &qd6580_set_pio_mode;
 
-                       probe_hwif_init(hwif);
+                       idx[0] = unit;
 
-                       qd_write_reg(QD_DEF_CONTR,QD_CONTROL_PORT);
+                       ide_device_add(idx);
 
-                       ide_proc_register_port(hwif);
+                       outb(QD_DEF_CONTR, QD_CONTROL_PORT);
 
                        return 1;
                } else {
@@ -474,19 +454,17 @@ static int __init qd_probe(int base)
 
                        hwif->set_pio_mode = &qd6580_set_pio_mode;
 
-                       probe_hwif_init(hwif);
-
                        qd_setup(mate, base, config | (control << 8),
                                 QD6580_DEF_DATA2, QD6580_DEF_DATA2);
 
                        mate->set_pio_mode = &qd6580_set_pio_mode;
 
-                       probe_hwif_init(mate);
+                       idx[0] = 0;
+                       idx[1] = 1;
 
-                       qd_write_reg(QD_DEF_CONTR,QD_CONTROL_PORT);
+                       ide_device_add(idx);
 
-                       ide_proc_register_port(hwif);
-                       ide_proc_register_port(mate);
+                       outb(QD_DEF_CONTR, QD_CONTROL_PORT);
 
                        return 0; /* no other qd65xx possible */
                }
index 1151c92dd5318dfc8681771143322f7d1e4e3480..79577b916874d085fa96dbf2c2036301e129ef11 100644 (file)
@@ -124,8 +124,9 @@ static void umc_set_pio_mode(ide_drive_t *drive, const u8 pio)
 
 static int __init umc8672_probe(void)
 {
-       unsigned long flags;
        ide_hwif_t *hwif, *mate;
+       unsigned long flags;
+       static u8 idx[4] = { 0, 1, 0xff, 0xff };
 
        if (!request_region(0x108, 2, "umc8672")) {
                printk(KERN_ERR "umc8672: ports 0x108-0x109 already in use.\n");
@@ -158,11 +159,7 @@ static int __init umc8672_probe(void)
        mate->mate = hwif;
        mate->channel = 1;
 
-       probe_hwif_init(hwif);
-       probe_hwif_init(mate);
-
-       ide_proc_register_port(hwif);
-       ide_proc_register_port(mate);
+       ide_device_add(idx);
 
        return 0;
 }
index 2f322d7e881bc95dcdade00ad6ed27115ddf53e5..1de58566e5b618aede51102965e7ed6f574a8a18 100644 (file)
@@ -601,8 +601,9 @@ static int au_ide_probe(struct device *dev)
        _auide_hwif *ahwif = &auide_hwif;
        ide_hwif_t *hwif;
        struct resource *res;
-       hw_regs_t *hw;
        int ret = 0;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
+       hw_regs_t hw;
 
 #if defined(CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA)
        char *mode = "MWDMA2";
@@ -644,12 +645,12 @@ static int au_ide_probe(struct device *dev)
        /* FIXME:  This might possibly break PCMCIA IDE devices */
 
        hwif                            = &ide_hwifs[pdev->id];
-       hw                              = &hwif->hw;
-       hwif->irq = hw->irq             = ahwif->irq;
+       hwif->irq                       = ahwif->irq;
        hwif->chipset                   = ide_au1xxx;
 
-       auide_setup_ports(hw, ahwif);
-       memcpy(hwif->io_ports, hw->io_ports, sizeof(hwif->io_ports));
+       memset(&hw, 0, sizeof(hw));
+       auide_setup_ports(&hw, ahwif);
+       memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports));
 
        hwif->ultra_mask                = 0x0;  /* Disable Ultra DMA */
 #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
@@ -706,8 +707,10 @@ static int au_ide_probe(struct device *dev)
        hwif->config_data               = 0;    /* no chipset-specific code */
 
        hwif->drives[0].autotune        = 1;    /* 1=autotune, 2=noautotune, 0=default */
+       hwif->drives[1].autotune        = 1;
 #endif
-       hwif->drives[0].no_io_32bit     = 1;   
+       hwif->drives[0].no_io_32bit     = 1;
+       hwif->drives[1].no_io_32bit     = 1;
 
        auide_hwif.hwif                 = hwif;
        hwif->hwif_data                 = &auide_hwif;
@@ -717,9 +720,9 @@ static int au_ide_probe(struct device *dev)
        dbdma_init_done = 1;
 #endif
 
-       probe_hwif_init(hwif);
+       idx[0] = hwif->index;
 
-       ide_proc_register_port(hwif);
+       ide_device_add(idx);
 
        dev_set_drvdata(dev, hwif);
 
index c2e29571b0075d3647d2978f24c281cf4d0e7d0f..521edd41b572b0e9c00a82d218c9ec91acb72046 100644 (file)
@@ -71,6 +71,7 @@ static int __devinit swarm_ide_probe(struct device *dev)
        u8 __iomem *base;
        phys_t offset, size;
        int i;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        if (!SIBYTE_HAVE_IDE)
                return -ENODEV;
@@ -119,18 +120,15 @@ static int __devinit swarm_ide_probe(struct device *dev)
        hwif->noprobe = 0;
 
        for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++)
-               hwif->hw.io_ports[i] =
+               hwif->io_ports[i] =
                                (unsigned long)(base + ((0x1f0 + i) << 5));
-       hwif->hw.io_ports[IDE_CONTROL_OFFSET] =
+       hwif->io_ports[IDE_CONTROL_OFFSET] =
                                (unsigned long)(base + (0x3f6 << 5));
-       hwif->hw.irq = K_INT_GB_IDE;
+       hwif->irq = K_INT_GB_IDE;
 
-       memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
-       hwif->irq = hwif->hw.irq;
+       idx[0] = hwif->index;
 
-       probe_hwif_init(hwif);
-
-       ide_proc_register_port(hwif);
+       ide_device_add(idx);
 
        dev_set_drvdata(dev, hwif);
 
index b3dc12a70d51beeb27973b4ac6d9a6174668bbfb..19ec421f7b9f4c2f4871c74069c9dd0fa9db46e2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/ide/pci/aec62xx.c             Version 0.26    Sep 1, 2007
+ * linux/drivers/ide/pci/aec62xx.c             Version 0.27    Sep 16, 2007
  *
  * Copyright (C) 1999-2002     Andre Hedrick <andre@linux-ide.org>
  * Copyright (C) 2007          MontaVista Software, Inc. <source@mvista.com>
@@ -141,19 +141,6 @@ static void aec_set_pio_mode(ide_drive_t *drive, const u8 pio)
        drive->hwif->set_dma_mode(drive, pio + XFER_PIO_0);
 }
 
-static void aec62xx_dma_lost_irq (ide_drive_t *drive)
-{
-       switch (HWIF(drive)->pci_dev->device) {
-               case PCI_DEVICE_ID_ARTOP_ATP860:
-               case PCI_DEVICE_ID_ARTOP_ATP860R:
-               case PCI_DEVICE_ID_ARTOP_ATP865:
-               case PCI_DEVICE_ID_ARTOP_ATP865R:
-                       printk(" AEC62XX time out ");
-               default:
-                       break;
-       }
-}
-
 static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const char *name)
 {
        int bus_speed = system_bus_clock();
@@ -195,8 +182,6 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
        if (hwif->dma_base == 0)
                return;
 
-       hwif->dma_lost_irq      = &aec62xx_dma_lost_irq;
-
        if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF)
                return;
 
@@ -209,7 +194,7 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
        }
 }
 
-static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
+static const struct ide_port_info aec62xx_chipsets[] __devinitdata = {
        {       /* 0 */
                .name           = "AEC6210",
                .init_chipset   = init_chipset_aec62xx,
@@ -268,12 +253,12 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
  *     finds a device matching our IDE device tables.
  *
  *     NOTE: since we're going to modify the 'name' field for AEC-6[26]80[R]
- *     chips, pass a local copy of 'struct pci_device_id' down the call chain.
+ *     chips, pass a local copy of 'struct ide_port_info' down the call chain.
  */
+
 static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t d;
+       struct ide_port_info d;
        u8 idx = id->driver_data;
 
        d = aec62xx_chipsets[idx];
index 8ee2b48d105d8c2a6c1ffc51280478b82b757576..a607dd31a64c58a9e23b7677d0702fb24cacd64e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/ide/pci/alim15x3.c            Version 0.27    Aug 27 2007
+ * linux/drivers/ide/pci/alim15x3.c            Version 0.29    Sep 16 2007
  *
  *  Copyright (C) 1998-2000 Michel Aubry, Maintainer
  *  Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer
@@ -492,6 +492,13 @@ static unsigned int __devinit init_chipset_ali15x3 (struct pci_dev *dev, const c
                 * clear bit 7
                 */
                pci_write_config_byte(dev, 0x4b, tmpbyte & 0x7F);
+               /*
+                * check m1533, 0x5e, bit 1~4 == 1001 => & 00011110 = 00010010
+                */
+               if (m5229_revision >= 0x20 && isa_dev) {
+                       pci_read_config_byte(isa_dev, 0x5e, &tmpbyte);
+                       chip_is_1543c_e = ((tmpbyte & 0x1e) == 0x12) ? 1: 0;
+               }
                goto out;
        }
 
@@ -537,7 +544,30 @@ static unsigned int __devinit init_chipset_ali15x3 (struct pci_dev *dev, const c
                        pci_write_config_byte(isa_dev, 0x79, tmpbyte | 0x02);
                }
        }
+
 out:
+       /*
+        * CD_ROM DMA on (m5229, 0x53, bit0)
+        *      Enable this bit even if we want to use PIO.
+        * PIO FIFO off (m5229, 0x53, bit1)
+        *      The hardware will use 0x54h and 0x55h to control PIO FIFO.
+        *      (Not on later devices it seems)
+        *
+        *      0x53 changes meaning on later revs - we must no touch
+        *      bit 1 on them.  Need to check if 0x20 is the right break.
+        */
+       if (m5229_revision >= 0x20) {
+               pci_read_config_byte(dev, 0x53, &tmpbyte);
+
+               if (m5229_revision <= 0x20)
+                       tmpbyte = (tmpbyte & (~0x02)) | 0x01;
+               else if (m5229_revision == 0xc7 || m5229_revision == 0xc8)
+                       tmpbyte |= 0x03;
+               else
+                       tmpbyte |= 0x01;
+
+               pci_write_config_byte(dev, 0x53, tmpbyte);
+       }
        pci_dev_put(north);
        pci_dev_put(isa_dev);
        local_irq_restore(flags);
@@ -616,36 +646,8 @@ static u8 __devinit ata66_ali15x3(ide_hwif_t *hwif)
                        if ((tmpbyte & (1 << hwif->channel)) == 0)
                                cbl = ATA_CBL_PATA80;
                }
-       } else {
-               /*
-                * check m1533, 0x5e, bit 1~4 == 1001 => & 00011110 = 00010010
-                */
-               pci_read_config_byte(isa_dev, 0x5e, &tmpbyte);
-               chip_is_1543c_e = ((tmpbyte & 0x1e) == 0x12) ? 1: 0;
        }
 
-       /*
-        * CD_ROM DMA on (m5229, 0x53, bit0)
-        *      Enable this bit even if we want to use PIO
-        * PIO FIFO off (m5229, 0x53, bit1)
-        *      The hardware will use 0x54h and 0x55h to control PIO FIFO
-        *      (Not on later devices it seems)
-        *
-        *      0x53 changes meaning on later revs - we must no touch
-        *      bit 1 on them. Need to check if 0x20 is the right break
-        */
-        
-       pci_read_config_byte(dev, 0x53, &tmpbyte);
-       
-       if(m5229_revision <= 0x20)
-               tmpbyte = (tmpbyte & (~0x02)) | 0x01;
-       else if (m5229_revision == 0xc7 || m5229_revision == 0xc8)
-               tmpbyte |= 0x03;
-       else
-               tmpbyte |= 0x01;
-
-       pci_write_config_byte(dev, 0x53, tmpbyte);
-
        local_irq_restore(flags);
 
        return cbl;
@@ -664,31 +666,9 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif)
        hwif->set_dma_mode = &ali_set_dma_mode;
        hwif->udma_filter = &ali_udma_filter;
 
-       /* don't use LBA48 DMA on ALi devices before rev 0xC5 */
-       if (m5229_revision <= 0xC4)
-               hwif->host_flags |= IDE_HFLAG_NO_LBA48_DMA;
-
        if (hwif->dma_base == 0)
                return;
 
-       /*
-        * check in ->init_dma guarantees m5229_revision >= 0x20 here
-        */
-
-       if (m5229_revision == 0x20)
-               hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
-
-       if (m5229_revision <= 0x20)
-               hwif->ultra_mask = 0x00; /* no udma */
-       else if (m5229_revision < 0xC2)
-               hwif->ultra_mask = ATA_UDMA2;
-       else if (m5229_revision == 0xC2 || m5229_revision == 0xC3)
-               hwif->ultra_mask = ATA_UDMA4;
-       else if (m5229_revision == 0xC4)
-               hwif->ultra_mask = ATA_UDMA5;
-       else
-               hwif->ultra_mask = ATA_UDMA6;
-
        hwif->dma_setup = &ali15x3_dma_setup;
 
        if (hwif->cbl != ATA_CBL_PATA40_SHORT)
@@ -766,7 +746,7 @@ static void __devinit init_dma_ali15x3 (ide_hwif_t *hwif, unsigned long dmabase)
        ide_setup_dma(hwif, dmabase, 8);
 }
 
-static ide_pci_device_t ali15x3_chipset __devinitdata = {
+static const struct ide_port_info ali15x3_chipset __devinitdata = {
        .name           = "ALI15X3",
        .init_chipset   = init_chipset_ali15x3,
        .init_hwif      = init_hwif_ali15x3,
@@ -792,15 +772,34 @@ static int __devinit alim15x3_init_one(struct pci_dev *dev, const struct pci_dev
                { },
        };
 
-       ide_pci_device_t *d = &ali15x3_chipset;
+       struct ide_port_info d = ali15x3_chipset;
+       u8 rev = dev->revision;
 
        if (pci_dev_present(ati_rs100))
                printk(KERN_WARNING "alim15x3: ATI Radeon IGP Northbridge is not yet fully tested.\n");
 
+       /* don't use LBA48 DMA on ALi devices before rev 0xC5 */
+       if (rev <= 0xC4)
+               d.host_flags |= IDE_HFLAG_NO_LBA48_DMA;
+
+       if (rev >= 0x20) {
+               if (rev == 0x20)
+                       d.host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
+
+               if (rev < 0xC2)
+                       d.udma_mask = ATA_UDMA2;
+               else if (rev == 0xC2 || rev == 0xC3)
+                       d.udma_mask = ATA_UDMA4;
+               else if (rev == 0xC4)
+                       d.udma_mask = ATA_UDMA5;
+               else
+                       d.udma_mask = ATA_UDMA6;
+       }
+
 #if defined(CONFIG_SPARC64)
-       d->init_hwif = init_hwif_common_ali15x3;
+       d.init_hwif = init_hwif_common_ali15x3;
 #endif /* CONFIG_SPARC64 */
-       return ide_setup_pci_device(dev, d);
+       return ide_setup_pci_device(dev, &d);
 }
 
 
index 7cafefbf6c1bad40e03729212a0a26e676b21439..8d4125ec252c102fd982158aeac8dd6e5cb4b4cc 100644 (file)
@@ -77,7 +77,7 @@ static struct amd_ide_chip {
 };
 
 static struct amd_ide_chip *amd_config;
-static ide_pci_device_t *amd_chipset;
+static const struct ide_port_info *amd_chipset;
 static unsigned int amd_80w;
 static unsigned int amd_clock;
 
@@ -242,19 +242,12 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch
 
 static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
 {
-       int i;
-
        if (hwif->irq == 0) /* 0 is bogus but will do for now */
                hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel);
 
        hwif->set_pio_mode = &amd_set_pio_mode;
        hwif->set_dma_mode = &amd_set_drive;
 
-       for (i = 0; i < 2; i++) {
-               hwif->drives[i].io_32bit = 1;
-               hwif->drives[i].unmask = 1;
-       }
-
        if (!hwif->dma_base)
                return;
 
@@ -270,16 +263,21 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
        }
 }
 
+#define IDE_HFLAGS_AMD \
+       (IDE_HFLAG_PIO_NO_BLACKLIST | \
+        IDE_HFLAG_PIO_NO_DOWNGRADE | \
+        IDE_HFLAG_POST_SET_MODE | \
+        IDE_HFLAG_IO_32BIT | \
+        IDE_HFLAG_UNMASK_IRQS | \
+        IDE_HFLAG_BOOTABLE)
+
 #define DECLARE_AMD_DEV(name_str)                                      \
        {                                                               \
                .name           = name_str,                             \
                .init_chipset   = init_chipset_amd74xx,                 \
                .init_hwif      = init_hwif_amd74xx,                    \
                .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \
-               .host_flags     = IDE_HFLAG_PIO_NO_BLACKLIST |          \
-                                 IDE_HFLAG_PIO_NO_DOWNGRADE |          \
-                                 IDE_HFLAG_POST_SET_MODE |             \
-                                 IDE_HFLAG_BOOTABLE,                   \
+               .host_flags     = IDE_HFLAGS_AMD,                       \
                .pio_mask       = ATA_PIO5,                             \
                .swdma_mask     = ATA_SWDMA2,                           \
                .mwdma_mask     = ATA_MWDMA2,                           \
@@ -291,16 +289,13 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
                .init_chipset   = init_chipset_amd74xx,                 \
                .init_hwif      = init_hwif_amd74xx,                    \
                .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \
-               .host_flags     = IDE_HFLAG_PIO_NO_BLACKLIST |          \
-                                 IDE_HFLAG_PIO_NO_DOWNGRADE |          \
-                                 IDE_HFLAG_POST_SET_MODE |             \
-                                 IDE_HFLAG_BOOTABLE,                   \
+               .host_flags     = IDE_HFLAGS_AMD,                       \
                .pio_mask       = ATA_PIO5,                             \
                .swdma_mask     = ATA_SWDMA2,                           \
                .mwdma_mask     = ATA_MWDMA2,                           \
        }
 
-static ide_pci_device_t amd74xx_chipsets[] __devinitdata = {
+static const struct ide_port_info amd74xx_chipsets[] __devinitdata = {
        /*  0 */ DECLARE_AMD_DEV("AMD7401"),
        /*  1 */ DECLARE_AMD_DEV("AMD7409"),
        /*  2 */ DECLARE_AMD_DEV("AMD7411"),
index 307843053078e2847828370d4501fe8b038c5d5a..ef8e0164ef7a019e560608741d3b880ed6a12452 100644 (file)
@@ -189,8 +189,7 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
        hwif->dma_host_off = &atiixp_dma_host_off;
 }
 
-
-static ide_pci_device_t atiixp_pci_info[] __devinitdata = {
+static const struct ide_port_info atiixp_pci_info[] __devinitdata = {
        {       /* 0 */
                .name           = "ATIIXP",
                .init_hwif      = init_hwif_atiixp,
index f369645e4d1645ce91651df6742c78302fc3752b..4aa48104e0c1c5cb3e7d787efa2983ccd4e4899f 100644 (file)
@@ -185,6 +185,8 @@ static u8 recovery_counts[4] = {16, 16, 16, 16}; /* Recovery count (encoded) */
 
 #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
 
+static DEFINE_SPINLOCK(cmd640_lock);
+
 /*
  * These are initialized to point at the devices we control
  */
@@ -258,12 +260,12 @@ static u8 get_cmd640_reg_vlb (u16 reg)
 
 static u8 get_cmd640_reg(u16 reg)
 {
-       u8 b;
        unsigned long flags;
+       u8 b;
 
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&cmd640_lock, flags);
        b = __get_cmd640_reg(reg);
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&cmd640_lock, flags);
        return b;
 }
 
@@ -271,9 +273,9 @@ static void put_cmd640_reg(u16 reg, u8 val)
 {
        unsigned long flags;
 
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&cmd640_lock, flags);
        __put_cmd640_reg(reg,val);
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&cmd640_lock, flags);
 }
 
 static int __init match_pci_cmd640_device (void)
@@ -351,7 +353,7 @@ static int __init secondary_port_responding (void)
 {
        unsigned long flags;
 
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&cmd640_lock, flags);
 
        outb_p(0x0a, 0x170 + IDE_SELECT_OFFSET);        /* select drive0 */
        udelay(100);
@@ -359,11 +361,11 @@ static int __init secondary_port_responding (void)
                outb_p(0x1a, 0x170 + IDE_SELECT_OFFSET); /* select drive1 */
                udelay(100);
                if ((inb_p(0x170 + IDE_SELECT_OFFSET) & 0x1f) != 0x1a) {
-                       spin_unlock_irqrestore(&ide_lock, flags);
+                       spin_unlock_irqrestore(&cmd640_lock, flags);
                        return 0; /* nothing responded */
                }
        }
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&cmd640_lock, flags);
        return 1; /* success */
 }
 
@@ -440,11 +442,11 @@ static void __init setup_device_ptrs (void)
 static void set_prefetch_mode (unsigned int index, int mode)
 {
        ide_drive_t *drive = cmd_drives[index];
+       unsigned long flags;
        int reg = prefetch_regs[index];
        u8 b;
-       unsigned long flags;
 
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&cmd640_lock, flags);
        b = __get_cmd640_reg(reg);
        if (mode) {     /* want prefetch on? */
 #if CMD640_PREFETCH_MASKS
@@ -460,7 +462,7 @@ static void set_prefetch_mode (unsigned int index, int mode)
                b |= prefetch_masks[index];     /* disable prefetch */
        }
        __put_cmd640_reg(reg, b);
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&cmd640_lock, flags);
 }
 
 /*
@@ -561,7 +563,7 @@ static void program_drive_counts (unsigned int index)
        /*
         * Now that everything is ready, program the new timings
         */
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&cmd640_lock, flags);
        /*
         * Program the address_setup clocks into ARTTIM reg,
         * and then the active/recovery counts into the DRWTIM reg
@@ -570,7 +572,7 @@ static void program_drive_counts (unsigned int index)
        setup_count |= __get_cmd640_reg(arttim_regs[index]) & 0x3f;
        __put_cmd640_reg(arttim_regs[index], setup_count);
        __put_cmd640_reg(drwtim_regs[index], pack_nibbles(active_count, recovery_count));
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&cmd640_lock, flags);
 }
 
 /*
@@ -670,20 +672,20 @@ static void cmd640_set_pio_mode(ide_drive_t *drive, const u8 pio)
 
 static int pci_conf1(void)
 {
-       u32 tmp;
        unsigned long flags;
+       u32 tmp;
 
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&cmd640_lock, flags);
        outb(0x01, 0xCFB);
        tmp = inl(0xCF8);
        outl(0x80000000, 0xCF8);
        if (inl(0xCF8) == 0x80000000) {
                outl(tmp, 0xCF8);
-               spin_unlock_irqrestore(&ide_lock, flags);
+               spin_unlock_irqrestore(&cmd640_lock, flags);
                return 1;
        }
        outl(tmp, 0xCF8);
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&cmd640_lock, flags);
        return 0;
 }
 
@@ -691,15 +693,15 @@ static int pci_conf2(void)
 {
        unsigned long flags;
 
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&cmd640_lock, flags);
        outb(0x00, 0xCFB);
        outb(0x00, 0xCF8);
        outb(0x00, 0xCFA);
        if (inb(0xCF8) == 0x00 && inb(0xCF8) == 0x00) {
-               spin_unlock_irqrestore(&ide_lock, flags);
+               spin_unlock_irqrestore(&cmd640_lock, flags);
                return 1;
        }
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&cmd640_lock, flags);
        return 0;
 }
 
index adee2ef6fd710b5a9b973a37d708239cf671b95d..ea0143ef5fe5aee02df0e09442f790f5f68a6fcd 100644 (file)
@@ -535,7 +535,6 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif)
                hwif->ide_dma_test_irq  = &cmd648_ide_dma_test_irq;
                break;
        case PCI_DEVICE_ID_CMD_646:
-               hwif->chipset = ide_cmd646;
                if (dev->revision == 0x01) {
                        hwif->ide_dma_end = &cmd646_1_ide_dma_end;
                        break;
@@ -549,7 +548,7 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif)
        }
 }
 
-static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {
+static const struct ide_port_info cmd64x_chipsets[] __devinitdata = {
        {       /* 0 */
                .name           = "CMD643",
                .init_chipset   = init_chipset_cmd64x,
@@ -573,6 +572,7 @@ static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {
                .init_chipset   = init_chipset_cmd64x,
                .init_hwif      = init_hwif_cmd64x,
                .enablebits     = {{0x51,0x04,0x04}, {0x51,0x08,0x08}},
+               .chipset        = ide_cmd646,
                .host_flags     = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE,
                .pio_mask       = ATA_PIO5,
                .mwdma_mask     = ATA_MWDMA2,
@@ -591,7 +591,7 @@ static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {
 
 static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t d;
+       struct ide_port_info d;
        u8 idx = id->driver_data;
 
        d = cmd64x_chipsets[idx];
index aa98e817d3852e8b1596445e68d9d511aa2494f1..0466462fd21b9a7ce82b9ab6789d0aa7648ff273 100644 (file)
@@ -141,7 +141,7 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif)
                .pio_mask       = ATA_PIO4,                     \
        }
 
-static ide_pci_device_t cyrix_chipsets[] __devinitdata = {
+static const struct ide_port_info cyrix_chipsets[] __devinitdata = {
        /* 0 */ DECLARE_CS_DEV("Cyrix 5510"),
        /* 1 */ DECLARE_CS_DEV("Cyrix 5520")
 };
@@ -154,9 +154,8 @@ static ide_pci_device_t cyrix_chipsets[] __devinitdata = {
  
 static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_hwif_t *hwif = NULL, *mate = NULL;
-       ata_index_t index;
-       ide_pci_device_t *d = &cyrix_chipsets[id->driver_data];
+       const struct ide_port_info *d = &cyrix_chipsets[id->driver_data];
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        ide_setup_pci_noise(dev, d);
 
@@ -172,29 +171,14 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic
                return -ENODEV;
        }
 
-       index.all = 0xf0f0;
-
        /*
         *      Now the chipset is configured we can let the core
         *      do all the device setup for us
         */
 
-       ide_pci_setup_ports(dev, d, 14, &index);
-
-       if ((index.b.low & 0xf0) != 0xf0)
-               hwif = &ide_hwifs[index.b.low];
-       if ((index.b.high & 0xf0) != 0xf0)
-               mate = &ide_hwifs[index.b.high];
-
-       if (hwif)
-               probe_hwif_init(hwif);
-       if (mate)
-               probe_hwif_init(mate);
+       ide_pci_setup_ports(dev, d, 14, &idx[0]);
 
-       if (hwif)
-               ide_proc_register_port(hwif);
-       if (mate)
-               ide_proc_register_port(mate);
+       ide_device_add(idx);
 
        return 0;
 }
index ba0c6eba024be092f6219ca69c10e9ac62b00c23..599408952bd4cbae54410f3de2e306eda9c101b4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/ide/pci/cs5530.c              Version 0.76    Aug 3 2007
+ * linux/drivers/ide/pci/cs5530.c              Version 0.77    Sep 24 2007
  *
  * Copyright (C) 2000                  Andre Hedrick <andre@linux-ide.org>
  * Copyright (C) 2000                  Mark Lord <mlord@pobox.com>
@@ -146,7 +146,6 @@ static void cs5530_set_dma_mode(ide_drive_t *drive, const u8 mode)
 static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const char *name)
 {
        struct pci_dev *master_0 = NULL, *cs5530_0 = NULL;
-       unsigned long flags;
 
        if (pci_resource_start(dev, 4) == 0)
                return -EFAULT;
@@ -171,9 +170,6 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch
                goto out;
        }
 
-       spin_lock_irqsave(&ide_lock, flags);
-               /* all CPUs (there should only be one CPU with this chipset) */
-
        /*
         * Enable BusMaster and MemoryWriteAndInvalidate for the cs5530:
         * -->  OR 0x14 into 16-bit PCI COMMAND reg of function 0 of the cs5530
@@ -224,8 +220,6 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch
        pci_write_config_byte(master_0, 0x42, 0x00);
        pci_write_config_byte(master_0, 0x43, 0xc1);
 
-       spin_unlock_irqrestore(&ide_lock, flags);
-
 out:
        pci_dev_put(master_0);
        pci_dev_put(cs5530_0);
@@ -261,7 +255,7 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif)
        hwif->udma_filter = cs5530_udma_filter;
 }
 
-static ide_pci_device_t cs5530_chipset __devinitdata = {
+static const struct ide_port_info cs5530_chipset __devinitdata = {
        .name           = "CS5530",
        .init_chipset   = init_chipset_cs5530,
        .init_hwif      = init_hwif_cs5530,
index 5ac82ffa5c0916a2a2f74af9f5ebe39488dadec8..9094916e37803c61a02306f0d402653a771a2fc7 100644 (file)
@@ -186,7 +186,7 @@ static void __devinit init_hwif_cs5535(ide_hwif_t *hwif)
        hwif->cbl = cs5535_cable_detect(hwif->pci_dev);
 }
 
-static ide_pci_device_t cs5535_chipset __devinitdata = {
+static const struct ide_port_info cs5535_chipset __devinitdata = {
        .name           = "CS5535",
        .init_hwif      = init_hwif_cs5535,
        .host_flags     = IDE_HFLAG_SINGLE | IDE_HFLAG_POST_SET_MODE |
index efc20bd97fd51bbdfb52cc53e44c7a6ced952797..3ef4fc10fe2cf596e463634d19c8fe01c842458b 100644 (file)
@@ -428,7 +428,6 @@ static unsigned int __devinit init_chipset_cy82c693(struct pci_dev *dev, const c
  */
 static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif)
 {
-       hwif->chipset = ide_cy82c693;
        hwif->set_pio_mode = &cy82c693_set_pio_mode;
 
        if (hwif->dma_base == 0)
@@ -449,11 +448,12 @@ static void __devinit init_iops_cy82c693(ide_hwif_t *hwif)
        }
 }
 
-static ide_pci_device_t cy82c693_chipset __devinitdata = {
+static const struct ide_port_info cy82c693_chipset __devinitdata = {
        .name           = "CY82C693",
        .init_chipset   = init_chipset_cy82c693,
        .init_iops      = init_iops_cy82c693,
        .init_hwif      = init_hwif_cy82c693,
+       .chipset        = ide_cy82c693,
        .host_flags     = IDE_HFLAG_SINGLE | IDE_HFLAG_TRUST_BIOS_FOR_DMA |
                          IDE_HFLAG_BOOTABLE,
        .pio_mask       = ATA_PIO4,
index 46f4a888c03711c341eddaeea2be7933e3bcbf57..83829081640a6f84727f18260a169477e8d3d257 100644 (file)
@@ -80,7 +80,7 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id)
        hw.irq = dev->irq;
        hw.chipset = ide_pci;           /* this enables IRQ sharing */
 
-       rc = ide_register_hw_with_fixup(&hw, 0, &hwif, ide_undecoded_slave);
+       rc = ide_register_hw(&hw, &ide_undecoded_slave, 0, &hwif);
        if (rc < 0) {
                printk(KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n", rc);
                pci_disable_device(dev);
index 51165832e7f2bd11f3f2601a2b7121d37b931b9a..f44d70852c3cc9c18efcb4bae6b75ba3294f2762 100644 (file)
@@ -54,37 +54,24 @@ __setup("all-generic-ide", ide_generic_all_on);
 module_param_named(all_generic_ide, ide_generic_all, bool, 0444);
 MODULE_PARM_DESC(all_generic_ide, "IDE generic will claim all unknown PCI IDE storage controllers.");
 
-static void __devinit init_hwif_generic (ide_hwif_t *hwif)
-{
-       switch(hwif->pci_dev->device) {
-               case PCI_DEVICE_ID_UMC_UM8673F:
-               case PCI_DEVICE_ID_UMC_UM8886A:
-               case PCI_DEVICE_ID_UMC_UM8886BF:
-                       hwif->irq = hwif->channel ? 15 : 14;
-                       break;
-               default:
-                       break;
-       }
-}
+#define IDE_HFLAGS_UMC (IDE_HFLAG_NO_DMA | IDE_HFLAG_FORCE_LEGACY_IRQS)
 
-#define DECLARE_GENERIC_PCI_DEV(name_str, dma_setting) \
+#define DECLARE_GENERIC_PCI_DEV(name_str, extra_flags) \
        { \
                .name           = name_str, \
-               .init_hwif      = init_hwif_generic, \
                .host_flags     = IDE_HFLAG_TRUST_BIOS_FOR_DMA | \
-                                 dma_setting | \
+                                 extra_flags | \
                                  IDE_HFLAG_BOOTABLE, \
                .swdma_mask     = ATA_SWDMA2, \
                .mwdma_mask     = ATA_MWDMA2, \
                .udma_mask      = ATA_UDMA6, \
        }
 
-static ide_pci_device_t generic_chipsets[] __devinitdata = {
+static const struct ide_port_info generic_chipsets[] __devinitdata = {
        /*  0 */ DECLARE_GENERIC_PCI_DEV("Unknown",     0),
 
        {       /* 1 */
                .name           = "NS87410",
-               .init_hwif      = init_hwif_generic,
                .enablebits     = {{0x43,0x08,0x08}, {0x47,0x08,0x08}},
                .host_flags     = IDE_HFLAG_TRUST_BIOS_FOR_DMA |
                                  IDE_HFLAG_BOOTABLE,
@@ -95,16 +82,15 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
 
        /*  2 */ DECLARE_GENERIC_PCI_DEV("SAMURAI",     0),
        /*  3 */ DECLARE_GENERIC_PCI_DEV("HT6565",      0),
-       /*  4 */ DECLARE_GENERIC_PCI_DEV("UM8673F",     IDE_HFLAG_NO_DMA),
-       /*  5 */ DECLARE_GENERIC_PCI_DEV("UM8886A",     IDE_HFLAG_NO_DMA),
-       /*  6 */ DECLARE_GENERIC_PCI_DEV("UM8886BF",    IDE_HFLAG_NO_DMA),
+       /*  4 */ DECLARE_GENERIC_PCI_DEV("UM8673F",     IDE_HFLAGS_UMC),
+       /*  5 */ DECLARE_GENERIC_PCI_DEV("UM8886A",     IDE_HFLAGS_UMC),
+       /*  6 */ DECLARE_GENERIC_PCI_DEV("UM8886BF",    IDE_HFLAGS_UMC),
        /*  7 */ DECLARE_GENERIC_PCI_DEV("HINT_IDE",    0),
        /*  8 */ DECLARE_GENERIC_PCI_DEV("VIA_IDE",     IDE_HFLAG_NO_AUTODMA),
        /*  9 */ DECLARE_GENERIC_PCI_DEV("OPTI621V",    IDE_HFLAG_NO_AUTODMA),
 
        {       /* 10 */
                .name           = "VIA8237SATA",
-               .init_hwif      = init_hwif_generic,
                .host_flags     = IDE_HFLAG_TRUST_BIOS_FOR_DMA |
                                  IDE_HFLAG_OFF_BOARD,
                .swdma_mask     = ATA_SWDMA2,
@@ -118,7 +104,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
 
        {       /* 14 */
                .name           = "Revolution",
-               .init_hwif      = init_hwif_generic,
                .host_flags     = IDE_HFLAG_TRUST_BIOS_FOR_DMA |
                                  IDE_HFLAG_OFF_BOARD,
                .swdma_mask     = ATA_SWDMA2,
@@ -138,7 +123,7 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
  
 static int __devinit generic_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &generic_chipsets[id->driver_data];
+       const struct ide_port_info *d = &generic_chipsets[id->driver_data];
        int ret = -ENODEV;
 
        /* Don't use the generic entry unless instructed to do so */
index 67af1a7dde3018321e02a3d215a2506d5877aff3..ae6307fae4f9311b35ba24b7727e5c21b05c6b54 100644 (file)
@@ -129,7 +129,7 @@ static void __devinit init_hwif_hpt34x(ide_hwif_t *hwif)
        hwif->set_dma_mode = &hpt34x_set_mode;
 }
 
-static ide_pci_device_t hpt34x_chipsets[] __devinitdata = {
+static const struct ide_port_info hpt34x_chipsets[] __devinitdata = {
        { /* 0 */
                .name           = "HPT343",
                .init_chipset   = init_chipset_hpt34x,
@@ -158,7 +158,7 @@ static ide_pci_device_t hpt34x_chipsets[] __devinitdata = {
 
 static int __devinit hpt34x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d;
+       const struct ide_port_info *d;
        u16 pcicmd = 0;
 
        pci_read_config_word(dev, PCI_COMMAND, &pcicmd);
index 18f5b7ddaee606a1571af6b1ad0068295c988abd..612b795241bfc5bf5741de77b633c81e6b416563 100644 (file)
@@ -1425,7 +1425,7 @@ static int __devinit hpt36x_init(struct pci_dev *dev, struct pci_dev *dev2)
        return 0;
 }
 
-static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
+static const struct ide_port_info hpt366_chipsets[] __devinitdata = {
        {       /* 0 */
                .name           = "HPT36x",
                .init_chipset   = init_chipset_hpt366,
@@ -1510,7 +1510,7 @@ static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_devic
 {
        struct hpt_info *info = NULL;
        struct pci_dev *dev2 = NULL;
-       ide_pci_device_t d;
+       struct ide_port_info d;
        u8 idx = id->driver_data;
        u8 rev = dev->revision;
 
index dfbe605120cb8647e1a63cde9d905fb3a78f3a67..90b52ed37bfc365de2a6041eac56280b5d1ba44e 100644 (file)
@@ -193,7 +193,7 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif)
                .udma_mask      = ATA_UDMA6,            \
        }
 
-static ide_pci_device_t it8213_chipsets[] __devinitdata = {
+static const struct ide_port_info it8213_chipsets[] __devinitdata = {
        /* 0 */ DECLARE_ITE_DEV("IT8213"),
 };
 
index ec45b72472094a594fe676f2415c943ec3450633..5c99754353194478890a3ae073bddcdd509e07f5 100644 (file)
@@ -95,7 +95,7 @@ struct it821x_dev
 
 /*
  *     We allow users to force the card into non raid mode without
- *     flashing the alternative BIOS. This is also neccessary right now
+ *     flashing the alternative BIOS. This is also necessary right now
  *     for embedded platforms that cannot run a PC BIOS but are using this
  *     device.
  */
@@ -564,7 +564,7 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
 
        /*
         *      Not in the docs but according to the reference driver
-        *      this is neccessary.
+        *      this is necessary.
         */
 
        pci_read_config_byte(hwif->pci_dev, 0x08, &conf);
@@ -638,7 +638,7 @@ static unsigned int __devinit init_chipset_it821x(struct pci_dev *dev, const cha
                .pio_mask       = ATA_PIO4,             \
        }
 
-static ide_pci_device_t it821x_chipsets[] __devinitdata = {
+static const struct ide_port_info it821x_chipsets[] __devinitdata = {
        /* 0 */ DECLARE_ITE_DEV("IT8212"),
 };
 
index 2eeff670d9a624f53c47d77da0acf91b3684e98c..bdf64d99770805313647814c848cedc5d43ff600 100644 (file)
@@ -118,7 +118,7 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif)
                hwif->cbl = ata66_jmicron(hwif);
 }
 
-static ide_pci_device_t jmicron_chipset __devinitdata = {
+static const struct ide_port_info jmicron_chipset __devinitdata = {
        .name           = "JMB",
        .init_hwif      = init_hwif_jmicron,
        .host_flags     = IDE_HFLAG_BOOTABLE,
index d21b58923829462f5074cc454479f9d00df6c3fc..d4df4642dbb5ff83e136b26126816fcc3ca09fff 100644 (file)
@@ -260,7 +260,7 @@ static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif)
        hwif->ide_dma_end = &ns87415_ide_dma_end;
 }
 
-static ide_pci_device_t ns87415_chipset __devinitdata = {
+static const struct ide_port_info ns87415_chipset __devinitdata = {
        .name           = "NS87415",
 #ifdef CONFIG_SUPERIO
        .init_iops      = init_iops_ns87415,
index 3573ffeaaa3459a24eaf02cec521cd6901ef9171..8953d9c3926fe3ea909563562374f3599d9568e6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  linux/drivers/ide/pci/opti621.c            Version 0.8     Aug 27, 2007
+ *  linux/drivers/ide/pci/opti621.c            Version 0.9     Sep 24, 2007
  *
  *  Copyright (C) 1996-1998  Linus Torvalds & authors (see below)
  */
@@ -133,6 +133,8 @@ static int reg_base;
 #define PIO_NOT_EXIST 254
 #define PIO_DONT_KNOW 255
 
+static DEFINE_SPINLOCK(opti621_lock);
+
 /* there are stored pio numbers from other calls of opti621_set_pio_mode */
 static void compute_pios(ide_drive_t *drive, const u8 pio)
 /* Store values into drive->drive_data
@@ -278,7 +280,7 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio)
                second.recovery_time, drdy);
 #endif
 
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&opti621_lock, flags);
 
        reg_base = hwif->io_ports[IDE_DATA_OFFSET];
 
@@ -317,7 +319,7 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio)
        /*  and read prefetch for both drives */
        write_reg(misc, MISC_REG);
 
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&opti621_lock, flags);
 }
 
 /*
@@ -331,7 +333,7 @@ static void __devinit init_hwif_opti621 (ide_hwif_t *hwif)
        hwif->set_pio_mode = &opti621_set_pio_mode;
 }
 
-static ide_pci_device_t opti621_chipsets[] __devinitdata = {
+static const struct ide_port_info opti621_chipsets[] __devinitdata = {
        {       /* 0 */
                .name           = "OPTI621",
                .init_hwif      = init_hwif_opti621,
index d1e7823454f37406ac250fa17cc2ffe265862257..4234efeba606750d9b4d7e4cc5ad95aaea57faba 100644 (file)
@@ -513,7 +513,7 @@ static struct pci_dev * __devinit pdc20270_get_dev2(struct pci_dev *dev)
                .udma_mask      = udma, \
        }
 
-static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
+static const struct ide_port_info pdcnew_chipsets[] __devinitdata = {
        /* 0 */ DECLARE_PDCNEW_DEV("PDC20268", ATA_UDMA5),
        /* 1 */ DECLARE_PDCNEW_DEV("PDC20269", ATA_UDMA6),
        /* 2 */ DECLARE_PDCNEW_DEV("PDC20270", ATA_UDMA5),
@@ -534,7 +534,7 @@ static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
  
 static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d;
+       const struct ide_port_info *d;
        struct pci_dev *bridge = dev->bus->self;
        u8 idx = id->driver_data;
 
index 29306121dc4a916780d25c62fa788bdfe7da7100..e09742e2ba592607e31dd3356099fabf8fae5ea8 100644 (file)
@@ -302,13 +302,6 @@ static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev,
 
 static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
 {
-       struct pci_dev *dev = hwif->pci_dev;
-
-       /* PDC20265 has problems with large LBA48 requests */
-       if ((dev->device == PCI_DEVICE_ID_PROMISE_20267) ||
-           (dev->device == PCI_DEVICE_ID_PROMISE_20265))
-               hwif->rqsize = 256;
-
        hwif->set_pio_mode = &pdc202xx_set_pio_mode;
        hwif->set_dma_mode = &pdc202xx_set_mode;
 
@@ -382,7 +375,7 @@ static void __devinit pdc202ata4_fixup_irq(struct pci_dev *dev,
        }
 }
 
-#define DECLARE_PDC2026X_DEV(name_str, udma) \
+#define DECLARE_PDC2026X_DEV(name_str, udma, extra_flags) \
        { \
                .name           = name_str, \
                .init_chipset   = init_chipset_pdc202xx, \
@@ -390,13 +383,14 @@ static void __devinit pdc202ata4_fixup_irq(struct pci_dev *dev,
                .init_dma       = init_dma_pdc202xx, \
                .extra          = 48, \
                .host_flags     = IDE_HFLAG_ERROR_STOPS_FIFO | \
+                                 extra_flags | \
                                  IDE_HFLAG_OFF_BOARD, \
                .pio_mask       = ATA_PIO4, \
                .mwdma_mask     = ATA_MWDMA2, \
                .udma_mask      = udma, \
        }
 
-static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
+static const struct ide_port_info pdc202xx_chipsets[] __devinitdata = {
        {       /* 0 */
                .name           = "PDC20246",
                .init_chipset   = init_chipset_pdc202xx,
@@ -410,10 +404,10 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
                .udma_mask      = ATA_UDMA2,
        },
 
-       /* 1 */ DECLARE_PDC2026X_DEV("PDC20262", ATA_UDMA4),
-       /* 2 */ DECLARE_PDC2026X_DEV("PDC20263", ATA_UDMA4),
-       /* 3 */ DECLARE_PDC2026X_DEV("PDC20265", ATA_UDMA5),
-       /* 4 */ DECLARE_PDC2026X_DEV("PDC20267", ATA_UDMA5),
+       /* 1 */ DECLARE_PDC2026X_DEV("PDC20262", ATA_UDMA4, 0),
+       /* 2 */ DECLARE_PDC2026X_DEV("PDC20263", ATA_UDMA4, 0),
+       /* 3 */ DECLARE_PDC2026X_DEV("PDC20265", ATA_UDMA5, IDE_HFLAG_RQSIZE_256),
+       /* 4 */ DECLARE_PDC2026X_DEV("PDC20267", ATA_UDMA5, IDE_HFLAG_RQSIZE_256),
 };
 
 /**
@@ -427,7 +421,7 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
  
 static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d;
+       const struct ide_port_info *d;
        u8 idx = id->driver_data;
 
        d = &pdc202xx_chipsets[idx];
index ec0c6e96a213a1512558ee7e7cb9f90a0880146b..9329d4a810e50fe4a25b45c5f9b6e8b26640e6c6 100644 (file)
@@ -396,7 +396,7 @@ static void __devinit init_hwif_ich(ide_hwif_t *hwif)
                .udma_mask      = udma, \
        }
 
-static ide_pci_device_t piix_pci_info[] __devinitdata = {
+static const struct ide_port_info piix_pci_info[] __devinitdata = {
        /*  0 */ DECLARE_PIIX_DEV("PIIXa",      0x00),  /* no udma */
        /*  1 */ DECLARE_PIIX_DEV("PIIXb",      0x00),  /* no udma */
 
@@ -449,9 +449,7 @@ static ide_pci_device_t piix_pci_info[] __devinitdata = {
  
 static int __devinit piix_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &piix_pci_info[id->driver_data];
-
-       return ide_setup_pci_device(dev, d);
+       return ide_setup_pci_device(dev, &piix_pci_info[id->driver_data]);
 }
 
 /**
index dd2583ef1ad71e59d4651e9acd5e75092b7f093f..6b10ae260fa29e148ae6f9f874400ce1d0997381 100644 (file)
@@ -35,13 +35,13 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)
        u16 reg;
        struct pci_dev *dev = hwif->pci_dev;
 
-       hwif->chipset = ide_rz1000;
        if (!pci_read_config_word (dev, 0x40, &reg) &&
            !pci_write_config_word(dev, 0x40, reg & 0xdfff)) {
                printk(KERN_INFO "%s: disabled chipset read-ahead "
                        "(buggy RZ1000/RZ1001)\n", hwif->name);
        } else {
-               hwif->serialized = 1;
+               if (hwif->mate)
+                       hwif->mate->serialized = hwif->serialized = 1;
                hwif->drives[0].no_unmask = 1;
                hwif->drives[1].no_unmask = 1;
                printk(KERN_INFO "%s: serialized, disabled unmasking "
@@ -49,9 +49,10 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)
        }
 }
 
-static ide_pci_device_t rz1000_chipset __devinitdata = {
+static const struct ide_port_info rz1000_chipset __devinitdata = {
        .name           = "RZ100x",
        .init_hwif      = init_hwif_rz1000,
+       .chipset        = ide_rz1000,
        .host_flags     = IDE_HFLAG_NO_DMA | IDE_HFLAG_BOOTABLE,
 };
 
index b2423e03bf367c590db26e766ca817b9306e563b..d2c8b5524f283df712581463e0c80a59b99fa0dc 100644 (file)
@@ -372,7 +372,7 @@ static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif)
        hwif->ide_dma_end   = &sc1200_ide_dma_end;
 }
 
-static ide_pci_device_t sc1200_chipset __devinitdata = {
+static const struct ide_port_info sc1200_chipset __devinitdata = {
        .name           = "SC1200",
        .init_hwif      = init_hwif_sc1200,
        .host_flags     = IDE_HFLAG_SERIALIZE |
index ae9b50331d2a58d50449fd0109aa1a2fb62538d9..ebb7132b9b848c6c87f92cbe9dc6b92450980c8f 100644 (file)
@@ -538,12 +538,13 @@ static int setup_mmio_scc (struct pci_dev *dev, const char *name)
 /**
  *     init_setup_scc  -       set up an SCC PATA Controller
  *     @dev: PCI device
- *     @d: IDE PCI device
+ *     @d: IDE port info
  *
  *     Perform the initial set up for this device.
  */
 
-static int __devinit init_setup_scc(struct pci_dev *dev, ide_pci_device_t *d)
+static int __devinit init_setup_scc(struct pci_dev *dev,
+                                   const struct ide_port_info *d)
 {
        unsigned long ctl_base;
        unsigned long dma_base;
@@ -702,7 +703,7 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif)
       .pio_mask                = ATA_PIO4,                     \
   }
 
-static ide_pci_device_t scc_chipsets[] __devinitdata = {
+static const struct ide_port_info scc_chipsets[] __devinitdata = {
        /* 0 */ DECLARE_SCC_DEV("sccIDE"),
 };
 
@@ -717,9 +718,7 @@ static ide_pci_device_t scc_chipsets[] __devinitdata = {
 
 static int __devinit scc_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &scc_chipsets[id->driver_data];
-
-       return init_setup_scc(dev, d);
+       return init_setup_scc(dev, &scc_chipsets[id->driver_data]);
 }
 
 /**
index a3d880e21d0b53230fd81427b1364d5ab4c86113..a7280311357b3e539aae503165ed0b9e69603f71 100644 (file)
@@ -158,13 +158,6 @@ static void svwks_set_dma_mode(ide_drive_t *drive, const u8 speed)
 
        u8 ultra_enable  = 0, ultra_timing = 0, dma_timing = 0;
 
-       /* If we are about to put a disk into UDMA mode we screwed up.
-          Our code assumes we never _ever_ do this on an OSB4 */
-          
-       if(dev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4 &&
-               drive->media == ide_disk && speed >= XFER_UDMA_0)
-                       BUG();
-
        pci_read_config_byte(dev, (0x56|hwif->channel), &ultra_timing);
        pci_read_config_byte(dev, 0x54, &ultra_enable);
 
@@ -373,7 +366,7 @@ static void __devinit init_hwif_svwks (ide_hwif_t *hwif)
        }
 }
 
-static ide_pci_device_t serverworks_chipsets[] __devinitdata = {
+static const struct ide_port_info serverworks_chipsets[] __devinitdata = {
        {       /* 0 */
                .name           = "SvrWks OSB4",
                .init_chipset   = init_chipset_svwks,
@@ -430,7 +423,7 @@ static ide_pci_device_t serverworks_chipsets[] __devinitdata = {
  
 static int __devinit svwks_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t d;
+       struct ide_port_info d;
        u8 idx = id->driver_data;
 
        d = serverworks_chipsets[idx];
index 5af74ea1d46eebe23234eee4824580533fd8df6e..de820aa58cd0e47057b9a8028d9fd3b8c1bfe515 100644 (file)
@@ -614,6 +614,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)
        void __iomem *virt_base;
        ide_hwif_t *hwif;
        int h;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        /*
         * Find an empty HWIF; if none available, return -ENOMEM.
@@ -654,10 +655,12 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)
        }
 
        if (hwif->io_ports[IDE_DATA_OFFSET] != cmd_base) {
+               hw_regs_t hw;
+
                /* Initialize the IO registers */
-               sgiioc4_init_hwif_ports(&hwif->hw, cmd_base, ctl, irqport);
-               memcpy(hwif->io_ports, hwif->hw.io_ports,
-                      sizeof (hwif->io_ports));
+               memset(&hw, 0, sizeof(hw));
+               sgiioc4_init_hwif_ports(&hw, cmd_base, ctl, irqport);
+               memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports));
                hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET];
        }
 
@@ -679,11 +682,10 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)
 
        ide_init_sgiioc4(hwif);
 
-       if (probe_hwif_init(hwif))
-               return -EIO;
+       idx[0] = hwif->index;
 
-       /* Create /proc/ide entries */
-       ide_proc_register_port(hwif);
+       if (ide_device_add(idx))
+               return -EIO;
 
        return 0;
 }
index 689786df1edebb39ee1603da2b8887c5ddd5685b..6d99441c605be1836843c514de2a780b8dcee804 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/ide/pci/siimage.c             Version 1.17    Oct 18 2007
+ * linux/drivers/ide/pci/siimage.c             Version 1.18    Oct 18 2007
  *
  * Copyright (C) 2001-2002     Andre Hedrick <andre@linux-ide.org>
  * Copyright (C) 2003          Red Hat <alan@redhat.com>
@@ -26,7 +26,7 @@
  *
  *     If you have strange problems with nVidia chipset systems please
  *     see the SI support documentation and update your system BIOS
- *     if neccessary
+ *     if necessary
  *
  *  The Dell DRAC4 has some interesting features including effectively hot
  *  unplugging/replugging the virtual CD interface when the DRAC is reset.
@@ -57,8 +57,8 @@
  
 static int pdev_is_sata(struct pci_dev *pdev)
 {
-       switch(pdev->device)
-       {
+#ifdef CONFIG_BLK_DEV_IDE_SATA
+       switch(pdev->device) {
                case PCI_DEVICE_ID_SII_3112:
                case PCI_DEVICE_ID_SII_1210SA:
                        return 1;
@@ -66,9 +66,10 @@ static int pdev_is_sata(struct pci_dev *pdev)
                        return 0;
        }
        BUG();
+#endif
        return 0;
 }
+
 /**
  *     is_sata                 -       check if hwif is SATA
  *     @hwif:  interface to check
@@ -136,7 +137,7 @@ static inline unsigned long siimage_seldev(ide_drive_t *drive, int r)
  *     SI3112 SATA controller life is a bit simpler.
  */
 
-static u8 sil_udma_filter(ide_drive_t *drive)
+static u8 sil_pata_udma_filter(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = drive->hwif;
        unsigned long base = (unsigned long) hwif->hwif_data;
@@ -147,23 +148,23 @@ static u8 sil_udma_filter(ide_drive_t *drive)
        else
                pci_read_config_byte(hwif->pci_dev, 0x8A, &scsc);
 
-       if (is_sata(hwif)) {
-               mask = strstr(drive->id->model, "Maxtor") ? 0x3f : 0x7f;
-               goto out;
-       }
-
        if ((scsc & 0x30) == 0x10)      /* 133 */
-               mask = 0x7f;
+               mask = ATA_UDMA6;
        else if ((scsc & 0x30) == 0x20) /* 2xPCI */
-               mask = 0x7f;
+               mask = ATA_UDMA6;
        else if ((scsc & 0x30) == 0x00) /* 100 */
-               mask = 0x3f;
+               mask = ATA_UDMA5;
        else    /* Disabled ? */
                BUG();
-out:
+
        return mask;
 }
 
+static u8 sil_sata_udma_filter(ide_drive_t *drive)
+{
+       return strstr(drive->id->model, "Maxtor") ? ATA_UDMA5 : ATA_UDMA6;
+}
+
 /**
  *     sil_set_pio_mode        -       set host controller for PIO mode
  *     @drive: drive
@@ -340,10 +341,11 @@ static int siimage_io_ide_dma_test_irq (ide_drive_t *drive)
 static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive)
 {
        ide_hwif_t *hwif        = HWIF(drive);
-       unsigned long base      = (unsigned long)hwif->hwif_data;
        unsigned long addr      = siimage_selreg(hwif, 0x1);
 
        if (SATA_ERROR_REG) {
+               unsigned long base = (unsigned long)hwif->hwif_data;
+
                u32 ext_stat = readl((void __iomem *)(base + 0x10));
                u8 watchdog = 0;
                if (ext_stat & ((hwif->channel) ? 0x40 : 0x10)) {
@@ -376,7 +378,7 @@ static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive)
 }
 
 /**
- *     siimage_busproc         -       bus isolation ioctl
+ *     sil_sata_busproc        -       bus isolation IOCTL
  *     @drive: drive to isolate/restore
  *     @state: bus state to set
  *
@@ -384,8 +386,8 @@ static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive)
  *     SATA controller the work required is quite limited, we 
  *     just have to clean up the statistics
  */
-static int siimage_busproc (ide_drive_t * drive, int state)
+
+static int sil_sata_busproc(ide_drive_t * drive, int state)
 {
        ide_hwif_t *hwif        = HWIF(drive);
        u32 stat_config         = 0;
@@ -417,14 +419,14 @@ static int siimage_busproc (ide_drive_t * drive, int state)
 }
 
 /**
- *     siimage_reset_poll      -       wait for sata reset
+ *     sil_sata_reset_poll     -       wait for SATA reset
  *     @drive: drive we are resetting
  *
  *     Poll the SATA phy and see whether it has come back from the dead
  *     yet.
  */
-static int siimage_reset_poll (ide_drive_t *drive)
+
+static int sil_sata_reset_poll(ide_drive_t *drive)
 {
        if (SATA_STATUS_REG) {
                ide_hwif_t *hwif        = HWIF(drive);
@@ -436,27 +438,22 @@ static int siimage_reset_poll (ide_drive_t *drive)
                        HWGROUP(drive)->polling = 0;
                        return ide_started;
                }
-               return 0;
-       } else {
-               return 0;
        }
+
+       return 0;
 }
 
 /**
- *     siimage_pre_reset       -       reset hook
+ *     sil_sata_pre_reset      -       reset hook
  *     @drive: IDE device being reset
  *
  *     For the SATA devices we need to handle recalibration/geometry
  *     differently
  */
-static void siimage_pre_reset (ide_drive_t *drive)
-{
-       if (drive->media != ide_disk)
-               return;
 
-       if (is_sata(HWIF(drive)))
-       {
+static void sil_sata_pre_reset(ide_drive_t *drive)
+{
+       if (drive->media == ide_disk) {
                drive->special.b.set_geometry = 0;
                drive->special.b.recalibrate = 0;
        }
@@ -502,7 +499,6 @@ static void siimage_reset (ide_drive_t *drive)
                        drive->failures++;
                }
        }
-
 }
 
 /**
@@ -758,16 +754,11 @@ static void __devinit init_mmio_iops_siimage(ide_hwif_t *hwif)
                hwif->sata_misc[SATA_IEN_OFFSET]        = base + 0x148;
        }
 
-       hw.irq                          = hwif->pci_dev->irq;
+       memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports));
 
-       memcpy(&hwif->hw, &hw, sizeof(hw));
-       memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports));
+       hwif->irq = dev->irq;
 
-       hwif->irq                       = hw.irq;
-
-               base = (unsigned long) addr;
-
-       hwif->dma_base                  = base + (ch ? 0x08 : 0x00);
+       hwif->dma_base = (unsigned long)addr + (ch ? 0x08 : 0x00);
 
        hwif->mmio = 1;
 }
@@ -864,28 +855,31 @@ static u8 __devinit ata66_siimage(ide_hwif_t *hwif)
 
 static void __devinit init_hwif_siimage(ide_hwif_t *hwif)
 {
+       u8 sata = is_sata(hwif);
+
        hwif->resetproc = &siimage_reset;
        hwif->set_pio_mode = &sil_set_pio_mode;
        hwif->set_dma_mode = &sil_set_dma_mode;
-       hwif->reset_poll = &siimage_reset_poll;
-       hwif->pre_reset = &siimage_pre_reset;
-       hwif->udma_filter = &sil_udma_filter;
 
-       if(is_sata(hwif)) {
+       if (sata) {
                static int first = 1;
 
-               hwif->busproc   = &siimage_busproc;
+               hwif->busproc = &sil_sata_busproc;
+               hwif->reset_poll = &sil_sata_reset_poll;
+               hwif->pre_reset = &sil_sata_pre_reset;
+               hwif->udma_filter = &sil_sata_udma_filter;
 
                if (first) {
                        printk(KERN_INFO "siimage: For full SATA support you should use the libata sata_sil module.\n");
                        first = 0;
                }
-       }
+       } else
+               hwif->udma_filter = &sil_pata_udma_filter;
 
        if (hwif->dma_base == 0)
                return;
 
-       if (is_sata(hwif))
+       if (sata)
                hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
 
        if (hwif->cbl != ATA_CBL_PATA40_SHORT)
@@ -911,7 +905,7 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif)
                .udma_mask      = ATA_UDMA6,            \
        }
 
-static ide_pci_device_t siimage_chipsets[] __devinitdata = {
+static const struct ide_port_info siimage_chipsets[] __devinitdata = {
        /* 0 */ DECLARE_SII_DEV("SiI680"),
        /* 1 */ DECLARE_SII_DEV("SiI3112 Serial ATA"),
        /* 2 */ DECLARE_SII_DEV("Adaptec AAR-1210SA")
index c1d280b06391e3a08f79626429f140b7961466d4..6b7bb53acefdc68d1928bd0bd85eb3d0c3e4a5c3 100644 (file)
@@ -264,7 +264,7 @@ static void sis_ata133_program_timings(ide_drive_t *drive, const u8 mode)
        if (mode >= XFER_MW_DMA_0) {
                t1 &= ~0x04;    /* disable UDMA */
                idx = mode - XFER_MW_DMA_0 + 5;
-       }
+       } else
                idx = mode - XFER_PIO_0;
        t1 |= ini_time_value[clk][idx] << 12;
        t1 |= act_time_value[clk][idx] << 16;
@@ -579,7 +579,7 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif)
                hwif->cbl = ata66_sis5513(hwif);
 }
 
-static ide_pci_device_t sis5513_chipset __devinitdata = {
+static const struct ide_port_info sis5513_chipset __devinitdata = {
        .name           = "SIS5513",
        .init_chipset   = init_chipset_sis5513,
        .init_hwif      = init_hwif_sis5513,
index 0dce459b12698f0bcc9518566bae5c3ee1904be7..147d783f7529e681fb1d69645942d00780bd42e0 100644 (file)
@@ -361,13 +361,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
        hwif->selectproc        = &sl82c105_selectproc;
        hwif->resetproc         = &sl82c105_resetproc;
 
-       /*
-        * We support 32-bit I/O on this interface, and
-        * it doesn't have problems with interrupts.
-        */
-       hwif->drives[0].io_32bit = hwif->drives[1].io_32bit = 1;
-       hwif->drives[0].unmask   = hwif->drives[1].unmask   = 1;
-
        if (!hwif->dma_base)
                return;
 
@@ -394,12 +387,15 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
                hwif->serialized = hwif->mate->serialized = 1;
 }
 
-static ide_pci_device_t sl82c105_chipset __devinitdata = {
+static const struct ide_port_info sl82c105_chipset __devinitdata = {
        .name           = "W82C105",
        .init_chipset   = init_chipset_sl82c105,
        .init_hwif      = init_hwif_sl82c105,
        .enablebits     = {{0x40,0x01,0x01}, {0x40,0x10,0x10}},
-       .host_flags     = IDE_HFLAG_NO_AUTODMA | IDE_HFLAG_BOOTABLE,
+       .host_flags     = IDE_HFLAG_IO_32BIT |
+                         IDE_HFLAG_UNMASK_IRQS |
+                         IDE_HFLAG_NO_AUTODMA |
+                         IDE_HFLAG_BOOTABLE,
        .pio_mask       = ATA_PIO5,
 };
 
index 4f22dffdf8ef634c674c1c857bbed2459f86a965..eb4445b229ed431602bff6bfe7e65d94b8ac53d7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  linux/drivers/ide/pci/slc90e66.c   Version 0.18    Aug 9, 2007
+ *  linux/drivers/ide/pci/slc90e66.c   Version 0.19    Sep 24, 2007
  *
  *  Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org>
  *  Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com>
@@ -21,6 +21,8 @@
 
 #include <asm/io.h>
 
+static DEFINE_SPINLOCK(slc90e66_lock);
+
 static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio)
 {
        ide_hwif_t *hwif        = HWIF(drive);
@@ -40,7 +42,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio)
                                        { 2, 1 },
                                        { 2, 3 }, };
 
-       spin_lock_irqsave(&ide_lock, flags);
+       spin_lock_irqsave(&slc90e66_lock, flags);
        pci_read_config_word(dev, master_port, &master_data);
 
        if (pio > 1)
@@ -71,7 +73,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio)
        pci_write_config_word(dev, master_port, master_data);
        if (is_slave)
                pci_write_config_byte(dev, slave_port, slave_data);
-       spin_unlock_irqrestore(&ide_lock, flags);
+       spin_unlock_irqrestore(&slc90e66_lock, flags);
 }
 
 static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed)
@@ -146,7 +148,7 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif)
                hwif->cbl = (reg47 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
 }
 
-static ide_pci_device_t slc90e66_chipset __devinitdata = {
+static const struct ide_port_info slc90e66_chipset __devinitdata = {
        .name           = "SLC90E66",
        .init_hwif      = init_hwif_slc90e66,
        .enablebits     = {{0x41,0x80,0x80}, {0x43,0x80,0x80}},
index 631506e9b5d27884f4615ac810b6ce9002d99a6f..a66ebd14664e66149bce9ada527692a7acd7977b 100644 (file)
@@ -218,7 +218,7 @@ static unsigned int __devinit init_chipset_tc86c001(struct pci_dev *dev,
        return err;
 }
 
-static ide_pci_device_t tc86c001_chipset __devinitdata = {
+static const struct ide_port_info tc86c001_chipset __devinitdata = {
        .name           = "TC86C001",
        .init_chipset   = init_chipset_tc86c001,
        .init_hwif      = init_hwif_tc86c001,
index 30b52f62699a9f1fc40121f33109635c06880b88..a227c41d23a3110e0efaaec5cebe40ac7718cc2b 100644 (file)
@@ -102,7 +102,7 @@ static void __devinit init_hwif_triflex(ide_hwif_t *hwif)
        hwif->set_dma_mode = &triflex_set_mode;
 }
 
-static ide_pci_device_t triflex_device __devinitdata = {
+static const struct ide_port_info triflex_device __devinitdata = {
        .name           = "TRIFLEX",
        .init_hwif      = init_hwif_triflex,
        .enablebits     = {{0x80, 0x01, 0x01}, {0x80, 0x02, 0x02}},
index 140d486f6237a3dd386a0b6ff5888abc429c127a..5011ba22e36c4e23a73a39ca98700ef2c31de738 100644 (file)
@@ -250,7 +250,6 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif)
        u8 reg = 0;
        struct pci_dev *dev = hwif->pci_dev;
 
-       hwif->chipset = ide_trm290;
        cfgbase = pci_resource_start(dev, 4);
        if ((dev->class & 5) && cfgbase) {
                hwif->config_data = cfgbase;
@@ -320,9 +319,10 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif)
 #endif
 }
 
-static ide_pci_device_t trm290_chipset __devinitdata = {
+static const struct ide_port_info trm290_chipset __devinitdata = {
        .name           = "TRM290",
        .init_hwif      = init_hwif_trm290,
+       .chipset        = ide_trm290,
        .host_flags     = IDE_HFLAG_NO_ATAPI_DMA |
 #if 0 /* play it safe for now */
                          IDE_HFLAG_TRUST_BIOS_FOR_DMA |
index c8022a92a0e3fe490fd38ad4fb0cdeaf856fa3a4..a0d3c16b68ec4fdba9d4d54d9a2bcb6e7181860e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *
- * Version 3.49
+ * Version 3.50
  *
  * VIA IDE driver for Linux. Supported southbridges:
  *
@@ -422,65 +422,40 @@ static u8 __devinit via82cxxx_cable_detect(ide_hwif_t *hwif)
 
 static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif)
 {
-       struct via82cxxx_dev *vdev = pci_get_drvdata(hwif->pci_dev);
-       int i;
-
        hwif->set_pio_mode = &via_set_pio_mode;
        hwif->set_dma_mode = &via_set_drive;
 
-#ifdef CONFIG_PPC_CHRP
-       if(machine_is(chrp) && _chrp_type == _CHRP_Pegasos) {
-               hwif->irq = hwif->channel ? 15 : 14;
-       }
-#endif
-
-       for (i = 0; i < 2; i++) {
-               hwif->drives[i].io_32bit = 1;
-               hwif->drives[i].unmask = (vdev->via_config->flags & VIA_NO_UNMASK) ? 0 : 1;
-       }
-
        if (!hwif->dma_base)
                return;
 
-       hwif->ultra_mask = vdev->via_config->udma_mask;
-
        if (hwif->cbl != ATA_CBL_PATA40_SHORT)
                hwif->cbl = via82cxxx_cable_detect(hwif);
 }
 
-static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = {
-       {       /* 0 */
-               .name           = "VP_IDE",
-               .init_chipset   = init_chipset_via82cxxx,
-               .init_hwif      = init_hwif_via82cxxx,
-               .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}},
-               .host_flags     = IDE_HFLAG_PIO_NO_BLACKLIST |
-                                 IDE_HFLAG_PIO_NO_DOWNGRADE |
-                                 IDE_HFLAG_POST_SET_MODE |
-                                 IDE_HFLAG_NO_AUTODMA |
-                                 IDE_HFLAG_BOOTABLE,
-               .pio_mask       = ATA_PIO5,
-               .swdma_mask     = ATA_SWDMA2,
-               .mwdma_mask     = ATA_MWDMA2,
-       },{     /* 1 */
-               .name           = "VP_IDE",
-               .init_chipset   = init_chipset_via82cxxx,
-               .init_hwif      = init_hwif_via82cxxx,
-               .enablebits     = {{0x00,0x00,0x00}, {0x00,0x00,0x00}},
-               .host_flags     = IDE_HFLAG_PIO_NO_BLACKLIST |
-                                 IDE_HFLAG_PIO_NO_DOWNGRADE |
-                                 IDE_HFLAG_POST_SET_MODE |
-                                 IDE_HFLAG_BOOTABLE,
-               .pio_mask       = ATA_PIO5,
-               .swdma_mask     = ATA_SWDMA2,
-               .mwdma_mask     = ATA_MWDMA2,
-       }
+static const struct ide_port_info via82cxxx_chipset __devinitdata = {
+       .name           = "VP_IDE",
+       .init_chipset   = init_chipset_via82cxxx,
+       .init_hwif      = init_hwif_via82cxxx,
+       .enablebits     = { { 0x40, 0x02, 0x02 }, { 0x40, 0x01, 0x01 } },
+       .host_flags     = IDE_HFLAG_PIO_NO_BLACKLIST |
+                         IDE_HFLAG_PIO_NO_DOWNGRADE |
+                         IDE_HFLAG_POST_SET_MODE |
+                         IDE_HFLAG_IO_32BIT |
+                         IDE_HFLAG_BOOTABLE,
+       .pio_mask       = ATA_PIO5,
+       .swdma_mask     = ATA_SWDMA2,
+       .mwdma_mask     = ATA_MWDMA2,
 };
 
 static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
        struct pci_dev *isa = NULL;
        struct via_isa_bridge *via_config;
+       u8 idx = id->driver_data;
+       struct ide_port_info d;
+
+       d = via82cxxx_chipset;
+
        /*
         * Find the ISA bridge and check we know what it is.
         */
@@ -490,7 +465,23 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i
                printk(KERN_WARNING "VP_IDE: Unknown VIA SouthBridge, disabling DMA.\n");
                return -ENODEV;
        }
-       return ide_setup_pci_device(dev, &via82cxxx_chipsets[id->driver_data]);
+
+       if (idx == 0)
+               d.host_flags |= IDE_HFLAG_NO_AUTODMA;
+       else
+               d.enablebits[1].reg = d.enablebits[0].reg = 0;
+
+       if ((via_config->flags & VIA_NO_UNMASK) == 0)
+               d.host_flags |= IDE_HFLAG_UNMASK_IRQS;
+
+#ifdef CONFIG_PPC_CHRP
+       if (machine_is(chrp) && _chrp_type == _CHRP_Pegasos)
+               d.host_flags |= IDE_HFLAG_FORCE_LEGACY_IRQS;
+#endif
+
+       d.udma_mask = via_config->udma_mask;
+
+       return ide_setup_pci_device(dev, &d);
 }
 
 static const struct pci_device_id via_pci_tbl[] = {
index df2e92034f5d3719658008a1ec1e3eeee059ba85..5f0da35ab5ad0a3ef977ab67c8145c0733f47245 100644 (file)
@@ -316,8 +316,8 @@ m8xx_ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port,
 
        ide_hwifs[data_port].pio_mask = ATA_PIO4;
        ide_hwifs[data_port].set_pio_mode = m8xx_ide_set_pio_mode;
+       ide_hwifs[data_port].ack_intr = (ide_ack_intr_t *)ide_interrupt_ack;
 
-       hw->ack_intr = (ide_ack_intr_t *) ide_interrupt_ack;
        /* Enable Harddisk Interrupt,
         * and make it edge sensitive
         */
@@ -402,8 +402,8 @@ void m8xx_ide_init_hwif_ports (hw_regs_t *hw,
 
        ide_hwifs[data_port].pio_mask = ATA_PIO4;
        ide_hwifs[data_port].set_pio_mode = m8xx_ide_set_pio_mode;
+       ide_hwifs[data_port].ack_intr = (ide_ack_intr_t *)ide_interrupt_ack;
 
-       hw->ack_intr = (ide_ack_intr_t *) ide_interrupt_ack;
        /* Enable Harddisk Interrupt,
         * and make it edge sensitive
         */
index c55479356768da5b2b77652535999bb6b9117f09..816b5311dad647febb4577991f53102c4e537d1b 100644 (file)
@@ -1039,6 +1039,8 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
 {
        struct device_node *np = pmif->node;
        const int *bidp;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
+       hw_regs_t hw;
 
        pmif->cable_80 = 0;
        pmif->broken_dma = pmif->broken_dma_warn = 0;
@@ -1124,8 +1126,9 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
        /* Tell common code _not_ to mess with resources */
        hwif->mmio = 1;
        hwif->hwif_data = pmif;
-       pmac_ide_init_hwif_ports(&hwif->hw, pmif->regbase, 0, &hwif->irq);
-       memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
+       memset(&hw, 0, sizeof(hw));
+       pmac_ide_init_hwif_ports(&hw, pmif->regbase, 0, &hwif->irq);
+       memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports));
        hwif->chipset = ide_pmac;
        hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET] || pmif->mediabay;
        hwif->hold = pmif->mediabay;
@@ -1163,10 +1166,9 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
                pmac_ide_setup_dma(pmif, hwif);
 #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
 
-       /* We probe the hwif now */
-       probe_hwif_init(hwif);
+       idx[0] = hwif->index;
 
-       ide_proc_register_port(hwif);
+       ide_device_add(idx);
 
        return 0;
 }
index fff567bcedbeed1496603a06c4caec9cc305f73a..02d14bf85ab2112b11a589e8fad9c73d428686bb 100644 (file)
@@ -147,15 +147,15 @@ static int ide_setup_pci_baseregs (struct pci_dev *dev, const char *name)
 #ifdef CONFIG_BLK_DEV_IDEDMA_PCI
 /**
  *     ide_get_or_set_dma_base         -       setup BMIBA
- *     @d: IDE pci device data
- *     @hwif: Interface
+ *     @d: IDE port info
+ *     @hwif: IDE interface
  *
  *     Fetch the DMA Bus-Master-I/O-Base-Address (BMIBA) from PCI space.
  *     Where a device has a partner that is already in DMA mode we check
  *     and enforce IDE simplex rules.
  */
 
-static unsigned long ide_get_or_set_dma_base(ide_pci_device_t *d, ide_hwif_t *hwif)
+static unsigned long ide_get_or_set_dma_base(const struct ide_port_info *d, ide_hwif_t *hwif)
 {
        unsigned long   dma_base = 0;
        struct pci_dev  *dev = hwif->pci_dev;
@@ -225,10 +225,11 @@ static unsigned long ide_get_or_set_dma_base(ide_pci_device_t *d, ide_hwif_t *hw
 }
 #endif /* CONFIG_BLK_DEV_IDEDMA_PCI */
 
-void ide_setup_pci_noise (struct pci_dev *dev, ide_pci_device_t *d)
+void ide_setup_pci_noise(struct pci_dev *dev, const struct ide_port_info *d)
 {
-       printk(KERN_INFO "%s: IDE controller at PCI slot %s\n",
-                        d->name, pci_name(dev));
+       printk(KERN_INFO "%s: IDE controller (0x%04x:0x%04x rev 0x%02x) at "
+                        " PCI slot %s\n", d->name, dev->vendor, dev->device,
+                        dev->revision, pci_name(dev));
 }
 
 EXPORT_SYMBOL_GPL(ide_setup_pci_noise);
@@ -237,15 +238,15 @@ EXPORT_SYMBOL_GPL(ide_setup_pci_noise);
 /**
  *     ide_pci_enable  -       do PCI enables
  *     @dev: PCI device
- *     @d: IDE pci device data
+ *     @d: IDE port info
  *
  *     Enable the IDE PCI device. We attempt to enable the device in full
  *     but if that fails then we only need BAR4 so we will enable that.
  *     
  *     Returns zero on success or an error code
  */
-static int ide_pci_enable(struct pci_dev *dev, ide_pci_device_t *d)
+
+static int ide_pci_enable(struct pci_dev *dev, const struct ide_port_info *d)
 {
        int ret;
 
@@ -260,9 +261,9 @@ static int ide_pci_enable(struct pci_dev *dev, ide_pci_device_t *d)
        }
 
        /*
-        * assume all devices can do 32-bit dma for now. we can add a
-        * dma mask field to the ide_pci_device_t if we need it (or let
-        * lower level driver set the dma mask)
+        * assume all devices can do 32-bit DMA for now, we can add
+        * a DMA mask field to the struct ide_port_info if we need it
+        * (or let lower level driver set the DMA mask)
         */
        ret = pci_set_dma_mask(dev, DMA_32BIT_MASK);
        if (ret < 0) {
@@ -284,13 +285,13 @@ out:
 /**
  *     ide_pci_configure       -       configure an unconfigured device
  *     @dev: PCI device
- *     @d: IDE pci device data
+ *     @d: IDE port info
  *
  *     Enable and configure the PCI device we have been passed.
  *     Returns zero on success or an error code.
  */
-static int ide_pci_configure(struct pci_dev *dev, ide_pci_device_t *d)
+
+static int ide_pci_configure(struct pci_dev *dev, const struct ide_port_info *d)
 {
        u16 pcicmd = 0;
        /*
@@ -318,15 +319,15 @@ static int ide_pci_configure(struct pci_dev *dev, ide_pci_device_t *d)
 
 /**
  *     ide_pci_check_iomem     -       check a register is I/O
- *     @dev: pci device
- *     @d: ide_pci_device
- *     @bar: bar number
+ *     @dev: PCI device
+ *     @d: IDE port info
+ *     @bar: BAR number
  *
  *     Checks if a BAR is configured and points to MMIO space. If so
  *     print an error and return an error code. Otherwise return 0
  */
-static int ide_pci_check_iomem(struct pci_dev *dev, ide_pci_device_t *d, int bar)
+
+static int ide_pci_check_iomem(struct pci_dev *dev, const struct ide_port_info *d, int bar)
 {
        ulong flags = pci_resource_flags(dev, bar);
        
@@ -348,7 +349,7 @@ static int ide_pci_check_iomem(struct pci_dev *dev, ide_pci_device_t *d, int bar
 /**
  *     ide_hwif_configure      -       configure an IDE interface
  *     @dev: PCI device holding interface
- *     @d: IDE pci data
+ *     @d: IDE port info
  *     @mate: Paired interface if any
  *
  *     Perform the initial set up for the hardware interface structure. This
@@ -357,8 +358,8 @@ static int ide_pci_check_iomem(struct pci_dev *dev, ide_pci_device_t *d, int bar
  *
  *     Returns the new hardware interface structure, or NULL on a failure
  */
-static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, ide_pci_device_t *d, ide_hwif_t *mate, int port, int irq)
+
+static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, const struct ide_port_info *d, ide_hwif_t *mate, int port, int irq)
 {
        unsigned long ctl = 0, base = 0;
        ide_hwif_t *hwif;
@@ -387,19 +388,20 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, ide_pci_device_t *d,
                return NULL;    /* no room in ide_hwifs[] */
        if (hwif->io_ports[IDE_DATA_OFFSET] != base ||
            hwif->io_ports[IDE_CONTROL_OFFSET] != (ctl | 2)) {
-               memset(&hwif->hw, 0, sizeof(hwif->hw));
-#ifndef IDE_ARCH_OBSOLETE_INIT
-               ide_std_init_ports(&hwif->hw, base, (ctl | 2));
-               hwif->hw.io_ports[IDE_IRQ_OFFSET] = 0;
+               hw_regs_t hw;
+
+               memset(&hw, 0, sizeof(hw));
+#ifndef CONFIG_IDE_ARCH_OBSOLETE_INIT
+               ide_std_init_ports(&hw, base, ctl | 2);
 #else
-               ide_init_hwif_ports(&hwif->hw, base, (ctl | 2), NULL);
+               ide_init_hwif_ports(&hw, base, ctl | 2, NULL);
 #endif
-               memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
+               memcpy(hwif->io_ports, hw.io_ports, sizeof(hwif->io_ports));
                hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET];
        }
-       hwif->chipset = ide_pci;
+       hwif->chipset = d->chipset ? d->chipset : ide_pci;
        hwif->pci_dev = dev;
-       hwif->cds = (struct ide_pci_device_s *) d;
+       hwif->cds = d;
        hwif->channel = port;
 
        if (!hwif->irq)
@@ -414,21 +416,17 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, ide_pci_device_t *d,
 /**
  *     ide_hwif_setup_dma      -       configure DMA interface
  *     @dev: PCI device
- *     @d: IDE pci data
- *     @hwif: Hardware interface we are configuring
+ *     @d: IDE port info
+ *     @hwif: IDE interface
  *
  *     Set up the DMA base for the interface. Enable the master bits as
  *     necessary and attempt to bring the device DMA into a ready to use
  *     state
  */
-#ifndef CONFIG_BLK_DEV_IDEDMA_PCI
-static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwif_t *hwif)
-{
-}
-#else
-static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwif_t *hwif)
+
+static void ide_hwif_setup_dma(struct pci_dev *dev, const struct ide_port_info *d, ide_hwif_t *hwif)
 {
+#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
        u16 pcicmd;
 
        pci_read_config_word(dev, PCI_COMMAND, &pcicmd);
@@ -460,13 +458,13 @@ static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwi
                                "(BIOS)\n", hwif->name, d->name);
                }
        }
-}
 #endif /* CONFIG_BLK_DEV_IDEDMA_PCI*/
+}
 
 /**
  *     ide_setup_pci_controller        -       set up IDE PCI
  *     @dev: PCI device
- *     @d: IDE PCI data
+ *     @d: IDE port info
  *     @noisy: verbose flag
  *     @config: returned as 1 if we configured the hardware
  *
@@ -474,8 +472,8 @@ static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwi
  *     up the PCI side of the device, checks that the device is enabled
  *     and enables it if need be
  */
-static int ide_setup_pci_controller(struct pci_dev *dev, ide_pci_device_t *d, int noisy, int *config)
+
+static int ide_setup_pci_controller(struct pci_dev *dev, const struct ide_port_info *d, int noisy, int *config)
 {
        int ret;
        u16 pcicmd;
@@ -500,9 +498,6 @@ static int ide_setup_pci_controller(struct pci_dev *dev, ide_pci_device_t *d, in
                printk(KERN_INFO "%s: device enabled (Linux)\n", d->name);
        }
 
-       if (noisy)
-               printk(KERN_INFO "%s: chipset revision %d\n",
-                                d->name, dev->revision);
 out:
        return ret;
 }
@@ -510,9 +505,9 @@ out:
 /**
  *     ide_pci_setup_ports     -       configure ports/devices on PCI IDE
  *     @dev: PCI device
- *     @d: IDE pci device info
+ *     @d: IDE port info
  *     @pciirq: IRQ line
- *     @index: ata index to update
+ *     @idx: ATA index table to update
  *
  *     Scan the interfaces attached to this device and do any
  *     necessary per port setup. Attach the devices and ask the
@@ -522,26 +517,25 @@ out:
  *     but is also used directly as a helper function by some controllers
  *     where the chipset setup is not the default PCI IDE one.
  */
-void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, ata_index_t *index)
+
+void ide_pci_setup_ports(struct pci_dev *dev, const struct ide_port_info *d, int pciirq, u8 *idx)
 {
        int channels = (d->host_flags & IDE_HFLAG_SINGLE) ? 1 : 2, port;
-       int at_least_one_hwif_enabled = 0;
        ide_hwif_t *hwif, *mate = NULL;
        u8 tmp;
 
-       index->all = 0xf0f0;
-
        /*
         * Set up the IDE ports
         */
-        
+
        for (port = 0; port < channels; ++port) {
-               ide_pci_enablebit_t *e = &(d->enablebits[port]);
-       
+               const ide_pci_enablebit_t *e = &(d->enablebits[port]);
+
                if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) ||
-                   (tmp & e->mask) != e->val))
+                   (tmp & e->mask) != e->val)) {
+                       printk(KERN_INFO "%s: IDE port disabled\n", d->name);
                        continue;       /* port not enabled */
+               }
 
                if ((hwif = ide_hwif_configure(dev, d, mate, port, pciirq)) == NULL)
                        continue;
@@ -549,11 +543,7 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a
                /* setup proper ancestral information */
                hwif->gendev.parent = &dev->dev;
 
-               if (hwif->channel) {
-                       index->b.high = hwif->index;
-               } else {
-                       index->b.low = hwif->index;
-               }
+               *(idx + port) = hwif->index;
 
                
                if (d->init_iops)
@@ -562,15 +552,28 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a
                if ((d->host_flags & IDE_HFLAG_NO_DMA) == 0)
                        ide_hwif_setup_dma(dev, d, hwif);
 
-               if ((d->host_flags & IDE_HFLAG_LEGACY_IRQS) && hwif->irq == 0)
+               if ((!hwif->irq && (d->host_flags & IDE_HFLAG_LEGACY_IRQS)) ||
+                   (d->host_flags & IDE_HFLAG_FORCE_LEGACY_IRQS))
                        hwif->irq = port ? 15 : 14;
 
+               hwif->fixup = d->fixup;
+
                hwif->host_flags = d->host_flags;
                hwif->pio_mask = d->pio_mask;
 
                if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate)
                        hwif->mate->serialized = hwif->serialized = 1;
 
+               if (d->host_flags & IDE_HFLAG_IO_32BIT) {
+                       hwif->drives[0].io_32bit = 1;
+                       hwif->drives[1].io_32bit = 1;
+               }
+
+               if (d->host_flags & IDE_HFLAG_UNMASK_IRQS) {
+                       hwif->drives[0].unmask = 1;
+                       hwif->drives[1].unmask = 1;
+               }
+
                if (hwif->dma_base) {
                        hwif->swdma_mask = d->swdma_mask;
                        hwif->mwdma_mask = d->mwdma_mask;
@@ -580,6 +583,9 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a
                hwif->drives[0].autotune = 1;
                hwif->drives[1].autotune = 1;
 
+               if (d->host_flags & IDE_HFLAG_RQSIZE_256)
+                       hwif->rqsize = 256;
+
                if (d->init_hwif)
                        /* Call chipset-specific routine
                         * for each enabled hwif
@@ -587,10 +593,7 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a
                        d->init_hwif(hwif);
 
                mate = hwif;
-               at_least_one_hwif_enabled = 1;
        }
-       if (!at_least_one_hwif_enabled)
-               printk(KERN_INFO "%s: neither IDE port enabled (BIOS)\n", d->name);
 }
 
 EXPORT_SYMBOL_GPL(ide_pci_setup_ports);
@@ -602,13 +605,13 @@ EXPORT_SYMBOL_GPL(ide_pci_setup_ports);
  *
  * One thing that is not standardized is the location of the
  * primary/secondary interface "enable/disable" bits.  For chipsets that
- * we "know" about, this information is in the ide_pci_device_t struct;
+ * we "know" about, this information is in the struct ide_port_info;
  * for all other chipsets, we just assume both interfaces are enabled.
  */
-static int do_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d,
-                                  ata_index_t *index, u8 noisy)
+static int do_ide_setup_pci_device(struct pci_dev *dev,
+                                  const struct ide_port_info *d,
+                                  u8 *idx, u8 noisy)
 {
-       static ata_index_t ata_index = { .b = { .low = 0xff, .high = 0xff } };
        int tried_config = 0;
        int pciirq, ret;
 
@@ -658,51 +661,35 @@ static int do_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d,
 
        /* FIXME: silent failure can happen */
 
-       *index = ata_index;
-       ide_pci_setup_ports(dev, d, pciirq, index);
+       ide_pci_setup_ports(dev, d, pciirq, idx);
 out:
        return ret;
 }
 
-int ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d)
+int ide_setup_pci_device(struct pci_dev *dev, const struct ide_port_info *d)
 {
-       ide_hwif_t *hwif = NULL, *mate = NULL;
-       ata_index_t index_list;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
        int ret;
 
-       ret = do_ide_setup_pci_device(dev, d, &index_list, 1);
-       if (ret < 0)
-               goto out;
+       ret = do_ide_setup_pci_device(dev, d, &idx[0], 1);
 
-       if ((index_list.b.low & 0xf0) != 0xf0)
-               hwif = &ide_hwifs[index_list.b.low];
-       if ((index_list.b.high & 0xf0) != 0xf0)
-               mate = &ide_hwifs[index_list.b.high];
+       if (ret >= 0)
+               ide_device_add(idx);
 
-       if (hwif)
-               probe_hwif_init_with_fixup(hwif, d->fixup);
-       if (mate)
-               probe_hwif_init_with_fixup(mate, d->fixup);
-
-       if (hwif)
-               ide_proc_register_port(hwif);
-       if (mate)
-               ide_proc_register_port(mate);
-out:
        return ret;
 }
 
 EXPORT_SYMBOL_GPL(ide_setup_pci_device);
 
 int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2,
-                         ide_pci_device_t *d)
+                         const struct ide_port_info *d)
 {
        struct pci_dev *pdev[] = { dev1, dev2 };
-       ata_index_t index_list[2];
        int ret, i;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        for (i = 0; i < 2; i++) {
-               ret = do_ide_setup_pci_device(pdev[i], d, index_list + i, !i);
+               ret = do_ide_setup_pci_device(pdev[i], d, &idx[i*2], !i);
                /*
                 * FIXME: Mom, mom, they stole me the helper function to undo
                 * do_ide_setup_pci_device() on the first device!
@@ -711,25 +698,7 @@ int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2,
                        goto out;
        }
 
-       for (i = 0; i < 2; i++) {
-               u8 idx[2] = { index_list[i].b.low, index_list[i].b.high };
-               int j;
-
-               for (j = 0; j < 2; j++) {
-                       if ((idx[j] & 0xf0) != 0xf0)
-                               probe_hwif_init(ide_hwifs + idx[j]);
-               }
-       }
-
-       for (i = 0; i < 2; i++) {
-               u8 idx[2] = { index_list[i].b.low, index_list[i].b.high };
-               int j;
-
-               for (j = 0; j < 2; j++) {
-                       if ((idx[j] & 0xf0) != 0xf0)
-                               ide_proc_register_port(ide_hwifs + idx[j]);
-               }
-       }
+       ide_device_add(idx);
 out:
        return ret;
 }
@@ -754,9 +723,6 @@ static LIST_HEAD(ide_pci_drivers);
  *     hands the controllers off to the core PCI code to do the rest of
  *     the work.
  *
- *     The driver_data of the driver table must point to an ide_pci_device_t
- *     describing the interface.
- *
  *     Returns are the same as for pci_register_driver
  */
 
index ed3d2da0c48534e30473b2888a3d613b8a2273ca..3089d738232530d1bc873a00bd8eb1a255104483 100644 (file)
@@ -24,7 +24,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  *
  * Should you need to contact me, the author, you can do so by
- * e-mail - mail your message to <deneux@ifrance.com>
+ * e-mail - mail your message to <johann.deneux@gmail.com>
  */
 
 #include <linux/types.h>
index ec1b6cfefcd3274d9e645e7ee2e944dd0ded0d93..bfc6061f1554fdf72c20d0e9d22631921f6fc052 100644 (file)
@@ -136,7 +136,8 @@ static int gameport_measure_speed(struct gameport *gameport)
        }
 
        gameport_close(gameport);
-       return (cpu_data[raw_smp_processor_id()].loops_per_jiffy * (unsigned long)HZ / (1000 / 50)) / (tx < 1 ? 1 : tx);
+       return (cpu_data(raw_smp_processor_id()).loops_per_jiffy *
+               (unsigned long)HZ / (1000 / 50)) / (tx < 1 ? 1 : tx);
 
 #else
 
index 27fc475bd3a19166eb42bcef23d09a0faa24b6f9..a6ca9d5e252f089f9118efd6f0d01693920b4973 100644 (file)
@@ -4,7 +4,7 @@
  *  Copyright (c) 1999-2001 Vojtech Pavlik
  *
  *  Based on the work of:
- *     Andree Borrmann         Mats Sjövall
+ *     Andree Borrmann         Mats Sjövall
  */
 
 /*
index 17ae42bf9ffd8b810deee67d4868a09df273cfcc..74daff49ab6e1e146415a13c6103ef2e30ba8bb1 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Makefile for the I-Force driver
 #
-# By Johann Deneux <deneux@ifrance.com>
+# By Johann Deneux <johann.deneux@gmail.com>
 #
 
 # Goal definition
index 76f1969552c5e453c93a3db263e1d7d834c66061..babc913d5492b617b388ee3eb7781ce0facd535e 100644 (file)
@@ -4,7 +4,7 @@
  * OMAP Keypad Driver
  *
  * Copyright (C) 2003 Nokia Corporation
- * Written by Timo Teräs <ext-timo.teras@nokia.com>
+ * Written by Timo Teräs <ext-timo.teras@nokia.com>
  *
  * Added support for H2 & H3 Keypad
  * Copyright (C) 2004 Texas Instruments
@@ -481,6 +481,6 @@ static void __exit omap_kp_exit(void)
 module_init(omap_kp_init);
 module_exit(omap_kp_exit);
 
-MODULE_AUTHOR("Timo Teräs");
+MODULE_AUTHOR("Timo Teräs");
 MODULE_DESCRIPTION("OMAP Keypad Driver");
 MODULE_LICENSE("GPL");
index 7acc6351bb44c9156c7afd93aa7671e4959a4a2a..8f5c7b90187de92b11a3ca005d04c532d934048d 100644 (file)
@@ -70,9 +70,9 @@ config INPUT_WISTRON_BTNS
        select LEDS_CLASS
        select CHECK_SIGNATURE
        help
-         Say Y here for support of Winstron laptop button interface, used on
+         Say Y here for support of Wistron laptop button interfaces, used on
          laptops of various brands, including Acer and Fujitsu-Siemens. If
-         available, mail and wifi leds will be controlable via /sys/class/leds.
+         available, mail and wifi LEDs will be controllable via /sys/class/leds.
 
          To compile this driver as a module, choose M here: the module will
          be called wistron_btns.
index da316d13d7f578cdd6b3b0aa8f1a122f8c055ccd..21a9c0b69a1f461befa62691f0a35baaa99641a6 100644 (file)
@@ -906,7 +906,7 @@ static void psmouse_activate(struct psmouse *psmouse)
 
 /*
  * psmouse_deactivate() puts the mouse into poll mode so that we don't get motion
- * reports from it unless we explicitely request it.
+ * reports from it unless we explicitly request it.
  */
 
 static void psmouse_deactivate(struct psmouse *psmouse)
index 4a321576f34518181b1d3b04a201746956d32561..404eedd5ffa2b7e039db5c7508971450e7ae1a4c 100644 (file)
@@ -330,7 +330,7 @@ vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse)
 
        /*
         * Check for Power-On-Reset packets. These are sent out
-        * after plugging the mouse in, or when explicitely
+        * after plugging the mouse in, or when explicitly
         * requested by sending 'T'.
         *
         * [0]: 1       0       1       0       R3      R2      R1      R0
index 09ea50dd3459d536a6a4f9414f6a56a8be3f2758..819ea85576a39be065e75ff71f721b25d14809fd 100644 (file)
@@ -126,7 +126,7 @@ act2000_isa_enable_irq(act2000_card * card)
 
 /*
  * Install interrupt handler, enable irq on card.
- * If irq is -1, choose next free irq, else irq is given explicitely.
+ * If irq is -1, choose next free irq, else irq is given explicitly.
  */
 int
 act2000_isa_config_irq(act2000_card * card, short irq)
index 82edc1c1db7a685127498fcfecffc46db5e594dc..4d425c644d413b7d4080ea36dd0bdb1b0f694b6d 100644 (file)
@@ -321,7 +321,7 @@ void sendf(APPL * appl, word command, dword Id, word Number, byte * format, ...)
                                  DBG_BLK((((char *)(long)GET_DWORD(&msg.info.data_b3_ind.Data)) + i,
                                        ((dlength - i) < 256) ? (dlength - i) : 256))
                                  if (!(myDriverDebugHandle.dbgMask & DL_PRV0))
-                                         break; /* not more if not explicitely requested */
+                                         break; /* not more if not explicitly requested */
                                }
                        }
                        break;
@@ -965,7 +965,7 @@ static u16 diva_send_message(struct capi_ctr *ctrl,
                                        ((GET_WORD(&msg->info.data_b3_req.Data_Length) - j) <
                                          256) ? (GET_WORD(&msg->info.data_b3_req.Data_Length) - j) : 256))
                                if (!(myDriverDebugHandle.dbgMask & DL_PRV0))
-                                       break;  /* not more if not explicitely requested */
+                                       break;  /* not more if not explicitly requested */
                        }
                }
 #endif
index 3b19caeba25880971a708213519ab734dc5ce343..c0d7036404a5920a7404a1d7c8acd9bc591df93d 100644 (file)
@@ -767,7 +767,7 @@ Amd7930_init(struct IsdnCardState *cs)
                 /* read */
                 if (*ptr++ >= 0x100) {
                        if (cmd < 8)
-                                /* setzt Register zurück */
+                                /* reset register */
                                 rByteAMD(cs, cmd);
                        else {
                                wByteAMD(cs, 0x00, cmd);
index b73027ff50e88784747325f3367ae1aaf26f3bce..39f421ed8de82d199e5856dd262c7f4ee4882036 100644 (file)
 static const char *enternow_pci_rev = "$Revision: 1.1.4.5 $";
 
 
-/* für PowerISDN PCI */
+/* for PowerISDN PCI */
 #define TJ_AMD_IRQ                                              0x20
 #define TJ_LED1                                                 0x40
 #define TJ_LED2                                                 0x80
 
 
-/* Das Fenster zum AMD...
- * Ab Adresse hw.njet.base + TJ_AMD_PORT werden vom AMD jeweils 8 Bit in
- * den TigerJet i/o-Raum gemappt
- * -> 0x01 des AMD bei hw.njet.base + 0C4 */
+/* The window to [the] AMD [chip]...
+ * From address hw.njet.base + TJ_AMD_PORT onwards, the AMD
+ * maps [consecutive/multiple] 8 bits into the TigerJet I/O space
+ * -> 0x01 of the AMD at hw.njet.base + 0C4 */
 #define TJ_AMD_PORT                                             0xC0
 
 
@@ -96,11 +96,11 @@ static const char *enternow_pci_rev = "$Revision: 1.1.4.5 $";
 static unsigned char
 ReadByteAmd7930(struct IsdnCardState *cs, unsigned char offset)
 {
-       /* direktes Register */
+       /* direct register */
        if(offset < 8)
                return (inb(cs->hw.njet.isac + 4*offset));
 
-       /* indirektes Register */
+       /* indirect register */
        else {
                outb(offset, cs->hw.njet.isac + 4*AMD_CR);
                return(inb(cs->hw.njet.isac + 4*AMD_DR));
@@ -111,11 +111,11 @@ ReadByteAmd7930(struct IsdnCardState *cs, unsigned char offset)
 static void
 WriteByteAmd7930(struct IsdnCardState *cs, unsigned char offset, unsigned char value)
 {
-       /* direktes Register */
+       /* direct register */
        if(offset < 8)
                outb(value, cs->hw.njet.isac + 4*offset);
 
-       /* indirektes Register */
+       /* indirect register */
        else {
                outb(offset, cs->hw.njet.isac + 4*AMD_CR);
                outb(value, cs->hw.njet.isac + 4*AMD_DR);
index 077080aca79973366d8c13ccce686f4ec0d226f1..fba8b624ffcf19538c8a9821e227351502a11f6a 100644 (file)
@@ -1,6 +1,6 @@
 /* $Id: hfc_pci.c,v 1.48.2.4 2004/02/11 13:21:33 keil Exp $
  *
- * low level driver for CCD´s hfc-pci based cards
+ * low level driver for CCD's hfc-pci based cards
  *
  * Author       Werner Cornelius
  *              based on existing driver for CCD hfc ISA cards
index 268dced6c34a9e33c24bf508ce2b083c9414f6c1..c69a77a80062f970bc289c543a9eded80e35aa73 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * isdnhdlc.c  --  General purpose ISDN HDLC decoder.
  *
- *Copyright (C) 2002   Wolfgang Mües      <wolfgang@iksw-muees.de>
+ *Copyright (C) 2002   Wolfgang Mües      <wolfgang@iksw-muees.de>
  *             2001    Frode Isaksen      <fisaksen@bewan.com>
  *              2001   Kai Germaschewski  <kai.germaschewski@gmx.de>
  *
@@ -27,7 +27,7 @@
 
 /*-------------------------------------------------------------------*/
 
-MODULE_AUTHOR("Wolfgang Mües <wolfgang@iksw-muees.de>, "
+MODULE_AUTHOR("Wolfgang Mües <wolfgang@iksw-muees.de>, "
              "Frode Isaksen <fisaksen@bewan.com>, "
              "Kai Germaschewski <kai.germaschewski@gmx.de>");
 MODULE_DESCRIPTION("General purpose ISDN HDLC decoder");
index 45167d2f8fb0a303aacdcf9ada1eb36352ca168a..cf0a95a24015dbd1e32f19e71b35b5f3f8cf669d 100644 (file)
@@ -5,7 +5,7 @@
  * Neccessary because some ISDN devices don't have HDLC
  * controllers. Also included: a bit reversal table.
  *
- *Copyright (C) 2002    Wolfgang Mües      <wolfgang@iksw-muees.de>
+ *Copyright (C) 2002    Wolfgang Mües      <wolfgang@iksw-muees.de>
  *             2001    Frode Isaksen      <fisaksen@bewan.com>
  *              2001   Kai Germaschewski  <kai.germaschewski@gmx.de>
  *
index 43d61d1bc5b629103e365a5eb2405aff9743e14f..70840a710acfe1938323f8436a07652892486310 100644 (file)
@@ -304,7 +304,7 @@ initjade(struct IsdnCardState *cs)
        cs->BC_Write_Reg(cs, 1, jade_HDLC_IMR,  0x00);
        /* Setup host access to hdlc controller */
        jade_write_indirect(cs, jade_HDLCCNTRACCESS, (jadeINDIRECT_HAH1|jadeINDIRECT_HAH2));
-       /* Unmask HDLC int (don´t forget DSP int later on)*/
+       /* Unmask HDLC int (don't forget DSP int later on)*/
        cs->BC_Write_Reg(cs, -1,jade_INT, (jadeINT_HDLC1|jadeINT_HDLC2));
 
        /* once again TRANSPARENT */    
index 7b55e151f1b009fb78f402680dbf75849db10d8c..ac5a91ccde8102b18a3ae39a7a309e6137f9b978 100644 (file)
@@ -15,9 +15,9 @@
 
 /*
  *        Documentation:
- *        - "Common ISDN API - Perfil Português - Versão 2.1",
+ *        - "Common ISDN API - Perfil Português - Versão 2.1",
  *           Telecom Portugal, Fev 1992.
- *        - "Common ISDN API - Especificação de protocolos para 
+ *        - "Common ISDN API - Especificação de protocolos para
  *           acesso aos canais B", Inesc, Jan 1994.
  */
 
index 50914439d861d74072bf9af8d7ac0024469eb2fe..0fd640751294ae143be658800fdffc7e1430da44 100644 (file)
@@ -43,7 +43,7 @@ static void s3c24xx_led_set(struct led_classdev *led_cdev,
        struct s3c24xx_gpio_led *led = to_gpio(led_cdev);
        struct s3c24xx_led_platdata *pd = led->pdata;
 
-       /* there will be a sort delay between setting the output and
+       /* there will be a short delay between setting the output and
         * going from output to input when using tristate. */
 
        s3c2410_gpio_setpin(pd->gpio, (value ? 1 : 0) ^
index c803d2bba65db3148a3bfd3060deebf4ae9a69af..48d647abea460ce914168072012208690c4c57d5 100644 (file)
@@ -563,7 +563,7 @@ static void media_bay_step(int i)
                                ide_init_hwif_ports(&hw, (unsigned long) bay->cd_base, (unsigned long) 0, NULL);
                                hw.irq = bay->cd_irq;
                                hw.chipset = ide_pmac;
-                               bay->cd_index = ide_register_hw(&hw, 0, NULL);
+                               bay->cd_index = ide_register_hw(&hw, NULL, 0, NULL);
                                pmu_resume();
                        }
                        if (bay->cd_index == -1) {
index f7c509b7a8ea1eaa5c25166f5ec51e3f0840e95d..dc741d3a4531cbe365aa8b89256a0337782b5b00 100644 (file)
@@ -1521,7 +1521,7 @@ pmu_sr_intr(void)
                        req = current_req;
                        /* 
                         * For PMU sleep and freq change requests, we lock the
-                        * PMU until it's explicitely unlocked. This avoids any
+                        * PMU until it's explicitly unlocked. This avoids any
                         * spurrious event polling getting in
                         */
                        current_req = req->next;
index 34a8c60a254a690c288b112ff71d7cdf0a306d6a..9b6fbf044fd803bb04836f36381ea8ec9bdc58f6 100644 (file)
@@ -267,6 +267,12 @@ config DM_MULTIPATH_RDAC
        ---help---
          Multipath support for LSI/Engenio RDAC.
 
+config DM_MULTIPATH_HP
+        tristate "HP MSA multipath support (EXPERIMENTAL)"
+        depends on DM_MULTIPATH && BLK_DEV_DM && EXPERIMENTAL
+        ---help---
+          Multipath support for HP MSA (Active/Passive) series hardware.
+
 config DM_DELAY
        tristate "I/O delaying target (EXPERIMENTAL)"
        depends on BLK_DEV_DM && EXPERIMENTAL
@@ -276,4 +282,10 @@ config DM_DELAY
 
        If unsure, say N.
 
+config DM_UEVENT
+       bool "DM uevents (EXPERIMENTAL)"
+       depends on BLK_DEV_DM && EXPERIMENTAL
+       ---help---
+       Generate udev events for DM events.
+
 endif # MD
index c49366cdc05d07e991a081ac55ea4eaf6e8f1b3a..d9aa7edb87801ec0e7f36b7614f4a23f97827e5c 100644 (file)
@@ -8,6 +8,7 @@ dm-multipath-objs := dm-hw-handler.o dm-path-selector.o dm-mpath.o
 dm-snapshot-objs := dm-snap.o dm-exception-store.o
 dm-mirror-objs := dm-log.o dm-raid1.o
 dm-rdac-objs   := dm-mpath-rdac.o
+dm-hp-sw-objs  := dm-mpath-hp-sw.o
 md-mod-objs     := md.o bitmap.o
 raid456-objs   := raid5.o raid6algos.o raid6recov.o raid6tables.o \
                   raid6int1.o raid6int2.o raid6int4.o \
@@ -35,6 +36,7 @@ obj-$(CONFIG_DM_CRYPT)                += dm-crypt.o
 obj-$(CONFIG_DM_DELAY)         += dm-delay.o
 obj-$(CONFIG_DM_MULTIPATH)     += dm-multipath.o dm-round-robin.o
 obj-$(CONFIG_DM_MULTIPATH_EMC) += dm-emc.o
+obj-$(CONFIG_DM_MULTIPATH_HP)  += dm-hp-sw.o
 obj-$(CONFIG_DM_MULTIPATH_RDAC)        += dm-rdac.o
 obj-$(CONFIG_DM_SNAPSHOT)      += dm-snapshot.o
 obj-$(CONFIG_DM_MIRROR)                += dm-mirror.o
@@ -48,6 +50,10 @@ ifeq ($(CONFIG_ALTIVEC),y)
 altivec_flags := -maltivec -mabi=altivec
 endif
 
+ifeq ($(CONFIG_DM_UEVENT),y)
+dm-mod-objs                    += dm-uevent.o
+endif
+
 targets += raid6int1.c
 $(obj)/raid6int1.c:   UNROLL := 1
 $(obj)/raid6int1.c:   $(src)/raid6int.uc $(src)/unroll.pl FORCE
index 3f7b827649e3d5ceeb93c1e4d51a5290b4dce933..d4509be0fe67f78ecb91c0a5981d28ab9edd31cc 100644 (file)
@@ -21,11 +21,6 @@ static inline int bio_list_empty(const struct bio_list *bl)
        return bl->head == NULL;
 }
 
-#define BIO_LIST_INIT { .head = NULL, .tail = NULL }
-
-#define BIO_LIST(bl) \
-       struct bio_list bl = BIO_LIST_INIT
-
 static inline void bio_list_init(struct bio_list *bl)
 {
        bl->head = bl->tail = NULL;
index 64fee90bb68b92f5ac897c9ebe3fff3f0e578880..0eb5416798bdc69ea0dd7933b5d557d9a677cd01 100644 (file)
@@ -36,7 +36,6 @@ struct dm_crypt_io {
        struct work_struct work;
        atomic_t pending;
        int error;
-       int post_process;
 };
 
 /*
@@ -57,7 +56,7 @@ struct crypt_config;
 
 struct crypt_iv_operations {
        int (*ctr)(struct crypt_config *cc, struct dm_target *ti,
-                  const char *opts);
+                  const char *opts);
        void (*dtr)(struct crypt_config *cc);
        const char *(*status)(struct crypt_config *cc);
        int (*generator)(struct crypt_config *cc, u8 *iv, sector_t sector);
@@ -80,6 +79,8 @@ struct crypt_config {
        mempool_t *page_pool;
        struct bio_set *bs;
 
+       struct workqueue_struct *io_queue;
+       struct workqueue_struct *crypt_queue;
        /*
         * crypto related data
         */
@@ -112,7 +113,7 @@ static void clone_init(struct dm_crypt_io *, struct bio *);
  * Different IV generation algorithms:
  *
  * plain: the initial vector is the 32-bit little-endian version of the sector
- *        number, padded with zeros if neccessary.
+ *        number, padded with zeros if necessary.
  *
  * essiv: "encrypted sector|salt initial vector", the sector number is
  *        encrypted with the bulk cipher using a salt as key. The salt
@@ -137,7 +138,7 @@ static int crypt_iv_plain_gen(struct crypt_config *cc, u8 *iv, sector_t sector)
 }
 
 static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti,
-                             const char *opts)
+                             const char *opts)
 {
        struct crypto_cipher *essiv_tfm;
        struct crypto_hash *hash_tfm;
@@ -175,6 +176,7 @@ static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti,
 
        if (err) {
                ti->error = "Error calculating hash in ESSIV";
+               kfree(salt);
                return err;
        }
 
@@ -188,7 +190,7 @@ static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti,
        if (crypto_cipher_blocksize(essiv_tfm) !=
            crypto_blkcipher_ivsize(cc->tfm)) {
                ti->error = "Block size of ESSIV cipher does "
-                               "not match IV size of block cipher";
+                           "not match IV size of block cipher";
                crypto_free_cipher(essiv_tfm);
                kfree(salt);
                return -EINVAL;
@@ -319,10 +321,10 @@ crypt_convert_scatterlist(struct crypt_config *cc, struct scatterlist *out,
        return r;
 }
 
-static void
-crypt_convert_init(struct crypt_config *cc, struct convert_context *ctx,
-                   struct bio *bio_out, struct bio *bio_in,
-                   sector_t sector, int write)
+static void crypt_convert_init(struct crypt_config *cc,
+                              struct convert_context *ctx,
+                              struct bio *bio_out, struct bio *bio_in,
+                              sector_t sector, int write)
 {
        ctx->bio_in = bio_in;
        ctx->bio_out = bio_out;
@@ -338,7 +340,7 @@ crypt_convert_init(struct crypt_config *cc, struct convert_context *ctx,
  * Encrypt / decrypt data from one bio to another one (can be the same one)
  */
 static int crypt_convert(struct crypt_config *cc,
-                         struct convert_context *ctx)
+                        struct convert_context *ctx)
 {
        int r = 0;
 
@@ -370,7 +372,7 @@ static int crypt_convert(struct crypt_config *cc,
                }
 
                r = crypt_convert_scatterlist(cc, &sg_out, &sg_in, sg_in.length,
-                                             ctx->write, ctx->sector);
+                                             ctx->write, ctx->sector);
                if (r < 0)
                        break;
 
@@ -380,13 +382,13 @@ static int crypt_convert(struct crypt_config *cc,
        return r;
 }
 
- static void dm_crypt_bio_destructor(struct bio *bio)
- {
+static void dm_crypt_bio_destructor(struct bio *bio)
+{
        struct dm_crypt_io *io = bio->bi_private;
        struct crypt_config *cc = io->target->private;
 
        bio_free(bio, cc->bs);
- }
+}
 
 /*
  * Generate a new unfragmented bio with the given size
@@ -458,7 +460,7 @@ static void crypt_free_buffer_pages(struct crypt_config *cc, struct bio *clone)
  * One of the bios was finished. Check for completion of
  * the whole request and correctly clean up the buffer.
  */
-static void dec_pending(struct dm_crypt_io *io, int error)
+static void crypt_dec_pending(struct dm_crypt_io *io, int error)
 {
        struct crypt_config *cc = (struct crypt_config *) io->target->private;
 
@@ -474,18 +476,36 @@ static void dec_pending(struct dm_crypt_io *io, int error)
 }
 
 /*
- * kcryptd:
+ * kcryptd/kcryptd_io:
  *
  * Needed because it would be very unwise to do decryption in an
  * interrupt context.
+ *
+ * kcryptd performs the actual encryption or decryption.
+ *
+ * kcryptd_io performs the IO submission.
+ *
+ * They must be separated as otherwise the final stages could be
+ * starved by new requests which can block in the first stages due
+ * to memory allocation.
  */
-static struct workqueue_struct *_kcryptd_workqueue;
 static void kcryptd_do_work(struct work_struct *work);
+static void kcryptd_do_crypt(struct work_struct *work);
 
 static void kcryptd_queue_io(struct dm_crypt_io *io)
 {
+       struct crypt_config *cc = io->target->private;
+
        INIT_WORK(&io->work, kcryptd_do_work);
-       queue_work(_kcryptd_workqueue, &io->work);
+       queue_work(cc->io_queue, &io->work);
+}
+
+static void kcryptd_queue_crypt(struct dm_crypt_io *io)
+{
+       struct crypt_config *cc = io->target->private;
+
+       INIT_WORK(&io->work, kcryptd_do_crypt);
+       queue_work(cc->crypt_queue, &io->work);
 }
 
 static void crypt_endio(struct bio *clone, int error)
@@ -508,13 +528,12 @@ static void crypt_endio(struct bio *clone, int error)
        }
 
        bio_put(clone);
-       io->post_process = 1;
-       kcryptd_queue_io(io);
+       kcryptd_queue_crypt(io);
        return;
 
 out:
        bio_put(clone);
-       dec_pending(io, error);
+       crypt_dec_pending(io, error);
 }
 
 static void clone_init(struct dm_crypt_io *io, struct bio *clone)
@@ -544,7 +563,7 @@ static void process_read(struct dm_crypt_io *io)
         */
        clone = bio_alloc_bioset(GFP_NOIO, bio_segments(base_bio), cc->bs);
        if (unlikely(!clone)) {
-               dec_pending(io, -ENOMEM);
+               crypt_dec_pending(io, -ENOMEM);
                return;
        }
 
@@ -579,7 +598,7 @@ static void process_write(struct dm_crypt_io *io)
        while (remaining) {
                clone = crypt_alloc_buffer(io, remaining);
                if (unlikely(!clone)) {
-                       dec_pending(io, -ENOMEM);
+                       crypt_dec_pending(io, -ENOMEM);
                        return;
                }
 
@@ -589,7 +608,7 @@ static void process_write(struct dm_crypt_io *io)
                if (unlikely(crypt_convert(cc, &ctx) < 0)) {
                        crypt_free_buffer_pages(cc, clone);
                        bio_put(clone);
-                       dec_pending(io, -EIO);
+                       crypt_dec_pending(io, -EIO);
                        return;
                }
 
@@ -624,17 +643,23 @@ static void process_read_endio(struct dm_crypt_io *io)
        crypt_convert_init(cc, &ctx, io->base_bio, io->base_bio,
                           io->base_bio->bi_sector - io->target->begin, 0);
 
-       dec_pending(io, crypt_convert(cc, &ctx));
+       crypt_dec_pending(io, crypt_convert(cc, &ctx));
 }
 
 static void kcryptd_do_work(struct work_struct *work)
 {
        struct dm_crypt_io *io = container_of(work, struct dm_crypt_io, work);
 
-       if (io->post_process)
-               process_read_endio(io);
-       else if (bio_data_dir(io->base_bio) == READ)
+       if (bio_data_dir(io->base_bio) == READ)
                process_read(io);
+}
+
+static void kcryptd_do_crypt(struct work_struct *work)
+{
+       struct dm_crypt_io *io = container_of(work, struct dm_crypt_io, work);
+
+       if (bio_data_dir(io->base_bio) == READ)
+               process_read_endio(io);
        else
                process_write(io);
 }
@@ -690,7 +715,7 @@ static int crypt_set_key(struct crypt_config *cc, char *key)
        cc->key_size = key_size; /* initial settings */
 
        if ((!key_size && strcmp(key, "-")) ||
-           (key_size && crypt_decode_key(cc->key, key, key_size) < 0))
+          (key_size && crypt_decode_key(cc->key, key, key_size) < 0))
                return -EINVAL;
 
        set_bit(DM_CRYPT_KEY_VALID, &cc->flags);
@@ -746,7 +771,7 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 
        if (crypt_set_key(cc, argv[1])) {
                ti->error = "Error decoding key";
-               goto bad1;
+               goto bad_cipher;
        }
 
        /* Compatiblity mode for old dm-crypt cipher strings */
@@ -757,19 +782,19 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 
        if (strcmp(chainmode, "ecb") && !ivmode) {
                ti->error = "This chaining mode requires an IV mechanism";
-               goto bad1;
+               goto bad_cipher;
        }
 
-       if (snprintf(cc->cipher, CRYPTO_MAX_ALG_NAME, "%s(%s)", chainmode, 
-                    cipher) >= CRYPTO_MAX_ALG_NAME) {
+       if (snprintf(cc->cipher, CRYPTO_MAX_ALG_NAME, "%s(%s)",
+                    chainmode, cipher) >= CRYPTO_MAX_ALG_NAME) {
                ti->error = "Chain mode + cipher name is too long";
-               goto bad1;
+               goto bad_cipher;
        }
 
        tfm = crypto_alloc_blkcipher(cc->cipher, 0, CRYPTO_ALG_ASYNC);
        if (IS_ERR(tfm)) {
                ti->error = "Error allocating crypto tfm";
-               goto bad1;
+               goto bad_cipher;
        }
 
        strcpy(cc->cipher, cipher);
@@ -793,18 +818,18 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
                cc->iv_gen_ops = &crypt_iv_null_ops;
        else {
                ti->error = "Invalid IV mode";
-               goto bad2;
+               goto bad_ivmode;
        }
 
        if (cc->iv_gen_ops && cc->iv_gen_ops->ctr &&
            cc->iv_gen_ops->ctr(cc, ti, ivopts) < 0)
-               goto bad2;
+               goto bad_ivmode;
 
        cc->iv_size = crypto_blkcipher_ivsize(tfm);
        if (cc->iv_size)
                /* at least a 64 bit sector number should fit in our buffer */
                cc->iv_size = max(cc->iv_size,
-                                 (unsigned int)(sizeof(u64) / sizeof(u8)));
+                                 (unsigned int)(sizeof(u64) / sizeof(u8)));
        else {
                if (cc->iv_gen_ops) {
                        DMWARN("Selected cipher does not support IVs");
@@ -817,13 +842,13 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
        cc->io_pool = mempool_create_slab_pool(MIN_IOS, _crypt_io_pool);
        if (!cc->io_pool) {
                ti->error = "Cannot allocate crypt io mempool";
-               goto bad3;
+               goto bad_slab_pool;
        }
 
        cc->page_pool = mempool_create_page_pool(MIN_POOL_PAGES, 0);
        if (!cc->page_pool) {
                ti->error = "Cannot allocate page mempool";
-               goto bad4;
+               goto bad_page_pool;
        }
 
        cc->bs = bioset_create(MIN_IOS, MIN_IOS);
@@ -834,25 +859,25 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 
        if (crypto_blkcipher_setkey(tfm, cc->key, key_size) < 0) {
                ti->error = "Error setting key";
-               goto bad5;
+               goto bad_device;
        }
 
        if (sscanf(argv[2], "%llu", &tmpll) != 1) {
                ti->error = "Invalid iv_offset sector";
-               goto bad5;
+               goto bad_device;
        }
        cc->iv_offset = tmpll;
 
        if (sscanf(argv[4], "%llu", &tmpll) != 1) {
                ti->error = "Invalid device sector";
-               goto bad5;
+               goto bad_device;
        }
        cc->start = tmpll;
 
        if (dm_get_device(ti, argv[3], cc->start, ti->len,
-                         dm_table_get_mode(ti->table), &cc->dev)) {
+                         dm_table_get_mode(ti->table), &cc->dev)) {
                ti->error = "Device lookup failed";
-               goto bad5;
+               goto bad_device;
        }
 
        if (ivmode && cc->iv_gen_ops) {
@@ -861,27 +886,45 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
                cc->iv_mode = kmalloc(strlen(ivmode) + 1, GFP_KERNEL);
                if (!cc->iv_mode) {
                        ti->error = "Error kmallocing iv_mode string";
-                       goto bad5;
+                       goto bad_ivmode_string;
                }
                strcpy(cc->iv_mode, ivmode);
        } else
                cc->iv_mode = NULL;
 
+       cc->io_queue = create_singlethread_workqueue("kcryptd_io");
+       if (!cc->io_queue) {
+               ti->error = "Couldn't create kcryptd io queue";
+               goto bad_io_queue;
+       }
+
+       cc->crypt_queue = create_singlethread_workqueue("kcryptd");
+       if (!cc->crypt_queue) {
+               ti->error = "Couldn't create kcryptd queue";
+               goto bad_crypt_queue;
+       }
+
        ti->private = cc;
        return 0;
 
-bad5:
+bad_crypt_queue:
+       destroy_workqueue(cc->io_queue);
+bad_io_queue:
+       kfree(cc->iv_mode);
+bad_ivmode_string:
+       dm_put_device(ti, cc->dev);
+bad_device:
        bioset_free(cc->bs);
 bad_bs:
        mempool_destroy(cc->page_pool);
-bad4:
+bad_page_pool:
        mempool_destroy(cc->io_pool);
-bad3:
+bad_slab_pool:
        if (cc->iv_gen_ops && cc->iv_gen_ops->dtr)
                cc->iv_gen_ops->dtr(cc);
-bad2:
+bad_ivmode:
        crypto_free_blkcipher(tfm);
-bad1:
+bad_cipher:
        /* Must zero key material before freeing */
        memset(cc, 0, sizeof(*cc) + cc->key_size * sizeof(u8));
        kfree(cc);
@@ -892,7 +935,8 @@ static void crypt_dtr(struct dm_target *ti)
 {
        struct crypt_config *cc = (struct crypt_config *) ti->private;
 
-       flush_workqueue(_kcryptd_workqueue);
+       destroy_workqueue(cc->io_queue);
+       destroy_workqueue(cc->crypt_queue);
 
        bioset_free(cc->bs);
        mempool_destroy(cc->page_pool);
@@ -918,9 +962,13 @@ static int crypt_map(struct dm_target *ti, struct bio *bio,
        io = mempool_alloc(cc->io_pool, GFP_NOIO);
        io->target = ti;
        io->base_bio = bio;
-       io->error = io->post_process = 0;
+       io->error = 0;
        atomic_set(&io->pending, 0);
-       kcryptd_queue_io(io);
+
+       if (bio_data_dir(io->base_bio) == READ)
+               kcryptd_queue_io(io);
+       else
+               kcryptd_queue_crypt(io);
 
        return DM_MAPIO_SUBMITTED;
 }
@@ -1037,25 +1085,12 @@ static int __init dm_crypt_init(void)
        if (!_crypt_io_pool)
                return -ENOMEM;
 
-       _kcryptd_workqueue = create_workqueue("kcryptd");
-       if (!_kcryptd_workqueue) {
-               r = -ENOMEM;
-               DMERR("couldn't create kcryptd");
-               goto bad1;
-       }
-
        r = dm_register_target(&crypt_target);
        if (r < 0) {
                DMERR("register failed %d", r);
-               goto bad2;
+               kmem_cache_destroy(_crypt_io_pool);
        }
 
-       return 0;
-
-bad2:
-       destroy_workqueue(_kcryptd_workqueue);
-bad1:
-       kmem_cache_destroy(_crypt_io_pool);
        return r;
 }
 
@@ -1066,7 +1101,6 @@ static void __exit dm_crypt_exit(void)
        if (r < 0)
                DMERR("unregister failed %d", r);
 
-       destroy_workqueue(_kcryptd_workqueue);
        kmem_cache_destroy(_crypt_io_pool);
 }
 
index 6928c136d3c540d8fdcec9730216f436e1cd9131..bdd37f881c42ab757cb381514db10d4d232b854e 100644 (file)
@@ -83,7 +83,7 @@ static struct bio *flush_delayed_bios(struct delay_c *dc, int flush_all)
        struct dm_delay_info *delayed, *next;
        unsigned long next_expires = 0;
        int start_timer = 0;
-       BIO_LIST(flush_bios);
+       struct bio_list flush_bios = { };
 
        mutex_lock(&delayed_bios_lock);
        list_for_each_entry_safe(delayed, next, &dc->delayed_bios, list) {
@@ -163,34 +163,32 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
                goto bad;
        }
 
-       if (argc == 3) {
-               dc->dev_write = NULL;
+       dc->dev_write = NULL;
+       if (argc == 3)
                goto out;
-       }
 
        if (sscanf(argv[4], "%llu", &tmpll) != 1) {
                ti->error = "Invalid write device sector";
-               goto bad;
+               goto bad_dev_read;
        }
        dc->start_write = tmpll;
 
        if (sscanf(argv[5], "%u", &dc->write_delay) != 1) {
                ti->error = "Invalid write delay";
-               goto bad;
+               goto bad_dev_read;
        }
 
        if (dm_get_device(ti, argv[3], dc->start_write, ti->len,
                          dm_table_get_mode(ti->table), &dc->dev_write)) {
                ti->error = "Write device lookup failed";
-               dm_put_device(ti, dc->dev_read);
-               goto bad;
+               goto bad_dev_read;
        }
 
 out:
        dc->delayed_pool = mempool_create_slab_pool(128, delayed_cache);
        if (!dc->delayed_pool) {
                DMERR("Couldn't create delayed bio pool.");
-               goto bad;
+               goto bad_dev_write;
        }
 
        setup_timer(&dc->delay_timer, handle_delayed_timer, (unsigned long)dc);
@@ -203,6 +201,11 @@ out:
        ti->private = dc;
        return 0;
 
+bad_dev_write:
+       if (dc->dev_write)
+               dm_put_device(ti, dc->dev_write);
+bad_dev_read:
+       dm_put_device(ti, dc->dev_read);
 bad:
        kfree(dc);
        return -EINVAL;
@@ -305,7 +308,7 @@ static int delay_status(struct dm_target *ti, status_type_t type,
                       (unsigned long long) dc->start_read,
                       dc->read_delay);
                if (dc->dev_write)
-                       DMEMIT("%s %llu %u", dc->dev_write->name,
+                       DMEMIT(" %s %llu %u", dc->dev_write->name,
                               (unsigned long long) dc->start_write,
                               dc->write_delay);
                break;
index 342517261ece129dd115f34897b1ff762a1fd78b..6b91b9ab1d41f537bc81e703ecffa710f0efcdf8 100644 (file)
@@ -81,7 +81,7 @@ static struct bio *get_failover_bio(struct dm_path *path, unsigned data_size)
        }
 
        if (bio_add_page(bio, page, data_size, 0) != data_size) {
-               DMERR("get_failover_bio: alloc_page() failed.");
+               DMERR("get_failover_bio: bio_add_page() failed.");
                __free_page(page);
                bio_put(bio);
                return NULL;
@@ -211,12 +211,10 @@ fail_path:
 
 static struct emc_handler *alloc_emc_handler(void)
 {
-       struct emc_handler *h = kmalloc(sizeof(*h), GFP_KERNEL);
+       struct emc_handler *h = kzalloc(sizeof(*h), GFP_KERNEL);
 
-       if (h) {
-               memset(h, 0, sizeof(*h));
+       if (h)
                spin_lock_init(&h->lock);
-       }
 
        return h;
 }
index baafaaba4d4b5632d177f1a3e1f8cb374de1119c..2ee84d8aa0bf754244196d9189b04a10a99f2461 100644 (file)
@@ -91,12 +91,10 @@ void dm_put_hw_handler(struct hw_handler_type *hwht)
 
 static struct hwh_internal *_alloc_hw_handler(struct hw_handler_type *hwht)
 {
-       struct hwh_internal *hwhi = kmalloc(sizeof(*hwhi), GFP_KERNEL);
+       struct hwh_internal *hwhi = kzalloc(sizeof(*hwhi), GFP_KERNEL);
 
-       if (hwhi) {
-               memset(hwhi, 0, sizeof(*hwhi));
+       if (hwhi)
                hwhi->hwht = *hwht;
-       }
 
        return hwhi;
 }
index e0832e6fcf36c0747c06ae3035c12567e80df797..46809dcb121ae6f7319ac1485f29ac122ef42a9b 100644 (file)
@@ -58,5 +58,6 @@ unsigned dm_scsi_err_handler(struct hw_handler *hwh, struct bio *bio);
 #define MP_FAIL_PATH 1
 #define MP_BYPASS_PG 2
 #define MP_ERROR_IO  4 /* Don't retry this I/O */
+#define MP_RETRY 8
 
 #endif
index b441d82c338a32156a6d270eaa1f7cb5553178f9..138200bf5e0befa90ff67d7ac50c231313f94380 100644 (file)
@@ -700,7 +700,7 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size)
        int r;
        char *new_name = (char *) param + param->data_start;
 
-       if (new_name < (char *) (param + 1) ||
+       if (new_name < (char *) param->data ||
            invalid_str(new_name, (void *) param + param_size)) {
                DMWARN("Invalid new logical volume name supplied.");
                return -EINVAL;
@@ -726,7 +726,7 @@ static int dev_set_geometry(struct dm_ioctl *param, size_t param_size)
        if (!md)
                return -ENXIO;
 
-       if (geostr < (char *) (param + 1) ||
+       if (geostr < (char *) param->data ||
            invalid_str(geostr, (void *) param + param_size)) {
                DMWARN("Invalid geometry supplied.");
                goto out;
@@ -1233,7 +1233,7 @@ static int target_message(struct dm_ioctl *param, size_t param_size)
        if (r)
                goto out;
 
-       if (tmsg < (struct dm_target_msg *) (param + 1) ||
+       if (tmsg < (struct dm_target_msg *) param->data ||
            invalid_str(tmsg->message, (void *) param + param_size)) {
                DMWARN("Invalid target message parameters.");
                r = -EINVAL;
@@ -1358,7 +1358,7 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param)
        if (tmp.data_size < sizeof(tmp))
                return -EINVAL;
 
-       dmi = (struct dm_ioctl *) vmalloc(tmp.data_size);
+       dmi = vmalloc(tmp.data_size);
        if (!dmi)
                return -ENOMEM;
 
@@ -1515,3 +1515,35 @@ void dm_interface_exit(void)
 
        dm_hash_exit();
 }
+
+/**
+ * dm_copy_name_and_uuid - Copy mapped device name & uuid into supplied buffers
+ * @md: Pointer to mapped_device
+ * @name: Buffer (size DM_NAME_LEN) for name
+ * @uuid: Buffer (size DM_UUID_LEN) for uuid or empty string if uuid not defined
+ */
+int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid)
+{
+       int r = 0;
+       struct hash_cell *hc;
+
+       if (!md)
+               return -ENXIO;
+
+       dm_get(md);
+       down_read(&_hash_lock);
+       hc = dm_get_mdptr(md);
+       if (!hc || hc->md != md) {
+               r = -ENXIO;
+               goto out;
+       }
+
+       strcpy(name, hc->name);
+       strcpy(uuid, hc->uuid ? : "");
+
+out:
+       up_read(&_hash_lock);
+       dm_put(md);
+
+       return r;
+}
index a66428d860fef830d3fddc6d8f48140d7a646a4b..072ee4353eab329620995aceee14b468a49584a4 100644 (file)
@@ -696,7 +696,7 @@ static struct dirty_log_type _disk_type = {
        .module = THIS_MODULE,
        .ctr = disk_ctr,
        .dtr = disk_dtr,
-       .suspend = disk_flush,
+       .postsuspend = disk_flush,
        .resume = disk_resume,
        .get_region_size = core_get_region_size,
        .is_clean = core_is_clean,
index 86a301c8daf15d5962afe2ca8ed6eee39e58d24e..3fae87eb59631bcaf77c82b0924e363716643b0c 100644 (file)
@@ -32,7 +32,8 @@ struct dirty_log_type {
         * There are times when we don't want the log to touch
         * the disk.
         */
-       int (*suspend)(struct dirty_log *log);
+       int (*presuspend)(struct dirty_log *log);
+       int (*postsuspend)(struct dirty_log *log);
        int (*resume)(struct dirty_log *log);
 
        /*
diff --git a/drivers/md/dm-mpath-hp-sw.c b/drivers/md/dm-mpath-hp-sw.c
new file mode 100644 (file)
index 0000000..204bf42
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+ * Copyright (C) 2005 Mike Christie, All rights reserved.
+ * Copyright (C) 2007 Red Hat, Inc. All rights reserved.
+ * Authors: Mike Christie
+ *          Dave Wysochanski
+ *
+ * This file is released under the GPL.
+ *
+ * This module implements the specific path activation code for
+ * HP StorageWorks and FSC FibreCat Asymmetric (Active/Passive)
+ * storage arrays.
+ * These storage arrays have controller-based failover, not
+ * LUN-based failover.  However, LUN-based failover is the design
+ * of dm-multipath. Thus, this module is written for LUN-based failover.
+ */
+#include <linux/blkdev.h>
+#include <linux/list.h>
+#include <linux/types.h>
+#include <scsi/scsi.h>
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_dbg.h>
+
+#include "dm.h"
+#include "dm-hw-handler.h"
+
+#define DM_MSG_PREFIX "multipath hp-sw"
+#define DM_HP_HWH_NAME "hp-sw"
+#define DM_HP_HWH_VER "1.0.0"
+
+struct hp_sw_context {
+       unsigned char sense[SCSI_SENSE_BUFFERSIZE];
+};
+
+/*
+ * hp_sw_error_is_retryable - Is an HP-specific check condition retryable?
+ * @req: path activation request
+ *
+ * Examine error codes of request and determine whether the error is retryable.
+ * Some error codes are already retried by scsi-ml (see
+ * scsi_decide_disposition), but some HP specific codes are not.
+ * The intent of this routine is to supply the logic for the HP specific
+ * check conditions.
+ *
+ * Returns:
+ *  1 - command completed with retryable error
+ *  0 - command completed with non-retryable error
+ *
+ * Possible optimizations
+ * 1. More hardware-specific error codes
+ */
+static int hp_sw_error_is_retryable(struct request *req)
+{
+       /*
+        * NOT_READY is known to be retryable
+        * For now we just dump out the sense data and call it retryable
+        */
+       if (status_byte(req->errors) == CHECK_CONDITION)
+               __scsi_print_sense(DM_HP_HWH_NAME, req->sense, req->sense_len);
+
+       /*
+        * At this point we don't have complete information about all the error
+        * codes from this hardware, so we are just conservative and retry
+        * when in doubt.
+        */
+       return 1;
+}
+
+/*
+ * hp_sw_end_io - Completion handler for HP path activation.
+ * @req: path activation request
+ * @error: scsi-ml error
+ *
+ *  Check sense data, free request structure, and notify dm that
+ *  pg initialization has completed.
+ *
+ * Context: scsi-ml softirq
+ *
+ */
+static void hp_sw_end_io(struct request *req, int error)
+{
+       struct dm_path *path = req->end_io_data;
+       unsigned err_flags = 0;
+
+       if (!error) {
+               DMDEBUG("%s path activation command - success",
+                       path->dev->name);
+               goto out;
+       }
+
+       if (hp_sw_error_is_retryable(req)) {
+               DMDEBUG("%s path activation command - retry",
+                       path->dev->name);
+               err_flags = MP_RETRY;
+               goto out;
+       }
+
+       DMWARN("%s path activation fail - error=0x%x",
+              path->dev->name, error);
+       err_flags = MP_FAIL_PATH;
+
+out:
+       req->end_io_data = NULL;
+       __blk_put_request(req->q, req);
+       dm_pg_init_complete(path, err_flags);
+}
+
+/*
+ * hp_sw_get_request - Allocate an HP specific path activation request
+ * @path: path on which request will be sent (needed for request queue)
+ *
+ * The START command is used for path activation request.
+ * These arrays are controller-based failover, not LUN based.
+ * One START command issued to a single path will fail over all
+ * LUNs for the same controller.
+ *
+ * Possible optimizations
+ * 1. Make timeout configurable
+ * 2. Preallocate request
+ */
+static struct request *hp_sw_get_request(struct dm_path *path)
+{
+       struct request *req;
+       struct block_device *bdev = path->dev->bdev;
+       struct request_queue *q = bdev_get_queue(bdev);
+       struct hp_sw_context *h = path->hwhcontext;
+
+       req = blk_get_request(q, WRITE, GFP_NOIO);
+       if (!req)
+               goto out;
+
+       req->timeout = 60 * HZ;
+
+       req->errors = 0;
+       req->cmd_type = REQ_TYPE_BLOCK_PC;
+       req->cmd_flags |= REQ_FAILFAST | REQ_NOMERGE;
+       req->end_io_data = path;
+       req->sense = h->sense;
+       memset(req->sense, 0, SCSI_SENSE_BUFFERSIZE);
+
+       memset(&req->cmd, 0, BLK_MAX_CDB);
+       req->cmd[0] = START_STOP;
+       req->cmd[4] = 1;
+       req->cmd_len = COMMAND_SIZE(req->cmd[0]);
+
+out:
+       return req;
+}
+
+/*
+ * hp_sw_pg_init - HP path activation implementation.
+ * @hwh: hardware handler specific data
+ * @bypassed: unused; is the path group bypassed? (see dm-mpath.c)
+ * @path: path to send initialization command
+ *
+ * Send an HP-specific path activation command on 'path'.
+ * Do not try to optimize in any way, just send the activation command.
+ * More than one path activation command may be sent to the same controller.
+ * This seems to work fine for basic failover support.
+ *
+ * Possible optimizations
+ * 1. Detect an in-progress activation request and avoid submitting another one
+ * 2. Model the controller and only send a single activation request at a time
+ * 3. Determine the state of a path before sending an activation request
+ *
+ * Context: kmpathd (see process_queued_ios() in dm-mpath.c)
+ */
+static void hp_sw_pg_init(struct hw_handler *hwh, unsigned bypassed,
+                         struct dm_path *path)
+{
+       struct request *req;
+       struct hp_sw_context *h;
+
+       path->hwhcontext = hwh->context;
+       h = hwh->context;
+
+       req = hp_sw_get_request(path);
+       if (!req) {
+               DMERR("%s path activation command - allocation fail",
+                     path->dev->name);
+               goto retry;
+       }
+
+       DMDEBUG("%s path activation command - sent", path->dev->name);
+
+       blk_execute_rq_nowait(req->q, NULL, req, 1, hp_sw_end_io);
+       return;
+
+retry:
+       dm_pg_init_complete(path, MP_RETRY);
+}
+
+static int hp_sw_create(struct hw_handler *hwh, unsigned argc, char **argv)
+{
+       struct hp_sw_context *h;
+
+       h = kmalloc(sizeof(*h), GFP_KERNEL);
+       if (!h)
+               return -ENOMEM;
+
+       hwh->context = h;
+
+       return 0;
+}
+
+static void hp_sw_destroy(struct hw_handler *hwh)
+{
+       struct hp_sw_context *h = hwh->context;
+
+       kfree(h);
+}
+
+static struct hw_handler_type hp_sw_hwh = {
+       .name = DM_HP_HWH_NAME,
+       .module = THIS_MODULE,
+       .create = hp_sw_create,
+       .destroy = hp_sw_destroy,
+       .pg_init = hp_sw_pg_init,
+};
+
+static int __init hp_sw_init(void)
+{
+       int r;
+
+       r = dm_register_hw_handler(&hp_sw_hwh);
+       if (r < 0)
+               DMERR("register failed %d", r);
+       else
+               DMINFO("version " DM_HP_HWH_VER " loaded");
+
+       return r;
+}
+
+static void __exit hp_sw_exit(void)
+{
+       int r;
+
+       r = dm_unregister_hw_handler(&hp_sw_hwh);
+       if (r < 0)
+               DMERR("unregister failed %d", r);
+}
+
+module_init(hp_sw_init);
+module_exit(hp_sw_exit);
+
+MODULE_DESCRIPTION("DM Multipath HP StorageWorks / FSC FibreCat (A/P) support");
+MODULE_AUTHOR("Mike Christie, Dave Wysochanski <dm-devel@redhat.com>");
+MODULE_LICENSE("GPL");
+MODULE_VERSION(DM_HP_HWH_VER);
index 16b1613457750e990c131592ff4501d5f9de0724..e04eb5c697fb884081b79c8ad5ed4b378c19abd6 100644 (file)
@@ -664,20 +664,21 @@ static struct hw_handler_type rdac_handler = {
 
 static int __init rdac_init(void)
 {
-       int r = dm_register_hw_handler(&rdac_handler);
-
-       if (r < 0) {
-               DMERR("%s: register failed %d", RDAC_DM_HWH_NAME, r);
-               return r;
-       }
+       int r;
 
        rdac_wkqd = create_singlethread_workqueue("rdac_wkqd");
        if (!rdac_wkqd) {
                DMERR("Failed to create workqueue rdac_wkqd.");
-               dm_unregister_hw_handler(&rdac_handler);
                return -ENOMEM;
        }
 
+       r = dm_register_hw_handler(&rdac_handler);
+       if (r < 0) {
+               DMERR("%s: register failed %d", RDAC_DM_HWH_NAME, r);
+               destroy_workqueue(rdac_wkqd);
+               return r;
+       }
+
        DMINFO("%s: version %s loaded", RDAC_DM_HWH_NAME, RDAC_DM_HWH_VER);
        return 0;
 }
index 31056abca89d31814a210a9785f11d576878fa67..24b2b1e32faefc443bf102949a3674689e505b05 100644 (file)
@@ -10,6 +10,7 @@
 #include "dm-hw-handler.h"
 #include "dm-bio-list.h"
 #include "dm-bio-record.h"
+#include "dm-uevent.h"
 
 #include <linux/ctype.h>
 #include <linux/init.h>
@@ -75,6 +76,8 @@ struct multipath {
        unsigned queue_io;              /* Must we queue all I/O? */
        unsigned queue_if_no_path;      /* Queue I/O if last path fails? */
        unsigned saved_queue_if_no_path;/* Saved state during suspension */
+       unsigned pg_init_retries;       /* Number of times to retry pg_init */
+       unsigned pg_init_count;         /* Number of times pg_init called */
 
        struct work_struct process_queued_ios;
        struct bio_list queued_ios;
@@ -225,6 +228,8 @@ static void __switch_pg(struct multipath *m, struct pgpath *pgpath)
                m->pg_init_required = 0;
                m->queue_io = 0;
        }
+
+       m->pg_init_count = 0;
 }
 
 static int __choose_path_in_pg(struct multipath *m, struct priority_group *pg)
@@ -424,6 +429,7 @@ static void process_queued_ios(struct work_struct *work)
                must_queue = 0;
 
        if (m->pg_init_required && !m->pg_init_in_progress) {
+               m->pg_init_count++;
                m->pg_init_required = 0;
                m->pg_init_in_progress = 1;
                init_required = 1;
@@ -689,9 +695,11 @@ static int parse_features(struct arg_set *as, struct multipath *m)
        int r;
        unsigned argc;
        struct dm_target *ti = m->ti;
+       const char *param_name;
 
        static struct param _params[] = {
-               {0, 1, "invalid number of feature args"},
+               {0, 3, "invalid number of feature args"},
+               {1, 50, "pg_init_retries must be between 1 and 50"},
        };
 
        r = read_param(_params, shift(as), &argc, &ti->error);
@@ -701,12 +709,28 @@ static int parse_features(struct arg_set *as, struct multipath *m)
        if (!argc)
                return 0;
 
-       if (!strnicmp(shift(as), MESG_STR("queue_if_no_path")))
-               return queue_if_no_path(m, 1, 0);
-       else {
+       do {
+               param_name = shift(as);
+               argc--;
+
+               if (!strnicmp(param_name, MESG_STR("queue_if_no_path"))) {
+                       r = queue_if_no_path(m, 1, 0);
+                       continue;
+               }
+
+               if (!strnicmp(param_name, MESG_STR("pg_init_retries")) &&
+                   (argc >= 1)) {
+                       r = read_param(_params + 1, shift(as),
+                                      &m->pg_init_retries, &ti->error);
+                       argc--;
+                       continue;
+               }
+
                ti->error = "Unrecognised multipath feature request";
-               return -EINVAL;
-       }
+               r = -EINVAL;
+       } while (argc && !r);
+
+       return r;
 }
 
 static int multipath_ctr(struct dm_target *ti, unsigned int argc,
@@ -834,6 +858,9 @@ static int fail_path(struct pgpath *pgpath)
        if (pgpath == m->current_pgpath)
                m->current_pgpath = NULL;
 
+       dm_path_uevent(DM_UEVENT_PATH_FAILED, m->ti,
+                     pgpath->path.dev->name, m->nr_valid_paths);
+
        queue_work(kmultipathd, &m->trigger_event);
 
 out:
@@ -873,6 +900,9 @@ static int reinstate_path(struct pgpath *pgpath)
        if (!m->nr_valid_paths++ && m->queue_size)
                queue_work(kmultipathd, &m->process_queued_ios);
 
+       dm_path_uevent(DM_UEVENT_PATH_REINSTATED, m->ti,
+                     pgpath->path.dev->name, m->nr_valid_paths);
+
        queue_work(kmultipathd, &m->trigger_event);
 
 out:
@@ -975,6 +1005,26 @@ static int bypass_pg_num(struct multipath *m, const char *pgstr, int bypassed)
        return 0;
 }
 
+/*
+ * Should we retry pg_init immediately?
+ */
+static int pg_init_limit_reached(struct multipath *m, struct pgpath *pgpath)
+{
+       unsigned long flags;
+       int limit_reached = 0;
+
+       spin_lock_irqsave(&m->lock, flags);
+
+       if (m->pg_init_count <= m->pg_init_retries)
+               m->pg_init_required = 1;
+       else
+               limit_reached = 1;
+
+       spin_unlock_irqrestore(&m->lock, flags);
+
+       return limit_reached;
+}
+
 /*
  * pg_init must call this when it has completed its initialisation
  */
@@ -985,8 +1035,14 @@ void dm_pg_init_complete(struct dm_path *path, unsigned err_flags)
        struct multipath *m = pg->m;
        unsigned long flags;
 
-       /* We insist on failing the path if the PG is already bypassed. */
-       if (err_flags && pg->bypassed)
+       /*
+        * If requested, retry pg_init until maximum number of retries exceeded.
+        * If retry not requested and PG already bypassed, always fail the path.
+        */
+       if (err_flags & MP_RETRY) {
+               if (pg_init_limit_reached(m, pgpath))
+                       err_flags |= MP_FAIL_PATH;
+       } else if (err_flags && pg->bypassed)
                err_flags |= MP_FAIL_PATH;
 
        if (err_flags & MP_FAIL_PATH)
@@ -996,7 +1052,7 @@ void dm_pg_init_complete(struct dm_path *path, unsigned err_flags)
                bypass_pg(m, pg, 1);
 
        spin_lock_irqsave(&m->lock, flags);
-       if (err_flags) {
+       if (err_flags & ~MP_RETRY) {
                m->current_pgpath = NULL;
                m->current_pg = NULL;
        } else if (!m->pg_init_required)
@@ -1148,11 +1204,15 @@ static int multipath_status(struct dm_target *ti, status_type_t type,
 
        /* Features */
        if (type == STATUSTYPE_INFO)
-               DMEMIT("1 %u ", m->queue_size);
-       else if (m->queue_if_no_path)
-               DMEMIT("1 queue_if_no_path ");
-       else
-               DMEMIT("0 ");
+               DMEMIT("2 %u %u ", m->queue_size, m->pg_init_count);
+       else {
+               DMEMIT("%u ", m->queue_if_no_path +
+                             (m->pg_init_retries > 0) * 2);
+               if (m->queue_if_no_path)
+                       DMEMIT("queue_if_no_path ");
+               if (m->pg_init_retries)
+                       DMEMIT("pg_init_retries %u ", m->pg_init_retries);
+       }
 
        if (hwh->type && hwh->type->status)
                sz += hwh->type->status(hwh, type, result + sz, maxlen - sz);
index f10a0c89b3f4e542b3901790504a212d612741ef..ca1bb636a3e4ba808ae63d88dfbb62bc4ee28a04 100644 (file)
@@ -94,12 +94,10 @@ out:
 
 static struct ps_internal *_alloc_path_selector(struct path_selector_type *pst)
 {
-       struct ps_internal *psi = kmalloc(sizeof(*psi), GFP_KERNEL);
+       struct ps_internal *psi = kzalloc(sizeof(*psi), GFP_KERNEL);
 
-       if (psi) {
-               memset(psi, 0, sizeof(*psi));
+       if (psi)
                psi->pst = *pst;
-       }
 
        return psi;
 }
index d09ff15490a5db439aff81566b02cf3f401b364a..31123d4a6b9cc39dbeec455d50b540b97ac99c06 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/time.h>
 #include <linux/vmalloc.h>
 #include <linux/workqueue.h>
+#include <linux/log2.h>
 
 #define DM_MSG_PREFIX "raid1"
 #define DM_IO_PAGES 64
@@ -113,6 +114,7 @@ struct region {
  * Mirror set structures.
  *---------------------------------------------------------------*/
 struct mirror {
+       struct mirror_set *ms;
        atomic_t error_count;
        struct dm_dev *dev;
        sector_t offset;
@@ -974,6 +976,7 @@ static struct mirror_set *alloc_context(unsigned int nr_mirrors,
 
        if (rh_init(&ms->rh, ms, dl, region_size, ms->nr_regions)) {
                ti->error = "Error creating dirty region hash";
+               dm_io_client_destroy(ms->io_client);
                kfree(ms);
                return NULL;
        }
@@ -994,7 +997,7 @@ static void free_context(struct mirror_set *ms, struct dm_target *ti,
 
 static inline int _check_region_size(struct dm_target *ti, uint32_t size)
 {
-       return !(size % (PAGE_SIZE >> 9) || (size & (size - 1)) ||
+       return !(size % (PAGE_SIZE >> 9) || !is_power_of_2(size) ||
                 size > ti->len);
 }
 
@@ -1015,6 +1018,7 @@ static int get_mirror(struct mirror_set *ms, struct dm_target *ti,
                return -ENXIO;
        }
 
+       ms->mirror[mirror].ms = ms;
        ms->mirror[mirror].offset = offset;
 
        return 0;
@@ -1163,16 +1167,14 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
        ms->kmirrord_wq = create_singlethread_workqueue("kmirrord");
        if (!ms->kmirrord_wq) {
                DMERR("couldn't start kmirrord");
-               free_context(ms, ti, m);
-               return -ENOMEM;
+               r = -ENOMEM;
+               goto err_free_context;
        }
        INIT_WORK(&ms->kmirrord_work, do_mirror);
 
        r = parse_features(ms, argc, argv, &args_used);
-       if (r) {
-               free_context(ms, ti, ms->nr_mirrors);
-               return r;
-       }
+       if (r)
+               goto err_destroy_wq;
 
        argv += args_used;
        argc -= args_used;
@@ -1188,19 +1190,22 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 
        if (argc) {
                ti->error = "Too many mirror arguments";
-               free_context(ms, ti, ms->nr_mirrors);
-               return -EINVAL;
+               r = -EINVAL;
+               goto err_destroy_wq;
        }
 
        r = kcopyd_client_create(DM_IO_PAGES, &ms->kcopyd_client);
-       if (r) {
-               destroy_workqueue(ms->kmirrord_wq);
-               free_context(ms, ti, ms->nr_mirrors);
-               return r;
-       }
+       if (r)
+               goto err_destroy_wq;
 
        wake(ms);
        return 0;
+
+err_destroy_wq:
+       destroy_workqueue(ms->kmirrord_wq);
+err_free_context:
+       free_context(ms, ti, ms->nr_mirrors);
+       return r;
 }
 
 static void mirror_dtr(struct dm_target *ti)
@@ -1302,7 +1307,7 @@ static void mirror_postsuspend(struct dm_target *ti)
        wait_event(_kmirrord_recovery_stopped,
                   !atomic_read(&ms->rh.recovery_in_flight));
 
-       if (log->type->suspend && log->type->suspend(log))
+       if (log->type->postsuspend && log->type->postsuspend(log))
                /* FIXME: need better error handling */
                DMWARN("log suspend failed");
 }
index 98a633f3d6b002673e17e797b34c30903a2bfa39..cee16fadd9ee70379449ce995ac4043d1ff86e5f 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
+#include <linux/log2.h>
 
 #include "dm-snap.h"
 #include "dm-bio-list.h"
@@ -415,7 +416,7 @@ static int set_chunk_size(struct dm_snapshot *s, const char *chunk_size_arg,
        chunk_size = round_up(chunk_size, PAGE_SIZE >> 9);
 
        /* Check chunk_size is a power of 2 */
-       if (chunk_size & (chunk_size - 1)) {
+       if (!is_power_of_2(chunk_size)) {
                *error = "Chunk size is not a power of 2";
                return -EINVAL;
        }
index 51f5e0760012dd76c35d939bb18862a20e2ee435..969944a8aba2dd0b06dab4191e8b3136ba08bf58 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/blkdev.h>
 #include <linux/bio.h>
 #include <linux/slab.h>
+#include <linux/log2.h>
 
 #define DM_MSG_PREFIX "striped"
 
@@ -99,7 +100,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
        /*
         * chunk_size is a power of two
         */
-       if (!chunk_size || (chunk_size & (chunk_size - 1)) ||
+       if (!is_power_of_2(chunk_size) ||
            (chunk_size < (PAGE_SIZE >> SECTOR_SHIFT))) {
                ti->error = "Invalid chunk size";
                return -EINVAL;
index fbe477bb2c68ca4005a7f606af18a715edbfc5f9..8939e61050884cd81cda3cdcbf7126b5b55e3dad 100644 (file)
@@ -213,12 +213,11 @@ static int alloc_targets(struct dm_table *t, unsigned int num)
 int dm_table_create(struct dm_table **result, int mode,
                    unsigned num_targets, struct mapped_device *md)
 {
-       struct dm_table *t = kmalloc(sizeof(*t), GFP_KERNEL);
+       struct dm_table *t = kzalloc(sizeof(*t), GFP_KERNEL);
 
        if (!t)
                return -ENOMEM;
 
-       memset(t, 0, sizeof(*t));
        INIT_LIST_HEAD(&t->devices);
        atomic_set(&t->holders, 1);
 
index 477a041a41cfa4601cb796ddf14df3dfcdbde562..835cf95b857fa6cbef32c0c6d0d474e03909221a 100644 (file)
@@ -88,12 +88,10 @@ void dm_put_target_type(struct target_type *t)
 
 static struct tt_internal *alloc_target(struct target_type *t)
 {
-       struct tt_internal *ti = kmalloc(sizeof(*ti), GFP_KERNEL);
+       struct tt_internal *ti = kzalloc(sizeof(*ti), GFP_KERNEL);
 
-       if (ti) {
-               memset(ti, 0, sizeof(*ti));
+       if (ti)
                ti->tt = *t;
-       }
 
        return ti;
 }
diff --git a/drivers/md/dm-uevent.c b/drivers/md/dm-uevent.c
new file mode 100644 (file)
index 0000000..50377e5
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * Device Mapper Uevent Support (dm-uevent)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Copyright IBM Corporation, 2007
+ *     Author: Mike Anderson <andmike@linux.vnet.ibm.com>
+ */
+#include <linux/list.h>
+#include <linux/slab.h>
+#include <linux/kobject.h>
+#include <linux/dm-ioctl.h>
+
+#include "dm.h"
+#include "dm-uevent.h"
+
+#define DM_MSG_PREFIX "uevent"
+
+static const struct {
+       enum dm_uevent_type type;
+       enum kobject_action action;
+       char *name;
+} _dm_uevent_type_names[] = {
+       {DM_UEVENT_PATH_FAILED, KOBJ_CHANGE, "PATH_FAILED"},
+       {DM_UEVENT_PATH_REINSTATED, KOBJ_CHANGE, "PATH_REINSTATED"},
+};
+
+static struct kmem_cache *_dm_event_cache;
+
+struct dm_uevent {
+       struct mapped_device *md;
+       enum kobject_action action;
+       struct kobj_uevent_env ku_env;
+       struct list_head elist;
+       char name[DM_NAME_LEN];
+       char uuid[DM_UUID_LEN];
+};
+
+static void dm_uevent_free(struct dm_uevent *event)
+{
+       kmem_cache_free(_dm_event_cache, event);
+}
+
+static struct dm_uevent *dm_uevent_alloc(struct mapped_device *md)
+{
+       struct dm_uevent *event;
+
+       event = kmem_cache_zalloc(_dm_event_cache, GFP_ATOMIC);
+       if (!event)
+               return NULL;
+
+       INIT_LIST_HEAD(&event->elist);
+       event->md = md;
+
+       return event;
+}
+
+static struct dm_uevent *dm_build_path_uevent(struct mapped_device *md,
+                                             struct dm_target *ti,
+                                             enum kobject_action action,
+                                             const char *dm_action,
+                                             const char *path,
+                                             unsigned nr_valid_paths)
+{
+       struct dm_uevent *event;
+
+       event = dm_uevent_alloc(md);
+       if (!event) {
+               DMERR("%s: dm_uevent_alloc() failed", __FUNCTION__);
+               goto err_nomem;
+       }
+
+       event->action = action;
+
+       if (add_uevent_var(&event->ku_env, "DM_TARGET=%s", ti->type->name)) {
+               DMERR("%s: add_uevent_var() for DM_TARGET failed",
+                     __FUNCTION__);
+               goto err_add;
+       }
+
+       if (add_uevent_var(&event->ku_env, "DM_ACTION=%s", dm_action)) {
+               DMERR("%s: add_uevent_var() for DM_ACTION failed",
+                     __FUNCTION__);
+               goto err_add;
+       }
+
+       if (add_uevent_var(&event->ku_env, "DM_SEQNUM=%u",
+                          dm_next_uevent_seq(md))) {
+               DMERR("%s: add_uevent_var() for DM_SEQNUM failed",
+                     __FUNCTION__);
+               goto err_add;
+       }
+
+       if (add_uevent_var(&event->ku_env, "DM_PATH=%s", path)) {
+               DMERR("%s: add_uevent_var() for DM_PATH failed", __FUNCTION__);
+               goto err_add;
+       }
+
+       if (add_uevent_var(&event->ku_env, "DM_NR_VALID_PATHS=%d",
+                          nr_valid_paths)) {
+               DMERR("%s: add_uevent_var() for DM_NR_VALID_PATHS failed",
+                     __FUNCTION__);
+               goto err_add;
+       }
+
+       return event;
+
+err_add:
+       dm_uevent_free(event);
+err_nomem:
+       return ERR_PTR(-ENOMEM);
+}
+
+/**
+ * dm_send_uevents - send uevents for given list
+ *
+ * @events:    list of events to send
+ * @kobj:      kobject generating event
+ *
+ */
+void dm_send_uevents(struct list_head *events, struct kobject *kobj)
+{
+       int r;
+       struct dm_uevent *event, *next;
+
+       list_for_each_entry_safe(event, next, events, elist) {
+               list_del_init(&event->elist);
+
+               /*
+                * Need to call dm_copy_name_and_uuid from here for now.
+                * Context of previous var adds and locking used for
+                * hash_cell not compatable.
+                */
+               if (dm_copy_name_and_uuid(event->md, event->name,
+                                         event->uuid)) {
+                       DMERR("%s: dm_copy_name_and_uuid() failed",
+                             __FUNCTION__);
+                       goto uevent_free;
+               }
+
+               if (add_uevent_var(&event->ku_env, "DM_NAME=%s", event->name)) {
+                       DMERR("%s: add_uevent_var() for DM_NAME failed",
+                             __FUNCTION__);
+                       goto uevent_free;
+               }
+
+               if (add_uevent_var(&event->ku_env, "DM_UUID=%s", event->uuid)) {
+                       DMERR("%s: add_uevent_var() for DM_UUID failed",
+                             __FUNCTION__);
+                       goto uevent_free;
+               }
+
+               r = kobject_uevent_env(kobj, event->action, event->ku_env.envp);
+               if (r)
+                       DMERR("%s: kobject_uevent_env failed", __FUNCTION__);
+uevent_free:
+               dm_uevent_free(event);
+       }
+}
+EXPORT_SYMBOL_GPL(dm_send_uevents);
+
+/**
+ * dm_path_uevent - called to create a new path event and queue it
+ *
+ * @event_type:        path event type enum
+ * @ti:                        pointer to a dm_target
+ * @path:              string containing pathname
+ * @nr_valid_paths:    number of valid paths remaining
+ *
+ */
+void dm_path_uevent(enum dm_uevent_type event_type, struct dm_target *ti,
+                  const char *path, unsigned nr_valid_paths)
+{
+       struct mapped_device *md = dm_table_get_md(ti->table);
+       struct dm_uevent *event;
+
+       if (event_type >= ARRAY_SIZE(_dm_uevent_type_names)) {
+               DMERR("%s: Invalid event_type %d", __FUNCTION__, event_type);
+               goto out;
+       }
+
+       event = dm_build_path_uevent(md, ti,
+                                    _dm_uevent_type_names[event_type].action,
+                                    _dm_uevent_type_names[event_type].name,
+                                    path, nr_valid_paths);
+       if (IS_ERR(event))
+               goto out;
+
+       dm_uevent_add(md, &event->elist);
+
+out:
+       dm_put(md);
+}
+EXPORT_SYMBOL_GPL(dm_path_uevent);
+
+int dm_uevent_init(void)
+{
+       _dm_event_cache = KMEM_CACHE(dm_uevent, 0);
+       if (!_dm_event_cache)
+               return -ENOMEM;
+
+       DMINFO("version 1.0.3");
+
+       return 0;
+}
+
+void dm_uevent_exit(void)
+{
+       kmem_cache_destroy(_dm_event_cache);
+}
diff --git a/drivers/md/dm-uevent.h b/drivers/md/dm-uevent.h
new file mode 100644 (file)
index 0000000..2eccc8b
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Device Mapper Uevent Support
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Copyright IBM Corporation, 2007
+ *     Author: Mike Anderson <andmike@linux.vnet.ibm.com>
+ */
+#ifndef DM_UEVENT_H
+#define DM_UEVENT_H
+
+enum dm_uevent_type {
+       DM_UEVENT_PATH_FAILED,
+       DM_UEVENT_PATH_REINSTATED,
+};
+
+#ifdef CONFIG_DM_UEVENT
+
+extern int dm_uevent_init(void);
+extern void dm_uevent_exit(void);
+extern void dm_send_uevents(struct list_head *events, struct kobject *kobj);
+extern void dm_path_uevent(enum dm_uevent_type event_type,
+                          struct dm_target *ti, const char *path,
+                          unsigned nr_valid_paths);
+
+#else
+
+static inline int dm_uevent_init(void)
+{
+       return 0;
+}
+static inline void dm_uevent_exit(void)
+{
+}
+static inline void dm_send_uevents(struct list_head *events,
+                                  struct kobject *kobj)
+{
+}
+static inline void dm_path_uevent(enum dm_uevent_type event_type,
+                                 struct dm_target *ti, const char *path,
+                                 unsigned nr_valid_paths)
+{
+}
+
+#endif /* CONFIG_DM_UEVENT */
+
+#endif /* DM_UEVENT_H */
index d837d37f62093d1669a5bf87d160eab34eb45aa3..07cbbb8eb3e0d5d67f5c7bed7ea399f6636e5954 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "dm.h"
 #include "dm-bio-list.h"
+#include "dm-uevent.h"
 
 #include <linux/init.h>
 #include <linux/module.h>
@@ -112,6 +113,9 @@ struct mapped_device {
         */
        atomic_t event_nr;
        wait_queue_head_t eventq;
+       atomic_t uevent_seq;
+       struct list_head uevent_list;
+       spinlock_t uevent_lock; /* Protect access to uevent_list */
 
        /*
         * freeze/thaw support require holding onto a super block
@@ -143,11 +147,19 @@ static int __init local_init(void)
                return -ENOMEM;
        }
 
+       r = dm_uevent_init();
+       if (r) {
+               kmem_cache_destroy(_tio_cache);
+               kmem_cache_destroy(_io_cache);
+               return r;
+       }
+
        _major = major;
        r = register_blkdev(_major, _name);
        if (r < 0) {
                kmem_cache_destroy(_tio_cache);
                kmem_cache_destroy(_io_cache);
+               dm_uevent_exit();
                return r;
        }
 
@@ -162,6 +174,7 @@ static void local_exit(void)
        kmem_cache_destroy(_tio_cache);
        kmem_cache_destroy(_io_cache);
        unregister_blkdev(_major, _name);
+       dm_uevent_exit();
 
        _major = 0;
 
@@ -751,15 +764,13 @@ static void __clone_and_map(struct clone_info *ci)
 /*
  * Split the bio into several clones.
  */
-static void __split_bio(struct mapped_device *md, struct bio *bio)
+static int __split_bio(struct mapped_device *md, struct bio *bio)
 {
        struct clone_info ci;
 
        ci.map = dm_get_table(md);
-       if (!ci.map) {
-               bio_io_error(bio);
-               return;
-       }
+       if (unlikely(!ci.map))
+               return -EIO;
 
        ci.md = md;
        ci.bio = bio;
@@ -779,6 +790,8 @@ static void __split_bio(struct mapped_device *md, struct bio *bio)
        /* drop the extra reference count */
        dec_pending(ci.io, 0);
        dm_table_put(ci.map);
+
+       return 0;
 }
 /*-----------------------------------------------------------------
  * CRUD END
@@ -790,7 +803,7 @@ static void __split_bio(struct mapped_device *md, struct bio *bio)
  */
 static int dm_request(struct request_queue *q, struct bio *bio)
 {
-       int r;
+       int r = -EIO;
        int rw = bio_data_dir(bio);
        struct mapped_device *md = q->queuedata;
 
@@ -815,18 +828,11 @@ static int dm_request(struct request_queue *q, struct bio *bio)
        while (test_bit(DMF_BLOCK_IO, &md->flags)) {
                up_read(&md->io_lock);
 
-               if (bio_rw(bio) == READA) {
-                       bio_io_error(bio);
-                       return 0;
-               }
-
-               r = queue_io(md, bio);
-               if (r < 0) {
-                       bio_io_error(bio);
-                       return 0;
+               if (bio_rw(bio) != READA)
+                       r = queue_io(md, bio);
 
-               } else if (r == 0)
-                       return 0;       /* deferred successfully */
+               if (r <= 0)
+                       goto out_req;
 
                /*
                 * We're in a while loop, because someone could suspend
@@ -835,8 +841,13 @@ static int dm_request(struct request_queue *q, struct bio *bio)
                down_read(&md->io_lock);
        }
 
-       __split_bio(md, bio);
+       r = __split_bio(md, bio);
        up_read(&md->io_lock);
+
+out_req:
+       if (r < 0)
+               bio_io_error(bio);
+
        return 0;
 }
 
@@ -977,6 +988,9 @@ static struct mapped_device *alloc_dev(int minor)
        atomic_set(&md->holders, 1);
        atomic_set(&md->open_count, 0);
        atomic_set(&md->event_nr, 0);
+       atomic_set(&md->uevent_seq, 0);
+       INIT_LIST_HEAD(&md->uevent_list);
+       spin_lock_init(&md->uevent_lock);
 
        md->queue = blk_alloc_queue(GFP_KERNEL);
        if (!md->queue)
@@ -1044,12 +1058,14 @@ static struct mapped_device *alloc_dev(int minor)
        return NULL;
 }
 
+static void unlock_fs(struct mapped_device *md);
+
 static void free_dev(struct mapped_device *md)
 {
        int minor = md->disk->first_minor;
 
        if (md->suspended_bdev) {
-               thaw_bdev(md->suspended_bdev, NULL);
+               unlock_fs(md);
                bdput(md->suspended_bdev);
        }
        mempool_destroy(md->tio_pool);
@@ -1073,8 +1089,16 @@ static void free_dev(struct mapped_device *md)
  */
 static void event_callback(void *context)
 {
+       unsigned long flags;
+       LIST_HEAD(uevents);
        struct mapped_device *md = (struct mapped_device *) context;
 
+       spin_lock_irqsave(&md->uevent_lock, flags);
+       list_splice_init(&md->uevent_list, &uevents);
+       spin_unlock_irqrestore(&md->uevent_lock, flags);
+
+       dm_send_uevents(&uevents, &md->disk->kobj);
+
        atomic_inc(&md->event_nr);
        wake_up(&md->eventq);
 }
@@ -1233,7 +1257,8 @@ static void __flush_deferred_io(struct mapped_device *md, struct bio *c)
        while (c) {
                n = c->bi_next;
                c->bi_next = NULL;
-               __split_bio(md, c);
+               if (__split_bio(md, c))
+                       bio_io_error(c);
                c = n;
        }
 }
@@ -1491,6 +1516,11 @@ out:
 /*-----------------------------------------------------------------
  * Event notification.
  *---------------------------------------------------------------*/
+uint32_t dm_next_uevent_seq(struct mapped_device *md)
+{
+       return atomic_add_return(1, &md->uevent_seq);
+}
+
 uint32_t dm_get_event_nr(struct mapped_device *md)
 {
        return atomic_read(&md->event_nr);
@@ -1502,6 +1532,15 @@ int dm_wait_event(struct mapped_device *md, int event_nr)
                        (event_nr != atomic_read(&md->event_nr)));
 }
 
+void dm_uevent_add(struct mapped_device *md, struct list_head *elist)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&md->uevent_lock, flags);
+       list_add(elist, &md->uevent_list);
+       spin_unlock_irqrestore(&md->uevent_lock, flags);
+}
+
 /*
  * The gendisk is only valid as long as you have a reference
  * count on 'md'.
index 7e052378c47ea6af6c42eec7f134934b6d49d1c0..f3831f31223e51ba873d67cc2aca45c786b8001b 100644 (file)
@@ -198,7 +198,7 @@ struct kcopyd_job {
         * These fields are only used if the job has been split
         * into more manageable parts.
         */
-       struct semaphore lock;
+       struct mutex lock;
        atomic_t sub_jobs;
        sector_t progress;
 };
@@ -456,7 +456,7 @@ static void segment_complete(int read_err,
        sector_t count = 0;
        struct kcopyd_job *job = (struct kcopyd_job *) context;
 
-       down(&job->lock);
+       mutex_lock(&job->lock);
 
        /* update the error */
        if (read_err)
@@ -480,7 +480,7 @@ static void segment_complete(int read_err,
                        job->progress += count;
                }
        }
-       up(&job->lock);
+       mutex_unlock(&job->lock);
 
        if (count) {
                int i;
@@ -562,7 +562,7 @@ int kcopyd_copy(struct kcopyd_client *kc, struct io_region *from,
                dispatch_job(job);
 
        else {
-               init_MUTEX(&job->lock);
+               mutex_init(&job->lock);
                job->progress = 0;
                split_job(job);
        }
index 16775a0df7f6dbedb1648fc45793521557be3b5b..85478d6a9c1af645dfdfdb824aa1b6c7286e9daf 100644 (file)
@@ -9,7 +9,7 @@
  *
  * Better read-balancing code written by Mika Kuoppala <miku@iki.fi>, 2000
  *
- * Fixes to reconstruction by Jakob Østergaard" <jakob@ostenfeld.dk>
+ * Fixes to reconstruction by Jakob Østergaard" <jakob@ostenfeld.dk>
  * Various fixes by Neil Brown <neilb@cse.unsw.edu.au>
  *
  * Changes by Peter T. Breuer <ptb@it.uc3m.es> 31/1/2003 to support
index d2905720eb746b782f034b5e2b0aa1898c16b683..9c905399a233028ba9872cc503efa1f6ef8b699f 100644 (file)
@@ -312,7 +312,7 @@ static int sort_and_eliminate(u32* values, int* count)
                return -EINVAL;
        }
 
-       /* bubble sort the first ´count´ items of the array ´values´ */
+       /* bubble sort the first @count items of the array @values */
        for( top = *count; top > 0; top--) {
                for( low = 0, high = 1; high < top; low++, high++) {
                        if( values[low] > values[high] ) {
index eca602d9b3dec38c7971426e1114fd5b38b4ac3c..85e36a1d6d782d4c8c4581014e9944c9ec9e43dc 100644 (file)
@@ -280,7 +280,7 @@ static irqreturn_t bt878_irq(int irq, void *dev_id)
                if (!(astat = (stat & mask)))
                        return IRQ_NONE;        /* this interrupt is not for me */
 /*             dprintk("bt878(%d) debug: irq count %d, stat 0x%8.8x, mask 0x%8.8x\n",bt->nr,count,stat,mask); */
-               btwrite(astat, BT878_AINT_STAT);        /* try to clear interupt condition */
+               btwrite(astat, BT878_AINT_STAT);        /* try to clear interrupt condition */
 
 
                if (astat & (BT878_ASCERR | BT878_AOCERR)) {
index 154a7ce7cb826dd43443b4492e9f8ca92a322ce7..a05e5c1822888547e7d9bfda28975c99eeaf586e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * TerraTec Cinergy T²/qanu USB2 DVB-T adapter.
+ * TerraTec Cinergy T²/qanu USB2 DVB-T adapter.
  *
  * Copyright (C) 2004 Daniel Mack <daniel@qanu.de> and
  *                 Holger Waechtler <holger@qanu.de>
index 288e79f2cb0f9fba41f29fdc7b940edfe9489bef..7902ae1d9a181c80e205eac147fdb92d3f704ee4 100644 (file)
@@ -128,7 +128,7 @@ struct ttusb {
        struct dvb_frontend* fe;
 };
 
-/* ugly workaround ... don't know why it's neccessary to read */
+/* ugly workaround ... don't know why it's necessary to read */
 /* all result codes. */
 
 #define DEBUG 0
index dd6a7d68b07fca263b2648136c21aedadaf97c2e..3abd9fa54d2cd5a856f8b0d2af24b57e88dec493 100644 (file)
@@ -1259,7 +1259,7 @@ struct tvcard bttv_tvcards[] = {
                .has_radio      = 1,
        },
        [BTTV_BOARD_LIFETEC_9415] = {
-               /* Tim Röstermundt <rosterm@uni-muenster.de>
+               /* Tim Röstermundt <rosterm@uni-muenster.de>
                in de.comp.os.unix.linux.hardware:
                        options bttv card=0 pll=1 radio=1 gpiomask=0x18e0
                        gpiomux =0x44c71f,0x44d71f,0,0x44d71f,0x44dfff
@@ -2824,7 +2824,7 @@ struct tvcard bttv_tvcards[] = {
        },
                /* ---- card 0x8b ---------------------------------- */
        [BTTV_BOARD_PV_M4900] = {
-               /* Sérgio Fortier <sergiofortier@yahoo.com.br> */
+               /* Sérgio Fortier <sergiofortier@yahoo.com.br> */
                .name           = "Prolink PixelView PlayTV MPEG2 PV-M4900",
                .video_inputs   = 3,
                .audio_inputs   = 1,
@@ -4709,18 +4709,18 @@ adtvk503_audio(struct bttv *btv, struct video_audio *v, int set)
  *
  * The board hardwire Y0 (xpoint) to MUX1 and MUXOUT to Yin.
  * GPIO pins are wired as:
- *  GPIO[0:3] - AX[0:3] (xpoint) - P1[0:3] (microcontroler)
- *  GPIO[4:6] - AY[0:2] (xpoint) - P1[4:6] (microcontroler)
- *  GPIO[7]   - DATA (xpoint)    - P1[7] (microcontroler)
- *  GPIO[8]   -                  - P3[5] (microcontroler)
- *  GPIO[9]   - RESET (xpoint)   - P3[6] (microcontroler)
- *  GPIO[10]  - STROBE (xpoint)  - P3[7] (microcontroler)
- *  GPINTR    -                  - P3[4] (microcontroler)
+ *  GPIO[0:3] - AX[0:3] (xpoint) - P1[0:3] (microcontroller)
+ *  GPIO[4:6] - AY[0:2] (xpoint) - P1[4:6] (microcontroller)
+ *  GPIO[7]   - DATA (xpoint)    - P1[7] (microcontroller)
+ *  GPIO[8]   -                  - P3[5] (microcontroller)
+ *  GPIO[9]   - RESET (xpoint)   - P3[6] (microcontroller)
+ *  GPIO[10]  - STROBE (xpoint)  - P3[7] (microcontroller)
+ *  GPINTR    -                  - P3[4] (microcontroller)
  *
- * The microcontroler is a 80C32 like. It should be possible to change xpoint
- * configuration either directly (as we are doing) or using the microcontroler
+ * The microcontroller is a 80C32 like. It should be possible to change xpoint
+ * configuration either directly (as we are doing) or using the microcontroller
  * which is also wired to I2C interface. I have no further info on the
- * microcontroler features, one would need to disassembly the firmware.
+ * microcontroller features, one would need to disassembly the firmware.
  * note: the vendor refused to give any information on this product, all
  *       that stuff was found using a multimeter! :)
  */
@@ -4788,7 +4788,7 @@ static void tibetCS16_init(struct bttv *btv)
  * The analog switch is controlled by the "master", but the detection order
  * of the four BT878A chips is in an order which I just don't understand.
  * The "master" is actually the second controller to be detected.  The
- * logic on the board uses logical numbers for the 4 controlers, but
+ * logic on the board uses logical numbers for the 4 controllers, but
  * those numbers are different from the detection sequence.  When working
  * with the analog switch, we need to "map" from the detection sequence
  * over to the board's logical controller number.  This mapping sequence
index b8d5327c438ded1e879216b485f7d1ac0ea2a82d..e467682aabd7744de6beaa87f5e72cde344970e4 100644 (file)
@@ -907,7 +907,7 @@ static int em28xx_set_fmt(struct em28xx *dev, unsigned int cmd, struct v4l2_form
 
        /* stop io in case it is already in progress */
        if (dev->stream == STREAM_ON) {
-               em28xx_videodbg("VIDIOC_SET_FMT: interupting stream\n");
+               em28xx_videodbg("VIDIOC_SET_FMT: interrupting stream\n");
                if ((ret = em28xx_stream_interrupt(dev)))
                        return ret;
        }
index 7533fc2033195b97e2648a82225514e7663007b1..69283926a8dcd685bca62de0bc3bec5c60202ebe 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2001-2004 Stelian Pop <stelian@popies.net>
  *
- * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
+ * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
  *
  * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com>
  *
index 323d0074120da4aa5ad7f0c87413abd72212e219..d535748df445a9d50f121addae83dd9e92d8b617 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2001-2004 Stelian Pop <stelian@popies.net>
  *
- * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
+ * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
  *
  * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com>
  *
index e20aa3612a7c86699053cdd512be1e286e4b3506..ad0232935df6fb760f176f97695f8ce81ed38957 100644 (file)
@@ -196,10 +196,10 @@ static int i2c_senddata(struct saa5246a_device *t, ...)
        return i2c_sendbuf(t, buf[0], ct-1, buf+1);
 }
 
-/* Get count number of bytes from I²C-device at address adr, store them in buf.
+/* Get count number of bytes from I²C-device at address adr, store them in buf.
  * Start & stop handshaking is done by this routine, ack will be sent after the
  * last byte to inhibit further sending of data. If uaccess is 'true', data is
- * written to user-space with put_user. Returns -1 if I²C-device didn't send
+ * written to user-space with put_user. Returns -1 if I²C-device didn't send
  * acknowledge, 0 otherwise
  */
 static int i2c_getdata(struct saa5246a_device *t, int count, u8 *buf)
index 17f1e2e9a66b16c3031fe9e7b29573765da8f86e..94bb59a32b17e3e984dfb0ec03905ef99a4dc855 100644 (file)
@@ -291,10 +291,10 @@ static int i2c_senddata(struct saa5249_device *t, ...)
        return i2c_sendbuf(t, buf[0], ct-1, buf+1);
 }
 
-/* Get count number of bytes from I²C-device at address adr, store them in buf. Start & stop
+/* Get count number of bytes from I²C-device at address adr, store them in buf. Start & stop
  * handshaking is done by this routine, ack will be sent after the last byte to inhibit further
  * sending of data. If uaccess is 'true', data is written to user-space with put_user.
- * Returns -1 if I²C-device didn't send acknowledge, 0 otherwise
+ * Returns -1 if I²C-device didn't send acknowledge, 0 otherwise
  */
 
 static int i2c_getdata(struct saa5249_device *t, int count, u8 *buf)
index ff555129c82f2830d45ec0b3a7e9e30fe3d555b3..db3c9e3deb26a86a91a4ba302adae3f7b7197851 100644 (file)
@@ -955,7 +955,7 @@ read_frame(struct vicam_camera *cam, int framenum)
                request[7] = realShutter >> 8;
        }
 
-       // Per John Markus Bjørndalen, byte at index 8 causes problems if it isn't 0
+       // Per John Markus Bjørndalen, byte at index 8 causes problems if it isn't 0
        request[8] = 0;
        // bytes 9-15 do not seem to affect exposure or image quality
 
index c3440b280d208456d6d50980f8949ae423aba493..321249240d058bb2e6eedaf44f635e9db8cbb8bc 100644 (file)
@@ -37,7 +37,7 @@
  * Video4linux 1/2 integration by Justin Schoeman
  * <justin@suntiger.ee.up.ac.za>
  * 2.4 PROCFS support ported from 2.4 kernels by
- *  Iñaki García Etxebarria <garetxe@euskalnet.net>
+ *  Iñaki García Etxebarria <garetxe@euskalnet.net>
  * Makefile fix by "W. Michael Petullo" <mike@flyn.org>
  * 2.4 devfs support ported from 2.4 kernels by
  *  Dan Merillat <dan@merillat.org>
index a81f851f7b5de08d08a0c22d33097c0b2731e38c..911fc3021e3bc71d921139ceee08778e024487c2 100644 (file)
@@ -30,13 +30,13 @@ Juha Sievanen, University of Helsinki Finland
        Bug fixes
        Core code extensions
 
-Auvo Häkkinen, University of Helsinki Finland
+Auvo Häkkinen, University of Helsinki Finland
        LAN OSM code
        /Proc interface to LAN class
        Bug fixes
        Core code extensions
 
-Taneli Vähäkangas, University of Helsinki Finland
+Taneli Vähäkangas, University of Helsinki Finland
        Fixes to i2o_config
 
 CREDITS
index ce8f1a34ed2130fbcb7eae0dc6c53c81d689f0c5..6cbcc21de5182b2ce3e4087e3a022654eb7cb606 100644 (file)
@@ -15,8 +15,8 @@
  *
  *     Fixes/additions:
  *             Philipp Rumpf
- *             Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI>
- *             Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
+ *             Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI>
+ *             Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
  *             Deepak Saxena <deepak@plexity.net>
  *             Boji T Kannanthanam <boji.t.kannanthanam@intel.com>
  *             Alan Cox <alan@redhat.com>:
index 84e046e94f5f9829a4bd762db7ef9f8c5062ac85..c0fb77dc19bb1da39d4c969d60691fc634a63235 100644 (file)
  *             Added basic ioctl() support
  *     Deepak Saxena (06/07/1999):
  *             Added software download ioctl (still testing)
- *     Auvo Häkkinen (09/10/1999):
+ *     Auvo Häkkinen (09/10/1999):
  *             Changes to i2o_cfg_reply(), ioctl_parms()
  *             Added ioct_validate()
- *     Taneli Vähäkangas (09/30/1999):
+ *     Taneli Vähäkangas (09/30/1999):
  *             Fixed ioctl_swdl()
- *     Taneli Vähäkangas (10/04/1999):
+ *     Taneli Vähäkangas (10/04/1999):
  *             Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel()
  *     Deepak Saxena (11/18/1999):
  *             Added event managmenet support
index 06892ac2286e4e5ef37edda3b028522f3797201d..6fdd072201f990e4b975724bef3668b08f44dfac 100644 (file)
@@ -19,8 +19,8 @@
  *
  *
  *     Fixes/additions:
- *             Juha Sievänen (Juha.Sievanen@cs.Helsinki.FI),
- *             Auvo Häkkinen (Auvo.Hakkinen@cs.Helsinki.FI)
+ *             Juha Sievänen (Juha.Sievanen@cs.Helsinki.FI),
+ *             Auvo Häkkinen (Auvo.Hakkinen@cs.Helsinki.FI)
  *             University of Helsinki, Department of Computer Science
  *                     LAN entries
  *             Markus Lidel <Markus.Lidel@shadowconnect.com>
index a1ec16a075c62a2a585684e6583a35d23589130f..7814a06ae970f515cc43e21051e0bb13a09c53a9 100644 (file)
@@ -15,8 +15,8 @@
  *
  *     Fixes/additions:
  *             Philipp Rumpf
- *             Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI>
- *             Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
+ *             Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI>
+ *             Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
  *             Deepak Saxena <deepak@plexity.net>
  *             Boji T Kannanthanam <boji.t.kannanthanam@intel.com>
  *             Alan Cox <alan@redhat.com>:
index 3661e6e065d27c705c86d0e5d215b24523939adc..685a89547a51fdc26929c5df2202b1f353188d7a 100644 (file)
@@ -15,8 +15,8 @@
  *
  *     Fixes/additions:
  *             Philipp Rumpf
- *             Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI>
- *             Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
+ *             Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI>
+ *             Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
  *             Deepak Saxena <deepak@plexity.net>
  *             Boji T Kannanthanam <boji.t.kannanthanam@intel.com>
  *             Alan Cox <alan@redhat.com>:
index a20a51efe11896416e2ca4f7bdee82f4e047a592..25716193a534db2d4fb16c00cca5b1a94c481c6a 100644 (file)
@@ -10,8 +10,8 @@ config MFD_SM501
         ---help---
          This is the core driver for the Silicon Motion SM501 multimedia
          companion chip. This device is a multifunction device which may
-         provide numerous interfaces including USB host controller USB gadget,
-         Asyncronous Serial ports, Audio functions and a dual display video
+         provide numerous interfaces including USB host controller, USB gadget,
+         asynchronous serial ports, audio functions, and a dual display video
          interface. The device may be connected by PCI or local bus with
          varying functions enabled.
 
index cf02ddc3436fce25dde5ad87b190ad21776480e8..b5e67c0ff43304d3e16be35525a47e9fc96aaaaf 100644 (file)
@@ -180,7 +180,7 @@ config THINKPAD_ACPI
          For more information about this driver see 
          <file:Documentation/thinkpad-acpi.txt> and <http://ibm-acpi.sf.net/> .
 
-         This driver was formely known as ibm-acpi.
+         This driver was formerly known as ibm-acpi.
 
          If you have an IBM or Lenovo ThinkPad laptop, say Y or M here.
 
@@ -214,7 +214,7 @@ config THINKPAD_ACPI_BAY
        default y
        ---help---
          Allows the thinkpad_acpi driver to handle removable bays.  It will
-         eletrically disable the device in the bay, and also generate
+         electrically disable the device in the bay, and also generate
          notifications when the bay lever is ejected or inserted.
 
          If you are not sure, say Y here.
index 1d9defb1a10c04d442b3edde8920977d686616ad..477bb43c899c2fdb72e87ca9ecb337f9bb1e8d3e 100644 (file)
@@ -17,7 +17,7 @@
  *
  * Copyright (C) IBM Corporation, 2004
  *
- * Authors: Max Asböck <amax@us.ibm.com>
+ * Authors: Max Asböck <amax@us.ibm.com>
  *          Vernon Mauery <vernux@us.ibm.com>
  *
  */
index 1bfbb87e5793a7585271c580bc0abc2f0db06bb7..bb13858f60a135fd71a06525ade38c8e8cd227ed 100644 (file)
@@ -14,7 +14,7 @@
  *
  * Copyright (C) 2005 Narayanan R S <nars@kadamba.org>
  *
- * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
+ * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
  *
  * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au>
  *
@@ -277,7 +277,7 @@ static void do_sony_laptop_release_key(struct work_struct *work)
 static DECLARE_WORK(sony_laptop_release_key_work,
                do_sony_laptop_release_key);
 
-/* forward event to the input subsytem */
+/* forward event to the input subsystem */
 static void sony_laptop_report_input_event(u8 event)
 {
        struct input_dev *jog_dev = sony_laptop_input.jog_dev;
index 2a2a125b0c760a795be1f77bb8889aa21c381a15..a592fc04cf781455459bbb390227da7f72fdab50 100644 (file)
@@ -54,7 +54,7 @@ config MTD_PHYSMAP_BANKWIDTH
        help
          This is the total width of the data bus of the flash devices
          in octets. For example, if you have a data bus width of 32
-         bits, you would set the bus width octect value to 4. This is
+         bits, you would set the bus width octet value to 4. This is
          used internally by the CFI drivers.
          Ignore this option if you use run-time physmap configuration
          (i.e., run-time calling physmap_configure()).
@@ -73,12 +73,12 @@ config MTD_PMC_MSP_EVM
        depends on PMC_MSP && MTD_CFI
        select MTD_PARTITIONS
        help
-         This provides a 'mapping' driver which support the way
-          in which user-programmable flash chips are connected on the
-          PMC-Sierra MSP eval/demo boards
+         This provides a 'mapping' driver which supports the way
+         in which user-programmable flash chips are connected on the
+         PMC-Sierra MSP eval/demo boards.
 
 choice
-       prompt "Maximum mappable memory avialable for flash IO"
+       prompt "Maximum mappable memory available for flash IO"
        depends on MTD_PMC_MSP_EVM
        default MSP_FLASH_MAP_LIMIT_32M
 
index 973b684c11e34f5055bf2fde0b86711043ddb5f1..eef6fecfff2ac731eb7259896ea8853adc384c8c 100644 (file)
@@ -73,7 +73,7 @@
 
                Jean-Jacques Michel - bug fix
 
-               Tobias Ringström - Rx interrupt status checking suggestion
+               Tobias Ringström - Rx interrupt status checking suggestion
 
                Andrew Morton - Clear blocked signals, avoid
                buffer overrun setting current->comm.
index 83d52c8acab0399ea82c71b259181b8e0573523f..ce34b539bf38e7f12f4ab638f15f7088ab482e0c 100644 (file)
@@ -855,7 +855,7 @@ config BFIN_MAC_USE_L1
        depends on BFIN_MAC && BF537
        default y
        help
-         To get maximum network performace, you should use L1 memory as rx/tx buffers.
+         To get maximum network performance, you should use L1 memory as rx/tx buffers.
          Say N here if you want to reserve L1 memory for other uses.
 
 config BFIN_TX_DESC_NUM
@@ -1293,9 +1293,6 @@ config PCNET32_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config AMD8111_ETH
@@ -1313,7 +1310,7 @@ config AMD8111_ETH
          will be called amd8111e.
 
 config AMD8111E_NAPI
-       bool "Enable NAPI support"
+       bool "Use RX polling (NAPI)"
        depends on AMD8111_ETH
        help
          NAPI is a new driver API designed to reduce CPU and interrupt load
@@ -1324,9 +1321,6 @@ config AMD8111E_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config ADAPTEC_STARFIRE
@@ -1355,9 +1349,6 @@ config ADAPTEC_STARFIRE_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config AC3200
@@ -1431,7 +1422,7 @@ config FORCEDETH
          called forcedeth.
 
 config FORCEDETH_NAPI
-       bool "Use Rx and Tx Polling (NAPI) (EXPERIMENTAL)"
+       bool "Use Rx Polling (NAPI) (EXPERIMENTAL)"
        depends on FORCEDETH && EXPERIMENTAL
        help
          NAPI is a new driver API designed to reduce CPU and interrupt load
@@ -1442,9 +1433,6 @@ config FORCEDETH_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config CS89x0
@@ -1756,9 +1744,6 @@ config VIA_RHINE_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
 config LAN_SAA9730
        bool "Philips SAA9730 Ethernet support"
        depends on NET_PCI && PCI && MIPS_ATLAS
@@ -2003,9 +1988,6 @@ config E1000_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config E1000_DISABLE_PACKET_SPLIT
@@ -2099,7 +2081,7 @@ config R8169
          will be called r8169.  This is recommended.
 
 config R8169_NAPI
-       bool "Use Rx and Tx Polling (NAPI) (EXPERIMENTAL)"
+       bool "Use Rx Polling (NAPI) (EXPERIMENTAL)"
        depends on R8169 && EXPERIMENTAL
        help
          NAPI is a new driver API designed to reduce CPU and interrupt load
@@ -2110,9 +2092,6 @@ config R8169_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config R8169_VLAN
@@ -2364,7 +2343,7 @@ config GIANFAR
          and MPC86xx family of chips, and the FEC on the 8540.
 
 config GFAR_NAPI
-       bool "NAPI Support"
+       bool "Use Rx Polling (NAPI)"
        depends on GIANFAR
 
 config UCC_GETH
@@ -2376,7 +2355,7 @@ config UCC_GETH
          which is available on some Freescale SOCs.
 
 config UGETH_NAPI
-       bool "NAPI Support"
+       bool "Use Rx Polling (NAPI)"
        depends on UCC_GETH
 
 config UGETH_MAGIC_PACKET
@@ -2494,7 +2473,7 @@ config CHELSIO_T3
 
 config EHEA
        tristate "eHEA Ethernet support"
-       depends on IBMEBUS
+       depends on IBMEBUS && INET
        select INET_LRO
        ---help---
          This driver supports the IBM pSeries eHEA ethernet adapter.
@@ -2559,9 +2538,6 @@ config IXGB_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config S2IO
@@ -2584,14 +2560,11 @@ config S2IO_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config MYRI10GE
        tristate "Myricom Myri-10G Ethernet support"
-       depends on PCI
+       depends on PCI && INET
        select FW_LOADER
        select CRC32
        select INET_LRO
index 1cc74ec88a5860e00a895bd05b75882dac7fe9b2..eebf5bb2b03ae6a4958df7bff99d973adddc3771 100644 (file)
@@ -1111,7 +1111,7 @@ static struct net_device_stats *amd8111e_get_stats(struct net_device * dev)
 
        return new_stats;
 }
-/* This function recalculate the interupt coalescing  mode on every interrupt
+/* This function recalculate the interrupt coalescing  mode on every interrupt
 according to the datarate and the packet rate.
 */
 static int amd8111e_calc_coalesce(struct net_device *dev)
index 3fa3bccd1adb26194314986764e6031efb5a8b41..10f3a196be32b729c5ddb075d72f39a0c82199ff 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  Amiga Linux/m68k Ariadne Ethernet Driver
  *
- *  © Copyright 1995-2003 by Geert Uytterhoeven (geert@linux-m68k.org)
+ *  Â© Copyright 1995-2003 by Geert Uytterhoeven (geert@linux-m68k.org)
  *                          Peter De Schrijver (p2@mind.be)
  *
  *  ---------------------------------------------------------------------------
index f7913d5a39f1991a264dea61453812117539561b..bb613f292e04d613808dd8288e7e703d494cc665 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  Amiga Linux/m68k Ariadne Ethernet Driver
  *
- *  © Copyright 1995 by Geert Uytterhoeven (geert@linux-m68k.org)
+ *  Â© Copyright 1995 by Geert Uytterhoeven (geert@linux-m68k.org)
  *                     Peter De Schrijver
  *                    (Peter.DeSchrijver@linux.cc.kuleuven.ac.be)
  *
index 185f98e3964c49b6a1615dc72c09f28ca227419f..504b7ce2747de0c6cf91f6ab945608dd11dcfd76 100644 (file)
@@ -542,7 +542,7 @@ static struct {
 static int num_ifs;
 
 /*
- * Setup the base address and interupt of the Au1xxx ethernet macs
+ * Setup the base address and interrupt of the Au1xxx ethernet macs
  * based on cpu type and whether the interface is enabled in sys_pinfunc
  * register. The last interface is enabled if SYS_PF_NI2 (bit 4) is 0.
  */
index 80c0c8c415ed527c470dd371a27a4669cd3afcc0..855dc10ffa1b8aea624816bd299e0689b314309d 100644 (file)
@@ -55,7 +55,7 @@ static int expected_refcount = -1;
 static struct class *netdev_class;
 /*--------------------------- Data Structures -----------------------------*/
 
-/* Bonding sysfs lock.  Why can't we just use the subsytem lock?
+/* Bonding sysfs lock.  Why can't we just use the subsystem lock?
  * Because kobject_register tries to acquire the subsystem lock.  If
  * we already hold the lock (which we would if the user was creating
  * a new bond through the sysfs interface), we deadlock.
index 27ac010900abd7ffce88ee26973569161606f567..3286d2a0a870568c3cb8f857be65526bfa4a8d20 100644 (file)
@@ -542,7 +542,8 @@ dm9000_probe(struct platform_device *pdev)
 
        if (id_val != DM9000_ID) {
                printk("%s: wrong id: 0x%08x\n", CARDNAME, id_val);
-               goto release;
+               ret = -ENODEV;
+               goto out;
        }
 
        /* from this point we assume that we have found a DM9000 */
@@ -602,8 +603,7 @@ dm9000_probe(struct platform_device *pdev)
        }
        return 0;
 
- release:
- out:
+out:
        printk("%s: not found (%d).\n", CARDNAME, ret);
 
        dm9000_release_board(pdev, db);
index 64f35e20fd48f60a9a31b70e34b1df69e25d64c1..3dbaec680b462de47ff738ed5ab14cbf8cedf111 100644 (file)
@@ -1324,7 +1324,7 @@ static inline int e100_exec_cb_wait(struct nic *nic, struct sk_buff *skb,
                if (!--counter) break;
        }
 
-       /* ack any interupts, something could have been set */
+       /* ack any interrupts, something could have been set */
        iowrite8(~0, &nic->csr->scb.stat_ack);
 
        /* if the command failed, or is not OK, notify and return */
index 047263830e6a36c5c73921f25da4d23deb0253a5..f1ce348470cc14afa6e8ea68eeb0875d4b927094 100644 (file)
@@ -3590,7 +3590,7 @@ e1000_update_stats(struct e1000_adapter *adapter)
 
        spin_lock_irqsave(&adapter->stats_lock, flags);
 
-       /* these counters are modified from e1000_adjust_tbi_stats,
+       /* these counters are modified from e1000_tbi_adjust_stats,
         * called from the interrupt context, so they must only
         * be written while holding adapter->stats_lock
         */
index 43f7647ff24631f2142ac6e68be404a4fc723eab..7bb9c728a1d311367e07a0ddc611a24cf059c77c 100644 (file)
@@ -111,7 +111,6 @@ MODULE_AUTHOR("Myson or whoever");
 MODULE_DESCRIPTION("Myson MTD-8xx 100/10M Ethernet PCI Adapter Driver");
 MODULE_LICENSE("GPL");
 module_param(max_interrupt_work, int, 0);
-//MODULE_PARM(min_pci_latency, "i");
 module_param(debug, int, 0);
 module_param(rx_copybreak, int, 0);
 module_param(multicast_filter_limit, int, 0);
index ad9e327c3b0366a99cd670d8be71dbdc64af6b12..e0119f6a3319b2fca40af251d7bd3bf09dcde038 100644 (file)
@@ -3,7 +3,7 @@
  *             devices like TTY. It interfaces between a raw TTY and the
  *             kernel's AX.25 protocol layers.
  *
- * Authors:    Andreas Könsgen <ajk@iehk.rwth-aachen.de>
+ * Authors:    Andreas Könsgen <ajk@iehk.rwth-aachen.de>
  *              Ralf Baechle DL5RB <ralf@linux-mips.org>
  *
  * Quite a lot of stuff "stolen" by Joerg Reuter from slip.c, written by
index 36d2c7d4f4d089ab3e22ab559ef5a00a336a2e16..62d5d5cfd6a60de74a241d4ad76bf1cfbc03e600 100644 (file)
@@ -64,7 +64,7 @@ config DMASCC
          dmascc. If you don't pass any parameter to the driver, all
          possible I/O addresses are probed. This could irritate other devices
          that are currently not in use. You may specify the list of addresses
-         to be probed by "dmascc=addr1,addr2,..." (when compiled into the
+         to be probed by "dmascc.io=addr1,addr2,..." (when compiled into the
          kernel image) or "io=addr1,addr2,..." (when loaded as a module). The
          network interfaces will be called dmascc0 and dmascc1 for the board
          detected first, dmascc2 and dmascc3 for the second one, and so on.
index ccf6ec548a6464a3e51c1945796a0f7842d5977d..736d2473b7e164c3d16d3b61bf8179eac2321078 100644 (file)
@@ -21,7 +21,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *     
index b2e31f4a384c96153cadeb9a6be48b35577a58b4..ae0b80a5680c77fb4c40d3fcf9ae8a52f4f30163 100644 (file)
@@ -19,7 +19,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *     
index a82d8f98383d82160d6548549b9def1c7071472c..1257e1a7e819f74411b5e5b7010fa9bb7ea25b2f 100644 (file)
@@ -595,7 +595,7 @@ toshoboe_startchip (struct toshoboe_cb *self)
   OUTB ((physaddr >> 18) & 0xff, OBOE_RING_BASE1);
   OUTB ((physaddr >> 26) & 0x3f, OBOE_RING_BASE2);
 
-  /*Enable DMA controler in byte mode and RX */
+  /*Enable DMA controller in byte mode and RX */
   OUTB (CONFIG0H_DMA_ON, OBOE_CONFIG0H);
 
   /* Start up the clocks */
index 0d2fe87fb9b78661757408a945fcd3bafb8e6cc0..738531b16bd327c72df5d0bde0a3458e6443b46d 100644 (file)
@@ -16,7 +16,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  * 
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 248aeb0c726ca8befa21bf1e9c63f21dce0c9ae6..1f57391a618b3e14ebe6c9ed56059739a1252ebd 100644 (file)
@@ -16,7 +16,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *     
index 3f46b84c6c85cd96063e812a7be370b9a05ac08d..66fc2433e97d37377d7c554cb673d5aba2d688c8 100644 (file)
@@ -17,7 +17,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *
index 6f5f697ec9f891ef557c2d4c35342a987d6978b7..2c6f7be36e8aa8eb9d712c44fd7c84be92b9530a 100644 (file)
@@ -20,7 +20,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *     
index 12b9378c587f890c090bb807a3cf7191cdcfd9fa..a873d2b315ca33e21cfc1c3ced4e3c48f6cce273 100644 (file)
@@ -20,7 +20,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *
index dacf671abcd6c01d49aa12a4585cb9ba9dc19a3a..bbdc97ff83cae11df92933f9cb7cb4b55cef2f5e 100644 (file)
@@ -19,7 +19,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *     
index 0dd6bc7af3f2b953f278d70f00cd15bd4e3be76d..d1ce5ae6a17243d37ed61ff6cfa675c1929bec02 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *     
index 8f6258221cb03bcb932a4855289f15b964373a28..9bfd2441adbf9a2a240c70773581d3d2c003bd17 100644 (file)
@@ -16,7 +16,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *     
index 0b7661deafee8d4c36f7ae0c7340458d98c55e04..87c3975baf62fa7c6888be0ca543c4bf8730b3ad 100644 (file)
@@ -16,7 +16,7 @@
  *     published by the Free Software Foundation; either version 2 of 
  *     the License, or (at your option) any later version.
  *  
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is 
  *     provided "AS-IS" and at no charge.
  *     
index 50e1ec67ef9c5f4d0fa9419b03de64961e3c3962..953117152bbd61c84022a4d1747d6fce4a1a3104 100644 (file)
@@ -996,7 +996,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
    a delay.  Note that pre-2.0.34 kernels had a cache-alignment bug that
    made udelay() unreliable.
    The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is
-   depricated.
+   deprecated.
 */
 #define eeprom_delay(ee_addr)  readl(ee_addr)
 
index 8cd243d92af3ceeee3e25d74c6f534de9cc853c5..2747b1f89ffe27f372bc819bc25590560b1c15a2 100644 (file)
@@ -185,3 +185,5 @@ void free_mdio_bitbang(struct mii_bus *bus)
        module_put(ctrl->ops->owner);
        kfree(bus);
 }
+
+MODULE_LICENSE("GPL");
index 7c60df46fc65c99208d3e539abaeecc7d409fecf..dd18af0ce67616653d815be1c9bc8102ce6c80b8 100644 (file)
@@ -1223,7 +1223,7 @@ static irqreturn_t smc911x_interrupt(int irq, void *dev_id)
                }
 #endif
 
-               /* Handle PHY interupt condition */
+               /* Handle PHY interrupt condition */
                if (status & INT_STS_PHY_INT_) {
                        DBG(SMC_DEBUG_MISC, "%s: PHY irq\n", dev->name);
                        smc911x_phy_interrupt(dev);
index 571060a3c91e98ea930be958c8523e4716fd66af..bccae7e5c6ad5ad6df1b79fc16a9b314275b97c1 100644 (file)
@@ -1639,7 +1639,7 @@ spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg)
 
 /**
  * spider_net_interrupt - interrupt handler for spider_net
- * @irq: interupt number
+ * @irq: interrupt number
  * @ptr: pointer to net_device
  * @regs: PU registers
  *
index 8038f2882c9b177ac433476065c8ab6ac501d1e7..d887c05588d5c4504d31699fef3d452645cb1daa 100644 (file)
@@ -1654,7 +1654,7 @@ tc35815_rx(struct net_device *dev)
                                        panic_queues(dev);
                                }
 #endif
-                               /* pass BD to controler */
+                               /* pass BD to controller */
 #ifndef TC35815_USE_PACKEDBUFFER
                                if (!lp->rx_skbs[curid].skb) {
                                        lp->rx_skbs[curid].skb =
@@ -1694,7 +1694,7 @@ tc35815_rx(struct net_device *dev)
                }
 #endif
                for (i = 0; i < (bd_count + 1) / 2 + 1; i++) {
-                       /* pass FD to controler */
+                       /* pass FD to controller */
 #ifdef DEBUG
                        lp->rfd_cur->fd.FDNext = cpu_to_le32(0xdeaddead);
 #else
index df10af7df7b86a1d1aa708954256d3048d58da6b..35d15e850075f18b4aebc28cf51fcd3095eabf7d 100644 (file)
@@ -1629,7 +1629,7 @@ tsi108_init_one(struct platform_device *pdev)
                goto register_fail;
        }
 
-       printk(KERN_INFO "%s: Tsi108 Gigabit Ethernet, MAC: %s\n"
+       printk(KERN_INFO "%s: Tsi108 Gigabit Ethernet, MAC: %s\n",
               dev->name, print_mac(mac, dev->dev_addr));
 #ifdef DEBUG
        data->msg_enable = DEBUG;
index 1c537d5a30627bbeef1b8aebbd84692a3e08facf..49d7a290dbbcfa93bdb94eba8e147ce5d7b5d406 100644 (file)
@@ -67,7 +67,7 @@ config TULIP_MMIO
          If in doubt, say N.
 
 config TULIP_NAPI
-       bool "Use NAPI RX polling "
+       bool "Use RX polling (NAPI)"
        depends on TULIP
        help
          NAPI is a new driver API designed to reduce CPU and interrupt load
@@ -78,18 +78,16 @@ config TULIP_NAPI
          deployed on potentially unfriendly networks (e.g. in a firewall),
          then say Y here.
 
-         See <file:Documentation/networking/NAPI_HOWTO.txt> for more
-         information.
-
          If in doubt, say N.
 
 config TULIP_NAPI_HW_MITIGATION
-       bool "Use Interrupt Mitigation "
+       bool "Use Interrupt Mitigation"
        depends on TULIP_NAPI
        ---help---
-         Use HW to reduce RX interrupts. Not strict necessary since NAPI reduces
-         RX interrupts but itself. Although this reduces RX interrupts even at
-         low levels traffic at the cost of a small latency.
+         Use HW to reduce RX interrupts. Not strictly necessary since NAPI
+         reduces RX interrupts by itself. Interrupt mitigation reduces RX
+         interrupts even at low levels of traffic at the cost of a small
+         latency.
 
          If in doubt, say Y.
 
index 3c8e3b63be07a74d6d4f807317b9a427f7b27aa0..35d0cfcf8c47aa52ece528e7018cab70cb97bb99 100644 (file)
@@ -483,7 +483,7 @@ err_out_netdev:
    a delay.  Note that pre-2.0.34 kernels had a cache-alignment bug that
    made udelay() unreliable.
    The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is
-   depricated.
+   deprecated.
 */
 #define eeprom_delay(ee_addr)  ioread32(ee_addr)
 
index 8dc09a3790cb4fe8b15d6595ae8cf0877bf850d7..5a96d74e4ce8b89a2d3e2c5b6276c5e2ce725030 100644 (file)
@@ -71,7 +71,7 @@ config USB_PEGASUS
        select MII
        ---help---
          Say Y here if you know you have Pegasus or Pegasus-II based adapter.
-         If in doubt then look at <file:drivers/usb/net/pegasus.h> for the
+         If in doubt then look at <file:drivers/net/usb/pegasus.h> for the
          complete list of supported devices.
 
          If your particular adapter is not in the list and you are _sure_ it
index 4ae05799ac447b571412990d6fd9c7f2bdfc2ac2..5c4a92de9a076b703fd63708a3793311d8a5cbd1 100644 (file)
@@ -1648,7 +1648,7 @@ static int velocity_alloc_rx_buf(struct velocity_info *vptr, int idx)
  *
  *     Scan the queues looking for transmitted packets that
  *     we can complete and clean up. Update any statistics as
- *     neccessary/
+ *     necessary/
  */
 
 static int velocity_tx_srv(struct velocity_info *vptr, u32 status)
index c141a264ac45bfb16e323ee8b1bbb2b08a727666..9d9ff76a9bc664a85191610034ad2640750cca4c 100644 (file)
@@ -49,7 +49,6 @@
 #include "pio.h"
 #include "sysfs.h"
 #include "xmit.h"
-#include "sysfs.h"
 #include "lo.h"
 #include "pcmcia.h"
 
@@ -3495,7 +3494,7 @@ static int b43_start(struct ieee80211_hw *hw)
        struct b43_wl *wl = hw_to_b43_wl(hw);
        struct b43_wldev *dev = wl->current_dev;
        int did_init = 0;
-       int err;
+       int err = 0;
 
        mutex_lock(&wl->mutex);
 
@@ -3521,7 +3520,7 @@ static int b43_start(struct ieee80211_hw *hw)
        return err;
 }
 
-void b43_stop(struct ieee80211_hw *hw)
+static void b43_stop(struct ieee80211_hw *hw)
 {
        struct b43_wl *wl = hw_to_b43_wl(hw);
        struct b43_wldev *dev = wl->current_dev;
index f0749510bcd7a193088194ce6b6e935bcd47a105..d09479e816cdf12b79658cc8ebce0586cfd18d74 100644 (file)
@@ -3306,7 +3306,7 @@ static int b43legacy_start(struct ieee80211_hw *hw)
        struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw);
        struct b43legacy_wldev *dev = wl->current_dev;
        int did_init = 0;
-       int err;
+       int err = 0;
 
        mutex_lock(&wl->mutex);
 
index 9ecf2bf0d25ddb100773ba759839180ab10ee367..47c135a7f4dc6136d7f2ce0e698ef204f5c1a3bd 100644 (file)
@@ -87,7 +87,7 @@ void bcm43xx_generate_txhdr(struct bcm43xx_private *bcm,
 
 /* RX header as received from the hardware. */
 struct bcm43xx_rxhdr {
-       /* Frame Length. Must be generated explicitely in PIO mode. */
+       /* Frame Length. Must be generated explicitly in PIO mode. */
        __le16 frame_length;
        PAD_BYTES(2);
        /* Flags field 1 */
index c144e3cdb890f9ef9d7210d93b1dce3064aa48ed..a6c7904de2828c48c4886624ced3df1ebb1238cc 100644 (file)
@@ -2089,12 +2089,46 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
        queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
 }
 
+static void send_scan_event(void *data)
+{
+       struct ipw2100_priv *priv = data;
+       union iwreq_data wrqu;
+
+       wrqu.data.length = 0;
+       wrqu.data.flags = 0;
+       wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
+}
+
+static void ipw2100_scan_event_later(struct work_struct *work)
+{
+       send_scan_event(container_of(work, struct ipw2100_priv,
+                                       scan_event_later.work));
+}
+
+static void ipw2100_scan_event_now(struct work_struct *work)
+{
+       send_scan_event(container_of(work, struct ipw2100_priv,
+                                       scan_event_now));
+}
+
 static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
 {
        IPW_DEBUG_SCAN("scan complete\n");
        /* Age the scan results... */
        priv->ieee->scans++;
        priv->status &= ~STATUS_SCANNING;
+
+       /* Only userspace-requested scan completion events go out immediately */
+       if (!priv->user_requested_scan) {
+               if (!delayed_work_pending(&priv->scan_event_later))
+                       queue_delayed_work(priv->workqueue,
+                                       &priv->scan_event_later,
+                                       round_jiffies(msecs_to_jiffies(4000)));
+       } else {
+               priv->user_requested_scan = 0;
+               cancel_delayed_work(&priv->scan_event_later);
+               queue_work(priv->workqueue, &priv->scan_event_now);
+       }
 }
 
 #ifdef CONFIG_IPW2100_DEBUG
@@ -4349,6 +4383,7 @@ static void ipw2100_kill_workqueue(struct ipw2100_priv *priv)
                cancel_delayed_work(&priv->wx_event_work);
                cancel_delayed_work(&priv->hang_check);
                cancel_delayed_work(&priv->rf_kill);
+               cancel_delayed_work(&priv->scan_event_later);
                destroy_workqueue(priv->workqueue);
                priv->workqueue = NULL;
        }
@@ -6012,7 +6047,7 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
         * ends up causing problems.  So, we just handle
         * the WX extensions through the ipw2100_ioctl interface */
 
-       /* memset() puts everything to 0, so we only have explicitely set
+       /* memset() puts everything to 0, so we only have explicitly set
         * those values that need to be something else */
 
        /* If power management is turned on, default to AUTO mode */
@@ -6092,6 +6127,8 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
        INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
        INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
        INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
+       INIT_WORK(&priv->scan_event_now, ipw2100_scan_event_now);
+       INIT_DELAYED_WORK(&priv->scan_event_later, ipw2100_scan_event_later);
 
        tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
                     ipw2100_irq_tasklet, (unsigned long)priv);
@@ -7396,6 +7433,8 @@ static int ipw2100_wx_set_scan(struct net_device *dev,
        }
 
        IPW_DEBUG_WX("Initiating scan...\n");
+
+       priv->user_requested_scan = 1;
        if (ipw2100_set_scan_options(priv) || ipw2100_start_scan(priv)) {
                IPW_DEBUG_WX("Start scan failed.\n");
 
@@ -7470,7 +7509,7 @@ static int ipw2100_wx_set_power(struct net_device *dev,
        switch (wrqu->power.flags & IW_POWER_MODE) {
        case IW_POWER_ON:       /* If not specified */
        case IW_POWER_MODE:     /* If set all mask */
-       case IW_POWER_ALL_R:    /* If explicitely state all */
+       case IW_POWER_ALL_R:    /* If explicitly state all */
                break;
        default:                /* Otherwise we don't support it */
                IPW_DEBUG_WX("SET PM Mode: %X not supported.\n",
index 2b8be2418fa772e93ac8c6dc53bac5137f93d9af..bbf1ddcafba8f6249f900b51dc8e660f7b043f8b 100644 (file)
@@ -586,6 +586,10 @@ struct ipw2100_priv {
        struct delayed_work wx_event_work;
        struct delayed_work hang_check;
        struct delayed_work rf_kill;
+       struct work_struct scan_event_now;
+       struct delayed_work scan_event_later;
+
+       int user_requested_scan;
 
        u32 interrupts;
        int tx_interrupts;
index feb8fcbab2d5a35b4c81dbd449c64b5a0dd5a174..e3c828401b9aa5d1ec9e0d7090203530fef46f92 100644 (file)
@@ -9603,7 +9603,7 @@ static int ipw_wx_set_power(struct net_device *dev,
        switch (wrqu->power.flags & IW_POWER_MODE) {
        case IW_POWER_ON:       /* If not specified */
        case IW_POWER_MODE:     /* If set all mask */
-       case IW_POWER_ALL_R:    /* If explicitely state all */
+       case IW_POWER_ALL_R:    /* If explicitly state all */
                break;
        default:                /* Otherwise we don't support it */
                IPW_DEBUG_WX("SET PM Mode: %X not supported.\n",
index f4aabcf480e46636479ebf00fc4f9d70b95f5ebf..262ab0b55824d907048d1081db1a473ad02d4852 100644 (file)
@@ -37,9 +37,6 @@
 
 #include <linux/workqueue.h>
 
-#include <net/mac80211.h>
-#include <linux/wireless.h>
-
 #define IWL 3945
 
 #include "../net/mac80211/ieee80211_rate.h"
index acb38750535f549b72fabfd0ddf2de3e1fc53e56..19bcb01e278429c83053b1dbd891a4307a668c0e 100644 (file)
@@ -38,7 +38,6 @@
 #include <net/mac80211.h>
 
 #include <linux/etherdevice.h>
-#include <linux/delay.h>
 
 #define IWL 3945
 
index 287c75705c44db0a72729dad2f0833294e5ac1ff..8dc78c0bf1ff26d5cff33c31e8e66399930ce225 100644 (file)
@@ -36,9 +36,6 @@
 
 #include <linux/workqueue.h>
 
-#include <net/mac80211.h>
-#include <linux/wireless.h>
-
 #define IWL 4965
 
 #include "../net/mac80211/ieee80211_rate.h"
@@ -2024,12 +2021,18 @@ static int open_file_generic(struct inode *inode, struct file *file)
 static void rs_dbgfs_set_mcs(struct iwl_rate_scale_priv *rs_priv,
                                struct iwl_rate *mcs, int index)
 {
-       const u32 cck_rate = 0x820A;
+       u32 base_rate;
+
+       if (rs_priv->phymode == (u8) MODE_IEEE80211A)
+               base_rate = 0x800D;
+       else
+               base_rate = 0x820A;
+
        if (rs_priv->dbg_fixed.rate_n_flags) {
                if (index < 12)
                        mcs->rate_n_flags = rs_priv->dbg_fixed.rate_n_flags;
                else
-                       mcs->rate_n_flags = cck_rate;
+                       mcs->rate_n_flags = base_rate;
                IWL_DEBUG_RATE("Fixed rate ON\n");
                return;
        }
index b50d20267c8a97a07679d603d17e3693458a3a9e..557deebca1b9f4a4d0cda8ec9f5488d1329bff4a 100644 (file)
@@ -35,9 +35,7 @@
 #include <linux/netdevice.h>
 #include <linux/wireless.h>
 #include <net/mac80211.h>
-#include <linux/netdevice.h>
 #include <linux/etherdevice.h>
-#include <linux/delay.h>
 
 #define IWL 4965
 
index 75e3b5c3f1558bce3ffc32cc99e172f6d2fa7bc4..83019d1d7cccf1cdd5a992c8f819492dac2b5c63 100644 (file)
@@ -48,8 +48,6 @@
 #include <linux/netdevice.h>
 #include <linux/wireless.h>
 #include <linux/firmware.h>
-#include <linux/skbuff.h>
-#include <linux/netdevice.h>
 #include <linux/etherdevice.h>
 #include <linux/if_arp.h>
 
@@ -1749,21 +1747,22 @@ static void iwl_unset_hw_setting(struct iwl_priv *priv)
  * return : set the bit for each supported rate insert in ie
  */
 static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
-                                   u16 basic_rate, int max_count)
+                                   u16 basic_rate, int *left)
 {
        u16 ret_rates = 0, bit;
        int i;
-       u8 *rates;
-
-       rates = &(ie[1]);
+       u8 *cnt = ie;
+       u8 *rates = ie + 1;
 
        for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) {
                if (bit & supported_rate) {
                        ret_rates |= bit;
-                       rates[*ie] = iwl_rates[i].ieee |
-                           ((bit & basic_rate) ? 0x80 : 0x00);
-                       *ie = *ie + 1;
-                       if (*ie >= max_count)
+                       rates[*cnt] = iwl_rates[i].ieee |
+                               ((bit & basic_rate) ? 0x80 : 0x00);
+                       (*cnt)++;
+                       (*left)--;
+                       if ((*left <= 0) ||
+                           (*cnt >= IWL_SUPPORTED_RATES_IE_LEN))
                                break;
                }
        }
@@ -1780,7 +1779,7 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
 {
        int len = 0;
        u8 *pos = NULL;
-       u16 ret_rates;
+       u16 active_rates, ret_rates, cck_rates;
 
        /* Make sure there is enough space for the probe request,
         * two mandatory IEs and the data */
@@ -1825,19 +1824,27 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
        left -= 2;
        if (left < 0)
                return 0;
+
        /* ... fill it in... */
        *pos++ = WLAN_EID_SUPP_RATES;
        *pos = 0;
-       ret_rates = priv->active_rate = priv->rates_mask;
+
+       priv->active_rate = priv->rates_mask;
+       active_rates = priv->active_rate;
        priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
 
-       iwl_supported_rate_to_ie(pos, priv->active_rate,
-                                priv->active_rate_basic, left);
+       cck_rates = IWL_CCK_RATES_MASK & active_rates;
+       ret_rates = iwl_supported_rate_to_ie(pos, cck_rates,
+                       priv->active_rate_basic, &left);
+       active_rates &= ~ret_rates;
+
+       ret_rates = iwl_supported_rate_to_ie(pos, active_rates,
+                                priv->active_rate_basic, &left);
+       active_rates &= ~ret_rates;
+
        len += 2 + *pos;
        pos += (*pos) + 1;
-       ret_rates = ~ret_rates & priv->active_rate;
-
-       if (ret_rates == 0)
+       if (active_rates == 0)
                goto fill_end;
 
        /* fill in supported extended rate */
@@ -1848,7 +1855,8 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
        /* ... fill it in... */
        *pos++ = WLAN_EID_EXT_SUPP_RATES;
        *pos = 0;
-       iwl_supported_rate_to_ie(pos, ret_rates, priv->active_rate_basic, left);
+       iwl_supported_rate_to_ie(pos, active_rates,
+                                priv->active_rate_basic, &left);
        if (*pos > 0)
                len += 2 + *pos;
 
index b1a6e39f7821d9cd5888d905737d168856ada18a..5e1279263b2264e74d57e439fc4148156a632d44 100644 (file)
@@ -48,8 +48,6 @@
 #include <linux/netdevice.h>
 #include <linux/wireless.h>
 #include <linux/firmware.h>
-#include <linux/skbuff.h>
-#include <linux/netdevice.h>
 #include <linux/etherdevice.h>
 #include <linux/if_arp.h>
 
@@ -1802,21 +1800,22 @@ static void iwl_unset_hw_setting(struct iwl_priv *priv)
  * return : set the bit for each supported rate insert in ie
  */
 static u16 iwl_supported_rate_to_ie(u8 *ie, u16 supported_rate,
-                                   u16 basic_rate, int max_count)
+                                   u16 basic_rate, int *left)
 {
        u16 ret_rates = 0, bit;
        int i;
-       u8 *rates;
-
-       rates = &(ie[1]);
+       u8 *cnt = ie;
+       u8 *rates = ie + 1;
 
        for (bit = 1, i = 0; i < IWL_RATE_COUNT; i++, bit <<= 1) {
                if (bit & supported_rate) {
                        ret_rates |= bit;
-                       rates[*ie] = iwl_rates[i].ieee |
-                           ((bit & basic_rate) ? 0x80 : 0x00);
-                       *ie = *ie + 1;
-                       if (*ie >= max_count)
+                       rates[*cnt] = iwl_rates[i].ieee |
+                               ((bit & basic_rate) ? 0x80 : 0x00);
+                       (*cnt)++;
+                       (*left)--;
+                       if ((*left <= 0) ||
+                           (*cnt >= IWL_SUPPORTED_RATES_IE_LEN))
                                break;
                }
        }
@@ -1839,7 +1838,7 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
 {
        int len = 0;
        u8 *pos = NULL;
-       u16 ret_rates;
+       u16 active_rates, ret_rates, cck_rates;
 
        /* Make sure there is enough space for the probe request,
         * two mandatory IEs and the data */
@@ -1884,19 +1883,27 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
        left -= 2;
        if (left < 0)
                return 0;
+
        /* ... fill it in... */
        *pos++ = WLAN_EID_SUPP_RATES;
        *pos = 0;
-       ret_rates = priv->active_rate = priv->rates_mask;
+
+       priv->active_rate = priv->rates_mask;
+       active_rates = priv->active_rate;
        priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
 
-       iwl_supported_rate_to_ie(pos, priv->active_rate,
-                                priv->active_rate_basic, left);
+       cck_rates = IWL_CCK_RATES_MASK & active_rates;
+       ret_rates = iwl_supported_rate_to_ie(pos, cck_rates,
+                       priv->active_rate_basic, &left);
+       active_rates &= ~ret_rates;
+
+       ret_rates = iwl_supported_rate_to_ie(pos, active_rates,
+                                priv->active_rate_basic, &left);
+       active_rates &= ~ret_rates;
+
        len += 2 + *pos;
        pos += (*pos) + 1;
-       ret_rates = ~ret_rates & priv->active_rate;
-
-       if (ret_rates == 0)
+       if (active_rates == 0)
                goto fill_end;
 
        /* fill in supported extended rate */
@@ -1907,7 +1914,8 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
        /* ... fill it in... */
        *pos++ = WLAN_EID_EXT_SUPP_RATES;
        *pos = 0;
-       iwl_supported_rate_to_ie(pos, ret_rates, priv->active_rate_basic, left);
+       iwl_supported_rate_to_ie(pos, active_rates,
+                                priv->active_rate_basic, &left);
        if (*pos > 0)
                len += 2 + *pos;
 
@@ -4494,13 +4502,13 @@ static u8 ratio2dB[100] = {
  * Conversion assumes that levels are voltages (20*log), not powers (10*log). */
 int iwl_calc_db_from_ratio(int sig_ratio)
 {
-       /* Anything above 1000:1 just report as 60 dB */
-       if (sig_ratio > 1000)
+       /* 1000:1 or higher just report as 60 dB */
+       if (sig_ratio >= 1000)
                return 60;
 
-       /* Above 100:1, divide by 10 and use table,
+       /* 100:1 or higher, divide by 10 and use table,
         *   add 20 dB to make up for divide by 10 */
-       if (sig_ratio > 100)
+       if (sig_ratio >= 100)
                return (20 + (int)ratio2dB[sig_ratio/10]);
 
        /* We shouldn't see this */
index e0b97c3412153fee5f6b729d506d5b9f77b8da08..432ce887807f562ed6786933d9caf751a4dfcc8f 100644 (file)
@@ -39,18 +39,13 @@ struct iwl_priv;
 /* Hardware specific file defines the PCI IDs table for that hardware module */
 extern struct pci_device_id iwl_hw_card_ids[];
 
+#include "iwl-hw.h"
 #if IWL == 3945
-
 #define DRV_NAME       "iwl3945"
-#include "iwl-hw.h"
 #include "iwl-3945-hw.h"
-
 #elif IWL == 4965
-
 #define DRV_NAME        "iwl4965"
-#include "iwl-hw.h"
 #include "iwl-4965-hw.h"
-
 #endif
 
 #include "iwl-prph.h"
index c2d71afd57e5c6196a83cc620f0adb67222dba2a..2402cb8dd3281e07bc636fb4675d114fb5bf2005 100644 (file)
@@ -4,18 +4,18 @@
  * Version:       0.4.1
  * Description:   Netwave AirSurfer Wireless LAN PC Card driver
  * Status:        Experimental.
- * Authors:       John Markus Bjørndalen <johnm@cs.uit.no>
+ * Authors:       John Markus Bjørndalen <johnm@cs.uit.no>
  *                Dag Brattli <dagb@cs.uit.no>
  *                David Hinds <dahinds@users.sourceforge.net>
  * Created at:    A long time ago!
  * Modified at:   Mon Nov 10 11:54:37 1997
  * Modified by:   Dag Brattli <dagb@cs.uit.no>
  * 
- *     Copyright (c) 1997 University of Tromsø, Norway
+ *     Copyright (c) 1997 University of Tromsø, Norway
  *
  * Revision History:
  *
- *   08-Nov-97 15:14:47   John Markus Bjørndalen <johnm@cs.uit.no>
+ *   08-Nov-97 15:14:47   John Markus Bjørndalen <johnm@cs.uit.no>
  *    - Fixed some bugs in netwave_rx and cleaned it up a bit. 
  *      (One of the bugs would have destroyed packets when receiving
  *      multiple packets per interrupt). 
@@ -158,7 +158,7 @@ static int pc_debug = PCMCIA_DEBUG;
 module_param(pc_debug, int, 0);
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n";
+"netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n";
 #else
 #define DEBUG(n, args...)
 #endif
index 2c63cf0ad2cdb3cfe11936e40147fd89b390f0da..1437db0cf4b271372d1a96df5164d74725169919 100644 (file)
@@ -577,7 +577,7 @@ static int p54_set_filter(struct ieee80211_hw *dev, u16 filter_type,
        struct p54_tx_control_filter *filter;
 
        hdr = kzalloc(sizeof(*hdr) + sizeof(*filter) +
-                     priv->tx_hdr_len, GFP_KERNEL);
+                     priv->tx_hdr_len, GFP_ATOMIC);
        if (!hdr)
                return -ENOMEM;
 
index bb6f46cfbb9f87e27dc792d52a1aed4ba5218706..ff399f8083e9c9cfcdd179250a0610453afb4885 100644 (file)
@@ -550,7 +550,7 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,
                        /*
                         * Check if we need to set the Length Extension
                         */
-                       if (bitrate == 110 && residual <= 3)
+                       if (bitrate == 110 && residual <= 30)
                                desc.service |= 0x80;
                }
 
index 3e42759473c3d1e0041f975ae54656fe8b33f88d..46c8c0840a6531703ed85d31a0604598502f4baf 100644 (file)
@@ -2029,6 +2029,7 @@ static struct usb_device_id rt73usb_device_table[] = {
        { USB_DEVICE(0x050d, 0x7050), USB_DEVICE_DATA(&rt73usb_ops) },
        { USB_DEVICE(0x050d, 0x705a), USB_DEVICE_DATA(&rt73usb_ops) },
        { USB_DEVICE(0x050d, 0x905b), USB_DEVICE_DATA(&rt73usb_ops) },
+       { USB_DEVICE(0x050d, 0x905c), USB_DEVICE_DATA(&rt73usb_ops) },
        /* Billionton */
        { USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) },
        /* Buffalo */
index 0ef887dd286795fe0cf22a24b019b845362dae48..de61c8fe64924dd52fb2e4e37dd6aacd5d00db04 100644 (file)
@@ -131,7 +131,8 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb,
        struct rtl8187_tx_hdr *hdr;
        struct rtl8187_tx_info *info;
        struct urb *urb;
-       u32 tmp;
+       __le16 rts_dur = 0;
+       u32 flags;
 
        urb = usb_alloc_urb(0, GFP_ATOMIC);
        if (!urb) {
@@ -139,24 +140,24 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb,
                return 0;
        }
 
-       hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
-       tmp = skb->len - sizeof(*hdr);
-       tmp |= RTL8187_TX_FLAG_NO_ENCRYPT;
-       tmp |= control->rts_cts_rate << 19;
-       tmp |= control->tx_rate << 24;
-       if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb))
-               tmp |= RTL8187_TX_FLAG_MORE_FRAG;
+       flags = skb->len;
+       flags |= RTL8187_TX_FLAG_NO_ENCRYPT;
+       flags |= control->rts_cts_rate << 19;
+       flags |= control->tx_rate << 24;
+       if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb->data))
+               flags |= RTL8187_TX_FLAG_MORE_FRAG;
        if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
-               tmp |= RTL8187_TX_FLAG_RTS;
-               hdr->rts_duration =
-                       ieee80211_rts_duration(dev, priv->if_id, skb->len, control);
+               flags |= RTL8187_TX_FLAG_RTS;
+               rts_dur = ieee80211_rts_duration(dev, priv->if_id, skb->len, control);
        }
        if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
-               tmp |= RTL8187_TX_FLAG_CTS;
-       hdr->flags = cpu_to_le32(tmp);
+               flags |= RTL8187_TX_FLAG_CTS;
+
+       hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
+       hdr->flags = cpu_to_le32(flags);
        hdr->len = 0;
-       tmp = control->retry_limit << 8;
-       hdr->retry = cpu_to_le32(tmp);
+       hdr->rts_duration = rts_dur;
+       hdr->retry = cpu_to_le32(control->retry_limit << 8);
 
        info = (struct rtl8187_tx_info *)skb->cb;
        info->control = kmemdup(control, sizeof(*control), GFP_ATOMIC);
@@ -587,8 +588,6 @@ static void rtl8187_configure_filter(struct ieee80211_hw *dev,
 
        *total_flags = 0;
 
-       if (changed_flags & FIF_PROMISC_IN_BSS)
-               priv->rx_conf ^= RTL818X_RX_CONF_NICMAC;
        if (changed_flags & FIF_ALLMULTI)
                priv->rx_conf ^= RTL818X_RX_CONF_MULTICAST;
        if (changed_flags & FIF_FCSFAIL)
@@ -601,8 +600,6 @@ static void rtl8187_configure_filter(struct ieee80211_hw *dev,
        if (mc_count > 0)
                priv->rx_conf |= RTL818X_RX_CONF_MULTICAST;
 
-       if (priv->rx_conf & RTL818X_RX_CONF_NICMAC)
-               *total_flags |= FIF_PROMISC_IN_BSS;
        if (priv->rx_conf & RTL818X_RX_CONF_MULTICAST)
                *total_flags |= FIF_ALLMULTI;
        if (priv->rx_conf & RTL818X_RX_CONF_FCS)
index 935b144d9b56b419959fd3bd40cf156aa4121ca1..d5c0c66188cad3d146e32e3b0c6ccf0012e3066a 100644 (file)
@@ -327,8 +327,8 @@ static void zd1201_usbrx(struct urb *urb)
                        memcpy(skb_put(skb, 6), &data[datalen-8], 6);
                        memcpy(skb_put(skb, 2), &data[datalen-24], 2);
                        memcpy(skb_put(skb, len), data, len);
-                       skb->dev->last_rx = jiffies;
                        skb->protocol = eth_type_trans(skb, zd->dev);
+                       skb->dev->last_rx = jiffies;
                        zd->stats.rx_packets++;
                        zd->stats.rx_bytes += skb->len;
                        netif_rx(skb);
@@ -384,8 +384,8 @@ static void zd1201_usbrx(struct urb *urb)
                        memcpy(skb_put(skb, 2), &data[6], 2);
                        memcpy(skb_put(skb, len), data+8, len);
                }
-               skb->dev->last_rx = jiffies;
                skb->protocol = eth_type_trans(skb, zd->dev);
+               skb->dev->last_rx = jiffies;
                zd->stats.rx_packets++;
                zd->stats.rx_bytes += skb->len;
                netif_rx(skb);
index b0684f965761fec054bfc2ffeab014c1e329d810..c755b69238123c56cece6d8df9d77b5ed68022a6 100644 (file)
@@ -1044,14 +1044,17 @@ error:
 static void disconnect(struct usb_interface *intf)
 {
        struct net_device *netdev = zd_intf_to_netdev(intf);
-       struct zd_mac *mac = zd_netdev_mac(netdev);
-       struct zd_usb *usb = &mac->chip.usb;
+       struct zd_mac *mac;
+       struct zd_usb *usb;
 
        /* Either something really bad happened, or we're just dealing with
         * a DEVICE_INSTALLER. */
        if (netdev == NULL)
                return;
 
+       mac = zd_netdev_mac(netdev);
+       usb = &mac->chip.usb;
+
        dev_dbg_f(zd_usb_dev(usb), "\n");
 
        zd_netdev_disconnect(netdev);
index 6420a90a4a92e87ce4ffa38c04080ef0c40f8d39..cbde770eb121062fcfa67f8dd562f827814cacc1 100644 (file)
@@ -240,7 +240,7 @@ config RTC_DRV_TWL92330
        depends on MENELAUS
        help
          If you say yes here you get support for the RTC on the
-         TWL92330 "Menelaus" power mangement chip, used with OMAP2
+         TWL92330 "Menelaus" power management chip, used with OMAP2
          platforms.  The support is integrated with the rest of
          the Menelaus driver; it's not separate module.
 
index 8b9d68f6e016f6f92c3d34a54aba4f6bc4a4e568..5b7385e430ea6b64c6970ec4bf275a89a8bb3285 100644 (file)
@@ -40,7 +40,7 @@ struct DCTL_data {
  *
  *   Each bit configuration leading to an action code 2 (Exit with
  *   programming error or unusual condition indication)
- *   are handled as fatal error´s.
+ *   are handled as fatal errors.
  *
  *   All other configurations are handled as recoverable errors.
  *
@@ -2001,7 +2001,7 @@ dasd_3990_erp_compound_code(struct dasd_ccw_req * erp, char *sense)
                switch (sense[28]) {
                case 0x17:
                        /* issue a Diagnostic Control command with an
-                        * Inhibit Write subcommand and controler modifier */
+                        * Inhibit Write subcommand and controller modifier */
                        erp = dasd_3990_erp_DCTL(erp, 0x20);
                        break;
 
index 29fe2a5ec2fe4d3255be3848a63bba58d0b81cc7..82a13d9fdfe44d6091b4e63724c72161d7d20aa6 100644 (file)
@@ -157,7 +157,7 @@ cpi_prepare_req(void)
        sclp_ascebc_str(evb->system_name, CPI_LENGTH_SYSTEM_NAME);
        EBC_TOUPPER(evb->system_name, CPI_LENGTH_SYSTEM_NAME);
 
-       /* set sytem level */
+       /* set system level */
        evb->system_level = LINUX_VERSION_CODE;
 
        /* set sysplex name */
index b960f66843e4919e1645806258368763fcaeec84..725b0dd142699f0f613aece0341cb67af9036867 100644 (file)
@@ -158,7 +158,7 @@ static inline u64 time_to_avg_nsec(u32 value, u32 count)
        if (count == 0)
                return 0;
 
-       /* value comes in units of 128 µsec */
+       /* value comes in units of 128 Âµsec */
        ret = time_to_nsec(value);
        do_div(ret, count);
 
index 449937233732b5b7a054565de71e1c4cd565ead9..6bf3ebbe985a9a000d92fbe449ab5eb073cc03fc 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation
  * Author(s): Fritz Elfert (elfert@de.ibm.com, felfert@millenux.com)
- * Fixes by : Jochen Röhrig (roehrig@de.ibm.com)
+ * Fixes by : Jochen Röhrig (roehrig@de.ibm.com)
  *            Arnaldo Carvalho de Melo <acme@conectiva.com.br>
              Peter Tiedemann (ptiedem@de.ibm.com)
  * Driver Model stuff by : Cornelia Huck <cornelia.huck@de.ibm.com>
@@ -19,7 +19,7 @@
  *  Dieter Wellerdiek (wel@de.ibm.com)
  *  Martin Schwidefsky (schwidefsky@de.ibm.com)
  *  Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
- *  Jochen Röhrig (roehrig@de.ibm.com)
+ *  Jochen Röhrig (roehrig@de.ibm.com)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -885,7 +885,7 @@ ch_action_firstio(fsm_instance * fi, int event, void *arg)
        }
 
        /**
-        * Don´t setup a timer for receiving the initial RX frame
+        * Don't setup a timer for receiving the initial RX frame
         * if in compatibility mode, since VM TCP delays the initial
         * frame until it has some data to send.
         */
@@ -905,10 +905,10 @@ ch_action_firstio(fsm_instance * fi, int event, void *arg)
                ccw_check_return_code(ch, rc, "init IO");
        }
        /**
-        * If in compatibility mode since we don´t setup a timer, we
+        * If in compatibility mode since we don't setup a timer, we
         * also signal RX channel up immediately. This enables us
         * to send packets early which in turn usually triggers some
-        * reply from VM TCP which brings up the RX channel to it´s
+        * reply from VM TCP which brings up the RX channel to it's
         * final state.
         */
        if ((CHANNEL_DIRECTION(ch->flags) == READ) &&
index a2d08c9ba3c4a9fe49885445c599353d8d2d8085..ff999ff0b6272a9edc2dc1feb5990f549642e416 100644 (file)
@@ -6643,7 +6643,8 @@ qeth_netdev_init(struct net_device *dev)
        dev->vlan_rx_kill_vid = qeth_vlan_rx_kill_vid;
        dev->vlan_rx_add_vid = qeth_vlan_rx_add_vid;
 #endif
-       dev->header_ops = &qeth_null_ops;
+       if (qeth_get_netdev_flags(card) & IFF_NOARP)
+               dev->header_ops = &qeth_null_ops;
 
 #ifdef CONFIG_QETH_IPV6
        /*IPv6 address autoconfiguration stuff*/
index 03b51025a8f441fdb4258d452f218fd5d05c8ee4..9abba8b90f70db5afc23c3dc1d200ba4c3fbc67c 100644 (file)
@@ -1526,7 +1526,7 @@ struct aac_mntent {
        __le32                  capacityhigh;
 };
 
-#define FSCS_NOTCLEAN  0x0001  /* fsck is neccessary before mounting */
+#define FSCS_NOTCLEAN  0x0001  /* fsck is necessary before mounting */
 #define FSCS_READONLY  0x0002  /* possible result of broken mirror */
 #define FSCS_HIDDEN    0x0004  /* should be ignored - set during a clear */
 
index f08e71e0205a5f5a3e538701d44e80bd9a4822ca..a58c265dc8af4cd948d243eb99aff084885de6c8 100644 (file)
@@ -1,6 +1,6 @@
 /* aha152x.c -- Adaptec AHA-152x driver
- * Author: Jürgen E. Fischer, fischer@norbit.de
- * Copyright 1993-2004 Jürgen E. Fischer
+ * Author: Jürgen E. Fischer, fischer@norbit.de
+ * Copyright 1993-2004 Jürgen E. Fischer
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -357,7 +357,7 @@ enum {
        check_condition = 0x0800,       /* requesting sense after CHECK CONDITION */
 };
 
-MODULE_AUTHOR("Jürgen Fischer");
+MODULE_AUTHOR("Jürgen Fischer");
 MODULE_DESCRIPTION(AHA152X_REVID);
 MODULE_LICENSE("GPL");
 
index 26f17e3fc45c6113b99e138dde03138502e85b4d..687aef6ef18503f81a2bf4c076c2c4b3f876490f 100644 (file)
@@ -48,7 +48,7 @@ typedef enum {
        CAM_REQ_ABORTED,        /* CCB request aborted by the host */
        CAM_UA_ABORT,           /* Unable to abort CCB request */
        CAM_REQ_CMP_ERR,        /* CCB request completed with an error */
-       CAM_BUSY,               /* CAM subsytem is busy */
+       CAM_BUSY,               /* CAM subsystem is busy */
        CAM_REQ_INVALID,        /* CCB request was invalid */
        CAM_PATH_INVALID,       /* Supplied Path ID is invalid */
        CAM_SEL_TIMEOUT,        /* Target Selection Timeout */
index fd42d47892021487aa916588b99d87a55c76a048..a9def6e1d30e6a5bd761a481b1fe522f924bd107 100644 (file)
@@ -1808,12 +1808,12 @@ static irqreturn_t dc395x_interrupt(int irq, void *dev_id)
        irqreturn_t handled = IRQ_NONE;
 
        /*
-        * Check for pending interupt
+        * Check for pending interrupt
         */
        scsi_status = DC395x_read16(acb, TRM_S1040_SCSI_STATUS);
        dma_status = DC395x_read8(acb, TRM_S1040_DMA_STATUS);
        if (scsi_status & SCSIINTERRUPT) {
-               /* interupt pending - let's process it! */
+               /* interrupt pending - let's process it! */
                dc395x_handle_interrupt(acb, scsi_status);
                handled = IRQ_HANDLED;
        }
@@ -4579,7 +4579,7 @@ static void adapter_uninit_chip(struct AdapterCtlBlk *acb)
        if (acb->config & HCC_SCSI_RESET)
                reset_scsi_bus(acb);
 
-       /* clear any pending interupt state */
+       /* clear any pending interrupt state */
        DC395x_read8(acb, TRM_S1040_SCSI_INTSTATUS);
 }
 
index e4e4c6a39ed6368d090cef0dea29fff4f491e757..78779209ac8900a9f7cf1e001e82ce74f0ee4fd5 100644 (file)
@@ -427,7 +427,7 @@ megaraid_exit(void)
  * @id         : pci device id of the class of controllers
  *
  * This routine should be called whenever a new adapter is detected by the
- * PCI hotplug susbsytem.
+ * PCI hotplug susbsystem.
  */
 static int __devinit
 megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
index 1e29f51d596b71d27d14226a153c0853e2eae9b8..d692c713416a54b385e486c3c02b3f90876b5fcf 100644 (file)
@@ -1006,7 +1006,7 @@ int ql4xxx_lock_drvr_wait(struct scsi_qla_host *a)
  * qla4xxx_start_firmware - starts qla4xxx firmware
  * @ha: Pointer to host adapter structure.
  *
- * This routine performs the neccessary steps to start the firmware for
+ * This routine performs the necessary steps to start the firmware for
  * the QLA4010 adapter.
  **/
 static int qla4xxx_start_firmware(struct scsi_qla_host *ha)
index 69f542c4923ce5be9c9575cc3ec30f0c82a6b92f..a69b155f39a2b2a1c4134b440e2cd5404d478e10 100644 (file)
@@ -676,7 +676,7 @@ static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
  *     success as well). Returns a negated errno value in case of error.
  *
  *     Note: most ioctls are forward onto the block subsystem or further
- *     down in the scsi subsytem.
+ *     down in the scsi subsystem.
  **/
 static int sd_ioctl(struct inode * inode, struct file * filp, 
                    unsigned int cmd, unsigned long arg)
index dc15a22105f71ac6102cd4b63e5b60c2ab4ca3ef..4aafe89b557f75c55ab0583141fdaa223834cc41 100644 (file)
@@ -1596,7 +1596,7 @@ static int NCR5380_select(struct Scsi_Host *instance, struct scsi_cmnd *cmd,
      * IO while SEL is true. But again, there are some disks out the in the
      * world that do that nevertheless. (Somebody claimed that this announces
      * reselection capability of the target.) So we better skip that test and
-     * only wait for BSY... (Famous german words: Der Klügere gibt nach :-)
+     * only wait for BSY... (Famous german words: Der Klügere gibt nach :-)
      */
 
     while (time_before(jiffies, timeout) && !(NCR5380_read(STATUS_REG) & 
index 6e5b952312e364bcd8f9d7c73fdbcb1183486fd5..ae1fb179b88e571ea6e0e0ad544d6449476a0299 100644 (file)
@@ -1781,7 +1781,7 @@ static struct SYM_FWB_SCR SYM_FWB_SCR = {
         *  While testing with bogus QUANTUM drives, the C1010 
         *  sometimes raised a spurious phase mismatch with 
         *  WSR and the CHMOV(1) triggered another PM.
-        *  Waiting explicitely for the PHASE seemed to avoid 
+        *  Waiting explicitly for the PHASE seemed to avoid
         *  the nested phase mismatch. Btw, this didn't happen 
         *  using my IBM drives.
         */
index 61ffb860dacc78dd5484953145413d1563312129..00123f2383d7c6d6c8557d16ef1329c642c0df1c 100644 (file)
 #define WD33C93_FS_12_15 OWNID_FS_12
 #define WD33C93_FS_16_20 OWNID_FS_16
 
-   /* pass input-clock explicitely. accepted mhz values are 8-10,12-20 */
+   /* pass input-clock explicitly. accepted mhz values are 8-10,12-20 */
 #define WD33C93_FS_MHZ(mhz) (mhz)
 
    /* Control register */
index d6ae38e55d01f72045fd7e8c239420937fa62298..87665d7df6f233b1aecb9fe2f98288c56730d655 100644 (file)
@@ -62,11 +62,11 @@ config SERIAL_8250_CONSOLE
          kernel will automatically use the first serial line, /dev/ttyS0, as
          system console.
 
-         you can set that using a kernel command line option such as
+         You can set that using a kernel command line option such as
          "console=uart8250,io,0x3f8,9600n8"
          "console=uart8250,mmio,0xff5e0000,115200n8".
-         and it will switch to normal serial console when correponding port is
-         ready.
+         and it will switch to normal serial console when the corresponding 
+         port is ready.
          "earlycon=uart8250,io,0x3f8,9600n8"
          "earlycon=uart8250,mmio,0xff5e0000,115200n8".
          it will not only setup early console.
index 3f26c4b2f322a0e4140a8987c4b21c42894c84b3..e773c8e1496245bcaca63984bc9ff07ac055c4f9 100644 (file)
@@ -20,8 +20,8 @@
  *                  - S3C2410 and S3C2440 serial support
  *                  - Power Management support
  *                  - Fix console via IrDA devices
- *                  - SysReq (Herbert Pötzl)
- *                  - Break character handling (Herbert Pötzl)
+ *                  - SysReq (Herbert Pötzl)
+ *                  - Break character handling (Herbert Pötzl)
  *                  - spin-lock initialisation (Dimitry Andric)
  *                  - added clock control
  *                  - updated init code to use platform_device info
index e9aba932f21795184a9aeb0323307b2e6d3866c4..7051e6c5edc345b7bd21c9fc61c8070949712f3a 100644 (file)
@@ -181,7 +181,7 @@ static int mpc52xx_psc_spi_transfer_rxtx(struct spi_device *spi,
                }
 
 
-               /* enable interupts and wait for wake up
+               /* enable interrupts and wait for wake up
                 * if just one byte is expected the Rx FIFO genererates no
                 * FFULL interrupt, so activate the RxRDY interrupt
                 */
index e78c2ddc1f88a47e6cbd52007d088f43269e8fee..367b75c0b25b3e8f9a4af753fa9c6cea8578d097 100644 (file)
@@ -1272,7 +1272,7 @@ static int lh7a40x_set_halt(struct usb_ep *_ep, int value)
                        /*
                         * Attempts to halt IN endpoints will fail (returning -EAGAIN)
                         * if any transfer requests are still queued, or if the controller
-                        * FIFO still holds bytes that the host hasn\92t collected.
+                        * FIFO still holds bytes that the host hasn't collected.
                         */
                        spin_unlock_irqrestore(&ep->dev->lock, flags);
                        DEBUG
index 0dcb4164dc8368a9187b670c2a303c39cfdfa109..735db4aec831cc2302a761801f51eccc25efdeb7 100644 (file)
@@ -451,7 +451,7 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)
 
        /* Some boards (mostly VIA?) report bogus overcurrent indications,
         * causing massive log spam unless we completely ignore them.  It
-        * may be relevant that VIA VT8235 controlers, where PORT_POWER is
+        * may be relevant that VIA VT8235 controllers, where PORT_POWER is
         * always set, seem to clear PORT_OCC and PORT_CSC when writing to
         * PORT_POWER; that's surprising, but maybe within-spec.
         */
index 94d859aa73f818bc389dc10db5e3c490b760581a..ba370c56172c372d7b435669a9b6792a0ac3f83c 100644 (file)
@@ -1556,7 +1556,7 @@ sl811h_start(struct usb_hcd *hcd)
                hcd->power_budget = sl811->board->power * 2;
        }
 
-       /* enable power and interupts */
+       /* enable power and interrupts */
        port_power(sl811, 1);
 
        return 0;
index 95ce703110d276511030c8629e4b319088a6bc70..7595dfb38e3b18361f82ffbc914e300e34c76245 100644 (file)
@@ -1,5 +1,5 @@
 #
-# USB Imageing devices configuration
+# USB Imaging devices configuration
 #
 comment "USB Imaging devices"
        depends on USB
index 04e87acd6e46007cec2449ffe34c58257d55c6a8..2677fea147d9ef163053c8a2b458edf170515aec 100644 (file)
@@ -118,7 +118,7 @@ static ssize_t set_brightness(struct device *dev, struct device_attribute *attr,
                                cytherm->brightness, buffer, 8);
        if (retval)
                dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
-       /* Inform µC that we have changed the brightness setting */
+       /* Inform ÂµC that we have changed the brightness setting */
        retval = vendor_command(cytherm->udev, WRITE_RAM, BRIGHTNESS_SEM,
                                0x01, buffer, 8);
        if (retval)
index 5c0a26cbd12884e212b319df3608121034ea8e01..cd137577bb2d06b1c6278cb601e30590d6929481 100644 (file)
@@ -1,7 +1,7 @@
 /* 
  * Emagic EMI 2|6 usb audio interface firmware loader.
  * Copyright (C) 2002
- *     Tapio Laxström (tapio.laxstrom@iptime.fi)
+ *     Tapio Laxström (tapio.laxstrom@iptime.fi)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License, as published by
@@ -249,7 +249,7 @@ static void __exit emi26_exit (void)
 module_init(emi26_init);
 module_exit(emi26_exit);
 
-MODULE_AUTHOR("tapio laxström");
+MODULE_AUTHOR("Tapio Laxström");
 MODULE_DESCRIPTION("Emagic EMI 2|6 firmware loader.");
 MODULE_LICENSE("GPL");
 
index 23153eac0dfaf0b869991ed39af4698aa3089caa..4758cc5ccebcd37acdc7330718079941f77b332c 100644 (file)
@@ -1,7 +1,7 @@
 /* 
  * Emagic EMI 2|6 usb audio interface firmware loader.
  * Copyright (C) 2002
- *     Tapio Laxström (tapio.laxstrom@iptime.fi)
+ *     Tapio Laxström (tapio.laxstrom@iptime.fi)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License, as published by
@@ -292,7 +292,7 @@ static void __exit emi62_exit (void)
 module_init(emi62_init);
 module_exit(emi62_exit);
 
-MODULE_AUTHOR("tapio laxström");
+MODULE_AUTHOR("Tapio Laxström");
 MODULE_DESCRIPTION("Emagic EMI 6|2m firmware loader.");
 MODULE_LICENSE("GPL");
 
index 52c4f7bd7a80a3279f8a59fc4ceaed2dd350e71f..c1b279939bbf46f0a3a3ac0f5e5e7187c9304d99 100644 (file)
@@ -400,7 +400,7 @@ visor.c Change Log comments:
 
  (11/11/2001) gkh
        Added support for the m125 devices, and added check to prevent oopses
-       for Clié devices that lie about the number of ports they have.
+       for Clié devices that lie about the number of ports they have.
 
  (08/30/2001) gkh
        Added support for the Clie devices, both the 3.5 and 4.0 os versions.
index 99fefed77919de2dbd28af6de48faa1080181924..4a86696e6c7dd20240aca1776139669c9ac4005c 100644 (file)
@@ -527,7 +527,7 @@ config USB_SERIAL_CYBERJACK
        depends on USB_SERIAL && EXPERIMENTAL
        ---help---
          Say Y here if you want to use a cyberJack pinpad/e-com USB chipcard
-         reader. This is an interface to ISO 7816 compatible contactbased
+         reader. This is an interface to ISO 7816 compatible contact-based
          chipcards, e.g. GSM SIMs.
 
          To compile this driver as a module, choose M here: the
index 65257867b34b40ac798d6fa65de4c9f621ef4597..8a8a6b9fb05bf3bc1253bb9c08398fd749aadaf4 100644 (file)
@@ -83,7 +83,7 @@
  *
  * (18/Jun/2003) Ian Abbott
  *      Added Device ID of the USB relais from Rudolf Gugler (backported from
- *      Philipp Gühring's patch for 2.5.x kernel).
+ *      Philipp Gühring's patch for 2.5.x kernel).
  *      Moved read transfer buffer reallocation into startup function.
  *      Free existing write urb and transfer buffer in startup function.
  *      Only use urbs in write urb pool that were successfully allocated.
index b57b90ae9f9d5d8ea4519a264b8b9a0fe49eb797..b51cbb0eaa054491c8bcc2479788f28fa0a0afde 100644 (file)
@@ -17,7 +17,7 @@
  * Bill Ryder - bryder@sgi.com formerly of Silicon Graphics, Inc.- wrote the 
  * FTDI_SIO implementation.
  *
- * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais
+ * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais
  * from Rudolf Gugler
  *
  */
@@ -44,7 +44,7 @@
 #define FTDI_ACTZWAVE_PID      0xF2D0
 
 
-/* www.starting-point-systems.com µChameleon device */
+/* www.starting-point-systems.com ÂµChameleon device */
 #define FTDI_MICRO_CHAMELEON_PID       0xCAA0  /* Product Id */
 
 /* www.irtrans.de device */
 
 /*
  * Teratronik product ids.
- * Submitted by O. Wölfelschneider.
+ * Submitted by O. Wölfelschneider.
  */
 #define FTDI_TERATRONIK_VCP_PID         0xEC88 /* Teratronik device (preferring VCP driver on windows) */
 #define FTDI_TERATRONIK_D2XX_PID 0xEC89        /* Teratronik device (preferring D2XX driver on windows) */
index e836ad07fdb9e958c1380cf93d11076433adfa60..9b38a08ac83a6803cda3d0123ae26f32b42a851a 100644 (file)
@@ -306,7 +306,7 @@ static struct usb_device_id ipaq_id_table [] = {
        { USB_DEVICE(0x0930, 0x0705) }, /* TOSHIBA Pocket PC e310 */
        { USB_DEVICE(0x0930, 0x0706) }, /* TOSHIBA Pocket PC e740 */
        { USB_DEVICE(0x0930, 0x0707) }, /* TOSHIBA Pocket PC e330 Series */
-       { USB_DEVICE(0x0930, 0x0708) }, /* TOSHIBA Pocket PC e350 Series */
+       { USB_DEVICE(0x0930, 0x0708) }, /* TOSHIBA Pocket PC e350 Series */
        { USB_DEVICE(0x0930, 0x0709) }, /* TOSHIBA Pocket PC e750 Series */
        { USB_DEVICE(0x0930, 0x070A) }, /* TOSHIBA Pocket PC e400 Series */
        { USB_DEVICE(0x0930, 0x070B) }, /* TOSHIBA Pocket PC e800 Series */
@@ -488,7 +488,7 @@ static struct usb_device_id ipaq_id_table [] = {
        { USB_DEVICE(0x0BF8, 0x1001) }, /* Fujitsu Siemens Computers USB Sync */
        { USB_DEVICE(0x0C44, 0x03A2) }, /* Motorola iDEN Smartphone */
        { USB_DEVICE(0x0C8E, 0x6000) }, /* Cesscom Luxian Series */
-       { USB_DEVICE(0x0CAD, 0x9001) }, /* Motorola PowerPad Pocket PC Device */
+       { USB_DEVICE(0x0CAD, 0x9001) }, /* Motorola PowerPad Pocket PC Device */
        { USB_DEVICE(0x0F4E, 0x0200) }, /* Freedom Scientific USB Sync */
        { USB_DEVICE(0x0F98, 0x0201) }, /* Cyberbank USB Sync */
        { USB_DEVICE(0x0FB8, 0x3001) }, /* Wistron USB Sync */
index 6831dca93c1bd9643ea6ebc7c7b4c15a21a4f2ac..93a7724e167a8b6c49807905773f3fcb8050578e 100644 (file)
@@ -3,7 +3,7 @@
  * $Id: isd200.c,v 1.16 2002/04/22 03:39:43 mdharm Exp $
  *
  * Current development and maintenance:
- *   (C) 2001-2002 Björn Stenberg (bjorn@haxx.se)
+ *   (C) 2001-2002 Björn Stenberg (bjorn@haxx.se)
  *
  * Developed with the assistance of:
  *   (C) 2002 Alan Stern <stern@rowland.org>
index 9b656ec427d0613ae388bce16eacbbc03cac62c5..22ab2380367db98baab1c5bd0e7541b4a253f982 100644 (file)
@@ -407,7 +407,7 @@ UNUSUAL_DEV(  0x04cb, 0x0100, 0x0000, 0x2210,
                "FinePix 1400Zoom",
                US_SC_UFI, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY | US_FL_SINGLE_LUN),
 
-/* Reported by Peter Wächtler <pwaechtler@loewe-komp.de>
+/* Reported by Peter Wächtler <pwaechtler@loewe-komp.de>
  * The device needs the flags only.
  */
 UNUSUAL_DEV(  0x04ce, 0x0002, 0x0074, 0x0074,
@@ -1551,7 +1551,7 @@ UNUSUAL_DEV(  0x2735, 0x100b, 0x0000, 0x9999,
                US_FL_GO_SLOW ),
 
 /*
- * David Härdeman <david@2gen.com>
+ * David Härdeman <david@2gen.com>
  * The key makes the SCSI stack print confusing (but harmless) messages
  */
 UNUSUAL_DEV(  0x4146, 0xba01, 0x0100, 0x0100,
index b3bf4ecc983a83969559128b47626472cfd980ba..fb9d8d0b2c0452250b85c63b9aa23b0024f8e60f 100644 (file)
@@ -661,7 +661,7 @@ config FB_HECUBA
        help
          This enables support for the Hecuba board. This driver was tested
          with an E-Ink 800x600 display and x86 SBCs through a 16 bit GPIO
-         interface (8 bit data, 4 bit control). If you anticpate using
+         interface (8 bit data, 4 bit control). If you anticipate using
          this driver, say Y or M; otherwise say N. You must specify the
          GPIO IO address to be used for setting control and data.
 
@@ -815,7 +815,7 @@ config FB_XVR500
        help
          This is the framebuffer device for the Sun XVR-500 and similar
          graphics cards based upon the 3DLABS Wildcat chipset.  The driver
-         only works on sparc64 systems where the system firwmare has
+         only works on sparc64 systems where the system firmware has
          mostly initialized the card already.  It is treated as a
          completely dumb framebuffer device.
 
@@ -828,7 +828,7 @@ config FB_XVR2500
        help
          This is the framebuffer device for the Sun XVR-2500 and similar
          graphics cards based upon the 3DLABS Wildcat chipset.  The driver
-         only works on sparc64 systems where the system firwmare has
+         only works on sparc64 systems where the system firmware has
          mostly initialized the card already.  It is treated as a
          completely dumb framebuffer device.
 
index f2e243c353f9914c688b1496e5c30227cb49cfee..4c9ec3f58c52e35c194d98cfebcd830075be6c61 100644 (file)
    +----------+---------------------------------------------+----------+-------+
    |          |                ^                            |          |       |
    |          |                |upper_margin                |          |       |
-   |          |                ¥                            |          |       |
+   |          |                v                            |          |       |
    +----------###############################################----------+-------+
    |          #                ^                            #          |       |
    |          #                |                            #          |       |
    |          #                |                            #          |       |
    |          #                |                            #          |       |
    |          #                |                            #          |       |
-   |          #                ¥                            #          |       |
+   |          #                v                            #          |       |
    +----------###############################################----------+-------+
    |          |                ^                            |          |       |
    |          |                |lower_margin                |          |       |
-   |          |                ¥                            |          |       |
+   |          |                v                            |          |       |
    +----------+---------------------------------------------+----------+-------+
    |          |                ^                            |          |       |
    |          |                |vsync_len                   |          |       |
-   |          |                ¥                            |          |       |
+   |          |                v                            |          |       |
    +----------+---------------------------------------------+----------+-------+
 
 
    CCIR -> PAL
    -----------
 
-      - a scanline is 64 µs long, of which 52.48 µs are visible. This is about
+      - a scanline is 64 Âµs long, of which 52.48 Âµs are visible. This is about
         736 visible 70 ns pixels per line.
       - we have 625 scanlines, of which 575 are visible (interlaced); after
         rounding this becomes 576.
    RETMA -> NTSC
    -------------
 
-      - a scanline is 63.5 µs long, of which 53.5 µs are visible.  This is about
+      - a scanline is 63.5 Âµs long, of which 53.5 Âµs are visible.  This is about
         736 visible 70 ns pixels per line.
       - we have 525 scanlines, of which 485 are visible (interlaced); after
         rounding this becomes 484.
@@ -802,7 +802,7 @@ static u_short ecs_palette[32];
 
 static u_short do_vmode_full = 0;      /* Change the Video Mode */
 static u_short do_vmode_pan = 0;       /* Update the Video Mode */
-static short do_blank = 0;             /* (Un)Blank the Screen (±1) */
+static short do_blank = 0;             /* (Un)Blank the Screen (±1) */
 static u_short do_cursor = 0;          /* Move the Cursor */
 
 
index abe0c435a664ec28e81a2f69b498b58d254c469f..d775eb6590b6540976eb02c414e6825d1d739df6 100644 (file)
@@ -26,7 +26,7 @@
  *                        Anthony Tong <atong@uiuc.edu>
  *
  *  Generic LCD support written by Daniel Mantione, ported from 2.4.20 by Alex Kern
- *  Many Thanks to Ville Syrjälä for patches and fixing nasting 16 bit color bug.
+ *  Many Thanks to Ville Syrjälä for patches and fixing nasting 16 bit color bug.
  *
  *  This file is subject to the terms and conditions of the GNU General Public
  *  License. See the file COPYING in the main directory of this archive for
index a22ccf9485a416d7201726fa963f34dd7f1a1d34..267422f66255e466a3fc56a82d7993b29fe52314 100644 (file)
@@ -27,7 +27,7 @@ config VGACON_SOFT_SCROLLBACK
          The scrollback buffer of the standard VGA console is located in
         the VGA RAM.  The size of this RAM is fixed and is quite small.
         If you require a larger scrollback buffer, this can be placed in
-        System RAM which is dynamically allocated during intialization.
+        System RAM which is dynamically allocated during initialization.
         Placing the scrollback buffer in System RAM will slightly slow
         down the console.
 
index 7f3f18d06718846483d5c67d0dcfb2a3caf52ceb..febf09c63492fa6bdaba484c9bc603d35b1a4140 100644 (file)
@@ -127,7 +127,7 @@ static void gx_set_dclk_frequency(struct fb_info *info)
        int timeout = 1000;
 
        /* Rev. 1 Geode GXs use a 14 MHz reference clock instead of 48 MHz. */
-       if (cpu_data->x86_mask == 1) {
+       if (cpu_data(0).x86_mask == 1) {
                pll_table = gx_pll_table_14MHz;
                pll_table_len = ARRAY_SIZE(gx_pll_table_14MHz);
        } else {
index e8e38edb9b5b6546ef2d251a7490ad9e201a6b09..481d58f7535d0cc4cb5e09ba258a3a486f3cef33 100644 (file)
@@ -4,7 +4,7 @@
  * Linux framebuffer driver for Intel(R) 830M/845G/852GM/855GM/865G/915G/915GM/
  * 945G/945GM integrated graphics chips.
  *
- * Copyright © 2002, 2003 David Dawes <dawes@xfree86.org>
+ * Copyright Â© 2002, 2003 David Dawes <dawes@xfree86.org>
  *                   2004 Sylvain Meyer
  *                   2006 David Airlie
  *
index 2a0e32074f7d4b1b615b719f5b447b3fae433ea9..5f6fb7d2c40898ab2dfaef590dc855876942b88e 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Linux framebuffer driver for Intel(R) 865G integrated graphics chips.
  *
- * Copyright © 2002, 2003 David Dawes <dawes@xfree86.org>
+ * Copyright Â© 2002, 2003 David Dawes <dawes@xfree86.org>
  *                   2004 Sylvain Meyer
  *
  * This driver consists of two parts.  The first part (intelfbdrv.c) provides
index 7f4d25b8a1849789e6a6f49f094cb2b7d7f2a903..f4fcf11b290d0ddaf3a4f8653a8c95482fb269a8 100644 (file)
@@ -8,7 +8,7 @@ config FB_OMAP
           Frame buffer driver for OMAP based boards.
 
 config FB_OMAP_BOOTLOADER_INIT
-       bool "Check bootloader initializaion"
+       bool "Check bootloader initialization"
        depends on FB_OMAP
        help
          Say Y here if you want to enable checking if the bootloader has
index ae08d45870917e3fac1dc70dca5201c87ff147d3..5857ccf5f6b15208f64a7221405063f280b2d44a 100644 (file)
@@ -56,7 +56,7 @@
  *     - Add support for different devices
  *     - Backlight support
  *
- * 2004-09-05: Herbert Pötzl <herbert@13thfloor.at>
+ * 2004-09-05: Herbert Pötzl <herbert@13thfloor.at>
  *     - added clock (de-)allocation code
  *     - added fixem fbmem option
  *
@@ -64,7 +64,7 @@
  *     - code cleanup
  *     - added a forgotten return in h1940fb_init
  *
- * 2004-07-19: Herbert Pötzl <herbert@13thfloor.at>
+ * 2004-07-19: Herbert Pötzl <herbert@13thfloor.at>
  *     - code cleanup and extended debugging
  *
  * 2004-07-15: Arnaud Patard <arnaud.patard@rtp-net.org>
index ff9e805c43bccedcbd89689b45136f0c6ea6fa5c..c31f549ebea0b88750118cd7f5a6c72305182895 100644 (file)
@@ -23,8 +23,8 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  *
  * Authors:
- *   Thomas Hellström <thomas-at-tungstengraphics-dot-com>
- *   Michel Dänzer <michel-at-tungstengraphics-dot-com>
+ *   Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ *   Michel Dänzer <michel-at-tungstengraphics-dot-com>
  *   Alan Hourihane <alanh-at-tungstengraphics-dot-com>
  */
 
index 1fc6695a49d2f1f70642f76b1b830b669ae40eb1..c4aba59d4809a7fce3eec1d0504e926fe67b16bb 100644 (file)
@@ -23,7 +23,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  *
  * Authors:
- *   Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ *   Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 #ifndef _VERMILION_H_
index c5982502c03d45a8def683ac7c06cf4d83ad3719..f236954d2536c0222efa600c7524527625c7e2dd 100644 (file)
@@ -2,7 +2,7 @@
  *     i6300esb:       Watchdog timer driver for Intel 6300ESB chipset
  *
  *     (c) Copyright 2004 Google Inc.
- *     (c) Copyright 2005 David Härdeman <david@2gen.com>
+ *     (c) Copyright 2005 David Härdeman <david@2gen.com>
  *
  *     This program is free software; you can redistribute it and/or
  *     modify it under the terms of the GNU General Public License
@@ -19,7 +19,7 @@
  *     Initial version 0.01
  *  2004YYZZ Ross Biro
  *     Version 0.02
- *  20050210 David Härdeman <david@2gen.com>
+ *  20050210 David Härdeman <david@2gen.com>
  *      Ported driver to kernel 2.6
  */
 
@@ -521,7 +521,7 @@ static void __exit watchdog_cleanup (void)
 module_init(watchdog_init);
 module_exit(watchdog_cleanup);
 
-MODULE_AUTHOR("Ross Biro and David Härdeman");
+MODULE_AUTHOR("Ross Biro and David Härdeman");
 MODULE_DESCRIPTION("Watchdog driver for Intel 6300ESB chipsets");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
index 41508399009710e80a374eb300abe5c9d2ac6e6a..cafc465f2ae3308a9b838dae1e1912061dce9038 100644 (file)
@@ -115,7 +115,7 @@ static void supermicro_old_pre_keepalive(unsigned long acpibase)
  *       For P4DPx:
  *       BIOS setup -> Advanced -> I/O Device Configuration -> Watch Dog
  *      This setting enables or disables Watchdog function. When enabled, the
- *      default watchdog timer is set to be 5 minutes (about 4’35”). It is
+ *      default watchdog timer is set to be 5 minutes (about 4m35s). It is
  *      enough to load and run the OS. The application (service or driver) has
  *      to take over the control once OS is running up and before watchdog
  *      expires.
index d9e821d08deb3b7ea21b36be0ec4682389e807e5..51826c216d6d0c22451db409841e00864e00fd3d 100644 (file)
@@ -8,7 +8,7 @@
  *     which is based on wdt.c.
  *     Original copyright messages:
  *
- *     (c) Copyright 2003 Pádraig Brady <P@draigBrady.com>
+ *     (c) Copyright 2003 Pádraig Brady <P@draigBrady.com>
  *
  *     (c) Copyright 2000-2001 Marek Michalkiewicz <marekm@linux.org.pl>
  *
index 5bd4b05d4c451efb112825b147e68ea472ba63b0..560fef2a7b1c39f3d0b5d1ed17fc1e8a9f0bdac4 100644 (file)
        0100  RH 800C [HD Controller]
        0200  RH 800C [RAM Expansion]
 0861  Kato
-# The Rainbow II and III are actually made by Ingenieurbüro Helfrich
+# The Rainbow II and III are actually made by Ingenieurbüro Helfrich
        2000  Rainbow II [Graphics Card]
        2100  Rainbow III [Graphics Card]
        8000  Melody MPEG [Audio Card]
index 576dd7de22784e3007c5854d39ad867dc02d0bca..f95ae9789c913d81d0df5d17250bced9c5479855 100644 (file)
@@ -2,7 +2,7 @@
  *  linux/fs/binfmt_em86.c
  *
  *  Based on linux/fs/binfmt_script.c
- *  Copyright (C) 1996  Martin von Löwis
+ *  Copyright (C) 1996  Martin von Löwis
  *  original #!-checking implemented by tytso.
  *
  *  em86 changes Copyright (C) 1997  Jim Paradis
index 42e94b3ab7bebe362c50e6efed92d4298b959162..b53c7e5f41bbcffd8f936642117ecfce5f258a21 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  binfmt_misc.c
  *
- *  Copyright (C) 1997 Richard Günther
+ *  Copyright (C) 1997 Richard Günther
  *
  *  binfmt_misc detects binaries via a magic or filename extension and invokes
  *  a specified wrapper. This should obsolete binfmt_java, binfmt_em86 and
index 4d0e0f6d3273df654ae2156b0c28cc9f58a8ac57..ab33939b12a7efb8d754fcc80b89bfc88651a33b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  linux/fs/binfmt_script.c
  *
- *  Copyright (C) 1996  Martin von Löwis
+ *  Copyright (C) 1996  Martin von Löwis
  *  original #!-checking implemented by tytso.
  */
 
index aa359a2e4ce613cb49710e94f248846789fbde4f..09e3d306e96fb298518f50bac38d4ee697b4bf8c 100644 (file)
@@ -3,7 +3,7 @@
  *
  *  (C) 1991  Linus Torvalds - minix filesystem
  *      1992, 1993, 1994  Eric Youngdale Modified for ISO 9660 filesystem.
- *      1994  Eberhard Moenkeberg - multi session handling.
+ *      1994  Eberhard Mönkeberg - multi session handling.
  *      1995  Mark Dobie - allow mounting of some weird VideoCDs and PhotoCDs.
  *     1997  Gordon Chaffee - Joliet CDs
  *     1998  Eric Lammerts - ISO 9660 Level 3
index df0b8535de849f5d26d732c7da5eb66e35bfd762..df25ecc418af0c7a3e06932255853312eb7b2e84 100644 (file)
@@ -773,7 +773,7 @@ int dtSearch(struct inode *ip, struct component_name * key, ino_t * data,
              getChild:
                /* update max. number of pages to split */
                if (BT_STACK_FULL(btstack)) {
-                       /* Something's corrupted, mark filesytem dirty so
+                       /* Something's corrupted, mark filesystem dirty so
                         * chkdsk will fix it.
                         */
                        jfs_error(sb, "stack overrun in dtSearch!");
index af8b235d405dba2ea74c260fd13aba31a5ac46f1..11833f4caeaa9a2ea5549675636330a689c0e80b 100644 (file)
@@ -168,7 +168,8 @@ int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct
        spin_unlock(&inode->i_lock);
 
        spin_unlock(&clp->cl_lock);
-       kfree(delegation);
+       if (delegation != NULL)
+               nfs_free_delegation(delegation);
        return status;
 }
 
index 8ec7fbd8240c2ed37c24e0f342b72c90a1a3a212..35334539d9475dc0188bdb80f4a1d15ef70b56a9 100644 (file)
@@ -562,6 +562,7 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
        nfs_fattr_init(&fattr);
        desc->entry = &my_entry;
 
+       nfs_block_sillyrename(dentry);
        while(!desc->entry->eof) {
                res = readdir_search_pagecache(desc);
 
@@ -592,6 +593,7 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                        break;
                }
        }
+       nfs_unblock_sillyrename(dentry);
        unlock_kernel();
        if (res > 0)
                res = 0;
@@ -866,6 +868,7 @@ struct dentry_operations nfs_dentry_operations = {
 static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *nd)
 {
        struct dentry *res;
+       struct dentry *parent;
        struct inode *inode = NULL;
        int error;
        struct nfs_fh fhandle;
@@ -894,26 +897,31 @@ static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, stru
                goto out_unlock;
        }
 
+       parent = dentry->d_parent;
+       /* Protect against concurrent sillydeletes */
+       nfs_block_sillyrename(parent);
        error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, &fhandle, &fattr);
        if (error == -ENOENT)
                goto no_entry;
        if (error < 0) {
                res = ERR_PTR(error);
-               goto out_unlock;
+               goto out_unblock_sillyrename;
        }
        inode = nfs_fhget(dentry->d_sb, &fhandle, &fattr);
        res = (struct dentry *)inode;
        if (IS_ERR(res))
-               goto out_unlock;
+               goto out_unblock_sillyrename;
 
 no_entry:
        res = d_materialise_unique(dentry, inode);
        if (res != NULL) {
                if (IS_ERR(res))
-                       goto out_unlock;
+                       goto out_unblock_sillyrename;
                dentry = res;
        }
        nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
+out_unblock_sillyrename:
+       nfs_unblock_sillyrename(parent);
 out_unlock:
        unlock_kernel();
 out:
index d29f90d00aa24298882785747996bd5427193afe..b3bb89f7d5d2856719a705e37ddb320b7a285127 100644 (file)
@@ -131,7 +131,7 @@ nfs_file_release(struct inode *inode, struct file *filp)
 {
        /* Ensure that dirty pages are flushed out with the right creds */
        if (filp->f_mode & FMODE_WRITE)
-               filemap_fdatawrite(filp->f_mapping);
+               nfs_wb_all(filp->f_path.dentry->d_inode);
        nfs_inc_stats(inode, NFSIOS_VFSRELEASE);
        return NFS_PROTO(inode)->file_release(inode, filp);
 }
index 6d2f2a3eccf878d5cdd1e45fcbc794c7e63e9af3..db5d96dc6107d5cb8b21235963fd4a950728401f 100644 (file)
@@ -514,7 +514,7 @@ struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx)
        return ctx;
 }
 
-void put_nfs_open_context(struct nfs_open_context *ctx)
+static void __put_nfs_open_context(struct nfs_open_context *ctx, int wait)
 {
        struct inode *inode = ctx->path.dentry->d_inode;
 
@@ -522,8 +522,12 @@ void put_nfs_open_context(struct nfs_open_context *ctx)
                return;
        list_del(&ctx->list);
        spin_unlock(&inode->i_lock);
-       if (ctx->state != NULL)
-               nfs4_close_state(&ctx->path, ctx->state, ctx->mode);
+       if (ctx->state != NULL) {
+               if (wait)
+                       nfs4_close_sync(&ctx->path, ctx->state, ctx->mode);
+               else
+                       nfs4_close_state(&ctx->path, ctx->state, ctx->mode);
+       }
        if (ctx->cred != NULL)
                put_rpccred(ctx->cred);
        dput(ctx->path.dentry);
@@ -531,6 +535,16 @@ void put_nfs_open_context(struct nfs_open_context *ctx)
        kfree(ctx);
 }
 
+void put_nfs_open_context(struct nfs_open_context *ctx)
+{
+       __put_nfs_open_context(ctx, 0);
+}
+
+static void put_nfs_open_context_sync(struct nfs_open_context *ctx)
+{
+       __put_nfs_open_context(ctx, 1);
+}
+
 /*
  * Ensure that mmap has a recent RPC credential for use when writing out
  * shared pages
@@ -577,7 +591,7 @@ static void nfs_file_clear_open_context(struct file *filp)
                spin_lock(&inode->i_lock);
                list_move_tail(&ctx->list, &NFS_I(inode)->open_files);
                spin_unlock(&inode->i_lock);
-               put_nfs_open_context(ctx);
+               put_nfs_open_context_sync(ctx);
        }
 }
 
@@ -1169,6 +1183,9 @@ static void init_once(struct kmem_cache * cachep, void *foo)
        INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC);
        nfsi->ncommit = 0;
        nfsi->npages = 0;
+       atomic_set(&nfsi->silly_count, 1);
+       INIT_HLIST_HEAD(&nfsi->silly_list);
+       init_waitqueue_head(&nfsi->waitqueue);
        nfs4_init_once(nfsi);
 }
 
index d2802b1ca3b9b84d57efbadd789c019094e2bc2e..b35069a2aa9e575bd81fa09f59b67048718cca48 100644 (file)
@@ -178,7 +178,7 @@ extern int nfs4_proc_setclientid(struct nfs_client *, u32, unsigned short, struc
 extern int nfs4_proc_setclientid_confirm(struct nfs_client *, struct rpc_cred *);
 extern int nfs4_proc_async_renew(struct nfs_client *, struct rpc_cred *);
 extern int nfs4_proc_renew(struct nfs_client *, struct rpc_cred *);
-extern int nfs4_do_close(struct path *path, struct nfs4_state *state);
+extern int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait);
 extern struct dentry *nfs4_atomic_open(struct inode *, struct dentry *, struct nameidata *);
 extern int nfs4_open_revalidate(struct inode *, struct dentry *, int, struct nameidata *);
 extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *fhandle);
@@ -209,6 +209,7 @@ extern void nfs4_drop_state_owner(struct nfs4_state_owner *);
 extern struct nfs4_state * nfs4_get_open_state(struct inode *, struct nfs4_state_owner *);
 extern void nfs4_put_open_state(struct nfs4_state *);
 extern void nfs4_close_state(struct path *, struct nfs4_state *, mode_t);
+extern void nfs4_close_sync(struct path *, struct nfs4_state *, mode_t);
 extern void nfs4_state_set_mode_locked(struct nfs4_state *, mode_t);
 extern void nfs4_schedule_state_recovery(struct nfs_client *);
 extern void nfs4_put_lock_state(struct nfs4_lock_state *lsp);
@@ -235,6 +236,7 @@ extern struct svc_version nfs4_callback_version1;
 #else
 
 #define nfs4_close_state(a, b, c) do { } while (0)
+#define nfs4_close_sync(a, b, c) do { } while (0)
 
 #endif /* CONFIG_NFS_V4 */
 #endif /* __LINUX_FS_NFS_NFS4_FS.H */
index cb99fd90a9acc5147135bb70846517ad8e79165e..f03d9d5f5ba40d9d3db91a1dbb4ef43d74ab64bc 100644 (file)
@@ -1305,7 +1305,7 @@ static const struct rpc_call_ops nfs4_close_ops = {
  *
  * NOTE: Caller must be holding the sp->so_owner semaphore!
  */
-int nfs4_do_close(struct path *path, struct nfs4_state *state)
+int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait)
 {
        struct nfs_server *server = NFS_SERVER(state->inode);
        struct nfs4_closedata *calldata;
@@ -1333,8 +1333,11 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state)
        task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_close_ops, calldata);
        if (IS_ERR(task))
                return PTR_ERR(task);
+       status = 0;
+       if (wait)
+               status = rpc_wait_for_completion_task(task);
        rpc_put_task(task);
-       return 0;
+       return status;
 out_free_calldata:
        kfree(calldata);
 out:
@@ -1365,13 +1368,14 @@ static int nfs4_intent_set_file(struct nameidata *nd, struct path *path, struct
        }
        ret = PTR_ERR(filp);
 out_close:
-       nfs4_close_state(path, state, nd->intent.open.flags);
+       nfs4_close_sync(path, state, nd->intent.open.flags);
        return ret;
 }
 
 struct dentry *
 nfs4_atomic_open(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
 {
+       struct dentry *parent;
        struct path path = {
                .mnt = nd->mnt,
                .dentry = dentry,
@@ -1394,6 +1398,9 @@ nfs4_atomic_open(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
        cred = rpcauth_lookupcred(NFS_CLIENT(dir)->cl_auth, 0);
        if (IS_ERR(cred))
                return (struct dentry *)cred;
+       parent = dentry->d_parent;
+       /* Protect against concurrent sillydeletes */
+       nfs_block_sillyrename(parent);
        state = nfs4_do_open(dir, &path, nd->intent.open.flags, &attr, cred);
        put_rpccred(cred);
        if (IS_ERR(state)) {
@@ -1401,12 +1408,14 @@ nfs4_atomic_open(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
                        d_add(dentry, NULL);
                        nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
                }
+               nfs_unblock_sillyrename(parent);
                return (struct dentry *)state;
        }
        res = d_add_unique(dentry, igrab(state->inode));
        if (res != NULL)
                path.dentry = res;
        nfs_set_verifier(path.dentry, nfs_save_change_attribute(dir));
+       nfs_unblock_sillyrename(parent);
        nfs4_intent_set_file(nd, &path, state);
        return res;
 }
@@ -1444,7 +1453,7 @@ nfs4_open_revalidate(struct inode *dir, struct dentry *dentry, int openflags, st
                nfs4_intent_set_file(nd, &path, state);
                return 1;
        }
-       nfs4_close_state(&path, state, openflags);
+       nfs4_close_sync(&path, state, openflags);
 out_drop:
        d_drop(dentry);
        return 0;
@@ -1898,7 +1907,7 @@ nfs4_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
        if (status == 0 && (nd->flags & LOOKUP_OPEN) != 0)
                status = nfs4_intent_set_file(nd, &path, state);
        else
-               nfs4_close_state(&path, state, flags);
+               nfs4_close_sync(&path, state, flags);
 out:
        return status;
 }
index bfb36261cecb2ba6a542690b20ab3a573789d5e1..23a9a36556bf5f5ca4dba357157cbb35dc9ac331 100644 (file)
@@ -425,7 +425,7 @@ void nfs4_put_open_state(struct nfs4_state *state)
 /*
  * Close the current file.
  */
-void nfs4_close_state(struct path *path, struct nfs4_state *state, mode_t mode)
+static void __nfs4_close(struct path *path, struct nfs4_state *state, mode_t mode, int wait)
 {
        struct nfs4_state_owner *owner = state->owner;
        int call_close = 0;
@@ -466,7 +466,17 @@ void nfs4_close_state(struct path *path, struct nfs4_state *state, mode_t mode)
                nfs4_put_open_state(state);
                nfs4_put_state_owner(owner);
        } else
-               nfs4_do_close(path, state);
+               nfs4_do_close(path, state, wait);
+}
+
+void nfs4_close_state(struct path *path, struct nfs4_state *state, mode_t mode)
+{
+       __nfs4_close(path, state, mode, 0);
+}
+
+void nfs4_close_sync(struct path *path, struct nfs4_state *state, mode_t mode)
+{
+       __nfs4_close(path, state, mode, 1);
 }
 
 /*
index e87b44ee9ac9b0490e00de2dd420e4cb1bcebb46..4b0334590ee5ebdd959fc29e629312296a767aed 100644 (file)
@@ -43,7 +43,7 @@
  *                             from being used (thanks to Leo Spiekman)
  *     Andy Walker     :       Allow to specify the NFS server in nfs_root
  *                             without giving a path name
- *     Swen Thümmler   :       Allow to specify the NFS options in nfs_root
+ *     Swen Thümmler  :       Allow to specify the NFS options in nfs_root
  *                             without giving a path name. Fix BOOTP request
  *                             for domainname (domainname is NIS domain, not
  *                             DNS domain!). Skip dummy devices for BOOTP.
index 1aed850d18f2ebab29f2b6b7077f4effb85413ff..ce558c2e4d53d5779db00bfe79a6a9744c394865 100644 (file)
 #include <linux/sunrpc/sched.h>
 #include <linux/sunrpc/clnt.h>
 #include <linux/nfs_fs.h>
-
+#include <linux/sched.h>
+#include <linux/wait.h>
 
 struct nfs_unlinkdata {
+       struct hlist_node list;
        struct nfs_removeargs args;
        struct nfs_removeres res;
        struct inode *dir;
@@ -52,6 +54,20 @@ static int nfs_copy_dname(struct dentry *dentry, struct nfs_unlinkdata *data)
        return 0;
 }
 
+static void nfs_free_dname(struct nfs_unlinkdata *data)
+{
+       kfree(data->args.name.name);
+       data->args.name.name = NULL;
+       data->args.name.len = 0;
+}
+
+static void nfs_dec_sillycount(struct inode *dir)
+{
+       struct nfs_inode *nfsi = NFS_I(dir);
+       if (atomic_dec_return(&nfsi->silly_count) == 1)
+               wake_up(&nfsi->waitqueue);
+}
+
 /**
  * nfs_async_unlink_init - Initialize the RPC info
  * task: rpc_task of the sillydelete
@@ -95,6 +111,8 @@ static void nfs_async_unlink_done(struct rpc_task *task, void *calldata)
 static void nfs_async_unlink_release(void *calldata)
 {
        struct nfs_unlinkdata   *data = calldata;
+
+       nfs_dec_sillycount(data->dir);
        nfs_free_unlinkdata(data);
 }
 
@@ -104,33 +122,100 @@ static const struct rpc_call_ops nfs_unlink_ops = {
        .rpc_release = nfs_async_unlink_release,
 };
 
-static int nfs_call_unlink(struct dentry *dentry, struct nfs_unlinkdata *data)
+static int nfs_do_call_unlink(struct dentry *parent, struct inode *dir, struct nfs_unlinkdata *data)
 {
        struct rpc_task *task;
+       struct dentry *alias;
+
+       alias = d_lookup(parent, &data->args.name);
+       if (alias != NULL) {
+               int ret = 0;
+               /*
+                * Hey, we raced with lookup... See if we need to transfer
+                * the sillyrename information to the aliased dentry.
+                */
+               nfs_free_dname(data);
+               spin_lock(&alias->d_lock);
+               if (!(alias->d_flags & DCACHE_NFSFS_RENAMED)) {
+                       alias->d_fsdata = data;
+                       alias->d_flags ^= DCACHE_NFSFS_RENAMED;
+                       ret = 1;
+               }
+               spin_unlock(&alias->d_lock);
+               nfs_dec_sillycount(dir);
+               dput(alias);
+               return ret;
+       }
+       data->dir = igrab(dir);
+       if (!data->dir) {
+               nfs_dec_sillycount(dir);
+               return 0;
+       }
+       data->args.fh = NFS_FH(dir);
+       nfs_fattr_init(&data->res.dir_attr);
+
+       task = rpc_run_task(NFS_CLIENT(dir), RPC_TASK_ASYNC, &nfs_unlink_ops, data);
+       if (!IS_ERR(task))
+               rpc_put_task(task);
+       return 1;
+}
+
+static int nfs_call_unlink(struct dentry *dentry, struct nfs_unlinkdata *data)
+{
        struct dentry *parent;
        struct inode *dir;
+       int ret = 0;
 
-       if (nfs_copy_dname(dentry, data) < 0)
-               goto out_free;
 
        parent = dget_parent(dentry);
        if (parent == NULL)
                goto out_free;
-       dir = igrab(parent->d_inode);
+       dir = parent->d_inode;
+       if (nfs_copy_dname(dentry, data) == 0)
+               goto out_dput;
+       /* Non-exclusive lock protects against concurrent lookup() calls */
+       spin_lock(&dir->i_lock);
+       if (atomic_inc_not_zero(&NFS_I(dir)->silly_count) == 0) {
+               /* Deferred delete */
+               hlist_add_head(&data->list, &NFS_I(dir)->silly_list);
+               spin_unlock(&dir->i_lock);
+               ret = 1;
+               goto out_dput;
+       }
+       spin_unlock(&dir->i_lock);
+       ret = nfs_do_call_unlink(parent, dir, data);
+out_dput:
        dput(parent);
-       if (dir == NULL)
-               goto out_free;
+out_free:
+       return ret;
+}
 
-       data->dir = dir;
-       data->args.fh = NFS_FH(dir);
-       nfs_fattr_init(&data->res.dir_attr);
+void nfs_block_sillyrename(struct dentry *dentry)
+{
+       struct nfs_inode *nfsi = NFS_I(dentry->d_inode);
 
-       task = rpc_run_task(NFS_CLIENT(dir), RPC_TASK_ASYNC, &nfs_unlink_ops, data);
-       if (!IS_ERR(task))
-               rpc_put_task(task);
-       return 1;
-out_free:
-       return 0;
+       wait_event(nfsi->waitqueue, atomic_cmpxchg(&nfsi->silly_count, 1, 0) == 1);
+}
+
+void nfs_unblock_sillyrename(struct dentry *dentry)
+{
+       struct inode *dir = dentry->d_inode;
+       struct nfs_inode *nfsi = NFS_I(dir);
+       struct nfs_unlinkdata *data;
+
+       atomic_inc(&nfsi->silly_count);
+       spin_lock(&dir->i_lock);
+       while (!hlist_empty(&nfsi->silly_list)) {
+               if (!atomic_inc_not_zero(&nfsi->silly_count))
+                       break;
+               data = hlist_entry(nfsi->silly_list.first, struct nfs_unlinkdata, list);
+               hlist_del(&data->list);
+               spin_unlock(&dir->i_lock);
+               if (nfs_do_call_unlink(dentry, dir, data) == 0)
+                       nfs_free_unlinkdata(data);
+               spin_lock(&dir->i_lock);
+       }
+       spin_unlock(&dir->i_lock);
 }
 
 /**
index 0cf9d1cd9bd256c1f1ff4928f523fb48788b3b41..89527a487ed7d5365464bd6fe537c9014cfce117 100644 (file)
@@ -174,8 +174,6 @@ static void nfs_mark_uptodate(struct page *page, unsigned int base, unsigned int
                return;
        if (count != nfs_page_length(page))
                return;
-       if (count != PAGE_CACHE_SIZE)
-               zero_user_page(page, count, PAGE_CACHE_SIZE - count, KM_USER0);
        SetPageUptodate(page);
 }
 
@@ -627,7 +625,8 @@ static struct nfs_page * nfs_update_request(struct nfs_open_context* ctx,
                                return ERR_PTR(error);
                        }
                        spin_unlock(&inode->i_lock);
-                       return new;
+                       req = new;
+                       goto zero_page;
                }
                spin_unlock(&inode->i_lock);
 
@@ -655,13 +654,23 @@ static struct nfs_page * nfs_update_request(struct nfs_open_context* ctx,
        if (offset < req->wb_offset) {
                req->wb_offset = offset;
                req->wb_pgbase = offset;
-               req->wb_bytes = rqend - req->wb_offset;
+               req->wb_bytes = max(end, rqend) - req->wb_offset;
+               goto zero_page;
        }
 
        if (end > rqend)
                req->wb_bytes = end - req->wb_offset;
 
        return req;
+zero_page:
+       /* If this page might potentially be marked as up to date,
+        * then we need to zero any uninitalised data. */
+       if (req->wb_pgbase == 0 && req->wb_bytes != PAGE_CACHE_SIZE
+                       && !PageUptodate(req->wb_page))
+               zero_user_page(req->wb_page, req->wb_bytes,
+                               PAGE_CACHE_SIZE - req->wb_bytes,
+                               KM_USER0);
+       return req;
 }
 
 int nfs_flush_incompatible(struct file *file, struct page *page)
index 345798ebd366b85019bd163d42e11a9be39cd098..37c11e1943722aeb351683c768b058dfeffae8fa 100644 (file)
@@ -382,7 +382,7 @@ ToDo/Notes:
          own locking so it does not matter if the vfs inode is locked.
        - Fix bug in mft record writing where we forgot to set the device in
          the buffers when mapping them after the VM had discarded them.
-         Thanks to Martin MOKREJŠ for the bug report.
+         Thanks to Martin MOKREJÅ for the bug report.
 
 2.1.22 - Many bug and race fixes and error handling improvements.
 
@@ -1585,7 +1585,7 @@ tng-0.0.4 - Big changes, getting in line with Al Viro's comments.
          for reading $MFT (ntfs_mft_readpage). In the process create dedicated
          address space operations (ntfs_mft_aops) for $MFT inode mapping. Also
          removed the now superfluous exports from the kernel core patch.
-       - Fix a bug where kfree() was used insted of ntfs_free().
+       - Fix a bug where kfree() was used instead of ntfs_free().
        - Change map_mft_record() to take ntfs_inode as argument instead of
          vfs inode. Dito for unmap_mft_record(). Adapt all callers.
        - Add pointer to ntfs_volume to ntfs_inode.
index 4847fbfb0107af9a687dccdd4a77f9c3690bdf02..9ef85e628fe1cf8c181b8cbbeecba86dca31854d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * sysctl.c - Code for sysctl handling in NTFS Linux kernel driver. Part of
  *           the Linux-NTFS project. Adapted from the old NTFS driver,
- *           Copyright (C) 1997 Martin von Löwis, Régis Duchesne
+ *           Copyright (C) 1997 Martin von Löwis, Régis Duchesne
  *
  * Copyright (c) 2002-2005 Anton Altaparmakov
  *
index beda5bf96405df5f8c630ffe1197395969adf86a..d4f8ce920d95b744616618e8d828ceb047d74253 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * sysctl.h - Defines for sysctl handling in NTFS Linux kernel driver. Part of
  *           the Linux-NTFS project. Adapted from the old NTFS driver,
- *           Copyright (C) 1997 Martin von Löwis, Régis Duchesne
+ *           Copyright (C) 1997 Martin von Löwis, Régis Duchesne
  *
  * Copyright (c) 2002-2004 Anton Altaparmakov
  *
index 014e73978dac074aa406f4494f9e6288515a88a3..3094ddb7a25491b1d2db567707ce7f6a01592c27 100644 (file)
@@ -376,7 +376,7 @@ out:
  * directory locks. The dentries have already been deleted on other
  * nodes via ocfs2_remote_dentry_delete().
  *
- * Normally, the VFS handles the d_move() for the file sytem, after
+ * Normally, the VFS handles the d_move() for the file system, after
  * the ->rename() callback. OCFS2 wants to handle this internally, so
  * the new lock can be created atomically with respect to the cluster.
  */
index 57adfe90d5aed2e8f64b0674bb9bf104c13b0bce..98c3781bc069d34112426584d7733b7f7cbabb8d 100644 (file)
@@ -319,7 +319,7 @@ static int finish_unfinished(struct super_block *s)
 
 /* to protect file being unlinked from getting lost we "safe" link files
    being unlinked. This link will be deleted in the same transaction with last
-   item of file. mounting the filesytem we scan all these links and remove
+   item of file. mounting the filesystem we scan all these links and remove
    files which almost got lost */
 void add_save_link(struct reiserfs_transaction_handle *th,
                   struct inode *inode, int truncate)
index d28fde7e1cfbf96329c02ce34e38cf1310d0f6f4..ceaf2e3d594cdd89afabab0253cf1ab59badceba 100644 (file)
@@ -15,7 +15,7 @@
  *  Added kerneld support: Jacques Gelinas and Bjorn Ekwall
  *  Added change_root: Werner Almesberger & Hans Lermen, Feb '96
  *  Added options to /proc/mounts:
- *    Torbjörn Lindh (torbjorn.lindh@gopta.se), April 14, 1996.
+ *    Torbjörn Lindh (torbjorn.lindh@gopta.se), April 14, 1996.
  *  Added devfs support: Richard Gooch <rgooch@atnf.csiro.au>, 13-JAN-1998
  *  Heavily rewritten for 'one fs - one tree' dcache architecture. AV, Mar 2000
  */
@@ -417,7 +417,7 @@ restart:
 }
 
 /*
- * Call the ->sync_fs super_op against all filesytems which are r/w and
+ * Call the ->sync_fs super_op against all filesystems which are r/w and
  * which implement it.
  *
  * This operation is careful to avoid the livelock which could easily happen
@@ -425,7 +425,7 @@ restart:
  * is used only here.  We set it against all filesystems and then clear it as
  * we sync them.  So redirtied filesystems are skipped.
  *
- * But if process A is currently running sync_filesytems and then process B
+ * But if process A is currently running sync_filesystems and then process B
  * calls sync_filesystems as well, process B will set all the s_need_sync_fs
  * flags again, which will cause process A to resync everything.  Fix that with
  * a local mutex.
index d3be1e7fb48b6d3ad4ccb7ceccf1b1fbf637767e..27d1785b764463c4bc654e9713f41c369d9ea0cb 100644 (file)
@@ -540,7 +540,7 @@ int sysfs_add_file(struct sysfs_dirent *dir_sd, const struct attribute *attr,
 /**
  *     sysfs_create_file - create an attribute file for an object.
  *     @kobj:  object we're creating for. 
- *     @attr:  atrribute descriptor.
+ *     @attr:  attribute descriptor.
  */
 
 int sysfs_create_file(struct kobject * kobj, const struct attribute * attr)
index 2a5cc0b367ab4c36dfa79839248c662fa75f7aec..b7bf68d0407bed6367f5f7f848768681fd7d6357 100644 (file)
@@ -40,7 +40,6 @@ static inline unsigned long ide_default_io_base(int index)
        }
 }
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #ifdef CONFIG_PCI
index 002227924b9fa09c48a80b909ecb7329d219cce2..a6d1ee0980f21d3372a552952f79c4aaef96c0da 100644 (file)
 #define TIMER3_CLEAR   __REG(0x80000e0c)       /* Timer 3 Clear Register */
 
 /* Timer Control register bits */
-#define TIMER_CTRL_ENABLE      (1 << 7) /* Enable (Start° Timer */
+#define TIMER_CTRL_ENABLE      (1 << 7) /* Enable (Start Timer) */
 #define TIMER_CTRL_PERIODIC    (1 << 6) /* Periodic Running Mode */
 #define TIMER_CTRL_FREE_RUNNING (0 << 6) /* Normal Running Mode */
 #define TIMER_CTRL_CLKSEL_508K (1 << 3) /* 508KHz Clock select (Timer 1, 2) */
-#define TIMER_CTRL_CLKSEL_2K   (0 << 3) /* 2KHz Clock Select (Timer 1, 2)*/
+#define TIMER_CTRL_CLKSEL_2K   (0 << 3) /* 2KHz Clock Select (Timer 1, 2) */
 
 /* Power and State Control */
 #define POWER_BASE     __REG(0x80000400)
index 678134bf24753cd09203ff01820686ad4f0cd564..1eb8aac4322801ca25383f26040ec46fd0467c25 100644 (file)
@@ -401,7 +401,7 @@ extern void dma_sync_sg_for_device(struct device*, struct scatterlist*, int, enu
  *
  * On the SA-1111, a bug limits DMA to only certain regions of RAM.
  * On the IXP425, the PCI inbound window is 64MB (256MB total RAM)
- * On some ADI engineering sytems, PCI inbound window is 32MB (12MB total RAM)
+ * On some ADI engineering systems, PCI inbound window is 32MB (12MB total RAM)
  *
  * The following are helper functions used by the dmabounce subystem
  *
index 4f68c8a5a1998cd9f222c32831875e0f8a1ea97a..f348fcf3150b982bd82192d68a820419f675b78e 100644 (file)
@@ -18,7 +18,6 @@
 #endif
 
 #if !defined(CONFIG_ARCH_L7200)
-# define IDE_ARCH_OBSOLETE_INIT
 # ifdef CONFIG_ARCH_CLPS7500
 #  define ide_default_io_ctl(base)     ((base) + 0x206) /* obsolete */
 # else
index 41b2db46a1681d69b3a619e4b1259ab835f71886..121e272581d68a53225b0941b63bca62cee57036 100644 (file)
@@ -20,7 +20,6 @@
 #define MAX_HWIFS      1
 
 /* Legacy ... BLK_DEV_IDECS */
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 
index 2b3d47d0bbb692f62d9242adba7adec523cc0723..4a927379ee1ce9c5fdc006fe2a3bbed851f3d1eb 100644 (file)
@@ -128,9 +128,7 @@ extern unsigned long irq_flags;
 #define mb()   asm volatile (""   : : :"memory")
 #define rmb()  asm volatile (""   : : :"memory")
 #define wmb()  asm volatile (""   : : :"memory")
-#define set_rmb(var, value)    do { (void) xchg(&var, value); } while (0)
-#define set_mb(var, value)     set_rmb(var, value)
-#define set_wmb(var, value)    do { var = value; wmb(); } while (0)
+#define set_mb(var, value) do { (void) xchg(&var, value); } while (0)
 
 #define read_barrier_depends()                 do { } while(0)
 
index 6590f657500dc1c6e7b1d3cd5e6eec265471dacb..11296170d057cf96abcced2b328874f963239f33 100644 (file)
@@ -54,7 +54,7 @@ static inline unsigned long ide_default_io_base(int index)
 #define SUPPORT_VLB_SYNC 0
 
 #define IDE_ARCH_ACK_INTR
-#define ide_ack_intr(hwif)     (hwif)->hw.ack_intr(hwif)
+#define ide_ack_intr(hwif)     ((hwif)->ack_intr(hwif))
 
 #endif /* __KERNEL__ */
 
index 7807018f85002cd201db14dc74926f469b3c11b5..2c1e83f7b4191568bcb1880cc5f423c7bdaa3773 100644 (file)
@@ -82,8 +82,7 @@ asmlinkage void resume(void);
 #define mb()   asm volatile (""   : : :"memory")
 #define rmb()  asm volatile (""   : : :"memory")
 #define wmb()  asm volatile (""   : : :"memory")
-#define set_rmb(var, value)    do { xchg(&var, value); } while (0)
-#define set_mb(var, value)     set_rmb(var, value)
+#define set_mb(var, value) do { xchg(&var, value); } while (0)
 
 #ifdef CONFIG_SMP
 #define smp_mb()       mb()
index e928675de352b08f06799442fd9761ab0c341ea6..1ccf23809329e28b15be6c5967e697ef2b75014b 100644 (file)
@@ -46,7 +46,6 @@ static inline unsigned long ide_default_io_base(int index)
        }
 }
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #ifdef CONFIG_PCI
index 4672a49e8760546f3b835d627359b9c0d62fd418..5d2044e529abc0e562a8eee0338e70c06834eed8 100644 (file)
@@ -65,7 +65,6 @@ static __inline__ unsigned long ide_default_io_base(int index)
        }
 }
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #ifdef CONFIG_BLK_DEV_IDEPCI
index f9ffb2cbbae826c571d0feaeee632b2eac68b5f5..909c6dfd3851169dae42ac87613a70fc912ece34 100644 (file)
@@ -137,7 +137,7 @@ ide_get_lock(irq_handler_t handler, void *data)
 #endif /* CONFIG_BLK_DEV_FALCON_IDE */
 
 #define IDE_ARCH_ACK_INTR
-#define ide_ack_intr(hwif)     ((hwif)->hw.ack_intr ? (hwif)->hw.ack_intr(hwif) : 1)
+#define ide_ack_intr(hwif)     ((hwif)->ack_intr ? (hwif)->ack_intr(hwif) : 1)
 
 #endif /* __KERNEL__ */
 #endif /* _M68K_IDE_H */
index 1bd1142685e18f5dd916c0dcf838fe1e3c2435df..15b4c7d45c94a643865b511040cff2e5dcd0e04a 100644 (file)
@@ -104,8 +104,7 @@ asmlinkage void resume(void);
 #define mb()   asm volatile (""   : : :"memory")
 #define rmb()  asm volatile (""   : : :"memory")
 #define wmb()  asm volatile (""   : : :"memory")
-#define set_rmb(var, value)    do { xchg(&var, value); } while (0)
-#define set_mb(var, value)     set_rmb(var, value)
+#define set_mb(var, value) do { xchg(&var, value); } while (0)
 
 #ifdef CONFIG_SMP
 #define smp_mb()       mb()
index a77128362a7d392d512f082bcf89daaced8fd51c..4ec2b930dfbb3ec565abe1978a4f896ccaeea6e7 100644 (file)
@@ -98,7 +98,6 @@ static __inline__ unsigned long ide_default_io_base(int index)
        }
 }
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #ifdef CONFIG_BLK_DEV_IDEPCI
index b84feebf2cefdf9e523c36d516db08409f8cc832..5f4b9d4e4114febd5679202355afe7a35ba4670b 100644 (file)
@@ -538,7 +538,7 @@ typedef struct bridge_err_cmdword_s {
                 BRIDGE_ISR_PMU_ESIZE_FAULT)
 
 /*
- * List of Errors which are fatal and kill the sytem
+ * List of Errors which are fatal and kill the system
  */
 #define BRIDGE_ISR_ERROR_FATAL         \
                ((BRIDGE_ISR_XTALK_ERROR & ~BRIDGE_ISR_XREAD_REQ_TIMEOUT)|\
index b27bf7aeb2564697325a3509cee430e9a39a61de..be8760fbc8ee4042ded80ff196b4f9ce70335aa0 100644 (file)
@@ -17,7 +17,6 @@
 #define MAX_HWIFS      2
 #endif
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #define ide_request_irq(irq,hand,flg,dev,id)   request_irq((irq),(hand),(flg),(dev),(id))
index 1644e44c8757667e575ec03268d02323b62e4145..fd7f5a430f0afdc91e934b0ebf54102e7559efcc 100644 (file)
@@ -69,12 +69,11 @@ static __inline__ unsigned long ide_default_io_base(int index)
 
 #ifdef CONFIG_BLK_DEV_MPC8xx_IDE
 #define IDE_ARCH_ACK_INTR  1
-#define ide_ack_intr(hwif) (hwif->hw.ack_intr ? hwif->hw.ack_intr(hwif) : 1)
+#define ide_ack_intr(hwif) ((hwif)->ack_intr ? (hwif)->ack_intr(hwif) : 1)
 #endif
 
 #endif /* __powerpc64__ */
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #endif /* __KERNEL__ */
index bf14ab4ef4c9794b30432d5d415ec06660d8c121..e44cdfc8493a8f30a2b4a4644884c429f5b1f966 100644 (file)
@@ -522,7 +522,7 @@ static inline void name at                                  \
 #else
 /*
  * Enforce synchronisation of stores vs. spin_unlock
- * (this does it explicitely, though our implementation of spin_unlock
+ * (this does it explicitly, though our implementation of spin_unlock
  * does it implicitely too)
  */
 static inline void mmiowb(void)
index 98c6bd5756b756a3147ff72a300162e4ba876adb..f6dfce025adfe4d117587321782b607028142bbf 100644 (file)
@@ -121,7 +121,5 @@ struct paca_struct {
 
 extern struct paca_struct paca[];
 
-void setup_boot_paca(void);
-
 #endif /* __KERNEL__ */
 #endif /* _ASM_POWERPC_PACA_H */
index 02ca9347f0439136aeeb76d93023a211a5bf11aa..b36792ac5d6601827dd56f22ea7de6ec63fb7fa6 100644 (file)
@@ -36,7 +36,7 @@
 #define PA_LED         0xba000000      /* LED */
 #define        PA_BCR          0xbb000000      /* FPGA on the MS7751SE01 */
 
-#define PA_MRSHPC      0xb83fffe0      /* MR-SHPC-01 PCMCIA controler */
+#define PA_MRSHPC      0xb83fffe0      /* MR-SHPC-01 PCMCIA controller */
 #define PA_MRSHPC_MW1  0xb8400000      /* MR-SHPC-01 memory window base */
 #define PA_MRSHPC_MW2  0xb8500000      /* MR-SHPC-01 attribute window base */
 #define PA_MRSHPC_IO   0xb8600000      /* MR-SHPC-01 I/O window base */
index b143bb2a2ca757a8128f14185fc2b6eabf6f931d..4161122c84efd2afe7ca05f50b5219c823f3a9fc 100644 (file)
@@ -36,7 +36,7 @@
 #define PA_LED         0xba000000      /* LED */
 #define        PA_BCR          0xbb000000      /* FPGA on the MS7751SE01 */
 
-#define PA_MRSHPC      0xb83fffe0      /* MR-SHPC-01 PCMCIA controler */
+#define PA_MRSHPC      0xb83fffe0      /* MR-SHPC-01 PCMCIA controller */
 #define PA_MRSHPC_MW1  0xb8400000      /* MR-SHPC-01 memory window base */
 #define PA_MRSHPC_MW2  0xb8500000      /* MR-SHPC-01 attribute window base */
 #define PA_MRSHPC_IO   0xb8600000      /* MR-SHPC-01 I/O window base */
index c9d84d5f772edbe1eb2554135d659fb83598e41e..b6e31e8b941037a3a8a6ee6ff5a1362d91b2f2f1 100644 (file)
@@ -19,7 +19,6 @@
 /* Without this, the initialisation of PCI IDE cards end up calling
  * ide_init_hwif_ports, which won't work. */
 #ifdef CONFIG_BLK_DEV_IDEPCI
-#define IDE_ARCH_OBSOLETE_INIT 1
 #define ide_default_io_ctl(base)       (0)
 #endif
 
index 5ff94644e8c87f4c47c0a24d5c539a9edcb07231..be2a15ffcc5535fb2e1c49db209b318a26047626 100644 (file)
@@ -62,8 +62,7 @@ extern void __xchg_called_with_bad_pointer(void);
 #define smp_read_barrier_depends()     do { } while (0)
 #endif /* CONFIG_SMP */
 
-#define set_rmb(var, value) do { (void)xchg(&var, value); } while (0)
-#define set_mb(var, value) set_rmb(var, value)
+#define set_mb(var, value) do { (void)xchg(&var, value); } while (0)
 
 /* Interrupt Control */
 #ifndef HARD_CLI
index a6d735a1310e32aa6a31a1dd453cd86fcff34a5e..404022765fc779effd65235d71e1c294b46c31ab 100644 (file)
@@ -18,7 +18,6 @@
 #undef  MAX_HWIFS
 #define MAX_HWIFS      2
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #define __ide_insl(data_reg, buffer, wcount) \
index 55149cf933c26bb8c61cbb4d760576ed3cedf0ef..ac7eb210b941edfbd69bbde7d4f4b45cc34e8289 100644 (file)
@@ -24,7 +24,6 @@
 # endif
 #endif
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #define __ide_insl(data_reg, buffer, wcount) \
index 0de2481fd990dcb247e42488be480c8259b40a84..a34ddfafd56195bae8db73dfa08f987de2a73ed2 100644 (file)
@@ -66,8 +66,7 @@ static inline int irqs_disabled (void)
 #define rmb()                  mb ()
 #define wmb()                  mb ()
 #define read_barrier_depends() ((void)0)
-#define set_rmb(var, value)    do { xchg (&var, value); } while (0)
-#define set_mb(var, value)     set_rmb (var, value)
+#define set_mb(var, value)     do { xchg (&var, value); } while (0)
 
 #define smp_mb()       mb ()
 #define smp_rmb()      rmb ()
index 125179adf0440976fc4face93804ebff7800c79a..723493e6c8510849d136b1e7fba5eeb65d0d3b50 100644 (file)
@@ -81,11 +81,7 @@ int __acpi_release_global_lock(unsigned int *lock);
         :"=r"(n_hi), "=r"(n_lo)     \
         :"0"(n_hi), "1"(n_lo))
 
-#ifdef CONFIG_X86_IO_APIC
-extern void check_acpi_pci(void);
-#else
-static inline void check_acpi_pci(void) { }
-#endif
+extern void early_quirks(void);
 
 #ifdef CONFIG_ACPI
 extern int acpi_lapic;
index 53cb96b68a62bcb1f040e78381e9e9e562cbb0f8..66ba7987184ae1dfae314010a321a4908b4b4e55 100644 (file)
@@ -6,6 +6,7 @@
  */
 #include <linux/types.h>
 #include <linux/sched.h>
+#include <asm/user32.h>
 
 #define COMPAT_USER_HZ 100
 
@@ -180,6 +181,11 @@ struct compat_shmid64_ds {
        compat_ulong_t __unused5;
 };
 
+/*
+ * The type of struct elf_prstatus.pr_reg in compatible core dumps.
+ */
+typedef struct user_regs_struct32 compat_elf_gregset_t;
+
 /*
  * A pointer passed in from user mode. This should not
  * be used for syscall parameters, just declare them
index ac991b5ca0fd501c0b294963031ca505016dbb9e..7d9c938e69fd296d1e493565fc2e4dca0265b291 100644 (file)
@@ -20,6 +20,16 @@ extern struct desc_struct cpu_gdt_table[GDT_ENTRIES];
 #define load_LDT_desc() asm volatile("lldt %w0"::"r" (GDT_ENTRY_LDT*8))
 #define clear_LDT()  asm volatile("lldt %w0"::"r" (0))
 
+static inline unsigned long __store_tr(void)
+{
+       unsigned long tr;
+
+       asm volatile ("str %w0":"=r" (tr));
+       return tr;
+}
+
+#define store_tr(tr) (tr) = __store_tr()
+
 /*
  * This is the ldt that every process will get unless we need
  * something other than this.
@@ -31,6 +41,16 @@ extern struct desc_ptr cpu_gdt_descr[];
 /* the cpu gdt accessor */
 #define cpu_gdt(_cpu) ((struct desc_struct *)cpu_gdt_descr[_cpu].address)
 
+static inline void load_gdt(const struct desc_ptr *ptr)
+{
+       asm volatile("lgdt %w0"::"m" (*ptr));
+}
+
+static inline void store_gdt(struct desc_ptr *ptr)
+{
+       asm("sgdt %w0":"=m" (*ptr));
+}
+
 static inline void _set_gate(void *adr, unsigned type, unsigned long func, unsigned dpl, unsigned ist)  
 {
        struct gate_struct s;   
@@ -71,6 +91,16 @@ static inline void set_system_gate_ist(int nr, void *func, unsigned ist)
        _set_gate(&idt_table[nr], GATE_INTERRUPT, (unsigned long) func, 3, ist);
 }
 
+static inline void load_idt(const struct desc_ptr *ptr)
+{
+       asm volatile("lidt %w0"::"m" (*ptr));
+}
+
+static inline void store_idt(struct desc_ptr *dtr)
+{
+       asm("sidt %w0":"=m" (*dtr));
+}
+
 static inline void set_tssldt_descriptor(void *ptr, unsigned long tss, unsigned type, 
                                         unsigned size) 
 { 
index d94898831bac6d2e66ecaaa75972789841048bd5..771af336734fc73aab39d03a8414f54cfadaad71 100644 (file)
@@ -38,6 +38,8 @@ extern int geode_get_dev_base(unsigned int dev);
 #define MSR_LBAR_ACPI          0x5140000E
 #define MSR_LBAR_PMS           0x5140000F
 
+#define MSR_DIVIL_SOFT_RESET   0x51400017
+
 #define MSR_PIC_YSEL_LOW       0x51400020
 #define MSR_PIC_YSEL_HIGH      0x51400021
 #define MSR_PIC_ZSEL_LOW       0x51400022
index d4ab6db050b6cc0646e564a1a29039853bde249e..b1f3c1ea55d959687f278b0107b63a96e9c69e8e 100644 (file)
@@ -3,12 +3,6 @@
 
 #ifdef CONFIG_HPET_TIMER
 
-/*
- * Documentation on HPET can be found at:
- *      http://www.intel.com/ial/home/sp/pcmmspec.htm
- *      ftp://download.intel.com/ial/home/sp/mmts098.pdf
- */
-
 #define HPET_MMAP_SIZE         1024
 
 #define HPET_ID                        0x000
@@ -64,6 +58,7 @@
 /* hpet memory map physical address */
 extern unsigned long hpet_address;
 extern unsigned long force_hpet_address;
+extern int hpet_force_user;
 extern int is_hpet_enabled(void);
 extern int hpet_enable(void);
 extern unsigned long hpet_readl(unsigned long a);
index e7817a3d6578009f29d750884010933266ca5f3c..42130adf9c7c36ce71a0e1d71da21b089974992a 100644 (file)
@@ -62,7 +62,6 @@ static __inline__ unsigned long ide_default_io_base(int index)
        }
 }
 
-#define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
 #ifdef CONFIG_BLK_DEV_IDEPCI
index d9f2e54324d508729e88c2195034937fc2e185b9..e2c13675ee4e8c84504e6a72a7cffaa8c9ae8b4b 100644 (file)
@@ -133,4 +133,6 @@ void enable_NMI_through_LVT0 (void * dummy);
 
 extern spinlock_t i8259A_lock;
 
+extern int timer_over_8254;
+
 #endif
index a7c75ea408a8072ed35aca77bf9be85b2ef525e5..6d011bd6067d8a0f60a10d4874576b98c64e9d7f 100644 (file)
@@ -119,7 +119,7 @@ static inline void send_IPI_mask_sequence(cpumask_t mask, int vector)
         */
        local_irq_save(flags);
        for_each_cpu_mask(query_cpu, mask) {
-               __send_IPI_dest_field(x86_cpu_to_apicid[query_cpu],
+               __send_IPI_dest_field(per_cpu(x86_cpu_to_apicid, query_cpu),
                                      vector, APIC_DEST_PHYSICAL);
        }
        local_irq_restore(flags);
index 36f310632c49a8bdc174f04a70c92841f7276f79..aca9c96e8e6b04308fcf10ecd817a046b853de39 100644 (file)
@@ -45,4 +45,7 @@ unsigned int do_IRQ(struct pt_regs *regs);
 void init_IRQ(void);
 void __init native_init_IRQ(void);
 
+/* Interrupt vector management */
+extern DECLARE_BITMAP(used_vectors, NR_VECTORS);
+
 #endif /* _ASM_IRQ_H */
index a02eb2991349a699c74635ef6c9cd2ee2b87cf0d..a4944732be04d9fa1a75d66ab5799f8f96be6eda 100644 (file)
 #define MSR_P6_EVNTSEL0                        0x00000186
 #define MSR_P6_EVNTSEL1                        0x00000187
 
-/* K7/K8 MSRs. Not complete. See the architecture manual for a more
+/* AMD64 MSRs. Not complete. See the architecture manual for a more
    complete list. */
+
+#define MSR_AMD64_IBSFETCHCTL          0xc0011030
+#define MSR_AMD64_IBSFETCHLINAD                0xc0011031
+#define MSR_AMD64_IBSFETCHPHYSAD       0xc0011032
+#define MSR_AMD64_IBSOPCTL             0xc0011033
+#define MSR_AMD64_IBSOPRIP             0xc0011034
+#define MSR_AMD64_IBSOPDATA            0xc0011035
+#define MSR_AMD64_IBSOPDATA2           0xc0011036
+#define MSR_AMD64_IBSOPDATA3           0xc0011037
+#define MSR_AMD64_IBSDCLINAD           0xc0011038
+#define MSR_AMD64_IBSDCPHYSAD          0xc0011039
+#define MSR_AMD64_IBSCTL               0xc001103a
+
+/* K8 MSRs */
+#define MSR_K8_TOP_MEM1                        0xc001001a
+#define MSR_K8_TOP_MEM2                        0xc001001d
+#define MSR_K8_SYSCFG                  0xc0010010
+#define MSR_K8_HWCR                    0xc0010015
+#define MSR_K8_ENABLE_C1E              0xc0010055
+#define K8_MTRRFIXRANGE_DRAM_ENABLE    0x00040000 /* MtrrFixDramEn bit    */
+#define K8_MTRRFIXRANGE_DRAM_MODIFY    0x00080000 /* MtrrFixDramModEn bit */
+#define K8_MTRR_RDMEM_WRMEM_MASK       0x18181818 /* Mask: RdMem|WrMem    */
+
+/* K7 MSRs */
 #define MSR_K7_EVNTSEL0                        0xc0010000
 #define MSR_K7_PERFCTR0                        0xc0010004
 #define MSR_K7_EVNTSEL1                        0xc0010001
 #define MSR_K7_PERFCTR2                        0xc0010006
 #define MSR_K7_EVNTSEL3                        0xc0010003
 #define MSR_K7_PERFCTR3                        0xc0010007
-#define MSR_K8_TOP_MEM1                        0xc001001a
 #define MSR_K7_CLK_CTL                 0xc001001b
-#define MSR_K8_TOP_MEM2                        0xc001001d
-#define MSR_K8_SYSCFG                  0xc0010010
-
-#define K8_MTRRFIXRANGE_DRAM_ENABLE    0x00040000 /* MtrrFixDramEn bit    */
-#define K8_MTRRFIXRANGE_DRAM_MODIFY    0x00080000 /* MtrrFixDramModEn bit */
-#define K8_MTRR_RDMEM_WRMEM_MASK       0x18181818 /* Mask: RdMem|WrMem    */
-
 #define MSR_K7_HWCR                    0xc0010015
-#define MSR_K8_HWCR                    0xc0010015
 #define MSR_K7_FID_VID_CTL             0xc0010041
 #define MSR_K7_FID_VID_STATUS          0xc0010042
-#define MSR_K8_ENABLE_C1E              0xc0010055
 
 /* K6 MSRs */
 #define MSR_K6_EFER                    0xc0000080
index 83800e7496eef6767c0a6875b6da9b4ef1e56855..13976b0868376d13f2fa1ad58936948f5a05fab9 100644 (file)
@@ -79,6 +79,7 @@ struct cpuinfo_x86 {
        unsigned char booted_cores;     /* number of cores as seen by OS */
        __u8 phys_proc_id;              /* Physical processor id. */
        __u8 cpu_core_id;               /* Core id */
+       __u8 cpu_index;                 /* index into per_cpu list */
 #endif
 } __attribute__((__aligned__(SMP_CACHE_BYTES)));
 
@@ -103,14 +104,19 @@ extern struct tss_struct doublefault_tss;
 DECLARE_PER_CPU(struct tss_struct, init_tss);
 
 #ifdef CONFIG_SMP
-extern struct cpuinfo_x86 cpu_data[];
-#define current_cpu_data cpu_data[smp_processor_id()]
+DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info);
+#define cpu_data(cpu)          per_cpu(cpu_info, cpu)
+#define current_cpu_data       cpu_data(smp_processor_id())
 #else
-#define cpu_data (&boot_cpu_data)
-#define current_cpu_data boot_cpu_data
+#define cpu_data(cpu)          boot_cpu_data
+#define current_cpu_data       boot_cpu_data
 #endif
 
-extern int cpu_llc_id[NR_CPUS];
+/*
+ * the following now lives in the per cpu area:
+ * extern      int cpu_llc_id[NR_CPUS];
+ */
+DECLARE_PER_CPU(u8, cpu_llc_id);
 extern char ignore_fpu_irq;
 
 void __init cpu_detect(struct cpuinfo_x86 *c);
index f422becbddd9d3f91deb6da6f81a36a004744652..e4f19970a82b8bd9ac6de525dccbe8b662c7d3ab 100644 (file)
@@ -74,6 +74,7 @@ struct cpuinfo_x86 {
        __u8    booted_cores;   /* number of cores as seen by OS */
        __u8    phys_proc_id;   /* Physical Processor id. */
        __u8    cpu_core_id;    /* Core id. */
+       __u8    cpu_index;      /* index into per_cpu list */
 #endif
 } ____cacheline_aligned;
 
@@ -88,11 +89,12 @@ struct cpuinfo_x86 {
 #define X86_VENDOR_UNKNOWN 0xff
 
 #ifdef CONFIG_SMP
-extern struct cpuinfo_x86 cpu_data[];
-#define current_cpu_data cpu_data[smp_processor_id()]
+DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info);
+#define cpu_data(cpu)          per_cpu(cpu_info, cpu)
+#define current_cpu_data       cpu_data(smp_processor_id())
 #else
-#define cpu_data (&boot_cpu_data)
-#define current_cpu_data boot_cpu_data
+#define cpu_data(cpu)          boot_cpu_data
+#define current_cpu_data       boot_cpu_data
 #endif
 
 extern char ignore_irq13;
@@ -390,12 +392,6 @@ static inline void sync_core(void)
        asm volatile("cpuid" : "=a" (tmp) : "0" (1) : "ebx","ecx","edx","memory");
 } 
 
-#define ARCH_HAS_PREFETCH
-static inline void prefetch(void *x) 
-{ 
-       asm volatile("prefetcht0 (%0)" :: "r" (x));
-} 
-
 #define ARCH_HAS_PREFETCHW 1
 static inline void prefetchw(void *x) 
 { 
index c44a3a93b5a49f06c686eed86d508377b0156f49..dabba55f7ed8814543f546bbedebeedae48f4a38 100644 (file)
@@ -83,8 +83,6 @@ extern unsigned tsc_khz;
 extern int reboot_force;
 extern int notsc_setup(char *);
 
-extern int timer_over_8254;
-
 extern int gsi_irq_sharing(int gsi);
 
 extern int force_mwait;
index 6002597b9e12212b8e0986f9b7070d2d0b5ba041..78d063dabe0ae6589dbbe1c0e8613d27058d4b10 100644 (file)
@@ -55,6 +55,8 @@ static inline int v8086_mode(struct pt_regs *regs)
 }
 
 #define instruction_pointer(regs) ((regs)->eip)
+#define frame_pointer(regs) ((regs)->ebp)
+#define stack_pointer(regs) ((regs)->esp)
 #define regs_return_value(regs) ((regs)->eax)
 
 extern unsigned long profile_pc(struct pt_regs *regs);
index 7f166ccb0606786991e931c9995c6dfe9514809b..7bfe61e1b7052c5c1e74b03ae72db585104feb9d 100644 (file)
@@ -40,6 +40,8 @@ struct pt_regs {
 #define user_mode(regs) (!!((regs)->cs & 3))
 #define user_mode_vm(regs) user_mode(regs)
 #define instruction_pointer(regs) ((regs)->rip)
+#define frame_pointer(regs) ((regs)->rbp)
+#define stack_pointer(regs) ((regs)->rsp)
 #define regs_return_value(regs) ((regs)->rax)
 
 extern unsigned long profile_pc(struct pt_regs *regs);
index 1f576a93368fc2bd44d6582f84052bac38e4a62b..7056d86845221c6d224545f7c8642a35c7cd028f 100644 (file)
@@ -39,9 +39,11 @@ extern void lock_ipi_call_lock(void);
 extern void unlock_ipi_call_lock(void);
 
 #define MAX_APICID 256
-extern u8 x86_cpu_to_apicid[];
+extern u8 __initdata x86_cpu_to_apicid_init[];
+extern void *x86_cpu_to_apicid_ptr;
+DECLARE_PER_CPU(u8, x86_cpu_to_apicid);
 
-#define cpu_physical_id(cpu)   x86_cpu_to_apicid[cpu]
+#define cpu_physical_id(cpu)   per_cpu(x86_cpu_to_apicid, cpu)
 
 extern void set_cpu_sibling_map(int cpu);
 
index d30e9b684fdd1730e5306313e9d82d2d3f2a95e2..6f0e0273b6462cf3ad9a4a3a55e4c3091ab91890 100644 (file)
@@ -37,6 +37,8 @@ extern void lock_ipi_call_lock(void);
 extern void unlock_ipi_call_lock(void);
 extern int smp_num_siblings;
 extern void smp_send_reschedule(int cpu);
+extern int smp_call_function_mask(cpumask_t mask, void (*func)(void *),
+                                 void *info, int wait);
 
 /*
  * cpu_sibling_map and cpu_core_map now live
@@ -47,7 +49,7 @@ extern void smp_send_reschedule(int cpu);
  */
 DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
 DECLARE_PER_CPU(cpumask_t, cpu_core_map);
-extern u8 cpu_llc_id[NR_CPUS];
+DECLARE_PER_CPU(u8, cpu_llc_id);
 
 #define SMP_TRAMPOLINE_BASE 0x6000
 
@@ -84,7 +86,9 @@ static inline int hard_smp_processor_id(void)
  * Some lowlevel functions might want to know about
  * the real APIC ID <-> CPU # mapping.
  */
-extern u8 x86_cpu_to_apicid[NR_CPUS];  /* physical ID */
+extern u8 __initdata x86_cpu_to_apicid_init[];
+extern void *x86_cpu_to_apicid_ptr;
+DECLARE_PER_CPU(u8, x86_cpu_to_apicid);        /* physical ID */
 extern u8 bios_cpu_apicid[];
 
 static inline int cpu_present_to_apicid(int mps_cpu)
@@ -115,8 +119,9 @@ static __inline int logical_smp_processor_id(void)
 }
 
 #ifdef CONFIG_SMP
-#define cpu_physical_id(cpu)           x86_cpu_to_apicid[cpu]
+#define cpu_physical_id(cpu)           per_cpu(x86_cpu_to_apicid, cpu)
 #else
+extern unsigned int boot_cpu_id;
 #define cpu_physical_id(cpu)           boot_cpu_id
 #endif /* !CONFIG_SMP */
 #endif
index db6283eb5e46d6f53ff24d33b0a5ec091e5a9fd0..ef8468883bac59a4451562ce1fc190e81ea85bc6 100644 (file)
@@ -315,5 +315,6 @@ extern unsigned long arch_align_stack(unsigned long sp);
 extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
 
 void default_idle(void);
+void __show_registers(struct pt_regs *, int all);
 
 #endif
index ae1074603c4b1e4508059fc40d08ef83d1ecb99a..9040f5a612780ff4421838bc152d29cab0be4f72 100644 (file)
@@ -28,8 +28,8 @@
 #define _ASM_I386_TOPOLOGY_H
 
 #ifdef CONFIG_X86_HT
-#define topology_physical_package_id(cpu)      (cpu_data[cpu].phys_proc_id)
-#define topology_core_id(cpu)                  (cpu_data[cpu].cpu_core_id)
+#define topology_physical_package_id(cpu)      (cpu_data(cpu).phys_proc_id)
+#define topology_core_id(cpu)                  (cpu_data(cpu).cpu_core_id)
 #define topology_core_siblings(cpu)            (per_cpu(cpu_core_map, cpu))
 #define topology_thread_siblings(cpu)          (per_cpu(cpu_sibling_map, cpu))
 #endif
index c0c93d744673664b1bcfeaa0602d8b3e3f7308d4..a718dda037e097480bf7f49d4d2f566fb530582f 100644 (file)
@@ -56,8 +56,8 @@ extern int __node_distance(int, int);
 #endif
 
 #ifdef CONFIG_SMP
-#define topology_physical_package_id(cpu)      (cpu_data[cpu].phys_proc_id)
-#define topology_core_id(cpu)                  (cpu_data[cpu].cpu_core_id)
+#define topology_physical_package_id(cpu)      (cpu_data(cpu).phys_proc_id)
+#define topology_core_id(cpu)                  (cpu_data(cpu).cpu_core_id)
 #define topology_core_siblings(cpu)            (per_cpu(cpu_core_map, cpu))
 #define topology_thread_siblings(cpu)          (per_cpu(cpu_sibling_map, cpu))
 #define mc_capable()                   (boot_cpu_data.x86_max_cores > 1)
index 2b641b176e7f2c51708d0d99b91f5daf41be2549..c6d3e22c0624235e4d1db94d852f6baf5f11d2c7 100644 (file)
@@ -2,7 +2,7 @@
  * -- <linux/cdrom.h>
  * General header file for linux CD-ROM drivers 
  * Copyright (C) 1992         David Giller, rafetmad@oxy.edu
- *               1994, 1995   Eberhard Moenkeberg, emoenke@gwdg.de
+ *               1994, 1995   Eberhard Mönkeberg, emoenke@gwdg.de
  *               1996         David van Leeuwen, david@tm.tno.nl
  *               1997, 1998   Erik Andersen, andersee@debian.org
  *               1998-2002    Jens Axboe, axboe@suse.de
@@ -76,7 +76,7 @@
                                            (struct cdrom_multisession) */
 #define CDROM_GET_MCN          0x5311 /* Obtain the "Universal Product Code" 
                                            if available (struct cdrom_mcn) */
-#define CDROM_GET_UPC          CDROM_GET_MCN  /* This one is depricated, 
+#define CDROM_GET_UPC          CDROM_GET_MCN  /* This one is deprecated, 
                                           but here anyway for compatibility */
 #define CDROMRESET             0x5312 /* hard-reset the drive */
 #define CDROMVOLREAD           0x5313 /* Get the drive's volume setting 
@@ -506,7 +506,7 @@ struct cdrom_generic_command
 #define GPMODE_TO_PROTECT_PAGE         0x1d
 #define GPMODE_CAPABILITIES_PAGE       0x2a
 #define GPMODE_ALL_PAGES               0x3f
-/* Not in Mt. Fuji, but in ATAPI 2.6 -- depricated now in favor
+/* Not in Mt. Fuji, but in ATAPI 2.6 -- deprecated now in favor
  * of MODE_SENSE_POWER_PAGE */
 #define GPMODE_CDROM_PAGE              0x0d
 
index fc32694287e21cee1b2508f0456bbd29552479a1..f3110ebe894a090254ac4b48f0d9ef98205c5eaf 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (c) 2005 Herbert Xu <herbert@gondor.apana.org.au>
  *
  * Portions derived from Cryptoapi, by Alexander Kjeldaas <astor@fast.no>
- * and Nettle, by Niels Möller.
+ * and Nettle, by Niels Möller.
  * 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the Free
index 499f5373e2134d7a1a0fa8b9a84bddc3ad23b26b..37c66d1254b5383795f3f559a7a232325dd16c13 100644 (file)
@@ -183,11 +183,14 @@ int dm_resume(struct mapped_device *md);
  */
 uint32_t dm_get_event_nr(struct mapped_device *md);
 int dm_wait_event(struct mapped_device *md, int event_nr);
+uint32_t dm_next_uevent_seq(struct mapped_device *md);
+void dm_uevent_add(struct mapped_device *md, struct list_head *elist);
 
 /*
  * Info functions.
  */
 const char *dm_device_name(struct mapped_device *md);
+int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid);
 struct gendisk *dm_disk(struct mapped_device *md);
 int dm_suspended(struct mapped_device *md);
 int dm_noflush_suspending(struct dm_target *ti);
index b9348610782181429e24bc682627612d1bae7184..523281c5b7f55fa964534b4d38061b6c7b172d8a 100644 (file)
@@ -131,6 +131,7 @@ struct dm_ioctl {
        char name[DM_NAME_LEN]; /* device name */
        char uuid[DM_UUID_LEN]; /* unique identifier for
                                 * the block device */
+       char data[7];           /* padding or data */
 };
 
 /*
@@ -285,9 +286,9 @@ typedef char ioctl_struct[308];
 #define DM_DEV_SET_GEOMETRY    _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
 
 #define DM_VERSION_MAJOR       4
-#define DM_VERSION_MINOR       11
+#define DM_VERSION_MINOR       12
 #define DM_VERSION_PATCHLEVEL  0
-#define DM_VERSION_EXTRA       "-ioctl (2006-10-12)"
+#define DM_VERSION_EXTRA       "-ioctl (2007-10-02)"
 
 /* Status bits */
 #define DM_READONLY_FLAG       (1 << 0) /* In/Out */
index 1657e995f72c18d21e2234ce9a2c74bf1fdf1c22..1bcce660cf033b5745c9a55d6e2dd6ef6f0e8dc9 100644 (file)
@@ -1536,7 +1536,7 @@ static inline int break_lease(struct inode *inode, unsigned int mode)
 
 extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
                       struct file *filp);
-extern long do_sys_open(int fdf, const char __user *filename, int flags,
+extern long do_sys_open(int dfd, const char __user *filename, int flags,
                        int mode);
 extern struct file *filp_open(const char *, int, int);
 extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
index 19db0a4ae447dda881fb396cc45a179893a6f89e..2e4b8dd03cfe79413f9a5a2d75b3754863781a12 100644 (file)
@@ -192,22 +192,20 @@ typedef unsigned char     byte;   /* used everywhere */
 struct hwif_s;
 typedef int (ide_ack_intr_t)(struct hwif_s *);
 
-#ifndef NO_DMA
-#define NO_DMA  255
-#endif
-
 /*
  * hwif_chipset_t is used to keep track of the specific hardware
  * chipset used by each IDE interface, if known.
  */
-typedef enum { ide_unknown,    ide_generic,    ide_pci,
+enum {         ide_unknown,    ide_generic,    ide_pci,
                ide_cmd640,     ide_dtc2278,    ide_ali14xx,
                ide_qd65xx,     ide_umc8672,    ide_ht6560b,
                ide_rz1000,     ide_trm290,
                ide_cmd646,     ide_cy82c693,   ide_4drives,
                ide_pmac,       ide_etrax100,   ide_acorn,
                ide_au1xxx, ide_forced
-} hwif_chipset_t;
+};
+
+typedef u8 hwif_chipset_t;
 
 /*
  * Structure to hold all information about the location of this port
@@ -215,22 +213,16 @@ typedef enum {    ide_unknown,    ide_generic,    ide_pci,
 typedef struct hw_regs_s {
        unsigned long   io_ports[IDE_NR_PORTS]; /* task file registers */
        int             irq;                    /* our irq number */
-       int             dma;                    /* our dma entry */
        ide_ack_intr_t  *ack_intr;              /* acknowledge interrupt */
        hwif_chipset_t  chipset;
        struct device   *dev;
 } hw_regs_t;
 
-/*
- * Register new hardware with ide
- */
-int ide_register_hw(hw_regs_t *, int, struct hwif_s **);
-int ide_register_hw_with_fixup(hw_regs_t *, int, struct hwif_s **,
-                              void (*)(struct hwif_s *));
+struct hwif_s * ide_find_port(unsigned long);
+
+int ide_register_hw(hw_regs_t *, void (*)(struct hwif_s *), int,
+                   struct hwif_s **);
 
-/*
- * Set up hw_regs_t structure before calling ide_register_hw (optional)
- */
 void ide_setup_ports(  hw_regs_t *hw,
                        unsigned long base,
                        int *offsets,
@@ -268,11 +260,7 @@ static inline void ide_std_init_ports(hw_regs_t *hw,
 # define ide_init_default_irq(base)    (0)
 #endif
 
-/*
- * ide_init_hwif_ports() is OBSOLETE and will be removed in 2.7 series.
- * New ports shouldn't define IDE_ARCH_OBSOLETE_INIT in <asm/ide.h>.
- */
-#ifdef IDE_ARCH_OBSOLETE_INIT
+#ifdef CONFIG_IDE_ARCH_OBSOLETE_INIT
 static inline void ide_init_hwif_ports(hw_regs_t *hw,
                                       unsigned long io_addr,
                                       unsigned long ctl_addr,
@@ -302,7 +290,7 @@ static inline void ide_init_hwif_ports(hw_regs_t *hw,
        if (io_addr || ctl_addr)
                printk(KERN_WARNING "%s: must not be called\n", __FUNCTION__);
 }
-#endif /* IDE_ARCH_OBSOLETE_INIT */
+#endif /* CONFIG_IDE_ARCH_OBSOLETE_INIT */
 
 /* Currently only m68k, apus and m8xx need it */
 #ifndef IDE_ARCH_ACK_INTR
@@ -363,7 +351,6 @@ typedef union {
  * ATA DATA Register Special.
  * ATA NSECTOR Count Register().
  * ATAPI Byte Count Register.
- * Channel index ordering pairs.
  */
 typedef union {
        unsigned all                    :16;
@@ -378,7 +365,7 @@ typedef union {
 #error "Please fix <asm/byteorder.h>"
 #endif
        } b;
-} ata_nsector_t, ata_data_t, atapi_bcount_t, ata_index_t;
+} ata_nsector_t, ata_data_t, atapi_bcount_t;
 
 /*
  * ATA-IDE Select Register, aka Device-Head
@@ -657,7 +644,7 @@ typedef struct ide_drive_s {
     ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali14xx))
 #define IDE_CHIPSET_IS_PCI(c)  ((IDE_CHIPSET_PCI_MASK >> (c)) & 1)
 
-struct ide_pci_device_s;
+struct ide_port_info;
 
 typedef struct hwif_s {
        struct hwif_s *next;            /* for linked-list in ide_hwgroup_t */
@@ -672,7 +659,6 @@ typedef struct hwif_s {
        unsigned long   sata_scr[SATA_NR_PORTS];
        unsigned long   sata_misc[SATA_NR_PORTS];
 
-       hw_regs_t       hw;             /* Hardware info */
        ide_drive_t     drives[MAX_DRIVES];     /* drive info */
 
        u8 major;       /* our major number */
@@ -694,7 +680,9 @@ typedef struct hwif_s {
        hwif_chipset_t chipset; /* sub-module for tuning.. */
 
        struct pci_dev  *pci_dev;       /* for pci chipsets */
-       struct ide_pci_device_s *cds;   /* chipset device struct */
+       const struct ide_port_info *cds;        /* chipset device struct */
+
+       ide_ack_intr_t *ack_intr;
 
        void (*rw_disk)(ide_drive_t *, struct request *);
 
@@ -725,6 +713,8 @@ typedef struct hwif_s {
        u8 (*mdma_filter)(ide_drive_t *);
        u8 (*udma_filter)(ide_drive_t *);
 
+       void (*fixup)(struct hwif_s *);
+
        void (*ata_input_data)(ide_drive_t *, void *, u32);
        void (*ata_output_data)(ide_drive_t *, void *, u32);
 
@@ -841,8 +831,6 @@ typedef struct hwgroup_s {
 
                /* for pci chipsets */
        struct pci_dev *pci_dev;
-               /* chipset device struct */
-       struct ide_pci_device_s *cds;
 
                /* current request */
        struct request *rq;
@@ -1030,36 +1018,16 @@ extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
 int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq,
                             int uptodate, int nr_sectors);
 
-/*
- * This is used on exit from the driver to designate the next irq handler
- * and also to start the safety timer.
- */
 extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry);
 
-/*
- * This is used on exit from the driver to designate the next irq handler
- * and start the safety time safely and atomically from the IRQ handler
- * with respect to the command issue (which it also does)
- */
 extern void ide_execute_command(ide_drive_t *, task_ioreg_t cmd, ide_handler_t *, unsigned int, ide_expiry_t *);
 
 ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8);
 
-/*
- * ide_error() takes action based on the error returned by the controller.
- * The caller should return immediately after invoking this.
- *
- * (drive, msg, status)
- */
 ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat);
 
 ide_startstop_t __ide_abort(ide_drive_t *, struct request *);
 
-/*
- * Abort a running command on the controller triggering the abort
- * from a host side, non error situation
- * (drive, msg)
- */
 extern ide_startstop_t ide_abort(ide_drive_t *, const char *);
 
 extern void ide_fix_driveid(struct hd_driveid *);
@@ -1075,15 +1043,8 @@ extern void ide_fixstring(u8 *, const int, const int);
 
 int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long);
 
-/*
- * Start a reset operation for an IDE interface.
- * The caller should return immediately after invoking this.
- */
 extern ide_startstop_t ide_do_reset (ide_drive_t *);
 
-/*
- * This function is intended to be used prior to invoking ide_do_drive_cmd().
- */
 extern void ide_init_drive_cmd (struct request *rq);
 
 /*
@@ -1098,13 +1059,6 @@ typedef enum {
 
 extern int ide_do_drive_cmd(ide_drive_t *, struct request *, ide_action_t);
 
-/*
- * Clean up after success/failure of an explicit drive cmd.
- * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_CMD).
- * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_TASK_MASK).
- *
- * (ide_drive_t *drive, u8 stat, u8 err)
- */
 extern void ide_end_drive_cmd(ide_drive_t *, u8, u8);
 
 /*
@@ -1177,10 +1131,6 @@ extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *);
 
 extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout);
 
-/*
- * ide_stall_queue() can be used by a drive to give excess bandwidth back
- * to the hwgroup by sleeping for timeout jiffies.
- */
 extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout);
 
 extern int ide_spin_wait_hwgroup(ide_drive_t *);
@@ -1200,8 +1150,8 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o
 #define ide_pci_register_driver(d) pci_register_driver(d)
 #endif
 
-void ide_pci_setup_ports(struct pci_dev *, struct ide_pci_device_s *, int, ata_index_t *);
-extern void ide_setup_pci_noise (struct pci_dev *dev, struct ide_pci_device_s *d);
+void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *);
+void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *);
 
 extern void default_hwif_iops(ide_hwif_t *);
 extern void default_hwif_mmiops(ide_hwif_t *);
@@ -1261,6 +1211,14 @@ enum {
        IDE_HFLAG_SERIALIZE             = (1 << 20),
        /* use legacy IRQs */
        IDE_HFLAG_LEGACY_IRQS           = (1 << 21),
+       /* force use of legacy IRQs */
+       IDE_HFLAG_FORCE_LEGACY_IRQS     = (1 << 22),
+       /* limit LBA48 requests to 256 sectors */
+       IDE_HFLAG_RQSIZE_256            = (1 << 23),
+       /* use 32-bit I/O ops */
+       IDE_HFLAG_IO_32BIT              = (1 << 24),
+       /* unmask IRQs */
+       IDE_HFLAG_UNMASK_IRQS           = (1 << 25),
 };
 
 #ifdef CONFIG_BLK_DEV_OFFBOARD
@@ -1269,7 +1227,7 @@ enum {
 # define IDE_HFLAG_OFF_BOARD   0
 #endif
 
-typedef struct ide_pci_device_s {
+struct ide_port_info {
        char                    *name;
        unsigned int            (*init_chipset)(struct pci_dev *, const char *);
        void                    (*init_iops)(ide_hwif_t *);
@@ -1277,17 +1235,17 @@ typedef struct ide_pci_device_s {
        void                    (*init_dma)(ide_hwif_t *, unsigned long);
        void                    (*fixup)(ide_hwif_t *);
        ide_pci_enablebit_t     enablebits[2];
+       hwif_chipset_t          chipset;
        unsigned int            extra;
-       struct ide_pci_device_s *next;
        u32                     host_flags;
        u8                      pio_mask;
        u8                      swdma_mask;
        u8                      mwdma_mask;
        u8                      udma_mask;
-} ide_pci_device_t;
+};
 
-extern int ide_setup_pci_device(struct pci_dev *, ide_pci_device_t *);
-extern int ide_setup_pci_devices(struct pci_dev *, struct pci_dev *, ide_pci_device_t *);
+int ide_setup_pci_device(struct pci_dev *, const struct ide_port_info *);
+int ide_setup_pci_devices(struct pci_dev *, struct pci_dev *, const struct ide_port_info *);
 
 void ide_map_sg(ide_drive_t *, struct request *);
 void ide_init_sg_cmd(ide_drive_t *, struct request *);
@@ -1370,8 +1328,7 @@ void ide_unregister_region(struct gendisk *);
 
 void ide_undecoded_slave(ide_hwif_t *);
 
-int probe_hwif_init_with_fixup(ide_hwif_t *, void (*)(ide_hwif_t *));
-extern int probe_hwif_init(ide_hwif_t *);
+int ide_device_add(u8 idx[4]);
 
 static inline void *ide_get_hwifdata (ide_hwif_t * hwif)
 {
index efa292a52e7e56ad8c315c3824c87fa98dc50cfa..56ae438ae5105033b55a9576cb77d3f291cd9f40 100644 (file)
@@ -118,7 +118,7 @@ struct ipmi_smi_handlers
        /* Enable/disable firmware maintenance mode.  Note that this
           is *not* the modes defined, this is simply an on/off
           setting.  The message handler does the mode handling.  Note
-          that this is called from interupt context, so it cannot
+          that this is called from interrupt context, so it cannot
           block. */
        void (*set_maintenance_mode)(void *send_info, int enable);
 
index c5164c257f71aa17ec51dda414a1921053d8ac5d..e82a6ebc725d7b18a76fdccc9d58853b42a8bdba 100644 (file)
@@ -160,6 +160,12 @@ struct nfs_inode {
        /* Open contexts for shared mmap writes */
        struct list_head        open_files;
 
+       /* Number of in-flight sillydelete RPC calls */
+       atomic_t                silly_count;
+       /* List of deferred sillydelete requests */
+       struct hlist_head       silly_list;
+       wait_queue_head_t       waitqueue;
+
 #ifdef CONFIG_NFS_V4
        struct nfs4_cached_acl  *nfs4_acl;
         /* NFSv4 state */
@@ -394,6 +400,8 @@ extern void nfs_release_automount_timer(void);
  */
 extern int  nfs_async_unlink(struct inode *dir, struct dentry *dentry);
 extern void nfs_complete_unlink(struct dentry *dentry, struct inode *);
+extern void nfs_block_sillyrename(struct dentry *dentry);
+extern void nfs_unblock_sillyrename(struct dentry *dentry);
 
 /*
  * linux/fs/nfs/write.c
index 1adfe668d031ff62485cd2fb5071bdfa85b7b952..af7c36a5a521e8048238b30521470b0b0b73e27c 100644 (file)
        
 */
 
-/*
- *     These cannot be do{}while(0) macros. See the mental gymnastics in
- *     the loop macro.
- */
 #ifndef ARCH_HAS_PREFETCH
-static inline void prefetch(const void *x) {;}
+#define prefetch(x) __builtin_prefetch(x)
 #endif
 
 #ifndef ARCH_HAS_PREFETCHW
-static inline void prefetchw(const void *x) {;}
+#define prefetchw(x) __builtin_prefetch(x,1)
 #endif
 
 #ifndef ARCH_HAS_SPINLOCK_PREFETCH
index ff3f857f69571c3c6e6372322cb55f58ad5fd619..ac050830a873b044ba1d23144c88fb99a975c934 100644 (file)
@@ -832,9 +832,11 @@ struct request_sock;
  *     incoming sk_buff @skb has been associated with a particular socket, @sk.
  *     @sk contains the sock (not socket) associated with the incoming sk_buff.
  *     @skb contains the incoming network data.
- * @socket_getpeersec:
+ * @socket_getpeersec_stream:
  *     This hook allows the security module to provide peer socket security
- *     state to userspace via getsockopt SO_GETPEERSEC.
+ *     state for unix or connected tcp sockets to userspace via getsockopt
+ *     SO_GETPEERSEC.  For tcp sockets this can be meaningful if the
+ *     socket is associated with an ipsec SA.
  *     @sock is the local socket.
  *     @optval userspace memory where the security state is to be copied.
  *     @optlen userspace int where the module should copy the actual length
@@ -843,6 +845,17 @@ struct request_sock;
  *     by the caller.
  *     Return 0 if all is well, otherwise, typical getsockopt return
  *     values.
+ * @socket_getpeersec_dgram:
+ *     This hook allows the security module to provide peer socket security
+ *     state for udp sockets on a per-packet basis to userspace via
+ *     getsockopt SO_GETPEERSEC.  The application must first have indicated
+ *     the IP_PASSSEC option via getsockopt.  It can then retrieve the
+ *     security state returned by this hook for a packet via the SCM_SECURITY
+ *     ancillary message type.
+ *     @skb is the skbuff for the packet being queried
+ *     @secdata is a pointer to a buffer in which to copy the security data
+ *     @seclen is the maximum length for @secdata
+ *     Return 0 on success, error on failure.
  * @sk_alloc_security:
  *      Allocate and attach a security structure to the sk->sk_security field,
  *      which is used to copy security attributes between local stream sockets.
index cf80c1af5854a4d7c9351bb8922fd3892884a887..32c385dd9e06a94ab6cf77988537d02cc47835ad 100644 (file)
@@ -56,7 +56,7 @@
 
 /* Receive queue sizes */
 /* Minimum of credit that the peer should hold.
- * If the peer has less credits than 9 frames, we will explicitely send
+ * If the peer has less credits than 9 frames, we will explicitly send
  * him some credits (through irttp_give_credit() and a specific frame).
  * Note that when we give credits it's likely that it won't be sent in
  * this LAP window, but in the next one. So, we make sure that the peer
@@ -66,7 +66,7 @@
 /* This is the default maximum number of credits held by the peer, so the
  * default maximum number of frames he can send us before needing flow
  * control answer from us (this may be negociated differently at TSAP setup).
- * We want to minimise the number of times we have to explicitely send some
+ * We want to minimise the number of times we have to explicitly send some
  * credit to the peer, hoping we can piggyback it on the return data. In
  * particular, it doesn't make sense for us to send credit more than once
  * per LAP window.
index 0dd0e7a1f6329fab9bfecb88f1363530459281e8..f605a969ea6141281891bb007edc41938c63e3f1 100644 (file)
 /*
  * This is one of the first .c files built. Error out early if we have compiler
  * trouble.
- *
- * Versions of gcc older than that listed below may actually compile and link
- * okay, but the end product can have subtle run time bugs.  To avoid associated
- * bogus bug reports, we flatly refuse to compile with a gcc that is known to be
- * too old from the very beginning.
  */
-#if (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 2)
-#error Sorry, your GCC is too old. It builds incorrect kernels.
-#endif
 
 #if __GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 0
 #warning gcc-4.1.0 is known to miscompile the kernel.  A different compiler version is recommended.
@@ -288,7 +280,7 @@ static int __init unknown_bootoption(char *param, char *val)
                return 0;
 
        /*
-        * Preemptive maintenance for "why didn't my mispelled command
+        * Preemptive maintenance for "why didn't my misspelled command
         * line work?"
         */
        if (strchr(param, '.') && (!val || strchr(param, '.') < val)) {
index 05c3e6df85973e44bba5127c0805a7fc64a7240e..79f017e09fbdf89cbcad81a07fd00c80fd8a8182 100644 (file)
@@ -9,8 +9,9 @@ obj-y     = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
            rcupdate.o extable.o params.o posix-timers.o \
            kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
            hrtimer.o rwsem.o latency.o nsproxy.o srcu.o \
-           utsname.o sysctl_check.o notifier.o
+           utsname.o notifier.o
 
+obj-$(CONFIG_SYSCTL) += sysctl_check.o
 obj-$(CONFIG_STACKTRACE) += stacktrace.o
 obj-y += time/
 obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o
index b2b2c2b0a49bc845f0ba277f96b8db2d1d2f6803..b6d2ff7e37ee280d266ecc98ed63cb2d8f48d0f9 100644 (file)
@@ -412,7 +412,7 @@ static int hrtimer_reprogram(struct hrtimer *timer,
        /*
         * When the callback is running, we do not reprogram the clock event
         * device. The timer callback is either running on a different CPU or
-        * the callback is executed in the hrtimer_interupt context. The
+        * the callback is executed in the hrtimer_interrupt context. The
         * reprogramming is handled either by the softirq, which called the
         * callback or at the end of the hrtimer_interrupt.
         */
@@ -638,7 +638,7 @@ void __timer_stats_hrtimer_set_start_info(struct hrtimer *timer, void *addr)
 #endif
 
 /*
- * Counterpart to lock_timer_base above:
+ * Counterpart to lock_hrtimer_base above:
  */
 static inline
 void unlock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
index 3886bd8230feac054f873d261d7d81d398c118f2..6f6e03e91595f7f1959a282c5a35697efb02c79d 100644 (file)
@@ -148,7 +148,7 @@ EXPORT_SYMBOL(panic);
  *  'F' - Module has been forcibly loaded.
  *  'S' - SMP with CPUs not designed for SMP.
  *  'R' - User forced a module unload.
- *  'M' - Machine had a machine check experience.
+ *  'M' - System experienced a machine check exception.
  *  'B' - System has hit bad_page.
  *  'U' - Userspace-defined naughtiness.
  *
index ccc95ac07bedbc8cbfed19b06a3eca9848b11723..78039b477d2bd7bbae3ab893763111475ea932a6 100644 (file)
@@ -1005,11 +1005,12 @@ copy_data_pages(struct memory_bitmap *copy_bm, struct memory_bitmap *orig_bm)
        }
        memory_bm_position_reset(orig_bm);
        memory_bm_position_reset(copy_bm);
-       do {
+       for(;;) {
                pfn = memory_bm_next_pfn(orig_bm);
-               if (likely(pfn != BM_END_OF_MAP))
-                       copy_data_page(memory_bm_next_pfn(copy_bm), pfn);
-       } while (pfn != BM_END_OF_MAP);
+               if (unlikely(pfn == BM_END_OF_MAP))
+                       break;
+               copy_data_page(memory_bm_next_pfn(copy_bm), pfn);
+       }
 }
 
 /* Total number of image pages */
index afe76ec2e7feffb1f7a070d3f433b2838dca378a..7581e331b139cfb13a1be3c435735c9535a6b802 100644 (file)
@@ -3310,7 +3310,6 @@ unsigned long long task_sched_runtime(struct task_struct *p)
 /*
  * Account user cpu time to a process.
  * @p: the process that the cpu time gets accounted to
- * @hardirq_offset: the offset to subtract from hardirq_count()
  * @cputime: the cpu time spent in user space since the last update
  */
 void account_user_time(struct task_struct *p, cputime_t cputime)
@@ -5146,7 +5145,7 @@ static int __migrate_task_irq(struct task_struct *p, int src_cpu, int dest_cpu)
 }
 
 /*
- * Figure out where task on dead CPU should go, use force if neccessary.
+ * Figure out where task on dead CPU should go, use force if necessary.
  * NOTE: interrupts should be disabled by the caller
  */
 static void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p)
@@ -5525,7 +5524,7 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
 
        case CPU_ONLINE:
        case CPU_ONLINE_FROZEN:
-               /* Strictly unneccessary, as first user will wake it. */
+               /* Strictly unnecessary, as first user will wake it. */
                wake_up_process(cpu_rq(cpu)->migration_thread);
                break;
 
index 9f360f68aad6b45df2125c558e4d9dc763ae6b9a..354e74bc17c186099b50edd9471b7f6163ce2c62 100644 (file)
@@ -263,7 +263,7 @@ out:
 
        stats->version = TASKSTATS_VERSION;
        /*
-        * Accounting subsytems can also add calls here to modify
+        * Accounting subsystems can also add calls here to modify
         * fields of taskstats.
         */
        return rc;
index fad6ce4f7b57e353bf9b4a9d8c2dca502b4d5938..5205a8dae5bc08c51a4f0f283dd812e2fab25a04 100644 (file)
@@ -4,7 +4,8 @@
 
 #include <linux/kernel.h>
 #include <linux/ctype.h>
-#include <linux/bug.h>
+#include <linux/slab.h>
+#include <linux/module.h>
 
 static const char *skip_sep(const char *cp)
 {
index e0fdfddb406ec3975673f150f46bd3302bc08599..f73e2f8c308f2e3b17e0cd21b5f0ab7131872f08 100644 (file)
@@ -2,7 +2,7 @@
  * lib/kernel_lock.c
  *
  * This is the traditional BKL - big kernel lock. Largely
- * relegated to obsolescense, but used by various less
+ * relegated to obsolescence, but used by various less
  * important (or lazy) subsystems.
  */
 #include <linux/smp_lock.h>
index 2e4eae5b0824400de9f6eeafb5483c3fde8f5b0c..5886147252d0d643598e408b63bf193aa49b5f34 100644 (file)
@@ -126,7 +126,7 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
        else
                subsystem = kobject_name(&kset->kobj);
        if (!subsystem) {
-               pr_debug("unset subsytem caused the event to drop!\n");
+               pr_debug("unset subsystem caused the event to drop!\n");
                return 0;
        }
 
index b1f03b0eb7f13e5318535ef1ef799783803e3acd..c070ec0c15bfeee19c59659a668f7ab920ee77b3 100644 (file)
@@ -37,7 +37,7 @@ config DISCONTIGMEM_MANUAL
          in their physical address spaces, and this option provides
          more efficient handling of these holes.  However, the vast
          majority of hardware has quite flat address spaces, and
-         can have degraded performance from extra overhead that
+         can have degraded performance from the extra overhead that
          this option imposes.
 
          Many NUMA configurations will have this as the only option.
index 034617f8cdb2391c99b6aa615854a1b63403e71b..8b809ecefa39e4b54f4bfbed8830009a9e260e96 100644 (file)
@@ -1017,7 +1017,7 @@ static long region_chg(struct list_head *head, long f, long t)
 
        /* If we are below the current region then a new region is required.
         * Subtle, allocate a new region at the position but make it zero
-        * size such that we can guarentee to record the reservation. */
+        * size such that we can guarantee to record the reservation. */
        if (&rg->link == head || t < rg->from) {
                nrg = kmalloc(sizeof(*nrg), GFP_KERNEL);
                if (!nrg)
index 142683df8755988a4cdf2fde72f8f4323d2f3121..eefd5b68bc42d76768e773a43ae310806c9fa17c 100644 (file)
@@ -2713,7 +2713,7 @@ int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, in
                return 0;
 
        down_read(&mm->mmap_sem);
-       /* ignore errors, just check how much was sucessfully transfered */
+       /* ignore errors, just check how much was successfully transferred */
        while (len) {
                int bytes, ret, offset;
                void *maddr;
index 091b9c6c252973dd1cf5e89ffcf73de1afba173c..1833879f84382324fb835b977dd1c6be8c6cb553 100644 (file)
@@ -121,7 +121,7 @@ int __add_pages(struct zone *zone, unsigned long phys_start_pfn,
                err = __add_section(zone, i << PFN_SECTION_SHIFT);
 
                /*
-                * EEXIST is finally dealed with by ioresource collision
+                * EEXIST is finally dealt with by ioresource collision
                 * check. see add_memory() => register_memory_resource()
                 * Warning will be printed if there is collision.
                 */
index 02d5ec3feabc9a6db30f0933c234038679cba837..a46eb1b4bb661e12a6f752964ad2df190bc763aa 100644 (file)
@@ -299,7 +299,7 @@ EXPORT_SYMBOL(mempool_free_slab);
 
 /*
  * A commonly used alloc and free fn that kmalloc/kfrees the amount of memory
- * specfied by pool_data
+ * specified by pool_data
  */
 void *mempool_kmalloc(gfp_t gfp_mask, void *pool_data)
 {
index 4d6ee03db94608e3bc49e5bffb0d9fdd697ec449..6a207e8d17ea3f74f0e20511fc726fe80ac47fb1 100644 (file)
@@ -706,7 +706,7 @@ move_newpage:
  * The function returns after 10 attempts or if no pages
  * are movable anymore because to has become empty
  * or no retryable pages exist anymore. All pages will be
- * retruned to the LRU or freed.
+ * returned to the LRU or freed.
  *
  * Return: Number of pages not migrated or error code.
  */
index 42fb84e9e8152819701d3da1cd449c30a0466db0..8f09333f78e1d63dbe1a5d24c9ba240ce683dbc6 100644 (file)
@@ -175,7 +175,8 @@ EXPORT_SYMBOL(vfree);
 void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
 {
        /*
-        * kmalloc doesn't like __GFP_HIGHMEM for some reason
+        *  You can't specify __GFP_HIGHMEM with kmalloc() since kmalloc()
+        * returns only a logical address.
         */
        return kmalloc(size, (gfp_mask | __GFP_COMP) & ~__GFP_HIGHMEM);
 }
index 7845462064f4c13457528852c09e5db9e770596b..838a5e31394cbbbe0e9a34b66e1570cf03b5bb86 100644 (file)
@@ -989,7 +989,7 @@ int __set_page_dirty_no_writeback(struct page *page)
  * mapping is pinned by the vma's ->vm_file reference.
  *
  * We take care to handle the case where the page was truncated from the
- * mapping by re-checking page_mapping() insode tree_lock.
+ * mapping by re-checking page_mapping() inside tree_lock.
  */
 int __set_page_dirty_nobuffers(struct page *page)
 {
index 43f757fcf30f6b1dc61cffd2c824e791db28c418..da69d833e0671fe6b8a04b019e47b63c7dcf0f4c 100644 (file)
@@ -123,7 +123,7 @@ static unsigned long __meminitdata dma_reserve;
 
 #ifdef CONFIG_ARCH_POPULATES_NODE_MAP
   /*
-   * MAX_ACTIVE_REGIONS determines the maxmimum number of distinct
+   * MAX_ACTIVE_REGIONS determines the maximum number of distinct
    * ranges of memory (RAM) that may be registered with add_active_range().
    * Ranges passed to add_active_range() will be merged if possible
    * so the number of times add_active_range() can be called is
@@ -1260,7 +1260,7 @@ int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
  * skip over zones that are not allowed by the cpuset, or that have
  * been recently (in last second) found to be nearly full.  See further
  * comments in mmzone.h.  Reduces cache footprint of zonelist scans
- * that have to skip over alot of full or unallowed zones.
+ * that have to skip over a lot of full or unallowed zones.
  *
  * If the zonelist cache is present in the passed in zonelist, then
  * returns a pointer to the allowed node mask (either the current
@@ -2358,7 +2358,7 @@ void build_all_zonelists(void)
                __build_all_zonelists(NULL);
                cpuset_init_current_mems_allowed();
        } else {
-               /* we have to stop all cpus to guaranntee there is no user
+               /* we have to stop all cpus to guarantee there is no user
                   of zonelist */
                stop_machine_run(__build_all_zonelists, NULL, NR_CPUS);
                /* cpuset refresh routine should be here */
@@ -2864,7 +2864,7 @@ static int __meminit first_active_region_index_in_nid(int nid)
 
 /*
  * Basic iterator support. Return the next active range of PFNs for a node
- * Note: nid == MAX_NUMNODES returns next region regardles of node
+ * Note: nid == MAX_NUMNODES returns next region regardless of node
  */
 static int __meminit next_active_region_index_in_nid(int index, int nid)
 {
index b4e76c25f953061a571d23d69353457728a4285a..603ae98d9694dfbf88561abb266021b1bf370fb1 100644 (file)
@@ -34,7 +34,7 @@
  * Radix priority search tree for address_space->i_mmap
  *
  * For each vma that map a unique set of file pages i.e., unique [radix_index,
- * heap_index] value, we have a corresponing priority search tree node. If
+ * heap_index] value, we have a corresponding priority search tree node. If
  * multiple vmas have identical [radix_index, heap_index] value, then one of
  * them is used as a tree node and others are stored in a vm_set list. The tree
  * node points to the first vma (head) of the list using vm_set.head.
index 54eb555c4ef8596a605e616e17652b9b7b190d81..cfa6be4e378ea1c625081e3ace43c5b212f41968 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -26,7 +26,7 @@
  * initialized objects.
  *
  * This means, that your constructor is used only for newly allocated
- * slabs and you must pass objects with the same intializations to
+ * slabs and you must pass objects with the same initializations to
  * kmem_cache_free.
  *
  * Each cache can only support one memory type (GFP_DMA, GFP_HIGHMEM,
@@ -1369,7 +1369,7 @@ static int __cpuinit cpuup_callback(struct notifier_block *nfb,
                 * structure is usually allocated from kmem_cache_create() and
                 * gets destroyed at kmem_cache_destroy().
                 */
-               /* fall thru */
+               /* fall through */
 #endif
        case CPU_UP_CANCELED:
        case CPU_UP_CANCELED_FROZEN:
@@ -3806,7 +3806,7 @@ const char *kmem_cache_name(struct kmem_cache *cachep)
 EXPORT_SYMBOL_GPL(kmem_cache_name);
 
 /*
- * This initializes kmem_list3 or resizes varioius caches for all nodes.
+ * This initializes kmem_list3 or resizes various caches for all nodes.
  */
 static int alloc_kmemlist(struct kmem_cache *cachep)
 {
index a65eff8a517af30716ffb863b9866098abeccc3d..9ac88323d237a82e9a6bf4a91fced71225a4e318 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * This file contains the default values for the opereation of the
+ * This file contains the default values for the operation of the
  * Linux VM subsystem. Fine-tuning documentation can be found in
  * Documentation/sysctl/vm.txt.
  * Started 18.12.91
index 2e01af365848eb3d8485369d2fc4d9c4dad2a05c..af77e171e339a357933d7eb6ba4b001efae5e390 100644 (file)
@@ -247,7 +247,7 @@ struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
 EXPORT_SYMBOL_GPL(__get_vm_area);
 
 /**
- *     get_vm_area  -  reserve a contingous kernel virtual area
+ *     get_vm_area  -  reserve a contiguous kernel virtual area
  *     @size:          size of the area
  *     @flags:         %VM_IOREMAP for I/O mappings or VM_ALLOC
  *
@@ -303,7 +303,7 @@ found:
 }
 
 /**
- *     remove_vm_area  -  find and remove a contingous kernel virtual area
+ *     remove_vm_area  -  find and remove a continuous kernel virtual area
  *     @addr:          base address
  *
  *     Search for the kernel VM area starting at @addr, and remove it.
@@ -364,7 +364,7 @@ static void __vunmap(void *addr, int deallocate_pages)
  *     vfree  -  release memory allocated by vmalloc()
  *     @addr:          memory base address
  *
- *     Free the virtually contiguous memory area starting at @addr, as
+ *     Free the virtually continuous memory area starting at @addr, as
  *     obtained from vmalloc(), vmalloc_32() or __vmalloc(). If @addr is
  *     NULL, no operation is performed.
  *
index cb474cc996453006c0cc79430530ac1611b6facc..e5a9597e3bbc7aad2ed7af943528aa164eb4aa36 100644 (file)
@@ -141,7 +141,7 @@ EXPORT_SYMBOL(unregister_shrinker);
  * percentages of the lru and ageable caches.  This should balance the seeks
  * generated by these structures.
  *
- * If the vm encounted mapped pages on the LRU it increase the pressure on
+ * If the vm encountered mapped pages on the LRU it increase the pressure on
  * slab to avoid swapping.
  *
  * We do weird things to avoid (scanned*seeks*entries) overflowing 32 bits.
index eecbf12f6393eefebd8bb41b3419f9f94032682e..71bc110aebf8f5846c8951176dff556152544a34 100644 (file)
@@ -27,5 +27,5 @@ config NET_9P_DEBUG
        bool "Debug information"
        depends on NET_9P
        help
-         Say Y if you want the 9P subsistem to log debug information.
+         Say Y if you want the 9P subsystem to log debug information.
 
index e37d217a986a6bc0de5ab3aa05f7d0c96014b96b..8273b1200eeefe701974106ed3ddbc39ed973621 100644 (file)
@@ -75,7 +75,7 @@ static int ax25_ds_state1_machine(ax25_cb *ax25, struct sk_buff *skb, int framet
                }
                ax25_dama_on(ax25);
 
-               /* according to DK4EG´s spec we are required to
+               /* according to DK4EG's spec we are required to
                 * send a RR RESPONSE FINAL NR=0.
                 */
 
index a49773ff2b92262ab7e75479d3ef4325014063e2..b5e59787be2f145084dfe15a6189e2f0923222b2 100644 (file)
@@ -41,7 +41,7 @@ void ax25_ds_enquiry_response(ax25_cb *ax25)
        ax25_cb *ax25o;
        struct hlist_node *node;
 
-       /* Please note that neither DK4EG´s nor DG2FEF´s
+       /* Please note that neither DK4EG's nor DG2FEF's
         * DAMA spec mention the following behaviour as seen
         * with TheFirmware:
         *
index 1f78c3e336d8cb460cfeb70ec5f7f053e20bddf7..347e935faaf0a175cfb23929b92dd9bbaf5682d1 100644 (file)
@@ -2,7 +2,7 @@
    BNEP implementation for Linux Bluetooth stack (BlueZ).
    Copyright (C) 2001-2002 Inventel Systemes
    Written 2001-2002 by
-       Clément Moreau <clement.moreau@inventel.fr>
+       Clément Moreau <clement.moreau@inventel.fr>
        David Libault  <david.libault@inventel.fr>
 
    Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
index 9092816f58de1e589d3afe951e2fa3b94b7404a0..95e3837e4312005916243e4285b21ed88dddfc1f 100644 (file)
@@ -2,7 +2,7 @@
    BNEP implementation for Linux Bluetooth stack (BlueZ).
    Copyright (C) 2001-2002 Inventel Systemes
    Written 2001-2002 by
-       Clément Moreau <clement.moreau@inventel.fr>
+       Clément Moreau <clement.moreau@inventel.fr>
        David Libault  <david.libault@inventel.fr>
 
    Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
index d5a09eaef9153b6858fc3cecf44a777c002902bf..817169e718c1180ee8e9c3f5fab222727f4c4846 100644 (file)
@@ -871,7 +871,7 @@ static int translate_table(char *name, struct ebt_table_info *newinfo)
                                return -EINVAL;
                        }
 
-       /* we now know the following (along with E=mc²):
+       /* we now know the following (along with E=mc²):
           - the nr of entries in each chain is right
           - the size of the allocated space is right
           - all valid hooks have a corresponding chain
index 7ac703171ff3014cd2f204501250344ef5373cf1..c4719edb55c0ecf82f73256e25bb715f82663055 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Alexey Kuznetsov  <kuznet@ms2.inr.ac.ru>
  * Ben Greear <greearb@candelatech.com>
- * Jens Låås <jens.laas@data.slu.se>
+ * Jens Låås <jens.laas@data.slu.se>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
index 9b58dd67acb6c34f0a43970e929a34cc24282d93..d309e8f199929618b1fb0a2ee02fc9aed362b881 100644 (file)
@@ -409,7 +409,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
                                               (*crypt)->priv);
                sec.flags |= (1 << key);
                /* This ensures a key will be activated if no key is
-                * explicitely set */
+                * explicitly set */
                if (key == sec.active_key)
                        sec.flags |= SEC_ACTIVE_KEY;
 
index d894f616c3d63ce732073d90f185441f3411da75..9f9fd2c6f6e27f2dabc5ced271040ca774a8a153 100644 (file)
@@ -560,7 +560,7 @@ config TCP_CONG_ILLINOIS
        depends on EXPERIMENTAL
        default n
        ---help---
-       TCP-Illinois is a sender-side modificatio of TCP Reno for
+       TCP-Illinois is a sender-side modification of TCP Reno for
        high speed long delay links. It uses round-trip-time to
        adjust the alpha and beta parameters to achieve a higher average
        throughput and maintain fairness.
index af0cea721d2acd19cfd16f83efed38b6d18826b6..80c33f408e3fc2ccee1059d6141728cda89d1a27 100644 (file)
@@ -202,7 +202,7 @@ void irlmp_expire_discoveries(hashbin_t *log, __u32 saddr, int force)
        /* Drop the spinlock before calling the higher layers, as
         * we can't guarantee they won't call us back and create a
         * deadlock. We will work on our own private data, so we
-        * don't care to be interupted. - Jean II */
+        * don't care to be interrupted. - Jean II */
        spin_unlock_irqrestore(&log->hb_spinlock, flags);
 
        if(buffer == NULL)
index ee3889fa49abf2d89721b99d9e0a0c25ff407a35..dc5e34a01620b8225d8f4081c03e84ef4288b706 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 99b18dc7a0b7e3b26f8fcd52d7c30bebee14d69d..8fb9d7277ca866b8aa6b944b2b0be6e8b14672f0 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index cf302457097bdefd1e6af972194ef04e97be465e..cbcf04380f3a46eb94ecfb43e169079690728e7c 100644 (file)
@@ -16,7 +16,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 87039c2fb6a23cbece6b28825fd998b08fe8ae9c..fff52d57a2000a3ed974a6765a1d67db99714fdd 100644 (file)
@@ -20,7 +20,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 843ab6fbb394b17065f35e01b74162a653e69a69..6afcee59e90632b926fd069c10353916693c1335 100644 (file)
@@ -17,7 +17,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index f5778ef3ccc7213ac7e3b179813324aa2973a1c7..a4b56e25a91705abb9899559f7fb6ae07a535b52 100644 (file)
@@ -17,7 +17,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 340f04a36b027ba48e8eef9f6460f22ae909289f..7f9c8542e5fc0deabdb0ff86a7fd654a1fc962c0 100644 (file)
@@ -19,7 +19,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 623e0fd16c1900909c3830e1409a6ec7d872fe62..a9750a801388f6d2586852f81a9c8ca980f7582f 100644 (file)
@@ -16,7 +16,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index e6346b88f934fef993428aa9e0448475094d28e3..4384be9a6888776baffce9b20393bbb59f830aa6 100644 (file)
@@ -16,7 +16,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index aac66434e4739d69610eaf80dc43f7893fa8dbd0..13db942812e467dce28864a1647455f47418bbf2 100644 (file)
@@ -20,7 +20,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index ef401bd6ea0036765594ed3a122b8ec4341c0824..10ece5a47522c86763809428e994bca9df295b39 100644 (file)
@@ -16,7 +16,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index a8b8873aa263f181c0f722d37ceeb96ba3feef9b..4c33bf5c8354df31023de03c679b7ee6b02b642f 100644 (file)
@@ -19,7 +19,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 77ac27e811615a2e801f22c188d59762bf0ae431..4f3764546b2fe1eae1d4aef2582d97c807c120e4 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 7db92ced2c02223b0de90bac9f95c1ddfa0939bb..cedff8068fbc17b3e4fe8f994ac5fc3f1ed22956 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 65ffa981510add944657bac1a9e766425da732cf..1bba87e7860943ac444d6f55b4aa78fa8c5dad30 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 559302d3fe66264611100da2352010ebe0580897..0a79d9aeb08caed52652b38d65235d30f83279c1 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 8ba703da2797493be2e007fd23e9ca0a53fb1b11..01554b996b9b9ceeb19152c8b175474fca2fc668 100644 (file)
@@ -17,7 +17,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index d058b467f9e450e7c2f1a331a3be18298c8c61ec..40c28efaed9552c788cf968e96c57449d3849004 100644 (file)
@@ -28,7 +28,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 525343a1c521a052349a8163c0c737b5b58aca66..565cbf0421cd69124e372aa9274ef9a43b3da393 100644 (file)
@@ -17,7 +17,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 1311976c9dfeba0358e599e7f15e01b8ce8f3f97..97db158c92748dfe55de4e43a0f8a3682a970db2 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index d3a6ee8cc4a281a60baa7522278294a3d5799e03..d730099080a28acabb81957840c11e5be7e10445 100644 (file)
@@ -18,7 +18,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index a7a7f191f1a86c94437b464f02fdaa5097787ba0..e71286768a480994141f6d9b97b270c212112ccf 100644 (file)
@@ -20,7 +20,7 @@
  *     published by the Free Software Foundation; either version 2 of
  *     the License, or (at your option) any later version.
  *
- *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
  *     provide warranty for any of this software. This material is
  *     provided "AS-IS" and at no charge.
  *
index 983058d432dc8c613f63a48af80db1997679dd3f..a2f5a6ea389520832c86c8b5e1f9c907de518796 100644 (file)
@@ -389,7 +389,7 @@ static void iucv_block_cpu(void *data)
  * iucv_declare_cpu
  * @data: unused
  *
- * Declare a interupt buffer on this cpu.
+ * Declare a interrupt buffer on this cpu.
  */
 static void iucv_declare_cpu(void *data)
 {
index 8cc324b159e9b30d55b735eb9ae377df2a0b193e..856793e8db7ace795fd543efaebd4932df388228 100644 (file)
@@ -23,7 +23,7 @@
 #include <linux/ip.h>
 #include <net/checksum.h>
 
-MODULE_AUTHOR("Henrik Nordstrom <hno@marasytems.com>");
+MODULE_AUTHOR("Henrik Nordstrom <hno@marasystems.com>");
 MODULE_DESCRIPTION("IP tables CONNMARK matching module");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("ipt_CONNMARK");
index 1071fc54d6d3c8811f4404773636ec15083d9cc3..9f67920af41fd54a3857701dbfc941abd26d823c 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/netfilter/x_tables.h>
 #include <linux/netfilter/xt_connmark.h>
 
-MODULE_AUTHOR("Henrik Nordstrom <hno@marasytems.com>");
+MODULE_AUTHOR("Henrik Nordstrom <hno@marasystems.com>");
 MODULE_DESCRIPTION("IP tables connmark match module");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("ipt_connmark");
index 4fcca797150f75d7fc673196476ff101dfeecb05..f263a77e57b729106a4b5948f74de7ccf566bae3 100644 (file)
@@ -1,5 +1,5 @@
-/* (C) 1999 Jérôme de Vivie <devivie@info.enserb.u-bordeaux.fr>
- * (C) 1999 Hervé Eychenne <eychenne@info.enserb.u-bordeaux.fr>
+/* (C) 1999 Jérôme de Vivie <devivie@info.enserb.u-bordeaux.fr>
+ * (C) 1999 Hervé Eychenne <eychenne@info.enserb.u-bordeaux.fr>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
index e9989610712ca2b8e68bc845623c28a5e78e8e5f..ceda8890ab0edae550482da852ffc72e68603770 100644 (file)
@@ -55,7 +55,7 @@
  *     ppp0..9.
  *
  *     NOTE: Certain meta values depend on other subsystems and are
- *           only available if that subsytem is enabled in the kernel.
+ *           only available if that subsystem is enabled in the kernel.
  */
 
 #include <linux/module.h>
index de7bb284c6116d8ea3997ae224a25e3081aaf619..b96ea8d6a5ed0eb375a4db068cdb2c564407cd42 100644 (file)
@@ -56,6 +56,17 @@ endef
 # gcc support functions
 # See documentation in Documentation/kbuild/makefiles.txt
 
+# cc-cross-prefix
+# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-)
+# Return first prefix where a prefix$(CC) is found in PATH.
+# If no $(CC) found in PATH with listed prefixes return nothing
+cc-cross-prefix =  \
+       $(word 1, $(foreach c,$(1),                                   \
+               $(shell set -e;                                       \
+               if (which $(strip $(c))$(CC)) > /dev/null 2>&1 ; then \
+                       echo $(c);                                    \
+               fi)))
+
 # output directory for tests below
 TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/)
 
index e5c6ac7bde9b5778320ce1f99553c66c79a25826..0e4bd5459df4e08e90770516e942ba9236da3a22 100644 (file)
@@ -66,12 +66,15 @@ FILELINE * entity_system;
 #define FUNCTION      "-function"
 #define NOFUNCTION    "-nofunction"
 
+char *srctree;
+
 void usage (void)
 {
        fprintf(stderr, "Usage: docproc {doc|depend} file\n");
        fprintf(stderr, "Input is read from file.tmpl. Output is sent to stdout\n");
        fprintf(stderr, "doc: frontend when generating kernel documentation\n");
        fprintf(stderr, "depend: generate list of files referenced within file\n");
+       fprintf(stderr, "Environment variable SRCTREE: absolute path to kernel source tree.\n");
 }
 
 /*
@@ -90,7 +93,7 @@ void exec_kernel_doc(char **svec)
                        exit(1);
                case  0:
                        memset(real_filename, 0, sizeof(real_filename));
-                       strncat(real_filename, getenv("SRCTREE"), PATH_MAX);
+                       strncat(real_filename, srctree, PATH_MAX);
                        strncat(real_filename, KERNELDOCPATH KERNELDOC,
                                        PATH_MAX - strlen(real_filename));
                        execvp(real_filename, svec);
@@ -171,7 +174,7 @@ void find_export_symbols(char * filename)
        if (filename_exist(filename) == NULL) {
                char real_filename[PATH_MAX + 1];
                memset(real_filename, 0, sizeof(real_filename));
-               strncat(real_filename, getenv("SRCTREE"), PATH_MAX);
+               strncat(real_filename, srctree, PATH_MAX);
                strncat(real_filename, filename,
                                PATH_MAX - strlen(real_filename));
                sym = add_new_file(filename);
@@ -338,6 +341,10 @@ void parse_file(FILE *infile)
 int main(int argc, char *argv[])
 {
        FILE * infile;
+
+       srctree = getenv("SRCTREE");
+       if (!srctree)
+               srctree = getcwd(NULL, 0);
        if (argc != 3) {
                usage();
                exit(1);
index bb08069b04af35e260b940b7ff5bf9e8d3fdfe1b..83c5e76414cec6b46f72ae9a63a75a699401cc0d 100644 (file)
@@ -84,7 +84,7 @@ help:
 # lxdialog stuff
 check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
 
-# Use reursively expanded variables so we do not call gcc unless
+# Use recursively expanded variables so we do not call gcc unless
 # we really need to do so. (Do not call gcc as part of make mrproper)
 HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
 HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
index 7bfa181d6ed6f685d45d8a68f301cd75810e3369..f9d0d91a3fe44e2407761a60bb5a31dc22926b41 100644 (file)
@@ -235,23 +235,16 @@ void menu_finalize(struct menu *parent)
        sym = parent->sym;
        if (parent->list) {
                if (sym && sym_is_choice(sym)) {
-                       /* find out choice type */
-                       enum symbol_type type = S_UNKNOWN;
-
+                       /* find the first choice value and find out choice type */
                        for (menu = parent->list; menu; menu = menu->next) {
-                               if (menu->sym && menu->sym->type != S_UNKNOWN) {
-                                       if (type == S_UNKNOWN)
-                                               type = menu->sym->type;
-                                       if (type != S_BOOLEAN)
-                                               break;
-                                       if (menu->sym->type == S_TRISTATE) {
-                                               type = S_TRISTATE;
-                                               break;
-                                       }
+                               if (menu->sym) {
+                                       current_entry = parent;
+                                       menu_set_type(menu->sym->type);
+                                       current_entry = menu;
+                                       menu_set_type(sym->type);
+                                       break;
                                }
                        }
-                       current_entry = parent;
-                       menu_set_type(type);
                        parentdep = expr_alloc_symbol(sym);
                } else if (parent->prompt)
                        parentdep = parent->prompt->visible.expr;
@@ -260,16 +253,7 @@ void menu_finalize(struct menu *parent)
 
                for (menu = parent->list; menu; menu = menu->next) {
                        basedep = expr_transform(menu->dep);
-                       dep = parentdep;
-                       if (sym && sym_is_choice(sym) && menu->sym) {
-                               enum symbol_type type = menu->sym->type;
-
-                               if (type == S_UNKNOWN)
-                                       type = sym->type;
-                            if (type != S_TRISTATE)
-                                       dep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
-                       }
-                       basedep = expr_alloc_and(expr_copy(dep), basedep);
+                       basedep = expr_alloc_and(expr_copy(parentdep), basedep);
                        basedep = expr_eliminate_dups(basedep);
                        menu->dep = basedep;
                        if (menu->sym)
@@ -342,8 +326,7 @@ void menu_finalize(struct menu *parent)
                                            "values not supported");
                        }
                        current_entry = menu;
-                       if (menu->sym->type == S_UNKNOWN)
-                               menu_set_type(sym->type);
+                       menu_set_type(sym->type);
                        menu_add_symbol(P_CHOICE, sym, NULL);
                        prop = sym_get_choice_prop(sym);
                        for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr)
index 2ef9a193fcaef33cc527dab5ace20dd492ba4af1..93ac52adb4980b3d23a0b40acd6800e48f75b349 100644 (file)
@@ -268,6 +268,9 @@ static struct symbol *sym_add_exported(const char *name, struct module *mod,
                             "was in %s%s\n", mod->name, name,
                             s->module->name,
                             is_vmlinux(s->module->name) ?"":".ko");
+               } else {
+                       /* In case Modules.symvers was out of date */
+                       s->module = mod;
                }
        }
        s->preloaded = 0;
index 6edb29f2b4a6c8aa056a748168a70583897a9d3c..0f657b5f3bc860bf602680d3a22a312371a2a6a1 100644 (file)
@@ -83,6 +83,7 @@ Maintainer: $name
 Standards-Version: 3.6.1
 
 Package: $packagename
+Provides: kernel-image-$version, linux-image-$version
 Architecture: any
 Description: User Mode Linux kernel, version $version
  User-mode Linux is a port of the Linux kernel to its own system call
@@ -104,6 +105,7 @@ Maintainer: $name
 Standards-Version: 3.6.1
 
 Package: $packagename
+Provides: kernel-image-$version, linux-image-$version
 Architecture: any
 Description: Linux kernel, version $version
  This package contains the Linux kernel, modules and corresponding other
index d7c4fb86b9eba56167beec2b18434430947e0966..17b3e6f13ca3564c08f3ca0e81f2ddcd5041ad91 100644 (file)
@@ -71,7 +71,7 @@ static void reset_all_channels(struct snd_midi_channel_set *chset);
  * such as GM, GS and XG.
  * There modes that this module will run in are:
  *   Generic MIDI - no interpretation at all, it will just save current values
- *                  of controlers etc.
+ *                  of controllers etc.
  *   GM - You can use all gm_ prefixed elements of chan.  Controls, RPN, NRPN,
  *        SysEx will be interpreded as defined in General Midi.
  *   GS - You can use all gs_ prefixed elements of chan. Codes for GS will be
@@ -176,7 +176,7 @@ snd_midi_process_event(struct snd_midi_op *ops,
                                   ev->data.control.value);
                break;
        case SNDRV_SEQ_EVENT_NONREGPARAM:
-               /* Break it back into its controler values */
+               /* Break it back into its controller values */
                chan->param_type = SNDRV_MIDI_PARAM_TYPE_NONREGISTERED;
                chan->control[MIDI_CTL_MSB_DATA_ENTRY]
                        = (ev->data.control.value >> 7) & 0x7f;
@@ -189,7 +189,7 @@ snd_midi_process_event(struct snd_midi_op *ops,
                nrpn(ops, drv, chan, chanset);
                break;
        case SNDRV_SEQ_EVENT_REGPARAM:
-               /* Break it back into its controler values */
+               /* Break it back into its controller values */
                chan->param_type = SNDRV_MIDI_PARAM_TYPE_REGISTERED;
                chan->control[MIDI_CTL_MSB_DATA_ENTRY]
                        = (ev->data.control.value >> 7) & 0x7f;
@@ -267,7 +267,7 @@ note_off(struct snd_midi_op *ops, void *drv, struct snd_midi_channel *chan,
 }
 
 /*
- * Do all driver independent operations for this controler and pass
+ * Do all driver independent operations for this controller and pass
  * events that need to take place immediately to the driver.
  */
 static void
index 1b6f227af370b0428fd707df46a6b7b21cafc914..3557b6e20eb535718fa056f1020acc596d01f453 100644 (file)
@@ -808,7 +808,7 @@ static void snd_opl3_pitch_ctrl(struct snd_opl3 *opl3, struct snd_midi_channel *
 }
 
 /*
- * Deal with a controler type event.  This includes all types of
+ * Deal with a controller type event.  This includes all types of
  * control events, not just the midi controllers
  */
 void snd_opl3_control(void *p, int type, struct snd_midi_channel *chan)
index 4a7367a8ff9d25c76c0a432ed386468bf031db81..c1af28fd4a1fcf7fb961993ca4c74260d3e9fb26 100644 (file)
@@ -623,7 +623,7 @@ static int snd_es18xx_capture_prepare(struct snd_pcm_substream *substream)
                          (snd_pcm_format_width(runtime->format) == 16 ? 0x04 : 0x00) |
                          (snd_pcm_format_unsigned(runtime->format) ? 0x00 : 0x20));
 
-        /* Set DMA controler */
+        /* Set DMA controller */
         snd_dma_program(chip->dma1, runtime->dma_addr, size, DMA_MODE_READ | DMA_AUTOINIT);
 
        return 0;
@@ -689,7 +689,7 @@ static int snd_es18xx_playback2_prepare(struct snd_es18xx *chip,
                          (snd_pcm_format_width(runtime->format) == 16 ? 0x04 : 0x00) |
                          (snd_pcm_format_unsigned(runtime->format) ? 0x00 : 0x20));
 
-        /* Set DMA controler */
+        /* Set DMA controller */
         snd_dma_program(chip->dma1, runtime->dma_addr, size, DMA_MODE_WRITE | DMA_AUTOINIT);
 
        return 0;
index 8a61a119186135984c42b7299a9c692cf8853f20..24460a558bf75eaf98d8e70a76c411fc54c34525 100644 (file)
@@ -498,8 +498,8 @@ snd_au1000_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
        int             i;
 
        spin_lock(&au1000->ac97_lock);
-/* would rather use the interupt than this polling but it works and I can't
-get the interupt driven case to work efficiently */
+/* would rather use the interrupt than this polling but it works and I can't
+get the interrupt driven case to work efficiently */
        for (i = 0; i < 0x5000; i++)
                if (!(au1000->ac97_ioport->status & AC97C_CP))
                        break;
@@ -535,8 +535,8 @@ snd_au1000_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short
        int i;
 
        spin_lock(&au1000->ac97_lock);
-/* would rather use the interupt than this polling but it works and I can't
-get the interupt driven case to work efficiently */
+/* would rather use the interrupt than this polling but it works and I can't
+get the interrupt driven case to work efficiently */
        for (i = 0; i < 0x5000; i++)
                if (!(au1000->ac97_ioport->status & AC97C_CP))
                        break;
index f70286a7364ac3d27a90d16844bfcf8817c8ab90..26819e2f5761810eeb3346c1224f740c4d00b276 100644 (file)
@@ -191,7 +191,7 @@ snd_vortex_create(struct snd_card *card, struct pci_dev *pci, vortex_t ** rchip)
 
        /* Init audio core.
         * This must be done before we do request_irq otherwise we can get spurious
-        * interupts that we do not handle properly and make a mess of things */
+        * interrupts that we do not handle properly and make a mess of things */
        if ((err = vortex_core_init(chip)) != 0) {
                printk(KERN_ERR "hw core init failed\n");
                goto core_out;
index 91651bdfa7611b04fe5fe4823d4eaeb1f47a116d..e6a67b58f296ec6269fc7c1ea833a5a1728bf7eb 100644 (file)
@@ -264,7 +264,7 @@ out:
 }
 
 /*
- * Power down the audio subsytem pmdown_time msecs after close is called.
+ * Power down the audio subsystem pmdown_time msecs after close is called.
  * This is to ensure there are no pops or clicks in between any music tracks
  * due to DAPM power cycling.
  */
index b3193e687db7d757c4faf9a25c39002aefaed4b2..29a546fecacf28fead8e36648dcf18e53a8e4852 100644 (file)
@@ -24,7 +24,7 @@
  *    o Automatic Mic Bias support
  *    o Jack insertion power event initiation - e.g. hp insertion will enable
  *      sinks, dacs, etc
- *    o Delayed powerdown of audio susbsytem to reduce pops between a quick
+ *    o Delayed powerdown of audio susbsystem to reduce pops between a quick
  *      device reopen.
  *
  *  Todo:
index 3733118d39bb03a59dcf1ca40019c80dafb889ef..478369bb38c34118701f08966c0cf2b96f2beab4 100644 (file)
@@ -317,7 +317,7 @@ snd_emux_update_port(struct snd_emux_port *port, int update)
 
 
 /*
- * Deal with a controler type event.  This includes all types of
+ * Deal with a controller type event.  This includes all types of
  * control events, not just the midi controllers
  */
 void