]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
authorLinus Torvalds <torvalds@woody.osdl.org>
Sat, 2 Dec 2006 00:40:13 +0000 (16:40 -0800)
committerLinus Torvalds <torvalds@woody.osdl.org>
Sat, 2 Dec 2006 00:40:13 +0000 (16:40 -0800)
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
  [CIFS] Fix timezone handling on stat to os/2
  [CIFS] Incorrect hardlink count when original file is cached (oplocked)

325 files changed:
CREDITS
Documentation/Changes
Documentation/DMA-API.txt
Documentation/DMA-ISA-LPC.txt
Documentation/MSI-HOWTO.txt
Documentation/accounting/taskstats.txt
Documentation/block/biodoc.txt
Documentation/cpu-freq/cpufreq-nforce2.txt
Documentation/cpu-hotplug.txt
Documentation/devices.txt
Documentation/driver-model/porting.txt
Documentation/dvb/ci.txt
Documentation/eisa.txt
Documentation/filesystems/adfs.txt
Documentation/filesystems/configfs/configfs.txt
Documentation/filesystems/fuse.txt
Documentation/filesystems/hpfs.txt
Documentation/filesystems/ntfs.txt
Documentation/filesystems/ocfs2.txt
Documentation/filesystems/proc.txt
Documentation/filesystems/spufs.txt
Documentation/fujitsu/frv/gdbstub.txt
Documentation/fujitsu/frv/kernel-ABI.txt
Documentation/ide.txt
Documentation/input/amijoy.txt
Documentation/input/atarikbd.txt
Documentation/input/yealink.txt
Documentation/ioctl/cdrom.txt
Documentation/kbuild/makefiles.txt
Documentation/keys.txt
Documentation/laptop-mode.txt
Documentation/memory-barriers.txt
Documentation/networking/NAPI_HOWTO.txt
Documentation/networking/cs89x0.txt
Documentation/networking/iphase.txt
Documentation/networking/packet_mmap.txt
Documentation/networking/pktgen.txt
Documentation/networking/proc_net_tcp.txt
Documentation/networking/sk98lin.txt
Documentation/networking/slicecom.txt
Documentation/networking/wan-router.txt
Documentation/pnp.txt
Documentation/power/pci.txt
Documentation/power/states.txt
Documentation/power/swsusp.txt
Documentation/powerpc/booting-without-of.txt
Documentation/robust-futex-ABI.txt
Documentation/robust-futexes.txt
Documentation/rtc.txt
Documentation/s390/crypto/crypto-API.txt
Documentation/scsi/aic79xx.txt
Documentation/scsi/aic7xxx_old.txt
Documentation/scsi/ibmmca.txt
Documentation/scsi/in2000.txt
Documentation/scsi/libsas.txt
Documentation/scsi/ncr53c8xx.txt
Documentation/scsi/scsi-changer.txt
Documentation/scsi/scsi_eh.txt
Documentation/scsi/st.txt
Documentation/scsi/sym53c8xx_2.txt
Documentation/sharedsubtree.txt
Documentation/sound/alsa/ALSA-Configuration.txt
Documentation/sound/alsa/Audigy-mixer.txt
Documentation/sound/alsa/SB-Live-mixer.txt
Documentation/stable_kernel_rules.txt
Documentation/sysctl/fs.txt
Documentation/sysctl/vm.txt
Documentation/uml/UserModeLinux-HOWTO.txt
Documentation/usb/hiddev.txt
Documentation/usb/rio.txt
Documentation/usb/usb-serial.txt
Documentation/watchdog/watchdog-api.txt
MAINTAINERS
Makefile
arch/arm/Kconfig
arch/arm/configs/assabet_defconfig
arch/arm/configs/cerfcube_defconfig
arch/arm/configs/corgi_defconfig
arch/arm/configs/h3600_defconfig
arch/arm/configs/integrator_defconfig
arch/arm/configs/jornada720_defconfig
arch/arm/configs/lart_defconfig
arch/arm/configs/neponset_defconfig
arch/arm/configs/simpad_defconfig
arch/arm/configs/spitz_defconfig
arch/arm/kernel/smp.c
arch/arm/mach-ebsa110/io.c
arch/arm/mach-ixp4xx/Kconfig
arch/arm/mach-lh7a40x/Kconfig
arch/arm/mach-s3c2410/Kconfig
arch/arm/mm/Kconfig
arch/arm/mm/consistent.c
arch/cris/arch-v10/Kconfig
arch/cris/arch-v10/drivers/Kconfig
arch/cris/arch-v10/drivers/eeprom.c
arch/cris/arch-v10/drivers/i2c.c
arch/cris/arch-v10/kernel/kgdb.c
arch/cris/arch-v32/drivers/Kconfig
arch/i386/kernel/process.c
arch/i386/kernel/traps.c
arch/ia64/hp/common/sba_iommu.c
arch/m68knommu/Kconfig
arch/m68knommu/kernel/setup.c
arch/m68knommu/kernel/time.c
arch/m68knommu/platform/5307/ints.c
arch/mips/Kconfig
arch/mips/kernel/Makefile
arch/mips/kernel/smp.c
arch/mips/kernel/topology.c [new file with mode: 0644]
arch/mips/mips-boards/malta/malta_setup.c
arch/mips/mm/c-sb1.c
arch/powerpc/Kconfig
arch/powerpc/kernel/time.c
arch/powerpc/platforms/83xx/Kconfig
arch/powerpc/platforms/83xx/mpc832x_mds.c
arch/powerpc/platforms/83xx/mpc834x_itx.c
arch/ppc/Kconfig
arch/sh/Kconfig
arch/sh64/lib/dbg.c
arch/sparc/Kconfig
arch/um/drivers/chan_user.c
arch/um/include/os.h
arch/um/os-Linux/Makefile
arch/um/os-Linux/execvp.c [new file with mode: 0644]
arch/um/os-Linux/helper.c
arch/x86_64/Makefile
arch/x86_64/kernel/early_printk.c
arch/x86_64/kernel/io_apic.c
arch/x86_64/kernel/process.c
arch/x86_64/kernel/traps.c
arch/x86_64/kernel/vmlinux.lds.S
arch/x86_64/kernel/vsyscall.c
arch/x86_64/mm/init.c
block/as-iosched.c
block/blktrace.c
block/cfq-iosched.c
block/deadline-iosched.c
block/elevator.c
block/ll_rw_blk.c
block/noop-iosched.c
block/scsi_ioctl.c
drivers/acpi/osl.c
drivers/acpi/processor_perflib.c
drivers/ata/ahci.c
drivers/ata/libata-scsi.c
drivers/atm/iphase.c
drivers/base/core.c
drivers/block/aoe/aoeblk.c
drivers/cdrom/cdrom.c
drivers/char/Kconfig
drivers/char/agp/generic.c
drivers/char/agp/intel-agp.c
drivers/char/ftape/zftape/zftape-buffers.c
drivers/char/rio/riocmd.c
drivers/char/rio/rioinit.c
drivers/char/rio/rioparam.c
drivers/char/tlclk.c
drivers/cpufreq/Kconfig
drivers/cpufreq/cpufreq.c
drivers/i2c/busses/i2c-ixp4xx.c
drivers/i2c/busses/scx200_acb.c
drivers/ide/ide-floppy.c
drivers/ide/pci/sgiioc4.c
drivers/infiniband/hw/ipath/Kconfig
drivers/infiniband/ulp/ipoib/ipoib_main.c
drivers/input/keyboard/lkkbd.c
drivers/isdn/hardware/eicon/os_4bri.c
drivers/isdn/hisax/Kconfig
drivers/isdn/hisax/hfc4s8s_l1.h
drivers/isdn/hisax/isdnl2.c
drivers/media/dvb/dvb-core/dvb_frontend.c
drivers/media/dvb/frontends/tda10086.c
drivers/media/dvb/ttpci/budget-patch.c
drivers/media/dvb/ttpci/budget.c
drivers/media/video/Kconfig
drivers/media/video/et61x251/et61x251_core.c
drivers/media/video/pwc/pwc-if.c
drivers/media/video/saa6588.c
drivers/media/video/saa7115.c
drivers/media/video/sn9c102/sn9c102_core.c
drivers/message/fusion/mptbase.c
drivers/mmc/omap.c
drivers/mtd/chips/cfi_cmdset_0001.c
drivers/mtd/maps/Kconfig
drivers/mtd/maps/cfi_flagadm.c
drivers/net/Kconfig
drivers/net/e100.c
drivers/net/e1000/e1000_hw.c
drivers/net/hamradio/6pack.c
drivers/net/phy/Kconfig
drivers/net/r8169.c
drivers/net/sk98lin/h/skdrv2nd.h
drivers/net/sk98lin/skdim.c
drivers/net/tg3.c
drivers/net/wireless/ipw2200.c
drivers/parisc/ccio-dma.c
drivers/parisc/iosapic.c
drivers/pci/Kconfig
drivers/pci/hotplug/ibmphp_hpc.c
drivers/pcmcia/ds.c
drivers/rtc/interface.c
drivers/rtc/rtc-at91.c
drivers/rtc/rtc-dev.c
drivers/rtc/rtc-ds1553.c
drivers/rtc/rtc-rs5c372.c
drivers/rtc/rtc-test.c
drivers/s390/net/claw.h
drivers/scsi/aic94xx/aic94xx_reg_def.h
drivers/scsi/aic94xx/aic94xx_sds.c
drivers/scsi/ncr53c8xx.c
drivers/scsi/ncr53c8xx.h
drivers/spi/Kconfig
drivers/usb/core/message.c
drivers/usb/host/Kconfig
drivers/usb/host/ohci-hcd.c
drivers/usb/host/ohci-hub.c
drivers/usb/host/u132-hcd.c
drivers/usb/input/ati_remote.c
drivers/usb/input/hid-core.c
drivers/usb/input/hid-input.c
drivers/usb/input/hid.h
drivers/usb/misc/auerswald.c
drivers/usb/misc/usb_u132.h
drivers/usb/serial/digi_acceleport.c
drivers/usb/serial/ftdi_sio.c
drivers/usb/serial/ftdi_sio.h
drivers/usb/serial/ipaq.c
drivers/usb/storage/unusual_devs.h
drivers/video/aty/radeon_i2c.c
drivers/video/fb_ddc.c
drivers/w1/masters/matrox_w1.c
fs/Kconfig
fs/aio.c
fs/bio.c
fs/debugfs/inode.c
fs/ecryptfs/crypto.c
fs/fuse/dir.c
fs/jfs/jfs_filsys.h
fs/proc/base.c
fs/reiserfs/file.c
fs/reiserfs/journal.c
fs/xfs/xfs_bmap.c
fs/xfs/xfs_inode.c
include/asm-arm/arch-ebsa110/io.h
include/asm-arm/arch-pxa/udc.h
include/asm-arm/dma-mapping.h
include/asm-arm/mach/udc_pxa2xx.h [new file with mode: 0644]
include/asm-generic/vmlinux.lds.h
include/asm-i386/mach-summit/mach_apic.h
include/asm-m68knommu/irq_regs.h [new file with mode: 0644]
include/asm-m68knommu/irqnode.h
include/asm-m68knommu/machdep.h
include/asm-m68knommu/mcfmbus.h
include/asm-mips/mach-au1x00/au1xxx_ide.h
include/asm-parisc/dma.h
include/asm-parisc/pci.h
include/asm-parisc/ropes.h
include/asm-parisc/semaphore.h
include/asm-powerpc/time.h
include/linux/blkdev.h
include/linux/blktrace_api.h
include/linux/crypto.h
include/linux/elevator.h
include/linux/igmp.h
include/linux/init.h
include/linux/ixjuser.h
include/linux/jiffies.h
include/linux/kernel.h
include/linux/mqueue.h
include/linux/netdevice.h
include/linux/nsproxy.h
include/linux/reiserfs_fs_sb.h
include/linux/spinlock.h
include/linux/spinlock_api_smp.h
include/linux/textsearch.h
include/net/sock.h
include/scsi/libsas.h
include/sound/version.h
kernel/fork.c
kernel/irq/handle.c
kernel/irq/spurious.c
kernel/kmod.c
kernel/lockdep.c
kernel/spinlock.c
kernel/unwind.c
lib/textsearch.c
mm/page_alloc.c
net/bluetooth/hci_event.c
net/bluetooth/hci_sock.c
net/bluetooth/hci_sysfs.c
net/bluetooth/l2cap.c
net/bluetooth/rfcomm/tty.c
net/bridge/br_ioctl.c
net/dccp/ipv6.c
net/dccp/probe.c
net/ipv4/netfilter/ip_conntrack_core.c
net/ipv4/netfilter/ip_conntrack_helper_h323.c
net/ipv4/netfilter/ip_conntrack_netlink.c
net/ipv4/netfilter/ipt_REJECT.c
net/ipv4/tcp_probe.c
net/ipv4/udp.c
net/ipv6/ip6_tunnel.c
net/ipv6/route.c
net/ipv6/udp.c
net/irda/irlmp.c
net/netfilter/nf_conntrack_core.c
net/netfilter/nf_conntrack_netlink.c
net/wanrouter/af_wanpipe.c
net/wanrouter/wanmain.c
net/xfrm/xfrm_user.c
scripts/gen_initramfs_list.sh
scripts/kconfig/lxdialog/util.c
scripts/kconfig/qconf.cc
security/selinux/hooks.c
sound/Kconfig
sound/aoa/codecs/snd-aoa-codec-tas.c
sound/core/oss/pcm_oss.c
sound/core/pcm_native.c
sound/core/rtctimer.c
sound/oss/cs46xx.c
sound/pci/emu10k1/emu10k1_main.c
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_sigmatel.c
sound/usb/usbaudio.c
usr/Makefile

diff --git a/CREDITS b/CREDITS
index 606d407cfc1565c1715912142e251289fb88d332..ccd4f9f4dd711493a02458146fadab1851bfd10e 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -3511,14 +3511,12 @@ D: The Linux Support Team Erlangen
 
 N: David Weinehall
 E: tao@acc.umu.se
+P: 1024D/DC47CA16 7ACE 0FB0 7A74 F994 9B36  E1D1 D14E 8526 DC47 CA16
 W: http://www.acc.umu.se/~tao/
-W: http://www.acc.umu.se/~mcalinux/
+D: v2.0 kernel maintainer
 D: Fixes for the NE/2-driver
 D: Miscellaneous MCA-support
 D: Cleanup of the Config-files
-S: Axtorpsvagen 40:20
-S: S-903 37  UMEA
-S: Sweden
 
 N: Matt Welsh
 E: mdw@metalab.unc.edu
index abee7f58c1ed6b2c374aa0483c06f86a5a260512..73a8617f1861754198c18c5e7285da95358994fe 100644 (file)
@@ -201,7 +201,7 @@ udev
 ----
 udev is a userspace application for populating /dev dynamically with
 only entries for devices actually present.  udev replaces the basic
-functionality of devfs, while allowing persistant device naming for
+functionality of devfs, while allowing persistent device naming for
 devices.
 
 FUSE
index 2ffb0d62f0fe3ed8156586505b7faf1efe1c33ce..05431621c861d7b9f0228a228414beb3fb3ee52e 100644 (file)
@@ -489,7 +489,7 @@ size is the size of the area (must be multiples of PAGE_SIZE).
 flags can be or'd together and are
 
 DMA_MEMORY_MAP - request that the memory returned from
-dma_alloc_coherent() be directly writeable.
+dma_alloc_coherent() be directly writable.
 
 DMA_MEMORY_IO - request that the memory returned from
 dma_alloc_coherent() be addressable using read/write/memcpy_toio etc.
index 705f6be92bdbf934a1171f291ac8b3b631d670c3..e767805b4182826acc049e29a183ec5109c4a39e 100644 (file)
@@ -110,7 +110,7 @@ lock.
 
 Once the DMA transfer is finished (or timed out) you should disable
 the channel again. You should also check get_dma_residue() to make
-sure that all data has been transfered.
+sure that all data has been transferred.
 
 Example:
 
index 5c34910665d1d8514fb77c07e310f91b2b7f59bd..d389388c733e6c718f87de37a885132af6519930 100644 (file)
@@ -219,7 +219,7 @@ into the field vector of each element contained in a second argument.
 Note that the pre-assigned IOAPIC dev->irq is valid only if the device
 operates in PIN-IRQ assertion mode. In MSI-X mode, any attempt at
 using dev->irq by the device driver to request for interrupt service
-may result unpredictabe behavior.
+may result in unpredictable behavior.
 
 For each MSI-X vector granted, a device driver is responsible for calling
 other functions like request_irq(), enable_irq(), etc. to enable
index 92ebf29e9041cef2b68fc0c3c33698f8558ff085..ff06b738bb88065b28f6006c7a6381d5af7d57dd 100644 (file)
@@ -96,9 +96,9 @@ a) TASKSTATS_TYPE_AGGR_PID/TGID : attribute containing no payload but indicates
 a pid/tgid will be followed by some stats.
 
 b) TASKSTATS_TYPE_PID/TGID: attribute whose payload is the pid/tgid whose stats
-is being returned.
+are being returned.
 
-c) TASKSTATS_TYPE_STATS: attribute with a struct taskstsats as payload. The
+c) TASKSTATS_TYPE_STATS: attribute with a struct taskstats as payload. The
 same structure is used for both per-pid and per-tgid stats.
 
 3. New message sent by kernel whenever a task exits. The payload consists of a
@@ -122,12 +122,12 @@ of atomicity).
 
 However, maintaining per-process, in addition to per-task stats, within the
 kernel has space and time overheads. To address this, the taskstats code
-accumalates each exiting task's statistics into a process-wide data structure.
-When the last task of a process exits, the process level data accumalated also
+accumulates each exiting task's statistics into a process-wide data structure.
+When the last task of a process exits, the process level data accumulated also
 gets sent to userspace (along with the per-task data).
 
 When a user queries to get per-tgid data, the sum of all other live threads in
-the group is added up and added to the accumalated total for previously exited
+the group is added up and added to the accumulated total for previously exited
 threads of the same thread group.
 
 Extending taskstats
index 34bf8f60d8f827a9b83f27747c265a27fe38928d..c6c9a9c10d7f88b5f894990e45878acadbb2ea64 100644 (file)
@@ -183,7 +183,7 @@ it, the pci dma mapping routines and associated data structures have now been
 modified to accomplish a direct page -> bus translation, without requiring
 a virtual address mapping (unlike the earlier scheme of virtual address
 -> bus translation). So this works uniformly for high-memory pages (which
-do not have a correponding kernel virtual address space mapping) and
+do not have a corresponding kernel virtual address space mapping) and
 low-memory pages.
 
 Note: Please refer to DMA-mapping.txt for a discussion on PCI high mem DMA
@@ -391,7 +391,7 @@ forced such requests to be broken up into small chunks before being passed
 on to the generic block layer, only to be merged by the i/o scheduler
 when the underlying device was capable of handling the i/o in one shot.
 Also, using the buffer head as an i/o structure for i/os that didn't originate
-from the buffer cache unecessarily added to the weight of the descriptors
+from the buffer cache unnecessarily added to the weight of the descriptors
 which were generated for each such chunk.
 
 The following were some of the goals and expectations considered in the
@@ -403,14 +403,14 @@ i.  Should be appropriate as a descriptor for both raw and buffered i/o  -
     for raw i/o.
 ii. Ability to represent high-memory buffers (which do not have a virtual
     address mapping in kernel address space).
-iii.Ability to represent large i/os w/o unecessarily breaking them up (i.e
+iii.Ability to represent large i/os w/o unnecessarily breaking them up (i.e
     greater than PAGE_SIZE chunks in one shot)
 iv. At the same time, ability to retain independent identity of i/os from
     different sources or i/o units requiring individual completion (e.g. for
     latency reasons)
 v.  Ability to represent an i/o involving multiple physical memory segments
     (including non-page aligned page fragments, as specified via readv/writev)
-    without unecessarily breaking it up, if the underlying device is capable of
+    without unnecessarily breaking it up, if the underlying device is capable of
     handling it.
 vi. Preferably should be based on a memory descriptor structure that can be
     passed around different types of subsystems or layers, maybe even
@@ -1013,7 +1013,7 @@ Characteristics:
 i. Binary tree
 AS and deadline i/o schedulers use red black binary trees for disk position
 sorting and searching, and a fifo linked list for time-based searching. This
-gives good scalability and good availablility of information. Requests are
+gives good scalability and good availability of information. Requests are
 almost always dispatched in disk sort order, so a cache is kept of the next
 request in sort order to prevent binary tree lookups.
 
index 9188337d8f6b8f2b3ee852463c72494164dfb398..babce13150265f173fc32dfa72ce1b91cf234afd 100644 (file)
@@ -1,7 +1,7 @@
 
-The cpufreq-nforce2 driver changes the FSB on nVidia nForce2 plattforms.
+The cpufreq-nforce2 driver changes the FSB on nVidia nForce2 platforms.
 
-This works better than on other plattforms, because the FSB of the CPU
+This works better than on other platforms, because the FSB of the CPU
 can be controlled independently from the PCI/AGP clock.
 
 The module has two options:
index 4868c34f75090fe75b4f6bb28f70c7638540c4cd..cc60d29b954cd394ccd1eba1c27b06bfc049302d 100644 (file)
@@ -54,8 +54,8 @@ additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
 
 ia64 and x86_64 use the number of disabled local apics in ACPI tables MADT
 to determine the number of potentially hot-pluggable cpus. The implementation
-should only rely on this to count the #of cpus, but *MUST* not rely on the
-apicid values in those tables for disabled apics. In the event BIOS doesnt
+should only rely on this to count the # of cpus, but *MUST* not rely on the
+apicid values in those tables for disabled apics. In the event BIOS doesn't
 mark such hot-pluggable cpus as disabled entries, one could use this
 parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
 
index 28c4f79662c2a84b05361d02f429b075e346380d..70690f1a14af53cd128ab0a553421044e28cd319 100644 (file)
@@ -92,7 +92,7 @@ Your cooperation is appreciated.
                  7 = /dev/full         Returns ENOSPC on write
                  8 = /dev/random       Nondeterministic random number gen.
                  9 = /dev/urandom      Faster, less secure random number gen.
-                10 = /dev/aio          Asyncronous I/O notification interface
+                10 = /dev/aio          Asynchronous I/O notification interface
                 11 = /dev/kmsg         Writes to this come out as printk's
   1 block      RAM disk
                  0 = /dev/ram0         First RAM disk
@@ -1093,7 +1093,7 @@ Your cooperation is appreciated.
 
  55 char       DSP56001 digital signal processor
                  0 = /dev/dsp56k       First DSP56001
- 55 block      Mylex DAC960 PCI RAID controller; eigth controller
+ 55 block      Mylex DAC960 PCI RAID controller; eighth controller
                  0 = /dev/rd/c7d0      First disk, whole disk
                  8 = /dev/rd/c7d1      Second disk, whole disk
                    ...
@@ -1456,7 +1456,7 @@ Your cooperation is appreciated.
                  1 = /dev/cum1         Callout device for ttyM1
                    ...
 
- 79 block      Compaq Intelligent Drive Array, eigth controller
+ 79 block      Compaq Intelligent Drive Array, eighth controller
                  0 = /dev/ida/c7d0     First logical drive whole disk
                 16 = /dev/ida/c7d1     Second logical drive whole disk
                    ...
@@ -1900,7 +1900,7 @@ Your cooperation is appreciated.
                  1 = /dev/av1          Second A/V card
                    ...
 
-111 block      Compaq Next Generation Drive Array, eigth controller
+111 block      Compaq Next Generation Drive Array, eighth controller
                  0 = /dev/cciss/c7d0   First logical drive, whole disk
                 16 = /dev/cciss/c7d1   Second logical drive, whole disk
                    ...
index 98b233cb8b36882a41c3e604315b179ab0ca3537..92d86f7271b4d960431e3333ce5d0de3b9f9889e 100644 (file)
@@ -92,7 +92,7 @@ struct device represents a single device. It mainly contains metadata
 describing the relationship the device has to other entities. 
 
 
-- Embedd a struct device in the bus-specific device type. 
+- Embed a struct device in the bus-specific device type. 
 
 
 struct pci_dev {
index 531239b2908210dd78a26809e23b570a8be1ad53..2ecd834585e64140fcaa064c27142a9b7fd23950 100644 (file)
@@ -71,7 +71,7 @@ eliminating the need for any additional ioctls.
 The disadvantage is that the driver/hardware has to manage the rest. For
 the application programmer it would be as simple as sending/receiving an
 array to/from the CI ioctls as defined in the Linux DVB API. No changes
-have been made in the API to accomodate this feature.
+have been made in the API to accommodate this feature.
 
 
 * Why the need for another CI interface ?
@@ -102,7 +102,7 @@ This CI interface follows the CI high level interface, which is not
 implemented by most applications. Hence this area is revisited.
 
 This CI interface is quite different in the case that it tries to
-accomodate all other CI based devices, that fall into the other categories
+accommodate all other CI based devices, that fall into the other categories.
 
 This means that this CI interface handles the EN50221 style tags in the
 Application layer only and no session management is taken care of by the
index 6a099edadd622f625e2606c9402916a227accf4e..60e361ba08c05ce491fd34a2eb73bc3194ca8c75 100644 (file)
@@ -62,7 +62,7 @@ res           : root device I/O resource
 bus_base_addr : slot 0 address on this bus
 slots        : max slot number to probe
 force_probe   : Probe even when slot 0 is empty (no EISA mainboard)
-dma_mask      : Default DMA mask. Usualy the bridge device dma_mask.
+dma_mask      : Default DMA mask. Usually the bridge device dma_mask.
 bus_nr       : unique bus id, set by eisa_root_register
 
 ** Driver :
index 060abb0c700485e1b23495be56714d64d6589b16..9e8811f92b84160451947366508957d26b750597 100644 (file)
@@ -3,7 +3,7 @@ Mount options for ADFS
 
   uid=nnn      All files in the partition will be owned by
                user id nnn.  Default 0 (root).
-  gid=nnn      All files in the partition willbe in group
+  gid=nnn      All files in the partition will be in group
                nnn.  Default 0 (root).
   ownmask=nnn  The permission mask for ADFS 'owner' permissions
                will be nnn.  Default 0700.
index c3a7afb5eabf337a8dc272220070c7e96bbc7d8f..b34cdb50eab466ca539a559228c5cfc6a18e6bde 100644 (file)
@@ -209,7 +209,7 @@ will happen for write(2).
 
 [struct config_group]
 
-A config_item cannot live in a vaccum.  The only way one can be created
+A config_item cannot live in a vacuum.  The only way one can be created
 is via mkdir(2) on a config_group.  This will trigger creation of a
 child item.
 
@@ -275,7 +275,7 @@ directory is not empty.
 
 [struct configfs_subsystem]
 
-A subsystem must register itself, ususally at module_init time.  This
+A subsystem must register itself, usually at module_init time.  This
 tells configfs to make the subsystem appear in the file tree.
 
        struct configfs_subsystem {
index a584f05403a412e778cf359e84d3690d5a22d1e4..3d74477389587b4be4d03950845c17a1e396a707 100644 (file)
@@ -111,7 +111,7 @@ For each connection the following files exist within this directory:
 
  'waiting'
 
-  The number of requests which are waiting to be transfered to
+  The number of requests which are waiting to be transferred to
   userspace or being processed by the filesystem daemon.  If there is
   no filesystem activity and 'waiting' is non-zero, then the
   filesystem is hung or deadlocked.
@@ -136,7 +136,7 @@ following will happen:
 
   2) If the request is not yet sent to userspace AND the signal is not
      fatal, then an 'interrupted' flag is set for the request.  When
-     the request has been successfully transfered to userspace and
+     the request has been successfully transferred to userspace and
      this flag is set, an INTERRUPT request is queued.
 
   3) If the request is already sent to userspace, then an INTERRUPT
index 33dc360c8e8916333e435aa6b1f98e3f0d20eb58..38aba03efc5e1451e91f63d3c9ea0afa3022d90f 100644 (file)
@@ -274,7 +274,7 @@ History
      Fixed race-condition in buffer code - it is in all filesystems in Linux;
         when reading device (cat /dev/hda) while creating files on it, files
         could be damaged
-2.02 Woraround for bug in breada in Linux. breada could cause accesses beyond
+2.02 Workaround for bug in breada in Linux. breada could cause accesses beyond
         end of partition
 2.03 Char, block devices and pipes are correctly created
      Fixed non-crashing race in unlink (Alexander Viro)
index 35f105b29e3e26bb4201049f663062989b4693b8..13ba649bda75dae1010891a62da6399ca25d7113 100644 (file)
@@ -337,7 +337,7 @@ Finally, for a mirrored volume, i.e. raid level 1, the table would look like
 this (note all values are in 512-byte sectors):
 
 --- cut here ---
-# Ofs Size   Raid   Log  Number Region Should Number Source  Start Taget  Start
+# Ofs Size   Raid   Log  Number Region Should Number Source  Start Target Start
 # in  of the type   type of log size   sync?  of     Device  in    Device in
 # vol volume            params              mirrors         Device       Device
 0    2056320 mirror core 2     16     nosync 2    /dev/hda1 0   /dev/hdb1 0
@@ -599,7 +599,7 @@ Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
        - Major bug fixes for reading files and volumes in corner cases which
          were being hit by Windows 2k/XP users.
 2.1.2:
-       - Major bug fixes aleviating the hangs in statfs experienced by some
+       - Major bug fixes alleviating the hangs in statfs experienced by some
          users.
 2.1.1:
        - Update handling of compressed files so people no longer get the
index 4389c684a80a66d402f464a4ecf3ed7a15bda1bb..af6defd10cb604fa4f0468ba6522ca30e57adda5 100644 (file)
@@ -30,7 +30,7 @@ Caveats
 Features which OCFS2 does not support yet:
        - sparse files
        - extended attributes
-       - shared writeable mmap
+       - shared writable mmap
        - loopback is supported, but data written will not
          be cluster coherent.
        - quotas
index 3355e6920105014bda194eb3a1c5360f37a33916..72af5de1effb44a93d907ed4e0117ec403a8257e 100644 (file)
@@ -1220,9 +1220,9 @@ applications are using mlock(), or if you are running with no swap then
 you probably should increase the lower_zone_protection setting.
 
 The units of this tunable are fairly vague.  It is approximately equal
-to "megabytes".  So setting lower_zone_protection=100 will protect around 100
+to "megabytes," so setting lower_zone_protection=100 will protect around 100
 megabytes of the lowmem zone from user allocations.  It will also make
-those 100 megabytes unavaliable for use by applications and by
+those 100 megabytes unavailable for use by applications and by
 pagecache, so there is a cost.
 
 The effects of this tunable may be observed by monitoring
@@ -1538,10 +1538,10 @@ TCP settings
 tcp_ecn
 -------
 
-This file controls the use of the ECN bit in the IPv4 headers, this is a new
+This file controls the use of the ECN bit in the IPv4 headers. This is a new
 feature about Explicit Congestion Notification, but some routers and firewalls
-block trafic that has this bit set, so it could be necessary to echo 0 to
-/proc/sys/net/ipv4/tcp_ecn, if you want to talk to this sites. For more info
+block traffic that has this bit set, so it could be necessary to echo 0 to
+/proc/sys/net/ipv4/tcp_ecn if you want to talk to these sites. For more info
 you could read RFC2481.
 
 tcp_retrans_collapse
index 982645a1981de148771c844c41e7affa6373b3aa..1343d118a9b2d63815355cb28f18605c565653f6 100644 (file)
@@ -210,7 +210,7 @@ FILES
    /signal2
        The two signal notification channels of an SPU.  These  are  read-write
        files  that  operate  on  a 32 bit word.  Writing to one of these files
-       triggers an interrupt on the SPU. The  value  writting  to  the  signal
+       triggers an interrupt on the SPU.  The  value  written  to  the  signal
        files can be read from the SPU through a channel read or from host user
        space through the file.  After the value has been read by the  SPU,  it
        is  reset  to zero.  The possible operations on an open signal1 or sig-
index 6ce5aa9abbc5918cb961c47f55f0ebd5bbb64947..9304fb36ae8a91671693bde1fd2644b3085f42f2 100644 (file)
@@ -59,7 +59,7 @@ the following things on the "Kernel Hacking" tab:
 Then build as usual, download to the board and execute. Note that if
 "Immediate activation" was selected, then the kernel will wait for GDB to
 attach. If not, then the kernel will boot immediately and GDB will have to
-interupt it or wait for an exception to occur if before doing anything with
+interrupt it or wait for an exception to occur before doing anything with
 the kernel.
 
 
index 8b0a5fc8bfd96cc64fe09f165b740f272196f654..aaa1cec86f0bb869c674ea2faf7a5506770b40ad 100644 (file)
@@ -156,7 +156,7 @@ with the main kernel in this regard. Hence the debug mode code (gdbstub) is
 almost completely self-contained. The only external code used is the
 sprintf family of functions.
 
-Futhermore, break.S is so complicated because single-step mode does not
+Furthermore, break.S is so complicated because single-step mode does not
 switch off on entry to an exception. That means unless manually disabled,
 single-stepping will blithely go on stepping into things like interrupts.
 See gdbstub.txt for more information.
index 0bf38baa2db96a162e8f641eac90de097487cbf4..786c3a766995f09ad8ad443c042be0af0a6484f3 100644 (file)
@@ -390,5 +390,5 @@ mlord@pobox.com
 Wed Apr 17 22:52:44 CEST 2002 edited by Marcin Dalecki, the current
 maintainer.
 
-Wed Aug 20 22:31:29 CEST 2003 updated ide boot uptions to current ide.c
+Wed Aug 20 22:31:29 CEST 2003 updated ide boot options to current ide.c
 comments at 2.6.0-test4 time. Maciej Soltysiak <solt@dns.toxicfilms.tv>
index 4f0e89df5c5191cbc166adc5f86e23f69aac6ba2..7dc4f175943cff2854dd1d54ff93c03be98b2b56 100644 (file)
@@ -91,8 +91,8 @@ JOY1DAT   Y7  Y6  Y5  Y4  Y3  Y2  Y1  Y0     X7  X6  X5  X4  X3  X2  X1  X0
          |   1    | M0HQ     | JOY0DAT Horizontal Clock (quadrature)   |
          |   2    | M0V      | JOY0DAT Vertical Clock                  |
          |   3    | M0VQ     | JOY0DAT Vertical Clock  (quadrature)    |
-         |   4    | M1V      | JOY1DAT Horizontall Clock               |
-         |   5    | M1VQ     | JOY1DAT Horizontall Clock (quadrature)  |
+         |   4    | M1V      | JOY1DAT Horizontal Clock                |
+         |   5    | M1VQ     | JOY1DAT Horizontal Clock (quadrature)   |
          |   6    | M1V      | JOY1DAT Vertical Clock                  |
          |   7    | M1VQ     | JOY1DAT Vertical Clock (quadrature)     |
          +--------+----------+-----------------------------------------+
index 1e7e5853ba4c71eafdbc1e9f57cc749826b658c4..668f4d0d97d60efe0f8fd99538e4b259b19874ff 100644 (file)
@@ -103,7 +103,7 @@ LEFT=0x74 & RIGHT=0x75).
 
 5.1 Joystick Event Reporting
 
-In this mode, the ikbd generates a record whever the joystick position is
+In this mode, the ikbd generates a record whenever the joystick position is
 changed (i.e. for each opening or closing of a joystick switch or trigger).
 
 The joystick event record is two bytes of the form:
@@ -277,8 +277,8 @@ default to 1 at RESET (or power-up).
 9.7 SET MOUSE SCALE
 
     0x0C
-    X                   ; horizontal mouse ticks per internel X
-    Y                   ; vertical mouse ticks per internel Y
+    X                   ; horizontal mouse ticks per internal X
+    Y                   ; vertical mouse ticks per internal Y
 
 This command sets the scale factor for the ABSOLUTE MOUSE POSITIONING mode.
 In this mode, the specified number of mouse phase changes ('clicks') must
@@ -323,7 +323,7 @@ mouse position.
     0x0F
 
 This command makes the origin of the Y axis to be at the bottom of the
-logical coordinate system internel to the ikbd for all relative or absolute
+logical coordinate system internal to the ikbd for all relative or absolute
 mouse motion. This causes mouse motion toward the user to be negative in sign
 and away from the user to be positive.
 
@@ -597,8 +597,8 @@ mode or FIRE BUTTON MONITORING mode.
 
 10. SCAN CODES
 
-The key scan codes return by the ikbd are chosen to simplify the
-implementaion of GSX.
+The key scan codes returned by the ikbd are chosen to simplify the
+implementation of GSX.
 
 GSX Standard Keyboard Mapping.
 
index 0a8c97e87d47ee6fce48dbe96ff93e6c42d6fa5d..5360e434486ced9970c6c71454b085b3ff617061 100644 (file)
@@ -134,7 +134,7 @@ Reading /sys/../lineX will return the format string with its current value:
   888888888888
   Linux Rocks!
 
-Writing to /sys/../lineX will set the coresponding LCD line.
+Writing to /sys/../lineX will set the corresponding LCD line.
  - Excess characters are ignored.
  - If less characters are written than allowed, the remaining digits are
    unchanged.
index 8ec32cc49eb107bdab130a6cb24c54b6da9dfcb2..62d4af44ec4a2e0a4987d48687dc0bd1d01dcbf0 100644 (file)
@@ -735,7 +735,7 @@ CDROM_DISC_STATUS           Get disc type, etc.
            Ok, this is where problems start.  The current interface for
            the CDROM_DISC_STATUS ioctl is flawed.  It makes the false
            assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc.
-           Unfortunatly, while this is often the case, it is also
+           Unfortunately, while this is often the case, it is also
            very common for CDs to have some tracks with data, and some
            tracks with audio.  Just because I feel like it, I declare
            the following to be the best way to cope.  If the CD has
index 50f4eddf899cac4a06724355a2fd26299ab6909d..4b3d6710c504c6257b7abd7d03129f9320e7c2c5 100644 (file)
@@ -227,9 +227,9 @@ more details, with real examples.
        be included in a library, lib.a.
        All objects listed with lib-y are combined in a single
        library for that directory.
-       Objects that are listed in obj-y and additionaly listed in
-       lib-y will not be included in the library, since they will anyway
-       be accessible.
+       Objects that are listed in obj-y and additionally listed in
+       lib-y will not be included in the library, since they will
+       be accessible anyway.
        For consistency, objects listed in lib-m will be included in lib.a.
 
        Note that the same kbuild makefile may list files to be built-in
@@ -535,7 +535,7 @@ Both possibilities are described in the following.
        Host programs can be made up based on composite objects.
        The syntax used to define composite objects for host programs is
        similar to the syntax used for kernel objects.
-       $(<executeable>-objs) lists all objects used to link the final
+       $(<executable>-objs) lists all objects used to link the final
        executable.
 
        Example:
@@ -1022,7 +1022,7 @@ When kbuild executes, the following steps are followed (roughly):
        In this example, there are two possible targets, requiring different
        options to the linker. The linker options are specified using the
        LDFLAGS_$@ syntax - one for each potential target.
-       $(targets) are assinged all potential targets, by which kbuild knows
+       $(targets) are assigned all potential targets, by which kbuild knows
        the targets and will:
                1) check for commandline changes
                2) delete target during make clean
index 3da586bc7859a3f982255547472fcfd5193eaf6a..60c665d9cfaa883416c79efb0fb99245f610a1e2 100644 (file)
@@ -304,7 +304,7 @@ about the status of the key service:
        R       Revoked
        D       Dead
        Q       Contributes to user's quota
-       U       Under contruction by callback to userspace
+       U       Under construction by callback to userspace
        N       Negative key
 
      This file must be enabled at kernel configuration time as it allows anyone
index c487186eb2b93ac9a0180561396470bce867e4b3..6f639e3473af550bbf384a506fcb9074a60dca2b 100644 (file)
@@ -121,7 +121,7 @@ contains the following options:
 MAX_AGE:
 
 Maximum time, in seconds, of hard drive spindown time that you are
-confortable with. Worst case, it's possible that you could lose this
+comfortable with. Worst case, it's possible that you could lose this
 amount of work if your battery fails while you're in laptop mode.
 
 MINIMUM_BATTERY_MINUTES:
@@ -235,7 +235,7 @@ It should be installed as /etc/default/laptop-mode on Debian, and as
 
 --------------------CONFIG FILE BEGIN-------------------------------------------
 # Maximum time, in seconds, of hard drive spindown time that you are
-# confortable with. Worst case, it's possible that you could lose this
+# comfortable with. Worst case, it's possible that you could lose this
 # amount of work if your battery fails you while in laptop mode.
 #MAX_AGE=600
 
@@ -350,7 +350,7 @@ fi
 # set defaults instead:
 
 # Maximum time, in seconds, of hard drive spindown time that you are
-# confortable with. Worst case, it's possible that you could lose this
+# comfortable with. Worst case, it's possible that you could lose this
 # amount of work if your battery fails you while in laptop mode.
 MAX_AGE=${MAX_AGE:-'600'}
 
@@ -699,7 +699,7 @@ ACPI integration
 Dax Kelson submitted this so that the ACPI acpid daemon will
 kick off the laptop_mode script and run hdparm. The part that
 automatically disables laptop mode when the battery is low was
-writen by Jan Topinski.
+written by Jan Topinski.
 
 -----------------/etc/acpi/events/ac_adapter BEGIN------------------------------
 event=ac_adapter
index 7751704b6db1418e6eb3ecb7a273b34730f66fac..58408dd023c77e0e0712d02811fc0238c5ee1742 100644 (file)
@@ -212,7 +212,7 @@ There are some minimal guarantees that may be expected of a CPU:
 
        STORE *X = c, d = LOAD *X
 
-     (Loads and stores overlap if they are targetted at overlapping pieces of
+     (Loads and stores overlap if they are targeted at overlapping pieces of
      memory).
 
 And there are a number of things that _must_ or _must_not_ be assumed:
index 93af3e87c65b470828d1fd62193c2ac5590a3e75..fb8dc6422a5212488f362e1a48711afe452f0482 100644 (file)
@@ -95,8 +95,8 @@ There are two types of event register ACK mechanisms.
                Move all to dev->poll()
 
 C) Ability to detect new work correctly.
-NAPI works by shutting down event interrupts when theres work and
-turning them on when theres none. 
+NAPI works by shutting down event interrupts when there's work and
+turning them on when there's none. 
 New packets might show up in the small window while interrupts were being 
 re-enabled (refer to appendix 2).  A packet might sneak in during the period 
 we are enabling interrupts. We only get to know about such a packet when the 
@@ -114,7 +114,7 @@ Locking rules and environmental guarantees
 only one CPU can pick the initial interrupt and hence the initial
 netif_rx_schedule(dev);
 - The core layer invokes devices to send packets in a round robin format.
-This implies receive is totaly lockless because of the guarantee only that 
+This implies receive is totally lockless because of the guarantee that only 
 one CPU is executing it.
 -  contention can only be the result of some other CPU accessing the rx
 ring. This happens only in close() and suspend() (when these methods
@@ -510,7 +510,7 @@ static int my_poll (struct net_device *dev, int *budget)
                        an interrupt will be generated */
                         goto done;
        }
-       /* done! at least thats what it looks like ;->
+       /* done! at least that's what it looks like ;->
        if new packets came in after our last check on status bits
        they'll be caught by the while check and we go back and clear them 
        since we havent exceeded our quota */
@@ -535,11 +535,11 @@ done:
         * 1. it can race with disabling irqs in irq handler (which are done to 
        * schedule polls)
         * 2. it can race with dis/enabling irqs in other poll threads
-        * 3. if an irq raised after the begining of the outer  beginning 
-        * loop(marked in the code above), it will be immediately
+        * 3. if an irq raised after the beginning of the outer beginning 
+        * loop (marked in the code above), it will be immediately
         * triggered here.
         *
-        * Summarizing: the logic may results in some redundant irqs both
+        * Summarizing: the logic may result in some redundant irqs both
         * due to races in masking and due to too late acking of already
         * processed irqs. The good news: no events are ever lost.
         */
@@ -601,7 +601,7 @@ a)
        
 5) dev->close() and dev->suspend() issues
 ==========================================
-The driver writter neednt worry about this. The top net layer takes
+The driver writer needn't worry about this; the top net layer takes
 care of it.
 
 6) Adding new Stats to /proc 
@@ -622,9 +622,9 @@ FC should be programmed to apply in the case when the system cant pull out
 packets fast enough i.e send a pause only when you run out of rx buffers.
 Note FC in itself is a good solution but we have found it to not be
 much of a commodity feature (both in NICs and switches) and hence falls
-under the same category as using NIC based mitigation. Also experiments
-indicate that its much harder to resolve the resource allocation
-issue (aka lazy receiving that NAPI offers) and hence quantify its usefullness
+under the same category as using NIC based mitigation. Also, experiments
+indicate that it's much harder to resolve the resource allocation
+issue (aka lazy receiving that NAPI offers) and hence quantify its usefulness
 proved harder. In any case, FC works even better with NAPI but is not
 necessary.
 
@@ -678,10 +678,10 @@ routine:
 CSR5 bit of interest is only the rx status. 
 If you look at the last if statement: 
 you just finished grabbing all the packets from the rx ring .. you check if
-status bit says theres more packets just in ... it says none; you then
+status bit says there are more packets just in ... it says none; you then
 enable rx interrupts again; if a new packet just came in during this check,
 we are counting that CSR5 will be set in that small window of opportunity
-and that by re-enabling interrupts, we would actually triger an interrupt
+and that by re-enabling interrupts, we would actually trigger an interrupt
 to register the new packet for processing.
 
 [The above description nay be very verbose, if you have better wording 
index 64896470e279b7d4675c46c4673e024026bd815c..6387d3decf858a7c83d2ae65f06c6eccdfa7dfae 100644 (file)
@@ -248,7 +248,7 @@ c) The driver's hardware probe routine is designed to avoid
    with device probing.  To avoid this behaviour, add one
    to the `io=' module parameter.  This doesn't actually change
    the I/O address, but it is a flag to tell the driver
-   topartially initialise the hardware before trying to
+   to partially initialise the hardware before trying to
    identify the card.  This could be dangerous if you are
    not sure that there is a cs89x0 card at the provided address.
 
@@ -620,8 +620,8 @@ I/O Address         Device                        IRQ      Device
                                                 12       Mouse (PS/2)                              
 Memory Address  Device                          13       Math Coprocessor
 --------------  ---------------------           14       Hard Disk controller
-A000-BFFF      EGA Graphics Adpater
-A000-C7FF      VGA Graphics Adpater
+A000-BFFF      EGA Graphics Adapter
+A000-C7FF      VGA Graphics Adapter
 B000-BFFF      Mono Graphics Adapter
 B800-BFFF      Color Graphics Adapter
 E000-FFFF      AT BIOS
index 493203a080a8baf1690bbd1ac8654e23c195f397..55eac4a784e2fdf598bb653de891baf685bfb5b1 100644 (file)
@@ -81,7 +81,7 @@ Installation
     1M. The RAM size decides the number of buffers and buffer size. The default 
     size and number of buffers are set as following: 
 
-          Totol    Rx RAM   Tx RAM   Rx Buf   Tx Buf   Rx buf   Tx buf
+          Total    Rx RAM   Tx RAM   Rx Buf   Tx Buf   Rx buf   Tx buf
          RAM size   size     size     size     size      cnt      cnt
          --------  ------   ------   ------   ------   ------   ------
            128K      64K      64K      10K      10K       6        6
index 12a008a5c22158999b94dbb0693de65469b3a59c..5a232d946be39fd425c1f9b6c5e821b902b2d465 100644 (file)
@@ -284,7 +284,7 @@ the necessary memory, so normally limits can be reached.
 -------------------
 
 If you check the source code you will see that what I draw here as a frame
-is not only the link level frame. At the begining of each frame there is a 
+is not only the link level frame. At the beginning of each frame there is a 
 header called struct tpacket_hdr used in PACKET_MMAP to hold link level's frame
 meta information like timestamp. So what we draw here a frame it's really 
 the following (from include/linux/if_packet.h):
index c8eee23be8c0a43d9c6f998691d44d0296626921..c6cf4a3c16e029258e3c6790ee3b5da441259eff 100644 (file)
@@ -63,8 +63,8 @@ Current:
 Result: OK: 13101142(c12220741+d880401) usec, 10000000 (60byte,0frags)
   763292pps 390Mb/sec (390805504bps) errors: 39664
 
-Confguring threads and devices
-==============================
+Configuring threads and devices
+================================
 This is done via the /proc interface easiest done via pgset in the scripts
 
 Examples:
@@ -116,7 +116,7 @@ Examples:
                                         there must be no spaces between the
                                         arguments. Leading zeros are required.
                                         Do not set the bottom of stack bit,
-                                        thats done automatically. If you do
+                                        that's done automatically. If you do
                                         set the bottom of stack bit, that
                                         indicates that you want to randomly
                                         generate that address and the flag
index 59cb915c371312ef815793e6f8eb13a15e8c6707..5e21f7cb638332f3eac08536c580dbc26b94298f 100644 (file)
@@ -25,7 +25,7 @@ up into 3 parts because of the length of the line):
 
    1000        0 54165785 4 cd1e6040 25 4 27 3 -1
     |          |    |     |    |     |  | |  | |--> slow start size threshold, 
-    |          |    |     |    |     |  | |  |      or -1 if the treshold
+    |          |    |     |    |     |  | |  |      or -1 if the threshold
     |          |    |     |    |     |  | |  |      is >= 0xFFFF
     |          |    |     |    |     |  | |  |----> sending congestion window
     |          |    |     |    |     |  | |-------> (ack.quick<<1)|ack.pingpong
index 4e1cc745ec63de85db97de493ebd8ed2365f416c..8590a954df1da94cedae5a71dac6c398b887d1c9 100644 (file)
@@ -346,7 +346,7 @@ Possible modes:
       depending on the load of the system. If the driver detects that the
       system load is too high, the driver tries to shield the system against 
       too much network load by enabling interrupt moderation. If - at a later
-      time - the CPU utilizaton decreases again (or if the network load is 
+      time - the CPU utilization decreases again (or if the network load is 
       negligible) the interrupt moderation will automatically be disabled.
 
 Interrupt moderation should be used when the driver has to handle one or more
index 2f04c9267f890217c0b7d95900d4b0bb22db0ab4..32d3b916afadfe19718ce5f00ffd436a97481402 100644 (file)
@@ -126,7 +126,7 @@ comx0/boardnum      - board number of the SliceCom in the PC (using the 'natural'
 
 Though the options below are to be set on a single interface, they apply to the
 whole board. The restriction, to use them on 'UP' interfaces, is because the 
-command sequence below could lead to unpredicable results.
+command sequence below could lead to unpredictable results.
 
        # echo 0        >boardnum
        # echo internal >clock_source
index 0cf6541476342b237e34822338984d8b2426448d..653978dcea7f0d8e7a5e0515a541b12bff3591c0 100644 (file)
@@ -412,7 +412,7 @@ beta-2.1.4 Jul 2000         o Dynamic interface configuration:
 
 beta3-2.1.4 Jul 2000           o X25 M_BIT Problem fix.
                                o Added the Multi-Port PPP
-                                 Updated utilites for the Multi-Port PPP.
+                                 Updated utilities for the Multi-Port PPP.
 
 2.1.4  Aut 2000
                                o In X25API:
@@ -444,13 +444,13 @@ beta1-2.1.5       Nov 15 2000
                                        
                                o Cpipemon
                                        - Added set FT1 commands to the cpipemon. Thus CSU/DSU
-                                         configuraiton can be performed using cpipemon.
+                                         configuration can be performed using cpipemon.
                                          All systems that cannot run cfgft1 GUI utility should
                                          use cpipemon to configure the on board CSU/DSU.
 
 
                                o Keyboard Led Monitor/Debugger
-                                       - A new utilty /usr/sbin/wpkbdmon uses keyboard leds
+                                       - A new utility /usr/sbin/wpkbdmon uses keyboard leds
                                          to convey operational statistic information of the 
                                          Sangoma WANPIPE cards.
                                        NUM_LOCK    = Line State  (On=connected,    Off=disconnected)
@@ -464,7 +464,7 @@ beta1-2.1.5         Nov 15 2000
                                        - Appropriate number of devices are dynamically loaded 
                                          based on the number of Sangoma cards found.
 
-                                         Note: The kernel configuraiton option 
+                                         Note: The kernel configuration option 
                                                CONFIG_WANPIPE_CARDS has been taken out.
                                        
                                o Fixed the Frame Relay and Chdlc network interfaces so they are
index 9ff966bf76e65be0fc6281d879d673ce0f861143..28037aa1846c89bbf8082007b5e10e470000ac94 100644 (file)
@@ -184,7 +184,7 @@ static const struct pnp_id pnp_dev_table[] = {
 Please note that the character 'X' can be used as a wild card in the function
 portion (last four characters).
 ex:
-       /* Unkown PnP modems */
+       /* Unknown PnP modems */
        {       "PNPCXXX",              UNKNOWN_DEV     },
 
 Supported PnP card IDs can optionally be defined.
index 24edf25b3bb7f17179f23ca644bd3f341943b19a..c750f9f2e76e661d723e15658334f546ef7e06a7 100644 (file)
@@ -153,7 +153,7 @@ Description:
        events, which is implicit if it doesn't even support it in the first
        place).
 
-       Note that the PMC Register in the device's PM Capabilties has a bitmask
+       Note that the PMC Register in the device's PM Capabilities has a bitmask
        of the states it supports generating PME# from. D3hot is bit 3 and
        D3cold is bit 4. So, while a value of 4 as the state may not seem
        semantically correct, it is. 
@@ -268,7 +268,7 @@ to wake the system up. (However, it is possible that a device may support
 some non-standard way of generating a wake event on sleep.)
 
 Bits 15:11 of the PMC (Power Mgmt Capabilities) Register in a device's
-PM Capabilties describe what power states the device supports generating a 
+PM Capabilities describe what power states the device supports generating a 
 wake event from:
 
 +------------------+
index 3e5e5d3ff419a2138b7faa908f49f7d1a27bb3fe..0931a330d362c59dd2cb4ddf7d0fb4eb864f247b 100644 (file)
@@ -62,7 +62,7 @@ setup via another operating system for it to use. Despite the
 inconvenience, this method requires minimal work by the kernel, since
 the firmware will also handle restoring memory contents on resume. 
 
-If the kernel is responsible for persistantly saving state, a mechanism 
+If the kernel is responsible for persistently saving state, a mechanism
 called 'swsusp' (Swap Suspend) is used to write memory contents to
 free swap space. swsusp has some restrictive requirements, but should
 work in most cases. Some, albeit outdated, documentation can be found
index 9ea2208b43b5f712c74b3e9d40762fd47a1a7706..e635e6f1e316ca549834716c95fccc3c61b35748 100644 (file)
@@ -153,7 +153,7 @@ add:
 
 If the thread is needed for writing the image to storage, you should
 instead set the PF_NOFREEZE process flag when creating the thread (and
-be very carefull).
+be very careful).
 
 
 Q: What is the difference between "platform", "shutdown" and
index 27b457c09729e29bafaade3bc240bfaebf755e01..4ac2d641fcb6a9b848fdb3c0761ea57b0ec25cb4 100644 (file)
                          - Change version 16 format to always align
                            property data to 4 bytes. Since tokens are
                            already aligned, that means no specific
-                           required alignement between property size
+                           required alignment between property size
                            and property data. The old style variable
                            alignment would make it impossible to do
                            "simple" insertion of properties using
                            memove (thanks Milton for
                            noticing). Updated kernel patch as well
-                        - Correct a few more alignement constraints
+                        - Correct a few more alignment constraints
                         - Add a chapter about the device-tree
                            compiler and the textural representation of
                            the tree that can be "compiled" by dtc.
@@ -854,7 +854,7 @@ address which can extend beyond that limit.
       console device if any. Typically, if you have serial devices on
       your board, you may want to put the full path to the one set as
       the default console in the firmware here, for the kernel to pick
-      it up as it's own default console. If you look at the funciton
+      it up as its own default console. If you look at the function
       set_preferred_console() in arch/ppc64/kernel/setup.c, you'll see
       that the kernel tries to find out the default console and has
       knowledge of various types like 8250 serial ports. You may want
@@ -1124,7 +1124,7 @@ should have the following properties:
        - interrupt-parent : contains the phandle of the interrupt
           controller which handles interrupts for this device
        - interrupts : a list of tuples representing the interrupt
-          number and the interrupt sense and level for each interupt
+          number and the interrupt sense and level for each interrupt
           for this device.
 
 This information is used by the kernel to build the interrupt table
index 8529a17ffaa16a17060d38232085f99e5e8a3624..535f69fab45fa5c1632505abb60b2a119e4c8d8e 100644 (file)
@@ -170,7 +170,7 @@ any point:
  1) the 'head' pointer or an subsequent linked list pointer
     is not a valid address of a user space word
  2) the calculated location of the 'lock word' (address plus
-    'offset') is not the valud address of a 32 bit user space
+    'offset') is not the valid address of a 32 bit user space
     word
  3) if the list contains more than 1 million (subject to
     future kernel configuration changes) elements.
index 76e8064b8c3a5ccb60e6cbb2f55ad5d455d097b0..0a9446a53bd1cd714e97c38695ce0d3c8a883ce8 100644 (file)
@@ -181,7 +181,7 @@ for new threads, without the need of another syscall.]
 So there is virtually zero overhead for tasks not using robust futexes,
 and even for robust futex users, there is only one extra syscall per
 thread lifetime, and the cleanup operation, if it happens, is fast and
-straightforward. The kernel doesnt have any internal distinction between
+straightforward. The kernel doesn't have any internal distinction between
 robust and normal futexes.
 
 If a futex is found to be held at exit time, the kernel sets the
index 2a58f985795ad4b28ad4bc86ebcca10527e8c14e..7cf1ec5bcdd3b37854ec34ebc085cd3be4532ee7 100644 (file)
@@ -1,12 +1,49 @@
 
-       Real Time Clock Driver for Linux
-       ================================
+       Real Time Clock (RTC) Drivers for Linux
+       =======================================
+
+When Linux developers talk about a "Real Time Clock", they usually mean
+something that tracks wall clock time and is battery backed so that it
+works even with system power off.  Such clocks will normally not track
+the local time zone or daylight savings time -- unless they dual boot
+with MS-Windows -- but will instead be set to Coordinated Universal Time
+(UTC, formerly "Greenwich Mean Time").
+
+The newest non-PC hardware tends to just count seconds, like the time(2)
+system call reports, but RTCs also very commonly represent time using
+the Gregorian calendar and 24 hour time, as reported by gmtime(3).
+
+Linux has two largely-compatible userspace RTC API families you may
+need to know about:
+
+    *  /dev/rtc ... is the RTC provided by PC compatible systems,
+       so it's not very portable to non-x86 systems.
+
+    *  /dev/rtc0, /dev/rtc1 ... are part of a framework that's
+       supported by a wide variety of RTC chips on all systems.
+
+Programmers need to understand that the PC/AT functionality is not
+always available, and some systems can do much more.  That is, the
+RTCs use the same API to make requests in both RTC frameworks (using
+different filenames of course), but the hardware may not offer the
+same functionality.  For example, not every RTC is hooked up to an
+IRQ, so they can't all issue alarms; and where standard PC RTCs can
+only issue an alarm up to 24 hours in the future, other hardware may
+be able to schedule one any time in the upcoming century.
+
+
+       Old PC/AT-Compatible driver:  /dev/rtc
+       --------------------------------------
 
 All PCs (even Alpha machines) have a Real Time Clock built into them.
 Usually they are built into the chipset of the computer, but some may
 actually have a Motorola MC146818 (or clone) on the board. This is the
 clock that keeps the date and time while your computer is turned off.
 
+ACPI has standardized that MC146818 functionality, and extended it in
+a few ways (enabling longer alarm periods, and wake-from-hibernate).
+That functionality is NOT exposed in the old driver.
+
 However it can also be used to generate signals from a slow 2Hz to a
 relatively fast 8192Hz, in increments of powers of two. These signals
 are reported by interrupt number 8. (Oh! So *that* is what IRQ 8 is
@@ -63,223 +100,331 @@ Rather than write 50 pages describing the ioctl() and so on, it is
 perhaps more useful to include a small test program that demonstrates
 how to use them, and demonstrates the features of the driver. This is
 probably a lot more useful to people interested in writing applications
-that will be using this driver.
+that will be using this driver.  See the code at the end of this document.
+
+(The original /dev/rtc driver was written by Paul Gortmaker.)
+
+
+       New portable "RTC Class" drivers:  /dev/rtcN
+       --------------------------------------------
+
+Because Linux supports many non-ACPI and non-PC platforms, some of which
+have more than one RTC style clock, it needed a more portable solution
+than expecting a single battery-backed MC146818 clone on every system.
+Accordingly, a new "RTC Class" framework has been defined.  It offers
+three different userspace interfaces:
+
+    *  /dev/rtcN ... much the same as the older /dev/rtc interface
+
+    *  /sys/class/rtc/rtcN ... sysfs attributes support readonly
+       access to some RTC attributes.
+
+    *  /proc/driver/rtc ... the first RTC (rtc0) may expose itself
+       using a procfs interface.  More information is (currently) shown
+       here than through sysfs.
+
+The RTC Class framework supports a wide variety of RTCs, ranging from those
+integrated into embeddable system-on-chip (SOC) processors to discrete chips
+using I2C, SPI, or some other bus to communicate with the host CPU.  There's
+even support for PC-style RTCs ... including the features exposed on newer PCs
+through ACPI.
+
+The new framework also removes the "one RTC per system" restriction.  For
+example, maybe the low-power battery-backed RTC is a discrete I2C chip, but
+a high functionality RTC is integrated into the SOC.  That system might read
+the system clock from the discrete RTC, but use the integrated one for all
+other tasks, because of its greater functionality.
+
+The ioctl() calls supported by /dev/rtc are also supported by the RTC class
+framework.  However, because the chips and systems are not standardized,
+some PC/AT functionality might not be provided.  And in the same way, some
+newer features -- including those enabled by ACPI -- are exposed by the
+RTC class framework, but can't be supported by the older driver.
+
+    *  RTC_RD_TIME, RTC_SET_TIME ... every RTC supports at least reading
+       time, returning the result as a Gregorian calendar date and 24 hour
+       wall clock time.  To be most useful, this time may also be updated.
+
+    *  RTC_AIE_ON, RTC_AIE_OFF, RTC_ALM_SET, RTC_ALM_READ ... when the RTC
+       is connected to an IRQ line, it can often issue an alarm IRQ up to
+       24 hours in the future.
+
+    *  RTC_WKALM_SET, RTC_WKALM_READ ... RTCs that can issue alarms beyond
+       the next 24 hours use a slightly more powerful API, which supports
+       setting the longer alarm time and enabling its IRQ using a single
+       request (using the same model as EFI firmware).
+
+    *  RTC_UIE_ON, RTC_UIE_OFF ... if the RTC offers IRQs, it probably
+       also offers update IRQs whenever the "seconds" counter changes.
+       If needed, the RTC framework can emulate this mechanism.
+
+    *  RTC_PIE_ON, RTC_PIE_OFF, RTC_IRQP_SET, RTC_IRQP_READ ... another
+       feature often accessible with an IRQ line is a periodic IRQ, issued
+       at settable frequencies (usually 2^N Hz).
+
+In many cases, the RTC alarm can be a system wake event, used to force
+Linux out of a low power sleep state (or hibernation) back to a fully
+operational state.  For example, a system could enter a deep power saving
+state until it's time to execute some scheduled tasks.
 
-                                               Paul Gortmaker
 
 -------------------- 8< ---------------- 8< -----------------------------
 
 /*
- *     Real Time Clock Driver Test/Example Program
+ *      Real Time Clock Driver Test/Example Program
  *
- *     Compile with:
- *             gcc -s -Wall -Wstrict-prototypes rtctest.c -o rtctest
+ *      Compile with:
+ *                  gcc -s -Wall -Wstrict-prototypes rtctest.c -o rtctest
  *
- *     Copyright (C) 1996, Paul Gortmaker.
+ *      Copyright (C) 1996, Paul Gortmaker.
  *
- *     Released under the GNU General Public License, version 2,
- *     included herein by reference.
+ *      Released under the GNU General Public License, version 2,
+ *      included herein by reference.
  *
  */
 
 #include <stdio.h>
-#include <stdlib.h>
 #include <linux/rtc.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
 #include <sys/types.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <stdlib.h>
 #include <errno.h>
 
-int main(void) {
-
-int i, fd, retval, irqcount = 0;
-unsigned long tmp, data;
-struct rtc_time rtc_tm;
 
-fd = open ("/dev/rtc", O_RDONLY);
+/*
+ * This expects the new RTC class driver framework, working with
+ * clocks that will often not be clones of what the PC-AT had.
+ * Use the command line to specify another RTC if you need one.
+ */
+static const char default_rtc[] = "/dev/rtc0";
+
+
+int main(int argc, char **argv)
+{
+       int i, fd, retval, irqcount = 0;
+       unsigned long tmp, data;
+       struct rtc_time rtc_tm;
+       const char *rtc = default_rtc;
+
+       switch (argc) {
+       case 2:
+               rtc = argv[1];
+               /* FALLTHROUGH */
+       case 1:
+               break;
+       default:
+               fprintf(stderr, "usage:  rtctest [rtcdev]\n");
+               return 1;
+       }
 
-if (fd ==  -1) {
-       perror("/dev/rtc");
-       exit(errno);
-}
+       fd = open(rtc, O_RDONLY);
 
-fprintf(stderr, "\n\t\t\tRTC Driver Test Example.\n\n");
+       if (fd ==  -1) {
+               perror(rtc);
+               exit(errno);
+       }
 
-/* Turn on update interrupts (one per second) */
-retval = ioctl(fd, RTC_UIE_ON, 0);
-if (retval == -1) {
-       perror("ioctl");
-       exit(errno);
-}
+       fprintf(stderr, "\n\t\t\tRTC Driver Test Example.\n\n");
 
-fprintf(stderr, "Counting 5 update (1/sec) interrupts from reading /dev/rtc:");
-fflush(stderr);
-for (i=1; i<6; i++) {
-       /* This read will block */
-       retval = read(fd, &data, sizeof(unsigned long));
+       /* Turn on update interrupts (one per second) */
+       retval = ioctl(fd, RTC_UIE_ON, 0);
        if (retval == -1) {
-               perror("read");
+               if (errno == ENOTTY) {
+                       fprintf(stderr,
+                               "\n...Update IRQs not supported.\n");
+                       goto test_READ;
+               }
+               perror("ioctl");
                exit(errno);
        }
-       fprintf(stderr, " %d",i);
+
+       fprintf(stderr, "Counting 5 update (1/sec) interrupts from reading %s:",
+                       rtc);
        fflush(stderr);
-       irqcount++;
-}
+       for (i=1; i<6; i++) {
+               /* This read will block */
+               retval = read(fd, &data, sizeof(unsigned long));
+               if (retval == -1) {
+                       perror("read");
+                       exit(errno);
+               }
+               fprintf(stderr, " %d",i);
+               fflush(stderr);
+               irqcount++;
+       }
 
-fprintf(stderr, "\nAgain, from using select(2) on /dev/rtc:");
-fflush(stderr);
-for (i=1; i<6; i++) {
-       struct timeval tv = {5, 0};     /* 5 second timeout on select */
-       fd_set readfds;
+       fprintf(stderr, "\nAgain, from using select(2) on /dev/rtc:");
+       fflush(stderr);
+       for (i=1; i<6; i++) {
+               struct timeval tv = {5, 0};     /* 5 second timeout on select */
+               fd_set readfds;
+
+               FD_ZERO(&readfds);
+               FD_SET(fd, &readfds);
+               /* The select will wait until an RTC interrupt happens. */
+               retval = select(fd+1, &readfds, NULL, NULL, &tv);
+               if (retval == -1) {
+                       perror("select");
+                       exit(errno);
+               }
+               /* This read won't block unlike the select-less case above. */
+               retval = read(fd, &data, sizeof(unsigned long));
+               if (retval == -1) {
+                       perror("read");
+                       exit(errno);
+               }
+               fprintf(stderr, " %d",i);
+               fflush(stderr);
+               irqcount++;
+       }
 
-       FD_ZERO(&readfds);
-       FD_SET(fd, &readfds);
-       /* The select will wait until an RTC interrupt happens. */
-       retval = select(fd+1, &readfds, NULL, NULL, &tv);
+       /* Turn off update interrupts */
+       retval = ioctl(fd, RTC_UIE_OFF, 0);
        if (retval == -1) {
-               perror("select");
+               perror("ioctl");
                exit(errno);
        }
-       /* This read won't block unlike the select-less case above. */
-       retval = read(fd, &data, sizeof(unsigned long));
+
+test_READ:
+       /* Read the RTC time/date */
+       retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
        if (retval == -1) {
-               perror("read");
+               perror("ioctl");
                exit(errno);
        }
-       fprintf(stderr, " %d",i);
-       fflush(stderr);
-       irqcount++;
-}
-
-/* Turn off update interrupts */
-retval = ioctl(fd, RTC_UIE_OFF, 0);
-if (retval == -1) {
-       perror("ioctl");
-       exit(errno);
-}
-
-/* Read the RTC time/date */
-retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
-if (retval == -1) {
-       perror("ioctl");
-       exit(errno);
-}
-
-fprintf(stderr, "\n\nCurrent RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n",
-       rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,
-       rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
-
-/* Set the alarm to 5 sec in the future, and check for rollover */
-rtc_tm.tm_sec += 5;
-if (rtc_tm.tm_sec >= 60) {
-       rtc_tm.tm_sec %= 60;
-       rtc_tm.tm_min++;
-}
-if  (rtc_tm.tm_min == 60) {
-       rtc_tm.tm_min = 0;
-       rtc_tm.tm_hour++;
-}
-if  (rtc_tm.tm_hour == 24)
-       rtc_tm.tm_hour = 0;
-
-retval = ioctl(fd, RTC_ALM_SET, &rtc_tm);
-if (retval == -1) {
-       perror("ioctl");
-       exit(errno);
-}
-
-/* Read the current alarm settings */
-retval = ioctl(fd, RTC_ALM_READ, &rtc_tm);
-if (retval == -1) {
-       perror("ioctl");
-       exit(errno);
-}
-
-fprintf(stderr, "Alarm time now set to %02d:%02d:%02d.\n",
-       rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
 
-/* Enable alarm interrupts */
-retval = ioctl(fd, RTC_AIE_ON, 0);
-if (retval == -1) {
-       perror("ioctl");
-       exit(errno);
-}
+       fprintf(stderr, "\n\nCurrent RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n",
+               rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,
+               rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
 
-fprintf(stderr, "Waiting 5 seconds for alarm...");
-fflush(stderr);
-/* This blocks until the alarm ring causes an interrupt */
-retval = read(fd, &data, sizeof(unsigned long));
-if (retval == -1) {
-       perror("read");
-       exit(errno);
-}
-irqcount++;
-fprintf(stderr, " okay. Alarm rang.\n");
-
-/* Disable alarm interrupts */
-retval = ioctl(fd, RTC_AIE_OFF, 0);
-if (retval == -1) {
-       perror("ioctl");
-       exit(errno);
-}
+       /* Set the alarm to 5 sec in the future, and check for rollover */
+       rtc_tm.tm_sec += 5;
+       if (rtc_tm.tm_sec >= 60) {
+               rtc_tm.tm_sec %= 60;
+               rtc_tm.tm_min++;
+       }
+       if  (rtc_tm.tm_min == 60) {
+               rtc_tm.tm_min = 0;
+               rtc_tm.tm_hour++;
+       }
+       if  (rtc_tm.tm_hour == 24)
+               rtc_tm.tm_hour = 0;
 
-/* Read periodic IRQ rate */
-retval = ioctl(fd, RTC_IRQP_READ, &tmp);
-if (retval == -1) {
-       perror("ioctl");
-       exit(errno);
-}
-fprintf(stderr, "\nPeriodic IRQ rate was %ldHz.\n", tmp);
+       retval = ioctl(fd, RTC_ALM_SET, &rtc_tm);
+       if (retval == -1) {
+               if (errno == ENOTTY) {
+                       fprintf(stderr,
+                               "\n...Alarm IRQs not supported.\n");
+                       goto test_PIE;
+               }
+               perror("ioctl");
+               exit(errno);
+       }
 
-fprintf(stderr, "Counting 20 interrupts at:");
-fflush(stderr);
+       /* Read the current alarm settings */
+       retval = ioctl(fd, RTC_ALM_READ, &rtc_tm);
+       if (retval == -1) {
+               perror("ioctl");
+               exit(errno);
+       }
 
-/* The frequencies 128Hz, 256Hz, ... 8192Hz are only allowed for root. */
-for (tmp=2; tmp<=64; tmp*=2) {
+       fprintf(stderr, "Alarm time now set to %02d:%02d:%02d.\n",
+               rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
 
-       retval = ioctl(fd, RTC_IRQP_SET, tmp);
+       /* Enable alarm interrupts */
+       retval = ioctl(fd, RTC_AIE_ON, 0);
        if (retval == -1) {
                perror("ioctl");
                exit(errno);
        }
 
-       fprintf(stderr, "\n%ldHz:\t", tmp);
+       fprintf(stderr, "Waiting 5 seconds for alarm...");
        fflush(stderr);
+       /* This blocks until the alarm ring causes an interrupt */
+       retval = read(fd, &data, sizeof(unsigned long));
+       if (retval == -1) {
+               perror("read");
+               exit(errno);
+       }
+       irqcount++;
+       fprintf(stderr, " okay. Alarm rang.\n");
 
-       /* Enable periodic interrupts */
-       retval = ioctl(fd, RTC_PIE_ON, 0);
+       /* Disable alarm interrupts */
+       retval = ioctl(fd, RTC_AIE_OFF, 0);
        if (retval == -1) {
                perror("ioctl");
                exit(errno);
        }
 
-       for (i=1; i<21; i++) {
-               /* This blocks */
-               retval = read(fd, &data, sizeof(unsigned long));
+test_PIE:
+       /* Read periodic IRQ rate */
+       retval = ioctl(fd, RTC_IRQP_READ, &tmp);
+       if (retval == -1) {
+               /* not all RTCs support periodic IRQs */
+               if (errno == ENOTTY) {
+                       fprintf(stderr, "\nNo periodic IRQ support\n");
+                       return 0;
+               }
+               perror("ioctl");
+               exit(errno);
+       }
+       fprintf(stderr, "\nPeriodic IRQ rate is %ldHz.\n", tmp);
+
+       fprintf(stderr, "Counting 20 interrupts at:");
+       fflush(stderr);
+
+       /* The frequencies 128Hz, 256Hz, ... 8192Hz are only allowed for root. */
+       for (tmp=2; tmp<=64; tmp*=2) {
+
+               retval = ioctl(fd, RTC_IRQP_SET, tmp);
                if (retval == -1) {
-                       perror("read");
-                       exit(errno);
+                       /* not all RTCs can change their periodic IRQ rate */
+                       if (errno == ENOTTY) {
+                               fprintf(stderr,
+                                       "\n...Periodic IRQ rate is fixed\n");
+                               goto done;
+                       }
+                       perror("ioctl");
+                       exit(errno);
                }
-               fprintf(stderr, " %d",i);
+
+               fprintf(stderr, "\n%ldHz:\t", tmp);
                fflush(stderr);
-               irqcount++;
-       }
 
-       /* Disable periodic interrupts */
-       retval = ioctl(fd, RTC_PIE_OFF, 0);
-       if (retval == -1) {
-               perror("ioctl");
-               exit(errno);
+               /* Enable periodic interrupts */
+               retval = ioctl(fd, RTC_PIE_ON, 0);
+               if (retval == -1) {
+                       perror("ioctl");
+                       exit(errno);
+               }
+
+               for (i=1; i<21; i++) {
+                       /* This blocks */
+                       retval = read(fd, &data, sizeof(unsigned long));
+                       if (retval == -1) {
+                                      perror("read");
+                                      exit(errno);
+                       }
+                       fprintf(stderr, " %d",i);
+                       fflush(stderr);
+                       irqcount++;
+               }
+
+               /* Disable periodic interrupts */
+               retval = ioctl(fd, RTC_PIE_OFF, 0);
+               if (retval == -1) {
+                       perror("ioctl");
+                       exit(errno);
+               }
        }
-}
 
-fprintf(stderr, "\n\n\t\t\t *** Test complete ***\n");
-fprintf(stderr, "\nTyping \"cat /proc/interrupts\" will show %d more events on IRQ 8.\n\n",
-                                                                irqcount);
+done:
+       fprintf(stderr, "\n\n\t\t\t *** Test complete ***\n");
 
-close(fd);
-return 0;
+       close(fd);
 
-} /* end main */
+       return 0;
+}
index 29dee792c8875d00a09fe7ce5aa395e6dcf02186..41a8b07da05ad48c2ee048e28c3b0541b4960ee3 100644 (file)
@@ -75,8 +75,8 @@ name of the respective module is given in square brackets.
 
 - SHA1 Digest Algorithm [sha1 -> sha1_z990]
 - DES Encrypt/Decrypt Algorithm (64bit key) [des -> des_z990]
-- Tripple DES Encrypt/Decrypt Algorithm (128bit key) [des3_ede128 -> des_z990]
-- Tripple DES Encrypt/Decrypt Algorithm (192bit key) [des3_ede -> des_z990]
+- Triple DES Encrypt/Decrypt Algorithm (128bit key) [des3_ede128 -> des_z990]
+- Triple DES Encrypt/Decrypt Algorithm (192bit key) [des3_ede -> des_z990]
 
 In order to load, for example, the sha1_z990 module when the sha1 algorithm is
 requested (see 3.2.) add 'alias sha1 sha1_z990' to /etc/modprobe.conf.
index 904d49e90ef267545b00546c1960919cfbe6d2fa..6aa9a891f3d00ec20df21d49c4a531f1ba574a2e 100644 (file)
@@ -127,7 +127,7 @@ The following information is available in this file:
         - Correct a reference to free'ed memory during controller
           shutdown.
         - Reset the bus on an SE->LVD change.  This is required
-          to reset our transcievers.
+          to reset our transceivers.
 
    1.3.5 (March 24th, 2003)
         - Fix a few register window mode bugs.
@@ -169,7 +169,7 @@ The following information is available in this file:
    1.3.0 (January 21st, 2003)
         - Full regression testing for all U320 products completed.
         - Added abort and target/lun reset error recovery handler and
-          interrupt coalessing.
+          interrupt coalescing.
 
    1.2.0 (November 14th, 2002)
         - Added support for Domain Validation
index c92f4473193b06dbfd038e21a18ca4ccdaa2a213..05667e7308d40cfecad6cefbedfcc7bbaedcffd0 100644 (file)
@@ -256,7 +256,7 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
              En/Disable High Byte LVD Termination
 
        The upper 2 bits that deal with LVD termination only apply to Ultra2
-       controllers.  Futhermore, due to the current Ultra2 controller
+       controllers.  Furthermore, due to the current Ultra2 controller
        designs, these bits are tied together such that setting either bit
        enables both low and high byte LVD termination.  It is not possible
        to only set high or low byte LVD termination in this manner.  This is
@@ -436,7 +436,7 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
     the commas to periods, insmod won't interpret this as more than one
     string and write junk into our binary image.  I consider it a bug in
     the insmod program that even if you wrap your string in quotes (quotes
-    that pass the shell mind you and that insmod sees) it still treates
+    that pass the shell mind you and that insmod sees) it still treats
     a comma inside of those quotes as starting a new variable, resulting
     in memory scribbles if you don't switch the commas to periods.
 
index 35f6b8ed229587eb5a9733fe48594b9123b5e32e..9707941704e36ece47dd763cc9ac21dcf5d2468b 100644 (file)
       This needs the RD-Bit to be disabled on IM_OTHER_SCSI_CMD_CMD which 
       allows data to be written from the system to the device. It is a
       necessary step to be allowed to set blocksize of SCSI-tape-drives and 
-      the tape-speed, whithout confusing the SCSI-Subsystem.
+      the tape-speed, without confusing the SCSI-Subsystem.
    2) The recognition of a tape is included in the check_devices routine.
       This is done by checking for TYPE_TAPE, that is already defined in
       the kernel-scsi-environment. The markup of a tape is done in the 
       of troubles with some controllers and after I wanted to apply some
       extensions, it jumped out in the same situation, on my w/cache, as like 
       on D. Weinehalls' Model 56, having integrated SCSI. This gave me the 
-      descissive hint to move the code-part out and declare it global. Now,
-      it seems to work by far much better an more stable. Let us see, what
+      decisive hint to move the code-part out and declare it global. Now
+      it seems to work far better and more stable. Let us see what
       the world thinks of it...
    3) By the way, only Sony DAT-drives seem to show density code 0x13. A
       test with a HP drive gave right results, so the problem is vendor-
    A long period of collecting bugreports 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 disbale Fast-SCSI for the external bus.
-      The feature-control command, where this crash appeared regularly tried
+      was that it is possible to disable Fast-SCSI for the external bus.
+      The feature-control command, where this crash appeared regularly, tried
       to set the maximum speed of 10MHz synchronous transfer speed and that
-      reports a COMMAND ERROR, if external bus Fast-SCSI is disabled. Now,
+      reports a COMMAND ERROR if external bus Fast-SCSI is disabled. Now,
       the feature-command probes down from maximum speed until the adapter 
       stops to complain, which is at the same time the maximum possible
       speed selected in the reference program. So, F/W external can run at
       completed in such a way, that they are now completely conform to the
       demands in the technical description of IBM. Main candidates were the
       DEVICE_INQUIRY, REQUEST_SENSE and DEVICE_CAPACITY commands. They must
-      be tranferred by bypassing the internal command buffer of the adapter
+      be transferred by bypassing the internal command buffer of the adapter
       or else the response can be a random result. GET_POS_INFO would be more
       safe in usage, if one could use the SUPRESS_EXCEPTION_SHORT, but this
       is not allowed by the technical references of IBM. (Sorry, folks, the
index 80f10404264576cf7dd76698fdc3a22253bccbba..c3e2a90475d2519d7fd5339068b061062c628e8d 100644 (file)
@@ -24,7 +24,7 @@ UPDATE NEWS: version 1.32 - 28 Mar 98
 UPDATE NEWS: version 1.31 - 6 Jul 97
 
    Fixed a bug that caused incorrect SCSI status bytes to be
-   returned from commands sent to LUN's greater than 0. This
+   returned from commands sent to LUNs greater than 0. This
    means that CDROM changers work now! Fixed a bug in the
    handling of command-line arguments when loaded as a module.
    Also put all the header data in in2000.h where it belongs.
index 9e2078b2a615c332f227bc4bd841416678f2b4f7..aa54f54c4a50b3e52a0f7f82d929af0757158506 100644 (file)
@@ -393,7 +393,7 @@ struct sas_task {
        task_proto -- _one_ of enum sas_proto
        scatter -- pointer to scatter gather list array
        num_scatter -- number of elements in scatter
-       total_xfer_len -- total number of bytes expected to be transfered
+       total_xfer_len -- total number of bytes expected to be transferred
        data_dir -- PCI_DMA_...
        task_done -- callback when the task has finished execution
 };
index 58ad8db333d9f6b5aeb2f011b0f9f0ee64bf70c0..caf10b1551850e426906e5f8eb6439eb8a9d9743 100644 (file)
@@ -115,7 +115,7 @@ SCSI standard documentations are available at SYMBIOS ftp server:
 
           ftp://ftp.symbios.com/
 
-Usefull SCSI tools written by Eric Youngdale are available at tsx-11:
+Useful SCSI tools written by Eric Youngdale are available at tsx-11:
 
           ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/scsiinfo-X.Y.tar.gz
           ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/scsidev-X.Y.tar.gz
index d74bbd29eb3a3f2cc576e1fdc979ce2b8f99ccc9..032399b16a539e5be25be8b04d065b8798bc57ed 100644 (file)
@@ -88,7 +88,7 @@ If the module finds the changer, it prints some messages about the
 device [ try "dmesg" if you don't see anything ] and should show up in
 /proc/devices. If not....  some changers use ID ? / LUN 0 for the
 device and ID ? / LUN 1 for the robot mechanism. But Linux does *not*
-look for LUN's other than 0 as default, becauce there are to many
+look for LUNs other than 0 as default, because there are too many
 broken devices. So you can try:
 
   1) echo "scsi add-single-device 0 0 ID 1" > /proc/scsi/scsi
@@ -107,7 +107,7 @@ because the kernel will translate the error codes into human-readable
 strings then.
 
 You can display these messages with the dmesg command (or check the
-logfiles).  If you email me some question becauce of a problem with the
+logfiles).  If you email me some question because of a problem with the
 driver, please include these messages.
 
 
index b964eef2f62fb5236caa6bd3b0cb33d19c645ccc..7acbebb17fa6c42bd07f1da11311dde70b4bc60b 100644 (file)
@@ -75,7 +75,7 @@ with the command.
 
  - otherwise
        scsi_eh_scmd_add(scmd, 0) is invoked for the command.  See
-       [1-3] for details of this funciton.
+       [1-3] for details of this function.
 
 
 [1-2-2] Completing a scmd w/ timeout
index 5ff65b184265f9919ea8f1404a6c6ba63f617034..3c12422f7f41bf67cc6d365937090a81176eb0e0 100644 (file)
@@ -261,7 +261,7 @@ pairs are separated with a comma (no spaces allowed). A colon can be
 used instead of the equal mark. The definition is prepended by the
 string st=. Here is an example:
 
-       st=buffer_kbs:64,write_threhold_kbs:60
+       st=buffer_kbs:64,write_threshold_kbs:60
 
 The following syntax used by the old kernel versions is also supported:
 
index 26c8a08ca3eaf378fffc65805857df02e8d66003..2c1745a9df0052fa634489d3f4b43dd1828a078b 100644 (file)
@@ -609,7 +609,7 @@ appropriate mailing lists or news-groups.  Send me a copy in order to
 be sure I will receive it.  Obviously, a bug in the driver code is
 possible.
 
-  My cyrrent email address: Gerard Roudier <groudier@free.fr>
+  My current email address: Gerard Roudier <groudier@free.fr>
 
 Allowing disconnections is important if you use several devices on
 your SCSI bus but often causes problems with buggy devices.
index 2d8f403eb6eb98a49c78f92bbc41c9172a21646d..ccf1cebe744f8b4a6901ff7f61bd23029562344a 100644 (file)
@@ -942,13 +942,13 @@ replicas continue to be exactly same.
        ->mnt_slave
        ->mnt_master
 
-       ->mnt_share links togather all the mount to/from which this vfsmount
+       ->mnt_share links together all the mount to/from which this vfsmount
                send/receives propagation events.
 
        ->mnt_slave_list links all the mounts to which this vfsmount propagates
                to.
 
-       ->mnt_slave links togather all the slaves that its master vfsmount
+       ->mnt_slave links together all the slaves that its master vfsmount
                propagates to.
 
        ->mnt_master points to the master vfsmount from which this vfsmount
index 3472d9c4ef1b0e637072e75690e474e834e348c5..9fef210ab50ab3914cd6e7d9c261edcb72ec489f 100644 (file)
@@ -955,7 +955,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
                  dmx6fire, dsp24, dsp24_value, dsp24_71, ez8,
                  phase88, mediastation
     omni       - Omni I/O support for MidiMan M-Audio Delta44/66
-    cs8427_timeout - reset timeout for the CS8427 chip (S/PDIF transciever)
+    cs8427_timeout - reset timeout for the CS8427 chip (S/PDIF transceiver)
                      in msec resolution, default value is 500 (0.5 sec)
 
     This module supports multiple cards and autoprobe. Note: The consumer part
index 5132fd95e0743565c2246eb27b1e22f586a53984..7f10dc6ff28ca443cc0a9e6f8d86734e6399e06f 100644 (file)
@@ -6,7 +6,7 @@ This is based on SB-Live-mixer.txt.
 
 The EMU10K2 chips have a DSP part which can be programmed to support 
 various ways of sample processing, which is described here.
-(This acticle does not deal with the overall functionality of the 
+(This article does not deal with the overall functionality of the 
 EMU10K2 chips. See the manuals section for further details.)
 
 The ALSA driver programs this portion of chip by default code
index 651adaf604733a5114ed2bd86156c9e2a50a040c..f5639d40521df5a60706d542d5dd93ace9f24c1c 100644 (file)
@@ -5,7 +5,7 @@
 
 The EMU10K1 chips have a DSP part which can be programmed to support
 various ways of sample processing, which is described here.
-(This acticle does not deal with the overall functionality of the 
+(This article does not deal with the overall functionality of the 
 EMU10K1 chips. See the manuals section for further details.)
 
 The ALSA driver programs this portion of chip by default code
index 02a481225b0d497c9182bcc2bcf40bb06079b4d5..c815c5206e8401e7f1f7c188bdd4b70beb27d787 100644 (file)
@@ -50,7 +50,7 @@ Review cycle:
    Contact the kernel security team for more details on this procedure.
 
 
-Review committe:
+Review committee:
 
  - This is made up of a number of kernel developers who have volunteered for
    this task, and a few that haven't.
index 5c3a51905969cabc9ef7d1f26178aadbb476d612..aa986a35e9945071abed471776565a2cf4644787 100644 (file)
@@ -146,7 +146,7 @@ or otherwise protected/tainted binaries. The modes are
        readable by root only. This allows the end user to remove
        such a dump but not access it directly. For security reasons
        core dumps in this mode will not overwrite one another or
-       other files. This mode is appropriate when adminstrators are
+       other files. This mode is appropriate when administrators are
        attempting to debug problems in a normal environment.
 
 ==============================================================
index 20d0d797f539ce51d18f903aa4aec942ead16643..e96a341eb7e425249cd19babb7e1f8f972001fa2 100644 (file)
@@ -129,7 +129,7 @@ the high water marks for each per cpu page list.
 
 zone_reclaim_mode:
 
-Zone_reclaim_mode allows to set more or less agressive approaches to
+Zone_reclaim_mode allows someone to set more or less aggressive approaches to
 reclaim memory when a zone runs out of memory. If it is set to zero then no
 zone reclaim occurs. Allocations will be satisfied from other zones / nodes
 in the system.
index b60590eca18fbc168a6aaa1800cf1163b06111ac..628013f944c4e0c090b2e70b4d625e6942948e27 100644 (file)
 
 
 
-  Making it world-writeable looks bad, but it seems not to be
+  Making it world-writable looks bad, but it seems not to be
   exploitable as a security hole.  However, it does allow anyone to cre-
   ate useless tap devices (useless because they can't configure them),
   which is a DOS attack.  A somewhat more secure alternative would to be
index 6a790754e963bacbd536b59e5c9b13ac24e21f83..6e8c9f1d2f223448b4e070ee1801e2c9ede36e79 100644 (file)
@@ -8,7 +8,7 @@ interfaces, but have similar sorts of communication needs. The two big
 examples for this are power devices (especially uninterruptable power
 supplies) and monitor control on higher end monitors.
 
-To support these disparite requirements, the Linux USB system provides
+To support these disparate requirements, the Linux USB system provides
 HID events to two separate interfaces:
 * the input subsystem, which converts HID events into normal input
 device interfaces (such as keyboard, mouse and joystick) and a
index ab21db454694a603b31bdbecb627cd6b17d2d8a1..aee715af7db741be230d754dc468bbb9709e81d6 100644 (file)
@@ -24,10 +24,10 @@ are in no way responsible for any damage that may occur, no matter how
 inconsequential.
 
 It seems that the Rio has a problem when sending .mp3 with low batteries.
-I suggest when the batteries are low and want to transfer stuff that you
+I suggest when the batteries are low and you want to transfer stuff that you
 replace it with a fresh one. In my case, what happened is I lost two 16kb
 blocks (they are no longer usable to store information to it). But I don't
-know if thats normal or not. It could simply be a problem with the flash 
+know if that's normal or not; it could simply be a problem with the flash 
 memory.
 
 In an extreme case, I left my Rio playing overnight and the batteries wore 
index 50436e1663eaa18b043c5370e5c16eb63dfe18e7..d61f6e7865def51b2ba281daa01d4c873f7311c9 100644 (file)
@@ -175,7 +175,7 @@ Keyspan USA-series Serial Adapters
   
   Current status:
     The USA-18X, USA-28X, USA-19, USA-19W and USA-49W are supported and
-    have been pretty throughly tested at various baud rates with 8-N-1
+    have been pretty thoroughly tested at various baud rates with 8-N-1
     character settings.  Other character lengths and parity setups are
     presently untested.
 
@@ -253,7 +253,7 @@ Cypress M8 CY4601 Family Serial Driver
        together without hacking the adapter to set the line high.
 
        The driver is smp safe.  Performance with the driver is rather low when using
-       it for transfering files.  This is being worked on, but I would be willing to
+       it for transferring files.  This is being worked on, but I would be willing to
        accept patches.  An urb queue or packet buffer would likely fit the bill here.
 
        If you have any questions, problems, patches, feature requests, etc. you can
@@ -297,7 +297,7 @@ Belkin USB Serial Adapter F5U103
       Parity       N,E,O,M,S
       Handshake    None, Software (XON/XOFF), Hardware (CTSRTS,CTSDTR)*
       Break        Set and clear
-      Line contr Input/Output query and control **
+      Line control Input/Output query and control **
 
       *  Hardware input flow control is only enabled for firmware
          levels above 2.06.  Read source code comments describing Belkin
@@ -309,7 +309,7 @@ Belkin USB Serial Adapter F5U103
          automatic hardware flow control.
 
   TO DO List:
-    -- Add true modem contol line query capability.  Currently tracks the
+    -- Add true modem control line query capability.  Currently tracks the
        states reported by the interrupt and the states requested.
     -- Add error reporting back to application for UART error conditions.
     -- Add support for flush ioctls.
index 7e8ae83e9847bcdaad064cb1eaa2c0e609da4b66..8d16f6f3c4eccbbba5e28f1e7f60db24ad942fa7 100644 (file)
@@ -214,7 +214,7 @@ returned value is the temperature in degrees fahrenheit.
 
 Finally the SETOPTIONS ioctl can be used to control some aspects of
 the cards operation; right now the pcwd driver is the only one
-supporting thiss ioctl.
+supporting this ioctl.
 
     int options = 0;
     ioctl(fd, WDIOC_SETOPTIONS, options);
index a5508f930ed94c3104e05ef108386779d52fce7b..846e77a787105a6f16e8332c0a30e879375e41eb 100644 (file)
@@ -155,16 +155,16 @@ L:        netdev@vger.kernel.org
 S:     Maintained
 
 9P FILE SYSTEM
-P:      Eric Van Hensbergen
-M:      ericvh@gmail.com
-P:      Ron Minnich
-M:      rminnich@lanl.gov
-P:      Latchesar Ionkov
-M:      lucho@ionkov.net
-L:      v9fs-developer@lists.sourceforge.net
-W:      http://v9fs.sf.net
-T:      git kernel.org:/pub/scm/linux/kernel/ericvh/v9fs.git
-S:      Maintained
+P:     Eric Van Hensbergen
+M:     ericvh@gmail.com
+P:     Ron Minnich
+M:     rminnich@lanl.gov
+P:     Latchesar Ionkov
+M:     lucho@ionkov.net
+L:     v9fs-developer@lists.sourceforge.net
+W:     http://v9fs.sf.net
+T:     git kernel.org:/pub/scm/linux/kernel/ericvh/v9fs.git
+S:     Maintained
 
 A2232 SERIAL BOARD DRIVER
 P:     Enver Haase
@@ -290,8 +290,8 @@ M:  ink@jurassic.park.msu.ru
 S:     Maintained for 2.4; PCI support for 2.6.
 
 AMD GEODE PROCESSOR/CHIPSET SUPPORT
-P:      Jordan Crouse
-M:      info-linux@geode.amd.com
+P:     Jordan Crouse
+M:     info-linux@geode.amd.com
 L:     info-linux@geode.amd.com
 W:     http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
 S:     Supported
@@ -353,6 +353,12 @@ P: Richard Purdie
 M:     rpurdie@rpsys.net
 S:     Maintained
 
+ARM/HP JORNADA 7XX MACHINE SUPPORT
+P:      Kristoffer Ericson
+M:      kristoffer_e1@hotmail.com
+W:      www.jlime.com
+S:      Maintained
+
 ARM/TOSA MACHINE SUPPORT
 P:     Dirk Opfer
 M:     dirk@opfer-online.de
@@ -595,13 +601,13 @@ M:        maxk@qualcomm.com
 S:     Maintained
 
 BONDING DRIVER
-P:   Chad Tindel
-M:   ctindel@users.sourceforge.net
-P:   Jay Vosburgh
-M:   fubar@us.ibm.com
-L:   bonding-devel@lists.sourceforge.net
-W:   http://sourceforge.net/projects/bonding/
-S:   Supported
+P:     Chad Tindel
+M:     ctindel@users.sourceforge.net
+P:     Jay Vosburgh
+M:     fubar@us.ibm.com
+L:     bonding-devel@lists.sourceforge.net
+W:     http://sourceforge.net/projects/bonding/
+S:     Supported
 
 BROADBAND PROCESSOR ARCHITECTURE
 P:     Arnd Bergmann
@@ -738,8 +744,8 @@ W:  http://www.bullopensource.org/cpuset/
 S:     Supported
 
 CRAMFS FILESYSTEM
-W:     http://sourceforge.net/projects/cramfs/
-S:     Orphan
+W:     http://sourceforge.net/projects/cramfs/
+S:     Orphan
 
 CRIS PORT
 P:     Mikael Starvik
@@ -1048,11 +1054,11 @@ W:      http://sourceforge.net/projects/emu10k1/
 S:     Maintained
 
 EMULEX LPFC FC SCSI DRIVER
-P:      James Smart
-M:      james.smart@emulex.com
-L:      linux-scsi@vger.kernel.org
-W:      http://sourceforge.net/projects/lpfcxxxx
-S:      Supported
+P:     James Smart
+M:     james.smart@emulex.com
+L:     linux-scsi@vger.kernel.org
+W:     http://sourceforge.net/projects/lpfcxxxx
+S:     Supported
 
 EPSON 1355 FRAMEBUFFER DRIVER
 P:     Christopher Hoover
@@ -1489,16 +1495,16 @@ L:      linux-kernel@vger.kernel.org
 S:     Maintained
 
 INTEL FRAMEBUFFER DRIVER (excluding 810 and 815)
-P:      Sylvain Meyer
-M:      sylvain.meyer@worldonline.fr
-L:      linux-fbdev-devel@lists.sourceforge.net
-S:      Maintained
+P:     Sylvain Meyer
+M:     sylvain.meyer@worldonline.fr
+L:     linux-fbdev-devel@lists.sourceforge.net
+S:     Maintained
 
 INTEL 810/815 FRAMEBUFFER DRIVER
-P:      Antonino Daplas
-M:      adaplas@pol.net
-L:      linux-fbdev-devel@lists.sourceforge.net
-S:      Maintained
+P:     Antonino Daplas
+M:     adaplas@pol.net
+L:     linux-fbdev-devel@lists.sourceforge.net
+S:     Maintained
 
 INTEL APIC/IOAPIC, LOWLEVEL X86 SMP SUPPORT
 P:     Ingo Molnar
@@ -1824,11 +1830,11 @@ L:      linuxppc-embedded@ozlabs.org
 S:     Maintained
 
 LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
-P:     Kumar Gala
-M:     galak@kernel.crashing.org
-W:     http://www.penguinppc.org/
-L:     linuxppc-embedded@ozlabs.org
-S:     Maintained
+P:     Kumar Gala
+M:     galak@kernel.crashing.org
+W:     http://www.penguinppc.org/
+L:     linuxppc-embedded@ozlabs.org
+S:     Maintained
 
 LINUX FOR POWERPC PA SEMI PWRFICIENT
 P:     Olof Johansson
@@ -1927,10 +1933,10 @@ W:      http://www.syskonnect.com
 S:     Supported
 
 MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
-P: Michael Kerrisk
-M: mtk-manpages@gmx.net
-W: ftp://ftp.kernel.org/pub/linux/docs/manpages
-S: Maintained
+P:     Michael Kerrisk
+M:     mtk-manpages@gmx.net
+W:     ftp://ftp.kernel.org/pub/linux/docs/manpages
+S:     Maintained
 
 MARVELL MV643XX ETHERNET DRIVER
 P:     Dale Farnsworth
@@ -1947,11 +1953,11 @@ L:      linux-fbdev-devel@lists.sourceforge.net
 S:     Maintained
 
 MEGARAID SCSI DRIVERS
-P:     Neela Syam Kolli
-M:     Neela.Kolli@engenio.com
-S:     linux-scsi@vger.kernel.org
-W:     http://megaraid.lsilogic.com
-S:     Maintained
+P:     Neela Syam Kolli
+M:     Neela.Kolli@engenio.com
+S:     linux-scsi@vger.kernel.org
+W:     http://megaraid.lsilogic.com
+S:     Maintained
 
 MEMORY MANAGEMENT
 L:     linux-mm@kvack.org
@@ -2180,10 +2186,10 @@ T:      git kernel.org:/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
 S:     Maintained
 
 NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER
-P:      Antonino Daplas
-M:      adaplas@pol.net
-L:      linux-fbdev-devel@lists.sourceforge.net
-S:      Maintained
+P:     Antonino Daplas
+M:     adaplas@pol.net
+L:     linux-fbdev-devel@lists.sourceforge.net
+S:     Maintained
 
 OPENCORES I2C BUS DRIVER
 P:     Peter Korsgaard
@@ -2533,10 +2539,10 @@ RISCOM8 DRIVER
 S:     Orphan
 
 S3 SAVAGE FRAMEBUFFER DRIVER
-P:      Antonino Daplas
-M:      adaplas@pol.net
-L:      linux-fbdev-devel@lists.sourceforge.net
-S:      Maintained
+P:     Antonino Daplas
+M:     adaplas@pol.net
+L:     linux-fbdev-devel@lists.sourceforge.net
+S:     Maintained
 
 S390
 P:     Martin Schwidefsky
@@ -2617,10 +2623,10 @@ L:      linux-scsi@vger.kernel.org
 S:     Maintained
 
 SCTP PROTOCOL
-P: Sridhar Samudrala
-M: sri@us.ibm.com
-L: lksctp-developers@lists.sourceforge.net
-S: Supported
+P:     Sridhar Samudrala
+M:     sri@us.ibm.com
+L:     lksctp-developers@lists.sourceforge.net
+S:     Supported
 
 SCx200 CPU SUPPORT
 P:     Jim Cromie
@@ -2788,9 +2794,9 @@ L:        tpmdd-devel@lists.sourceforge.net
 S:     Maintained
 
 Telecom Clock Driver for MCPL0010
-P: Mark Gross
-M: mark.gross@intel.com
-S: Supported
+P:     Mark Gross
+M:     mark.gross@intel.com
+S:     Supported
 
 TENSILICA XTENSA PORT (xtensa):
 P:     Chris Zankel
@@ -2937,9 +2943,9 @@ L:        linux-kernel@vger.kernel.org
 S:     Maintained
 
 TI PARALLEL LINK CABLE DRIVER
-P:     Romain Lievin
-M:     roms@lpg.ticalc.org
-S:     Maintained
+P:     Romain Lievin
+M:     roms@lpg.ticalc.org
+S:     Maintained
 
 TIPC NETWORK LAYER
 P:     Per Liden
@@ -2989,12 +2995,12 @@ L:      linux-kernel@vger.kernel.org
 S:     Maintained
 
 TRIVIAL PATCHES
-P:      Adrian Bunk
-M:      trivial@kernel.org
-L:      linux-kernel@vger.kernel.org
-W:      http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/
-T:      git kernel.org:/pub/scm/linux/kernel/git/bunk/trivial.git
-S:      Maintained
+P:     Adrian Bunk
+M:     trivial@kernel.org
+L:     linux-kernel@vger.kernel.org
+W:     http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/
+T:     git kernel.org:/pub/scm/linux/kernel/git/bunk/trivial.git
+S:     Maintained
 
 TMS380 TOKEN-RING NETWORK DRIVER
 P:     Adam Fritzler
index 958fad6739b3348170615435307d2fa34f7d4ba5..aef96259051fa58211ec31b7f22b0bee3c595176 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 19
-EXTRAVERSION =-rc6
+EXTRAVERSION =
 NAME=Avast! A bilge rat!
 
 # *DOCUMENTATION*
index adb05de40e24e80ade661f678108e35242872de5..ce00c570459de45a19b0ae97c56aca85a84d36f2 100644 (file)
@@ -879,6 +879,8 @@ endif
 
 source "drivers/scsi/Kconfig"
 
+source "drivers/ata/Kconfig"
+
 source "drivers/md/Kconfig"
 
 source "drivers/message/fusion/Kconfig"
index 089c9d598409ca4ce27d23beee02519c9e2507d4..b1cd331aaecf27d3bc39f310af44df52833f2253 100644 (file)
@@ -184,6 +184,7 @@ CONFIG_BINFMT_ELF=y
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 # CONFIG_APM is not set
 
 #
index f81a60005cd306eaa965c502c19e427790de576a..09b7acd7f6479de538724b96e1ed4065d71b3025 100644 (file)
@@ -194,6 +194,7 @@ CONFIG_BINFMT_ELF=y
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 # CONFIG_APM is not set
 
 #
index 3c3461e83398c1d78bec1f7c22e783c570252100..c41c04fa502096f6cdb02cf178d753c05cc1ff2e 100644 (file)
@@ -208,6 +208,7 @@ CONFIG_BINFMT_MISC=m
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 CONFIG_APM=y
 
 #
index 7a0da0b7facb09b65bcc949ca997fe8d2c170278..8f986e9f1c628bf282e1b1ff2d2ed10bfbb912f2 100644 (file)
@@ -194,6 +194,7 @@ CONFIG_BINFMT_ELF=y
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 # CONFIG_APM is not set
 
 #
index d1ba7fdde818f1cf74af8a1ebefe0384e32076ae..692ab57ba1ca9b484e39d1e8c944d6e90f70c45e 100644 (file)
@@ -190,6 +190,7 @@ CONFIG_BINFMT_ELF=y
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 # CONFIG_APM is not set
 
 #
index ad1048db96fbd69ef1d1abf23808e53aa21f5028..80a6fd97eb32a8e352674e5731e741d6f12d1763 100644 (file)
@@ -182,6 +182,7 @@ CONFIG_BINFMT_AOUT=m
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 # CONFIG_APM is not set
 
 #
index c3a932844160eeef9b8a87ed2c4d32f5a067be72..a1cc34f256022bd5a5a0f06654072cd7d8b986fa 100644 (file)
@@ -180,6 +180,7 @@ CONFIG_BINFMT_AOUT=y
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 CONFIG_APM=m
 
 #
index 3d35255c64ed7a10052c639872b3f6a826ca4375..df8168e57b7c2d5dfb83aab793014195028a2a34 100644 (file)
@@ -190,6 +190,7 @@ CONFIG_BINFMT_AOUT=y
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 CONFIG_APM=y
 
 #
index 2e5a616cc98dde92d1e1dc1a4d5a1dc1c9b4d4a7..140056a3507f96fdea4652d898951d558cdd624f 100644 (file)
@@ -180,6 +180,7 @@ CONFIG_BINFMT_MISC=m
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 CONFIG_APM=y
 
 #
index d1ace3abfd8a603067c94a79a394eec5bfa821c1..bd03238968c15b10ebf00dd596765dc01ffc1a94 100644 (file)
@@ -207,6 +207,7 @@ CONFIG_BINFMT_MISC=m
 # Power management options
 #
 CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
 CONFIG_APM=y
 
 #
index a07d202143c33b958100346335d83cbf650aec96..070bcb7a63068188dfd7b39ad4be75dd3dede3d7 100644 (file)
@@ -451,6 +451,7 @@ int smp_call_function(void (*func)(void *info), void *info, int retry,
        return smp_call_function_on_cpu(func, info, retry, wait,
                                        cpu_online_map);
 }
+EXPORT_SYMBOL_GPL(smp_call_function);
 
 void show_ipi_list(struct seq_file *p)
 {
index c648bfb676a100fbcf67d4791884305af3f6d716..db38afb2aa884b2841ec8399aed50aa549ea089e 100644 (file)
@@ -28,7 +28,7 @@
 #include <asm/io.h>
 #include <asm/page.h>
 
-static void __iomem *__isamem_convert_addr(void __iomem *addr)
+static void __iomem *__isamem_convert_addr(const volatile void __iomem *addr)
 {
        u32 ret, a = (u32 __force) addr;
 
@@ -63,7 +63,7 @@ static void __iomem *__isamem_convert_addr(void __iomem *addr)
 /*
  * read[bwl] and write[bwl]
  */
-u8 __readb(void __iomem *addr)
+u8 __readb(const volatile void __iomem *addr)
 {
        void __iomem *a = __isamem_convert_addr(addr);
        u32 ret;
@@ -75,7 +75,7 @@ u8 __readb(void __iomem *addr)
        return ret;
 }
 
-u16 __readw(void __iomem *addr)
+u16 __readw(const volatile void __iomem *addr)
 {
        void __iomem *a = __isamem_convert_addr(addr);
 
@@ -85,7 +85,7 @@ u16 __readw(void __iomem *addr)
        return __raw_readw(a);
 }
 
-u32 __readl(void __iomem *addr)
+u32 __readl(const volatile void __iomem *addr)
 {
        void __iomem *a = __isamem_convert_addr(addr);
        u32 ret;
index 57f23b4653927a5fcb83c9eaed9cce6cd17ca583..e316bd93313f656215588f30488188860c9da7b7 100644 (file)
@@ -133,7 +133,7 @@ config IXP4XX_INDIRECT_PCI
              into the kernel and we can use the standard read[bwl]/write[bwl]
              macros. This is the preferred method due to speed but it
              limits the system to just 64MB of PCI memory. This can be 
-             problamatic if using video cards and other memory-heavy devices.
+             problematic if using video cards and other memory-heavy devices.
           
           2) If > 64MB of memory space is required, the IXP4xx can be 
             configured to use indirect registers to access PCI This allows 
index 147b01928a9b49b612e7ae3bf16c3d2d84f816c6..6f4c6a1798c13ace0388cdef77df2427a17134c6 100644 (file)
@@ -8,7 +8,7 @@ config MACH_KEV7A400
        help
          Say Y here if you are using the Sharp KEV7A400 development
          board.  This hardware is discontinued, so I'd be very
-         suprised if you wanted this option.
+         surprised if you wanted this option.
 
 config MACH_LPD7A400
        bool "LPD7A400 Card Engine"
index 63965c78de8c652be823c23b9de504231c1a6479..9aa26b99045dfd58251363ac957d72d73ad5b8b4 100644 (file)
@@ -91,7 +91,7 @@ config SMDK2440_CPU2442
 config MACH_S3C2413
        bool
        help
-         Internal node for S3C2413 verison of SMDK2413, so that
+         Internal node for S3C2413 version of SMDK2413, so that
          machine_is_s3c2413() will work when MACH_SMDK2413 is
          selected
 
index c0bfb8212b7742abda15da17ffd47b09c3fe24e2..b09a19f87d682d084dcc08995ecfb18c085df4b9 100644 (file)
@@ -197,7 +197,7 @@ config CPU_ARM940T
        select CPU_CP15_MPU
        help
          ARM940T is a member of the ARM9TDMI family of general-
-         purpose microprocessors with MPU and seperate 4KB
+         purpose microprocessors with MPU and separate 4KB
          instruction and 4KB data cases, each with a 4-word line
          length.
 
index 50e6b6bfb2e231edd8321e3dea7be4cc5fffa6b8..b797217e82be0ed01d959cf52f909a72fdeffed6 100644 (file)
@@ -476,6 +476,9 @@ core_initcall(consistent_init);
 
 /*
  * Make an area consistent for devices.
+ * Note: Drivers should NOT use this function directly, as it will break
+ * platforms with CONFIG_DMABOUNCE.
+ * Use the driver DMA support - see dma-mapping.h (dma_sync_*)
  */
 void consistent_sync(void *vaddr, size_t size, int direction)
 {
index 44eb1b9accb374c89f3a0f75ebe39693ae53a7f0..c7ea9efd01049875e9e8a46f99b779480d008189 100644 (file)
@@ -323,7 +323,7 @@ config ETRAX_DEF_R_WAITSTATES
        depends on ETRAX_ARCH_V10
        default "95a6"
        help
-         Waitstates for SRAM, Flash and peripherials (not DRAM).  95f8 is a
+         Waitstates for SRAM, Flash and peripherals (not DRAM).  95f8 is a
          good choice for most Axis products...
 
 config ETRAX_DEF_R_BUS_CONFIG
index 734d5f3a530411ef71450325de866394daca1055..e7e724bc0ba6d701688365c118c57f59795ab697 100644 (file)
@@ -839,7 +839,7 @@ config ETRAX_DS1302_TRICKLE_CHARGE
        default "0"
        help
          This controls the initial value of the trickle charge register.
-         0 = disabled (use this if you are unsure or have a non rechargable battery)
+         0 = disabled (use this if you are unsure or have a non rechargeable battery)
          Otherwise the following values can be OR:ed together to control the
          charge current:
          1 = 2kohm, 2 = 4kohm, 3 = 4kohm
index 6e1f191a71e3f96b62744814b91b4c5c5cceffae..284ebfda03f05a672def45c46777f62f01c91034 100644 (file)
@@ -1,7 +1,7 @@
 /*!*****************************************************************************
 *!
-*!  Implements an interface for i2c compatible eeproms to run under linux.
-*!  Supports 2k, 8k(?) and 16k. Uses adaptive timing adjustents by
+*!  Implements an interface for i2c compatible eeproms to run under Linux.
+*!  Supports 2k, 8k(?) and 16k. Uses adaptive timing adjustments by
 *!  Johan.Adolfsson@axis.com
 *!
 *!  Probing results:
@@ -51,7 +51,7 @@
 *!  Revision 1.8  2001/06/15 13:24:29  jonashg
 *!  * Added verification of pointers from userspace in read and write.
 *!  * Made busy counter volatile.
-*!  * Added define for inital write delay.
+*!  * Added define for initial write delay.
 *!  * Removed warnings by using loff_t instead of unsigned long.
 *!
 *!  Revision 1.7  2001/06/14 15:26:54  jonashg
index 6114596c3b3369298546cc355d8b8c52bc8a6517..092c724a645f8096b32c07c60de600dd665da932 100644 (file)
@@ -47,7 +47,7 @@
 *! Update Port B register and shadow even when running with hardware support
 *!   to avoid glitches when reading bits
 *! Never set direction to out in i2c_inbyte
-*! Removed incorrect clock togling at end of i2c_inbyte
+*! Removed incorrect clock toggling at end of i2c_inbyte
 *!
 *! Revision 1.8  2002/08/13 06:31:53  starvik
 *! Made SDA and SCL line configurable
index 34528da9881792a029bf23163b143937ea1dc18f..07628a13c6c492c8c9574caeefd5c5fca6c3a894 100644 (file)
@@ -33,7 +33,7 @@
 *!
 *! Revision 1.2  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.1  2001/12/17 13:59:27  bjornw
 *! Initial revision
index a33097f95362bf8f6ad180941111dd9701d03fef..f64624fc4504bef716e5971ae5290011c5fed9f0 100644 (file)
@@ -88,7 +88,7 @@ config ETRAX_SERIAL_PORT0_DMA7_IN
        help
          Enables the DMA7 input channel for ser0 (ttyS0).
          If you do not enable DMA, an interrupt for each character will be
-         used when receiveing data.
+         used when receiving data.
          Normally you want to use DMA, unless you use the DMA channel for
          something else.
 
@@ -157,7 +157,7 @@ config ETRAX_SERIAL_PORT1_DMA5_IN
        help
          Enables the DMA5 input channel for ser1 (ttyS1).
          If you do not enable DMA, an interrupt for each character will be
-         used when receiveing data.
+         used when receiving data.
          Normally you want this on, unless you use the DMA channel for
          something else.
 
@@ -228,7 +228,7 @@ config ETRAX_SERIAL_PORT2_DMA3_IN
        help
          Enables the DMA3 input channel for ser2 (ttyS2).
          If you do not enable DMA, an interrupt for each character will be
-         used when receiveing data.
+         used when receiving data.
          Normally you want to use DMA, unless you use the DMA channel for
          something else.
 
@@ -297,7 +297,7 @@ config ETRAX_SERIAL_PORT3_DMA9_IN
        help
          Enables the DMA9 input channel for ser3 (ttyS3).
          If you do not enable DMA, an interrupt for each character will be
-         used when receiveing data.
+         used when receiving data.
          Normally you want to use DMA, unless you use the DMA channel for
          something else.
 
index 1e1fa3e391a3889ec822c869c19bd9feb76e5e36..dd53c58f64f1bd944dd65190fc5d8f98bf6c8643 100644 (file)
@@ -205,7 +205,7 @@ void cpu_idle(void)
 void cpu_idle_wait(void)
 {
        unsigned int cpu, this_cpu = get_cpu();
-       cpumask_t map;
+       cpumask_t map, tmp = current->cpus_allowed;
 
        set_cpus_allowed(current, cpumask_of_cpu(this_cpu));
        put_cpu();
@@ -227,6 +227,8 @@ void cpu_idle_wait(void)
                }
                cpus_and(map, map, cpu_online_map);
        } while (!cpus_empty(map));
+
+       set_cpus_allowed(current, tmp);
 }
 EXPORT_SYMBOL_GPL(cpu_idle_wait);
 
index 00489b706d2719c2083172342569381b60f5ce7e..fe9c5e8e7e6f5066e5f92865f0c6d71ec2887050 100644 (file)
@@ -129,15 +129,19 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo,
 
 #ifdef CONFIG_FRAME_POINTER
        while (valid_stack_ptr(tinfo, (void *)ebp)) {
+               unsigned long new_ebp;
                addr = *(unsigned long *)(ebp + 4);
                ops->address(data, addr);
                /*
                 * break out of recursive entries (such as
-                * end_of_stack_stop_unwind_function):
+                * end_of_stack_stop_unwind_function). Also,
+                * we can never allow a frame pointer to
+                * move downwards!
                 */
-               if (ebp == *(unsigned long *)ebp)
+               new_ebp = *(unsigned long *)ebp;
+               if (new_ebp <= ebp)
                        break;
-               ebp = *(unsigned long *)ebp;
+               ebp = new_ebp;
        }
 #else
        while (valid_stack_ptr(tinfo, stack)) {
index db8e1fcfa047d7e53a5f2f1961adad1ecef4327d..14691cda05c38da33ad2e8b124ea6eada5223790 100644 (file)
@@ -75,7 +75,7 @@
 ** If a device prefetches beyond the end of a valid pdir entry, it will cause
 ** a hard failure, ie. MCA.  Version 3.0 and later of the zx1 LBA should
 ** disconnect on 4k boundaries and prevent such issues.  If the device is
-** particularly agressive, this option will keep the entire pdir valid such
+** particularly aggressive, this option will keep the entire pdir valid such
 ** that prefetching will hit a valid address.  This could severely impact
 ** error containment, and is therefore off by default.  The page that is
 ** used for spill-over is poisoned, so that should help debugging somewhat.
@@ -258,10 +258,10 @@ static u64 prefetch_spill_page;
 
 /*
 ** DMA_CHUNK_SIZE is used by the SCSI mid-layer to break up
-** (or rather not merge) DMA's into managable chunks.
+** (or rather not merge) DMAs into manageable chunks.
 ** On parisc, this is more of the software/tuning constraint
-** rather than the HW. I/O MMU allocation alogorithms can be
-** faster with smaller size is (to some degree).
+** rather than the HW. I/O MMU allocation algorithms can be
+** faster with smaller sizes (to some degree).
 */
 #define DMA_CHUNK_SIZE  (BITS_PER_LONG*iovp_size)
 
index 6d920d4bdc3d4a0c47f5c83b43da1737b8d280bb..c1bc22c6d0d817e019a7022450b00425c52df587 100644 (file)
@@ -565,7 +565,7 @@ config ROMVEC
        depends on ROM
        help
          This is almost always the same as the base of the ROM. Since on all
-         68000 type varients the vectors are at the base of the boot device
+         68000 type variants the vectors are at the base of the boot device
          on system startup.
 
 config ROMVECSIZE
@@ -574,7 +574,7 @@ config ROMVECSIZE
        depends on ROM
        help
          Define the size of the vector region in ROM. For most 68000
-         varients this would be 0x400 bytes in size. Set to 0 if you do
+         variants this would be 0x400 bytes in size. Set to 0 if you do
          not want a vector region at the start of the ROM.
 
 config ROMSTART
index bde9811cf98c927dcb4bb787bacbdb81a2e6122c..7b21959eaeae66b17f08f5337e42f06cb2842299 100644 (file)
@@ -62,7 +62,7 @@ int (*mach_kbdrate) (struct kbd_repeat *);
 void (*mach_kbd_leds) (unsigned int);
 /* machine dependent irq functions */
 void (*mach_init_IRQ) (void);
-irqreturn_t (*(*mach_default_handler)[]) (int, void *, struct pt_regs *);
+irq_handler_t mach_default_handler;
 int (*mach_get_irq_list) (struct seq_file *, void *);
 void (*mach_process_int) (int irq, struct pt_regs *fp);
 void (*mach_trap_init) (void);
index c5667bdddd5ef263551ef7e6c7633d75bc64a14b..9226264abf1ab610846d9df98afa4a9c9dfca91d 100644 (file)
@@ -54,7 +54,7 @@ static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs)
        update_process_times(user_mode(regs));
 #endif
        if (current->pid)
-               profile_tick(CPU_PROFILING, regs);
+               profile_tick(CPU_PROFILING);
 
        /*
         * If we have an externally synchronized Linux clock, then update
index b4b55093ae7e867a23093883a620e16fc52af909..a57239ec6c8c6fe05453d73330b6034b0e4ea197 100644 (file)
@@ -33,7 +33,7 @@
 /*
  *     This table stores the address info for each vector handler.
  */
-irq_handler_t irq_list[SYS_IRQS];
+struct irq_entry irq_list[SYS_IRQS];
 
 #define NUM_IRQ_NODES 16
 static irq_node_t nodes[NUM_IRQ_NODES];
@@ -44,7 +44,7 @@ volatile unsigned int num_spurious;
 unsigned int local_bh_count[NR_CPUS];
 unsigned int local_irq_count[NR_CPUS];
 
-static irqreturn_t default_irq_handler(int irq, void *ptr, struct pt_regs *regs)
+static irqreturn_t default_irq_handler(int irq, void *ptr)
 {
 #if 1
        printk(KERN_INFO "%s(%d): default irq handler vec=%d [0x%x]\n",
@@ -70,7 +70,7 @@ void __init init_IRQ(void)
 
        for (i = 0; i < SYS_IRQS; i++) {
                if (mach_default_handler)
-                       irq_list[i].handler = (*mach_default_handler)[i];
+                       irq_list[i].handler = mach_default_handler;
                else
                        irq_list[i].handler = default_irq_handler;
                irq_list[i].flags   = IRQ_FLG_STD;
@@ -100,7 +100,7 @@ irq_node_t *new_irq_node(void)
 
 int request_irq(
        unsigned int irq,
-       irqreturn_t (*handler)(int, void *, struct pt_regs *),
+       irq_handler_t handler,
        unsigned long flags,
        const char *devname,
        void *dev_id)
@@ -157,7 +157,7 @@ void free_irq(unsigned int irq, void *dev_id)
        }
 
        if (mach_default_handler)
-               irq_list[irq].handler = (*mach_default_handler)[irq];
+               irq_list[irq].handler = mach_default_handler;
        else
                irq_list[irq].handler = default_irq_handler;
        irq_list[irq].flags   = IRQ_FLG_STD;
@@ -168,8 +168,7 @@ void free_irq(unsigned int irq, void *dev_id)
 EXPORT_SYMBOL(free_irq);
 
 
-int sys_request_irq(unsigned int irq, 
-                    irqreturn_t (*handler)(int, void *, struct pt_regs *), 
+int sys_request_irq(unsigned int irq, irq_handler_t handler, 
                     unsigned long flags, const char *devname, void *dev_id)
 {
        if (irq > IRQ7) {
@@ -211,7 +210,7 @@ void sys_free_irq(unsigned int irq, void *dev_id)
                printk(KERN_WARNING "%s: Removing probably wrong IRQ %d from %s\n",
                       __FUNCTION__, irq, irq_list[irq].devname);
 
-       irq_list[irq].handler = (*mach_default_handler)[irq];
+       irq_list[irq].handler = mach_default_handler;
        irq_list[irq].flags   = 0;
        irq_list[irq].dev_id  = NULL;
        irq_list[irq].devname = NULL;
@@ -241,7 +240,7 @@ asmlinkage void process_int(unsigned long vec, struct pt_regs *fp)
        if (vec >= VEC_INT1 && vec <= VEC_INT7) {
                vec -= VEC_SPUR;
                kstat_cpu(0).irqs[vec]++;
-               irq_list[vec].handler(vec, irq_list[vec].dev_id, fp);
+               irq_list[vec].handler(vec, irq_list[vec].dev_id);
        } else {
                if (mach_process_int)
                        mach_process_int(vec, fp);
index 1443024b1c7c9ba2c688579d426ce18000584ffc..22bb540b5c0533423f213264d7e7429a386aa5ec 100644 (file)
@@ -865,7 +865,7 @@ config MIPS_DISABLE_OBSOLETE_IDE
        bool
 
 #
-# Endianess selection.  Suffiently obscure so many users don't know what to
+# Endianess selection.  Sufficiently obscure so many users don't know what to
 # answer,so we try hard to limit the available choices.  Also the use of a
 # choice statement should be more obvious to the user.
 #
@@ -874,7 +874,7 @@ choice
        help
          Some MIPS machines can be configured for either little or big endian
          byte order. These modes require different kernels and a different
-         Linux distribution.  In general there is one prefered byteorder for a
+         Linux distribution.  In general there is one preferred byteorder for a
          particular system but some systems are just as commonly used in the
          one or the other endianess.
 
index cd9cec9e39e931c85c3f8af50e562615e281bf93..6bfbbed0897e87f15b6f60950788499525750ba0 100644 (file)
@@ -6,7 +6,7 @@ extra-y         := head.o init_task.o vmlinux.lds
 
 obj-y          += cpu-probe.o branch.o entry.o genex.o irq.o process.o \
                   ptrace.o reset.o semaphore.o setup.o signal.o syscall.o \
-                  time.o traps.o unaligned.o
+                  time.o topology.o traps.o unaligned.o
 
 binfmt_irix-objs       := irixelf.o irixinv.o irixioctl.o irixsig.o    \
                           irix5sys.o sysirix.o
index db80957ada8957631070f40bb10f847cd01eb26e..49db516789e07bb6a82d758a94648647c15ec69c 100644 (file)
@@ -463,28 +463,5 @@ void flush_tlb_one(unsigned long vaddr)
        smp_on_each_tlb(flush_tlb_one_ipi, (void *) vaddr);
 }
 
-static DEFINE_PER_CPU(struct cpu, cpu_devices);
-
-static int __init topology_init(void)
-{
-       int i, ret;
-
-#ifdef CONFIG_NUMA
-       for_each_online_node(i)
-               register_one_node(i);
-#endif /* CONFIG_NUMA */
-
-       for_each_present_cpu(i) {
-               ret = register_cpu(&per_cpu(cpu_devices, i), i);
-               if (ret)
-                       printk(KERN_WARNING "topology_init: register_cpu %d "
-                              "failed (%d)\n", i, ret);
-       }
-
-       return 0;
-}
-
-subsys_initcall(topology_init);
-
 EXPORT_SYMBOL(flush_tlb_page);
 EXPORT_SYMBOL(flush_tlb_one);
diff --git a/arch/mips/kernel/topology.c b/arch/mips/kernel/topology.c
new file mode 100644 (file)
index 0000000..660e44e
--- /dev/null
@@ -0,0 +1,29 @@
+#include <linux/cpu.h>
+#include <linux/cpumask.h>
+#include <linux/init.h>
+#include <linux/node.h>
+#include <linux/nodemask.h>
+#include <linux/percpu.h>
+
+static DEFINE_PER_CPU(struct cpu, cpu_devices);
+
+static int __init topology_init(void)
+{
+       int i, ret;
+
+#ifdef CONFIG_NUMA
+       for_each_online_node(i)
+               register_one_node(i);
+#endif /* CONFIG_NUMA */
+
+       for_each_present_cpu(i) {
+               ret = register_cpu(&per_cpu(cpu_devices, i), i);
+               if (ret)
+                       printk(KERN_WARNING "topology_init: register_cpu %d "
+                              "failed (%d)\n", i, ret);
+       }
+
+       return 0;
+}
+
+subsys_initcall(topology_init);
index ab460f805befcc57eb28a22ac63a14a80e8b7552..282f3e52eea3622eb1d00fd9ca710ac8e41cbda4 100644 (file)
@@ -159,7 +159,7 @@ void __init plat_mem_setup(void)
                                BONITO_PCIMEMBASECFG |=
                                        (BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
                                         BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
-                               printk("Disabled Bonito IOBC coherency\n");
+                               printk("Enabled Bonito IOBC coherency\n");
                        }
                }
                else
index d0ddb4a768a50e6d13e30fea902f1b0d36358040..3a8afd47feaab8b3f1e98e5be73b563acd612282 100644 (file)
@@ -19,6 +19,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 #include <linux/init.h>
+#include <linux/hardirq.h>
 
 #include <asm/asm.h>
 #include <asm/bootinfo.h>
@@ -242,6 +243,25 @@ void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsign
        __attribute__((alias("local_sb1_flush_cache_page")));
 #endif
 
+#ifdef CONFIG_SMP
+static void sb1_flush_cache_data_page_ipi(void *info)
+{
+       unsigned long start = (unsigned long)info;
+
+       __sb1_writeback_inv_dcache_range(start, start + PAGE_SIZE);
+}
+
+static void sb1_flush_cache_data_page(unsigned long addr)
+{
+       if (in_atomic())
+               __sb1_writeback_inv_dcache_range(addr, addr + PAGE_SIZE);
+       else
+               on_each_cpu(sb1_flush_cache_data_page_ipi, (void *) addr, 1, 1);
+}
+#else
+void sb1_flush_cache_data_page(unsigned long)
+       __attribute__((alias("local_sb1_flush_cache_data_page")));
+#endif
 
 /*
  * Invalidate all caches on this CPU
@@ -481,7 +501,7 @@ void sb1_cache_init(void)
 
        flush_cache_sigtramp = sb1_flush_cache_sigtramp;
        local_flush_data_cache_page = (void *) sb1_nop;
-       flush_data_cache_page = (void *) sb1_nop;
+       flush_data_cache_page = sb1_flush_cache_data_page;
 
        /* Full flush */
        __flush_cache_all = sb1___flush_cache_all;
index 0673dbedb241e8562db83b8fa69ba5d43eacf473..116d7d3683edb98777398df7d033300a79b0d738 100644 (file)
@@ -425,7 +425,7 @@ config PPC_MAPLE
        default n
        help
           This option enables support for the Maple 970FX Evaluation Board.
-         For more informations, refer to <http://www.970eval.com>
+         For more information, refer to <http://www.970eval.com>
 
 config PPC_PASEMI
        depends on PPC_MULTIPLATFORM && PPC64
index a1b5e4b1615101d448bd52e437b6b7866756fefc..46a24de36fec4bd93acd1fd09983380cf57e5abc 100644 (file)
@@ -1014,48 +1014,6 @@ void __init time_init(void)
        set_dec(tb_ticks_per_jiffy);
 }
 
-#ifdef CONFIG_RTC_CLASS
-static int set_rtc_class_time(struct rtc_time *tm)
-{
-       int err;
-       struct class_device *class_dev =
-               rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
-
-       if (class_dev == NULL)
-               return -ENODEV;
-
-       err = rtc_set_time(class_dev, tm);
-
-       rtc_class_close(class_dev);
-
-       return 0;
-}
-
-static void get_rtc_class_time(struct rtc_time *tm)
-{
-       int err;
-       struct class_device *class_dev =
-               rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
-
-       if (class_dev == NULL)
-               return;
-
-       err = rtc_read_time(class_dev, tm);
-
-       rtc_class_close(class_dev);
-
-       return;
-}
-
-int __init rtc_class_hookup(void)
-{
-       ppc_md.get_rtc_time = get_rtc_class_time;
-       ppc_md.set_rtc_time = set_rtc_class_time;
-
-       return 0;
-}
-#endif /* CONFIG_RTC_CLASS */
-
 
 #define FEBRUARY       2
 #define        STARTOFTIME     1970
index 7edb6b461382b407203b5c1929ae0fd7e4ba2487..edcd5b875b6699e8a3f2f8dc21c63f541d37eae1 100644 (file)
@@ -21,7 +21,7 @@ config MPC834x_SYS
          Be aware that PCI buses can only function when SYS board is plugged
          into the PIB (Platform IO Board) board from Freescale which provide
          3 PCI slots.  The PIBs PCI initialization is the bootloader's
-         responsiblilty.
+         responsibility.
 
 config MPC834x_ITX
        bool "Freescale MPC834x ITX"
@@ -30,7 +30,7 @@ config MPC834x_ITX
          This option enables support for the MPC 834x ITX evaluation board.
 
          Be aware that PCI initialization is the bootloader's
-         responsiblilty.
+         responsibility.
 
 config MPC8360E_PB
        bool "Freescale MPC8360E PB"
index 54dea9d42dc96bc8724d4757561a2b01e1b24746..a43ac71ab740ab9f851ea0a0f90b0f8450e9b8fd 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/root_dev.h>
 #include <linux/initrd.h>
 
+#include <asm/of_device.h>
 #include <asm/system.h>
 #include <asm/atomic.h>
 #include <asm/time.h>
@@ -136,6 +137,24 @@ static void __init mpc832x_sys_setup_arch(void)
 #endif
 }
 
+static int __init mpc832x_declare_of_platform_devices(void)
+{
+       struct device_node *np;
+
+       for (np = NULL; (np = of_find_compatible_node(np, "network",
+                                       "ucc_geth")) != NULL;) {
+               int ucc_num;
+               char bus_id[BUS_ID_SIZE];
+
+               ucc_num = *((uint *) get_property(np, "device-id", NULL)) - 1;
+               snprintf(bus_id, BUS_ID_SIZE, "ucc_geth.%u", ucc_num);
+               of_platform_device_create(np, bus_id, NULL);
+       }
+
+       return 0;
+}
+device_initcall(mpc832x_declare_of_platform_devices);
+
 void __init mpc832x_sys_init_IRQ(void)
 {
 
index 5446bab08eca6eba4a8354418f6b3baa5f1ba4e8..e2bcaaf6b329338ef48bfb1335709c5c9adbe6d7 100644 (file)
@@ -108,10 +108,6 @@ static int __init mpc834x_itx_probe(void)
        return 1;
 }
 
-#ifdef CONFIG_RTC_CLASS
-late_initcall(rtc_class_hookup);
-#endif
-
 define_machine(mpc834x_itx) {
        .name                   = "MPC834x ITX",
        .probe                  = mpc834x_itx_probe,
index 077711e63104fc28ce53b46add1ae528a60ff996..ef018e25fb07a2462462a7913af412cf3491d791 100644 (file)
@@ -724,7 +724,7 @@ config MPC834x_SYS
          Be aware that PCI buses can only function when SYS board is plugged
          into the PIB (Platform IO Board) board from Freescale which provide
          3 PCI slots.  The PIBs PCI initialization is the bootloader's
-         responsiblilty.
+         responsibility.
 
 config EV64360
        bool "Marvell-EV64360BP"
index 6a461d4caeffc814e2f5968c178edc1de2569bcf..bffc7e176970ffa7eb1e6ad20203fd6862ae866b 100644 (file)
@@ -217,7 +217,7 @@ config SH_SHMIN
        bool "SHMIN"
        select CPU_SUBTYPE_SH7706
        help
-         Select SHMIN if configureing for the SHMIN board
+         Select SHMIN if configuring for the SHMIN board.
 
 config SH_UNKNOWN
        bool "BareCPU"
index 1326f45f31ebf6ce3300c1c438f5ff85b6112f95..4310fc87444e9e703ef7fe0ef4f9b3838fc0ecdb 100644 (file)
@@ -383,7 +383,7 @@ void show_excp_regs(char *from, int trapnr, int signr, struct pt_regs *regs)
 /* ======================================================================= */
 
 /*
-** Depending on <base> scan the MMU, Data or Instrction side
+** Depending on <base> scan the MMU, Data or Instruction side
 ** looking for a valid mapping matching Eaddr & asid.
 ** Return -1 if not found or the TLB id entry otherwise.
 ** Note: it works only for 4k pages!
index 2f96610a83e961fc3e6a539c09aac98e9e39bb56..92a7c8a636d3c8679ec34eab437ab4a8273d55e4 100644 (file)
@@ -212,8 +212,8 @@ config SPARC_LED
        tristate "Sun4m LED driver"
        help
          This driver toggles the front-panel LED on sun4m systems
-         in a user-specifyable manner.  It's state can be probed
-         by reading /proc/led and it's blinking mode can be changed
+         in a user-specifiable manner.  Its state can be probed
+         by reading /proc/led and its blinking mode can be changed
          via writes to /proc/led
 
 source "fs/Kconfig.binfmt"
index 2f880cb167a582f5f10be75d4647facd1f82e274..0cad3546cb8922a013893d516111f9f669115fdb 100644 (file)
@@ -120,7 +120,7 @@ static int winch_thread(void *arg)
        /* These are synchronization calls between various UML threads on the
         * host - since they are not different kernel threads, we cannot use
         * kernel semaphores. We don't use SysV semaphores because they are
-        * persistant. */
+        * persistent. */
        count = os_read_file(pipe_fd, &c, sizeof(c));
        if(count != sizeof(c))
                printk("winch_thread : failed to read synchronization byte, "
index 6516f6dca96d35b036a7632cc668418e44468bf2..13a86bd383d3355fdaf4b30e9703b4968fb58ff8 100644 (file)
@@ -233,6 +233,8 @@ extern unsigned long __do_user_copy(void *to, const void *from, int n,
                                    void (*op)(void *to, const void *from,
                                               int n), int *faulted_out);
 
+/* execvp.c */
+extern int execvp_noalloc(char *buf, const char *file, char *const argv[]);
 /* helper.c */
 extern int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv,
                      unsigned long *stack_out);
index b4183929b32cb28e3d6e5f4efaa445676293e86a..2f8c79464015838a0ab0f427bf621387711849f1 100644 (file)
@@ -3,8 +3,8 @@
 # Licensed under the GPL
 #
 
-obj-y = aio.o elf_aux.o file.o helper.o irq.o main.o mem.o process.o sigio.o \
-       signal.o start_up.o time.o trap.o tty.o uaccess.o umid.o tls.o \
+obj-y = aio.o elf_aux.o execvp.o file.o helper.o irq.o main.o mem.o process.o \
+       sigio.o signal.o start_up.o time.o trap.o tty.o uaccess.o umid.o tls.o \
        user_syms.o util.o drivers/ sys-$(SUBARCH)/
 
 obj-$(CONFIG_MODE_SKAS) += skas/
@@ -15,9 +15,9 @@ user-objs-$(CONFIG_MODE_TT) += tt.o
 obj-$(CONFIG_TTY_LOG) += tty_log.o
 user-objs-$(CONFIG_TTY_LOG) += tty_log.o
 
-USER_OBJS := $(user-objs-y) aio.o elf_aux.o file.o helper.o irq.o main.o mem.o \
-       process.o sigio.o signal.o start_up.o time.o trap.o tty.o tls.o \
-       uaccess.o umid.o util.o
+USER_OBJS := $(user-objs-y) aio.o elf_aux.o execvp.o file.o helper.o irq.o \
+       main.o mem.o process.o sigio.o signal.o start_up.o time.o trap.o tty.o \
+       tls.o uaccess.o umid.o util.o
 
 CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH)
 
diff --git a/arch/um/os-Linux/execvp.c b/arch/um/os-Linux/execvp.c
new file mode 100644 (file)
index 0000000..66e583a
--- /dev/null
@@ -0,0 +1,149 @@
+/* Copyright (C) 2006 by Paolo Giarrusso - modified from glibc' execvp.c.
+   Original copyright notice follows:
+
+   Copyright (C) 1991,92,1995-99,2002,2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+#include <unistd.h>
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+
+#ifndef TEST
+#include "um_malloc.h"
+#else
+#include <stdio.h>
+#define um_kmalloc malloc
+#endif
+#include "os.h"
+
+/* Execute FILE, searching in the `PATH' environment variable if it contains
+   no slashes, with arguments ARGV and environment from `environ'.  */
+int execvp_noalloc(char *buf, const char *file, char *const argv[])
+{
+       if (*file == '\0') {
+               return -ENOENT;
+       }
+
+       if (strchr (file, '/') != NULL) {
+               /* Don't search when it contains a slash.  */
+               execv(file, argv);
+       } else {
+               int got_eacces;
+               size_t len, pathlen;
+               char *name, *p;
+               char *path = getenv("PATH");
+               if (path == NULL)
+                       path = ":/bin:/usr/bin";
+
+               len = strlen(file) + 1;
+               pathlen = strlen(path);
+               /* Copy the file name at the top.  */
+               name = memcpy(buf + pathlen + 1, file, len);
+               /* And add the slash.  */
+               *--name = '/';
+
+               got_eacces = 0;
+               p = path;
+               do {
+                       char *startp;
+
+                       path = p;
+                       //Let's avoid this GNU extension.
+                       //p = strchrnul (path, ':');
+                       p = strchr(path, ':');
+                       if (!p)
+                               p = strchr(path, '\0');
+
+                       if (p == path)
+                               /* Two adjacent colons, or a colon at the beginning or the end
+                                  of `PATH' means to search the current directory.  */
+                               startp = name + 1;
+                       else
+                               startp = memcpy(name - (p - path), path, p - path);
+
+                       /* Try to execute this name.  If it works, execv will not return.  */
+                       execv(startp, argv);
+
+                       /*
+                       if (errno == ENOEXEC) {
+                       }
+                       */
+
+                       switch (errno) {
+                               case EACCES:
+                                       /* Record the we got a `Permission denied' error.  If we end
+                                          up finding no executable we can use, we want to diagnose
+                                          that we did find one but were denied access.  */
+                                       got_eacces = 1;
+                               case ENOENT:
+                               case ESTALE:
+                               case ENOTDIR:
+                                       /* Those errors indicate the file is missing or not executable
+                                          by us, in which case we want to just try the next path
+                                          directory.  */
+                               case ENODEV:
+                               case ETIMEDOUT:
+                                       /* Some strange filesystems like AFS return even
+                                          stranger error numbers.  They cannot reasonably mean
+                                          anything else so ignore those, too.  */
+                               case ENOEXEC:
+                                       /* We won't go searching for the shell
+                                        * if it is not executable - the Linux
+                                        * kernel already handles this enough,
+                                        * for us. */
+                                       break;
+
+                               default:
+                                       /* Some other error means we found an executable file, but
+                                          something went wrong executing it; return the error to our
+                                          caller.  */
+                                       return -errno;
+                       }
+               } while (*p++ != '\0');
+
+               /* We tried every element and none of them worked.  */
+               if (got_eacces)
+                       /* At least one failure was due to permissions, so report that
+                          error.  */
+                       return -EACCES;
+       }
+
+       /* Return the error from the last attempt (probably ENOENT).  */
+       return -errno;
+}
+#ifdef TEST
+int main(int argc, char**argv)
+{
+       char buf[PATH_MAX];
+       int ret;
+       argc--;
+       if (!argc) {
+               fprintf(stderr, "Not enough arguments\n");
+               return 1;
+       }
+       argv++;
+       if (ret = execvp_noalloc(buf, argv[0], argv)) {
+               errno = -ret;
+               perror("execvp_noalloc");
+       }
+       return 0;
+}
+#endif
index d13299cfa31878e6b725e3ad86d5ac9fdd50922d..c7ad6306e22f08e88f3867d6a522fbcdc47cfff0 100644 (file)
@@ -8,18 +8,21 @@
 #include <unistd.h>
 #include <errno.h>
 #include <sched.h>
+#include <limits.h>
 #include <sys/signal.h>
 #include <sys/wait.h>
 #include "user.h"
 #include "kern_util.h"
 #include "user_util.h"
 #include "os.h"
+#include "um_malloc.h"
 
 struct helper_data {
        void (*pre_exec)(void*);
        void *pre_data;
        char **argv;
        int fd;
+       char *buf;
 };
 
 /* Debugging aid, changed only from gdb */
@@ -41,9 +44,8 @@ static int helper_child(void *arg)
        }
        if (data->pre_exec != NULL)
                (*data->pre_exec)(data->pre_data);
-       execvp(argv[0], argv);
-       errval = -errno;
-       printk("helper_child - execve of '%s' failed - errno = %d\n", argv[0], errno);
+       errval = execvp_noalloc(data->buf, argv[0], argv);
+       printk("helper_child - execvp of '%s' failed - errno = %d\n", argv[0], -errval);
        os_write_file(data->fd, &errval, sizeof(errval));
        kill(os_getpid(), SIGKILL);
        return 0;
@@ -84,11 +86,13 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv,
        data.pre_data = pre_data;
        data.argv = argv;
        data.fd = fds[1];
+       data.buf = __cant_sleep() ? um_kmalloc_atomic(PATH_MAX) :
+                                       um_kmalloc(PATH_MAX);
        pid = clone(helper_child, (void *) sp, CLONE_VM | SIGCHLD, &data);
        if (pid < 0) {
                ret = -errno;
                printk("run_helper : clone failed, errno = %d\n", errno);
-               goto out_close;
+               goto out_free2;
        }
 
        close(fds[1]);
@@ -109,6 +113,8 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv,
                CATCH_EINTR(waitpid(pid, NULL, 0));
        }
 
+out_free2:
+       kfree(data.buf);
 out_close:
        if (fds[1] != -1)
                close(fds[1]);
index 13972148058dac9cae6c7e2829bf4c5b73b78bd9..6e38d4daeed7f6786c7e3067bd5329f0da2cb5ef 100644 (file)
@@ -66,8 +66,8 @@ AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
 cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
 AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
 
-cflags-$(CONFIG_CC_STACKPROTECTOR) += $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh $(CC) -fstack-protector )
-cflags-$(CONFIG_CC_STACKPROTECTOR_ALL) += $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh $(CC) -fstack-protector-all )
+cflags-$(CONFIG_CC_STACKPROTECTOR) += $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh "$(CC)" -fstack-protector )
+cflags-$(CONFIG_CC_STACKPROTECTOR_ALL) += $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-x86_64-has-stack-protector.sh "$(CC)" -fstack-protector-all )
 
 CFLAGS += $(cflags-y)
 CFLAGS_KERNEL += $(cflags-kernel-y)
index e22ecd54870d8e818dc0bc2563a8194a7699def2..47b6d90349da905f226709aaf29c9ff48e501741 100644 (file)
@@ -224,7 +224,7 @@ static int __init setup_early_printk(char *buf)
                return 0;
        early_console_initialized = 1;
 
-       if (!strcmp(buf,"keep"))
+       if (strstr(buf, "keep"))
                keep_early = 1;
 
        if (!strncmp(buf, "serial", 6)) {
index 14654e6824116f5c96766b07c93cacf1a6a28c5d..c80081a6ba415584553eea8c78377663914e4347 100644 (file)
@@ -754,10 +754,8 @@ void __setup_vector_irq(int cpu)
 {
        /* Initialize vector_irq on a new cpu */
        /* This function must be called with vector_lock held */
-       unsigned long flags;
        int irq, vector;
 
-
        /* Mark the inuse vectors */
        for (irq = 0; irq < NR_IRQ_VECTORS; ++irq) {
                if (!cpu_isset(cpu, irq_domain[irq]))
index f6226055d53de3b84e2812785bc699ae17394beb..7451a4c43c1681639c0aa5fbb2640d509ccac603 100644 (file)
@@ -144,7 +144,7 @@ static void poll_idle (void)
 void cpu_idle_wait(void)
 {
        unsigned int cpu, this_cpu = get_cpu();
-       cpumask_t map;
+       cpumask_t map, tmp = current->cpus_allowed;
 
        set_cpus_allowed(current, cpumask_of_cpu(this_cpu));
        put_cpu();
@@ -167,6 +167,8 @@ void cpu_idle_wait(void)
                }
                cpus_and(map, map, cpu_online_map);
        } while (!cpus_empty(map));
+
+       set_cpus_allowed(current, tmp);
 }
 EXPORT_SYMBOL_GPL(cpu_idle_wait);
 
index 7819022a8db5986e29bf36247be94cab99cb7f06..0d65b22f229ccfbf895ff2aa12e3dd2d9977cdd8 100644 (file)
@@ -242,12 +242,19 @@ static int dump_trace_unwind(struct unwind_frame_info *info, void *context)
  * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack
  */
 
+static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
+{
+       void *t = (void *)tinfo;
+        return p > t && p < t + THREAD_SIZE - 3;
+}
+
 void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * stack,
                struct stacktrace_ops *ops, void *data)
 {
        const unsigned cpu = smp_processor_id();
        unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr;
        unsigned used = 0;
+       struct thread_info *tinfo;
 
        if (!tsk)
                tsk = current;
@@ -290,6 +297,12 @@ void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * s
                if (tsk && tsk != current)
                        stack = (unsigned long *)tsk->thread.rsp;
        }
+       /*
+        * Align the stack pointer on word boundary, later loops
+        * rely on that (and corruption / debug info bugs can cause
+        * unaligned values here):
+        */
+       stack = (unsigned long *)((unsigned long)stack & ~(sizeof(long)-1));
 
        /*
         * Print function call entries within a stack. 'cond' is the
@@ -364,7 +377,8 @@ void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * s
        /*
         * This handles the process stack:
         */
-       HANDLE_STACK (((long) stack & (THREAD_SIZE-1)) != 0);
+       tinfo = current_thread_info();
+       HANDLE_STACK (valid_stack_ptr(tinfo, stack));
 #undef HANDLE_STACK
 }
 EXPORT_SYMBOL(dump_trace);
index edb24aa714b4e0d58f1bbebe70b1e699abb16ce7..d9534e750d4fa548e7f2a016b94fb022ee7689c0 100644 (file)
@@ -60,6 +60,7 @@ SECTIONS
   }
 #endif
 
+  . = ALIGN(PAGE_SIZE);        /* Align data segment to page size boundary */
                                /* Data */
   .data : AT(ADDR(.data) - LOAD_OFFSET) {
        *(.data)
index a730bacecb0be186625cb0cec338f76e1dc6b6c0..92546c1526f1fece35fb8ed07bfeefc7b3414c0d 100644 (file)
@@ -274,6 +274,7 @@ static void __cpuinit cpu_vsyscall_init(void *arg)
        vsyscall_set_cpu(raw_smp_processor_id());
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
 static int __cpuinit
 cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg)
 {
@@ -282,6 +283,7 @@ cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg)
                smp_call_function_single(cpu, cpu_vsyscall_init, NULL, 0, 1);
        return NOTIFY_DONE;
 }
+#endif
 
 static void __init map_vsyscall(void)
 {
index f1f977aafae1085cd3cd3aaa81fc971620bfc05e..4c0c00ef3ca769c027591b4d5b6483e9b13b9228 100644 (file)
@@ -496,7 +496,7 @@ int remove_memory(u64 start, u64 size)
 }
 EXPORT_SYMBOL_GPL(remove_memory);
 
-#ifndef CONFIG_ACPI_NUMA
+#if !defined(CONFIG_ACPI_NUMA) && defined(CONFIG_NUMA)
 int memory_add_physaddr_to_nid(u64 start)
 {
        return 0;
@@ -504,13 +504,6 @@ int memory_add_physaddr_to_nid(u64 start)
 EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);
 #endif
 
-#ifndef CONFIG_ACPI_NUMA
-int memory_add_physaddr_to_nid(u64 start)
-{
-       return 0;
-}
-#endif
-
 #endif /* CONFIG_MEMORY_HOTPLUG */
 
 #ifdef CONFIG_MEMORY_HOTPLUG_RESERVE
index 50b95e4c1425b8ae3950451c146c020da4b0b146..00242111a457e3b461d59e4542bdd86d8501db44 100644 (file)
@@ -1317,7 +1317,7 @@ static void as_exit_queue(elevator_t *e)
 /*
  * initialize elevator private data (as_data).
  */
-static void *as_init_queue(request_queue_t *q, elevator_t *e)
+static void *as_init_queue(request_queue_t *q)
 {
        struct as_data *ad;
 
index 135593c8e45bdee40f97c3e690d47c34e769370a..562ca7cbf858bf93777ef8029414768b170fe6af 100644 (file)
 #include <linux/init.h>
 #include <linux/mutex.h>
 #include <linux/debugfs.h>
+#include <linux/time.h>
 #include <asm/uaccess.h>
 
 static DEFINE_PER_CPU(unsigned long long, blk_trace_cpu_offset) = { 0, };
 static unsigned int blktrace_seq __read_mostly = 1;
 
+/*
+ * Send out a notify message.
+ */
+static inline unsigned int trace_note(struct blk_trace *bt,
+               pid_t pid, int action,
+               const void *data, size_t len)
+{
+       struct blk_io_trace *t;
+       int cpu = smp_processor_id();
+
+       t = relay_reserve(bt->rchan, sizeof(*t) + len);
+       if (t == NULL)
+               return 0;
+
+       t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
+       t->time = sched_clock() - per_cpu(blk_trace_cpu_offset, cpu);
+       t->device = bt->dev;
+       t->action = action;
+       t->pid = pid;
+       t->cpu = cpu;
+       t->pdu_len = len;
+       memcpy((void *) t + sizeof(*t), data, len);
+       return blktrace_seq;
+}
+
 /*
  * Send out a notify for this process, if we haven't done so since a trace
  * started
  */
 static void trace_note_tsk(struct blk_trace *bt, struct task_struct *tsk)
 {
-       struct blk_io_trace *t;
+       tsk->btrace_seq = trace_note(bt, tsk->pid,
+                       BLK_TN_PROCESS,
+                       tsk->comm, sizeof(tsk->comm));
+}
 
-       t = relay_reserve(bt->rchan, sizeof(*t) + sizeof(tsk->comm));
-       if (t) {
-               t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
-               t->device = bt->dev;
-               t->action = BLK_TC_ACT(BLK_TC_NOTIFY);
-               t->pid = tsk->pid;
-               t->cpu = smp_processor_id();
-               t->pdu_len = sizeof(tsk->comm);
-               memcpy((void *) t + sizeof(*t), tsk->comm, t->pdu_len);
-               tsk->btrace_seq = blktrace_seq;
-       }
+static void trace_note_time(struct blk_trace *bt)
+{
+       struct timespec now;
+       unsigned long flags;
+       u32 words[2];
+
+       getnstimeofday(&now);
+       words[0] = now.tv_sec;
+       words[1] = now.tv_nsec;
+
+       local_irq_save(flags);
+       trace_note(bt, 0, BLK_TN_TIMESTAMP, words, sizeof(words));
+       local_irq_restore(flags);
 }
 
 static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector,
@@ -394,6 +425,8 @@ static int blk_trace_startstop(request_queue_t *q, int start)
                        blktrace_seq++;
                        smp_mb();
                        bt->trace_state = Blktrace_running;
+
+                       trace_note_time(bt);
                        ret = 0;
                }
        } else {
index 1d9c3c70a9a05b84469a30f55dfbd369ec239e12..e9019ed39b7352a5416aa38a9a15623be744293d 100644 (file)
@@ -1464,8 +1464,7 @@ cfq_update_io_thinktime(struct cfq_data *cfqd, struct cfq_io_context *cic)
 }
 
 static void
-cfq_update_io_seektime(struct cfq_data *cfqd, struct cfq_io_context *cic,
-                      struct request *rq)
+cfq_update_io_seektime(struct cfq_io_context *cic, struct request *rq)
 {
        sector_t sdist;
        u64 total;
@@ -1617,7 +1616,7 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
        }
 
        cfq_update_io_thinktime(cfqd, cic);
-       cfq_update_io_seektime(cfqd, cic, rq);
+       cfq_update_io_seektime(cic, rq);
        cfq_update_idle_window(cfqd, cfqq, cic);
 
        cic->last_queue = jiffies;
@@ -1770,7 +1769,7 @@ static int cfq_may_queue(request_queue_t *q, int rw)
 /*
  * queue lock held here
  */
-static void cfq_put_request(request_queue_t *q, struct request *rq)
+static void cfq_put_request(struct request *rq)
 {
        struct cfq_queue *cfqq = RQ_CFQQ(rq);
 
@@ -1951,7 +1950,7 @@ static void cfq_exit_queue(elevator_t *e)
        kfree(cfqd);
 }
 
-static void *cfq_init_queue(request_queue_t *q, elevator_t *e)
+static void *cfq_init_queue(request_queue_t *q)
 {
        struct cfq_data *cfqd;
        int i;
index b7c5b34cb7b43b4688b3f4bbda5951726bbb008a..6d673e938d3eb66c3bb68f0d5f7975e88487fd77 100644 (file)
@@ -356,7 +356,7 @@ static void deadline_exit_queue(elevator_t *e)
 /*
  * initialize elevator private data (deadline_data).
  */
-static void *deadline_init_queue(request_queue_t *q, elevator_t *e)
+static void *deadline_init_queue(request_queue_t *q)
 {
        struct deadline_data *dd;
 
index 8ccd163254b8acf1469628e432308ab73cedd97b..c0063f345c5d620320cd82438394eefe71b442dc 100644 (file)
@@ -129,7 +129,7 @@ static struct elevator_type *elevator_get(const char *name)
 
 static void *elevator_init_queue(request_queue_t *q, struct elevator_queue *eq)
 {
-       return eq->ops->elevator_init_fn(q, eq);
+       return eq->ops->elevator_init_fn(q);
 }
 
 static void elevator_attach(request_queue_t *q, struct elevator_queue *eq,
@@ -810,7 +810,7 @@ void elv_put_request(request_queue_t *q, struct request *rq)
        elevator_t *e = q->elevator;
 
        if (e->ops->elevator_put_req_fn)
-               e->ops->elevator_put_req_fn(q, rq);
+               e->ops->elevator_put_req_fn(rq);
 }
 
 int elv_may_queue(request_queue_t *q, int rw)
index 9eaee66405353b6705c438c5aa8a5e9db7776f90..0f82e12f7b678553b51189374bfb562c676de919 100644 (file)
@@ -2322,6 +2322,84 @@ void blk_insert_request(request_queue_t *q, struct request *rq,
 
 EXPORT_SYMBOL(blk_insert_request);
 
+static int __blk_rq_unmap_user(struct bio *bio)
+{
+       int ret = 0;
+
+       if (bio) {
+               if (bio_flagged(bio, BIO_USER_MAPPED))
+                       bio_unmap_user(bio);
+               else
+                       ret = bio_uncopy_user(bio);
+       }
+
+       return ret;
+}
+
+static int __blk_rq_map_user(request_queue_t *q, struct request *rq,
+                            void __user *ubuf, unsigned int len)
+{
+       unsigned long uaddr;
+       struct bio *bio, *orig_bio;
+       int reading, ret;
+
+       reading = rq_data_dir(rq) == READ;
+
+       /*
+        * if alignment requirement is satisfied, map in user pages for
+        * direct dma. else, set up kernel bounce buffers
+        */
+       uaddr = (unsigned long) ubuf;
+       if (!(uaddr & queue_dma_alignment(q)) && !(len & queue_dma_alignment(q)))
+               bio = bio_map_user(q, NULL, uaddr, len, reading);
+       else
+               bio = bio_copy_user(q, uaddr, len, reading);
+
+       if (IS_ERR(bio)) {
+               return PTR_ERR(bio);
+       }
+
+       orig_bio = bio;
+       blk_queue_bounce(q, &bio);
+       /*
+        * We link the bounce buffer in and could have to traverse it
+        * later so we have to get a ref to prevent it from being freed
+        */
+       bio_get(bio);
+
+       /*
+        * for most (all? don't know of any) queues we could
+        * skip grabbing the queue lock here. only drivers with
+        * funky private ->back_merge_fn() function could be
+        * problematic.
+        */
+       spin_lock_irq(q->queue_lock);
+       if (!rq->bio)
+               blk_rq_bio_prep(q, rq, bio);
+       else if (!q->back_merge_fn(q, rq, bio)) {
+               ret = -EINVAL;
+               spin_unlock_irq(q->queue_lock);
+               goto unmap_bio;
+       } else {
+               rq->biotail->bi_next = bio;
+               rq->biotail = bio;
+
+               rq->nr_sectors += bio_sectors(bio);
+               rq->hard_nr_sectors = rq->nr_sectors;
+               rq->data_len += bio->bi_size;
+       }
+       spin_unlock_irq(q->queue_lock);
+
+       return bio->bi_size;
+
+unmap_bio:
+       /* if it was boucned we must call the end io function */
+       bio_endio(bio, bio->bi_size, 0);
+       __blk_rq_unmap_user(orig_bio);
+       bio_put(bio);
+       return ret;
+}
+
 /**
  * blk_rq_map_user - map user data to a request, for REQ_BLOCK_PC usage
  * @q:         request queue where request should be inserted
@@ -2343,42 +2421,44 @@ EXPORT_SYMBOL(blk_insert_request);
  *    unmapping.
  */
 int blk_rq_map_user(request_queue_t *q, struct request *rq, void __user *ubuf,
-                   unsigned int len)
+                   unsigned long len)
 {
-       unsigned long uaddr;
-       struct bio *bio;
-       int reading;
+       unsigned long bytes_read = 0;
+       int ret;
 
        if (len > (q->max_hw_sectors << 9))
                return -EINVAL;
        if (!len || !ubuf)
                return -EINVAL;
 
-       reading = rq_data_dir(rq) == READ;
+       while (bytes_read != len) {
+               unsigned long map_len, end, start;
 
-       /*
-        * if alignment requirement is satisfied, map in user pages for
-        * direct dma. else, set up kernel bounce buffers
-        */
-       uaddr = (unsigned long) ubuf;
-       if (!(uaddr & queue_dma_alignment(q)) && !(len & queue_dma_alignment(q)))
-               bio = bio_map_user(q, NULL, uaddr, len, reading);
-       else
-               bio = bio_copy_user(q, uaddr, len, reading);
+               map_len = min_t(unsigned long, len - bytes_read, BIO_MAX_SIZE);
+               end = ((unsigned long)ubuf + map_len + PAGE_SIZE - 1)
+                                                               >> PAGE_SHIFT;
+               start = (unsigned long)ubuf >> PAGE_SHIFT;
 
-       if (!IS_ERR(bio)) {
-               rq->bio = rq->biotail = bio;
-               blk_rq_bio_prep(q, rq, bio);
+               /*
+                * A bad offset could cause us to require BIO_MAX_PAGES + 1
+                * pages. If this happens we just lower the requested
+                * mapping len by a page so that we can fit
+                */
+               if (end - start > BIO_MAX_PAGES)
+                       map_len -= PAGE_SIZE;
 
-               rq->buffer = rq->data = NULL;
-               rq->data_len = len;
-               return 0;
+               ret = __blk_rq_map_user(q, rq, ubuf, map_len);
+               if (ret < 0)
+                       goto unmap_rq;
+               bytes_read += ret;
+               ubuf += ret;
        }
 
-       /*
-        * bio is the err-ptr
-        */
-       return PTR_ERR(bio);
+       rq->buffer = rq->data = NULL;
+       return 0;
+unmap_rq:
+       blk_rq_unmap_user(rq);
+       return ret;
 }
 
 EXPORT_SYMBOL(blk_rq_map_user);
@@ -2404,7 +2484,7 @@ EXPORT_SYMBOL(blk_rq_map_user);
  *    unmapping.
  */
 int blk_rq_map_user_iov(request_queue_t *q, struct request *rq,
-                       struct sg_iovec *iov, int iov_count)
+                       struct sg_iovec *iov, int iov_count, unsigned int len)
 {
        struct bio *bio;
 
@@ -2418,10 +2498,15 @@ int blk_rq_map_user_iov(request_queue_t *q, struct request *rq,
        if (IS_ERR(bio))
                return PTR_ERR(bio);
 
-       rq->bio = rq->biotail = bio;
+       if (bio->bi_size != len) {
+               bio_endio(bio, bio->bi_size, 0);
+               bio_unmap_user(bio);
+               return -EINVAL;
+       }
+
+       bio_get(bio);
        blk_rq_bio_prep(q, rq, bio);
        rq->buffer = rq->data = NULL;
-       rq->data_len = bio->bi_size;
        return 0;
 }
 
@@ -2429,23 +2514,26 @@ EXPORT_SYMBOL(blk_rq_map_user_iov);
 
 /**
  * blk_rq_unmap_user - unmap a request with user data
- * @bio:       bio to be unmapped
- * @ulen:      length of user buffer
+ * @rq:                rq to be unmapped
  *
  * Description:
- *    Unmap a bio previously mapped by blk_rq_map_user().
+ *    Unmap a rq previously mapped by blk_rq_map_user().
+ *    rq->bio must be set to the original head of the request.
  */
-int blk_rq_unmap_user(struct bio *bio, unsigned int ulen)
+int blk_rq_unmap_user(struct request *rq)
 {
-       int ret = 0;
+       struct bio *bio, *mapped_bio;
 
-       if (bio) {
-               if (bio_flagged(bio, BIO_USER_MAPPED))
-                       bio_unmap_user(bio);
+       while ((bio = rq->bio)) {
+               if (bio_flagged(bio, BIO_BOUNCED))
+                       mapped_bio = bio->bi_private;
                else
-                       ret = bio_uncopy_user(bio);
-       }
+                       mapped_bio = bio;
 
+               __blk_rq_unmap_user(mapped_bio);
+               rq->bio = bio->bi_next;
+               bio_put(bio);
+       }
        return 0;
 }
 
@@ -2476,11 +2564,8 @@ int blk_rq_map_kern(request_queue_t *q, struct request *rq, void *kbuf,
        if (rq_data_dir(rq) == WRITE)
                bio->bi_rw |= (1 << BIO_RW);
 
-       rq->bio = rq->biotail = bio;
        blk_rq_bio_prep(q, rq, bio);
-
        rq->buffer = rq->data = NULL;
-       rq->data_len = len;
        return 0;
 }
 
@@ -3495,6 +3580,7 @@ void blk_rq_bio_prep(request_queue_t *q, struct request *rq, struct bio *bio)
        rq->hard_cur_sectors = rq->current_nr_sectors;
        rq->hard_nr_sectors = rq->nr_sectors = bio_sectors(bio);
        rq->buffer = bio_data(bio);
+       rq->data_len = bio->bi_size;
 
        rq->bio = rq->biotail = bio;
 }
index 79af431794213867e5ac1c457103d62b0d74cb43..1c3de2b9a6b59c0d6938b082bfb48fa6085d877d 100644 (file)
@@ -65,7 +65,7 @@ noop_latter_request(request_queue_t *q, struct request *rq)
        return list_entry(rq->queuelist.next, struct request, queuelist);
 }
 
-static void *noop_init_queue(request_queue_t *q, elevator_t *e)
+static void *noop_init_queue(request_queue_t *q)
 {
        struct noop_data *nd;
 
index e55a756214375577ffa942dbc239fe79e87985fe..5493c2fbbab177335814a24362b95763eb5dc820 100644 (file)
@@ -226,7 +226,6 @@ static int sg_io(struct file *file, request_queue_t *q,
        unsigned long start_time;
        int writing = 0, ret = 0;
        struct request *rq;
-       struct bio *bio;
        char sense[SCSI_SENSE_BUFFERSIZE];
        unsigned char cmd[BLK_MAX_CDB];
 
@@ -258,30 +257,6 @@ static int sg_io(struct file *file, request_queue_t *q,
        if (!rq)
                return -ENOMEM;
 
-       if (hdr->iovec_count) {
-               const int size = sizeof(struct sg_iovec) * hdr->iovec_count;
-               struct sg_iovec *iov;
-
-               iov = kmalloc(size, GFP_KERNEL);
-               if (!iov) {
-                       ret = -ENOMEM;
-                       goto out;
-               }
-
-               if (copy_from_user(iov, hdr->dxferp, size)) {
-                       kfree(iov);
-                       ret = -EFAULT;
-                       goto out;
-               }
-
-               ret = blk_rq_map_user_iov(q, rq, iov, hdr->iovec_count);
-               kfree(iov);
-       } else if (hdr->dxfer_len)
-               ret = blk_rq_map_user(q, rq, hdr->dxferp, hdr->dxfer_len);
-
-       if (ret)
-               goto out;
-
        /*
         * fill in request structure
         */
@@ -294,7 +269,6 @@ static int sg_io(struct file *file, request_queue_t *q,
        rq->sense_len = 0;
 
        rq->cmd_type = REQ_TYPE_BLOCK_PC;
-       bio = rq->bio;
 
        /*
         * bounce this after holding a reference to the original bio, it's
@@ -309,6 +283,31 @@ static int sg_io(struct file *file, request_queue_t *q,
        if (!rq->timeout)
                rq->timeout = BLK_DEFAULT_TIMEOUT;
 
+       if (hdr->iovec_count) {
+               const int size = sizeof(struct sg_iovec) * hdr->iovec_count;
+               struct sg_iovec *iov;
+
+               iov = kmalloc(size, GFP_KERNEL);
+               if (!iov) {
+                       ret = -ENOMEM;
+                       goto out;
+               }
+
+               if (copy_from_user(iov, hdr->dxferp, size)) {
+                       kfree(iov);
+                       ret = -EFAULT;
+                       goto out;
+               }
+
+               ret = blk_rq_map_user_iov(q, rq, iov, hdr->iovec_count,
+                                         hdr->dxfer_len);
+               kfree(iov);
+       } else if (hdr->dxfer_len)
+               ret = blk_rq_map_user(q, rq, hdr->dxferp, hdr->dxfer_len);
+
+       if (ret)
+               goto out;
+
        rq->retries = 0;
 
        start_time = jiffies;
@@ -339,7 +338,7 @@ static int sg_io(struct file *file, request_queue_t *q,
                        hdr->sb_len_wr = len;
        }
 
-       if (blk_rq_unmap_user(bio, hdr->dxfer_len))
+       if (blk_rq_unmap_user(rq))
                ret = -EFAULT;
 
        /* may not have succeeded, but output values written to control
index c84286cbbe2571e3c5b4fb62bf60b93942ff941a..068fe4f100b0f8e609cd73576f53930c66bdbb4c 100644 (file)
@@ -73,7 +73,6 @@ static unsigned int acpi_irq_irq;
 static acpi_osd_handler acpi_irq_handler;
 static void *acpi_irq_context;
 static struct workqueue_struct *kacpid_wq;
-static struct workqueue_struct *kacpi_notify_wq;
 
 acpi_status acpi_os_initialize(void)
 {
@@ -92,9 +91,8 @@ acpi_status acpi_os_initialize1(void)
                return AE_NULL_ENTRY;
        }
        kacpid_wq = create_singlethread_workqueue("kacpid");
-       kacpi_notify_wq = create_singlethread_workqueue("kacpi_notify");
        BUG_ON(!kacpid_wq);
-       BUG_ON(!kacpi_notify_wq);
+
        return AE_OK;
 }
 
@@ -106,7 +104,6 @@ acpi_status acpi_os_terminate(void)
        }
 
        destroy_workqueue(kacpid_wq);
-       destroy_workqueue(kacpi_notify_wq);
 
        return AE_OK;
 }
@@ -569,7 +566,10 @@ void acpi_os_derive_pci_id(acpi_handle rhandle,    /* upper bound  */
 
 static void acpi_os_execute_deferred(void *context)
 {
-       struct acpi_os_dpc *dpc = (struct acpi_os_dpc *)context;
+       struct acpi_os_dpc *dpc = NULL;
+
+
+       dpc = (struct acpi_os_dpc *)context;
        if (!dpc) {
                printk(KERN_ERR PREFIX "Invalid (NULL) context\n");
                return;
@@ -604,12 +604,14 @@ acpi_status acpi_os_execute(acpi_execute_type type,
        struct acpi_os_dpc *dpc;
        struct work_struct *task;
 
+       ACPI_FUNCTION_TRACE("os_queue_for_execution");
+
        ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
                          "Scheduling function [%p(%p)] for deferred execution.\n",
                          function, context));
 
        if (!function)
-               return AE_BAD_PARAMETER;
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
 
        /*
         * Allocate/initialize DPC structure.  Note that this memory will be
@@ -622,20 +624,26 @@ acpi_status acpi_os_execute(acpi_execute_type type,
         * from the same memory.
         */
 
-       dpc = kmalloc(sizeof(struct acpi_os_dpc) +
-                       sizeof(struct work_struct), GFP_ATOMIC);
+       dpc =
+           kmalloc(sizeof(struct acpi_os_dpc) + sizeof(struct work_struct),
+                   GFP_ATOMIC);
        if (!dpc)
-               return AE_NO_MEMORY;
+               return_ACPI_STATUS(AE_NO_MEMORY);
+
        dpc->function = function;
        dpc->context = context;
+
        task = (void *)(dpc + 1);
        INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc);
-       if (!queue_work((type == OSL_NOTIFY_HANDLER)?
-                       kacpi_notify_wq : kacpid_wq, task)) {
-               status = AE_ERROR;
+
+       if (!queue_work(kacpid_wq, task)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Call to queue_work() failed.\n"));
                kfree(dpc);
+               status = AE_ERROR;
        }
-       return status;
+
+       return_ACPI_STATUS(status);
 }
 
 EXPORT_SYMBOL(acpi_os_execute);
index 7ba5e49ab302c523848930773d474c351fed30a1..6fd174a3714958946be4f4b54377c434694824e2 100644 (file)
@@ -83,10 +83,8 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
                goto out;
 
        ppc = (unsigned int)pr->performance_platform_limit;
-       if (!ppc)
-               goto out;
 
-       if (ppc > pr->performance->state_count)
+       if (ppc >= pr->performance->state_count)
                goto out;
 
        cpufreq_verify_within_limits(policy, 0,
index 234197e57e9e0aea67a385c4a1665b7a2d83d615..f510e1196dc68b8939b9018f615af4a29a92ee3d 100644 (file)
@@ -314,6 +314,17 @@ static const struct pci_device_id ahci_pci_tbl[] = {
        { PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */
        { PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */
        { PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */
+       { PCI_VDEVICE(INTEL, 0x2922), board_ahci }, /* ICH9 */
+       { PCI_VDEVICE(INTEL, 0x2923), board_ahci }, /* ICH9 */
+       { PCI_VDEVICE(INTEL, 0x2924), board_ahci }, /* ICH9 */
+       { PCI_VDEVICE(INTEL, 0x2925), board_ahci }, /* ICH9 */
+       { PCI_VDEVICE(INTEL, 0x2927), board_ahci }, /* ICH9 */
+       { PCI_VDEVICE(INTEL, 0x2929), board_ahci }, /* ICH9M */
+       { PCI_VDEVICE(INTEL, 0x292a), board_ahci }, /* ICH9M */
+       { PCI_VDEVICE(INTEL, 0x292b), board_ahci }, /* ICH9M */
+       { PCI_VDEVICE(INTEL, 0x292f), board_ahci }, /* ICH9M */
+       { PCI_VDEVICE(INTEL, 0x294d), board_ahci }, /* ICH9 */
+       { PCI_VDEVICE(INTEL, 0x294e), board_ahci }, /* ICH9M */
 
        /* JMicron */
        { PCI_VDEVICE(JMICRON, 0x2360), board_ahci }, /* JMicron JMB360 */
index 5c1fc467fc7fd0ed25172def2417f6c420993cf3..47ea111d5acee837d20d8939b9c52c6a46f0357e 100644 (file)
@@ -1451,6 +1451,7 @@ nothing_to_do:
 
 static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
 {
+       struct ata_port *ap = qc->ap;
        struct scsi_cmnd *cmd = qc->scsicmd;
        u8 *cdb = cmd->cmnd;
        int need_sense = (qc->err_mask != 0);
@@ -1459,11 +1460,12 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
         * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE
         * cache
         */
-       if (!need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) &&
+       if (ap->ops->error_handler &&
+           !need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) &&
            ((qc->tf.feature == SETFEATURES_WC_ON) ||
             (qc->tf.feature == SETFEATURES_WC_OFF))) {
-               qc->ap->eh_info.action |= ATA_EH_REVALIDATE;
-               ata_port_schedule_eh(qc->ap);
+               ap->eh_info.action |= ATA_EH_REVALIDATE;
+               ata_port_schedule_eh(ap);
        }
 
        /* For ATA pass thru (SAT) commands, generate a sense block if
@@ -1490,8 +1492,8 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
                }
        }
 
-       if (need_sense && !qc->ap->ops->error_handler)
-               ata_dump_status(qc->ap->id, &qc->result_tf);
+       if (need_sense && !ap->ops->error_handler)
+               ata_dump_status(ap->id, &qc->result_tf);
 
        qc->scsidone(cmd);
 
@@ -3345,20 +3347,23 @@ EXPORT_SYMBOL_GPL(ata_sas_slave_configure);
  *     @ap:    ATA port to which the command is being sent
  *
  *     RETURNS:
- *     Zero.
+ *     Return value from __ata_scsi_queuecmd() if @cmd can be queued,
+ *     0 otherwise.
  */
 
 int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
                     struct ata_port *ap)
 {
+       int rc = 0;
+
        ata_scsi_dump_cdb(ap, cmd);
 
        if (likely(ata_scsi_dev_enabled(ap->device)))
-               __ata_scsi_queuecmd(cmd, done, ap->device);
+               rc = __ata_scsi_queuecmd(cmd, done, ap->device);
        else {
                cmd->result = (DID_BAD_TARGET << 16);
                done(cmd);
        }
-       return 0;
+       return rc;
 }
 EXPORT_SYMBOL_GPL(ata_sas_queuecmd);
index 9ed1c60048f03002cd4d5df7d835a7fe28ad274a..bb7ef570514cd660e2a200af09647bbebd97a416 100644 (file)
@@ -305,7 +305,7 @@ static void clear_lockup (struct atm_vcc *vcc, IADEV *dev) {
 **  |  R | NZ |  5-bit exponent  |        9-bit mantissa         |
 **  +----+----+------------------+-------------------------------+
 ** 
-**    R = reserverd (written as 0)
+**    R = reserved (written as 0)
 **    NZ = 0 if 0 cells/sec; 1 otherwise
 **
 **    if NZ = 1, rate = 1.mmmmmmmmm x 2^(eeeee) cells/sec
index 68ad11af22b41e307277f3826be989c37dbe2bbf..002fde46d38d71737ae07f6d905f8f2b5a8e4603 100644 (file)
@@ -591,8 +591,10 @@ void device_del(struct device * dev)
 
        if (parent)
                klist_del(&dev->knode_parent);
-       if (dev->devt_attr)
+       if (dev->devt_attr) {
                device_remove_file(dev, dev->devt_attr);
+               kfree(dev->devt_attr);
+       }
        if (dev->class) {
                sysfs_remove_link(&dev->kobj, "subsystem");
                sysfs_remove_link(&dev->class->subsys.kset.kobj, dev->bus_id);
index d433f27e0ce2529c1617a6584e42abe55be62d36..aa25f8b09fe3092fc93093a29c8757c6229f6563 100644 (file)
@@ -68,6 +68,7 @@ static struct attribute *aoe_attrs[] = {
        &disk_attr_mac.attr,
        &disk_attr_netif.attr,
        &disk_attr_fwver.attr,
+       NULL
 };
 
 static const struct attribute_group attr_group = {
index 7ea0f48f8fa6e63c1bd081d29910d781cd6834b4..2df5cf4ec7432ee98d4daad48cc799c7b9657575 100644 (file)
@@ -2133,16 +2133,14 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
                rq->timeout = 60 * HZ;
                bio = rq->bio;
 
-               if (rq->bio)
-                       blk_queue_bounce(q, &rq->bio);
-
                if (blk_execute_rq(q, cdi->disk, rq, 0)) {
                        struct request_sense *s = rq->sense;
                        ret = -EIO;
                        cdi->last_sense = s->sense_key;
                }
 
-               if (blk_rq_unmap_user(bio, len))
+               rq->bio = bio;
+               if (blk_rq_unmap_user(rq))
                        ret = -EFAULT;
 
                if (ret)
index 2af12fc4511585d4f7aab36b863378eff152764a..ad8b537ad47bc79203dc3d9421f83a5ddd23a33a 100644 (file)
@@ -994,7 +994,7 @@ config HPET
        help
          If you say Y here, you will have a miscdevice named "/dev/hpet/".  Each
          open selects one of the timers supported by the HPET.  The timers are
-         non-periodioc and/or periodic.
+         non-periodic and/or periodic.
 
 config HPET_RTC_IRQ
        bool "HPET Control RTC IRQ" if !HPET_EMULATE_RTC
index c39200161688eef6ed3b45b6a1de451f4cd67dc9..5ff457b41efbc4b4a349fa4ee90e4413c6249134 100644 (file)
@@ -1054,7 +1054,7 @@ void *agp_generic_alloc_page(struct agp_bridge_data *bridge)
 {
        struct page * page;
 
-       page = alloc_page(GFP_KERNEL);
+       page = alloc_page(GFP_KERNEL | GFP_DMA32);
        if (page == NULL)
                return NULL;
 
index d1ede7db5a12f46027174a41ae52c2692b180bf9..555b3a8ab49c128b5965c5e8c7d4e80eb20cfe4a 100644 (file)
@@ -169,7 +169,7 @@ static void *i8xx_alloc_pages(void)
 {
        struct page * page;
 
-       page = alloc_pages(GFP_KERNEL, 2);
+       page = alloc_pages(GFP_KERNEL | GFP_DMA32, 2);
        if (page == NULL)
                return NULL;
 
@@ -387,11 +387,7 @@ static void intel_i830_init_gtt_entries(void)
        /* We obtain the size of the GTT, which is also stored (for some
         * reason) at the top of stolen memory. Then we add 4KB to that
         * for the video BIOS popup, which is also stored in there. */
-
-       if (IS_I965)
-               size = 512 + 4;
-       else
-               size = agp_bridge->driver->fetch_size() + 4;
+       size = agp_bridge->driver->fetch_size() + 4;
 
        if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82830_HB ||
            agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) {
@@ -805,6 +801,26 @@ static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge)
 
        return 0;
 }
+
+/*
+ * The i965 supports 36-bit physical addresses, but to keep
+ * the format of the GTT the same, the bits that don't fit
+ * in a 32-bit word are shifted down to bits 4..7.
+ *
+ * Gcc is smart enough to notice that "(addr >> 28) & 0xf0"
+ * is always zero on 32-bit architectures, so no need to make
+ * this conditional.
+ */
+static unsigned long intel_i965_mask_memory(struct agp_bridge_data *bridge,
+       unsigned long addr, int type)
+{
+       /* Shift high bits down */
+       addr |= (addr >> 28) & 0xf0;
+
+       /* Type checking must be done elsewhere */
+       return addr | bridge->driver->masks[type].mask;
+}
+
 static int intel_i965_fetch_size(void)
 {
        struct aper_size_info_fixed *values;
@@ -832,7 +848,8 @@ static int intel_i965_fetch_size(void)
 
        agp_bridge->previous_size = agp_bridge->current_size = (void *)(values + offset);
 
-       return values[offset].size;
+       /* The i965 GTT is always sized as if it had a 512kB aperture size */
+       return 512;
 }
 
 /* The intel i965 automatically initializes the agp aperture during POST.
@@ -1584,7 +1601,7 @@ static struct agp_bridge_driver intel_i965_driver = {
        .fetch_size             = intel_i965_fetch_size,
        .cleanup                = intel_i915_cleanup,
        .tlb_flush              = intel_i810_tlbflush,
-       .mask_memory            = intel_i810_mask_memory,
+       .mask_memory            = intel_i965_mask_memory,
        .masks                  = intel_i810_masks,
        .agp_enable             = intel_i810_agp_enable,
        .cache_flush            = global_cache_flush,
index da06f138334ecdb58bbd823021cc84c7022c36a0..7ebce2ec78972383ec227d519ec1aa5998a28318 100644 (file)
@@ -85,7 +85,7 @@ int zft_vmalloc_once(void *new, size_t size)
                peak_memory = used_memory;
        }
        TRACE_ABORT(0, ft_t_noise,
-                   "allocated buffer @ %p, %d bytes", *(void **)new, size);
+                   "allocated buffer @ %p, %zd bytes", *(void **)new, size);
 }
 int zft_vmalloc_always(void *new, size_t size)
 {
@@ -101,7 +101,7 @@ void zft_vfree(void *old, size_t size)
        if (*(void **)old) {
                vfree(*(void **)old);
                used_memory -= size;
-               TRACE(ft_t_noise, "released buffer @ %p, %d bytes",
+               TRACE(ft_t_noise, "released buffer @ %p, %zd bytes",
                      *(void **)old, size);
                *(void **)old = NULL;
        }
index 4df6ab2206a1b77159e3bf88731e9d2d84ac8a17..167ebc84e8d7361d35577ce59d4a74379437c0c4 100644 (file)
@@ -922,7 +922,7 @@ int RIOUnUse(unsigned long iPortP, struct CmdBlk *CmdBlkP)
 ** 
 ** Packet is an actual packet structure to be filled in with the packet
 ** information associated with the command. You need to fill in everything,
-** as the command processore doesn't process the command packet in any way.
+** as the command processor doesn't process the command packet in any way.
 ** 
 ** The PreFuncP is called before the packet is enqueued on the host rup.
 ** PreFuncP is called as (*PreFuncP)(PreArg, CmdBlkP);. PreFuncP must
index 99f3df02b61c31adff0df7bcce73659fed7a5992..0794844369d6fcdedda20fae17ddd5d39c21f6e7 100644 (file)
@@ -222,7 +222,7 @@ int RIOBoardTest(unsigned long paddr, void __iomem *caddr, unsigned char type, i
 ** which value will be written into memory.
 ** Call with op set to zero means that the RAM will not be read and checked
 ** before it is written.
-** Call with op not zero, and the RAM will be read and compated with val[op-1]
+** Call with op not zero and the RAM will be read and compared with val[op-1]
 ** to check that the data from the previous phase was retained.
 */
 
index 1066d976070487c6427c42b23bca1d8f754bf1b2..bb498d24adcc471cf08e50fa076e093eb5f9c54b 100644 (file)
@@ -87,8 +87,8 @@ static char *_rioparam_c_sccs_ = "@(#)rioparam.c      1.3";
 ** command bit set onto the port. The command bit is in the len field,
 ** and gets ORed in with the actual byte count.
 **
-** When you send a packet with the command bit set, then the first
-** data byte ( data[0] ) is interpretted as the command to execute.
+** When you send a packet with the command bit set the first
+** data byte (data[0]) is interpreted as the command to execute.
 ** It also governs what data structure overlay should accompany the packet.
 ** Commands are defined in cirrus/cirrus.h
 **
@@ -103,7 +103,7 @@ static char *_rioparam_c_sccs_ = "@(#)rioparam.c    1.3";
 **
 ** Most commands do not use the remaining bytes in the data array. The
 ** exceptions are OPEN MOPEN and CONFIG. (NB. As with the SI CONFIG and
-** OPEN are currently analagous). With these three commands the following
+** OPEN are currently analogous). With these three commands the following
 ** 11 data bytes are all used to pass config information such as baud rate etc.
 ** The fields are also defined in cirrus.h. Some contain straightforward
 ** information such as the transmit XON character. Two contain the transmit and
index 2444a0e24b3106bedabb9f00d6dcdda5b4be81b7..244d30a03fef9d80daaf2092875361147202f61e 100644 (file)
@@ -792,15 +792,14 @@ static int __init tlclk_init(void)
        ret = misc_register(&tlclk_miscdev);
        if (ret < 0) {
                printk(KERN_ERR "tlclk: misc_register returns %d.\n", ret);
-               ret = -EBUSY;
                goto out3;
        }
 
        tlclk_device = platform_device_register_simple("telco_clock",
                                -1, NULL, 0);
-       if (!tlclk_device) {
+       if (IS_ERR(tlclk_device)) {
                printk(KERN_ERR "tlclk: platform_device_register failed.\n");
-               ret = -EBUSY;
+               ret = PTR_ERR(tlclk_device);
                goto out4;
        }
 
index 2cc71b66231ec07e81d7221578f040c6fdcaeed0..491779af8d556963e4e86a742af828bd6ea347e0 100644 (file)
@@ -107,6 +107,7 @@ config CPU_FREQ_GOV_USERSPACE
 
 config CPU_FREQ_GOV_ONDEMAND
        tristate "'ondemand' cpufreq policy governor"
+       select CPU_FREQ_TABLE
        help
          'ondemand' - This driver adds a dynamic cpufreq policy governor.
          The governor does a periodic polling and 
index 86e69b7f9122d3639e834307c5a1662e33ee8986..dd0c2623e27be0312eba1220c8d1eb38fe09bef3 100644 (file)
@@ -59,7 +59,7 @@ static int __init init_cpufreq_transition_notifier_list(void)
        srcu_init_notifier_head(&cpufreq_transition_notifier_list);
        return 0;
 }
-core_initcall(init_cpufreq_transition_notifier_list);
+pure_initcall(init_cpufreq_transition_notifier_list);
 
 static LIST_HEAD(cpufreq_governor_list);
 static DEFINE_MUTEX (cpufreq_governor_mutex);
index 1ce01fb0ac09f1139d04480fb9824f738e44f81f..68fe863f9d54b15fbcbd4bf4b75e2bcda94b7757 100644 (file)
@@ -137,7 +137,8 @@ static int ixp4xx_i2c_probe(struct platform_device *plat_dev)
        gpio_line_set(gpio->scl_pin, 0);
        gpio_line_set(gpio->sda_pin, 0);
 
-       if ((err = i2c_bit_add_bus(&drv_data->adapter) != 0)) {
+       err = i2c_bit_add_bus(&drv_data->adapter);
+       if (err) {
                printk(KERN_ERR "ERROR: Could not install %s\n", plat_dev->dev.bus_id);
 
                kfree(drv_data);
index 32aab0d34ee930eb3b9a6f0a95fa752c7f32b7d9..714bae780953c821792ec410597411f722c7df87 100644 (file)
@@ -494,11 +494,12 @@ static __init int scx200_create_pci(const char *text, struct pci_dev *pdev,
        iface->pdev = pdev;
        iface->bar = bar;
 
-       pci_enable_device_bars(iface->pdev, 1 << iface->bar);
+       rc = pci_enable_device_bars(iface->pdev, 1 << iface->bar);
+       if (rc)
+               goto errout_free;
 
        rc = pci_request_region(iface->pdev, iface->bar, iface->adapter.name);
-
-       if (rc != 0) {
+       if (rc) {
                printk(KERN_ERR NAME ": can't allocate PCI BAR %d\n",
                                iface->bar);
                goto errout_free;
index 8ccee9c769f8ad54ee80f539a16eaa3a15615684..e3a267622bb6073fdcb5911dfca2c4178bdf670f 100644 (file)
@@ -1635,7 +1635,7 @@ static int idefloppy_begin_format(ide_drive_t *drive, int __user *arg)
 /*
 ** Get ATAPI_FORMAT_UNIT progress indication.
 **
-** Userland gives a pointer to an int.  The int is set to a progresss
+** Userland gives a pointer to an int.  The int is set to a progress
 ** indicator 0-65536, with 65536=100%.
 **
 ** If the drive does not support format progress indication, we just check
index 244f7eb7006d43ea5f7f691a170e93ff057fc6c0..cfad09accf527327da76097bc2995bc6c3412aa1 100644 (file)
@@ -768,14 +768,7 @@ ioc4_ide_init(void)
        return ioc4_register_submodule(&ioc4_ide_submodule);
 }
 
-static void __devexit
-ioc4_ide_exit(void)
-{
-       ioc4_unregister_submodule(&ioc4_ide_submodule);
-}
-
 late_initcall(ioc4_ide_init); /* Call only after IDE init is done */
-module_exit(ioc4_ide_exit);
 
 MODULE_AUTHOR("Aniket Malatpure/Jeremy Higdon");
 MODULE_DESCRIPTION("IDE PCI driver module for SGI IOC4 Base-IO Card");
index 5ca471ac6542a269d516e89dc3cd7c24b5e275cc..90c14543677de94c1f1a74464d4bbe27ae6ef9cf 100644 (file)
@@ -1,6 +1,6 @@
 config INFINIBAND_IPATH
        tristate "QLogic InfiniPath Driver"
-       depends on (PCI_MSI || HT_IRQ) && 64BIT && INFINIBAND
+       depends on (PCI_MSI || HT_IRQ) && 64BIT && INFINIBAND && NET
        ---help---
        This is a driver for QLogic InfiniPath host channel adapters,
        including InfiniBand verbs support.  This driver allows these
index 1eaf00e9862c5a4a0381d0570b5ac7ee0723f93c..85522daeb946a25a6c4cba91568fbeecf48508bc 100644 (file)
@@ -49,6 +49,8 @@
 
 #include <net/dst.h>
 
+#define IPOIB_QPN(ha) (be32_to_cpup((__be32 *) ha) & 0xffffff)
+
 MODULE_AUTHOR("Roland Dreier");
 MODULE_DESCRIPTION("IP-over-InfiniBand net driver");
 MODULE_LICENSE("Dual BSD/GPL");
@@ -520,8 +522,7 @@ static void neigh_add_path(struct sk_buff *skb, struct net_device *dev)
                memcpy(&neigh->dgid.raw, &path->pathrec.dgid.raw,
                       sizeof(union ib_gid));
 
-               ipoib_send(dev, skb, path->ah,
-                          be32_to_cpup((__be32 *) skb->dst->neighbour->ha));
+               ipoib_send(dev, skb, path->ah, IPOIB_QPN(skb->dst->neighbour->ha));
        } else {
                neigh->ah  = NULL;
                __skb_queue_tail(&neigh->queue, skb);
@@ -599,8 +600,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
                ipoib_dbg(priv, "Send unicast ARP to %04x\n",
                          be16_to_cpu(path->pathrec.dlid));
 
-               ipoib_send(dev, skb, path->ah,
-                          be32_to_cpup((__be32 *) phdr->hwaddr));
+               ipoib_send(dev, skb, path->ah, IPOIB_QPN(phdr->hwaddr));
        } else if ((path->query || !path_rec_start(dev, path)) &&
                   skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
                /* put pseudoheader back on for next time */
@@ -661,8 +661,7 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
                                goto out;
                        }
 
-                       ipoib_send(dev, skb, neigh->ah,
-                                  be32_to_cpup((__be32 *) skb->dst->neighbour->ha));
+                       ipoib_send(dev, skb, neigh->ah, IPOIB_QPN(skb->dst->neighbour->ha));
                        goto out;
                }
 
@@ -694,7 +693,7 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
                                           IPOIB_GID_FMT "\n",
                                           skb->dst ? "neigh" : "dst",
                                           be16_to_cpup((__be16 *) skb->data),
-                                          be32_to_cpup((__be32 *) phdr->hwaddr),
+                                          IPOIB_QPN(phdr->hwaddr),
                                           IPOIB_GID_RAW_ARG(phdr->hwaddr + 4));
                                dev_kfree_skb_any(skb);
                                ++priv->stats.tx_dropped;
@@ -777,7 +776,7 @@ static void ipoib_neigh_destructor(struct neighbour *n)
 
        ipoib_dbg(priv,
                  "neigh_destructor for %06x " IPOIB_GID_FMT "\n",
-                 be32_to_cpup((__be32 *) n->ha),
+                 IPOIB_QPN(n->ha),
                  IPOIB_GID_RAW_ARG(n->ha + 4));
 
        spin_lock_irqsave(&priv->lock, flags);
index 708d5a1bc3d28466e8fcb93c7d357cdc1222d36b..979b93e33da7a9e0461594887267d17c8e3891a0 100644 (file)
  * 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
- *
- * Should you need to contact me, the author, you can do so either by
- * email or by paper mail:
- * Jan-Benedict Glaw, Lilienstraçµ½ 16, 33790 H顤ste (near Halle/Westf.),
- * Germany.
  */
 
 #include <linux/delay.h>
index 11e6f937c1e479c477798f49533d0629c0707f73..7b4ec3f60dbf6c61b5d0b24e584d6aa137f7a73f 100644 (file)
@@ -464,7 +464,7 @@ int diva_4bri_init_card(diva_os_xdi_adapter_t * a)
 
 /*
 **  Cleanup function will be called for master adapter only
-**  this is garanteed by design: cleanup callback is set
+**  this is guaranteed by design: cleanup callback is set
 **  by master adapter only
 */
 static int diva_4bri_cleanup_adapter(diva_os_xdi_adapter_t * a)
index eb57a988e0488aac6d5a7f13c48cda909923111c..cfd2718a490d35ed710f595976d6ba72eea1b97b 100644 (file)
@@ -344,7 +344,7 @@ config HISAX_HFC_SX
 
 config HISAX_ENTERNOW_PCI
        bool "Formula-n enter:now PCI card"
-       depends on PCI && (BROKEN || !(SPARC || PPC || PARISC || M68K || FRV))
+       depends on HISAX_NETJET && PCI && (BROKEN || !(SPARC || PPC || PARISC || M68K || FRV))
        help
          This enables HiSax support for the Formula-n enter:now PCI
          ISDN card.
index e8f9c077fa85fb183a47e81844e9f08f2080bb42..9d5d2a56b4e9e7e8d184f92f21498b3360360999 100644 (file)
@@ -16,7 +16,7 @@
 
 /*
 *  include Genero generated HFC-4S/8S header file hfc48scu.h
-*  for comlete register description. This will define _HFC48SCU_H_
+*  for complete register description. This will define _HFC48SCU_H_
 *  to prevent redefinitions
 */
 
index 6d043172555520c50cb0ddb87a15a0d5fb9ef533..cd3b5ad534914cd1409d5b62ed28169d61d0677a 100644 (file)
@@ -1442,7 +1442,7 @@ l2_tei_remove(struct FsmInst *fi, int event, void *arg)
 }
 
 static void
-l2_st14_persistant_da(struct FsmInst *fi, int event, void *arg)
+l2_st14_persistent_da(struct FsmInst *fi, int event, void *arg)
 {
        struct PStack *st = fi->userdata;
        
@@ -1453,7 +1453,7 @@ l2_st14_persistant_da(struct FsmInst *fi, int event, void *arg)
 }
 
 static void
-l2_st5_persistant_da(struct FsmInst *fi, int event, void *arg)
+l2_st5_persistent_da(struct FsmInst *fi, int event, void *arg)
 {
        struct PStack *st = fi->userdata;
 
@@ -1466,7 +1466,7 @@ l2_st5_persistant_da(struct FsmInst *fi, int event, void *arg)
 }
 
 static void
-l2_st6_persistant_da(struct FsmInst *fi, int event, void *arg)
+l2_st6_persistent_da(struct FsmInst *fi, int event, void *arg)
 {
        struct PStack *st = fi->userdata;
 
@@ -1477,7 +1477,7 @@ l2_st6_persistant_da(struct FsmInst *fi, int event, void *arg)
 }
 
 static void
-l2_persistant_da(struct FsmInst *fi, int event, void *arg)
+l2_persistent_da(struct FsmInst *fi, int event, void *arg)
 {
        struct PStack *st = fi->userdata;
 
@@ -1612,14 +1612,14 @@ static struct FsmNode L2FnList[] __initdata =
        {ST_L2_6, EV_L2_FRAME_ERROR, l2_frame_error},
        {ST_L2_7, EV_L2_FRAME_ERROR, l2_frame_error_reest},
        {ST_L2_8, EV_L2_FRAME_ERROR, l2_frame_error_reest},
-       {ST_L2_1, EV_L1_DEACTIVATE, l2_st14_persistant_da},
+       {ST_L2_1, EV_L1_DEACTIVATE, l2_st14_persistent_da},
        {ST_L2_2, EV_L1_DEACTIVATE, l2_st24_tei_remove},
        {ST_L2_3, EV_L1_DEACTIVATE, l2_st3_tei_remove},
-       {ST_L2_4, EV_L1_DEACTIVATE, l2_st14_persistant_da},
-       {ST_L2_5, EV_L1_DEACTIVATE, l2_st5_persistant_da},
-       {ST_L2_6, EV_L1_DEACTIVATE, l2_st6_persistant_da},
-       {ST_L2_7, EV_L1_DEACTIVATE, l2_persistant_da},
-       {ST_L2_8, EV_L1_DEACTIVATE, l2_persistant_da},
+       {ST_L2_4, EV_L1_DEACTIVATE, l2_st14_persistent_da},
+       {ST_L2_5, EV_L1_DEACTIVATE, l2_st5_persistent_da},
+       {ST_L2_6, EV_L1_DEACTIVATE, l2_st6_persistent_da},
+       {ST_L2_7, EV_L1_DEACTIVATE, l2_persistent_da},
+       {ST_L2_8, EV_L1_DEACTIVATE, l2_persistent_da},
 };
 
 #define L2_FN_COUNT (sizeof(L2FnList)/sizeof(struct FsmNode))
index 53304e6991ac61326fbec9001d362530f62bd8d9..a2ab2eebfc685322a640d3c920ddefd1531b1033 100644 (file)
@@ -348,7 +348,7 @@ static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wra
 
 static void dvb_frontend_swzigzag(struct dvb_frontend *fe)
 {
-       fe_status_t s;
+       fe_status_t s = 0;
        struct dvb_frontend_private *fepriv = fe->frontend_priv;
 
        /* if we've got no parameters, just keep idling */
index 7456b0b9976b0ebbacc8a61bf686101b14d05a13..4c27a2d90a38cf1e3f763a6535bd2d1113775720 100644 (file)
@@ -441,6 +441,10 @@ static int tda10086_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_pa
 
        dprintk ("%s\n", __FUNCTION__);
 
+       // check for invalid symbol rate
+       if (fe_params->u.qpsk.symbol_rate < 500000)
+               return -EINVAL;
+
        // calculate the updated frequency (note: we convert from Hz->kHz)
        tmp64 = tda10086_read_byte(state, 0x52);
        tmp64 |= (tda10086_read_byte(state, 0x51) << 8);
index fc1267b8c892f43627b9a8c2e1749fad25ad64fe..9a155396d6acd1648d45f255d5faf04ef8be9720 100644 (file)
@@ -500,14 +500,14 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte
 
 /*      New design (By Emard)
 **      this rps1 code will copy internal HS event to GPIO3 pin.
-**      GPIO3 is in budget-patch hardware connectd to port B VSYNC
+**      GPIO3 is in budget-patch hardware connected to port B VSYNC
 
 **      HS is an internal event of 7146, accessible with RPS
 **      and temporarily raised high every n lines
 **      (n in defined in the RPS_THRESH1 counter threshold)
 **      I think HS is raised high on the beginning of the n-th line
 **      and remains high until this n-th line that triggered
-**      it is completely received. When the receiption of n-th line
+**      it is completely received. When the reception of n-th line
 **      ends, HS is lowered.
 
 **      To transmit data over DMA, 7146 needs changing state at
@@ -541,7 +541,7 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte
 **      hardware debug note: a working budget card (including budget patch)
 **      with vpeirq() interrupt setup in mode "0x90" (every 64K) will
 **      generate 3 interrupts per 25-Hz DMA frame of 2*188*512 bytes
-**      and that means 3*25=75 Hz of interrupt freqency, as seen by
+**      and that means 3*25=75 Hz of interrupt frequency, as seen by
 **      watch cat /proc/interrupts
 **
 **      If this frequency is 3x lower (and data received in the DMA
@@ -550,7 +550,7 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte
 **      this means VSYNC line is not connected in the hardware.
 **      (check soldering pcb and pins)
 **      The same behaviour of missing VSYNC can be duplicated on budget
-**      cards, by seting DD1_INIT trigger mode 7 in 3rd nibble.
+**      cards, by setting DD1_INIT trigger mode 7 in 3rd nibble.
 */
 
        // Setup RPS1 "program" (p35)
index e58f0391e9d1ac0386a707bfaf9373dcab261dfa..56f1c80defc63deead3ec65349f727408ace2e7f 100644 (file)
 #include "lnbp21.h"
 #include "bsru6.h"
 
+static int diseqc_method;
+module_param(diseqc_method, int, 0444);
+MODULE_PARM_DESC(diseqc_method, "Select DiSEqC method for subsystem id 13c2:1003, 0: default, 1: more reliable (for newer revisions only)");
+
 static void Set22K (struct budget *budget, int state)
 {
        struct saa7146_dev *dev=budget->dev;
@@ -382,6 +386,11 @@ static void frontend_init(struct budget *budget)
                if (budget->dvb_frontend) {
                        budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params;
                        budget->dvb_frontend->tuner_priv = &budget->i2c_adap;
+                       if (budget->dev->pci->subsystem_device == 0x1003 && diseqc_method == 0) {
+                               budget->dvb_frontend->ops.diseqc_send_master_cmd = budget_diseqc_send_master_cmd;
+                               budget->dvb_frontend->ops.diseqc_send_burst = budget_diseqc_send_burst;
+                               budget->dvb_frontend->ops.set_tone = budget_set_tone;
+                       }
                        break;
                }
                break;
index bf267552941fb78cecdb770ec7671f39788e420b..b8fde5cf4735567919c3dfa19e79ca99940018d2 100644 (file)
@@ -24,7 +24,7 @@ config VIDEO_HELPER_CHIPS_AUTO
          decode audio/video standards. This option will autoselect
          all pertinent modules to each selected video module.
 
-         Unselect this only if you know exaclty what you are doing, since
+         Unselect this only if you know exactly what you are doing, since
          it may break support on some boards.
 
          In doubt, say Y.
index f786ab11d2cd9b1a48cb0aff6bd70f85c19abd2f..86e353b26b53091c8deb0590ee18f272bead6d3a 100644 (file)
@@ -1182,8 +1182,6 @@ static void et61x251_release_resources(struct et61x251_device* cam)
        video_set_drvdata(cam->v4ldev, NULL);
        video_unregister_device(cam->v4ldev);
 
-       usb_put_dev(cam->usbdev);
-
        mutex_unlock(&et61x251_sysfs_lock);
 
        kfree(cam->control_buffer);
@@ -1275,6 +1273,7 @@ static int et61x251_release(struct inode* inode, struct file* filp)
 
        if (cam->state & DEV_DISCONNECTED) {
                et61x251_release_resources(cam);
+               usb_put_dev(cam->usbdev);
                mutex_unlock(&cam->dev_mutex);
                kfree(cam);
                return 0;
index 46c1148308843a4d8ed3e0db02d6f20fd8f73c76..e8db6e58d390167006810e2fc233547527bd5b90 100644 (file)
@@ -1095,8 +1095,7 @@ static int pwc_video_open(struct inode *inode, struct file *file)
        PWC_DEBUG_OPEN(">> video_open called(vdev = 0x%p).\n", vdev);
 
        pdev = (struct pwc_device *)vdev->priv;
-       if (pdev == NULL)
-               BUG();
+       BUG_ON(!pdev);
        if (pdev->vopen) {
                PWC_DEBUG_OPEN("I'm busy, someone is using the device.\n");
                return -EBUSY;
index a81285ca7d5bcbb98d54f8bb326536e064442815..7b9859c33018e41803be47f094626cd6b17409c2 100644 (file)
@@ -212,8 +212,10 @@ static void read_from_buf(struct saa6588 *s, struct rds_command *a)
        if (rd_blocks > s->block_count)
                rd_blocks = s->block_count;
 
-       if (!rd_blocks)
+       if (!rd_blocks) {
+               spin_unlock_irqrestore(&s->lock, flags);
                return;
+       }
 
        for (i = 0; i < rd_blocks; i++) {
                if (block_to_user_buf(s, buf_ptr)) {
index c5719f7bd1acafbaee6f53c8553363c35f1b5bf2..f28398dd9d935d794d4c23582f9a43294f112517 100644 (file)
@@ -1464,8 +1464,6 @@ static int saa711x_attach(struct i2c_adapter *adapter, int address, int kind)
        client->driver = &i2c_driver_saa711x;
        snprintf(client->name, sizeof(client->name) - 1, "saa7115");
 
-       v4l_dbg(1, debug, client, "detecting saa7115 client on address 0x%x\n", address << 1);
-
        for (i=0;i<0x0f;i++) {
                saa711x_write(client, 0, i);
                name[i] = (saa711x_read(client, 0) &0x0f) +'0';
@@ -1477,6 +1475,13 @@ static int saa711x_attach(struct i2c_adapter *adapter, int address, int kind)
        saa711x_write(client, 0, 5);
        chip_id = saa711x_read(client, 0) & 0x0f;
 
+       /* Check whether this chip is part of the saa711x series */
+       if (memcmp(name, "1f711", 5)) {
+               v4l_dbg(1, debug, client, "chip found @ 0x%x (ID %s) does not match a known saa711x chip.\n",
+                       address << 1, name);
+               return 0;
+       }
+
        snprintf(client->name, sizeof(client->name) - 1, "saa711%d",chip_id);
        v4l_info(client, "saa711%d found (%s) @ 0x%x (%s)\n", chip_id, name, address << 1, adapter->name);
 
index a4702d3c2aca4f295faa28dff8ca5c9c37bf49e1..42fb60d985b999d5b939609de79a5e87449e6878 100644 (file)
@@ -1462,8 +1462,6 @@ static void sn9c102_release_resources(struct sn9c102_device* cam)
        video_set_drvdata(cam->v4ldev, NULL);
        video_unregister_device(cam->v4ldev);
 
-       usb_put_dev(cam->usbdev);
-
        mutex_unlock(&sn9c102_sysfs_lock);
 
        kfree(cam->control_buffer);
@@ -1555,6 +1553,7 @@ static int sn9c102_release(struct inode* inode, struct file* filp)
 
        if (cam->state & DEV_DISCONNECTED) {
                sn9c102_release_resources(cam);
+               usb_put_dev(cam->usbdev);
                mutex_unlock(&cam->dev_mutex);
                kfree(cam);
                return 0;
index e5c72719debc70496596980d67213ea3dd08770f..051b7c5b8f03a6da69bef8edde3488f841638b46 100644 (file)
@@ -6185,7 +6185,7 @@ mpt_spi_log_info(MPT_ADAPTER *ioc, u32 log_info)
                "Abort",                                        /* 12h */
                "IO Not Yet Executed",                          /* 13h */
                "IO Executed",                                  /* 14h */
-               "Persistant Reservation Out Not Affiliation Owner", /* 15h */
+               "Persistent Reservation Out Not Affiliation Owner", /* 15h */
                "Open Transmit DMA Abort",                      /* 16h */
                "IO Device Missing Delay Retry",                /* 17h */
                NULL,                                           /* 18h */
index 762fa28958918fbd21770a574f035a725bb14bd5..d593ef342e759f1a551e8303d250f981fd5f4fd6 100644 (file)
@@ -640,8 +640,7 @@ mmc_omap_prepare_dma(struct mmc_omap_host *host, struct mmc_data *data)
        }
 
        /* Max limit for DMA frame count is 0xffff */
-       if (unlikely(count > 0xffff))
-               BUG();
+       BUG_ON(count > 0xffff);
 
        OMAP_MMC_WRITE(host->base, BUF, buf);
        omap_set_dma_transfer_params(dma_ch, OMAP_DMA_DATA_TYPE_S16,
index 7ea49a0d5ec32490633e27a3219e9b2335c3024b..296159ec5189eafc0e6c68d118bde8772725ac95 100644 (file)
@@ -1087,7 +1087,7 @@ static int inval_cache_and_wait_for_operation(
                }
                spin_lock(chip->mutex);
 
-               if (chip->state != chip_state) {
+               while (chip->state != chip_state) {
                        /* Someone's suspended the operation: sleep */
                        DECLARE_WAITQUEUE(wait, current);
                        set_current_state(TASK_UNINTERRUPTIBLE);
index 24747bdc3e19fd85ab2c6fe03a8352e78a6ec966..d132ed571f1398d8ec8fb35f6c126c6aafd5f717 100644 (file)
@@ -607,7 +607,7 @@ config MTD_BAST_MAXSIZE
        default "4"
 
 config MTD_SHARP_SL
-       bool "ROM maped on Sharp SL Series"
+       bool "ROM mapped on Sharp SL Series"
        depends on MTD && ARCH_PXA
        help
          This enables access to the flash chip on the Sharp SL Series of PDAs.
index 92b5d883d7b0e4f8b4ad978a6fac2a9c44c2bfc4..65e5ee552010be7a4c147a34f806ac3d9a5e46d0 100644 (file)
@@ -80,7 +80,7 @@ struct mtd_partition flagadm_parts[] = {
                .size =         FLASH_PARTITION2_SIZE
        },
        {
-               .name =         "Persistant storage",
+               .name =         "Persistent storage",
                .offset =       FLASH_PARTITION3_ADDR,
                .size =         FLASH_PARTITION3_SIZE
        }
index 6e863aa9894c9ed4af4e89d9a56be08f3a00a541..b6c70c58ae99d4af1e5c832cc74f5bcc8834c7f2 100644 (file)
@@ -32,7 +32,7 @@ config IFB
        tristate "Intermediate Functional Block support"
        depends on NET_CLS_ACT
        ---help---
-         This is an intermidiate driver that allows sharing of
+         This is an intermediate driver that allows sharing of
          resources.
          To compile this driver as a module, choose M here: the module
          will be called ifb.  If you want to use more than one ifb
@@ -2136,7 +2136,7 @@ config SK98LIN
          This driver supports the original Yukon chipset. A cleaner driver is 
          also available (skge) which seems to work better than this one.
 
-         This driver does not support the newer Yukon2 chipset. A seperate
+         This driver does not support the newer Yukon2 chipset. A separate
          driver, sky2, is provided to support Yukon2-based adapters.
 
          The following adapters are supported by this driver:
index 19ab3441269c39133fe12b2c39743262eeefbce3..3a8df479cbdad660351a676b54912074fb597062 100644 (file)
@@ -1215,7 +1215,7 @@ static void e100_setup_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb
 *  the literal in the instruction before the code is loaded, the
 *  driver can change the algorithm.
 *
-*  INTDELAY - This loads the dead-man timer with its inital value.
+*  INTDELAY - This loads the dead-man timer with its initial value.
 *    When this timer expires the interrupt is asserted, and the
 *    timer is reset each time a new packet is received.  (see
 *    BUNDLEMAX below to set the limit on number of chained packets)
index 65077f39da69970e7e51b6854febb8998f8f527e..796c4f7d4260da900321bc5452ff4c5a5a72c707 100644 (file)
@@ -3868,7 +3868,7 @@ e1000_phy_hw_reset(struct e1000_hw *hw)
 *
 * hw - Struct containing variables accessed by shared code
 *
-* Sets bit 15 of the MII Control regiser
+* Sets bit 15 of the MII Control register
 ******************************************************************************/
 int32_t
 e1000_phy_reset(struct e1000_hw *hw)
index 86b3bb9bec2d38727922fda410b58f73f9019fde..92420f007b97ebc79bf5c07b212a1985a50d9e3f 100644 (file)
@@ -914,7 +914,7 @@ static void decode_prio_command(struct sixpack *sp, unsigned char cmd)
                                        printk(KERN_DEBUG "6pack: protocol violation\n");
                                else
                                        sp->status = 0;
-                               cmd &= !SIXP_RX_DCD_MASK;
+                               cmd &= ~SIXP_RX_DCD_MASK;
                }
                sp->status = cmd & SIXP_PRIO_DATA_MASK;
        } else { /* output watchdog char if idle */
index b79ec0d7480fa9c411fd723cb93b13c5a47f344b..ecb61f876f27709cd63098c6e9a62a924b7401a2 100644 (file)
@@ -61,8 +61,8 @@ config FIXED_PHY
        depends on PHYLIB
        ---help---
          Adds the driver to PHY layer to cover the boards that do not have any PHY bound,
-         but with the ability to manipulate with speed/link in software. The relavant MII
-         speed/duplex parameters could be effectively handled in user-specified  fuction.
+         but with the ability to manipulate the speed/link in software. The relevant MII
+         speed/duplex parameters could be effectively handled in a user-specified function.
          Currently tested with mpc866ads.
 
 config FIXED_MII_10_FDX
index 27f90b2139c0cc0db75c9bb10020085cca068527..b977ed85ff391c96dd122a45c8d2772b602b5fda 100644 (file)
@@ -1473,8 +1473,8 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        struct rtl8169_private *tp;
        struct net_device *dev;
        void __iomem *ioaddr;
-       unsigned int i, pm_cap;
-       int rc;
+       unsigned int pm_cap;
+       int i, rc;
 
        if (netif_msg_drv(&debug)) {
                printk(KERN_INFO "%s Gigabit Ethernet driver %s loaded\n",
index 778d9e618ebd545b3349fffca86369b99c65a36d..3fa67171e832fdfa6a6f3c0aea855b771a426ce3 100644 (file)
@@ -160,7 +160,7 @@ struct s_IOCTL {
 
 /*
 ** Interim definition of SK_DRV_TIMER placed in this file until 
-** common modules have boon finallized
+** common modules have been finalized
 */
 #define SK_DRV_TIMER                   11 
 #define        SK_DRV_MODERATION_TIMER         1
index 07c1b4c8699d3b8c7675988c66e3d90ab86a0682..37ce03fb8de32932b964952236426b8a8c4eb231 100644 (file)
@@ -252,7 +252,7 @@ SkDimEnableModerationIfNeeded(SK_AC *pAC) {
 
 /*******************************************************************************
 ** Function     : SkDimDisplayModerationSettings
-** Description  : Displays the current settings regaring interrupt moderation
+** Description  : Displays the current settings regarding interrupt moderation
 ** Programmer   : Ralph Roesler
 ** Last Modified: 22-mar-03
 ** Returns      : void (!)
@@ -510,7 +510,7 @@ EnableIntMod(SK_AC *pAC) {
 
 /*******************************************************************************
 ** Function     : DisableIntMod()
-** Description  : Disbles the interrupt moderation independent of what inter-
+** Description  : Disables the interrupt moderation independent of what inter-
 **                rupts are running or not
 ** Programmer   : Ralph Roesler
 ** Last Modified: 23-mar-03
index 1dbdd6bb587ba11d68c3e4ac53f763edf45ea5c8..c20bb998e0e562c8261b12b7e9b8505f534da47d 100644 (file)
@@ -6979,8 +6979,10 @@ static int tg3_open(struct net_device *dev)
        tg3_full_lock(tp, 0);
 
        err = tg3_set_power_state(tp, PCI_D0);
-       if (err)
+       if (err) {
+               tg3_full_unlock(tp);
                return err;
+       }
 
        tg3_disable_ints(tp);
        tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
index 1f742814a01c295dff243a964fa9c64485b582b2..72120d5c2f7bd579fd7f210e8e02157cf50787f2 100644 (file)
@@ -6920,8 +6920,8 @@ static int ipw_qos_association(struct ipw_priv *priv,
 }
 
 /*
-* handling the beaconing responces. if we get different QoS setting
-* of the network from the the associated setting adjust the QoS
+* handling the beaconing responses. if we get different QoS setting
+* off the network from the associated setting, adjust the QoS
 * setting
 */
 static int ipw_qos_association_resp(struct ipw_priv *priv,
index 68cb3a080050d78d47bc787dd47366c5057c3c5f..fe3f5f5365c555abdef1546e7e0868b79bc8bea3 100644 (file)
@@ -486,7 +486,7 @@ typedef unsigned long space_t;
 **   This bit tells U2 to do R/M/W for partial cachelines. "Streaming"
 **   data can avoid this if the mapping covers full cache lines.
 ** o STOP_MOST is needed for atomicity across cachelines.
-**   Apperently only "some EISA devices" need this.
+**   Apparently only "some EISA devices" need this.
 **   Using CONFIG_ISA is hack. Only the IOA with EISA under it needs
 **   to use this hint iff the EISA devices needs this feature.
 **   According to the U2 ERS, STOP_MOST enabled pages hurt performance.
index c2949b4367e51b5c632ee765c7b799b2f6ba1211..12bab64a62a15da1d1f853a0fa203cc268c6d311 100644 (file)
 **
 ** PA Firmware
 ** -----------
-** PA-RISC platforms have two fundementally different types of firmware.
+** PA-RISC platforms have two fundamentally different types of firmware.
 ** For PCI devices, "Legacy" PDC initializes the "INTERRUPT_LINE" register
 ** and BARs similar to a traditional PC BIOS.
 ** The newer "PAT" firmware supports PDC calls which return tables.
-** PAT firmware only initializes PCI Console and Boot interface.
-** With these tables, the OS can progam all other PCI devices.
+** PAT firmware only initializes the PCI Console and Boot interface.
+** With these tables, the OS can program all other PCI devices.
 **
 ** One such PAT PDC call returns the "Interrupt Routing Table" (IRT).
 ** The IRT maps each PCI slot's INTA-D "output" line to an I/O SAPIC
index 5f1b9f58070e7cd55ace1d08f0c99a3ce4c9d1dc..3cfb0a3575e660938abc6070c9048563ddd7c287 100644 (file)
@@ -27,14 +27,14 @@ config PCI_MULTITHREAD_PROBE
          smaller speedup on single processor machines.
 
          But it can also cause lots of bad things to happen.  A number
-         of PCI drivers can not properly handle running in this way,
+         of PCI drivers cannot properly handle running in this way,
          some will just not work properly at all, while others might
          decide to blow up power supplies with a huge load all at once,
          so use this option at your own risk.
 
          It is very unwise to use this option if you are not using a
          boot process that can handle devices being created in any
-         order.  A program that can create persistant block and network
+         order.  A program that can create persistent block and network
          device names (like udev) is a good idea if you wish to use
          this option.
 
index c3ac98a0a6a608b94cfdae4bc2baa1bfd37db881..f55ac3885cb3fa98bf6ae632514edb7f2749c2e2 100644 (file)
@@ -531,7 +531,7 @@ static u8 hpc_readcmdtoindex (u8 cmd, u8 index)
 *
 * Action:  issue a READ command to HPC
 *
-* Input:   pslot   - can not be NULL for READ_ALLSTAT
+* Input:   pslot   - cannot be NULL for READ_ALLSTAT
 *          pstatus - can be NULL for READ_ALLSTAT
 *
 * Return   0 or error codes
index 0f701921c13e6e9a781844597380416d19c87c26..21d83a895b21c2ed9d97c7bcaea5750c7671fb79 100644 (file)
@@ -1271,6 +1271,11 @@ static void pcmcia_bus_remove_socket(struct class_device *class_dev,
        socket->pcmcia_state.dead = 1;
        pccard_register_pcmcia(socket, NULL);
 
+       /* unregister any unbound devices */
+       mutex_lock(&socket->skt_mutex);
+       pcmcia_card_remove(socket, NULL);
+       mutex_unlock(&socket->skt_mutex);
+
        pcmcia_put_socket(socket);
 
        return;
index 579cd667b16f91a116c988c6a0835f4fdc85673b..6f11f6dfdd9dccc699b5a1a958132d55dec5daa6 100644 (file)
@@ -145,6 +145,13 @@ int rtc_set_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm)
 }
 EXPORT_SYMBOL_GPL(rtc_set_alarm);
 
+/**
+ * rtc_update_irq - report RTC periodic, alarm, and/or update irqs
+ * @class_dev: the rtc's class device
+ * @num: how many irqs are being reported (usually one)
+ * @events: mask of RTC_IRQF with one or more of RTC_PF, RTC_AF, RTC_UF
+ * Context: in_interrupt(), irqs blocked
+ */
 void rtc_update_irq(struct class_device *class_dev,
                unsigned long num, unsigned long events)
 {
@@ -201,12 +208,12 @@ int rtc_irq_register(struct class_device *class_dev, struct rtc_task *task)
        if (task == NULL || task->func == NULL)
                return -EINVAL;
 
-       spin_lock(&rtc->irq_task_lock);
+       spin_lock_irq(&rtc->irq_task_lock);
        if (rtc->irq_task == NULL) {
                rtc->irq_task = task;
                retval = 0;
        }
-       spin_unlock(&rtc->irq_task_lock);
+       spin_unlock_irq(&rtc->irq_task_lock);
 
        return retval;
 }
@@ -216,10 +223,10 @@ void rtc_irq_unregister(struct class_device *class_dev, struct rtc_task *task)
 {
        struct rtc_device *rtc = to_rtc_device(class_dev);
 
-       spin_lock(&rtc->irq_task_lock);
+       spin_lock_irq(&rtc->irq_task_lock);
        if (rtc->irq_task == task)
                rtc->irq_task = NULL;
-       spin_unlock(&rtc->irq_task_lock);
+       spin_unlock_irq(&rtc->irq_task_lock);
 }
 EXPORT_SYMBOL_GPL(rtc_irq_unregister);
 
@@ -265,3 +272,4 @@ int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int
        }
        return err;
 }
+EXPORT_SYMBOL_GPL(rtc_irq_set_freq);
index bd61e99540a330450478a5c45832adda143fdc00..5c8addcaf1fbd8a0a49078155a81be129b040800 100644 (file)
@@ -292,7 +292,8 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
                                        AT91_RTC_CALEV);
 
        ret = request_irq(AT91_ID_SYS, at91_rtc_interrupt,
-                               IRQF_SHARED, "at91_rtc", pdev);
+                               IRQF_DISABLED | IRQF_SHARED,
+                               "at91_rtc", pdev);
        if (ret) {
                printk(KERN_ERR "at91_rtc: IRQ %d already in use.\n",
                                AT91_ID_SYS);
index 583789c66cdb9d2404157f0cda029c9e8dfc7c60..814b9e1873f55ef8061b4abfc66ab5776da38dc1 100644 (file)
@@ -61,7 +61,9 @@ static void rtc_uie_task(void *data)
        int err;
 
        err = rtc_read_time(&rtc->class_dev, &tm);
-       spin_lock_irq(&rtc->irq_lock);
+
+       local_irq_disable();
+       spin_lock(&rtc->irq_lock);
        if (rtc->stop_uie_polling || err) {
                rtc->uie_task_active = 0;
        } else if (rtc->oldsecs != tm.tm_sec) {
@@ -74,11 +76,11 @@ static void rtc_uie_task(void *data)
        } else if (schedule_work(&rtc->uie_task) == 0) {
                rtc->uie_task_active = 0;
        }
-       spin_unlock_irq(&rtc->irq_lock);
+       spin_unlock(&rtc->irq_lock);
        if (num)
                rtc_update_irq(&rtc->class_dev, num, RTC_UF | RTC_IRQF);
+       local_irq_enable();
 }
-
 static void rtc_uie_timer(unsigned long data)
 {
        struct rtc_device *rtc = (struct rtc_device *)data;
@@ -214,7 +216,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file,
        struct rtc_wkalrm alarm;
        void __user *uarg = (void __user *) arg;
 
-       /* check that the calles has appropriate permissions
+       /* check that the calling task has appropriate permissions
         * for certain ioctls. doing this check here is useful
         * to avoid duplicate code in each driver.
         */
@@ -238,10 +240,10 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file,
 
        /* avoid conflicting IRQ users */
        if (cmd == RTC_PIE_ON || cmd == RTC_PIE_OFF || cmd == RTC_IRQP_SET) {
-               spin_lock(&rtc->irq_task_lock);
+               spin_lock_irq(&rtc->irq_task_lock);
                if (rtc->irq_task)
                        err = -EBUSY;
-               spin_unlock(&rtc->irq_task_lock);
+               spin_unlock_irq(&rtc->irq_task_lock);
 
                if (err < 0)
                        return err;
@@ -299,6 +301,17 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file,
 
                err = rtc_set_time(class_dev, &tm);
                break;
+
+       case RTC_IRQP_READ:
+               if (ops->irq_set_freq)
+                       err = put_user(rtc->irq_freq, (unsigned long *) arg);
+               break;
+
+       case RTC_IRQP_SET:
+               if (ops->irq_set_freq)
+                       err = rtc_irq_set_freq(class_dev, rtc->irq_task, arg);
+               break;
+
 #if 0
        case RTC_EPOCH_SET:
 #ifndef rtc_epoch
index 78552e6e76aa252d8065ec93cc95abde426e92dd..001eb1123a657707a581b0915ec919e435a95dd7 100644 (file)
@@ -340,7 +340,8 @@ static int __init ds1553_rtc_probe(struct platform_device *pdev)
 
        if (pdata->irq >= 0) {
                writeb(0, ioaddr + RTC_INTERRUPTS);
-               if (request_irq(pdata->irq, ds1553_rtc_interrupt, IRQF_SHARED,
+               if (request_irq(pdata->irq, ds1553_rtc_interrupt,
+                               IRQF_DISABLED | IRQF_SHARED,
                                pdev->name, pdev) < 0) {
                        dev_warn(&pdev->dev, "interrupt not available.\n");
                        pdata->irq = -1;
index 2a86632580f16e2cc0d010fb938af67c6df81be8..a44fe4efa216ac372cc8eac8d4e0d18aa6c9a71d 100644 (file)
@@ -126,13 +126,13 @@ static int rs5c372_get_trim(struct i2c_client *client, int *osc, int *trim)
                return -EIO;
        }
 
-       dev_dbg(&client->dev, "%s: raw trim=%x\n", __FUNCTION__, *trim);
-
        if (osc)
                *osc = (buf & RS5C372_TRIM_XSL) ? 32000 : 32768;
 
-       if (trim)
+       if (trim) {
                *trim = buf & RS5C372_TRIM_MASK;
+               dev_dbg(&client->dev, "%s: raw trim=%x\n", __FUNCTION__, *trim);
+       }
 
        return 0;
 }
index bc4bd24508a2d4beb23458c3b6ee3a86b7e41e26..6ef9c62d5032afa97122331c4754513f9b44b0dc 100644 (file)
@@ -99,6 +99,7 @@ static ssize_t test_irq_store(struct device *dev,
        struct rtc_device *rtc = platform_get_drvdata(plat_dev);
 
        retval = count;
+       local_irq_disable();
        if (strncmp(buf, "tick", 4) == 0)
                rtc_update_irq(&rtc->class_dev, 1, RTC_PF | RTC_IRQF);
        else if (strncmp(buf, "alarm", 5) == 0)
@@ -107,6 +108,7 @@ static ssize_t test_irq_store(struct device *dev,
                rtc_update_irq(&rtc->class_dev, 1, RTC_UF | RTC_IRQF);
        else
                retval = -EINVAL;
+       local_irq_enable();
 
        return retval;
 }
index 969be465309c2a266a0f6f317d169ef8555bd5f0..1ee9a6f06541e93b3f67af32295bb0879b97d5eb 100644 (file)
@@ -29,7 +29,7 @@
 #define CLAW_COMPLETE           0xff   /* flag to indicate i/o completed */
 
 /*-----------------------------------------------------*
-*     CLAW control comand code                         *
+*     CLAW control command code                        *
 *------------------------------------------------------*/
 
 #define SYSTEM_VALIDATE_REQUEST   0x01  /* System Validate request */
index b79f45f3ad47dff7a300a8bb3aab192092a3449a..a11f4e6d8bd93698260a7c574deda49bfb325d5e 100644 (file)
  * The host accesses this scratch in a different manner from the
  * central sequencer. The sequencer has to use CSEQ registers CSCRPAGE
  * and CMnSCRPAGE to access the scratch memory. A flat mapping of the
- * scratch memory is avaliable for software convenience and to prevent
+ * scratch memory is available for software convenience and to prevent
  * corruption while the sequencer is running. This memory is mapped
  * onto addresses 800h - BFFh, total of 400h bytes.
  *
index de7c04d4254d50a7eb07a90de89d28ef43aba2f4..e5a0ec37e9544caf9703be97d618e7ab2a7c23be 100644 (file)
@@ -64,7 +64,7 @@ struct asd_ocm_dir {
 
 #define OCM_INIT_DIR_ENTRIES   5
 /***************************************************************************
-*  OCM dircetory default
+*  OCM directory default
 ***************************************************************************/
 static struct asd_ocm_dir OCMDirInit =
 {
@@ -73,7 +73,7 @@ static struct asd_ocm_dir OCMDirInit =
 };
 
 /***************************************************************************
-*  OCM dircetory Entries default
+*  OCM directory Entries default
 ***************************************************************************/
 static struct asd_ocm_dir_ent OCMDirEntriesInit[OCM_INIT_DIR_ENTRIES] =
 {
index 6cc2bc2f62be8f1c22a41183c4f532a865bad23f..adb8eb4f5fd1a566a484f63dcf2bcf1a9ed8cfd0 100644 (file)
@@ -185,7 +185,7 @@ static inline struct list_head *ncr_list_pop(struct list_head *head)
 **     power of 2 cache line size.
 **     Enhanced in linux-2.3.44 to provide a memory pool 
 **     per pcidev to support dynamic dma mapping. (I would 
-**     have preferred a real bus astraction, btw).
+**     have preferred a real bus abstraction, btw).
 **
 **==========================================================
 */
@@ -1438,7 +1438,7 @@ struct head {
 **     The first four bytes (scr_st[4]) are used inside the script by 
 **     "COPY" commands.
 **     Because source and destination must have the same alignment
-**     in a DWORD, the fields HAVE to be at the choosen offsets.
+**     in a DWORD, the fields HAVE to be at the chosen offsets.
 **             xerr_st         0       (0x34)  scratcha
 **             sync_st         1       (0x05)  sxfer
 **             wide_st         3       (0x03)  scntl3
@@ -1498,7 +1498,7 @@ struct head {
 **     the DSA (data structure address) register points
 **     to this substructure of the ccb.
 **     This substructure contains the header with
-**     the script-processor-changable data and
+**     the script-processor-changeable data and
 **     data blocks for the indirect move commands.
 **
 **----------------------------------------------------------
@@ -5107,7 +5107,7 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
 
 /*
 **     This CCB has been skipped by the NCR.
-**     Queue it in the correponding unit queue.
+**     Queue it in the corresponding unit queue.
 */
 static void ncr_ccb_skipped(struct ncb *np, struct ccb *cp)
 {
@@ -5896,8 +5896,8 @@ static void ncr_log_hard_error(struct ncb *np, u16 sist, u_char dstat)
 **
 **     In normal cases, interrupt conditions occur one at a 
 **     time. The ncr is able to stack in some extra registers 
-**     other interrupts that will occurs after the first one.
-**     But severall interrupts may occur at the same time.
+**     other interrupts that will occur after the first one.
+**     But, several interrupts may occur at the same time.
 **
 **     We probably should only try to deal with the normal 
 **     case, but it seems that multiple interrupts occur in 
@@ -6796,7 +6796,7 @@ void ncr_int_sir (struct ncb *np)
 **     The host status field is set to HS_NEGOTIATE to mark this
 **     situation.
 **
-**     If the target doesn't answer this message immidiately
+**     If the target doesn't answer this message immediately
 **     (as required by the standard), the SIR_NEGO_FAIL interrupt
 **     will be raised eventually.
 **     The handler removes the HS_NEGOTIATE status, and sets the
index cb8b7701431ef855d8b7ba656b761412306385ae..b39357d9af8d1bcb82ab063e39784d2ef84bfe18 100644 (file)
 **     Same as option 1, but also deal with 
 **     misconfigured interrupts.
 **
-**     - Edge triggerred instead of level sensitive.
+**     - Edge triggered instead of level sensitive.
 **     - No interrupt line connected.
 **     - IRQ number misconfigured.
 **     
@@ -549,7 +549,7 @@ struct ncr_driver_setup {
 
 /*
 **     Initial setup.
-**     Can be overriden at startup by a command line.
+**     Can be overridden at startup by a command line.
 */
 #define SCSI_NCR_DRIVER_SETUP                  \
 {                                              \
@@ -1093,7 +1093,7 @@ struct scr_tblsel {
 **-----------------------------------------------------------
 **     On 810A, 860, 825A, 875, 895 and 896 chips the content 
 **     of SFBR register can be used as data (SCR_SFBR_DATA).
-**     The 896 has additionnal IO registers starting at 
+**     The 896 has additional IO registers starting at 
 **     offset 0x80. Bit 7 of register offset is stored in 
 **     bit 7 of the SCRIPTS instruction first DWORD.
 **-----------------------------------------------------------
index 23334c8bc4c75e5c29fcf2415267d3c00397425c..d895a1adb428fbb10b32977e6a200a649766ec55 100644 (file)
@@ -16,7 +16,7 @@ config SPI
          controller and a chipselect.  Most SPI slaves don't support
          dynamic device discovery; some are even write-only or read-only.
 
-         SPI is widely used by microcontollers to talk with sensors,
+         SPI is widely used by microcontrollers to talk with sensors,
          eeprom and flash memory, codecs and various other controller
          chips, analog to digital (and d-to-a) converters, and more.
          MMC and SD cards can be accessed using SPI protocol; and for
index fccd1952bad3f41dd37ffc5af913f3c94966e643..7729c074488606ab8e926dfd95611b7606005ed9 100644 (file)
@@ -828,10 +828,7 @@ char *usb_cache_string(struct usb_device *udev, int index)
  * Context: !in_interrupt ()
  *
  * Updates the copy of the device descriptor stored in the device structure,
- * which dedicates space for this purpose.  Note that several fields are
- * converted to the host CPU's byte order:  the USB version (bcdUSB), and
- * vendors product and version fields (idVendor, idProduct, and bcdDevice).
- * That lets device drivers compare against non-byteswapped constants.
+ * which dedicates space for this purpose.
  *
  * Not exported, only for use by the core.  If drivers really want to read
  * the device descriptor directly, they can call usb_get_descriptor() with
index cf10cbc98f8089885ab3174ceb09e56c369aa543..cc60759083bf9ec9cd3d8a6e26f21d716e56b974 100644 (file)
@@ -153,7 +153,7 @@ config USB_U132_HCD
          adapter will *NOT* work with PC cards that do not contain an OHCI
          controller.
 
-         For those PC cards that contain multiple OHCI controllers only ther
+         For those PC cards that contain multiple OHCI controllers only the
          first one is used.
 
          The driver consists of two modules, the "ftdi-elan" module is a
index 9be6b303e7846a5ff2e5e21919b385b158543ddb..ea4714e557e465ca2eb6df2ff1dcb3a7f06d7e0c 100644 (file)
@@ -715,13 +715,6 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
                return IRQ_NOTMINE;
        }
 
-       if (ints & OHCI_INTR_RHSC) {
-               ohci_vdbg (ohci, "rhsc\n");
-               ohci->next_statechange = jiffies + STATECHANGE_DELAY;
-               ohci_writel (ohci, OHCI_INTR_RHSC, &regs->intrstatus);
-               usb_hcd_poll_rh_status(hcd);
-       }
-
        if (ints & OHCI_INTR_UE) {
                disable (ohci);
                ohci_err (ohci, "OHCI Unrecoverable Error, disabled\n");
@@ -731,9 +724,21 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
                ohci_usb_reset (ohci);
        }
 
-       if (ints & OHCI_INTR_RD) {
-               ohci_vdbg (ohci, "resume detect\n");
-               ohci_writel (ohci, OHCI_INTR_RD, &regs->intrstatus);
+       if (ints & OHCI_INTR_RHSC) {
+               ohci_vdbg(ohci, "rhsc\n");
+               ohci->next_statechange = jiffies + STATECHANGE_DELAY;
+               ohci_writel(ohci, OHCI_INTR_RD | OHCI_INTR_RHSC,
+                               &regs->intrstatus);
+               usb_hcd_poll_rh_status(hcd);
+       }
+
+       /* For connect and disconnect events, we expect the controller
+        * to turn on RHSC along with RD.  But for remote wakeup events
+        * this might not happen.
+        */
+       else if (ints & OHCI_INTR_RD) {
+               ohci_vdbg(ohci, "resume detect\n");
+               ohci_writel(ohci, OHCI_INTR_RD, &regs->intrstatus);
                hcd->poll_rh = 1;
                if (ohci->autostop) {
                        spin_lock (&ohci->lock);
index 6f113596af66c1660ecc2548f6b8c40b5c26d4e5..6995ea36f2e874499ae407e9b699931ceba117bd 100644 (file)
@@ -169,7 +169,8 @@ __acquires(ohci->lock)
                break;
        case OHCI_USB_RESUME:
                /* HCFS changes sometime after INTR_RD */
-               ohci_info (ohci, "wakeup\n");
+               ohci_info(ohci, "%swakeup\n",
+                               autostopped ? "auto-" : "");
                break;
        case OHCI_USB_OPER:
                /* this can happen after resuming a swsusp snapshot */
@@ -422,7 +423,8 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
                                ohci->autostop = 0;
                                ohci->next_statechange = jiffies +
                                                STATECHANGE_DELAY;
-                       } else if (time_after_eq (jiffies,
+                       } else if (device_may_wakeup(&hcd->self.root_hub->dev)
+                                       && time_after_eq(jiffies,
                                                ohci->next_statechange)
                                        && !ohci->ed_rm_list
                                        && !(ohci->hc_control &
index 32c635ecbf314cd6e3984c514753675ef7480887..a00d1595656cb0ae4f4f960a2c39e908c90a593d 100644 (file)
@@ -211,7 +211,7 @@ int usb_ftdi_elan_read_pcimem(struct platform_device *pdev, u8 addressofs,
 int usb_ftdi_elan_write_pcimem(struct platform_device *pdev, u8 addressofs,
         u8 width, u32 data);
 /*
-* these can not be inlines because we need the structure offset!!
+* these cannot be inlines because we need the structure offset!!
 * Does anyone have a better way?????
 */
 #define u132_read_pcimem(u132, member, data) \
@@ -3045,7 +3045,7 @@ static struct hc_driver u132_hc_driver = {
 * This function may be called by the USB core whilst the "usb_all_devices_rwsem"
 * is held for writing, thus this module must not call usb_remove_hcd()
 * synchronously - but instead should immediately stop activity to the
-* device and ansynchronously call usb_remove_hcd()
+* device and asynchronously call usb_remove_hcd()
 */
 static int __devexit u132_remove(struct platform_device *pdev)
 {
@@ -3241,7 +3241,7 @@ static int u132_resume(struct platform_device *pdev)
 #define u132_resume NULL
 #endif
 /*
-* this driver is loaded explicitely by ftdi_u132
+* this driver is loaded explicitly by ftdi_u132
 *
 * the platform_driver struct is static because it is per type of module
 */
index f659f3028ad28edee6db90fdefb469ceb1f58aea..787b847d38cc095ce0a91056634911185f56e440 100644 (file)
@@ -636,13 +636,11 @@ static void ati_remote_free_buffers(struct ati_remote *ati_remote)
        if (ati_remote->out_urb)
                usb_free_urb(ati_remote->out_urb);
 
-       if (ati_remote->inbuf)
-               usb_buffer_free(ati_remote->udev, DATA_BUFSIZE,
-                               ati_remote->inbuf, ati_remote->inbuf_dma);
+       usb_buffer_free(ati_remote->udev, DATA_BUFSIZE,
+               ati_remote->inbuf, ati_remote->inbuf_dma);
 
-       if (ati_remote->outbuf)
-               usb_buffer_free(ati_remote->udev, DATA_BUFSIZE,
-                               ati_remote->inbuf, ati_remote->outbuf_dma);
+       usb_buffer_free(ati_remote->udev, DATA_BUFSIZE,
+               ati_remote->outbuf, ati_remote->outbuf_dma);
 }
 
 static void ati_remote_input_init(struct ati_remote *ati_remote)
index 6daf85c6eeee216f18a6c01f1df24e1a922601b2..6d08a3bcc952bab49b17d6169925a6e5d283070d 100644 (file)
@@ -1797,11 +1797,12 @@ static const struct hid_blacklist {
        { USB_VENDOR_ID_APPLE, 0x020E, HID_QUIRK_POWERBOOK_HAS_FN },
        { USB_VENDOR_ID_APPLE, 0x020F, HID_QUIRK_POWERBOOK_HAS_FN },
        { USB_VENDOR_ID_APPLE, 0x0214, HID_QUIRK_POWERBOOK_HAS_FN },
-       { USB_VENDOR_ID_APPLE, 0x0215, HID_QUIRK_POWERBOOK_HAS_FN },
+       { USB_VENDOR_ID_APPLE, 0x0215, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
        { USB_VENDOR_ID_APPLE, 0x0216, HID_QUIRK_POWERBOOK_HAS_FN },
        { USB_VENDOR_ID_APPLE, 0x0217, HID_QUIRK_POWERBOOK_HAS_FN },
-       { USB_VENDOR_ID_APPLE, 0x0218, HID_QUIRK_POWERBOOK_HAS_FN },
+       { USB_VENDOR_ID_APPLE, 0x0218, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
        { USB_VENDOR_ID_APPLE, 0x0219, HID_QUIRK_POWERBOOK_HAS_FN },
+       { USB_VENDOR_ID_APPLE, 0x021B, HID_QUIRK_POWERBOOK_HAS_FN },
        { USB_VENDOR_ID_APPLE, 0x030A, HID_QUIRK_POWERBOOK_HAS_FN },
        { USB_VENDOR_ID_APPLE, 0x030B, HID_QUIRK_POWERBOOK_HAS_FN },
 
index 9a808a3b4d3750e1a6e4a93a3c9cac1b98c1a667..68e7ebb978a9721c0eb13ce6d0d4710c00d78c42 100644 (file)
@@ -121,6 +121,12 @@ static struct hidinput_key_translation powerbook_numlock_keys[] = {
        { }
 };
 
+static struct hidinput_key_translation powerbook_iso_keyboard[] = {
+       { KEY_GRAVE,    KEY_102ND },
+       { KEY_102ND,    KEY_GRAVE },
+       { }
+};
+
 static int usbhid_pb_fnmode = 1;
 module_param_named(pb_fnmode, usbhid_pb_fnmode, int, 0644);
 MODULE_PARM_DESC(pb_fnmode,
@@ -195,6 +201,14 @@ static int hidinput_pb_event(struct hid_device *hid, struct input_dev *input,
                }
        }
 
+       if (hid->quirks & HID_QUIRK_POWERBOOK_ISO_KEYBOARD) {
+               trans = find_translation(powerbook_iso_keyboard, usage->code);
+               if (trans) {
+                       input_event(input, usage->type, trans->to, value);
+                       return 1;
+               }
+       }
+
        return 0;
 }
 
@@ -210,6 +224,9 @@ static void hidinput_pb_setup(struct input_dev *input)
 
        for (trans = powerbook_numlock_keys; trans->from; trans++)
                set_bit(trans->to, input->keybit);
+
+       for (trans = powerbook_iso_keyboard; trans->from; trans++)
+               set_bit(trans->to, input->keybit);
 }
 #else
 static inline int hidinput_pb_event(struct hid_device *hid, struct input_dev *input,
index 9b50effef75817af9c00b3d459bf481c1c5e1d9d..0e76e6dcac37bd7886cdea390707d1934e7fd9e8 100644 (file)
@@ -260,6 +260,7 @@ struct hid_item {
 #define HID_QUIRK_POWERBOOK_HAS_FN             0x00001000
 #define HID_QUIRK_POWERBOOK_FN_ON              0x00002000
 #define HID_QUIRK_INVERT_HWHEEL                        0x00004000
+#define HID_QUIRK_POWERBOOK_ISO_KEYBOARD       0x00008000
 
 /*
  * This is the global environment of the parser. This information is
index 0be9d62d62aeda0d096456a88fa5aa09557af0b6..e4971d6aaafb323d5d931c99fe0f25c10d072906 100644 (file)
@@ -780,7 +780,7 @@ static int auerbuf_setup (pauerbufctl_t bcp, unsigned int numElements, unsigned
 
 bl_fail:/* not enough memory. Free allocated elements */
         dbg ("auerbuf_setup: no more memory");
-       kfree(bep);
+       auerbuf_free(bep);
         auerbuf_free_buffers (bcp);
         return -ENOMEM;
 }
index 551ba8906d626ea8080daa2fac1ea59f2c355239..5b5a3e621daa9dac7791ce32151a8b47726903c6 100644 (file)
@@ -52,7 +52,7 @@
 * the kernel to load the "u132-hcd" module.
 *
 * The "ftdi-u132" module provides the interface to the inserted
-* PC card and the "u132-hcd" module uses the API to send and recieve
+* PC card and the "u132-hcd" module uses the API to send and receive
 * data. The API features call-backs, so that part of the "u132-hcd"
 * module code will run in the context of one of the kernel threads
 * of the "ftdi-u132" module.
index bdb58100fc1dd11fdfaed773326b795b4014858b..5e3ac281a2f8798515a08d0f083103effa070b53 100644 (file)
 *       to TASK_RUNNING will be lost and write_chan's subsequent call to
 *       schedule() will never return (unless it catches a signal).
 *       This race condition occurs because write_bulk_callback() (and thus
-*       the wakeup) are called asynchonously from an interrupt, rather than
+*       the wakeup) are called asynchronously from an interrupt, rather than
 *       from the scheduler.  We can avoid the race by calling the wakeup
 *       from the scheduler queue and that's our fix:  Now, at the end of
 *       write_bulk_callback() we queue up a wakeup call on the scheduler
index bd76b4c11fcc1dc12c3a8515002d7847f179d91e..c186b4e73c72ec2bb371582d0af38b8bc841512d 100644 (file)
@@ -311,6 +311,7 @@ static struct usb_device_id id_table_combined [] = {
        { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) },
+       { USB_DEVICE(FTDI_VID, FTDI_DMX4ALL) },
        { USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
@@ -511,6 +512,7 @@ static struct usb_device_id id_table_combined [] = {
        { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13M_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13S_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13U_PID) },
+       { USB_DEVICE(ELEKTOR_VID, ELEKTOR_FT323R_PID) },
        { },                                    /* Optional parameter entry */
        { }                                     /* Terminating entry */
 };
index f0edb87d2dd51c7831fa661be827758fffe6999e..bae117d359af1ba1d38f8e62471111828e11a104 100644 (file)
@@ -55,6 +55,9 @@
 /* iPlus device */
 #define FTDI_IPLUS_PID 0xD070 /* Product Id */
 
+/* DMX4ALL DMX Interfaces */
+#define FTDI_DMX4ALL 0xC850
+
 /* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */
 /* they use the ftdi chipset for the USB interface and the vendor id is the same */
 #define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */
  */
 #define FTDI_ASK_RDR400_PID    0xC991  /* ASK RDR 400 series card reader */
 
+/*
+ * FTDI USB UART chips used in construction projects from the
+ * Elektor Electronics magazine (http://elektor-electronics.co.uk)
+ */
+#define ELEKTOR_VID            0x0C7D
+#define ELEKTOR_FT323R_PID     0x0005  /* RFID-Reader, issue 09-2006 */
+
 /*
  * DSS-20 Sync Station for Sony Ericsson P800
  */
 #define FTDI_DSS20_PID          0xFC82  
 
 /*
index 6238aff1e772c71bf81deb62298be7d79ce770d0..d72cf8bc7f76be74678eccdc4df280aabfff57c5 100644 (file)
@@ -320,6 +320,7 @@ static struct usb_device_id ipaq_id_table [] = {
        { USB_DEVICE(0x0B05, 0x9200) }, /* ASUS USB Sync */
        { USB_DEVICE(0x0B05, 0x9202) }, /* ASUS USB Sync */
        { USB_DEVICE(0x0BB4, 0x00CE) }, /* HTC USB Sync */
+       { USB_DEVICE(0x0BB4, 0x00CF) }, /* HTC USB Modem */
        { USB_DEVICE(0x0BB4, 0x0A01) }, /* PocketPC USB Sync */
        { USB_DEVICE(0x0BB4, 0x0A02) }, /* PocketPC USB Sync */
        { USB_DEVICE(0x0BB4, 0x0A03) }, /* PocketPC USB Sync */
index bc1ac07bf6ce8620f3a8d979dd162e16066c78dc..efb047f431e8eeda1d7bad6bf00242ae271d1005 100644 (file)
@@ -1306,25 +1306,13 @@ UNUSUAL_DEV(  0x0fce, 0xe030, 0x0000, 0x0000,
                US_SC_DEVICE, US_PR_DEVICE, NULL,
                US_FL_FIX_CAPACITY ),
 
-/* Reported by Jan Mate <mate@fiit.stuba.sk> */
-UNUSUAL_DEV(  0x0fce, 0xe030, 0x0000, 0x0000,
-               "Sony Ericsson",
-               "P990i",
-               US_SC_DEVICE, US_PR_DEVICE, NULL,
-               US_FL_FIX_CAPACITY ),
-
-/* Reported by Jan Mate <mate@fiit.stuba.sk> */
-UNUSUAL_DEV(  0x0fce, 0xe030, 0x0000, 0x0000,
-               "Sony Ericsson",
-               "P990i",
-               US_SC_DEVICE, US_PR_DEVICE, NULL,
-               US_FL_FIX_CAPACITY ),
-
 /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu>
  * Tested on hardware version 1.10.
  * Entry is needed only for the initializer function override.
+ * Devices with bcd > 110 seem to not need it while those
+ * with bcd < 110 appear to need it.
  */
-UNUSUAL_DEV(  0x1019, 0x0c55, 0x0110, 0x0110,
+UNUSUAL_DEV(  0x1019, 0x0c55, 0x0000, 0x0110,
                "Desknote",
                "UCR-61S2B",
                US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init,
index 676754520099ca8e1ad53f52940b0ba0895c23b2..869725a13c21f6d4430a9a07c9bd152c82ead9a2 100644 (file)
@@ -139,7 +139,13 @@ void radeon_delete_i2c_busses(struct radeonfb_info *rinfo)
 int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn,
                               u8 **out_edid)
 {
-       u8 *edid = fb_ddc_read(&rinfo->i2c[conn-1].adapter);
+       u32 reg = rinfo->i2c[conn-1].ddc_reg;
+       u8 *edid;
+
+       OUTREG(reg, INREG(reg) &
+                       ~(VGA_DDC_DATA_OUTPUT | VGA_DDC_CLK_OUTPUT));
+
+       edid = fb_ddc_read(&rinfo->i2c[conn-1].adapter);
 
        if (out_edid)
                *out_edid = edid;
index 3aa6ebf68f178d5bea7b8f3fa34a38f3fd6a5d11..f836137a0edac366b1d814c4230d7517e88a6b9d 100644 (file)
 static unsigned char *fb_do_probe_ddc_edid(struct i2c_adapter *adapter)
 {
        unsigned char start = 0x0;
+       unsigned char *buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
        struct i2c_msg msgs[] = {
                {
                        .addr   = DDC_ADDR,
+                       .flags  = 0,
                        .len    = 1,
                        .buf    = &start,
                }, {
                        .addr   = DDC_ADDR,
                        .flags  = I2C_M_RD,
                        .len    = EDID_LENGTH,
+                       .buf    = buf,
                }
        };
-       unsigned char *buf;
 
-       buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
        if (!buf) {
                dev_warn(&adapter->dev, "unable to allocate memory for EDID "
                         "block.\n");
                return NULL;
        }
-       msgs[1].buf = buf;
 
        if (i2c_transfer(adapter, msgs, 2) == 2)
                return buf;
index 2788b8ca9bb1e882b127e23ec9550e2d6f76fe7f..6f9d880ab2e9e0d9f3a0bff4c4d90ab668ff39e8 100644 (file)
@@ -215,6 +215,8 @@ static int __devinit matrox_w1_probe(struct pci_dev *pdev, const struct pci_devi
        return 0;
 
 err_out_free_device:
+       if (dev->virt_addr)
+               iounmap(dev->virt_addr);
        kfree(dev);
 
        return err;
index 7b1511d50b05a29df371a547a1d4db5fc756d2b7..b3b5aa0edff92198b68fb2f561fe811b559a04ae 100644 (file)
@@ -972,7 +972,7 @@ config SYSFS
 
        Some system agents rely on the information in sysfs to operate.
        /sbin/hotplug uses device and object attributes in sysfs to assist in
-       delegating policy decisions, like persistantly naming devices.
+       delegating policy decisions, like persistently naming devices.
 
        sysfs is currently used by the block subsystem to mount the root
        partition.  If sysfs is disabled you must specify the boot device on
@@ -1145,7 +1145,7 @@ config BEFS_FS
        help
          The BeOS File System (BeFS) is the native file system of Be, Inc's
          BeOS. Notable features include support for arbitrary attributes
-         on files and directories, and database-like indeces on selected
+         on files and directories, and database-like indices on selected
          attributes. (Also note that this driver doesn't make those features
          available at this time). It is a 64 bit filesystem, so it supports
          extremely large volumes and files.
index 94766599db00d3ca530eb37da388e1e63b900d35..277a5f2d18ad7b8ca66a3aef65551379054fc724 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -367,8 +367,7 @@ void fastcall __put_ioctx(struct kioctx *ctx)
 {
        unsigned nr_events = ctx->max_reqs;
 
-       if (unlikely(ctx->reqs_active))
-               BUG();
+       BUG_ON(ctx->reqs_active);
 
        cancel_delayed_work(&ctx->wq);
        flush_workqueue(aio_wq);
@@ -505,8 +504,7 @@ static int __aio_put_req(struct kioctx *ctx, struct kiocb *req)
        assert_spin_locked(&ctx->ctx_lock);
 
        req->ki_users --;
-       if (unlikely(req->ki_users < 0))
-               BUG();
+       BUG_ON(req->ki_users < 0);
        if (likely(req->ki_users))
                return 0;
        list_del(&req->ki_list);                /* remove from active_reqs */
index f95c8749499f9db7fe799594161a183ed9896910..aa4d09bd4e711872589b5b7a5e5ccf8b88952713 100644 (file)
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -560,10 +560,8 @@ struct bio *bio_copy_user(request_queue_t *q, unsigned long uaddr,
                        break;
                }
 
-               if (bio_add_pc_page(q, bio, page, bytes, 0) < bytes) {
-                       ret = -EINVAL;
+               if (bio_add_pc_page(q, bio, page, bytes, 0) < bytes)
                        break;
-               }
 
                len -= bytes;
        }
@@ -622,10 +620,9 @@ static struct bio *__bio_map_user_iov(request_queue_t *q,
 
                nr_pages += end - start;
                /*
-                * transfer and buffer must be aligned to at least hardsector
-                * size for now, in the future we can relax this restriction
+                * buffer must be aligned to at least hardsector size for now
                 */
-               if ((uaddr & queue_dma_alignment(q)) || (len & queue_dma_alignment(q)))
+               if (uaddr & queue_dma_alignment(q))
                        return ERR_PTR(-EINVAL);
        }
 
@@ -751,7 +748,6 @@ struct bio *bio_map_user_iov(request_queue_t *q, struct block_device *bdev,
                             int write_to_vm)
 {
        struct bio *bio;
-       int len = 0, i;
 
        bio = __bio_map_user_iov(q, bdev, iov, iov_count, write_to_vm);
 
@@ -766,18 +762,7 @@ struct bio *bio_map_user_iov(request_queue_t *q, struct block_device *bdev,
         */
        bio_get(bio);
 
-       for (i = 0; i < iov_count; i++)
-               len += iov[i].iov_len;
-
-       if (bio->bi_size == len)
-               return bio;
-
-       /*
-        * don't support partial mappings
-        */
-       bio_endio(bio, bio->bi_size, 0);
-       bio_unmap_user(bio);
-       return ERR_PTR(-EINVAL);
+       return bio;
 }
 
 static void __bio_unmap_user(struct bio *bio)
index e77676df6713de8ab4016d89688b2405ba89e63b..137d76c3f90a6a87b4a78d2073089a13998790be 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/mount.h>
 #include <linux/pagemap.h>
 #include <linux/init.h>
+#include <linux/kobject.h>
 #include <linux/namei.h>
 #include <linux/debugfs.h>
 
@@ -147,13 +148,13 @@ static int debugfs_create_by_name(const char *name, mode_t mode,
        *dentry = NULL;
        mutex_lock(&parent->d_inode->i_mutex);
        *dentry = lookup_one_len(name, parent, strlen(name));
-       if (!IS_ERR(dentry)) {
+       if (!IS_ERR(*dentry)) {
                if ((mode & S_IFMT) == S_IFDIR)
                        error = debugfs_mkdir(parent->d_inode, *dentry, mode);
                else 
                        error = debugfs_create(parent->d_inode, *dentry, mode);
        } else
-               error = PTR_ERR(dentry);
+               error = PTR_ERR(*dentry);
        mutex_unlock(&parent->d_inode->i_mutex);
 
        return error;
index 136175a693321300743e02a7dd1f663e3ff41c4d..f63a7755fe8697ea7469182b1baa487fd1b48c7a 100644 (file)
@@ -820,7 +820,8 @@ int ecryptfs_init_crypt_ctx(struct ecryptfs_crypt_stat *crypt_stat)
        crypt_stat->tfm = crypto_alloc_blkcipher(full_alg_name, 0,
                                                 CRYPTO_ALG_ASYNC);
        kfree(full_alg_name);
-       if (!crypt_stat->tfm) {
+       if (IS_ERR(crypt_stat->tfm)) {
+               rc = PTR_ERR(crypt_stat->tfm);
                ecryptfs_printk(KERN_ERR, "cryptfs: init_crypt_ctx(): "
                                "Error initializing cipher [%s]\n",
                                crypt_stat->cipher);
index cfc8f81e60d0133a060a9d5374fc399820de9c9a..c71a6c092ad9d4f372553dac847c1af91355d048 100644 (file)
@@ -138,6 +138,7 @@ static int fuse_dentry_revalidate(struct dentry *entry, struct nameidata *nd)
                struct fuse_entry_out outarg;
                struct fuse_conn *fc;
                struct fuse_req *req;
+               struct fuse_req *forget_req;
                struct dentry *parent;
 
                /* Doesn't hurt to "reset" the validity timeout */
@@ -152,25 +153,33 @@ static int fuse_dentry_revalidate(struct dentry *entry, struct nameidata *nd)
                if (IS_ERR(req))
                        return 0;
 
+               forget_req = fuse_get_req(fc);
+               if (IS_ERR(forget_req)) {
+                       fuse_put_request(fc, req);
+                       return 0;
+               }
+
                parent = dget_parent(entry);
                fuse_lookup_init(req, parent->d_inode, entry, &outarg);
                request_send(fc, req);
                dput(parent);
                err = req->out.h.error;
+               fuse_put_request(fc, req);
                /* Zero nodeid is same as -ENOENT */
                if (!err && !outarg.nodeid)
                        err = -ENOENT;
                if (!err) {
                        struct fuse_inode *fi = get_fuse_inode(inode);
                        if (outarg.nodeid != get_node_id(inode)) {
-                               fuse_send_forget(fc, req, outarg.nodeid, 1);
+                               fuse_send_forget(fc, forget_req,
+                                                outarg.nodeid, 1);
                                return 0;
                        }
                        spin_lock(&fc->lock);
                        fi->nlookup ++;
                        spin_unlock(&fc->lock);
                }
-               fuse_put_request(fc, req);
+               fuse_put_request(fc, forget_req);
                if (err || (outarg.attr.mode ^ inode->i_mode) & S_IFMT)
                        return 0;
 
@@ -221,6 +230,7 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
        struct inode *inode = NULL;
        struct fuse_conn *fc = get_fuse_conn(dir);
        struct fuse_req *req;
+       struct fuse_req *forget_req;
 
        if (entry->d_name.len > FUSE_NAME_MAX)
                return ERR_PTR(-ENAMETOOLONG);
@@ -229,9 +239,16 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
        if (IS_ERR(req))
                return ERR_PTR(PTR_ERR(req));
 
+       forget_req = fuse_get_req(fc);
+       if (IS_ERR(forget_req)) {
+               fuse_put_request(fc, req);
+               return ERR_PTR(PTR_ERR(forget_req));
+       }
+
        fuse_lookup_init(req, dir, entry, &outarg);
        request_send(fc, req);
        err = req->out.h.error;
+       fuse_put_request(fc, req);
        /* Zero nodeid is same as -ENOENT, but with valid timeout */
        if (!err && outarg.nodeid &&
            (invalid_nodeid(outarg.nodeid) || !valid_mode(outarg.attr.mode)))
@@ -240,11 +257,11 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
                inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation,
                                  &outarg.attr);
                if (!inode) {
-                       fuse_send_forget(fc, req, outarg.nodeid, 1);
+                       fuse_send_forget(fc, forget_req, outarg.nodeid, 1);
                        return ERR_PTR(-ENOMEM);
                }
        }
-       fuse_put_request(fc, req);
+       fuse_put_request(fc, forget_req);
        if (err && err != -ENOENT)
                return ERR_PTR(err);
 
@@ -388,6 +405,13 @@ static int create_new_entry(struct fuse_conn *fc, struct fuse_req *req,
        struct fuse_entry_out outarg;
        struct inode *inode;
        int err;
+       struct fuse_req *forget_req;
+
+       forget_req = fuse_get_req(fc);
+       if (IS_ERR(forget_req)) {
+               fuse_put_request(fc, req);
+               return PTR_ERR(forget_req);
+       }
 
        req->in.h.nodeid = get_node_id(dir);
        req->out.numargs = 1;
@@ -395,24 +419,24 @@ static int create_new_entry(struct fuse_conn *fc, struct fuse_req *req,
        req->out.args[0].value = &outarg;
        request_send(fc, req);
        err = req->out.h.error;
-       if (err) {
-               fuse_put_request(fc, req);
-               return err;
-       }
+       fuse_put_request(fc, req);
+       if (err)
+               goto out_put_forget_req;
+
        err = -EIO;
        if (invalid_nodeid(outarg.nodeid))
-               goto out_put_request;
+               goto out_put_forget_req;
 
        if ((outarg.attr.mode ^ mode) & S_IFMT)
-               goto out_put_request;
+               goto out_put_forget_req;
 
        inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation,
                          &outarg.attr);
        if (!inode) {
-               fuse_send_forget(fc, req, outarg.nodeid, 1);
+               fuse_send_forget(fc, forget_req, outarg.nodeid, 1);
                return -ENOMEM;
        }
-       fuse_put_request(fc, req);
+       fuse_put_request(fc, forget_req);
 
        if (S_ISDIR(inode->i_mode)) {
                struct dentry *alias;
@@ -434,8 +458,8 @@ static int create_new_entry(struct fuse_conn *fc, struct fuse_req *req,
        fuse_invalidate_attr(dir);
        return 0;
 
- out_put_request:
-       fuse_put_request(fc, req);
+ out_put_forget_req:
+       fuse_put_request(fc, forget_req);
        return err;
 }
 
index 9901928668cfe62395da77cceba9626dcac9249b..eb550b339bb829c1473f4f84ffd271b9617f954a 100644 (file)
@@ -81,7 +81,7 @@
 #define        JFS_SWAP_BYTES          0x00100000      /* running on big endian computer */
 
 /* Directory index */
-#define JFS_DIR_INDEX          0x00200000      /* Persistant index for */
+#define JFS_DIR_INDEX          0x00200000      /* Persistent index for */
                                                /* directory entries    */
 
 
index 8df27401d29207683e3dd1ad1a0d0ac5b5508adb..795319c54f7283430f2ec28ed346d39af6291e34 100644 (file)
@@ -442,7 +442,8 @@ static int mountstats_open(struct inode *inode, struct file *file)
 
                if (task) {
                        task_lock(task);
-                       namespace = task->nsproxy->namespace;
+                       if (task->nsproxy)
+                               namespace = task->nsproxy->namespace;
                        if (namespace)
                                get_namespace(namespace);
                        task_unlock(task);
index b67ce93540485af0762014f7c9213bfed390aabe..ac14318c81ba71eaf944e120c26f4b9630d16b0e 100644 (file)
@@ -74,7 +74,8 @@ static int reiserfs_file_release(struct inode *inode, struct file *filp)
                        igrab(inode);
                        reiserfs_warning(inode->i_sb,
                                         "pinning inode %lu because the "
-                                        "preallocation can't be freed");
+                                        "preallocation can't be freed",
+                                        inode->i_ino);
                        goto out;
                }
        }
index 85ce23268302931e0a23a6bd6cc2a20a36581e56..ac93174c96398a5b6cdc3a21be94026b1f375765 100644 (file)
@@ -1464,7 +1464,7 @@ static int flush_journal_list(struct super_block *s,
                }
 
                /* if someone has this block in a newer transaction, just make
-                ** sure they are commited, and don't try writing it to disk
+                ** sure they are committed, and don't try writing it to disk
                 */
                if (pjl) {
                        if (atomic_read(&pjl->j_commit_left))
@@ -3384,7 +3384,7 @@ static int remove_from_transaction(struct super_block *p_s_sb,
 
 /*
 ** for any cnode in a journal list, it can only be dirtied of all the
-** transactions that include it are commited to disk.
+** transactions that include it are committed to disk.
 ** this checks through each transaction, and returns 1 if you are allowed to dirty,
 ** and 0 if you aren't
 **
@@ -3426,7 +3426,7 @@ static int can_dirty(struct reiserfs_journal_cnode *cn)
 }
 
 /* syncs the commit blocks, but does not force the real buffers to disk
-** will wait until the current transaction is done/commited before returning 
+** will wait until the current transaction is done/committed before returning 
 */
 int journal_end_sync(struct reiserfs_transaction_handle *th,
                     struct super_block *p_s_sb, unsigned long nblocks)
index 5b050c06795fbbf3abd51b0f6c77a24daccc33f4..498ad50d1f452807eba88e042f55341ea4498c3d 100644 (file)
@@ -1171,6 +1171,8 @@ xfs_bmap_add_extent_delay_real(
                xfs_bmap_trace_pre_update(fname, "0", ip, idx, XFS_DATA_FORK);
                xfs_bmbt_set_blockcount(ep, temp);
                r[0] = *new;
+               r[1].br_state = PREV.br_state;
+               r[1].br_startblock = 0;
                r[1].br_startoff = new_endoff;
                temp2 = PREV.br_startoff + PREV.br_blockcount - new_endoff;
                r[1].br_blockcount = temp2;
index d72c80dbfbb1fd64629c72b6d5797beb8008624c..44dfac5212856567195068f9570e65f8857709c5 100644 (file)
@@ -2258,7 +2258,7 @@ xfs_ifree_cluster(
                                AIL_LOCK(mp,s);
                                iip->ili_flush_lsn = iip->ili_item.li_lsn;
                                AIL_UNLOCK(mp, s);
-                               xfs_iflags_set(ip, XFS_ISTALE);
+                               xfs_iflags_set(iip->ili_inode, XFS_ISTALE);
                                pre_flushed++;
                        }
                        lip = lip->li_bio_list;
index ae048441c9edbcf13458ce6c9da6bbce36233157..722c5e086285f956489671a567ef8f86861de850 100644 (file)
@@ -27,9 +27,9 @@ void __outw(u16 val, unsigned int port);
 u32 __inl(unsigned int port);
 void __outl(u32 val, unsigned int port);
 
-u8  __readb(void __iomem *addr);
-u16 __readw(void __iomem *addr);
-u32 __readl(void __iomem *addr);
+u8  __readb(const volatile void __iomem *addr);
+u16 __readw(const volatile void __iomem *addr);
+u32 __readl(const volatile void __iomem *addr);
 
 void __writeb(u8  val, void __iomem *addr);
 void __writew(u16 val, void __iomem *addr);
@@ -64,8 +64,14 @@ void __writel(u32 val, void __iomem *addr);
 #define writew(v,b)            __writew(v,b)
 #define writel(v,b)            __writel(v,b)
 
-#define __arch_ioremap(cookie,sz,c)    ((void __iomem *)(cookie))
-#define __arch_iounmap(cookie)         do { } while (0)
+static inline void __iomem *__arch_ioremap(unsigned long cookie, size_t size,
+                                          unsigned int flags)
+{
+       return (void __iomem *)cookie;
+}
+
+#define __arch_ioremap         __arch_ioremap
+#define __arch_iounmap(cookie) do { } while (0)
 
 extern void insb(unsigned int port, void *buf, int sz);
 extern void insw(unsigned int port, void *buf, int sz);
index 121cd241115d33c1e22745d8fc3b1b36c0055db6..646480d37256a067146db1a6202c734f06ad60d7 100644 (file)
@@ -4,23 +4,8 @@
  * This supports machine-specific differences in how the PXA2xx
  * USB Device Controller (UDC) is wired.
  *
- * It is set in linux/arch/arm/mach-pxa/<machine>.c and used in
- * the probe routine of linux/drivers/usb/gadget/pxa2xx_udc.c
  */
-struct pxa2xx_udc_mach_info {
-        int  (*udc_is_connected)(void);                /* do we see host? */
-        void (*udc_command)(int cmd);
-#define        PXA2XX_UDC_CMD_CONNECT          0       /* let host see us */
-#define        PXA2XX_UDC_CMD_DISCONNECT       1       /* so host won't see us */
-
-       /* Boards following the design guidelines in the developer's manual,
-        * with on-chip GPIOs not Lubbock's wierd hardware, can have a sane
-        * VBUS IRQ and omit the methods above.  Store the GPIO number
-        * here; for GPIO 0, also mask in one of the pxa_gpio_mode() bits.
-        */
-       u16     gpio_vbus;                      /* high == vbus present */
-       u16     gpio_pullup;                    /* high == pullup activated */
-};
+#include <asm/mach/udc_pxa2xx.h>
 
 extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info);
 
index 55eb4dc3253ddfd1dea70d7900b2be0a1caa9ed9..666617711c81d259745ba2b0dc12d935c4d4fb0a 100644 (file)
  * uncached, unwrite-buffered mapped memory space for use with DMA
  * devices.  This is the "generic" version.  The PCI specific version
  * is in pci.h
+ *
+ * Note: Drivers should NOT use this function directly, as it will break
+ * platforms with CONFIG_DMABOUNCE.
+ * Use the driver DMA support - see dma-mapping.h (dma_sync_*)
  */
 extern void consistent_sync(void *kaddr, size_t size, int rw);
 
diff --git a/include/asm-arm/mach/udc_pxa2xx.h b/include/asm-arm/mach/udc_pxa2xx.h
new file mode 100644 (file)
index 0000000..ff0a957
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * linux/include/asm-arm/mach/udc_pxa2xx.h
+ *
+ * This supports machine-specific differences in how the PXA2xx
+ * USB Device Controller (UDC) is wired.
+ *
+ * It is set in linux/arch/arm/mach-pxa/<machine>.c or in
+ * linux/arch/mach-ixp4xx/<machine>.c and used in
+ * the probe routine of linux/drivers/usb/gadget/pxa2xx_udc.c
+ */
+
+struct pxa2xx_udc_mach_info {
+        int  (*udc_is_connected)(void);                /* do we see host? */
+        void (*udc_command)(int cmd);
+#define        PXA2XX_UDC_CMD_CONNECT          0       /* let host see us */
+#define        PXA2XX_UDC_CMD_DISCONNECT       1       /* so host won't see us */
+
+       /* Boards following the design guidelines in the developer's manual,
+        * with on-chip GPIOs not Lubbock's wierd hardware, can have a sane
+        * VBUS IRQ and omit the methods above.  Store the GPIO number
+        * here; for GPIO 0, also mask in one of the pxa_gpio_mode() bits.
+        */
+       u16     gpio_vbus;                      /* high == vbus present */
+       u16     gpio_pullup;                    /* high == pullup activated */
+};
+
index 9d873163a7ab09dfe605e2a2a49c5176f1b347e9..e60d6f21fa62f25bee576f58b36fea2ead229a7b 100644 (file)
                .notes : { *(.note.*) } :note
 
 #define INITCALLS                                                      \
+       *(.initcall0.init)                                              \
+       *(.initcall0s.init)                                             \
        *(.initcall1.init)                                              \
        *(.initcall1s.init)                                             \
        *(.initcall2.init)                                              \
index ef0671e5d5c549f244daa69be31acb46583b36ca..43e5bd8f4a196d32db7460afe927e1a83f08ce72 100644 (file)
@@ -88,7 +88,11 @@ static inline void clustered_apic_check(void)
 
 static inline int apicid_to_node(int logical_apicid)
 {
+#ifdef CONFIG_SMP
        return apicid_2_node[hard_smp_processor_id()];
+#else
+       return 0;
+#endif
 }
 
 /* Mapping from cpu number to logical apicid */
diff --git a/include/asm-m68knommu/irq_regs.h b/include/asm-m68knommu/irq_regs.h
new file mode 100644 (file)
index 0000000..3dd9c0b
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/irq_regs.h>
index a2503dfc554c59dbc60cbed803d1f464062463de..6132a9858b5236f312bcc91a69222008d3be0e84 100644 (file)
@@ -8,7 +8,7 @@
  * interrupt source (if it supports chaining).
  */
 typedef struct irq_node {
-       irqreturn_t     (*handler)(int, void *, struct pt_regs *);
+       irq_handler_t   handler;
        unsigned long   flags;
        void            *dev_id;
        const char      *devname;
@@ -18,12 +18,12 @@ typedef struct irq_node {
 /*
  * This structure has only 4 elements for speed reasons
  */
-typedef struct irq_handler {
-       irqreturn_t     (*handler)(int, void *, struct pt_regs *);
+struct irq_entry {
+       irq_handler_t   handler;
        unsigned long   flags;
        void            *dev_id;
        const char      *devname;
-} irq_handler_t;
+};
 
 /* count of spurious interrupts */
 extern volatile unsigned int num_spurious;
index 27c90afd3339cfc29054635bcf301dfe180e259e..6ce28f8e0eadd4b7d0a154547922b557cc31a4ee 100644 (file)
@@ -18,7 +18,7 @@ extern int (*mach_kbdrate) (struct kbd_repeat *);
 extern void (*mach_kbd_leds) (unsigned int);
 /* machine dependent irq functions */
 extern void (*mach_init_IRQ) (void);
-extern irqreturn_t (*(*mach_default_handler)[]) (int, void *, struct pt_regs *);
+extern irq_handler_t mach_default_handler;
 extern int (*mach_request_irq) (unsigned int irq, void (*handler)(int, void *, struct pt_regs *),
                                 unsigned long flags, const char *devname, void *dev_id);
 extern void (*mach_free_irq) (unsigned int irq, void *dev_id);
index 13df9d41bd1a89ce651f2ac92289569a50224672..319899c47a2c96d1457293ba5676da554d994387 100644 (file)
@@ -37,7 +37,7 @@
 #define MCFMBUS_MFDR_MBC(a)    ((a)&0x3F)         /*M-Bus Clock*/
 
 /*
-*      Define bit flags in Controll Register
+*      Define bit flags in Control Register
 */
 
 #define MCFMBUS_MBCR_MEN           (0x80)  /* M-Bus Enable                 */
index 301e71300779cb7648c36c47135dafffddb61588..e9fa252f8a3f0deeb8e018b0e7c7cecb455cdb18 100644 (file)
@@ -170,10 +170,8 @@ int __init auide_probe(void);
         static int auide_dma_host_on(ide_drive_t *drive);
         static int auide_dma_lostirq(ide_drive_t *drive);
         static int auide_dma_on(ide_drive_t *drive);
-        static void auide_ddma_tx_callback(int irq, void *param,
-                                           struct pt_regs *regs);
-        static void auide_ddma_rx_callback(int irq, void *param,
-                                           struct pt_regs *regs);
+        static void auide_ddma_tx_callback(int irq, void *param);
+        static void auide_ddma_rx_callback(int irq, void *param);
         static int auide_dma_off_quietly(ide_drive_t *drive);
 #endif /* end CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */
 
index da2cf373e31c54af3e746e95d87d08656299b518..31ad0f05af3d4dec0a66bba5d02a118f748d5896 100644 (file)
 
 /*
 ** DMA_CHUNK_SIZE is used by the SCSI mid-layer to break up
-** (or rather not merge) DMA's into managable chunks.
+** (or rather not merge) DMAs into manageable chunks.
 ** On parisc, this is more of the software/tuning constraint
-** rather than the HW. I/O MMU allocation alogorithms can be
-** faster with smaller size is (to some degree).
+** rather than the HW. I/O MMU allocation algorithms can be
+** faster with smaller sizes (to some degree).
 */
 #define DMA_CHUNK_SIZE (BITS_PER_LONG*PAGE_SIZE)
 
index 7b8ad118d2feec1b9b307d442cbe666abdb2640e..7b3be9ac0dda3f67032f95ac5c4f8493bf6f1895 100644 (file)
@@ -149,7 +149,7 @@ extern int parisc_bus_is_phys;      /* in arch/parisc/kernel/setup.c */
 /*
 ** Most PCI devices (eg Tulip, NCR720) also export the same registers
 ** to both MMIO and I/O port space.  Due to poor performance of I/O Port
-** access under HP PCI bus adapters, strongly reccomend use of MMIO
+** access under HP PCI bus adapters, strongly recommend the use of MMIO
 ** address space.
 **
 ** While I'm at it more PA programming notes:
index 5542dd00472b8d1bb832279e522bfe8019f00535..007a880615eb80d766863f8e0b3708750c2ebbef 100644 (file)
@@ -14,7 +14,7 @@
 #endif
 
 /*
-** The number of pdir entries to "free" before issueing
+** The number of pdir entries to "free" before issuing
 ** a read to PCOM register to flush out PCOM writes.
 ** Interacts with allocation granularity (ie 4 or 8 entries
 ** allocated and free'd/purged at a time might make this
index c9ee41cd0707948d9b031cbb2587f39b0d2ba973..d45827a21f943d07cb36153dd2906d937e016fb8 100644 (file)
@@ -115,7 +115,8 @@ extern __inline__ int down_interruptible(struct semaphore * sem)
  */
 extern __inline__ int down_trylock(struct semaphore * sem)
 {
-       int flags, count;
+       unsigned long flags;
+       int count;
 
        spin_lock_irqsave(&sem->sentry, flags);
        count = sem->count - 1;
@@ -131,7 +132,8 @@ extern __inline__ int down_trylock(struct semaphore * sem)
  */
 extern __inline__ void up(struct semaphore * sem)
 {
-       int flags;
+       unsigned long flags;
+
        spin_lock_irqsave(&sem->sentry, flags);
        if (sem->count < 0) {
                __up(sem);
index a78285010d62f852674327f09a73fda3b7a69a8b..4cff977ad5266c5129ed5eca9114e38a55d258cf 100644 (file)
@@ -39,10 +39,6 @@ extern void generic_calibrate_decr(void);
 extern void wakeup_decrementer(void);
 extern void snapshot_timebase(void);
 
-#ifdef CONFIG_RTC_CLASS
-extern int __init rtc_class_hookup(void);
-#endif
-
 /* Some sane defaults: 125 MHz timebase, 1GHz processor */
 extern unsigned long ppc_proc_freq;
 #define DEFAULT_PROC_FREQ      (DEFAULT_TB_FREQ * 8)
index 7bfcde2d557833935eab407e048c1763d194c4fd..e1c7286165ffa35c1a47e91b5b0abe56e99091ea 100644 (file)
@@ -678,10 +678,11 @@ extern void __blk_stop_queue(request_queue_t *q);
 extern void blk_run_queue(request_queue_t *);
 extern void blk_start_queueing(request_queue_t *);
 extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *);
-extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned int);
-extern int blk_rq_unmap_user(struct bio *, unsigned int);
+extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned long);
+extern int blk_rq_unmap_user(struct request *);
 extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, gfp_t);
-extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int);
+extern int blk_rq_map_user_iov(request_queue_t *, struct request *,
+                              struct sg_iovec *, int, unsigned int);
 extern int blk_execute_rq(request_queue_t *, struct gendisk *,
                          struct request *, int);
 extern void blk_execute_rq_nowait(request_queue_t *, struct gendisk *,
index b99a714fcac67adf74e85650abcfa7ecaf6ef7ab..3680ff9a30ed21b5e97450bb1f5cc811d74ecd10 100644 (file)
@@ -49,6 +49,15 @@ enum blktrace_act {
        __BLK_TA_REMAP,                 /* bio was remapped */
 };
 
+/*
+ * Notify events.
+ */
+enum blktrace_notify {
+       __BLK_TN_PROCESS = 0,           /* establish pid/name mapping */
+       __BLK_TN_TIMESTAMP,             /* include system clock */
+};
+
+
 /*
  * Trace actions in full. Additionally, read or write is masked
  */
@@ -68,6 +77,9 @@ enum blktrace_act {
 #define BLK_TA_BOUNCE          (__BLK_TA_BOUNCE)
 #define BLK_TA_REMAP           (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE))
 
+#define BLK_TN_PROCESS         (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))
+#define BLK_TN_TIMESTAMP       (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
+
 #define BLK_IO_TRACE_MAGIC     0x65617400
 #define BLK_IO_TRACE_VERSION   0x07
 
index 8f2ffa4caabfa1c0a425e54fa0c0185eb0fddf3d..6485e9716b36abbc9e0998a95eb35d3b313d41ae 100644 (file)
@@ -245,7 +245,7 @@ int crypto_alg_available(const char *name, u32 flags)
        __deprecated_for_modules;
 int crypto_has_alg(const char *name, u32 type, u32 mask);
 #else
-static int crypto_alg_available(const char *name, u32 flags);
+static int crypto_alg_available(const char *name, u32 flags)
        __deprecated_for_modules;
 static inline int crypto_alg_available(const char *name, u32 flags)
 {
index 2fa9f1144228e7270ab626b2daf887ff0eb1b1b9..a24931d244046d72e056fab76f670719256de00a 100644 (file)
@@ -21,11 +21,11 @@ typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *);
 typedef int (elevator_may_queue_fn) (request_queue_t *, int);
 
 typedef int (elevator_set_req_fn) (request_queue_t *, struct request *, gfp_t);
-typedef void (elevator_put_req_fn) (request_queue_t *, struct request *);
+typedef void (elevator_put_req_fn) (struct request *);
 typedef void (elevator_activate_req_fn) (request_queue_t *, struct request *);
 typedef void (elevator_deactivate_req_fn) (request_queue_t *, struct request *);
 
-typedef void *(elevator_init_fn) (request_queue_t *, elevator_t *);
+typedef void *(elevator_init_fn) (request_queue_t *);
 typedef void (elevator_exit_fn) (elevator_t *);
 
 struct elevator_ops
index 03f43e2893a4a6110c55bd50372aeee716e9d113..21dd5690527118b1987c8e24234744c501ca926d 100644 (file)
@@ -191,7 +191,7 @@ struct ip_mc_list
 #define IGMPV3_MASK(value, nb) ((nb)>=32 ? (value) : ((1<<(nb))-1) & (value))
 #define IGMPV3_EXP(thresh, nbmant, nbexp, value) \
        ((value) < (thresh) ? (value) : \
-        ((IGMPV3_MASK(value, nbmant) | (1<<(nbmant+nbexp))) << \
+        ((IGMPV3_MASK(value, nbmant) | (1<<(nbmant))) << \
          (IGMPV3_MASK((value) >> (nbmant), nbexp) + (nbexp))))
 
 #define IGMPV3_QQIC(value) IGMPV3_EXP(0x80, 4, 3, value)
index ff40ea118e3a7798f2a3a092be3cc238788cbd2c..5eb5d24b7680fea25a97b44df24424e60342658b 100644 (file)
@@ -93,6 +93,14 @@ extern void setup_arch(char **);
        static initcall_t __initcall_##fn##id __attribute_used__ \
        __attribute__((__section__(".initcall" level ".init"))) = fn
 
+/*
+ * A "pure" initcall has no dependencies on anything else, and purely
+ * initializes variables that couldn't be statically initialized.
+ *
+ * This only exists for built-in code, not for modules.
+ */
+#define pure_initcall(fn)              __define_initcall("0",fn,1)
+
 #define core_initcall(fn)              __define_initcall("1",fn,1)
 #define core_initcall_sync(fn)         __define_initcall("1s",fn,1s)
 #define postcore_initcall(fn)          __define_initcall("2",fn,2)
index fd1756d3a47e9b29f77f917b730464f4fb5daa33..88b45895746d654a6dc1ca3332c72c7990f60110 100644 (file)
@@ -315,7 +315,7 @@ typedef struct {
 * structures.  If the freq0 variable is non-zero, the tone table contents
 * for the tone_index are updated to the frequencies and gains defined.  It
 * should be noted that DTMF tones cannot be reassigned, so if DTMF tone
-* table indexs are used in a cadence the frequency and gain variables will
+* table indexes are used in a cadence the frequency and gain variables will
 * be ignored.
 *
 * If the array elements contain frequency parameters the driver will
index c8d5f207c3d4892cf23fc4ebd24b736b4023779a..0ec6e28bccd27b7d2861f5eb442d5b06610d97f3 100644 (file)
@@ -74,7 +74,7 @@
 #define __jiffy_data  __attribute__((section(".data")))
 
 /*
- * The 64-bit value is not volatile - you MUST NOT read it
+ * The 64-bit value is not atomic - you MUST NOT read it
  * without sampling the sequence number in xtime_lock.
  * get_jiffies_64() will do this for you as appropriate.
  */
index 24b611147adbb9b77f8a2d49b0b35b7fc2d66009..6738283ac38550a1258b69fdf6b9e537c6abe1b2 100644 (file)
@@ -30,8 +30,10 @@ extern const char linux_banner[];
 
 #define STACK_MAGIC    0xdeadbeef
 
+#define ALIGN(x,a)             __ALIGN_MASK(x,(typeof(x))(a)-1)
+#define __ALIGN_MASK(x,mask)   (((x)+(mask))&~(mask))
+
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-#define ALIGN(x,a) (((x)+(a)-1UL)&~((a)-1UL))
 #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
 #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
@@ -63,7 +65,7 @@ struct user;
  * context (spinlock, irq-handler, ...).
  *
  * This is a useful debugging help to be able to catch problems early and not
- * be biten later when the calling function happens to sleep when it is not
+ * be bitten later when the calling function happens to sleep when it is not
  * supposed to.
  */
 #ifdef CONFIG_PREEMPT_VOLUNTARY
index 8db9d75541a631c36946664283ec92275715692e..8b5a79615fbf16aaf21a3912697ddf7562346d81 100644 (file)
@@ -18,8 +18,6 @@
 #ifndef _LINUX_MQUEUE_H
 #define _LINUX_MQUEUE_H
 
-#include <linux/types.h>
-
 #define MQ_PRIO_MAX    32768
 /* per-uid limit of kernel memory used by mqueue, in bytes */
 #define MQ_BYTES_MAX   819200
index 9264139bd8df0ee171c2d52531fa626720c42a1f..83b8c4f1d69d98649b10f1967a8e5522fea592bc 100644 (file)
@@ -93,8 +93,10 @@ struct netpoll_info;
 #endif
 #endif
 
-#if !defined(CONFIG_NET_IPIP) && \
-    !defined(CONFIG_IPV6) && !defined(CONFIG_IPV6_MODULE)
+#if !defined(CONFIG_NET_IPIP) && !defined(CONFIG_NET_IPIP_MODULE) && \
+    !defined(CONFIG_NET_IPGRE) &&  !defined(CONFIG_NET_IPGRE_MODULE) && \
+    !defined(CONFIG_IPV6_SIT) && !defined(CONFIG_IPV6_SIT_MODULE) && \
+    !defined(CONFIG_IPV6_TUNNEL) && !defined(CONFIG_IPV6_TUNNEL_MODULE)
 #define MAX_HEADER LL_MAX_HEADER
 #else
 #define MAX_HEADER (LL_MAX_HEADER + 48)
index f6baecdeecd6d1dd15dcaa11482d5fa87121ec77..971d1c6dfc4bf0dbffff439c5ee643fc5547832e 100644 (file)
@@ -45,8 +45,10 @@ static inline void exit_task_namespaces(struct task_struct *p)
 {
        struct nsproxy *ns = p->nsproxy;
        if (ns) {
-               put_nsproxy(ns);
+               task_lock(p);
                p->nsproxy = NULL;
+               task_unlock(p);
+               put_nsproxy(ns);
        }
 }
 #endif
index 73e0becec0866d39664b79cae596b712e811b2fe..62a7169aed8b12d1a4e231f57b93d68bd4ec040e 100644 (file)
@@ -429,7 +429,7 @@ enum reiserfs_mount_options {
 /* -o hash={tea, rupasov, r5, detect} is meant for properly mounting 
 ** reiserfs disks from 3.5.19 or earlier.  99% of the time, this option
 ** is not required.  If the normal autodection code can't determine which
-** hash to use (because both hases had the same value for a file)
+** hash to use (because both hashes had the same value for a file)
 ** use this option to force a specific hash.  It won't allow you to override
 ** the existing hash on the FS, so if you have a tea hash disk, and mount
 ** with -o hash=rupasov, the mount will fail.
index b800d2d68b325d139af36320db55e7d9db1d26f1..8451052ca66f4ad14da7bc1bc120578d455fb626 100644 (file)
@@ -183,13 +183,27 @@ do {                                                              \
 #define read_lock(lock)                        _read_lock(lock)
 
 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
+
 #define spin_lock_irqsave(lock, flags) flags = _spin_lock_irqsave(lock)
 #define read_lock_irqsave(lock, flags) flags = _read_lock_irqsave(lock)
 #define write_lock_irqsave(lock, flags)        flags = _write_lock_irqsave(lock)
+
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+#define spin_lock_irqsave_nested(lock, flags, subclass) \
+       flags = _spin_lock_irqsave_nested(lock, subclass)
+#else
+#define spin_lock_irqsave_nested(lock, flags, subclass) \
+       flags = _spin_lock_irqsave(lock)
+#endif
+
 #else
+
 #define spin_lock_irqsave(lock, flags) _spin_lock_irqsave(lock, flags)
 #define read_lock_irqsave(lock, flags) _read_lock_irqsave(lock, flags)
 #define write_lock_irqsave(lock, flags)        _write_lock_irqsave(lock, flags)
+#define spin_lock_irqsave_nested(lock, flags, subclass)        \
+       spin_lock_irqsave(lock, flags)
+
 #endif
 
 #define spin_lock_irq(lock)            _spin_lock_irq(lock)
index 8828b8155e9c11db7abb99c8342b7ee66d8e6839..8a2307ce729687f25a954969ae14df0b31748915 100644 (file)
@@ -32,6 +32,8 @@ void __lockfunc _read_lock_irq(rwlock_t *lock)                __acquires(lock);
 void __lockfunc _write_lock_irq(rwlock_t *lock)                __acquires(lock);
 unsigned long __lockfunc _spin_lock_irqsave(spinlock_t *lock)
                                                        __acquires(lock);
+unsigned long __lockfunc _spin_lock_irqsave_nested(spinlock_t *lock, int subclass)
+                                                       __acquires(lock);
 unsigned long __lockfunc _read_lock_irqsave(rwlock_t *lock)
                                                        __acquires(lock);
 unsigned long __lockfunc _write_lock_irqsave(rwlock_t *lock)
index 7dac8f04d28e1aee64cec1a140bd52aded10edd1..004808a6df1d080f8389cf2a57f1d4c85ff7673d 100644 (file)
@@ -20,7 +20,7 @@ struct ts_config;
 /**
  * struct ts_state - search state
  * @offset: offset for next match
- * @cb: control buffer, for persistant variables of get_next_block()
+ * @cb: control buffer, for persistent variables of get_next_block()
  */
 struct ts_state
 {
@@ -71,7 +71,7 @@ struct ts_config
         * Called repeatedly until 0 is returned. Must assign the
         * head of the next block of data to &*dst and return the length
         * of the block or 0 if at the end. consumed == 0 indicates
-        * a new search. May store/read persistant values in state->cb.
+        * a new search. May store/read persistent values in state->cb.
         */
        unsigned int            (*get_next_block)(unsigned int consumed,
                                                  const u8 **dst,
index ac286a35303288eddbf2171bced23f79cd11da7c..9cdbae2a53a3bfc9a808e4670e9082b739e16296 100644 (file)
@@ -883,18 +883,23 @@ static inline int sk_filter(struct sock *sk, struct sk_buff *skb)
 }
 
 /**
- *     sk_filter_release: Release a socket filter
- *     @rcu: rcu_head that contains the sk_filter info to remove
- *
- *     Remove a filter from a socket and release its resources.
+ *     sk_filter_rcu_free: Free a socket filter
+ *     @rcu: rcu_head that contains the sk_filter to free
  */
 static inline void sk_filter_rcu_free(struct rcu_head *rcu)
 {
        struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu);
        kfree(fp);
 }
 
+/**
+ *     sk_filter_release: Release a socket filter
+ *     @sk: socket
+ *     @fp: filter to remove
+ *
+ *     Remove a filter from a socket and release its resources.
+ */
+
 static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp)
 {
        unsigned int size = sk_filter_len(fp);
index 9582e8401669b89ceba0d555499c0d3e263c8e30..1d77b63c5ea4c64882b3e7d37d0c650941729f4a 100644 (file)
@@ -35,6 +35,7 @@
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_transport_sas.h>
+#include <asm/scatterlist.h>
 
 struct block_device;
 
index 52fd6879b86e1142f1c604367b5eb552e2dc26f5..17137f3a3b6fc39cc4ad3040beae03f3bec9b900 100644 (file)
@@ -1,3 +1,3 @@
 /* include/version.h.  Generated by alsa/ksync script.  */
 #define CONFIG_SND_VERSION "1.0.13"
-#define CONFIG_SND_DATE " (Sun Oct 22 08:56:16 2006 UTC)"
+#define CONFIG_SND_DATE " (Tue Nov 28 14:07:24 2006 UTC)"
index 3da978eec791216dd796cd704aed67b263713fa1..8cdd3e72ba55f9ee52b098e67b1b7d4fcd04aa58 100644 (file)
@@ -1315,9 +1315,8 @@ struct task_struct * __devinit fork_idle(int cpu)
        struct pt_regs regs;
 
        task = copy_process(CLONE_VM, 0, idle_regs(&regs), 0, NULL, NULL, 0);
-       if (!task)
-               return ERR_PTR(-ENOMEM);
-       init_idle(task, cpu);
+       if (!IS_ERR(task))
+               init_idle(task, cpu);
 
        return task;
 }
index 42aa6f1a3f0f95e7dce8be2480ab5d209c881db3..a681912bc89a10388e6a4eeecd44dfe05416aff9 100644 (file)
@@ -231,10 +231,10 @@ fastcall unsigned int __do_IRQ(unsigned int irq)
                spin_unlock(&desc->lock);
 
                action_ret = handle_IRQ_event(irq, action);
-
-               spin_lock(&desc->lock);
                if (!noirqdebug)
                        note_interrupt(irq, desc, action_ret);
+
+               spin_lock(&desc->lock);
                if (likely(!(desc->status & IRQ_PENDING)))
                        break;
                desc->status &= ~IRQ_PENDING;
index 9c7e2e4c1fe717ef0f309eed0163a2d28a6cd5a7..543ea2e5ad9301944ab520303bd7fe84e4e92f88 100644 (file)
@@ -147,11 +147,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
        if (unlikely(irqfixup)) {
                /* Don't punish working computers */
                if ((irqfixup == 2 && irq == 0) || action_ret == IRQ_NONE) {
-                       int ok;
-
-                       spin_unlock(&desc->lock);
-                       ok = misrouted_irq(irq);
-                       spin_lock(&desc->lock);
+                       int ok = misrouted_irq(irq);
                        if (action_ret == IRQ_NONE)
                                desc->irqs_unhandled -= ok;
                }
index bb4e29d924e4ff29567a962e7b643e0c1c875896..2b76dee284964c82ca42a81b2ddd1463f72d001d 100644 (file)
@@ -307,14 +307,14 @@ int call_usermodehelper_pipe(char *path, char **argv, char **envp,
                return 0;
 
        f = create_write_pipe();
-       if (!f)
-               return -ENOMEM;
+       if (IS_ERR(f))
+               return PTR_ERR(f);
        *filp = f;
 
        f = create_read_pipe(f);
-       if (!f) {
+       if (IS_ERR(f)) {
                free_write_pipe(*filp);
-               return -ENOMEM;
+               return PTR_ERR(f);
        }
        sub_info.stdin = f;
 
index b739be2a6dc9adff9eb6a471a0044bbeedb54976..c9fefdb1a7db45df9658dd32d963e7f28bbdfdf4 100644 (file)
@@ -1081,7 +1081,8 @@ static int static_obj(void *obj)
         */
        for_each_possible_cpu(i) {
                start = (unsigned long) &__per_cpu_start + per_cpu_offset(i);
-               end   = (unsigned long) &__per_cpu_end   + per_cpu_offset(i);
+               end   = (unsigned long) &__per_cpu_start + PERCPU_ENOUGH_ROOM
+                                       + per_cpu_offset(i);
 
                if ((addr >= start) && (addr < end))
                        return 1;
index 476c3741511b31af1717f90e052880e0e6c9b585..2c6c2bf8551446873520376373d78273d16d4f58 100644 (file)
@@ -293,6 +293,27 @@ void __lockfunc _spin_lock_nested(spinlock_t *lock, int subclass)
 }
 
 EXPORT_SYMBOL(_spin_lock_nested);
+unsigned long __lockfunc _spin_lock_irqsave_nested(spinlock_t *lock, int subclass)
+{
+       unsigned long flags;
+
+       local_irq_save(flags);
+       preempt_disable();
+       spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
+       /*
+        * On lockdep we dont want the hand-coded irq-enable of
+        * _raw_spin_lock_flags() code, because lockdep assumes
+        * that interrupts are not re-enabled during lock-acquire:
+        */
+#ifdef CONFIG_PROVE_SPIN_LOCKING
+       _raw_spin_lock(lock);
+#else
+       _raw_spin_lock_flags(lock, &flags);
+#endif
+       return flags;
+}
+
+EXPORT_SYMBOL(_spin_lock_irqsave_nested);
 
 #endif
 
index f7e50d16dbf6b6ba55980dda3e0841d0a9d0d394..ed0a21d4a902339acef700eea0e291220ce7fb2a 100644 (file)
@@ -938,8 +938,11 @@ int unwind(struct unwind_frame_info *frame)
                else {
                        retAddrReg = state.version <= 1 ? *ptr++ : get_uleb128(&ptr, end);
                        /* skip augmentation */
-                       if (((const char *)(cie + 2))[1] == 'z')
-                               ptr += get_uleb128(&ptr, end);
+                       if (((const char *)(cie + 2))[1] == 'z') {
+                               uleb128_t augSize = get_uleb128(&ptr, end);
+
+                               ptr += augSize;
+                       }
                        if (ptr > end
                           || retAddrReg >= ARRAY_SIZE(reg_info)
                           || REG_INVALID(retAddrReg)
@@ -963,9 +966,7 @@ int unwind(struct unwind_frame_info *frame)
        if (cie == NULL || fde == NULL) {
 #ifdef CONFIG_FRAME_POINTER
                unsigned long top, bottom;
-#endif
 
-#ifdef CONFIG_FRAME_POINTER
                top = STACK_TOP(frame->task);
                bottom = STACK_BOTTOM(frame->task);
 # if FRAME_RETADDR_OFFSET < 0
index 2cb4a437942e980979098d302efef163d3d3f9f1..98bcadc0118523faeaf8443d4aeb248520c9798d 100644 (file)
@@ -40,7 +40,7 @@
  *       configuration according to the specified parameters.
  *   (3) User starts the search(es) by calling _find() or _next() to
  *       fetch subsequent occurrences. A state variable is provided
- *       to the algorihtm to store persistant variables.
+ *       to the algorihtm to store persistent variables.
  *   (4) Core eventually resets the search offset and forwards the find()
  *       request to the algorithm.
  *   (5) Algorithm calls get_next_block() provided by the user continously
index bf2f6cff1d6aaeb78097e90efb78f5c6dfc61b32..aa6fcc7ca66f1f8bc976b5798039c3a0672d09eb 100644 (file)
@@ -2612,6 +2612,9 @@ unsigned long __init find_min_pfn_for_node(unsigned long nid)
 {
        int i;
 
+       /* Regions in the early_node_map can be in any order */
+       sort_node_map();
+
        /* Assuming a sorted map, the first range found has the starting pfn */
        for_each_active_range_index_in_nid(i, nid)
                return early_node_map[i].start_pfn;
@@ -2680,9 +2683,6 @@ void __init free_area_init_nodes(unsigned long *max_zone_pfn)
                        max(max_zone_pfn[i], arch_zone_lowest_possible_pfn[i]);
        }
 
-       /* Regions in the early_node_map can be in any order */
-       sort_node_map();
-
        /* Print out the zone ranges */
        printk("Zone PFN ranges:\n");
        for (i = 0; i < MAX_NR_ZONES; i++)
index 65f094845719126013cfb9f3c1c19e11f4b2b566..bb94e6da223cb6f3535f5fecd611e91d3c0c067f 100644 (file)
@@ -57,6 +57,7 @@
 static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
 {
        __u8 status;
+       struct hci_conn *pend;
 
        BT_DBG("%s ocf 0x%x", hdev->name, ocf);
 
@@ -71,6 +72,15 @@ static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb
                        clear_bit(HCI_INQUIRY, &hdev->flags);
                        hci_req_complete(hdev, status);
                }
+
+               hci_dev_lock(hdev);
+
+               pend = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
+               if (pend)
+                       hci_acl_connect(pend);
+
+               hci_dev_unlock(hdev);
+
                break;
 
        default:
@@ -565,11 +575,20 @@ static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 {
        __u8 status = *((__u8 *) skb->data);
+       struct hci_conn *pend;
 
        BT_DBG("%s status %d", hdev->name, status);
 
        clear_bit(HCI_INQUIRY, &hdev->flags);
        hci_req_complete(hdev, status);
+
+       hci_dev_lock(hdev);
+
+       pend = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
+       if (pend)
+               hci_acl_connect(pend);
+
+       hci_dev_unlock(hdev);
 }
 
 /* Inquiry Result */
index f26a9eb49945c8805db60c07964b9c1a734f4556..711a085eca5b3436bc13e528a7b03904f74beba2 100644 (file)
@@ -120,10 +120,13 @@ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
                        if (!hci_test_bit(evt, &flt->event_mask))
                                continue;
 
-                       if (flt->opcode && ((evt == HCI_EV_CMD_COMPLETE && 
-                                       flt->opcode != *(__u16 *)(skb->data + 3)) ||
-                                       (evt == HCI_EV_CMD_STATUS && 
-                                       flt->opcode != *(__u16 *)(skb->data + 4))))
+                       if (flt->opcode &&
+                           ((evt == HCI_EV_CMD_COMPLETE &&
+                             flt->opcode !=
+                             get_unaligned((__u16 *)(skb->data + 3))) ||
+                            (evt == HCI_EV_CMD_STATUS &&
+                             flt->opcode !=
+                             get_unaligned((__u16 *)(skb->data + 4)))))
                                continue;
                }
 
index 954eb74eb370a34cb97050c9bec17e8cbfdff08c..3eeeb7a86e753cc638993e1ef9214de51adbdfbe 100644 (file)
@@ -259,7 +259,9 @@ void hci_conn_add_sysfs(struct hci_conn *conn)
 
        BT_DBG("conn %p", conn);
 
-       conn->dev.parent  = &hdev->dev;
+       conn->dev.bus = &bt_bus;
+       conn->dev.parent = &hdev->dev;
+
        conn->dev.release = bt_release;
 
        snprintf(conn->dev.bus_id, BUS_ID_SIZE,
index 2b3dcb8f90fadebdcde2ace1feed9cd90cf76b0e..bbf78e6a7bc382d8a6014b1d076c784fbd2a2339 100644 (file)
@@ -1353,12 +1353,12 @@ static inline int l2cap_conf_output(struct sock *sk, void **ptr)
 
        /* Configure output options and let the other side know
         * which ones we don't like. */
-       if (pi->conf_mtu < pi->omtu) {
-               l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu);
+       if (pi->conf_mtu < pi->omtu)
                result = L2CAP_CONF_UNACCEPT;
-       } else {
+       else
                pi->omtu = pi->conf_mtu;
-       }
+
+       l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu);
 
        BT_DBG("sk %p result %d", sk, result);
        return result;
@@ -1533,6 +1533,9 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
        if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
                return -ENOENT;
 
+       if (sk->sk_state == BT_DISCONN)
+               goto unlock;
+
        l2cap_parse_conf_req(sk, req->data, cmd->len - sizeof(*req));
 
        if (flags & 0x0001) {
index b8e3a5f1c8a80683d5806662cc7f55c46a656bee..1fb5d42f37ae959c05dc92df929924250eeca90a 100644 (file)
@@ -765,7 +765,7 @@ static void rfcomm_tty_set_termios(struct tty_struct *tty, struct termios *old)
 
        BT_DBG("tty %p termios %p", tty, old);
 
-       if (!dev)
+       if (!dev || !dev->dlc || !dev->dlc->session)
                return;
 
        /* Handle turning off CRTSCTS */
index 4e4119a1213925568b8a1acdef9bf52b98b19da3..4c61a7e0a86e1ae9e16867f9f8e4b0412b8edbaf 100644 (file)
@@ -58,12 +58,13 @@ static int get_fdb_entries(struct net_bridge *br, void __user *userbuf,
 {
        int num;
        void *buf;
-       size_t size = maxnum * sizeof(struct __fdb_entry);
+       size_t size;
 
-       if (size > PAGE_SIZE) {
-               size = PAGE_SIZE;
+       /* Clamp size to PAGE_SIZE, test maxnum to avoid overflow */
+       if (maxnum > PAGE_SIZE/sizeof(struct __fdb_entry))
                maxnum = PAGE_SIZE/sizeof(struct __fdb_entry);
-       }
+
+       size = maxnum * sizeof(struct __fdb_entry);
 
        buf = kmalloc(size, GFP_USER);
        if (!buf)
index eb0ff7ab05ed3a1d4062522cf6f58846c82e3fcd..fc4242c0767ca581df99a61968b9581a9e0f2cae 100644 (file)
@@ -277,7 +277,7 @@ static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
        __u64 seq;
 
        sk = inet6_lookup(&dccp_hashinfo, &hdr->daddr, dh->dccph_dport,
-                         &hdr->saddr, dh->dccph_sport, skb->dev->ifindex);
+                         &hdr->saddr, dh->dccph_sport, inet6_iif(skb));
 
        if (sk == NULL) {
                ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS);
index 146496fce2e2b4c6e40389ecbafc41b6a302ae97..fded1493c1dcc8a01884407b8f34d4b6a7834c98 100644 (file)
@@ -160,6 +160,8 @@ static __init int dccpprobe_init(void)
        init_waitqueue_head(&dccpw.wait);
        spin_lock_init(&dccpw.lock);
        dccpw.fifo = kfifo_alloc(bufsize, GFP_KERNEL, &dccpw.lock);
+       if (IS_ERR(dccpw.fifo))
+               return PTR_ERR(dccpw.fifo);
 
        if (!proc_net_fops_create(procname, S_IRUSR, &dccpprobe_fops))
                goto err0;
index 143c4668538b40203063e2c6c741b395a0bf3fef..8b848aa77bfc39000ae75f9bb5969bd111280553 100644 (file)
@@ -225,10 +225,8 @@ __ip_conntrack_expect_find(const struct ip_conntrack_tuple *tuple)
        struct ip_conntrack_expect *i;
        
        list_for_each_entry(i, &ip_conntrack_expect_list, list) {
-               if (ip_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask)) {
-                       atomic_inc(&i->use);
+               if (ip_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask))
                        return i;
-               }
        }
        return NULL;
 }
@@ -241,6 +239,8 @@ ip_conntrack_expect_find(const struct ip_conntrack_tuple *tuple)
        
        read_lock_bh(&ip_conntrack_lock);
        i = __ip_conntrack_expect_find(tuple);
+       if (i)
+               atomic_inc(&i->use);
        read_unlock_bh(&ip_conntrack_lock);
 
        return i;
index 7b7441202bfd6e14505142a6b0d270c77f73042f..6cb9070cd0bc3a70ea8ec7aa813a6013161b8ea5 100644 (file)
@@ -1417,7 +1417,7 @@ static int process_rcf(struct sk_buff **pskb, struct ip_conntrack *ct,
                DEBUGP
                    ("ip_ct_ras: set RAS connection timeout to %u seconds\n",
                     info->timeout);
-               ip_ct_refresh_acct(ct, ctinfo, NULL, info->timeout * HZ);
+               ip_ct_refresh(ct, *pskb, info->timeout * HZ);
 
                /* Set expect timeout */
                read_lock_bh(&ip_conntrack_lock);
@@ -1465,7 +1465,7 @@ static int process_urq(struct sk_buff **pskb, struct ip_conntrack *ct,
        info->sig_port[!dir] = 0;
 
        /* Give it 30 seconds for UCF or URJ */
-       ip_ct_refresh_acct(ct, ctinfo, NULL, 30 * HZ);
+       ip_ct_refresh(ct, *pskb, 30 * HZ);
 
        return 0;
 }
index 262d0d44ec1b5924aff8a3d7efe4ec6a1fbb2733..55f0ae64108157d6a9a8380d0cf46d6f08bd43c1 100644 (file)
@@ -153,6 +153,7 @@ ctnetlink_dump_protoinfo(struct sk_buff *skb, const struct ip_conntrack *ct)
        return ret;
 
 nfattr_failure:
+       ip_conntrack_proto_put(proto);
        return -1;
 }
 
index ad0312d0e4fd6a214c4ab1dc232268e9c2b52949..264763adc39bf43d6c8176455c3867687744f0f6 100644 (file)
@@ -114,6 +114,14 @@ static void send_reset(struct sk_buff *oldskb, int hook)
        tcph->window = 0;
        tcph->urg_ptr = 0;
 
+       /* Adjust TCP checksum */
+       tcph->check = 0;
+       tcph->check = tcp_v4_check(tcph, sizeof(struct tcphdr),
+                                  nskb->nh.iph->saddr,
+                                  nskb->nh.iph->daddr,
+                                  csum_partial((char *)tcph,
+                                               sizeof(struct tcphdr), 0));
+
        /* Set DF, id = 0 */
        nskb->nh.iph->frag_off = htons(IP_DF);
        nskb->nh.iph->id = 0;
@@ -129,14 +137,8 @@ static void send_reset(struct sk_buff *oldskb, int hook)
        if (ip_route_me_harder(&nskb, addr_type))
                goto free_nskb;
 
-       /* Adjust TCP checksum */
        nskb->ip_summed = CHECKSUM_NONE;
-       tcph->check = 0;
-       tcph->check = tcp_v4_check(tcph, sizeof(struct tcphdr),
-                                  nskb->nh.iph->saddr,
-                                  nskb->nh.iph->daddr,
-                                  csum_partial((char *)tcph,
-                                               sizeof(struct tcphdr), 0));
+
        /* Adjust IP TTL */
        nskb->nh.iph->ttl = dst_metric(nskb->dst, RTAX_HOPLIMIT);
 
index 4be336f17883ca21e129fd93a146d6e73c338fb1..f230eeecf09289eaabcb6125af5129ae0fb57cc0 100644 (file)
@@ -156,6 +156,8 @@ static __init int tcpprobe_init(void)
        init_waitqueue_head(&tcpw.wait);
        spin_lock_init(&tcpw.lock);
        tcpw.fifo = kfifo_alloc(bufsize, GFP_KERNEL, &tcpw.lock);
+       if (IS_ERR(tcpw.fifo))
+               return PTR_ERR(tcpw.fifo);
 
        if (!proc_net_fops_create(procname, S_IRUSR, &tcpprobe_fops))
                goto err0;
index 865d75214a9ab1d741f3d8351359e95a0d8394e7..9e1bd374875e2f86f96dcb2f768849f20ed67c52 100644 (file)
@@ -928,23 +928,32 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
        return 1; 
 #else
        struct udp_sock *up = udp_sk(sk);
-       struct udphdr *uh = skb->h.uh;
+       struct udphdr *uh;
        struct iphdr *iph;
        int iphlen, len;
   
-       __u8 *udpdata = (__u8 *)uh + sizeof(struct udphdr);
-       __be32 *udpdata32 = (__be32 *)udpdata;
+       __u8 *udpdata;
+       __be32 *udpdata32;
        __u16 encap_type = up->encap_type;
 
        /* if we're overly short, let UDP handle it */
-       if (udpdata > skb->tail)
+       len = skb->len - sizeof(struct udphdr);
+       if (len <= 0)
                return 1;
 
        /* if this is not encapsulated socket, then just return now */
        if (!encap_type)
                return 1;
 
-       len = skb->tail - udpdata;
+       /* If this is a paged skb, make sure we pull up
+        * whatever data we need to look at. */
+       if (!pskb_may_pull(skb, sizeof(struct udphdr) + min(len, 8)))
+               return 1;
+
+       /* Now we can get the pointers */
+       uh = skb->h.uh;
+       udpdata = (__u8 *)uh + sizeof(struct udphdr);
+       udpdata32 = (__be32 *)udpdata;
 
        switch (encap_type) {
        default:
index 84d7ebdb9d211103c678579009d6c24dc905379f..b9f40290d12ac35eb7bb55ac5a1ccce14a524628 100644 (file)
@@ -542,6 +542,7 @@ ip6ip6_rcv(struct sk_buff *skb)
                skb->dev = t->dev;
                dst_release(skb->dst);
                skb->dst = NULL;
+               nf_reset(skb);
                if (t->parms.flags & IP6_TNL_F_RCV_DSCP_COPY)
                        ipv6_copy_dscp(ipv6h, skb->nh.ipv6h);
                ip6ip6_ecn_decapsulate(ipv6h, skb);
@@ -1149,6 +1150,20 @@ fail:
        return err;
 }
 
+static void __exit ip6ip6_destroy_tunnels(void)
+{
+       int h;
+       struct ip6_tnl *t;
+
+       for (h = 0; h < HASH_SIZE; h++) {
+               while ((t = tnls_r_l[h]) != NULL)
+                       unregister_netdevice(t->dev);
+       }
+
+       t = tnls_wc[0];
+       unregister_netdevice(t->dev);
+}
+
 /**
  * ip6_tunnel_cleanup - free resources and unregister protocol
  **/
@@ -1158,7 +1173,9 @@ static void __exit ip6_tunnel_cleanup(void)
        if (xfrm6_tunnel_deregister(&ip6ip6_handler))
                printk(KERN_INFO "ip6ip6 close: can't deregister tunnel\n");
 
-       unregister_netdev(ip6ip6_fb_tnl_dev);
+       rtnl_lock();
+       ip6ip6_destroy_tunnels();
+       rtnl_unlock();
 }
 
 module_init(ip6_tunnel_init);
index c953466b7afdbde3c77e6494c3f24a46908d9097..b39ae99122d54a3844f2183130854a45eb459e19 100644 (file)
@@ -330,6 +330,8 @@ static int inline rt6_check_neigh(struct rt6_info *rt)
                read_lock_bh(&neigh->lock);
                if (neigh->nud_state & NUD_VALID)
                        m = 2;
+               else if (!(neigh->nud_state & NUD_FAILED))
+                       m = 1;
                read_unlock_bh(&neigh->lock);
        }
        return m;
@@ -347,9 +349,7 @@ static int rt6_score_route(struct rt6_info *rt, int oif,
        m |= IPV6_DECODE_PREF(IPV6_EXTRACT_PREF(rt->rt6i_flags)) << 2;
 #endif
        n = rt6_check_neigh(rt);
-       if (n > 1)
-               m |= 16;
-       else if (!n && strict & RT6_LOOKUP_F_REACHABLE)
+       if (!n && (strict & RT6_LOOKUP_F_REACHABLE))
                return -1;
        return m;
 }
@@ -380,10 +380,11 @@ static struct rt6_info *rt6_select(struct rt6_info **head, int oif,
                        continue;
 
                if (m > mpri) {
-                       rt6_probe(match);
+                       if (strict & RT6_LOOKUP_F_REACHABLE)
+                               rt6_probe(match);
                        match = rt;
                        mpri = m;
-               } else {
+               } else if (strict & RT6_LOOKUP_F_REACHABLE) {
                        rt6_probe(rt);
                }
        }
@@ -636,7 +637,7 @@ static struct rt6_info *ip6_pol_route_input(struct fib6_table *table,
        int strict = 0;
        int attempts = 3;
        int err;
-       int reachable = RT6_LOOKUP_F_REACHABLE;
+       int reachable = ipv6_devconf.forwarding ? 0 : RT6_LOOKUP_F_REACHABLE;
 
        strict |= flags & RT6_LOOKUP_F_IFACE;
 
@@ -733,7 +734,7 @@ static struct rt6_info *ip6_pol_route_output(struct fib6_table *table,
        int strict = 0;
        int attempts = 3;
        int err;
-       int reachable = RT6_LOOKUP_F_REACHABLE;
+       int reachable = ipv6_devconf.forwarding ? 0 : RT6_LOOKUP_F_REACHABLE;
 
        strict |= flags & RT6_LOOKUP_F_IFACE;
 
index e0c3934a7e4bd82b81135e0e48f097299b3a2510..c83f23e51c469a11bd388eab97b9d80a345db876 100644 (file)
@@ -242,14 +242,13 @@ static void udpv6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
 {
        struct ipv6_pinfo *np;
        struct ipv6hdr *hdr = (struct ipv6hdr*)skb->data;
-       struct net_device *dev = skb->dev;
        struct in6_addr *saddr = &hdr->saddr;
        struct in6_addr *daddr = &hdr->daddr;
        struct udphdr *uh = (struct udphdr*)(skb->data+offset);
        struct sock *sk;
        int err;
 
-       sk = udp_v6_lookup(daddr, uh->dest, saddr, uh->source, dev->ifindex);
+       sk = udp_v6_lookup(daddr, uh->dest, saddr, uh->source, inet6_iif(skb));
    
        if (sk == NULL)
                return;
@@ -348,7 +347,7 @@ static void udpv6_mcast_deliver(struct udphdr *uh,
 
        read_lock(&udp_hash_lock);
        sk = sk_head(&udp_hash[ntohs(uh->dest) & (UDP_HTABLE_SIZE - 1)]);
-       dif = skb->dev->ifindex;
+       dif = inet6_iif(skb);
        sk = udp_v6_mcast_next(sk, uh->dest, daddr, uh->source, saddr, dif);
        if (!sk) {
                kfree_skb(skb);
@@ -429,7 +428,7 @@ static int udpv6_rcv(struct sk_buff **pskb)
         * check socket cache ... must talk to Alan about his plans
         * for sock caches... i'll skip this for now.
         */
-       sk = udp_v6_lookup(saddr, uh->source, daddr, uh->dest, dev->ifindex);
+       sk = udp_v6_lookup(saddr, uh->source, daddr, uh->dest, inet6_iif(skb));
 
        if (sk == NULL) {
                if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
index 5073261b9d0c875d7884cf280866f6b324bb36ba..fede83763095085c36d4866c29eeb08d477464e5 100644 (file)
@@ -1678,7 +1678,8 @@ static int irlmp_slsap_inuse(__u8 slsap_sel)
         *  every IrLAP connection and check every LSAP associated with each
         *  the connection.
         */
-       spin_lock_irqsave(&irlmp->links->hb_spinlock, flags);
+       spin_lock_irqsave_nested(&irlmp->links->hb_spinlock, flags,
+                       SINGLE_DEPTH_NESTING);
        lap = (struct lap_cb *) hashbin_get_first(irlmp->links);
        while (lap != NULL) {
                IRDA_ASSERT(lap->magic == LMP_LAP_MAGIC, goto errlap;);
index 836541e509fe14e67e04c10012b94ae594c0446b..de0567b1f4223a898f9004a2c436c9cf7110ac9d 100644 (file)
@@ -469,10 +469,8 @@ __nf_conntrack_expect_find(const struct nf_conntrack_tuple *tuple)
        struct nf_conntrack_expect *i;
        
        list_for_each_entry(i, &nf_conntrack_expect_list, list) {
-               if (nf_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask)) {
-                       atomic_inc(&i->use);
+               if (nf_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask))
                        return i;
-               }
        }
        return NULL;
 }
@@ -485,6 +483,8 @@ nf_conntrack_expect_find(const struct nf_conntrack_tuple *tuple)
        
        read_lock_bh(&nf_conntrack_lock);
        i = __nf_conntrack_expect_find(tuple);
+       if (i)
+               atomic_inc(&i->use);
        read_unlock_bh(&nf_conntrack_lock);
 
        return i;
@@ -893,12 +893,6 @@ __nf_conntrack_alloc(const struct nf_conntrack_tuple *orig,
 
        memset(conntrack, 0, nf_ct_cache[features].size);
        conntrack->features = features;
-       if (helper) {
-               struct nf_conn_help *help = nfct_help(conntrack);
-               NF_CT_ASSERT(help);
-               help->helper = helper;
-       }
-
        atomic_set(&conntrack->ct_general.use, 1);
        conntrack->ct_general.destroy = destroy_conntrack;
        conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple = *orig;
@@ -982,8 +976,13 @@ init_conntrack(const struct nf_conntrack_tuple *tuple,
 #endif
                nf_conntrack_get(&conntrack->master->ct_general);
                NF_CT_STAT_INC(expect_new);
-       } else
+       } else {
+               struct nf_conn_help *help = nfct_help(conntrack);
+
+               if (help)
+                       help->helper = __nf_ct_helper_find(&repl_tuple);
                NF_CT_STAT_INC(new);
+       }
 
        /* Overload tuple linked list to put us in unconfirmed list. */
        list_add(&conntrack->tuplehash[IP_CT_DIR_ORIGINAL].list, &unconfirmed);
index bd0156a28ecdbb1c90b1f927d0d5520e4a8984c5..ab67c2be2b5dee92d2f8a4719c648110d173eb35 100644 (file)
@@ -161,6 +161,7 @@ ctnetlink_dump_protoinfo(struct sk_buff *skb, const struct nf_conn *ct)
        return ret;
 
 nfattr_failure:
+       nf_ct_proto_put(proto);
        return -1;
 }
 
@@ -949,6 +950,7 @@ ctnetlink_create_conntrack(struct nfattr *cda[],
 {
        struct nf_conn *ct;
        int err = -EINVAL;
+       struct nf_conn_help *help;
 
        ct = nf_conntrack_alloc(otuple, rtuple);
        if (ct == NULL || IS_ERR(ct))
@@ -976,9 +978,16 @@ ctnetlink_create_conntrack(struct nfattr *cda[],
                ct->mark = ntohl(*(u_int32_t *)NFA_DATA(cda[CTA_MARK-1]));
 #endif
 
+       help = nfct_help(ct);
+       if (help)
+               help->helper = nf_ct_helper_find_get(rtuple);
+
        add_timer(&ct->timeout);
        nf_conntrack_hash_insert(ct);
 
+       if (help && help->helper)
+               nf_ct_helper_put(help->helper);
+
        return 0;
 
 err:   
index 6f39faa1583280e61ebda1f364067bd4ff4b9efa..c2059733e15a10700d7d90dd12308da986027a9c 100644 (file)
@@ -13,7 +13,7 @@
 * Due Credit:
 *               Wanpipe socket layer is based on Packet and 
 *               the X25 socket layers. The above sockets were 
-*               used for the specific use of Sangoma Technoloiges 
+*               used for the specific use of Sangoma Technologies 
 *               API programs. 
 *               Packet socket Authors: Ross Biro, Fred N. van Kempen and 
 *                                      Alan Cox.
@@ -23,7 +23,7 @@
 * Apr 25, 2000  Nenad Corbic     o Added the ability to send zero length packets.
 * Mar 13, 2000  Nenad Corbic    o Added a tx buffer check via ioctl call.
 * Mar 06, 2000  Nenad Corbic     o Fixed the corrupt sock lcn problem.
-*                                  Server and client applicaton can run
+*                                  Server and client application can run
 *                                  simultaneously without conflicts.
 * Feb 29, 2000  Nenad Corbic     o Added support for PVC protocols, such as
 *                                  CHDLC, Frame Relay and HDLC API.
index 9479659277aeea861b7aafaa96a3f6d8823411b8..316211d9f17d97ffeab6823778c03113cdd5a76a 100644 (file)
@@ -3,7 +3,7 @@
 *
 *              This module is completely hardware-independent and provides
 *              the following common services for the WAN Link Drivers:
-*               o WAN device managenment (registering, unregistering)
+*               o WAN device management (registering, unregistering)
 *               o Network interface management
 *               o Physical connection management (dial-up, incoming calls)
 *               o Logical connection management (switched virtual circuits)
index b43e7647e125692955b8a9ce5081ee3bb7166bb8..2ee14f8a1908ee6c7d54fa4e74f31a5ef89a23ca 100644 (file)
@@ -495,6 +495,7 @@ static struct xfrm_state *xfrm_user_state_lookup(struct xfrm_usersa_id *p,
                        goto out;
                }
 
+               err = -ESRCH;
                x = xfrm_state_lookup_byaddr(&p->daddr, saddr, p->proto,
                                             p->family);
        }
@@ -1927,6 +1928,9 @@ static int xfrm_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *xt,
        len = RTA_SPACE(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr);
        len += NLMSG_SPACE(sizeof(struct xfrm_user_acquire));
        len += RTA_SPACE(xfrm_user_sec_ctx_size(xp));
+#ifdef CONFIG_XFRM_SUB_POLICY
+       len += RTA_SPACE(sizeof(struct xfrm_userpolicy_type));
+#endif
        skb = alloc_skb(len, GFP_ATOMIC);
        if (skb == NULL)
                return -ENOMEM;
@@ -2034,6 +2038,9 @@ static int xfrm_exp_policy_notify(struct xfrm_policy *xp, int dir, struct km_eve
        len = RTA_SPACE(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr);
        len += NLMSG_SPACE(sizeof(struct xfrm_user_polexpire));
        len += RTA_SPACE(xfrm_user_sec_ctx_size(xp));
+#ifdef CONFIG_XFRM_SUB_POLICY
+       len += RTA_SPACE(sizeof(struct xfrm_userpolicy_type));
+#endif
        skb = alloc_skb(len, GFP_ATOMIC);
        if (skb == NULL)
                return -ENOMEM;
@@ -2060,6 +2067,9 @@ static int xfrm_notify_policy(struct xfrm_policy *xp, int dir, struct km_event *
                len += RTA_SPACE(headlen);
                headlen = sizeof(*id);
        }
+#ifdef CONFIG_XFRM_SUB_POLICY
+       len += RTA_SPACE(sizeof(struct xfrm_userpolicy_type));
+#endif
        len += NLMSG_SPACE(headlen);
 
        skb = alloc_skb(len, GFP_ATOMIC);
@@ -2106,10 +2116,12 @@ static int xfrm_notify_policy_flush(struct km_event *c)
        struct nlmsghdr *nlh;
        struct sk_buff *skb;
        unsigned char *b;
+       int len = 0;
 #ifdef CONFIG_XFRM_SUB_POLICY
        struct xfrm_userpolicy_type upt;
+       len += RTA_SPACE(sizeof(struct xfrm_userpolicy_type));
 #endif
-       int len = NLMSG_LENGTH(0);
+       len += NLMSG_LENGTH(0);
 
        skb = alloc_skb(len, GFP_ATOMIC);
        if (skb == NULL)
index 331c079f029b7c516fe4c32510d445defc3a6c53..4c723fd18648daba8926e8b73e727b45c90fc1d9 100644 (file)
@@ -158,7 +158,7 @@ unknown_option() {
 }
 
 list_header() {
-       echo "deps_initramfs := \\"
+       :
 }
 
 header() {
@@ -227,6 +227,7 @@ arg="$1"
 case "$arg" in
        "-l")   # files included in initramfs - used by kbuild
                dep_list="list_"
+               echo "deps_initramfs := \\"
                shift
                ;;
        "-o")   # generate gzipped cpio image named $1
index ebc781b493d7c8a86ca7d95bae7f943bbb5430a9..d54440fc166cbd03bc8c16c9c91667fd9631761e 100644 (file)
@@ -221,16 +221,14 @@ static void init_dialog_colors(void)
  */
 static void color_setup(const char *theme)
 {
-       if (set_theme(theme)) {
-               if (has_colors()) {     /* Terminal supports color? */
-                       start_color();
-                       init_dialog_colors();
-               }
-       }
-       else
-       {
+       int use_color;
+
+       use_color = set_theme(theme);
+       if (use_color && has_colors()) {
+               start_color();
+               init_dialog_colors();
+       } else
                set_mono_theme();
-       }
 }
 
 /*
index 393f3749f3306c3d5584db7e09e24f0823e7fc11..338bdea9654177316a9044c86a9667039fb6845e 100644 (file)
@@ -1259,6 +1259,7 @@ void ConfigSearchWindow::search(void)
  * Construct the complete config widget
  */
 ConfigMainWindow::ConfigMainWindow(void)
+       : searchWindow(0)
 {
        QMenuBar* menu;
        bool ok;
index 8ab5679a37a30324b9b61a61c159dd4978512447..28ee187ed2249423e17ad4542e9017b458ffe1ba 100644 (file)
@@ -1754,7 +1754,8 @@ static inline void flush_unauthorized_files(struct files_struct * files)
                                                get_file(devnull);
                                        } else {
                                                devnull = dentry_open(dget(selinux_null), mntget(selinuxfs_mount), O_RDWR);
-                                               if (!devnull) {
+                                               if (IS_ERR(devnull)) {
+                                                       devnull = NULL;
                                                        put_unused_fd(fd);
                                                        fput(file);
                                                        continue;
index e0d791a9845246b907fde876d441b46852c4268f..95949b6806acbdf9580b23b10e5e9cac8722df3e 100644 (file)
@@ -64,11 +64,11 @@ source "sound/arm/Kconfig"
 
 source "sound/mips/Kconfig"
 
-# the following will depenend on the order of config.
+# the following will depend on the order of config.
 # here assuming USB is defined before ALSA
 source "sound/usb/Kconfig"
 
-# the following will depenend on the order of config.
+# the following will depend on the order of config.
 # here assuming PCMCIA is defined before ALSA
 source "sound/pcmcia/Kconfig"
 
index 2ef55a17917c64999740b02780e035b2457429c2..9de8485ba3f591cf5d29ba6c416773683f4191f3 100644 (file)
@@ -514,9 +514,15 @@ static int tas_snd_capture_source_put(struct snd_kcontrol *kcontrol,
        mutex_lock(&tas->mtx);
        oldacr = tas->acr;
 
-       tas->acr &= ~TAS_ACR_INPUT_B;
+       /*
+        * Despite what the data sheet says in one place, the
+        * TAS_ACR_B_MONAUREAL bit forces mono output even when
+        * input A (line in) is selected.
+        */
+       tas->acr &= ~(TAS_ACR_INPUT_B | TAS_ACR_B_MONAUREAL);
        if (ucontrol->value.enumerated.item[0])
-               tas->acr |= TAS_ACR_INPUT_B;
+               tas->acr |= TAS_ACR_INPUT_B | TAS_ACR_B_MONAUREAL |
+                     TAS_ACR_B_MON_SEL_RIGHT;
        if (oldacr == tas->acr) {
                mutex_unlock(&tas->mtx);
                return 0;
@@ -686,8 +692,7 @@ static int tas_reset_init(struct tas *tas)
        if (tas_write_reg(tas, TAS_REG_MCS, 1, &tmp))
                goto outerr;
 
-       tas->acr |= TAS_ACR_ANALOG_PDOWN | TAS_ACR_B_MONAUREAL |
-               TAS_ACR_B_MON_SEL_RIGHT;
+       tas->acr |= TAS_ACR_ANALOG_PDOWN;
        if (tas_write_reg(tas, TAS_REG_ACR, 1, &tas->acr))
                goto outerr;
 
index 505b23ec4058c29a4407d8cd29c78e0c3509bdb1..e0821eb3d8517b2f258bb0353ebe0c10418f8b73 100644 (file)
@@ -2359,7 +2359,8 @@ static int snd_pcm_oss_release(struct inode *inode, struct file *file)
                substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE];
        snd_assert(substream != NULL, return -ENXIO);
        pcm = substream->pcm;
-       snd_pcm_oss_sync(pcm_oss_file);
+       if (!pcm->card->shutdown)
+               snd_pcm_oss_sync(pcm_oss_file);
        mutex_lock(&pcm->open_mutex);
        snd_pcm_oss_release_file(pcm_oss_file);
        mutex_unlock(&pcm->open_mutex);
index 37b4b10850ae0358cdbbf654fffd6754aa5a11d4..66e24b5da4694dbaa40529a98b14743520aa41ef 100644 (file)
@@ -1310,7 +1310,8 @@ static int snd_pcm_pre_prepare(struct snd_pcm_substream *substream,
                               int f_flags)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
-       if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
+       if (runtime->status->state == SNDRV_PCM_STATE_OPEN ||
+           runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED)
                return -EBADFD;
        if (snd_pcm_running(substream))
                return -EBUSY;
@@ -1568,7 +1569,8 @@ static int snd_pcm_drop(struct snd_pcm_substream *substream)
        runtime = substream->runtime;
        card = substream->pcm->card;
 
-       if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
+       if (runtime->status->state == SNDRV_PCM_STATE_OPEN ||
+           runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED)
                return -EBADFD;
 
        snd_power_lock(card);
index 412dd62b654ec2907b3108df5415b0697032e29c..9f7b32e1ccdeb29a7122aaea0f485a0dafa144c5 100644 (file)
 
 #include <sound/driver.h>
 #include <linux/init.h>
-#include <linux/time.h>
-#include <linux/threads.h>
 #include <linux/interrupt.h>
 #include <linux/moduleparam.h>
 #include <sound/core.h>
 #include <sound/timer.h>
-#include <sound/info.h>
 
 #if defined(CONFIG_RTC) || defined(CONFIG_RTC_MODULE)
 
@@ -50,7 +47,9 @@ static int rtctimer_stop(struct snd_timer *t);
  * The hardware dependent description for this timer.
  */
 static struct snd_timer_hardware rtc_hw = {
-       .flags =        SNDRV_TIMER_HW_FIRST|SNDRV_TIMER_HW_AUTO,
+       .flags =        SNDRV_TIMER_HW_AUTO |
+                       SNDRV_TIMER_HW_FIRST |
+                       SNDRV_TIMER_HW_TASKLET,
        .ticks =        100000000L,             /* FIXME: XXX */
        .open =         rtctimer_open,
        .close =        rtctimer_close,
@@ -60,6 +59,7 @@ static struct snd_timer_hardware rtc_hw = {
 
 static int rtctimer_freq = RTC_FREQ;           /* frequency */
 static struct snd_timer *rtctimer;
+static struct tasklet_struct rtc_tasklet;
 static rtc_task_t rtc_task;
 
 
@@ -81,6 +81,7 @@ rtctimer_close(struct snd_timer *t)
        rtc_task_t *rtc = t->private_data;
        if (rtc) {
                rtc_unregister(rtc);
+               tasklet_kill(&rtc_tasklet);
                t->private_data = NULL;
        }
        return 0;
@@ -105,12 +106,17 @@ rtctimer_stop(struct snd_timer *timer)
        return 0;
 }
 
+static void rtctimer_tasklet(unsigned long data)
+{
+       snd_timer_interrupt((struct snd_timer *)data, 1);
+}
+
 /*
  * interrupt
  */
 static void rtctimer_interrupt(void *private_data)
 {
-       snd_timer_interrupt(private_data, 1);
+       tasklet_hi_schedule(private_data);
 }
 
 
@@ -139,9 +145,11 @@ static int __init rtctimer_init(void)
        timer->hw = rtc_hw;
        timer->hw.resolution = NANO_SEC / rtctimer_freq;
 
+       tasklet_init(&rtc_tasklet, rtctimer_tasklet, (unsigned long)timer);
+
        /* set up RTC callback */
        rtc_task.func = rtctimer_interrupt;
-       rtc_task.private_data = timer;
+       rtc_task.private_data = &rtc_tasklet;
 
        err = snd_timer_global_register(timer);
        if (err < 0) {
index 6e3c41f530e6ee3106cafd6b87c5a5cf4989f13a..b1c5d8286e403c595f81b9f4b529797c4fd05da6 100644 (file)
@@ -779,7 +779,7 @@ static unsigned int cs_set_adc_rate(struct cs_state *state, unsigned int rate)
                rate = 48000 / 9;
 
        /*
-        *  We can not capture at at rate greater than the Input Rate (48000).
+        *  We cannot capture at at rate greater than the Input Rate (48000).
         *  Return an error if an attempt is made to stray outside that limit.
         */
        if (rate > 48000)
@@ -4754,8 +4754,8 @@ static int cs_hardware_init(struct cs_card *card)
        mdelay(5 * cs_laptop_wait);             /* Shouldnt be needed ?? */
        
 /*
-* If we are resuming under 2.2.x then we can not schedule a timeout.
-* so, just spin the CPU.
+* If we are resuming under 2.2.x then we cannot schedule a timeout,
+* so just spin the CPU.
 */
        if (card->pm.flags & CS46XX_PM_IDLE) {
        /*
index 8058059c56e9b70ebc716196d996b45a0ea0af6b..8bc4ffa6220db1c9d629fef93db74d3fced0bd47 100644 (file)
@@ -956,6 +956,7 @@ static struct snd_emu_chip_details emu_chip_details[] = {
         .ca0151_chip = 1,
         .spk71 = 1,
         .spdif_bug = 1,
+        .adc_1361t = 1,  /* 24 bit capture instead of 16bit. Fixes ALSA bug#324 */
         .ac97_chip = 1} ,
        {.vendor = 0x1102, .device = 0x0004, .revision = 0x04,
         .driver = "Audigy2", .name = "Audigy 2 [Unknown]",
index 0d728c6f697c47c001b7672bb146757ffe3ec1a6..fb961448db199701271a4688840b8a1e300f983f 100644 (file)
@@ -5870,7 +5870,7 @@ static struct hda_board_config alc262_cfg_tbl[] = {
        { .pci_subvendor = 0x10cf, .pci_subdevice = 0x1397,
          .config = ALC262_FUJITSU },
        { .modelname = "hp-bpc", .config = ALC262_HP_BPC },
-       { .pci_subvendor = 0x103c, .pci_subdevice = 0x208c,
+       { .pci_subvendor = 0x103c, .pci_subdevice = 0x280c,
          .config = ALC262_HP_BPC }, /* xw4400 */
        { .pci_subvendor = 0x103c, .pci_subdevice = 0x3014,
          .config = ALC262_HP_BPC }, /* xw6400 */
index 731b7b97ee711ebaec26969519f5488ea2f8eaa3..fe51ef3e49d297a08622109d902f15c4b436ab0f 100644 (file)
@@ -336,6 +336,13 @@ static struct hda_board_config stac9200_cfg_tbl[] = {
          .pci_subvendor = PCI_VENDOR_ID_INTEL,
          .pci_subdevice = 0x2668,      /* DFI LanParty */
          .config = STAC_REF },
+       /* Dell laptops have BIOS problem */
+       { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01b5,
+         .config = STAC_REF }, /* Dell Inspiron 630m */
+       { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01c2,
+         .config = STAC_REF }, /* Dell Latitude D620 */
+       { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01cb,
+         .config = STAC_REF }, /* Dell Latitude 120L */
        {} /* terminator */
 };
 
@@ -591,13 +598,6 @@ static struct hda_board_config stac9205_cfg_tbl[] = {
          .pci_subvendor = PCI_VENDOR_ID_INTEL,
          .pci_subdevice = 0x2668,      /* DFI LanParty */
          .config = STAC_REF },         /* SigmaTel reference board */
-       /* Dell laptops have BIOS problem */
-       { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01b5,
-         .config = STAC_REF }, /* Dell Inspiron 630m */
-       { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01c2,
-         .config = STAC_REF }, /* Dell Latitude D620 */
-       { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01cb,
-         .config = STAC_REF }, /* Dell Latitude 120L */
        {} /* terminator */
 };
 
index c82b01c7ad3ad9871f5fe619db8929fb596cbc51..67202b9eeb77c09bf4c3d10fb372c5582e92394c 100644 (file)
@@ -1469,7 +1469,8 @@ static int snd_usb_hw_free(struct snd_pcm_substream *substream)
        subs->cur_audiofmt = NULL;
        subs->cur_rate = 0;
        subs->period_bytes = 0;
-       release_substream_urbs(subs, 0);
+       if (!subs->stream->chip->shutdown)
+               release_substream_urbs(subs, 0);
        return snd_pcm_free_vmalloc_buffer(substream);
 }
 
index e338e7bedb2944af690f75597dd34d51d4d5cb02..382702ad663bea2fd72ba169556c147693a92b4a 100644 (file)
@@ -20,7 +20,7 @@ $(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE
 hostprogs-y := gen_init_cpio
 initramfs   := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh
 ramfs-input := $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)), \
-                    $(CONFIG_INITRAMFS_SOURCE),-d)
+                       $(shell echo $(CONFIG_INITRAMFS_SOURCE)),-d)
 ramfs-args  := \
         $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
         $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID))