diff options
-rw-r--r-- | Documentation/DocBook/Makefile | 7 | ||||
-rw-r--r-- | Documentation/DocBook/procfs_example.c | 4 | ||||
-rw-r--r-- | Documentation/Makefile | 3 | ||||
-rw-r--r-- | Documentation/accounting/Makefile | 10 | ||||
-rw-r--r-- | Documentation/accounting/getdelays.c | 25 | ||||
-rw-r--r-- | Documentation/auxdisplay/Makefile | 10 | ||||
-rw-r--r-- | Documentation/connector/Makefile | 11 | ||||
-rw-r--r-- | Documentation/cpu-hotplug.txt | 5 | ||||
-rw-r--r-- | Documentation/feature-removal-schedule.txt | 9 | ||||
-rw-r--r-- | Documentation/filesystems/configfs/Makefile | 3 | ||||
-rw-r--r-- | Documentation/filesystems/quota.txt | 22 | ||||
-rw-r--r-- | Documentation/ia64/Makefile | 8 | ||||
-rw-r--r-- | Documentation/lguest/lguest.c | 23 | ||||
-rw-r--r-- | Documentation/networking/Makefile | 8 | ||||
-rw-r--r-- | Documentation/networking/ifenslave.c | 2 | ||||
-rw-r--r-- | Documentation/pcmcia/Makefile | 10 | ||||
-rw-r--r-- | Documentation/pcmcia/crc32hash.c | 2 | ||||
-rw-r--r-- | Documentation/spi/Makefile | 11 | ||||
-rw-r--r-- | Documentation/video4linux/Makefile | 8 | ||||
-rw-r--r-- | Documentation/vm/Makefile | 8 | ||||
-rw-r--r-- | Documentation/watchdog/src/Makefile | 8 | ||||
-rw-r--r-- | MAINTAINERS | 4 | ||||
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | arch/h8300/include/asm/Kbuild (renamed from include/asm-h8300/Kbuild) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/a.out.h (renamed from include/asm-h8300/a.out.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/atomic.h (renamed from include/asm-h8300/atomic.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/auxvec.h (renamed from include/asm-h8300/auxvec.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/bitops.h (renamed from include/asm-h8300/bitops.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/bootinfo.h (renamed from include/asm-h8300/bootinfo.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/bug.h (renamed from include/asm-h8300/bug.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/bugs.h (renamed from include/asm-h8300/bugs.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/byteorder.h (renamed from include/asm-h8300/byteorder.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/cache.h (renamed from include/asm-h8300/cache.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/cachectl.h (renamed from include/asm-h8300/cachectl.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/cacheflush.h (renamed from include/asm-h8300/cacheflush.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/checksum.h (renamed from include/asm-h8300/checksum.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/cputime.h (renamed from include/asm-h8300/cputime.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/current.h (renamed from include/asm-h8300/current.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/dbg.h (renamed from include/asm-h8300/dbg.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/delay.h (renamed from include/asm-h8300/delay.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/device.h (renamed from include/asm-h8300/device.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/div64.h (renamed from include/asm-h8300/div64.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/dma.h (renamed from include/asm-h8300/dma.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/elf.h (renamed from include/asm-h8300/elf.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/emergency-restart.h (renamed from include/asm-h8300/emergency-restart.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/errno.h (renamed from include/asm-h8300/errno.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/fb.h (renamed from include/asm-h8300/fb.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/fcntl.h (renamed from include/asm-h8300/fcntl.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/flat.h (renamed from include/asm-h8300/flat.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/fpu.h (renamed from include/asm-h8300/fpu.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/futex.h (renamed from include/asm-h8300/futex.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/gpio.h (renamed from include/asm-h8300/gpio.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/hardirq.h (renamed from include/asm-h8300/hardirq.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/hw_irq.h (renamed from include/asm-h8300/hw_irq.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/io.h (renamed from include/asm-h8300/io.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/ioctl.h (renamed from include/asm-h8300/ioctl.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/ioctls.h (renamed from include/asm-h8300/ioctls.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/ipcbuf.h (renamed from include/asm-h8300/ipcbuf.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/irq.h (renamed from include/asm-h8300/irq.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/irq_regs.h (renamed from include/asm-h8300/irq_regs.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/kdebug.h (renamed from include/asm-h8300/kdebug.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/kmap_types.h (renamed from include/asm-h8300/kmap_types.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/linkage.h (renamed from include/asm-h8300/linkage.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/local.h (renamed from include/asm-h8300/local.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/mc146818rtc.h (renamed from include/asm-h8300/mc146818rtc.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/md.h (renamed from include/asm-h8300/md.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/mman.h (renamed from include/asm-h8300/mman.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/mmu.h (renamed from include/asm-h8300/mmu.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/mmu_context.h (renamed from include/asm-h8300/mmu_context.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/module.h (renamed from include/asm-h8300/module.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/msgbuf.h (renamed from include/asm-h8300/msgbuf.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/mutex.h (renamed from include/asm-h8300/mutex.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/page.h (renamed from include/asm-h8300/page.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/page_offset.h (renamed from include/asm-h8300/page_offset.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/param.h (renamed from include/asm-h8300/param.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/pci.h (renamed from include/asm-h8300/pci.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/percpu.h (renamed from include/asm-h8300/percpu.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/pgalloc.h (renamed from include/asm-h8300/pgalloc.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/pgtable.h (renamed from include/asm-h8300/pgtable.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/poll.h (renamed from include/asm-h8300/poll.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/posix_types.h (renamed from include/asm-h8300/posix_types.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/processor.h (renamed from include/asm-h8300/processor.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/ptrace.h (renamed from include/asm-h8300/ptrace.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/regs267x.h (renamed from include/asm-h8300/regs267x.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/regs306x.h (renamed from include/asm-h8300/regs306x.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/resource.h (renamed from include/asm-h8300/resource.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/scatterlist.h (renamed from include/asm-h8300/scatterlist.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/sections.h (renamed from include/asm-h8300/sections.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/segment.h (renamed from include/asm-h8300/segment.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/sembuf.h (renamed from include/asm-h8300/sembuf.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/setup.h (renamed from include/asm-h8300/setup.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/sh_bios.h (renamed from include/asm-h8300/sh_bios.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/shm.h (renamed from include/asm-h8300/shm.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/shmbuf.h (renamed from include/asm-h8300/shmbuf.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/shmparam.h (renamed from include/asm-h8300/shmparam.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/sigcontext.h (renamed from include/asm-h8300/sigcontext.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/siginfo.h (renamed from include/asm-h8300/siginfo.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/signal.h (renamed from include/asm-h8300/signal.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/smp.h (renamed from include/asm-h8300/smp.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/socket.h (renamed from include/asm-h8300/socket.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/sockios.h (renamed from include/asm-h8300/sockios.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/spinlock.h (renamed from include/asm-h8300/spinlock.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/stat.h (renamed from include/asm-h8300/stat.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/statfs.h (renamed from include/asm-h8300/statfs.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/string.h (renamed from include/asm-h8300/string.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/system.h (renamed from include/asm-h8300/system.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/target_time.h (renamed from include/asm-h8300/target_time.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/termbits.h (renamed from include/asm-h8300/termbits.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/termios.h (renamed from include/asm-h8300/termios.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/thread_info.h (renamed from include/asm-h8300/thread_info.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/timex.h (renamed from include/asm-h8300/timex.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/tlb.h (renamed from include/asm-h8300/tlb.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/tlbflush.h (renamed from include/asm-h8300/tlbflush.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/topology.h (renamed from include/asm-h8300/topology.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/traps.h (renamed from include/asm-h8300/traps.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/types.h (renamed from include/asm-h8300/types.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/uaccess.h (renamed from include/asm-h8300/uaccess.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/ucontext.h (renamed from include/asm-h8300/ucontext.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/unaligned.h (renamed from include/asm-h8300/unaligned.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/unistd.h (renamed from include/asm-h8300/unistd.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/user.h (renamed from include/asm-h8300/user.h) | 0 | ||||
-rw-r--r-- | arch/h8300/include/asm/virtconvert.h (renamed from include/asm-h8300/virtconvert.h) | 0 | ||||
-rw-r--r-- | arch/h8300/mm/init.c | 9 | ||||
-rw-r--r-- | arch/ia64/include/asm/sal.h | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/head.S | 26 | ||||
-rw-r--r-- | arch/ia64/kernel/setup.c | 18 | ||||
-rw-r--r-- | arch/ia64/kernel/smpboot.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 3 | ||||
-rw-r--r-- | arch/ia64/mm/contig.c | 10 | ||||
-rw-r--r-- | arch/ia64/mm/discontig.c | 6 | ||||
-rw-r--r-- | arch/powerpc/Kconfig | 3 | ||||
-rw-r--r-- | arch/x86/Kconfig | 1 | ||||
-rw-r--r-- | arch/x86/kernel/apic_32.c | 14 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/bugs.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/io_apic_32.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/io_apic_64.c | 25 | ||||
-rw-r--r-- | arch/x86/kernel/mpparse.c | 11 | ||||
-rw-r--r-- | arch/x86/kernel/pci-calgary_64.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/setup.c | 22 | ||||
-rw-r--r-- | arch/x86/kernel/smpboot.c | 22 | ||||
-rw-r--r-- | arch/x86/kernel/vmi_32.c | 3 | ||||
-rw-r--r-- | arch/x86/mm/Makefile | 3 | ||||
-rw-r--r-- | arch/x86/mm/pgtable.c | 3 | ||||
-rw-r--r-- | drivers/char/agp/agp.h | 3 | ||||
-rw-r--r-- | drivers/char/agp/ali-agp.c | 10 | ||||
-rw-r--r-- | drivers/char/agp/amd-k7-agp.c | 10 | ||||
-rw-r--r-- | drivers/char/agp/amd64-agp.c | 51 | ||||
-rw-r--r-- | drivers/char/agp/ati-agp.c | 7 | ||||
-rw-r--r-- | drivers/char/agp/backend.c | 28 | ||||
-rw-r--r-- | drivers/char/agp/generic.c | 41 | ||||
-rw-r--r-- | drivers/char/agp/intel-agp.c | 83 | ||||
-rw-r--r-- | drivers/char/agp/isoch.c | 37 | ||||
-rw-r--r-- | drivers/char/agp/sis-agp.c | 17 | ||||
-rw-r--r-- | drivers/char/agp/sworks-agp.c | 25 | ||||
-rw-r--r-- | drivers/char/agp/uninorth-agp.c | 32 | ||||
-rw-r--r-- | drivers/char/hvc_console.c | 5 | ||||
-rw-r--r-- | drivers/char/rtc.c | 1 | ||||
-rw-r--r-- | drivers/cpuidle/sysfs.c | 29 | ||||
-rw-r--r-- | drivers/firmware/memmap.c | 61 | ||||
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_classes.h | 9 | ||||
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_qes.h | 1 | ||||
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_qp.c | 48 | ||||
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_reqs.c | 60 | ||||
-rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_cm.c | 17 | ||||
-rw-r--r-- | drivers/lguest/page_tables.c | 25 | ||||
-rw-r--r-- | drivers/misc/sgi-gru/grutables.h | 2 | ||||
-rw-r--r-- | drivers/rtc/rtc-dev.c | 12 | ||||
-rw-r--r-- | drivers/rtc/rtc-isl1208.c | 2 | ||||
-rw-r--r-- | drivers/scsi/device_handler/scsi_dh_alua.c | 2 | ||||
-rw-r--r-- | drivers/scsi/device_handler/scsi_dh_emc.c | 2 | ||||
-rw-r--r-- | drivers/scsi/device_handler/scsi_dh_hp_sw.c | 2 | ||||
-rw-r--r-- | drivers/scsi/device_handler/scsi_dh_rdac.c | 2 | ||||
-rw-r--r-- | drivers/usb/misc/isight_firmware.c | 4 | ||||
-rw-r--r-- | drivers/video/atmel_lcdfb.c | 13 | ||||
-rw-r--r-- | drivers/video/aty/radeon_accel.c | 8 | ||||
-rw-r--r-- | drivers/video/console/fbcon.c | 4 | ||||
-rw-r--r-- | drivers/video/matrox/i2c-matroxfb.c | 21 | ||||
-rw-r--r-- | drivers/video/matrox/matroxfb_maven.c | 97 | ||||
-rw-r--r-- | drivers/watchdog/Kconfig | 5 | ||||
-rw-r--r-- | fs/dlm/config.c | 203 | ||||
-rw-r--r-- | fs/dlm/user.c | 10 | ||||
-rw-r--r-- | fs/eventpoll.c | 5 | ||||
-rw-r--r-- | fs/jbd/transaction.c | 4 | ||||
-rw-r--r-- | fs/jbd2/transaction.c | 4 | ||||
-rw-r--r-- | fs/lockd/svc4proc.c | 4 | ||||
-rw-r--r-- | fs/lockd/svcproc.c | 4 | ||||
-rw-r--r-- | fs/nfsd/export.c | 6 | ||||
-rw-r--r-- | fs/reiserfs/super.c | 1 | ||||
-rw-r--r-- | fs/seq_file.c | 14 | ||||
-rw-r--r-- | include/asm-generic/ioctl.h | 4 | ||||
-rw-r--r-- | include/asm-x86/efi.h | 2 | ||||
-rw-r--r-- | include/asm-x86/hw_irq.h | 12 | ||||
-rw-r--r-- | include/asm-x86/irq_vectors.h | 10 | ||||
-rw-r--r-- | include/linux/Kbuild | 1 | ||||
-rw-r--r-- | include/linux/agp_backend.h | 5 | ||||
-rw-r--r-- | include/linux/bitmap.h | 1 | ||||
-rw-r--r-- | include/linux/bootmem.h | 4 | ||||
-rw-r--r-- | include/linux/byteorder.h | 372 | ||||
-rw-r--r-- | include/linux/firmware-map.h | 26 | ||||
-rw-r--r-- | include/linux/i2c-id.h | 2 | ||||
-rw-r--r-- | include/linux/init.h | 1 | ||||
-rw-r--r-- | include/linux/kernel.h | 14 | ||||
-rw-r--r-- | include/linux/lockdep.h | 70 | ||||
-rw-r--r-- | include/linux/mm.h | 20 | ||||
-rw-r--r-- | include/linux/rcuclassic.h | 2 | ||||
-rw-r--r-- | include/linux/sched.h | 31 | ||||
-rw-r--r-- | include/linux/seq_file.h | 12 | ||||
-rw-r--r-- | include/linux/spinlock.h | 6 | ||||
-rw-r--r-- | include/linux/spinlock_api_smp.h | 2 | ||||
-rw-r--r-- | include/linux/swab.h | 309 | ||||
-rw-r--r-- | include/video/atmel_lcdc.h | 1 | ||||
-rw-r--r-- | include/video/radeon.h | 4 | ||||
-rw-r--r-- | init/main.c | 6 | ||||
-rw-r--r-- | kernel/Kconfig.hz | 2 | ||||
-rw-r--r-- | kernel/cpu.c | 7 | ||||
-rw-r--r-- | kernel/irq/proc.c | 96 | ||||
-rw-r--r-- | kernel/lockdep.c | 295 | ||||
-rw-r--r-- | kernel/lockdep_internals.h | 6 | ||||
-rw-r--r-- | kernel/lockdep_proc.c | 37 | ||||
-rw-r--r-- | kernel/module.c | 2 | ||||
-rw-r--r-- | kernel/posix-timers.c | 19 | ||||
-rw-r--r-- | kernel/sched.c | 23 | ||||
-rw-r--r-- | kernel/sched_clock.c | 178 | ||||
-rw-r--r-- | kernel/sched_fair.c | 21 | ||||
-rw-r--r-- | kernel/sched_rt.c | 8 | ||||
-rw-r--r-- | kernel/signal.c | 1 | ||||
-rw-r--r-- | kernel/smp.c | 58 | ||||
-rw-r--r-- | kernel/spinlock.c | 11 | ||||
-rw-r--r-- | kernel/stop_machine.c | 1 | ||||
-rw-r--r-- | kernel/time/tick-sched.c | 2 | ||||
-rw-r--r-- | kernel/workqueue.c | 24 | ||||
-rw-r--r-- | lib/Kconfig.debug | 9 | ||||
-rw-r--r-- | lib/bitmap.c | 11 | ||||
-rw-r--r-- | lib/debug_locks.c | 2 | ||||
-rw-r--r-- | lib/vsprintf.c | 2 | ||||
-rw-r--r-- | mm/Kconfig | 3 | ||||
-rw-r--r-- | mm/hugetlb.c | 62 | ||||
-rw-r--r-- | mm/memcontrol.c | 2 | ||||
-rw-r--r-- | mm/mempolicy.c | 1 | ||||
-rw-r--r-- | mm/mmap.c | 20 | ||||
-rw-r--r-- | mm/page_alloc.c | 2 | ||||
-rw-r--r-- | mm/sparse.c | 1 | ||||
-rw-r--r-- | mm/util.c | 15 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 4 | ||||
-rw-r--r-- | sound/soc/codecs/wm8750.c | 3 | ||||
-rw-r--r-- | sound/soc/pxa/spitz.c | 2 |
246 files changed, 2271 insertions, 1012 deletions
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 1d1b34500b69..1615350b7b53 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
@@ -102,6 +102,13 @@ C-procfs-example = procfs_example.xml | |||
102 | C-procfs-example2 = $(addprefix $(obj)/,$(C-procfs-example)) | 102 | C-procfs-example2 = $(addprefix $(obj)/,$(C-procfs-example)) |
103 | $(obj)/procfs-guide.xml: $(C-procfs-example2) | 103 | $(obj)/procfs-guide.xml: $(C-procfs-example2) |
104 | 104 | ||
105 | # List of programs to build | ||
106 | ##oops, this is a kernel module::hostprogs-y := procfs_example | ||
107 | obj-m += procfs_example.o | ||
108 | |||
109 | # Tell kbuild to always build the programs | ||
110 | always := $(hostprogs-y) | ||
111 | |||
105 | notfoundtemplate = echo "*** You have to install docbook-utils or xmlto ***"; \ | 112 | notfoundtemplate = echo "*** You have to install docbook-utils or xmlto ***"; \ |
106 | exit 1 | 113 | exit 1 |
107 | db2xtemplate = db2TYPE -o $(dir $@) $< | 114 | db2xtemplate = db2TYPE -o $(dir $@) $< |
diff --git a/Documentation/DocBook/procfs_example.c b/Documentation/DocBook/procfs_example.c index 7064084c1c5e..2f3de0fb8365 100644 --- a/Documentation/DocBook/procfs_example.c +++ b/Documentation/DocBook/procfs_example.c | |||
@@ -189,8 +189,6 @@ static int __init init_procfs_example(void) | |||
189 | return 0; | 189 | return 0; |
190 | 190 | ||
191 | no_symlink: | 191 | no_symlink: |
192 | remove_proc_entry("tty", example_dir); | ||
193 | no_tty: | ||
194 | remove_proc_entry("bar", example_dir); | 192 | remove_proc_entry("bar", example_dir); |
195 | no_bar: | 193 | no_bar: |
196 | remove_proc_entry("foo", example_dir); | 194 | remove_proc_entry("foo", example_dir); |
@@ -206,7 +204,6 @@ out: | |||
206 | static void __exit cleanup_procfs_example(void) | 204 | static void __exit cleanup_procfs_example(void) |
207 | { | 205 | { |
208 | remove_proc_entry("jiffies_too", example_dir); | 206 | remove_proc_entry("jiffies_too", example_dir); |
209 | remove_proc_entry("tty", example_dir); | ||
210 | remove_proc_entry("bar", example_dir); | 207 | remove_proc_entry("bar", example_dir); |
211 | remove_proc_entry("foo", example_dir); | 208 | remove_proc_entry("foo", example_dir); |
212 | remove_proc_entry("jiffies", example_dir); | 209 | remove_proc_entry("jiffies", example_dir); |
@@ -222,3 +219,4 @@ module_exit(cleanup_procfs_example); | |||
222 | 219 | ||
223 | MODULE_AUTHOR("Erik Mouw"); | 220 | MODULE_AUTHOR("Erik Mouw"); |
224 | MODULE_DESCRIPTION("procfs examples"); | 221 | MODULE_DESCRIPTION("procfs examples"); |
222 | MODULE_LICENSE("GPL"); | ||
diff --git a/Documentation/Makefile b/Documentation/Makefile new file mode 100644 index 000000000000..94b945733534 --- /dev/null +++ b/Documentation/Makefile | |||
@@ -0,0 +1,3 @@ | |||
1 | obj-m := DocBook/ accounting/ auxdisplay/ connector/ \ | ||
2 | filesystems/configfs/ ia64/ networking/ \ | ||
3 | pcmcia/ spi/ video4linux/ vm/ watchdog/src/ | ||
diff --git a/Documentation/accounting/Makefile b/Documentation/accounting/Makefile new file mode 100644 index 000000000000..31929eb875b1 --- /dev/null +++ b/Documentation/accounting/Makefile | |||
@@ -0,0 +1,10 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := getdelays | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
9 | |||
10 | HOSTCFLAGS_getdelays.o += -I$(objtree)/usr/include | ||
diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c index 3f7755f3963f..cc49400b4af8 100644 --- a/Documentation/accounting/getdelays.c +++ b/Documentation/accounting/getdelays.c | |||
@@ -201,13 +201,19 @@ void print_delayacct(struct taskstats *t) | |||
201 | "RECLAIM %12s%15s\n" | 201 | "RECLAIM %12s%15s\n" |
202 | " %15llu%15llu\n", | 202 | " %15llu%15llu\n", |
203 | "count", "real total", "virtual total", "delay total", | 203 | "count", "real total", "virtual total", "delay total", |
204 | t->cpu_count, t->cpu_run_real_total, t->cpu_run_virtual_total, | 204 | (unsigned long long)t->cpu_count, |
205 | t->cpu_delay_total, | 205 | (unsigned long long)t->cpu_run_real_total, |
206 | (unsigned long long)t->cpu_run_virtual_total, | ||
207 | (unsigned long long)t->cpu_delay_total, | ||
206 | "count", "delay total", | 208 | "count", "delay total", |
207 | t->blkio_count, t->blkio_delay_total, | 209 | (unsigned long long)t->blkio_count, |
208 | "count", "delay total", t->swapin_count, t->swapin_delay_total, | 210 | (unsigned long long)t->blkio_delay_total, |
209 | "count", "delay total", | 211 | "count", "delay total", |
210 | t->freepages_count, t->freepages_delay_total); | 212 | (unsigned long long)t->swapin_count, |
213 | (unsigned long long)t->swapin_delay_total, | ||
214 | "count", "delay total", | ||
215 | (unsigned long long)t->freepages_count, | ||
216 | (unsigned long long)t->freepages_delay_total); | ||
211 | } | 217 | } |
212 | 218 | ||
213 | void task_context_switch_counts(struct taskstats *t) | 219 | void task_context_switch_counts(struct taskstats *t) |
@@ -215,14 +221,17 @@ void task_context_switch_counts(struct taskstats *t) | |||
215 | printf("\n\nTask %15s%15s\n" | 221 | printf("\n\nTask %15s%15s\n" |
216 | " %15llu%15llu\n", | 222 | " %15llu%15llu\n", |
217 | "voluntary", "nonvoluntary", | 223 | "voluntary", "nonvoluntary", |
218 | t->nvcsw, t->nivcsw); | 224 | (unsigned long long)t->nvcsw, (unsigned long long)t->nivcsw); |
219 | } | 225 | } |
220 | 226 | ||
221 | void print_cgroupstats(struct cgroupstats *c) | 227 | void print_cgroupstats(struct cgroupstats *c) |
222 | { | 228 | { |
223 | printf("sleeping %llu, blocked %llu, running %llu, stopped %llu, " | 229 | printf("sleeping %llu, blocked %llu, running %llu, stopped %llu, " |
224 | "uninterruptible %llu\n", c->nr_sleeping, c->nr_io_wait, | 230 | "uninterruptible %llu\n", (unsigned long long)c->nr_sleeping, |
225 | c->nr_running, c->nr_stopped, c->nr_uninterruptible); | 231 | (unsigned long long)c->nr_io_wait, |
232 | (unsigned long long)c->nr_running, | ||
233 | (unsigned long long)c->nr_stopped, | ||
234 | (unsigned long long)c->nr_uninterruptible); | ||
226 | } | 235 | } |
227 | 236 | ||
228 | 237 | ||
diff --git a/Documentation/auxdisplay/Makefile b/Documentation/auxdisplay/Makefile new file mode 100644 index 000000000000..51fe23332c81 --- /dev/null +++ b/Documentation/auxdisplay/Makefile | |||
@@ -0,0 +1,10 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := cfag12864b-example | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
9 | |||
10 | HOSTCFLAGS_cfag12864b-example.o += -I$(objtree)/usr/include | ||
diff --git a/Documentation/connector/Makefile b/Documentation/connector/Makefile new file mode 100644 index 000000000000..8df1a7285a06 --- /dev/null +++ b/Documentation/connector/Makefile | |||
@@ -0,0 +1,11 @@ | |||
1 | ifneq ($(CONFIG_CONNECTOR),) | ||
2 | obj-m += cn_test.o | ||
3 | endif | ||
4 | |||
5 | # List of programs to build | ||
6 | hostprogs-y := ucon | ||
7 | |||
8 | # Tell kbuild to always build the programs | ||
9 | always := $(hostprogs-y) | ||
10 | |||
11 | HOSTCFLAGS_ucon.o += -I$(objtree)/usr/include | ||
diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt index ba0aacde94fb..94bbc27ddd4f 100644 --- a/Documentation/cpu-hotplug.txt +++ b/Documentation/cpu-hotplug.txt | |||
@@ -59,15 +59,10 @@ apicid values in those tables for disabled apics. In the event BIOS doesn't | |||
59 | mark such hot-pluggable cpus as disabled entries, one could use this | 59 | mark such hot-pluggable cpus as disabled entries, one could use this |
60 | parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map. | 60 | parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map. |
61 | 61 | ||
62 | s390 uses the number of cpus it detects at IPL time to also the number of bits | ||
63 | in cpu_possible_map. If it is desired to add additional cpus at a later time | ||
64 | the number should be specified using this option or the possible_cpus option. | ||
65 | |||
66 | possible_cpus=n [s390 only] use this to set hotpluggable cpus. | 62 | possible_cpus=n [s390 only] use this to set hotpluggable cpus. |
67 | This option sets possible_cpus bits in | 63 | This option sets possible_cpus bits in |
68 | cpu_possible_map. Thus keeping the numbers of bits set | 64 | cpu_possible_map. Thus keeping the numbers of bits set |
69 | constant even if the machine gets rebooted. | 65 | constant even if the machine gets rebooted. |
70 | This option overrides additional_cpus. | ||
71 | 66 | ||
72 | CPU maps and such | 67 | CPU maps and such |
73 | ----------------- | 68 | ----------------- |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 17cab3c74e8b..eb1a47b97427 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -19,15 +19,6 @@ Who: Pavel Machek <pavel@suse.cz> | |||
19 | 19 | ||
20 | --------------------------- | 20 | --------------------------- |
21 | 21 | ||
22 | What: old NCR53C9x driver | ||
23 | When: October 2007 | ||
24 | Why: Replaced by the much better esp_scsi driver. Actual low-level | ||
25 | driver can be ported over almost trivially. | ||
26 | Who: David Miller <davem@davemloft.net> | ||
27 | Christoph Hellwig <hch@lst.de> | ||
28 | |||
29 | --------------------------- | ||
30 | |||
31 | What: Video4Linux API 1 ioctls and video_decoder.h from Video devices. | 22 | What: Video4Linux API 1 ioctls and video_decoder.h from Video devices. |
32 | When: December 2008 | 23 | When: December 2008 |
33 | Files: include/linux/video_decoder.h include/linux/videodev.h | 24 | Files: include/linux/video_decoder.h include/linux/videodev.h |
diff --git a/Documentation/filesystems/configfs/Makefile b/Documentation/filesystems/configfs/Makefile new file mode 100644 index 000000000000..be7ec5e67dbc --- /dev/null +++ b/Documentation/filesystems/configfs/Makefile | |||
@@ -0,0 +1,3 @@ | |||
1 | ifneq ($(CONFIG_CONFIGFS_FS),) | ||
2 | obj-m += configfs_example_explicit.o configfs_example_macros.o | ||
3 | endif | ||
diff --git a/Documentation/filesystems/quota.txt b/Documentation/filesystems/quota.txt index a590c4093eff..5e8de25bf0f1 100644 --- a/Documentation/filesystems/quota.txt +++ b/Documentation/filesystems/quota.txt | |||
@@ -3,14 +3,14 @@ Quota subsystem | |||
3 | =============== | 3 | =============== |
4 | 4 | ||
5 | Quota subsystem allows system administrator to set limits on used space and | 5 | Quota subsystem allows system administrator to set limits on used space and |
6 | number of used inodes (inode is a filesystem structure which is associated | 6 | number of used inodes (inode is a filesystem structure which is associated with |
7 | with each file or directory) for users and/or groups. For both used space and | 7 | each file or directory) for users and/or groups. For both used space and number |
8 | number of used inodes there are actually two limits. The first one is called | 8 | of used inodes there are actually two limits. The first one is called softlimit |
9 | softlimit and the second one hardlimit. An user can never exceed a hardlimit | 9 | and the second one hardlimit. An user can never exceed a hardlimit for any |
10 | for any resource. User is allowed to exceed softlimit but only for limited | 10 | resource (unless he has CAP_SYS_RESOURCE capability). User is allowed to exceed |
11 | period of time. This period is called "grace period" or "grace time". When | 11 | softlimit but only for limited period of time. This period is called "grace |
12 | grace time is over, user is not able to allocate more space/inodes until he | 12 | period" or "grace time". When grace time is over, user is not able to allocate |
13 | frees enough of them to get below softlimit. | 13 | more space/inodes until he frees enough of them to get below softlimit. |
14 | 14 | ||
15 | Quota limits (and amount of grace time) are set independently for each | 15 | Quota limits (and amount of grace time) are set independently for each |
16 | filesystem. | 16 | filesystem. |
@@ -53,6 +53,12 @@ in parentheses): | |||
53 | QUOTA_NL_BSOFTLONGWARN - space (block) softlimit is exceeded | 53 | QUOTA_NL_BSOFTLONGWARN - space (block) softlimit is exceeded |
54 | longer than given grace period. | 54 | longer than given grace period. |
55 | QUOTA_NL_BSOFTWARN - space (block) softlimit | 55 | QUOTA_NL_BSOFTWARN - space (block) softlimit |
56 | - four warnings are also defined for the event when user stops | ||
57 | exceeding some limit: | ||
58 | QUOTA_NL_IHARDBELOW - inode hardlimit | ||
59 | QUOTA_NL_ISOFTBELOW - inode softlimit | ||
60 | QUOTA_NL_BHARDBELOW - space (block) hardlimit | ||
61 | QUOTA_NL_BSOFTBELOW - space (block) softlimit | ||
56 | QUOTA_NL_A_DEV_MAJOR (u32) | 62 | QUOTA_NL_A_DEV_MAJOR (u32) |
57 | - major number of a device with the affected filesystem | 63 | - major number of a device with the affected filesystem |
58 | QUOTA_NL_A_DEV_MINOR (u32) | 64 | QUOTA_NL_A_DEV_MINOR (u32) |
diff --git a/Documentation/ia64/Makefile b/Documentation/ia64/Makefile new file mode 100644 index 000000000000..b75db69ec483 --- /dev/null +++ b/Documentation/ia64/Makefile | |||
@@ -0,0 +1,8 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := aliasing-test | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c index b88b0ea54e90..655414821edc 100644 --- a/Documentation/lguest/lguest.c +++ b/Documentation/lguest/lguest.c | |||
@@ -1447,21 +1447,6 @@ static void configure_device(int fd, const char *tapif, u32 ipaddr) | |||
1447 | err(1, "Bringing interface %s up", tapif); | 1447 | err(1, "Bringing interface %s up", tapif); |
1448 | } | 1448 | } |
1449 | 1449 | ||
1450 | static void get_mac(int fd, const char *tapif, unsigned char hwaddr[6]) | ||
1451 | { | ||
1452 | struct ifreq ifr; | ||
1453 | |||
1454 | memset(&ifr, 0, sizeof(ifr)); | ||
1455 | strcpy(ifr.ifr_name, tapif); | ||
1456 | |||
1457 | /* SIOC stands for Socket I/O Control. G means Get (vs S for Set | ||
1458 | * above). IF means Interface, and HWADDR is hardware address. | ||
1459 | * Simple! */ | ||
1460 | if (ioctl(fd, SIOCGIFHWADDR, &ifr) != 0) | ||
1461 | err(1, "getting hw address for %s", tapif); | ||
1462 | memcpy(hwaddr, ifr.ifr_hwaddr.sa_data, 6); | ||
1463 | } | ||
1464 | |||
1465 | static int get_tun_device(char tapif[IFNAMSIZ]) | 1450 | static int get_tun_device(char tapif[IFNAMSIZ]) |
1466 | { | 1451 | { |
1467 | struct ifreq ifr; | 1452 | struct ifreq ifr; |
@@ -1531,11 +1516,8 @@ static void setup_tun_net(char *arg) | |||
1531 | p = strchr(arg, ':'); | 1516 | p = strchr(arg, ':'); |
1532 | if (p) { | 1517 | if (p) { |
1533 | str2mac(p+1, conf.mac); | 1518 | str2mac(p+1, conf.mac); |
1519 | add_feature(dev, VIRTIO_NET_F_MAC); | ||
1534 | *p = '\0'; | 1520 | *p = '\0'; |
1535 | } else { | ||
1536 | p = arg + strlen(arg); | ||
1537 | /* None supplied; query the randomly assigned mac. */ | ||
1538 | get_mac(ipfd, tapif, conf.mac); | ||
1539 | } | 1521 | } |
1540 | 1522 | ||
1541 | /* arg is now either an IP address or a bridge name */ | 1523 | /* arg is now either an IP address or a bridge name */ |
@@ -1547,13 +1529,10 @@ static void setup_tun_net(char *arg) | |||
1547 | /* Set up the tun device. */ | 1529 | /* Set up the tun device. */ |
1548 | configure_device(ipfd, tapif, ip); | 1530 | configure_device(ipfd, tapif, ip); |
1549 | 1531 | ||
1550 | /* Tell Guest what MAC address to use. */ | ||
1551 | add_feature(dev, VIRTIO_NET_F_MAC); | ||
1552 | add_feature(dev, VIRTIO_F_NOTIFY_ON_EMPTY); | 1532 | add_feature(dev, VIRTIO_F_NOTIFY_ON_EMPTY); |
1553 | /* Expect Guest to handle everything except UFO */ | 1533 | /* Expect Guest to handle everything except UFO */ |
1554 | add_feature(dev, VIRTIO_NET_F_CSUM); | 1534 | add_feature(dev, VIRTIO_NET_F_CSUM); |
1555 | add_feature(dev, VIRTIO_NET_F_GUEST_CSUM); | 1535 | add_feature(dev, VIRTIO_NET_F_GUEST_CSUM); |
1556 | add_feature(dev, VIRTIO_NET_F_MAC); | ||
1557 | add_feature(dev, VIRTIO_NET_F_GUEST_TSO4); | 1536 | add_feature(dev, VIRTIO_NET_F_GUEST_TSO4); |
1558 | add_feature(dev, VIRTIO_NET_F_GUEST_TSO6); | 1537 | add_feature(dev, VIRTIO_NET_F_GUEST_TSO6); |
1559 | add_feature(dev, VIRTIO_NET_F_GUEST_ECN); | 1538 | add_feature(dev, VIRTIO_NET_F_GUEST_ECN); |
diff --git a/Documentation/networking/Makefile b/Documentation/networking/Makefile new file mode 100644 index 000000000000..6d8af1ac56c4 --- /dev/null +++ b/Documentation/networking/Makefile | |||
@@ -0,0 +1,8 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := ifenslave | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
diff --git a/Documentation/networking/ifenslave.c b/Documentation/networking/ifenslave.c index a12059886755..1b96ccda3836 100644 --- a/Documentation/networking/ifenslave.c +++ b/Documentation/networking/ifenslave.c | |||
@@ -1081,7 +1081,7 @@ static int set_if_addr(char *master_ifname, char *slave_ifname) | |||
1081 | 1081 | ||
1082 | } | 1082 | } |
1083 | 1083 | ||
1084 | ipaddr = ifr.ifr_addr.sa_data; | 1084 | ipaddr = (unsigned char *)ifr.ifr_addr.sa_data; |
1085 | v_print("Interface '%s': set IP %s to %d.%d.%d.%d\n", | 1085 | v_print("Interface '%s': set IP %s to %d.%d.%d.%d\n", |
1086 | slave_ifname, ifra[i].desc, | 1086 | slave_ifname, ifra[i].desc, |
1087 | ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]); | 1087 | ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]); |
diff --git a/Documentation/pcmcia/Makefile b/Documentation/pcmcia/Makefile new file mode 100644 index 000000000000..accde871ae77 --- /dev/null +++ b/Documentation/pcmcia/Makefile | |||
@@ -0,0 +1,10 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := crc32hash | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
9 | |||
10 | HOSTCFLAGS_crc32hash.o += -I$(objtree)/usr/include | ||
diff --git a/Documentation/pcmcia/crc32hash.c b/Documentation/pcmcia/crc32hash.c index cbc36d299af8..4210e5abab8a 100644 --- a/Documentation/pcmcia/crc32hash.c +++ b/Documentation/pcmcia/crc32hash.c | |||
@@ -26,7 +26,7 @@ int main(int argc, char **argv) { | |||
26 | printf("no string passed as argument\n"); | 26 | printf("no string passed as argument\n"); |
27 | return -1; | 27 | return -1; |
28 | } | 28 | } |
29 | result = crc32(argv[1], strlen(argv[1])); | 29 | result = crc32((unsigned char const *)argv[1], strlen(argv[1])); |
30 | printf("0x%x\n", result); | 30 | printf("0x%x\n", result); |
31 | return 0; | 31 | return 0; |
32 | } | 32 | } |
diff --git a/Documentation/spi/Makefile b/Documentation/spi/Makefile new file mode 100644 index 000000000000..a5b03c88beae --- /dev/null +++ b/Documentation/spi/Makefile | |||
@@ -0,0 +1,11 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := spidev_test spidev_fdx | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
9 | |||
10 | HOSTCFLAGS_spidev_test.o += -I$(objtree)/usr/include | ||
11 | HOSTCFLAGS_spidev_fdx.o += -I$(objtree)/usr/include | ||
diff --git a/Documentation/video4linux/Makefile b/Documentation/video4linux/Makefile new file mode 100644 index 000000000000..1ed0e98d057d --- /dev/null +++ b/Documentation/video4linux/Makefile | |||
@@ -0,0 +1,8 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := v4lgrab | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
diff --git a/Documentation/vm/Makefile b/Documentation/vm/Makefile new file mode 100644 index 000000000000..6f562f778b28 --- /dev/null +++ b/Documentation/vm/Makefile | |||
@@ -0,0 +1,8 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := slabinfo | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
diff --git a/Documentation/watchdog/src/Makefile b/Documentation/watchdog/src/Makefile new file mode 100644 index 000000000000..40e5f46e4740 --- /dev/null +++ b/Documentation/watchdog/src/Makefile | |||
@@ -0,0 +1,8 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | ||
2 | obj- := dummy.o | ||
3 | |||
4 | # List of programs to build | ||
5 | hostprogs-y := watchdog-simple watchdog-test | ||
6 | |||
7 | # Tell kbuild to always build the programs | ||
8 | always := $(hostprogs-y) | ||
diff --git a/MAINTAINERS b/MAINTAINERS index b343814a1ace..af6aa4e4b392 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -2462,7 +2462,7 @@ L: kernel-janitors@vger.kernel.org | |||
2462 | W: http://www.kerneljanitors.org/ | 2462 | W: http://www.kerneljanitors.org/ |
2463 | S: Maintained | 2463 | S: Maintained |
2464 | 2464 | ||
2465 | KERNEL NFSD | 2465 | KERNEL NFSD, SUNRPC, AND LOCKD SERVERS |
2466 | P: J. Bruce Fields | 2466 | P: J. Bruce Fields |
2467 | M: bfields@fieldses.org | 2467 | M: bfields@fieldses.org |
2468 | P: Neil Brown | 2468 | P: Neil Brown |
@@ -3078,7 +3078,7 @@ M: ja@ssi.bg | |||
3078 | L: netdev@vger.kernel.org | 3078 | L: netdev@vger.kernel.org |
3079 | S: Maintained | 3079 | S: Maintained |
3080 | 3080 | ||
3081 | NFS CLIENT | 3081 | NFS, SUNRPC, AND LOCKD CLIENTS |
3082 | P: Trond Myklebust | 3082 | P: Trond Myklebust |
3083 | M: Trond.Myklebust@netapp.com | 3083 | M: Trond.Myklebust@netapp.com |
3084 | L: linux-nfs@vger.kernel.org | 3084 | L: linux-nfs@vger.kernel.org |
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 2 | 1 | VERSION = 2 |
2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
3 | SUBLEVEL = 27 | 3 | SUBLEVEL = 27 |
4 | EXTRAVERSION = -rc2 | 4 | EXTRAVERSION = -rc3 |
5 | NAME = Rotary Wombat | 5 | NAME = Rotary Wombat |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
@@ -822,6 +822,9 @@ endif | |||
822 | ifdef CONFIG_SAMPLES | 822 | ifdef CONFIG_SAMPLES |
823 | $(Q)$(MAKE) $(build)=samples | 823 | $(Q)$(MAKE) $(build)=samples |
824 | endif | 824 | endif |
825 | ifdef CONFIG_BUILD_DOCSRC | ||
826 | $(Q)$(MAKE) $(build)=Documentation | ||
827 | endif | ||
825 | $(call vmlinux-modpost) | 828 | $(call vmlinux-modpost) |
826 | $(call if_changed_rule,vmlinux__) | 829 | $(call if_changed_rule,vmlinux__) |
827 | $(Q)rm -f .old_version | 830 | $(Q)rm -f .old_version |
@@ -1166,7 +1169,7 @@ MRPROPER_FILES += .config .config.old include/asm .version .old_version \ | |||
1166 | # | 1169 | # |
1167 | clean: rm-dirs := $(CLEAN_DIRS) | 1170 | clean: rm-dirs := $(CLEAN_DIRS) |
1168 | clean: rm-files := $(CLEAN_FILES) | 1171 | clean: rm-files := $(CLEAN_FILES) |
1169 | clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs)) | 1172 | clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs) Documentation) |
1170 | 1173 | ||
1171 | PHONY += $(clean-dirs) clean archclean | 1174 | PHONY += $(clean-dirs) clean archclean |
1172 | $(clean-dirs): | 1175 | $(clean-dirs): |
diff --git a/include/asm-h8300/Kbuild b/arch/h8300/include/asm/Kbuild index c68e1680da01..c68e1680da01 100644 --- a/include/asm-h8300/Kbuild +++ b/arch/h8300/include/asm/Kbuild | |||
diff --git a/include/asm-h8300/a.out.h b/arch/h8300/include/asm/a.out.h index ded780f0a492..ded780f0a492 100644 --- a/include/asm-h8300/a.out.h +++ b/arch/h8300/include/asm/a.out.h | |||
diff --git a/include/asm-h8300/atomic.h b/arch/h8300/include/asm/atomic.h index b4cf0ea97ede..b4cf0ea97ede 100644 --- a/include/asm-h8300/atomic.h +++ b/arch/h8300/include/asm/atomic.h | |||
diff --git a/include/asm-h8300/auxvec.h b/arch/h8300/include/asm/auxvec.h index 1d36fe38b088..1d36fe38b088 100644 --- a/include/asm-h8300/auxvec.h +++ b/arch/h8300/include/asm/auxvec.h | |||
diff --git a/include/asm-h8300/bitops.h b/arch/h8300/include/asm/bitops.h index cb18e3b0aa94..cb18e3b0aa94 100644 --- a/include/asm-h8300/bitops.h +++ b/arch/h8300/include/asm/bitops.h | |||
diff --git a/include/asm-h8300/bootinfo.h b/arch/h8300/include/asm/bootinfo.h index 5bed7e7aac0a..5bed7e7aac0a 100644 --- a/include/asm-h8300/bootinfo.h +++ b/arch/h8300/include/asm/bootinfo.h | |||
diff --git a/include/asm-h8300/bug.h b/arch/h8300/include/asm/bug.h index edddf5b086e5..edddf5b086e5 100644 --- a/include/asm-h8300/bug.h +++ b/arch/h8300/include/asm/bug.h | |||
diff --git a/include/asm-h8300/bugs.h b/arch/h8300/include/asm/bugs.h index 1cb4afba6eb1..1cb4afba6eb1 100644 --- a/include/asm-h8300/bugs.h +++ b/arch/h8300/include/asm/bugs.h | |||
diff --git a/include/asm-h8300/byteorder.h b/arch/h8300/include/asm/byteorder.h index 36e597d61619..36e597d61619 100644 --- a/include/asm-h8300/byteorder.h +++ b/arch/h8300/include/asm/byteorder.h | |||
diff --git a/include/asm-h8300/cache.h b/arch/h8300/include/asm/cache.h index c6350283649d..c6350283649d 100644 --- a/include/asm-h8300/cache.h +++ b/arch/h8300/include/asm/cache.h | |||
diff --git a/include/asm-h8300/cachectl.h b/arch/h8300/include/asm/cachectl.h index c464022d8e26..c464022d8e26 100644 --- a/include/asm-h8300/cachectl.h +++ b/arch/h8300/include/asm/cachectl.h | |||
diff --git a/include/asm-h8300/cacheflush.h b/arch/h8300/include/asm/cacheflush.h index 5ffdca217b95..5ffdca217b95 100644 --- a/include/asm-h8300/cacheflush.h +++ b/arch/h8300/include/asm/cacheflush.h | |||
diff --git a/include/asm-h8300/checksum.h b/arch/h8300/include/asm/checksum.h index 98724e12508c..98724e12508c 100644 --- a/include/asm-h8300/checksum.h +++ b/arch/h8300/include/asm/checksum.h | |||
diff --git a/include/asm-h8300/cputime.h b/arch/h8300/include/asm/cputime.h index 092e187c7b08..092e187c7b08 100644 --- a/include/asm-h8300/cputime.h +++ b/arch/h8300/include/asm/cputime.h | |||
diff --git a/include/asm-h8300/current.h b/arch/h8300/include/asm/current.h index 57d74ee55a14..57d74ee55a14 100644 --- a/include/asm-h8300/current.h +++ b/arch/h8300/include/asm/current.h | |||
diff --git a/include/asm-h8300/dbg.h b/arch/h8300/include/asm/dbg.h index 2c6d1cbcf736..2c6d1cbcf736 100644 --- a/include/asm-h8300/dbg.h +++ b/arch/h8300/include/asm/dbg.h | |||
diff --git a/include/asm-h8300/delay.h b/arch/h8300/include/asm/delay.h index 743beba70f82..743beba70f82 100644 --- a/include/asm-h8300/delay.h +++ b/arch/h8300/include/asm/delay.h | |||
diff --git a/include/asm-h8300/device.h b/arch/h8300/include/asm/device.h index d8f9872b0e2d..d8f9872b0e2d 100644 --- a/include/asm-h8300/device.h +++ b/arch/h8300/include/asm/device.h | |||
diff --git a/include/asm-h8300/div64.h b/arch/h8300/include/asm/div64.h index 6cd978cefb28..6cd978cefb28 100644 --- a/include/asm-h8300/div64.h +++ b/arch/h8300/include/asm/div64.h | |||
diff --git a/include/asm-h8300/dma.h b/arch/h8300/include/asm/dma.h index 3edbaaaedf5b..3edbaaaedf5b 100644 --- a/include/asm-h8300/dma.h +++ b/arch/h8300/include/asm/dma.h | |||
diff --git a/include/asm-h8300/elf.h b/arch/h8300/include/asm/elf.h index a8b57d1f4128..a8b57d1f4128 100644 --- a/include/asm-h8300/elf.h +++ b/arch/h8300/include/asm/elf.h | |||
diff --git a/include/asm-h8300/emergency-restart.h b/arch/h8300/include/asm/emergency-restart.h index 108d8c48e42e..108d8c48e42e 100644 --- a/include/asm-h8300/emergency-restart.h +++ b/arch/h8300/include/asm/emergency-restart.h | |||
diff --git a/include/asm-h8300/errno.h b/arch/h8300/include/asm/errno.h index 0c2f5641fdcc..0c2f5641fdcc 100644 --- a/include/asm-h8300/errno.h +++ b/arch/h8300/include/asm/errno.h | |||
diff --git a/include/asm-h8300/fb.h b/arch/h8300/include/asm/fb.h index c7df38030992..c7df38030992 100644 --- a/include/asm-h8300/fb.h +++ b/arch/h8300/include/asm/fb.h | |||
diff --git a/include/asm-h8300/fcntl.h b/arch/h8300/include/asm/fcntl.h index 1952cb2e3b06..1952cb2e3b06 100644 --- a/include/asm-h8300/fcntl.h +++ b/arch/h8300/include/asm/fcntl.h | |||
diff --git a/include/asm-h8300/flat.h b/arch/h8300/include/asm/flat.h index 2a873508a9a1..2a873508a9a1 100644 --- a/include/asm-h8300/flat.h +++ b/arch/h8300/include/asm/flat.h | |||
diff --git a/include/asm-h8300/fpu.h b/arch/h8300/include/asm/fpu.h index 4fc416e80bef..4fc416e80bef 100644 --- a/include/asm-h8300/fpu.h +++ b/arch/h8300/include/asm/fpu.h | |||
diff --git a/include/asm-h8300/futex.h b/arch/h8300/include/asm/futex.h index 6a332a9f099c..6a332a9f099c 100644 --- a/include/asm-h8300/futex.h +++ b/arch/h8300/include/asm/futex.h | |||
diff --git a/include/asm-h8300/gpio.h b/arch/h8300/include/asm/gpio.h index a714f0c0efbc..a714f0c0efbc 100644 --- a/include/asm-h8300/gpio.h +++ b/arch/h8300/include/asm/gpio.h | |||
diff --git a/include/asm-h8300/hardirq.h b/arch/h8300/include/asm/hardirq.h index 9d7f7a7462b2..9d7f7a7462b2 100644 --- a/include/asm-h8300/hardirq.h +++ b/arch/h8300/include/asm/hardirq.h | |||
diff --git a/include/asm-h8300/hw_irq.h b/arch/h8300/include/asm/hw_irq.h index d75a5a1119e8..d75a5a1119e8 100644 --- a/include/asm-h8300/hw_irq.h +++ b/arch/h8300/include/asm/hw_irq.h | |||
diff --git a/include/asm-h8300/io.h b/arch/h8300/include/asm/io.h index 26dc6ccd9441..26dc6ccd9441 100644 --- a/include/asm-h8300/io.h +++ b/arch/h8300/include/asm/io.h | |||
diff --git a/include/asm-h8300/ioctl.h b/arch/h8300/include/asm/ioctl.h index b279fe06dfe5..b279fe06dfe5 100644 --- a/include/asm-h8300/ioctl.h +++ b/arch/h8300/include/asm/ioctl.h | |||
diff --git a/include/asm-h8300/ioctls.h b/arch/h8300/include/asm/ioctls.h index 98a53d067269..98a53d067269 100644 --- a/include/asm-h8300/ioctls.h +++ b/arch/h8300/include/asm/ioctls.h | |||
diff --git a/include/asm-h8300/ipcbuf.h b/arch/h8300/include/asm/ipcbuf.h index 2cd1ebcc109d..2cd1ebcc109d 100644 --- a/include/asm-h8300/ipcbuf.h +++ b/arch/h8300/include/asm/ipcbuf.h | |||
diff --git a/include/asm-h8300/irq.h b/arch/h8300/include/asm/irq.h index 13d7c601cd0a..13d7c601cd0a 100644 --- a/include/asm-h8300/irq.h +++ b/arch/h8300/include/asm/irq.h | |||
diff --git a/include/asm-h8300/irq_regs.h b/arch/h8300/include/asm/irq_regs.h index 3dd9c0b70270..3dd9c0b70270 100644 --- a/include/asm-h8300/irq_regs.h +++ b/arch/h8300/include/asm/irq_regs.h | |||
diff --git a/include/asm-h8300/kdebug.h b/arch/h8300/include/asm/kdebug.h index 6ece1b037665..6ece1b037665 100644 --- a/include/asm-h8300/kdebug.h +++ b/arch/h8300/include/asm/kdebug.h | |||
diff --git a/include/asm-h8300/kmap_types.h b/arch/h8300/include/asm/kmap_types.h index 1ec8a3427120..1ec8a3427120 100644 --- a/include/asm-h8300/kmap_types.h +++ b/arch/h8300/include/asm/kmap_types.h | |||
diff --git a/include/asm-h8300/linkage.h b/arch/h8300/include/asm/linkage.h index 6f4df7d46180..6f4df7d46180 100644 --- a/include/asm-h8300/linkage.h +++ b/arch/h8300/include/asm/linkage.h | |||
diff --git a/include/asm-h8300/local.h b/arch/h8300/include/asm/local.h index fdd4efe437cd..fdd4efe437cd 100644 --- a/include/asm-h8300/local.h +++ b/arch/h8300/include/asm/local.h | |||
diff --git a/include/asm-h8300/mc146818rtc.h b/arch/h8300/include/asm/mc146818rtc.h index ab9d9646d241..ab9d9646d241 100644 --- a/include/asm-h8300/mc146818rtc.h +++ b/arch/h8300/include/asm/mc146818rtc.h | |||
diff --git a/include/asm-h8300/md.h b/arch/h8300/include/asm/md.h index 1a47dc6691fb..1a47dc6691fb 100644 --- a/include/asm-h8300/md.h +++ b/arch/h8300/include/asm/md.h | |||
diff --git a/include/asm-h8300/mman.h b/arch/h8300/include/asm/mman.h index b9f104f22a36..b9f104f22a36 100644 --- a/include/asm-h8300/mman.h +++ b/arch/h8300/include/asm/mman.h | |||
diff --git a/include/asm-h8300/mmu.h b/arch/h8300/include/asm/mmu.h index 2ce06ea46104..2ce06ea46104 100644 --- a/include/asm-h8300/mmu.h +++ b/arch/h8300/include/asm/mmu.h | |||
diff --git a/include/asm-h8300/mmu_context.h b/arch/h8300/include/asm/mmu_context.h index f44b730da54d..f44b730da54d 100644 --- a/include/asm-h8300/mmu_context.h +++ b/arch/h8300/include/asm/mmu_context.h | |||
diff --git a/include/asm-h8300/module.h b/arch/h8300/include/asm/module.h index de23231f3196..de23231f3196 100644 --- a/include/asm-h8300/module.h +++ b/arch/h8300/include/asm/module.h | |||
diff --git a/include/asm-h8300/msgbuf.h b/arch/h8300/include/asm/msgbuf.h index 6b148cd09aa5..6b148cd09aa5 100644 --- a/include/asm-h8300/msgbuf.h +++ b/arch/h8300/include/asm/msgbuf.h | |||
diff --git a/include/asm-h8300/mutex.h b/arch/h8300/include/asm/mutex.h index 458c1f7fbc18..458c1f7fbc18 100644 --- a/include/asm-h8300/mutex.h +++ b/arch/h8300/include/asm/mutex.h | |||
diff --git a/include/asm-h8300/page.h b/arch/h8300/include/asm/page.h index 0b6acf0b03aa..0b6acf0b03aa 100644 --- a/include/asm-h8300/page.h +++ b/arch/h8300/include/asm/page.h | |||
diff --git a/include/asm-h8300/page_offset.h b/arch/h8300/include/asm/page_offset.h index f8706463008c..f8706463008c 100644 --- a/include/asm-h8300/page_offset.h +++ b/arch/h8300/include/asm/page_offset.h | |||
diff --git a/include/asm-h8300/param.h b/arch/h8300/include/asm/param.h index 1c72fb8080ff..1c72fb8080ff 100644 --- a/include/asm-h8300/param.h +++ b/arch/h8300/include/asm/param.h | |||
diff --git a/include/asm-h8300/pci.h b/arch/h8300/include/asm/pci.h index 97389b35aa35..97389b35aa35 100644 --- a/include/asm-h8300/pci.h +++ b/arch/h8300/include/asm/pci.h | |||
diff --git a/include/asm-h8300/percpu.h b/arch/h8300/include/asm/percpu.h index 72c03e3666d8..72c03e3666d8 100644 --- a/include/asm-h8300/percpu.h +++ b/arch/h8300/include/asm/percpu.h | |||
diff --git a/include/asm-h8300/pgalloc.h b/arch/h8300/include/asm/pgalloc.h index c2e89a286d23..c2e89a286d23 100644 --- a/include/asm-h8300/pgalloc.h +++ b/arch/h8300/include/asm/pgalloc.h | |||
diff --git a/include/asm-h8300/pgtable.h b/arch/h8300/include/asm/pgtable.h index a09230a08e02..a09230a08e02 100644 --- a/include/asm-h8300/pgtable.h +++ b/arch/h8300/include/asm/pgtable.h | |||
diff --git a/include/asm-h8300/poll.h b/arch/h8300/include/asm/poll.h index f61540c22d94..f61540c22d94 100644 --- a/include/asm-h8300/poll.h +++ b/arch/h8300/include/asm/poll.h | |||
diff --git a/include/asm-h8300/posix_types.h b/arch/h8300/include/asm/posix_types.h index 5c553927fc53..5c553927fc53 100644 --- a/include/asm-h8300/posix_types.h +++ b/arch/h8300/include/asm/posix_types.h | |||
diff --git a/include/asm-h8300/processor.h b/arch/h8300/include/asm/processor.h index 69e8a34eb6d5..69e8a34eb6d5 100644 --- a/include/asm-h8300/processor.h +++ b/arch/h8300/include/asm/processor.h | |||
diff --git a/include/asm-h8300/ptrace.h b/arch/h8300/include/asm/ptrace.h index c2e05e4b512e..c2e05e4b512e 100644 --- a/include/asm-h8300/ptrace.h +++ b/arch/h8300/include/asm/ptrace.h | |||
diff --git a/include/asm-h8300/regs267x.h b/arch/h8300/include/asm/regs267x.h index 1bff731a9f77..1bff731a9f77 100644 --- a/include/asm-h8300/regs267x.h +++ b/arch/h8300/include/asm/regs267x.h | |||
diff --git a/include/asm-h8300/regs306x.h b/arch/h8300/include/asm/regs306x.h index 027dd633fa25..027dd633fa25 100644 --- a/include/asm-h8300/regs306x.h +++ b/arch/h8300/include/asm/regs306x.h | |||
diff --git a/include/asm-h8300/resource.h b/arch/h8300/include/asm/resource.h index 46c5f4391607..46c5f4391607 100644 --- a/include/asm-h8300/resource.h +++ b/arch/h8300/include/asm/resource.h | |||
diff --git a/include/asm-h8300/scatterlist.h b/arch/h8300/include/asm/scatterlist.h index d3ecdd87ac90..d3ecdd87ac90 100644 --- a/include/asm-h8300/scatterlist.h +++ b/arch/h8300/include/asm/scatterlist.h | |||
diff --git a/include/asm-h8300/sections.h b/arch/h8300/include/asm/sections.h index a81743e8b743..a81743e8b743 100644 --- a/include/asm-h8300/sections.h +++ b/arch/h8300/include/asm/sections.h | |||
diff --git a/include/asm-h8300/segment.h b/arch/h8300/include/asm/segment.h index b79a82d0f99d..b79a82d0f99d 100644 --- a/include/asm-h8300/segment.h +++ b/arch/h8300/include/asm/segment.h | |||
diff --git a/include/asm-h8300/sembuf.h b/arch/h8300/include/asm/sembuf.h index e04a3ec0cb92..e04a3ec0cb92 100644 --- a/include/asm-h8300/sembuf.h +++ b/arch/h8300/include/asm/sembuf.h | |||
diff --git a/include/asm-h8300/setup.h b/arch/h8300/include/asm/setup.h index e2c600e96733..e2c600e96733 100644 --- a/include/asm-h8300/setup.h +++ b/arch/h8300/include/asm/setup.h | |||
diff --git a/include/asm-h8300/sh_bios.h b/arch/h8300/include/asm/sh_bios.h index b6bb6e58295c..b6bb6e58295c 100644 --- a/include/asm-h8300/sh_bios.h +++ b/arch/h8300/include/asm/sh_bios.h | |||
diff --git a/include/asm-h8300/shm.h b/arch/h8300/include/asm/shm.h index ed6623c0545d..ed6623c0545d 100644 --- a/include/asm-h8300/shm.h +++ b/arch/h8300/include/asm/shm.h | |||
diff --git a/include/asm-h8300/shmbuf.h b/arch/h8300/include/asm/shmbuf.h index 64e77993a7a9..64e77993a7a9 100644 --- a/include/asm-h8300/shmbuf.h +++ b/arch/h8300/include/asm/shmbuf.h | |||
diff --git a/include/asm-h8300/shmparam.h b/arch/h8300/include/asm/shmparam.h index d1863953ec64..d1863953ec64 100644 --- a/include/asm-h8300/shmparam.h +++ b/arch/h8300/include/asm/shmparam.h | |||
diff --git a/include/asm-h8300/sigcontext.h b/arch/h8300/include/asm/sigcontext.h index e4b81505f8f8..e4b81505f8f8 100644 --- a/include/asm-h8300/sigcontext.h +++ b/arch/h8300/include/asm/sigcontext.h | |||
diff --git a/include/asm-h8300/siginfo.h b/arch/h8300/include/asm/siginfo.h index bc8fbea931a5..bc8fbea931a5 100644 --- a/include/asm-h8300/siginfo.h +++ b/arch/h8300/include/asm/siginfo.h | |||
diff --git a/include/asm-h8300/signal.h b/arch/h8300/include/asm/signal.h index 7bc15048a64f..7bc15048a64f 100644 --- a/include/asm-h8300/signal.h +++ b/arch/h8300/include/asm/signal.h | |||
diff --git a/include/asm-h8300/smp.h b/arch/h8300/include/asm/smp.h index 9e9bd7e58922..9e9bd7e58922 100644 --- a/include/asm-h8300/smp.h +++ b/arch/h8300/include/asm/smp.h | |||
diff --git a/include/asm-h8300/socket.h b/arch/h8300/include/asm/socket.h index da2520dbf254..da2520dbf254 100644 --- a/include/asm-h8300/socket.h +++ b/arch/h8300/include/asm/socket.h | |||
diff --git a/include/asm-h8300/sockios.h b/arch/h8300/include/asm/sockios.h index e9c7ec810c23..e9c7ec810c23 100644 --- a/include/asm-h8300/sockios.h +++ b/arch/h8300/include/asm/sockios.h | |||
diff --git a/include/asm-h8300/spinlock.h b/arch/h8300/include/asm/spinlock.h index d5407fa173e4..d5407fa173e4 100644 --- a/include/asm-h8300/spinlock.h +++ b/arch/h8300/include/asm/spinlock.h | |||
diff --git a/include/asm-h8300/stat.h b/arch/h8300/include/asm/stat.h index 62c3cc24dfe6..62c3cc24dfe6 100644 --- a/include/asm-h8300/stat.h +++ b/arch/h8300/include/asm/stat.h | |||
diff --git a/include/asm-h8300/statfs.h b/arch/h8300/include/asm/statfs.h index b96efa712aac..b96efa712aac 100644 --- a/include/asm-h8300/statfs.h +++ b/arch/h8300/include/asm/statfs.h | |||
diff --git a/include/asm-h8300/string.h b/arch/h8300/include/asm/string.h index ca5034897d87..ca5034897d87 100644 --- a/include/asm-h8300/string.h +++ b/arch/h8300/include/asm/string.h | |||
diff --git a/include/asm-h8300/system.h b/arch/h8300/include/asm/system.h index 4b8e475908ae..4b8e475908ae 100644 --- a/include/asm-h8300/system.h +++ b/arch/h8300/include/asm/system.h | |||
diff --git a/include/asm-h8300/target_time.h b/arch/h8300/include/asm/target_time.h index 9f2a9aa1fe6f..9f2a9aa1fe6f 100644 --- a/include/asm-h8300/target_time.h +++ b/arch/h8300/include/asm/target_time.h | |||
diff --git a/include/asm-h8300/termbits.h b/arch/h8300/include/asm/termbits.h index 31eca81db3f7..31eca81db3f7 100644 --- a/include/asm-h8300/termbits.h +++ b/arch/h8300/include/asm/termbits.h | |||
diff --git a/include/asm-h8300/termios.h b/arch/h8300/include/asm/termios.h index 70eea64b4213..70eea64b4213 100644 --- a/include/asm-h8300/termios.h +++ b/arch/h8300/include/asm/termios.h | |||
diff --git a/include/asm-h8300/thread_info.h b/arch/h8300/include/asm/thread_info.h index aafd4d322ec3..aafd4d322ec3 100644 --- a/include/asm-h8300/thread_info.h +++ b/arch/h8300/include/asm/thread_info.h | |||
diff --git a/include/asm-h8300/timex.h b/arch/h8300/include/asm/timex.h index 23e67013439f..23e67013439f 100644 --- a/include/asm-h8300/timex.h +++ b/arch/h8300/include/asm/timex.h | |||
diff --git a/include/asm-h8300/tlb.h b/arch/h8300/include/asm/tlb.h index 3dea80ad9e6f..3dea80ad9e6f 100644 --- a/include/asm-h8300/tlb.h +++ b/arch/h8300/include/asm/tlb.h | |||
diff --git a/include/asm-h8300/tlbflush.h b/arch/h8300/include/asm/tlbflush.h index 41c148a9208e..41c148a9208e 100644 --- a/include/asm-h8300/tlbflush.h +++ b/arch/h8300/include/asm/tlbflush.h | |||
diff --git a/include/asm-h8300/topology.h b/arch/h8300/include/asm/topology.h index fdc121924d4c..fdc121924d4c 100644 --- a/include/asm-h8300/topology.h +++ b/arch/h8300/include/asm/topology.h | |||
diff --git a/include/asm-h8300/traps.h b/arch/h8300/include/asm/traps.h index 41cf6be02f68..41cf6be02f68 100644 --- a/include/asm-h8300/traps.h +++ b/arch/h8300/include/asm/traps.h | |||
diff --git a/include/asm-h8300/types.h b/arch/h8300/include/asm/types.h index 12875190b156..12875190b156 100644 --- a/include/asm-h8300/types.h +++ b/arch/h8300/include/asm/types.h | |||
diff --git a/include/asm-h8300/uaccess.h b/arch/h8300/include/asm/uaccess.h index 356068cd0879..356068cd0879 100644 --- a/include/asm-h8300/uaccess.h +++ b/arch/h8300/include/asm/uaccess.h | |||
diff --git a/include/asm-h8300/ucontext.h b/arch/h8300/include/asm/ucontext.h index 0bcf8f85fab9..0bcf8f85fab9 100644 --- a/include/asm-h8300/ucontext.h +++ b/arch/h8300/include/asm/ucontext.h | |||
diff --git a/include/asm-h8300/unaligned.h b/arch/h8300/include/asm/unaligned.h index b8d06c70c2da..b8d06c70c2da 100644 --- a/include/asm-h8300/unaligned.h +++ b/arch/h8300/include/asm/unaligned.h | |||
diff --git a/include/asm-h8300/unistd.h b/arch/h8300/include/asm/unistd.h index 99f3c3561ecb..99f3c3561ecb 100644 --- a/include/asm-h8300/unistd.h +++ b/arch/h8300/include/asm/unistd.h | |||
diff --git a/include/asm-h8300/user.h b/arch/h8300/include/asm/user.h index 14a9e18950f1..14a9e18950f1 100644 --- a/include/asm-h8300/user.h +++ b/arch/h8300/include/asm/user.h | |||
diff --git a/include/asm-h8300/virtconvert.h b/arch/h8300/include/asm/virtconvert.h index 19cfd62b11c3..19cfd62b11c3 100644 --- a/include/asm-h8300/virtconvert.h +++ b/arch/h8300/include/asm/virtconvert.h | |||
diff --git a/arch/h8300/mm/init.c b/arch/h8300/mm/init.c index a1d228f5e4e6..9942f24aff9e 100644 --- a/arch/h8300/mm/init.c +++ b/arch/h8300/mm/init.c | |||
@@ -40,9 +40,6 @@ | |||
40 | 40 | ||
41 | #undef DEBUG | 41 | #undef DEBUG |
42 | 42 | ||
43 | extern void die_if_kernel(char *,struct pt_regs *,long); | ||
44 | extern void free_initmem(void); | ||
45 | |||
46 | /* | 43 | /* |
47 | * BAD_PAGE is the page that is used for page faults when linux | 44 | * BAD_PAGE is the page that is used for page faults when linux |
48 | * is out-of-memory. Older versions of linux just did a | 45 | * is out-of-memory. Older versions of linux just did a |
@@ -73,7 +70,7 @@ extern unsigned long memory_end; | |||
73 | * The parameters are pointers to where to stick the starting and ending | 70 | * The parameters are pointers to where to stick the starting and ending |
74 | * addresses of available kernel virtual memory. | 71 | * addresses of available kernel virtual memory. |
75 | */ | 72 | */ |
76 | void paging_init(void) | 73 | void __init paging_init(void) |
77 | { | 74 | { |
78 | /* | 75 | /* |
79 | * Make sure start_mem is page aligned, otherwise bootmem and | 76 | * Make sure start_mem is page aligned, otherwise bootmem and |
@@ -122,7 +119,7 @@ void paging_init(void) | |||
122 | } | 119 | } |
123 | } | 120 | } |
124 | 121 | ||
125 | void mem_init(void) | 122 | void __init mem_init(void) |
126 | { | 123 | { |
127 | int codek = 0, datak = 0, initk = 0; | 124 | int codek = 0, datak = 0, initk = 0; |
128 | /* DAVIDM look at setup memory map generically with reserved area */ | 125 | /* DAVIDM look at setup memory map generically with reserved area */ |
@@ -178,7 +175,7 @@ void free_initrd_mem(unsigned long start, unsigned long end) | |||
178 | #endif | 175 | #endif |
179 | 176 | ||
180 | void | 177 | void |
181 | free_initmem() | 178 | free_initmem(void) |
182 | { | 179 | { |
183 | #ifdef CONFIG_RAMKERNEL | 180 | #ifdef CONFIG_RAMKERNEL |
184 | unsigned long addr; | 181 | unsigned long addr; |
diff --git a/arch/ia64/include/asm/sal.h b/arch/ia64/include/asm/sal.h index 89594b442f83..ea310c0812aa 100644 --- a/arch/ia64/include/asm/sal.h +++ b/arch/ia64/include/asm/sal.h | |||
@@ -236,7 +236,7 @@ extern struct ia64_sal_desc_ptc *ia64_ptc_domain_info; | |||
236 | 236 | ||
237 | extern unsigned short sal_revision; /* supported SAL spec revision */ | 237 | extern unsigned short sal_revision; /* supported SAL spec revision */ |
238 | extern unsigned short sal_version; /* SAL version; OEM dependent */ | 238 | extern unsigned short sal_version; /* SAL version; OEM dependent */ |
239 | #define SAL_VERSION_CODE(major, minor) ((BIN2BCD(major) << 8) | BIN2BCD(minor)) | 239 | #define SAL_VERSION_CODE(major, minor) ((bin2bcd(major) << 8) | bin2bcd(minor)) |
240 | 240 | ||
241 | extern const char *ia64_sal_strerror (long status); | 241 | extern const char *ia64_sal_strerror (long status); |
242 | extern void ia64_sal_init (struct ia64_sal_systab *sal_systab); | 242 | extern void ia64_sal_init (struct ia64_sal_systab *sal_systab); |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index 41c712917ff7..8bdea8eb62e3 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -359,7 +359,31 @@ start_ap: | |||
359 | mov ar.rsc=0 // place RSE in enforced lazy mode | 359 | mov ar.rsc=0 // place RSE in enforced lazy mode |
360 | ;; | 360 | ;; |
361 | loadrs // clear the dirty partition | 361 | loadrs // clear the dirty partition |
362 | mov IA64_KR(PER_CPU_DATA)=r0 // clear physical per-CPU base | 362 | movl r19=__phys_per_cpu_start |
363 | mov r18=PERCPU_PAGE_SIZE | ||
364 | ;; | ||
365 | #ifndef CONFIG_SMP | ||
366 | add r19=r19,r18 | ||
367 | ;; | ||
368 | #else | ||
369 | (isAP) br.few 2f | ||
370 | mov r20=r19 | ||
371 | sub r19=r19,r18 | ||
372 | ;; | ||
373 | shr.u r18=r18,3 | ||
374 | 1: | ||
375 | ld8 r21=[r20],8;; | ||
376 | st8[r19]=r21,8 | ||
377 | adds r18=-1,r18;; | ||
378 | cmp4.lt p7,p6=0,r18 | ||
379 | (p7) br.cond.dptk.few 1b | ||
380 | 2: | ||
381 | #endif | ||
382 | tpa r19=r19 | ||
383 | ;; | ||
384 | .pred.rel.mutex isBP,isAP | ||
385 | (isBP) mov IA64_KR(PER_CPU_DATA)=r19 // per-CPU base for cpu0 | ||
386 | (isAP) mov IA64_KR(PER_CPU_DATA)=r0 // clear physical per-CPU base | ||
363 | ;; | 387 | ;; |
364 | mov ar.bspstore=r2 // establish the new RSE stack | 388 | mov ar.bspstore=r2 // establish the new RSE stack |
365 | ;; | 389 | ;; |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 593279f33e96..c27d5b2c182b 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -927,17 +927,19 @@ cpu_init (void) | |||
927 | if (smp_processor_id() == 0) { | 927 | if (smp_processor_id() == 0) { |
928 | cpu_set(0, per_cpu(cpu_sibling_map, 0)); | 928 | cpu_set(0, per_cpu(cpu_sibling_map, 0)); |
929 | cpu_set(0, cpu_core_map[0]); | 929 | cpu_set(0, cpu_core_map[0]); |
930 | } else { | ||
931 | /* | ||
932 | * Set ar.k3 so that assembly code in MCA handler can compute | ||
933 | * physical addresses of per cpu variables with a simple: | ||
934 | * phys = ar.k3 + &per_cpu_var | ||
935 | * and the alt-dtlb-miss handler can set per-cpu mapping into | ||
936 | * the TLB when needed. head.S already did this for cpu0. | ||
937 | */ | ||
938 | ia64_set_kr(IA64_KR_PER_CPU_DATA, | ||
939 | ia64_tpa(cpu_data) - (long) __per_cpu_start); | ||
930 | } | 940 | } |
931 | #endif | 941 | #endif |
932 | 942 | ||
933 | /* | ||
934 | * We set ar.k3 so that assembly code in MCA handler can compute | ||
935 | * physical addresses of per cpu variables with a simple: | ||
936 | * phys = ar.k3 + &per_cpu_var | ||
937 | */ | ||
938 | ia64_set_kr(IA64_KR_PER_CPU_DATA, | ||
939 | ia64_tpa(cpu_data) - (long) __per_cpu_start); | ||
940 | |||
941 | get_max_cacheline_size(); | 943 | get_max_cacheline_size(); |
942 | 944 | ||
943 | /* | 945 | /* |
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index 03f1a9908afc..b39853a292d5 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c | |||
@@ -467,7 +467,9 @@ start_secondary (void *unused) | |||
467 | { | 467 | { |
468 | /* Early console may use I/O ports */ | 468 | /* Early console may use I/O ports */ |
469 | ia64_set_kr(IA64_KR_IO_BASE, __pa(ia64_iobase)); | 469 | ia64_set_kr(IA64_KR_IO_BASE, __pa(ia64_iobase)); |
470 | #ifndef CONFIG_PRINTK_TIME | ||
470 | Dprintk("start_secondary: starting CPU 0x%x\n", hard_smp_processor_id()); | 471 | Dprintk("start_secondary: starting CPU 0x%x\n", hard_smp_processor_id()); |
472 | #endif | ||
471 | efi_map_pal_code(); | 473 | efi_map_pal_code(); |
472 | cpu_init(); | 474 | cpu_init(); |
473 | preempt_disable(); | 475 | preempt_disable(); |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 5a77206c2492..de71da811cd6 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -215,6 +215,9 @@ SECTIONS | |||
215 | /* Per-cpu data: */ | 215 | /* Per-cpu data: */ |
216 | percpu : { } :percpu | 216 | percpu : { } :percpu |
217 | . = ALIGN(PERCPU_PAGE_SIZE); | 217 | . = ALIGN(PERCPU_PAGE_SIZE); |
218 | #ifdef CONFIG_SMP | ||
219 | . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ | ||
220 | #endif | ||
218 | __phys_per_cpu_start = .; | 221 | __phys_per_cpu_start = .; |
219 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) | 222 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) |
220 | { | 223 | { |
diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 798bf9835a51..e566ff43884a 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c | |||
@@ -163,8 +163,14 @@ per_cpu_init (void) | |||
163 | * get_zeroed_page(). | 163 | * get_zeroed_page(). |
164 | */ | 164 | */ |
165 | if (first_time) { | 165 | if (first_time) { |
166 | void *cpu0_data = __phys_per_cpu_start - PERCPU_PAGE_SIZE; | ||
167 | |||
166 | first_time=0; | 168 | first_time=0; |
167 | for (cpu = 0; cpu < NR_CPUS; cpu++) { | 169 | |
170 | __per_cpu_offset[0] = (char *) cpu0_data - __per_cpu_start; | ||
171 | per_cpu(local_per_cpu_offset, 0) = __per_cpu_offset[0]; | ||
172 | |||
173 | for (cpu = 1; cpu < NR_CPUS; cpu++) { | ||
168 | memcpy(cpu_data, __phys_per_cpu_start, __per_cpu_end - __per_cpu_start); | 174 | memcpy(cpu_data, __phys_per_cpu_start, __per_cpu_end - __per_cpu_start); |
169 | __per_cpu_offset[cpu] = (char *) cpu_data - __per_cpu_start; | 175 | __per_cpu_offset[cpu] = (char *) cpu_data - __per_cpu_start; |
170 | cpu_data += PERCPU_PAGE_SIZE; | 176 | cpu_data += PERCPU_PAGE_SIZE; |
@@ -177,7 +183,7 @@ per_cpu_init (void) | |||
177 | static inline void | 183 | static inline void |
178 | alloc_per_cpu_data(void) | 184 | alloc_per_cpu_data(void) |
179 | { | 185 | { |
180 | cpu_data = __alloc_bootmem(PERCPU_PAGE_SIZE * NR_CPUS, | 186 | cpu_data = __alloc_bootmem(PERCPU_PAGE_SIZE * NR_CPUS-1, |
181 | PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); | 187 | PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); |
182 | } | 188 | } |
183 | #else | 189 | #else |
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index d83125e1ed27..78026aabaa7f 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
@@ -143,7 +143,11 @@ static void *per_cpu_node_setup(void *cpu_data, int node) | |||
143 | int cpu; | 143 | int cpu; |
144 | 144 | ||
145 | for_each_possible_early_cpu(cpu) { | 145 | for_each_possible_early_cpu(cpu) { |
146 | if (node == node_cpuid[cpu].nid) { | 146 | if (cpu == 0) { |
147 | void *cpu0_data = __phys_per_cpu_start - PERCPU_PAGE_SIZE; | ||
148 | __per_cpu_offset[cpu] = (char*)cpu0_data - | ||
149 | __per_cpu_start; | ||
150 | } else if (node == node_cpuid[cpu].nid) { | ||
147 | memcpy(__va(cpu_data), __phys_per_cpu_start, | 151 | memcpy(__va(cpu_data), __phys_per_cpu_start, |
148 | __per_cpu_end - __per_cpu_start); | 152 | __per_cpu_end - __per_cpu_start); |
149 | __per_cpu_offset[cpu] = (char*)__va(cpu_data) - | 153 | __per_cpu_offset[cpu] = (char*)__va(cpu_data) - |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 63c9cafda9c4..587da5e0990f 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -42,9 +42,6 @@ config GENERIC_HARDIRQS | |||
42 | bool | 42 | bool |
43 | default y | 43 | default y |
44 | 44 | ||
45 | config HAVE_GET_USER_PAGES_FAST | ||
46 | def_bool PPC64 | ||
47 | |||
48 | config HAVE_SETUP_PER_CPU_AREA | 45 | config HAVE_SETUP_PER_CPU_AREA |
49 | def_bool PPC64 | 46 | def_bool PPC64 |
50 | 47 | ||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 3d0f2b6a5a16..ac2fb0641a04 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -22,7 +22,6 @@ config X86 | |||
22 | select HAVE_IDE | 22 | select HAVE_IDE |
23 | select HAVE_OPROFILE | 23 | select HAVE_OPROFILE |
24 | select HAVE_IOREMAP_PROT | 24 | select HAVE_IOREMAP_PROT |
25 | select HAVE_GET_USER_PAGES_FAST | ||
26 | select HAVE_KPROBES | 25 | select HAVE_KPROBES |
27 | select ARCH_WANT_OPTIONAL_GPIOLIB | 26 | select ARCH_WANT_OPTIONAL_GPIOLIB |
28 | select HAVE_KRETPROBES | 27 | select HAVE_KRETPROBES |
diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c index d6c898358371..039a8d4aaf62 100644 --- a/arch/x86/kernel/apic_32.c +++ b/arch/x86/kernel/apic_32.c | |||
@@ -1720,15 +1720,19 @@ static int __init parse_lapic_timer_c2_ok(char *arg) | |||
1720 | } | 1720 | } |
1721 | early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok); | 1721 | early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok); |
1722 | 1722 | ||
1723 | static int __init apic_set_verbosity(char *str) | 1723 | static int __init apic_set_verbosity(char *arg) |
1724 | { | 1724 | { |
1725 | if (strcmp("debug", str) == 0) | 1725 | if (!arg) |
1726 | return -EINVAL; | ||
1727 | |||
1728 | if (strcmp(arg, "debug") == 0) | ||
1726 | apic_verbosity = APIC_DEBUG; | 1729 | apic_verbosity = APIC_DEBUG; |
1727 | else if (strcmp("verbose", str) == 0) | 1730 | else if (strcmp(arg, "verbose") == 0) |
1728 | apic_verbosity = APIC_VERBOSE; | 1731 | apic_verbosity = APIC_VERBOSE; |
1729 | return 1; | 1732 | |
1733 | return 0; | ||
1730 | } | 1734 | } |
1731 | __setup("apic=", apic_set_verbosity); | 1735 | early_param("apic", apic_set_verbosity); |
1732 | 1736 | ||
1733 | static int __init lapic_insert_resource(void) | 1737 | static int __init lapic_insert_resource(void) |
1734 | { | 1738 | { |
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index c9b58a806e85..c8e315f1aa83 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c | |||
@@ -50,6 +50,8 @@ static double __initdata y = 3145727.0; | |||
50 | */ | 50 | */ |
51 | static void __init check_fpu(void) | 51 | static void __init check_fpu(void) |
52 | { | 52 | { |
53 | s32 fdiv_bug; | ||
54 | |||
53 | if (!boot_cpu_data.hard_math) { | 55 | if (!boot_cpu_data.hard_math) { |
54 | #ifndef CONFIG_MATH_EMULATION | 56 | #ifndef CONFIG_MATH_EMULATION |
55 | printk(KERN_EMERG "No coprocessor found and no math emulation present.\n"); | 57 | printk(KERN_EMERG "No coprocessor found and no math emulation present.\n"); |
@@ -74,8 +76,10 @@ static void __init check_fpu(void) | |||
74 | "fistpl %0\n\t" | 76 | "fistpl %0\n\t" |
75 | "fwait\n\t" | 77 | "fwait\n\t" |
76 | "fninit" | 78 | "fninit" |
77 | : "=m" (*&boot_cpu_data.fdiv_bug) | 79 | : "=m" (*&fdiv_bug) |
78 | : "m" (*&x), "m" (*&y)); | 80 | : "m" (*&x), "m" (*&y)); |
81 | |||
82 | boot_cpu_data.fdiv_bug = fdiv_bug; | ||
79 | if (boot_cpu_data.fdiv_bug) | 83 | if (boot_cpu_data.fdiv_bug) |
80 | printk("Hmm, FPU with FDIV bug.\n"); | 84 | printk("Hmm, FPU with FDIV bug.\n"); |
81 | } | 85 | } |
diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c index de9aa0e3a9c5..09cddb57bec4 100644 --- a/arch/x86/kernel/io_apic_32.c +++ b/arch/x86/kernel/io_apic_32.c | |||
@@ -57,7 +57,7 @@ atomic_t irq_mis_count; | |||
57 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; | 57 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; |
58 | 58 | ||
59 | static DEFINE_SPINLOCK(ioapic_lock); | 59 | static DEFINE_SPINLOCK(ioapic_lock); |
60 | static DEFINE_SPINLOCK(vector_lock); | 60 | DEFINE_SPINLOCK(vector_lock); |
61 | 61 | ||
62 | int timer_through_8259 __initdata; | 62 | int timer_through_8259 __initdata; |
63 | 63 | ||
@@ -1209,10 +1209,6 @@ static int assign_irq_vector(int irq) | |||
1209 | return vector; | 1209 | return vector; |
1210 | } | 1210 | } |
1211 | 1211 | ||
1212 | void setup_vector_irq(int cpu) | ||
1213 | { | ||
1214 | } | ||
1215 | |||
1216 | static struct irq_chip ioapic_chip; | 1212 | static struct irq_chip ioapic_chip; |
1217 | 1213 | ||
1218 | #define IOAPIC_AUTO -1 | 1214 | #define IOAPIC_AUTO -1 |
diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c index 8269434d1707..61a83b70c18f 100644 --- a/arch/x86/kernel/io_apic_64.c +++ b/arch/x86/kernel/io_apic_64.c | |||
@@ -101,7 +101,7 @@ int timer_through_8259 __initdata; | |||
101 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; | 101 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; |
102 | 102 | ||
103 | static DEFINE_SPINLOCK(ioapic_lock); | 103 | static DEFINE_SPINLOCK(ioapic_lock); |
104 | DEFINE_SPINLOCK(vector_lock); | 104 | static DEFINE_SPINLOCK(vector_lock); |
105 | 105 | ||
106 | /* | 106 | /* |
107 | * # of IRQ routing registers | 107 | * # of IRQ routing registers |
@@ -697,6 +697,19 @@ static int pin_2_irq(int idx, int apic, int pin) | |||
697 | return irq; | 697 | return irq; |
698 | } | 698 | } |
699 | 699 | ||
700 | void lock_vector_lock(void) | ||
701 | { | ||
702 | /* Used to the online set of cpus does not change | ||
703 | * during assign_irq_vector. | ||
704 | */ | ||
705 | spin_lock(&vector_lock); | ||
706 | } | ||
707 | |||
708 | void unlock_vector_lock(void) | ||
709 | { | ||
710 | spin_unlock(&vector_lock); | ||
711 | } | ||
712 | |||
700 | static int __assign_irq_vector(int irq, cpumask_t mask) | 713 | static int __assign_irq_vector(int irq, cpumask_t mask) |
701 | { | 714 | { |
702 | /* | 715 | /* |
@@ -802,7 +815,7 @@ static void __clear_irq_vector(int irq) | |||
802 | cpus_clear(cfg->domain); | 815 | cpus_clear(cfg->domain); |
803 | } | 816 | } |
804 | 817 | ||
805 | static void __setup_vector_irq(int cpu) | 818 | void __setup_vector_irq(int cpu) |
806 | { | 819 | { |
807 | /* Initialize vector_irq on a new cpu */ | 820 | /* Initialize vector_irq on a new cpu */ |
808 | /* This function must be called with vector_lock held */ | 821 | /* This function must be called with vector_lock held */ |
@@ -825,14 +838,6 @@ static void __setup_vector_irq(int cpu) | |||
825 | } | 838 | } |
826 | } | 839 | } |
827 | 840 | ||
828 | void setup_vector_irq(int cpu) | ||
829 | { | ||
830 | spin_lock(&vector_lock); | ||
831 | __setup_vector_irq(smp_processor_id()); | ||
832 | spin_unlock(&vector_lock); | ||
833 | } | ||
834 | |||
835 | |||
836 | static struct irq_chip ioapic_chip; | 841 | static struct irq_chip ioapic_chip; |
837 | 842 | ||
838 | static void ioapic_register_intr(int irq, unsigned long trigger) | 843 | static void ioapic_register_intr(int irq, unsigned long trigger) |
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index 6ae005ccaed8..678090508a62 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
@@ -83,7 +83,7 @@ static void __init MP_bus_info(struct mpc_config_bus *m) | |||
83 | if (x86_quirks->mpc_oem_bus_info) | 83 | if (x86_quirks->mpc_oem_bus_info) |
84 | x86_quirks->mpc_oem_bus_info(m, str); | 84 | x86_quirks->mpc_oem_bus_info(m, str); |
85 | else | 85 | else |
86 | printk(KERN_INFO "Bus #%d is %s\n", m->mpc_busid, str); | 86 | apic_printk(APIC_VERBOSE, "Bus #%d is %s\n", m->mpc_busid, str); |
87 | 87 | ||
88 | #if MAX_MP_BUSSES < 256 | 88 | #if MAX_MP_BUSSES < 256 |
89 | if (m->mpc_busid >= MAX_MP_BUSSES) { | 89 | if (m->mpc_busid >= MAX_MP_BUSSES) { |
@@ -154,7 +154,7 @@ static void __init MP_ioapic_info(struct mpc_config_ioapic *m) | |||
154 | 154 | ||
155 | static void print_MP_intsrc_info(struct mpc_config_intsrc *m) | 155 | static void print_MP_intsrc_info(struct mpc_config_intsrc *m) |
156 | { | 156 | { |
157 | printk(KERN_CONT "Int: type %d, pol %d, trig %d, bus %02x," | 157 | apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x," |
158 | " IRQ %02x, APIC ID %x, APIC INT %02x\n", | 158 | " IRQ %02x, APIC ID %x, APIC INT %02x\n", |
159 | m->mpc_irqtype, m->mpc_irqflag & 3, | 159 | m->mpc_irqtype, m->mpc_irqflag & 3, |
160 | (m->mpc_irqflag >> 2) & 3, m->mpc_srcbus, | 160 | (m->mpc_irqflag >> 2) & 3, m->mpc_srcbus, |
@@ -163,7 +163,7 @@ static void print_MP_intsrc_info(struct mpc_config_intsrc *m) | |||
163 | 163 | ||
164 | static void __init print_mp_irq_info(struct mp_config_intsrc *mp_irq) | 164 | static void __init print_mp_irq_info(struct mp_config_intsrc *mp_irq) |
165 | { | 165 | { |
166 | printk(KERN_CONT "Int: type %d, pol %d, trig %d, bus %02x," | 166 | apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x," |
167 | " IRQ %02x, APIC ID %x, APIC INT %02x\n", | 167 | " IRQ %02x, APIC ID %x, APIC INT %02x\n", |
168 | mp_irq->mp_irqtype, mp_irq->mp_irqflag & 3, | 168 | mp_irq->mp_irqtype, mp_irq->mp_irqflag & 3, |
169 | (mp_irq->mp_irqflag >> 2) & 3, mp_irq->mp_srcbus, | 169 | (mp_irq->mp_irqflag >> 2) & 3, mp_irq->mp_srcbus, |
@@ -235,7 +235,7 @@ static void __init MP_intsrc_info(struct mpc_config_intsrc *m) | |||
235 | 235 | ||
236 | static void __init MP_lintsrc_info(struct mpc_config_lintsrc *m) | 236 | static void __init MP_lintsrc_info(struct mpc_config_lintsrc *m) |
237 | { | 237 | { |
238 | printk(KERN_INFO "Lint: type %d, pol %d, trig %d, bus %02x," | 238 | apic_printk(APIC_VERBOSE, "Lint: type %d, pol %d, trig %d, bus %02x," |
239 | " IRQ %02x, APIC ID %x, APIC LINT %02x\n", | 239 | " IRQ %02x, APIC ID %x, APIC LINT %02x\n", |
240 | m->mpc_irqtype, m->mpc_irqflag & 3, | 240 | m->mpc_irqtype, m->mpc_irqflag & 3, |
241 | (m->mpc_irqflag >> 2) & 3, m->mpc_srcbusid, | 241 | (m->mpc_irqflag >> 2) & 3, m->mpc_srcbusid, |
@@ -695,7 +695,8 @@ static int __init smp_scan_config(unsigned long base, unsigned long length, | |||
695 | unsigned int *bp = phys_to_virt(base); | 695 | unsigned int *bp = phys_to_virt(base); |
696 | struct intel_mp_floating *mpf; | 696 | struct intel_mp_floating *mpf; |
697 | 697 | ||
698 | printk(KERN_DEBUG "Scan SMP from %p for %ld bytes.\n", bp, length); | 698 | apic_printk(APIC_VERBOSE, "Scan SMP from %p for %ld bytes.\n", |
699 | bp, length); | ||
699 | BUILD_BUG_ON(sizeof(*mpf) != 16); | 700 | BUILD_BUG_ON(sizeof(*mpf) != 16); |
700 | 701 | ||
701 | while (length > 0) { | 702 | while (length > 0) { |
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index b67a4b1d4eae..02d19328525d 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c | |||
@@ -1350,7 +1350,7 @@ static void calgary_init_bitmap_from_tce_table(struct iommu_table *tbl) | |||
1350 | * Function for kdump case. Get the tce tables from first kernel | 1350 | * Function for kdump case. Get the tce tables from first kernel |
1351 | * by reading the contents of the base adress register of calgary iommu | 1351 | * by reading the contents of the base adress register of calgary iommu |
1352 | */ | 1352 | */ |
1353 | static void get_tce_space_from_tar() | 1353 | static void get_tce_space_from_tar(void) |
1354 | { | 1354 | { |
1355 | int bus; | 1355 | int bus; |
1356 | void __iomem *target; | 1356 | void __iomem *target; |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 2d888586385d..68b48e3fbcbd 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -604,6 +604,14 @@ void __init setup_arch(char **cmdline_p) | |||
604 | early_cpu_init(); | 604 | early_cpu_init(); |
605 | early_ioremap_init(); | 605 | early_ioremap_init(); |
606 | 606 | ||
607 | #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) | ||
608 | /* | ||
609 | * Must be before kernel pagetables are setup | ||
610 | * or fixmap area is touched. | ||
611 | */ | ||
612 | vmi_init(); | ||
613 | #endif | ||
614 | |||
607 | ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); | 615 | ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); |
608 | screen_info = boot_params.screen_info; | 616 | screen_info = boot_params.screen_info; |
609 | edid_info = boot_params.edid_info; | 617 | edid_info = boot_params.edid_info; |
@@ -817,14 +825,6 @@ void __init setup_arch(char **cmdline_p) | |||
817 | kvmclock_init(); | 825 | kvmclock_init(); |
818 | #endif | 826 | #endif |
819 | 827 | ||
820 | #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) | ||
821 | /* | ||
822 | * Must be after max_low_pfn is determined, and before kernel | ||
823 | * pagetables are setup. | ||
824 | */ | ||
825 | vmi_init(); | ||
826 | #endif | ||
827 | |||
828 | paravirt_pagetable_setup_start(swapper_pg_dir); | 828 | paravirt_pagetable_setup_start(swapper_pg_dir); |
829 | paging_init(); | 829 | paging_init(); |
830 | paravirt_pagetable_setup_done(swapper_pg_dir); | 830 | paravirt_pagetable_setup_done(swapper_pg_dir); |
@@ -861,12 +861,6 @@ void __init setup_arch(char **cmdline_p) | |||
861 | init_apic_mappings(); | 861 | init_apic_mappings(); |
862 | ioapic_init_mappings(); | 862 | ioapic_init_mappings(); |
863 | 863 | ||
864 | #if defined(CONFIG_SMP) && defined(CONFIG_X86_PC) && defined(CONFIG_X86_32) | ||
865 | if (def_to_bigsmp) | ||
866 | printk(KERN_WARNING "More than 8 CPUs detected and " | ||
867 | "CONFIG_X86_PC cannot handle it.\nUse " | ||
868 | "CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n"); | ||
869 | #endif | ||
870 | kvm_guest_init(); | 864 | kvm_guest_init(); |
871 | 865 | ||
872 | e820_reserve_resources(); | 866 | e820_reserve_resources(); |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 332512767f4f..91055d7fc1b0 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -326,12 +326,16 @@ static void __cpuinit start_secondary(void *unused) | |||
326 | * for which cpus receive the IPI. Holding this | 326 | * for which cpus receive the IPI. Holding this |
327 | * lock helps us to not include this cpu in a currently in progress | 327 | * lock helps us to not include this cpu in a currently in progress |
328 | * smp_call_function(). | 328 | * smp_call_function(). |
329 | * | ||
330 | * We need to hold vector_lock so there the set of online cpus | ||
331 | * does not change while we are assigning vectors to cpus. Holding | ||
332 | * this lock ensures we don't half assign or remove an irq from a cpu. | ||
329 | */ | 333 | */ |
330 | ipi_call_lock_irq(); | 334 | ipi_call_lock_irq(); |
331 | #ifdef CONFIG_X86_IO_APIC | 335 | lock_vector_lock(); |
332 | setup_vector_irq(smp_processor_id()); | 336 | __setup_vector_irq(smp_processor_id()); |
333 | #endif | ||
334 | cpu_set(smp_processor_id(), cpu_online_map); | 337 | cpu_set(smp_processor_id(), cpu_online_map); |
338 | unlock_vector_lock(); | ||
335 | ipi_call_unlock_irq(); | 339 | ipi_call_unlock_irq(); |
336 | per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; | 340 | per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; |
337 | 341 | ||
@@ -990,7 +994,17 @@ int __cpuinit native_cpu_up(unsigned int cpu) | |||
990 | flush_tlb_all(); | 994 | flush_tlb_all(); |
991 | low_mappings = 1; | 995 | low_mappings = 1; |
992 | 996 | ||
997 | #ifdef CONFIG_X86_PC | ||
998 | if (def_to_bigsmp && apicid > 8) { | ||
999 | printk(KERN_WARNING | ||
1000 | "More than 8 CPUs detected - skipping them.\n" | ||
1001 | "Use CONFIG_X86_GENERICARCH and CONFIG_X86_BIGSMP.\n"); | ||
1002 | err = -1; | ||
1003 | } else | ||
1004 | err = do_boot_cpu(apicid, cpu); | ||
1005 | #else | ||
993 | err = do_boot_cpu(apicid, cpu); | 1006 | err = do_boot_cpu(apicid, cpu); |
1007 | #endif | ||
994 | 1008 | ||
995 | zap_low_mappings(); | 1009 | zap_low_mappings(); |
996 | low_mappings = 0; | 1010 | low_mappings = 0; |
@@ -1336,7 +1350,9 @@ int __cpu_disable(void) | |||
1336 | remove_siblinginfo(cpu); | 1350 | remove_siblinginfo(cpu); |
1337 | 1351 | ||
1338 | /* It's now safe to remove this processor from the online map */ | 1352 | /* It's now safe to remove this processor from the online map */ |
1353 | lock_vector_lock(); | ||
1339 | remove_cpu_from_maps(cpu); | 1354 | remove_cpu_from_maps(cpu); |
1355 | unlock_vector_lock(); | ||
1340 | fixup_irqs(cpu_online_map); | 1356 | fixup_irqs(cpu_online_map); |
1341 | return 0; | 1357 | return 0; |
1342 | } | 1358 | } |
diff --git a/arch/x86/kernel/vmi_32.c b/arch/x86/kernel/vmi_32.c index 0a1b1a9d922d..6ca515d6db54 100644 --- a/arch/x86/kernel/vmi_32.c +++ b/arch/x86/kernel/vmi_32.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <asm/timer.h> | 37 | #include <asm/timer.h> |
38 | #include <asm/vmi_time.h> | 38 | #include <asm/vmi_time.h> |
39 | #include <asm/kmap_types.h> | 39 | #include <asm/kmap_types.h> |
40 | #include <asm/setup.h> | ||
40 | 41 | ||
41 | /* Convenient for calling VMI functions indirectly in the ROM */ | 42 | /* Convenient for calling VMI functions indirectly in the ROM */ |
42 | typedef u32 __attribute__((regparm(1))) (VROMFUNC)(void); | 43 | typedef u32 __attribute__((regparm(1))) (VROMFUNC)(void); |
@@ -683,7 +684,7 @@ void vmi_bringup(void) | |||
683 | { | 684 | { |
684 | /* We must establish the lowmem mapping for MMU ops to work */ | 685 | /* We must establish the lowmem mapping for MMU ops to work */ |
685 | if (vmi_ops.set_linear_mapping) | 686 | if (vmi_ops.set_linear_mapping) |
686 | vmi_ops.set_linear_mapping(0, (void *)__PAGE_OFFSET, max_low_pfn, 0); | 687 | vmi_ops.set_linear_mapping(0, (void *)__PAGE_OFFSET, MAXMEM_PFN, 0); |
687 | } | 688 | } |
688 | 689 | ||
689 | /* | 690 | /* |
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile index 2977ea37791f..dfb932dcf136 100644 --- a/arch/x86/mm/Makefile +++ b/arch/x86/mm/Makefile | |||
@@ -1,7 +1,6 @@ | |||
1 | obj-y := init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \ | 1 | obj-y := init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \ |
2 | pat.o pgtable.o | 2 | pat.o pgtable.o gup.o |
3 | 3 | ||
4 | obj-$(CONFIG_HAVE_GET_USER_PAGES_FAST) += gup.o | ||
5 | obj-$(CONFIG_X86_32) += pgtable_32.o | 4 | obj-$(CONFIG_X86_32) += pgtable_32.o |
6 | 5 | ||
7 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o | 6 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o |
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index 557b2abceef8..d50302774fe2 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c | |||
@@ -207,6 +207,9 @@ static void pgd_prepopulate_pmd(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmds[]) | |||
207 | unsigned long addr; | 207 | unsigned long addr; |
208 | int i; | 208 | int i; |
209 | 209 | ||
210 | if (PREALLOCATED_PMDS == 0) /* Work around gcc-3.4.x bug */ | ||
211 | return; | ||
212 | |||
210 | pud = pud_offset(pgd, 0); | 213 | pud = pud_offset(pgd, 0); |
211 | 214 | ||
212 | for (addr = i = 0; i < PREALLOCATED_PMDS; | 215 | for (addr = i = 0; i < PREALLOCATED_PMDS; |
diff --git a/drivers/char/agp/agp.h b/drivers/char/agp/agp.h index 81e14bea54bd..4bada0e8b812 100644 --- a/drivers/char/agp/agp.h +++ b/drivers/char/agp/agp.h | |||
@@ -148,6 +148,9 @@ struct agp_bridge_data { | |||
148 | char minor_version; | 148 | char minor_version; |
149 | struct list_head list; | 149 | struct list_head list; |
150 | u32 apbase_config; | 150 | u32 apbase_config; |
151 | /* list of agp_memory mapped to the aperture */ | ||
152 | struct list_head mapped_list; | ||
153 | spinlock_t mapped_lock; | ||
151 | }; | 154 | }; |
152 | 155 | ||
153 | #define KB(x) ((x) * 1024) | 156 | #define KB(x) ((x) * 1024) |
diff --git a/drivers/char/agp/ali-agp.c b/drivers/char/agp/ali-agp.c index 1ffb381130c3..31dcd9142d54 100644 --- a/drivers/char/agp/ali-agp.c +++ b/drivers/char/agp/ali-agp.c | |||
@@ -110,7 +110,8 @@ static int ali_configure(void) | |||
110 | 110 | ||
111 | nlvm_addr+= agp_bridge->gart_bus_addr; | 111 | nlvm_addr+= agp_bridge->gart_bus_addr; |
112 | nlvm_addr|=(agp_bridge->gart_bus_addr>>12); | 112 | nlvm_addr|=(agp_bridge->gart_bus_addr>>12); |
113 | printk(KERN_INFO PFX "nlvm top &base = %8x\n",nlvm_addr); | 113 | dev_info(&agp_bridge->dev->dev, "nlvm top &base = %8x\n", |
114 | nlvm_addr); | ||
114 | } | 115 | } |
115 | #endif | 116 | #endif |
116 | 117 | ||
@@ -315,8 +316,8 @@ static int __devinit agp_ali_probe(struct pci_dev *pdev, | |||
315 | goto found; | 316 | goto found; |
316 | } | 317 | } |
317 | 318 | ||
318 | printk(KERN_ERR PFX "Unsupported ALi chipset (device id: %04x)\n", | 319 | dev_err(&pdev->dev, "unsupported ALi chipset [%04x/%04x])\n", |
319 | pdev->device); | 320 | pdev->vendor, pdev->device); |
320 | return -ENODEV; | 321 | return -ENODEV; |
321 | 322 | ||
322 | 323 | ||
@@ -361,8 +362,7 @@ found: | |||
361 | bridge->driver = &ali_generic_bridge; | 362 | bridge->driver = &ali_generic_bridge; |
362 | } | 363 | } |
363 | 364 | ||
364 | printk(KERN_INFO PFX "Detected ALi %s chipset\n", | 365 | dev_info(&pdev->dev, "ALi %s chipset\n", devs[j].chipset_name); |
365 | devs[j].chipset_name); | ||
366 | 366 | ||
367 | /* Fill in the mode register */ | 367 | /* Fill in the mode register */ |
368 | pci_read_config_dword(pdev, | 368 | pci_read_config_dword(pdev, |
diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c index 39a0718bc616..e280531843be 100644 --- a/drivers/char/agp/amd-k7-agp.c +++ b/drivers/char/agp/amd-k7-agp.c | |||
@@ -419,8 +419,8 @@ static int __devinit agp_amdk7_probe(struct pci_dev *pdev, | |||
419 | return -ENODEV; | 419 | return -ENODEV; |
420 | 420 | ||
421 | j = ent - agp_amdk7_pci_table; | 421 | j = ent - agp_amdk7_pci_table; |
422 | printk(KERN_INFO PFX "Detected AMD %s chipset\n", | 422 | dev_info(&pdev->dev, "AMD %s chipset\n", |
423 | amd_agp_device_ids[j].chipset_name); | 423 | amd_agp_device_ids[j].chipset_name); |
424 | 424 | ||
425 | bridge = agp_alloc_bridge(); | 425 | bridge = agp_alloc_bridge(); |
426 | if (!bridge) | 426 | if (!bridge) |
@@ -442,7 +442,7 @@ static int __devinit agp_amdk7_probe(struct pci_dev *pdev, | |||
442 | while (!cap_ptr) { | 442 | while (!cap_ptr) { |
443 | gfxcard = pci_get_class(PCI_CLASS_DISPLAY_VGA<<8, gfxcard); | 443 | gfxcard = pci_get_class(PCI_CLASS_DISPLAY_VGA<<8, gfxcard); |
444 | if (!gfxcard) { | 444 | if (!gfxcard) { |
445 | printk (KERN_INFO PFX "Couldn't find an AGP VGA controller.\n"); | 445 | dev_info(&pdev->dev, "no AGP VGA controller\n"); |
446 | return -ENODEV; | 446 | return -ENODEV; |
447 | } | 447 | } |
448 | cap_ptr = pci_find_capability(gfxcard, PCI_CAP_ID_AGP); | 448 | cap_ptr = pci_find_capability(gfxcard, PCI_CAP_ID_AGP); |
@@ -453,7 +453,7 @@ static int __devinit agp_amdk7_probe(struct pci_dev *pdev, | |||
453 | (if necessary at all). */ | 453 | (if necessary at all). */ |
454 | if (gfxcard->vendor == PCI_VENDOR_ID_NVIDIA) { | 454 | if (gfxcard->vendor == PCI_VENDOR_ID_NVIDIA) { |
455 | agp_bridge->flags |= AGP_ERRATA_1X; | 455 | agp_bridge->flags |= AGP_ERRATA_1X; |
456 | printk (KERN_INFO PFX "AMD 751 chipset with NVidia GeForce detected. Forcing to 1X due to errata.\n"); | 456 | dev_info(&pdev->dev, "AMD 751 chipset with NVidia GeForce; forcing 1X due to errata\n"); |
457 | } | 457 | } |
458 | pci_dev_put(gfxcard); | 458 | pci_dev_put(gfxcard); |
459 | } | 459 | } |
@@ -469,7 +469,7 @@ static int __devinit agp_amdk7_probe(struct pci_dev *pdev, | |||
469 | agp_bridge->flags = AGP_ERRATA_FASTWRITES; | 469 | agp_bridge->flags = AGP_ERRATA_FASTWRITES; |
470 | agp_bridge->flags |= AGP_ERRATA_SBA; | 470 | agp_bridge->flags |= AGP_ERRATA_SBA; |
471 | agp_bridge->flags |= AGP_ERRATA_1X; | 471 | agp_bridge->flags |= AGP_ERRATA_1X; |
472 | printk (KERN_INFO PFX "AMD 761 chipset with errata detected - disabling AGP fast writes & SBA and forcing to 1X.\n"); | 472 | dev_info(&pdev->dev, "AMD 761 chipset with errata; disabling AGP fast writes & SBA and forcing to 1X\n"); |
473 | } | 473 | } |
474 | } | 474 | } |
475 | 475 | ||
diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c index 481ffe87c716..7495c522d8e4 100644 --- a/drivers/char/agp/amd64-agp.c +++ b/drivers/char/agp/amd64-agp.c | |||
@@ -34,6 +34,7 @@ | |||
34 | 34 | ||
35 | static struct resource *aperture_resource; | 35 | static struct resource *aperture_resource; |
36 | static int __initdata agp_try_unsupported = 1; | 36 | static int __initdata agp_try_unsupported = 1; |
37 | static int agp_bridges_found; | ||
37 | 38 | ||
38 | static void amd64_tlbflush(struct agp_memory *temp) | 39 | static void amd64_tlbflush(struct agp_memory *temp) |
39 | { | 40 | { |
@@ -293,12 +294,13 @@ static __devinit int fix_northbridge(struct pci_dev *nb, struct pci_dev *agp, | |||
293 | * so let double check that order, and lets trust the AMD NB settings | 294 | * so let double check that order, and lets trust the AMD NB settings |
294 | */ | 295 | */ |
295 | if (order >=0 && aper + (32ULL<<(20 + order)) > 0x100000000ULL) { | 296 | if (order >=0 && aper + (32ULL<<(20 + order)) > 0x100000000ULL) { |
296 | printk(KERN_INFO "Aperture size %u MB is not right, using settings from NB\n", | 297 | dev_info(&agp->dev, "aperture size %u MB is not right, using settings from NB\n", |
297 | 32 << order); | 298 | 32 << order); |
298 | order = nb_order; | 299 | order = nb_order; |
299 | } | 300 | } |
300 | 301 | ||
301 | printk(KERN_INFO PFX "Aperture from AGP @ %Lx size %u MB\n", aper, 32 << order); | 302 | dev_info(&agp->dev, "aperture from AGP @ %Lx size %u MB\n", |
303 | aper, 32 << order); | ||
302 | if (order < 0 || !agp_aperture_valid(aper, (32*1024*1024)<<order)) | 304 | if (order < 0 || !agp_aperture_valid(aper, (32*1024*1024)<<order)) |
303 | return -1; | 305 | return -1; |
304 | 306 | ||
@@ -319,10 +321,10 @@ static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr) | |||
319 | for (i = 0; i < num_k8_northbridges; i++) { | 321 | for (i = 0; i < num_k8_northbridges; i++) { |
320 | struct pci_dev *dev = k8_northbridges[i]; | 322 | struct pci_dev *dev = k8_northbridges[i]; |
321 | if (fix_northbridge(dev, pdev, cap_ptr) < 0) { | 323 | if (fix_northbridge(dev, pdev, cap_ptr) < 0) { |
322 | printk(KERN_ERR PFX "No usable aperture found.\n"); | 324 | dev_err(&dev->dev, "no usable aperture found\n"); |
323 | #ifdef __x86_64__ | 325 | #ifdef __x86_64__ |
324 | /* should port this to i386 */ | 326 | /* should port this to i386 */ |
325 | printk(KERN_ERR PFX "Consider rebooting with iommu=memaper=2 to get a good aperture.\n"); | 327 | dev_err(&dev->dev, "consider rebooting with iommu=memaper=2 to get a good aperture\n"); |
326 | #endif | 328 | #endif |
327 | return -1; | 329 | return -1; |
328 | } | 330 | } |
@@ -345,14 +347,14 @@ static void __devinit amd8151_init(struct pci_dev *pdev, struct agp_bridge_data | |||
345 | default: revstring="??"; break; | 347 | default: revstring="??"; break; |
346 | } | 348 | } |
347 | 349 | ||
348 | printk (KERN_INFO PFX "Detected AMD 8151 AGP Bridge rev %s\n", revstring); | 350 | dev_info(&pdev->dev, "AMD 8151 AGP Bridge rev %s\n", revstring); |
349 | 351 | ||
350 | /* | 352 | /* |
351 | * Work around errata. | 353 | * Work around errata. |
352 | * Chips before B2 stepping incorrectly reporting v3.5 | 354 | * Chips before B2 stepping incorrectly reporting v3.5 |
353 | */ | 355 | */ |
354 | if (pdev->revision < 0x13) { | 356 | if (pdev->revision < 0x13) { |
355 | printk (KERN_INFO PFX "Correcting AGP revision (reports 3.5, is really 3.0)\n"); | 357 | dev_info(&pdev->dev, "correcting AGP revision (reports 3.5, is really 3.0)\n"); |
356 | bridge->major_version = 3; | 358 | bridge->major_version = 3; |
357 | bridge->minor_version = 0; | 359 | bridge->minor_version = 0; |
358 | } | 360 | } |
@@ -375,11 +377,11 @@ static int __devinit uli_agp_init(struct pci_dev *pdev) | |||
375 | struct pci_dev *dev1; | 377 | struct pci_dev *dev1; |
376 | int i; | 378 | int i; |
377 | unsigned size = amd64_fetch_size(); | 379 | unsigned size = amd64_fetch_size(); |
378 | printk(KERN_INFO "Setting up ULi AGP.\n"); | 380 | |
381 | dev_info(&pdev->dev, "setting up ULi AGP\n"); | ||
379 | dev1 = pci_get_slot (pdev->bus,PCI_DEVFN(0,0)); | 382 | dev1 = pci_get_slot (pdev->bus,PCI_DEVFN(0,0)); |
380 | if (dev1 == NULL) { | 383 | if (dev1 == NULL) { |
381 | printk(KERN_INFO PFX "Detected a ULi chipset, " | 384 | dev_info(&pdev->dev, "can't find ULi secondary device\n"); |
382 | "but could not fine the secondary device.\n"); | ||
383 | return -ENODEV; | 385 | return -ENODEV; |
384 | } | 386 | } |
385 | 387 | ||
@@ -388,7 +390,7 @@ static int __devinit uli_agp_init(struct pci_dev *pdev) | |||
388 | break; | 390 | break; |
389 | 391 | ||
390 | if (i == ARRAY_SIZE(uli_sizes)) { | 392 | if (i == ARRAY_SIZE(uli_sizes)) { |
391 | printk(KERN_INFO PFX "No ULi size found for %d\n", size); | 393 | dev_info(&pdev->dev, "no ULi size found for %d\n", size); |
392 | return -ENODEV; | 394 | return -ENODEV; |
393 | } | 395 | } |
394 | 396 | ||
@@ -433,13 +435,11 @@ static int nforce3_agp_init(struct pci_dev *pdev) | |||
433 | int i; | 435 | int i; |
434 | unsigned size = amd64_fetch_size(); | 436 | unsigned size = amd64_fetch_size(); |
435 | 437 | ||
436 | printk(KERN_INFO PFX "Setting up Nforce3 AGP.\n"); | 438 | dev_info(&pdev->dev, "setting up Nforce3 AGP\n"); |
437 | 439 | ||
438 | dev1 = pci_get_slot(pdev->bus, PCI_DEVFN(11, 0)); | 440 | dev1 = pci_get_slot(pdev->bus, PCI_DEVFN(11, 0)); |
439 | if (dev1 == NULL) { | 441 | if (dev1 == NULL) { |
440 | printk(KERN_INFO PFX "agpgart: Detected an NVIDIA " | 442 | dev_info(&pdev->dev, "can't find Nforce3 secondary device\n"); |
441 | "nForce3 chipset, but could not find " | ||
442 | "the secondary device.\n"); | ||
443 | return -ENODEV; | 443 | return -ENODEV; |
444 | } | 444 | } |
445 | 445 | ||
@@ -448,7 +448,7 @@ static int nforce3_agp_init(struct pci_dev *pdev) | |||
448 | break; | 448 | break; |
449 | 449 | ||
450 | if (i == ARRAY_SIZE(nforce3_sizes)) { | 450 | if (i == ARRAY_SIZE(nforce3_sizes)) { |
451 | printk(KERN_INFO PFX "No NForce3 size found for %d\n", size); | 451 | dev_info(&pdev->dev, "no NForce3 size found for %d\n", size); |
452 | return -ENODEV; | 452 | return -ENODEV; |
453 | } | 453 | } |
454 | 454 | ||
@@ -462,7 +462,7 @@ static int nforce3_agp_init(struct pci_dev *pdev) | |||
462 | 462 | ||
463 | /* if x86-64 aperture base is beyond 4G, exit here */ | 463 | /* if x86-64 aperture base is beyond 4G, exit here */ |
464 | if ( (apbase & 0x7fff) >> (32 - 25) ) { | 464 | if ( (apbase & 0x7fff) >> (32 - 25) ) { |
465 | printk(KERN_INFO PFX "aperture base > 4G\n"); | 465 | dev_info(&pdev->dev, "aperture base > 4G\n"); |
466 | return -ENODEV; | 466 | return -ENODEV; |
467 | } | 467 | } |
468 | 468 | ||
@@ -489,6 +489,7 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev, | |||
489 | { | 489 | { |
490 | struct agp_bridge_data *bridge; | 490 | struct agp_bridge_data *bridge; |
491 | u8 cap_ptr; | 491 | u8 cap_ptr; |
492 | int err; | ||
492 | 493 | ||
493 | cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); | 494 | cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); |
494 | if (!cap_ptr) | 495 | if (!cap_ptr) |
@@ -504,7 +505,8 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev, | |||
504 | pdev->device == PCI_DEVICE_ID_AMD_8151_0) { | 505 | pdev->device == PCI_DEVICE_ID_AMD_8151_0) { |
505 | amd8151_init(pdev, bridge); | 506 | amd8151_init(pdev, bridge); |
506 | } else { | 507 | } else { |
507 | printk(KERN_INFO PFX "Detected AGP bridge %x\n", pdev->devfn); | 508 | dev_info(&pdev->dev, "AGP bridge [%04x/%04x]\n", |
509 | pdev->vendor, pdev->device); | ||
508 | } | 510 | } |
509 | 511 | ||
510 | bridge->driver = &amd_8151_driver; | 512 | bridge->driver = &amd_8151_driver; |
@@ -536,7 +538,12 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev, | |||
536 | } | 538 | } |
537 | 539 | ||
538 | pci_set_drvdata(pdev, bridge); | 540 | pci_set_drvdata(pdev, bridge); |
539 | return agp_add_bridge(bridge); | 541 | err = agp_add_bridge(bridge); |
542 | if (err < 0) | ||
543 | return err; | ||
544 | |||
545 | agp_bridges_found++; | ||
546 | return 0; | ||
540 | } | 547 | } |
541 | 548 | ||
542 | static void __devexit agp_amd64_remove(struct pci_dev *pdev) | 549 | static void __devexit agp_amd64_remove(struct pci_dev *pdev) |
@@ -713,7 +720,11 @@ int __init agp_amd64_init(void) | |||
713 | 720 | ||
714 | if (agp_off) | 721 | if (agp_off) |
715 | return -EINVAL; | 722 | return -EINVAL; |
716 | if (pci_register_driver(&agp_amd64_pci_driver) < 0) { | 723 | err = pci_register_driver(&agp_amd64_pci_driver); |
724 | if (err < 0) | ||
725 | return err; | ||
726 | |||
727 | if (agp_bridges_found == 0) { | ||
717 | struct pci_dev *dev; | 728 | struct pci_dev *dev; |
718 | if (!agp_try_unsupported && !agp_try_unsupported_boot) { | 729 | if (!agp_try_unsupported && !agp_try_unsupported_boot) { |
719 | printk(KERN_INFO PFX "No supported AGP bridge found.\n"); | 730 | printk(KERN_INFO PFX "No supported AGP bridge found.\n"); |
diff --git a/drivers/char/agp/ati-agp.c b/drivers/char/agp/ati-agp.c index 3a4566c0d84f..6ecbcafb34b1 100644 --- a/drivers/char/agp/ati-agp.c +++ b/drivers/char/agp/ati-agp.c | |||
@@ -486,8 +486,8 @@ static int __devinit agp_ati_probe(struct pci_dev *pdev, | |||
486 | goto found; | 486 | goto found; |
487 | } | 487 | } |
488 | 488 | ||
489 | printk(KERN_ERR PFX | 489 | dev_err(&pdev->dev, "unsupported Ati chipset [%04x/%04x])\n", |
490 | "Unsupported Ati chipset (device id: %04x)\n", pdev->device); | 490 | pdev->vendor, pdev->device); |
491 | return -ENODEV; | 491 | return -ENODEV; |
492 | 492 | ||
493 | found: | 493 | found: |
@@ -500,8 +500,7 @@ found: | |||
500 | 500 | ||
501 | bridge->driver = &ati_generic_bridge; | 501 | bridge->driver = &ati_generic_bridge; |
502 | 502 | ||
503 | printk(KERN_INFO PFX "Detected Ati %s chipset\n", | 503 | dev_info(&pdev->dev, "Ati %s chipset\n", devs[j].chipset_name); |
504 | devs[j].chipset_name); | ||
505 | 504 | ||
506 | /* Fill in the mode register */ | 505 | /* Fill in the mode register */ |
507 | pci_read_config_dword(pdev, | 506 | pci_read_config_dword(pdev, |
diff --git a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c index 1ec87104e68c..3a3cc03d401c 100644 --- a/drivers/char/agp/backend.c +++ b/drivers/char/agp/backend.c | |||
@@ -144,7 +144,8 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge) | |||
144 | void *addr = bridge->driver->agp_alloc_page(bridge); | 144 | void *addr = bridge->driver->agp_alloc_page(bridge); |
145 | 145 | ||
146 | if (!addr) { | 146 | if (!addr) { |
147 | printk(KERN_ERR PFX "unable to get memory for scratch page.\n"); | 147 | dev_err(&bridge->dev->dev, |
148 | "can't get memory for scratch page\n"); | ||
148 | return -ENOMEM; | 149 | return -ENOMEM; |
149 | } | 150 | } |
150 | 151 | ||
@@ -155,13 +156,13 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge) | |||
155 | 156 | ||
156 | size_value = bridge->driver->fetch_size(); | 157 | size_value = bridge->driver->fetch_size(); |
157 | if (size_value == 0) { | 158 | if (size_value == 0) { |
158 | printk(KERN_ERR PFX "unable to determine aperture size.\n"); | 159 | dev_err(&bridge->dev->dev, "can't determine aperture size\n"); |
159 | rc = -EINVAL; | 160 | rc = -EINVAL; |
160 | goto err_out; | 161 | goto err_out; |
161 | } | 162 | } |
162 | if (bridge->driver->create_gatt_table(bridge)) { | 163 | if (bridge->driver->create_gatt_table(bridge)) { |
163 | printk(KERN_ERR PFX | 164 | dev_err(&bridge->dev->dev, |
164 | "unable to get memory for graphics translation table.\n"); | 165 | "can't get memory for graphics translation table\n"); |
165 | rc = -ENOMEM; | 166 | rc = -ENOMEM; |
166 | goto err_out; | 167 | goto err_out; |
167 | } | 168 | } |
@@ -169,7 +170,8 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge) | |||
169 | 170 | ||
170 | bridge->key_list = vmalloc(PAGE_SIZE * 4); | 171 | bridge->key_list = vmalloc(PAGE_SIZE * 4); |
171 | if (bridge->key_list == NULL) { | 172 | if (bridge->key_list == NULL) { |
172 | printk(KERN_ERR PFX "error allocating memory for key lists.\n"); | 173 | dev_err(&bridge->dev->dev, |
174 | "can't allocate memory for key lists\n"); | ||
173 | rc = -ENOMEM; | 175 | rc = -ENOMEM; |
174 | goto err_out; | 176 | goto err_out; |
175 | } | 177 | } |
@@ -179,10 +181,12 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge) | |||
179 | memset(bridge->key_list, 0, PAGE_SIZE * 4); | 181 | memset(bridge->key_list, 0, PAGE_SIZE * 4); |
180 | 182 | ||
181 | if (bridge->driver->configure()) { | 183 | if (bridge->driver->configure()) { |
182 | printk(KERN_ERR PFX "error configuring host chipset.\n"); | 184 | dev_err(&bridge->dev->dev, "error configuring host chipset\n"); |
183 | rc = -EINVAL; | 185 | rc = -EINVAL; |
184 | goto err_out; | 186 | goto err_out; |
185 | } | 187 | } |
188 | INIT_LIST_HEAD(&bridge->mapped_list); | ||
189 | spin_lock_init(&bridge->mapped_lock); | ||
186 | 190 | ||
187 | return 0; | 191 | return 0; |
188 | 192 | ||
@@ -269,25 +273,27 @@ int agp_add_bridge(struct agp_bridge_data *bridge) | |||
269 | 273 | ||
270 | /* Grab reference on the chipset driver. */ | 274 | /* Grab reference on the chipset driver. */ |
271 | if (!try_module_get(bridge->driver->owner)) { | 275 | if (!try_module_get(bridge->driver->owner)) { |
272 | printk (KERN_INFO PFX "Couldn't lock chipset driver.\n"); | 276 | dev_info(&bridge->dev->dev, "can't lock chipset driver\n"); |
273 | return -EINVAL; | 277 | return -EINVAL; |
274 | } | 278 | } |
275 | 279 | ||
276 | error = agp_backend_initialize(bridge); | 280 | error = agp_backend_initialize(bridge); |
277 | if (error) { | 281 | if (error) { |
278 | printk (KERN_INFO PFX "agp_backend_initialize() failed.\n"); | 282 | dev_info(&bridge->dev->dev, |
283 | "agp_backend_initialize() failed\n"); | ||
279 | goto err_out; | 284 | goto err_out; |
280 | } | 285 | } |
281 | 286 | ||
282 | if (list_empty(&agp_bridges)) { | 287 | if (list_empty(&agp_bridges)) { |
283 | error = agp_frontend_initialize(); | 288 | error = agp_frontend_initialize(); |
284 | if (error) { | 289 | if (error) { |
285 | printk (KERN_INFO PFX "agp_frontend_initialize() failed.\n"); | 290 | dev_info(&bridge->dev->dev, |
291 | "agp_frontend_initialize() failed\n"); | ||
286 | goto frontend_err; | 292 | goto frontend_err; |
287 | } | 293 | } |
288 | 294 | ||
289 | printk(KERN_INFO PFX "AGP aperture is %dM @ 0x%lx\n", | 295 | dev_info(&bridge->dev->dev, "AGP aperture is %dM @ 0x%lx\n", |
290 | bridge->driver->fetch_size(), bridge->gart_bus_addr); | 296 | bridge->driver->fetch_size(), bridge->gart_bus_addr); |
291 | 297 | ||
292 | } | 298 | } |
293 | 299 | ||
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index eaa1a355bb32..118dbde25dc7 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c | |||
@@ -429,6 +429,10 @@ int agp_bind_memory(struct agp_memory *curr, off_t pg_start) | |||
429 | 429 | ||
430 | curr->is_bound = true; | 430 | curr->is_bound = true; |
431 | curr->pg_start = pg_start; | 431 | curr->pg_start = pg_start; |
432 | spin_lock(&agp_bridge->mapped_lock); | ||
433 | list_add(&curr->mapped_list, &agp_bridge->mapped_list); | ||
434 | spin_unlock(&agp_bridge->mapped_lock); | ||
435 | |||
432 | return 0; | 436 | return 0; |
433 | } | 437 | } |
434 | EXPORT_SYMBOL(agp_bind_memory); | 438 | EXPORT_SYMBOL(agp_bind_memory); |
@@ -461,10 +465,34 @@ int agp_unbind_memory(struct agp_memory *curr) | |||
461 | 465 | ||
462 | curr->is_bound = false; | 466 | curr->is_bound = false; |
463 | curr->pg_start = 0; | 467 | curr->pg_start = 0; |
468 | spin_lock(&curr->bridge->mapped_lock); | ||
469 | list_del(&curr->mapped_list); | ||
470 | spin_unlock(&curr->bridge->mapped_lock); | ||
464 | return 0; | 471 | return 0; |
465 | } | 472 | } |
466 | EXPORT_SYMBOL(agp_unbind_memory); | 473 | EXPORT_SYMBOL(agp_unbind_memory); |
467 | 474 | ||
475 | /** | ||
476 | * agp_rebind_emmory - Rewrite the entire GATT, useful on resume | ||
477 | */ | ||
478 | int agp_rebind_memory(void) | ||
479 | { | ||
480 | struct agp_memory *curr; | ||
481 | int ret_val = 0; | ||
482 | |||
483 | spin_lock(&agp_bridge->mapped_lock); | ||
484 | list_for_each_entry(curr, &agp_bridge->mapped_list, mapped_list) { | ||
485 | ret_val = curr->bridge->driver->insert_memory(curr, | ||
486 | curr->pg_start, | ||
487 | curr->type); | ||
488 | if (ret_val != 0) | ||
489 | break; | ||
490 | } | ||
491 | spin_unlock(&agp_bridge->mapped_lock); | ||
492 | return ret_val; | ||
493 | } | ||
494 | EXPORT_SYMBOL(agp_rebind_memory); | ||
495 | |||
468 | /* End - Routines for handling swapping of agp_memory into the GATT */ | 496 | /* End - Routines for handling swapping of agp_memory into the GATT */ |
469 | 497 | ||
470 | 498 | ||
@@ -771,8 +799,8 @@ void agp_device_command(u32 bridge_agpstat, bool agp_v3) | |||
771 | if (!agp) | 799 | if (!agp) |
772 | continue; | 800 | continue; |
773 | 801 | ||
774 | printk(KERN_INFO PFX "Putting AGP V%d device at %s into %dx mode\n", | 802 | dev_info(&device->dev, "putting AGP V%d device into %dx mode\n", |
775 | agp_v3 ? 3 : 2, pci_name(device), mode); | 803 | agp_v3 ? 3 : 2, mode); |
776 | pci_write_config_dword(device, agp + PCI_AGP_COMMAND, bridge_agpstat); | 804 | pci_write_config_dword(device, agp + PCI_AGP_COMMAND, bridge_agpstat); |
777 | } | 805 | } |
778 | } | 806 | } |
@@ -800,10 +828,8 @@ void agp_generic_enable(struct agp_bridge_data *bridge, u32 requested_mode) | |||
800 | 828 | ||
801 | get_agp_version(agp_bridge); | 829 | get_agp_version(agp_bridge); |
802 | 830 | ||
803 | printk(KERN_INFO PFX "Found an AGP %d.%d compliant device at %s.\n", | 831 | dev_info(&agp_bridge->dev->dev, "AGP %d.%d bridge\n", |
804 | agp_bridge->major_version, | 832 | agp_bridge->major_version, agp_bridge->minor_version); |
805 | agp_bridge->minor_version, | ||
806 | pci_name(agp_bridge->dev)); | ||
807 | 833 | ||
808 | pci_read_config_dword(agp_bridge->dev, | 834 | pci_read_config_dword(agp_bridge->dev, |
809 | agp_bridge->capndx + PCI_AGP_STATUS, &bridge_agpstat); | 835 | agp_bridge->capndx + PCI_AGP_STATUS, &bridge_agpstat); |
@@ -832,8 +858,7 @@ void agp_generic_enable(struct agp_bridge_data *bridge, u32 requested_mode) | |||
832 | pci_write_config_dword(bridge->dev, | 858 | pci_write_config_dword(bridge->dev, |
833 | bridge->capndx+AGPCTRL, temp); | 859 | bridge->capndx+AGPCTRL, temp); |
834 | 860 | ||
835 | printk(KERN_INFO PFX "Device is in legacy mode," | 861 | dev_info(&bridge->dev->dev, "bridge is in legacy mode, falling back to 2.x\n"); |
836 | " falling back to 2.x\n"); | ||
837 | } | 862 | } |
838 | } | 863 | } |
839 | 864 | ||
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index df702642ab8f..016fdf0623a4 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c | |||
@@ -32,8 +32,8 @@ | |||
32 | #define PCI_DEVICE_ID_INTEL_Q35_IG 0x29B2 | 32 | #define PCI_DEVICE_ID_INTEL_Q35_IG 0x29B2 |
33 | #define PCI_DEVICE_ID_INTEL_Q33_HB 0x29D0 | 33 | #define PCI_DEVICE_ID_INTEL_Q33_HB 0x29D0 |
34 | #define PCI_DEVICE_ID_INTEL_Q33_IG 0x29D2 | 34 | #define PCI_DEVICE_ID_INTEL_Q33_IG 0x29D2 |
35 | #define PCI_DEVICE_ID_INTEL_IGD_HB 0x2A40 | 35 | #define PCI_DEVICE_ID_INTEL_GM45_HB 0x2A40 |
36 | #define PCI_DEVICE_ID_INTEL_IGD_IG 0x2A42 | 36 | #define PCI_DEVICE_ID_INTEL_GM45_IG 0x2A42 |
37 | #define PCI_DEVICE_ID_INTEL_IGD_E_HB 0x2E00 | 37 | #define PCI_DEVICE_ID_INTEL_IGD_E_HB 0x2E00 |
38 | #define PCI_DEVICE_ID_INTEL_IGD_E_IG 0x2E02 | 38 | #define PCI_DEVICE_ID_INTEL_IGD_E_IG 0x2E02 |
39 | #define PCI_DEVICE_ID_INTEL_Q45_HB 0x2E10 | 39 | #define PCI_DEVICE_ID_INTEL_Q45_HB 0x2E10 |
@@ -55,7 +55,7 @@ | |||
55 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \ | 55 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \ |
56 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB || \ | 56 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB || \ |
57 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB || \ | 57 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB || \ |
58 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGD_HB) | 58 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB) |
59 | 59 | ||
60 | #define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \ | 60 | #define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \ |
61 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \ | 61 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \ |
@@ -161,7 +161,7 @@ static int intel_i810_fetch_size(void) | |||
161 | values = A_SIZE_FIX(agp_bridge->driver->aperture_sizes); | 161 | values = A_SIZE_FIX(agp_bridge->driver->aperture_sizes); |
162 | 162 | ||
163 | if ((smram_miscc & I810_GMS) == I810_GMS_DISABLE) { | 163 | if ((smram_miscc & I810_GMS) == I810_GMS_DISABLE) { |
164 | printk(KERN_WARNING PFX "i810 is disabled\n"); | 164 | dev_warn(&agp_bridge->dev->dev, "i810 is disabled\n"); |
165 | return 0; | 165 | return 0; |
166 | } | 166 | } |
167 | if ((smram_miscc & I810_GFX_MEM_WIN_SIZE) == I810_GFX_MEM_WIN_32M) { | 167 | if ((smram_miscc & I810_GFX_MEM_WIN_SIZE) == I810_GFX_MEM_WIN_32M) { |
@@ -193,7 +193,8 @@ static int intel_i810_configure(void) | |||
193 | 193 | ||
194 | intel_private.registers = ioremap(temp, 128 * 4096); | 194 | intel_private.registers = ioremap(temp, 128 * 4096); |
195 | if (!intel_private.registers) { | 195 | if (!intel_private.registers) { |
196 | printk(KERN_ERR PFX "Unable to remap memory.\n"); | 196 | dev_err(&intel_private.pcidev->dev, |
197 | "can't remap memory\n"); | ||
197 | return -ENOMEM; | 198 | return -ENOMEM; |
198 | } | 199 | } |
199 | } | 200 | } |
@@ -201,7 +202,8 @@ static int intel_i810_configure(void) | |||
201 | if ((readl(intel_private.registers+I810_DRAM_CTL) | 202 | if ((readl(intel_private.registers+I810_DRAM_CTL) |
202 | & I810_DRAM_ROW_0) == I810_DRAM_ROW_0_SDRAM) { | 203 | & I810_DRAM_ROW_0) == I810_DRAM_ROW_0_SDRAM) { |
203 | /* This will need to be dynamically assigned */ | 204 | /* This will need to be dynamically assigned */ |
204 | printk(KERN_INFO PFX "detected 4MB dedicated video ram.\n"); | 205 | dev_info(&intel_private.pcidev->dev, |
206 | "detected 4MB dedicated video ram\n"); | ||
205 | intel_private.num_dcache_entries = 1024; | 207 | intel_private.num_dcache_entries = 1024; |
206 | } | 208 | } |
207 | pci_read_config_dword(intel_private.pcidev, I810_GMADDR, &temp); | 209 | pci_read_config_dword(intel_private.pcidev, I810_GMADDR, &temp); |
@@ -500,8 +502,8 @@ static void intel_i830_init_gtt_entries(void) | |||
500 | size = 1024 + 512; | 502 | size = 1024 + 512; |
501 | break; | 503 | break; |
502 | default: | 504 | default: |
503 | printk(KERN_INFO PFX "Unknown page table size, " | 505 | dev_info(&intel_private.pcidev->dev, |
504 | "assuming 512KB\n"); | 506 | "unknown page table size, assuming 512KB\n"); |
505 | size = 512; | 507 | size = 512; |
506 | } | 508 | } |
507 | size += 4; /* add in BIOS popup space */ | 509 | size += 4; /* add in BIOS popup space */ |
@@ -515,8 +517,8 @@ static void intel_i830_init_gtt_entries(void) | |||
515 | size = 2048; | 517 | size = 2048; |
516 | break; | 518 | break; |
517 | default: | 519 | default: |
518 | printk(KERN_INFO PFX "Unknown page table size 0x%x, " | 520 | dev_info(&agp_bridge->dev->dev, |
519 | "assuming 512KB\n", | 521 | "unknown page table size 0x%x, assuming 512KB\n", |
520 | (gmch_ctrl & G33_PGETBL_SIZE_MASK)); | 522 | (gmch_ctrl & G33_PGETBL_SIZE_MASK)); |
521 | size = 512; | 523 | size = 512; |
522 | } | 524 | } |
@@ -627,11 +629,11 @@ static void intel_i830_init_gtt_entries(void) | |||
627 | } | 629 | } |
628 | } | 630 | } |
629 | if (gtt_entries > 0) | 631 | if (gtt_entries > 0) |
630 | printk(KERN_INFO PFX "Detected %dK %s memory.\n", | 632 | dev_info(&agp_bridge->dev->dev, "detected %dK %s memory\n", |
631 | gtt_entries / KB(1), local ? "local" : "stolen"); | 633 | gtt_entries / KB(1), local ? "local" : "stolen"); |
632 | else | 634 | else |
633 | printk(KERN_INFO PFX | 635 | dev_info(&agp_bridge->dev->dev, |
634 | "No pre-allocated video memory detected.\n"); | 636 | "no pre-allocated video memory detected\n"); |
635 | gtt_entries /= KB(4); | 637 | gtt_entries /= KB(4); |
636 | 638 | ||
637 | intel_private.gtt_entries = gtt_entries; | 639 | intel_private.gtt_entries = gtt_entries; |
@@ -801,10 +803,12 @@ static int intel_i830_insert_entries(struct agp_memory *mem, off_t pg_start, | |||
801 | num_entries = A_SIZE_FIX(temp)->num_entries; | 803 | num_entries = A_SIZE_FIX(temp)->num_entries; |
802 | 804 | ||
803 | if (pg_start < intel_private.gtt_entries) { | 805 | if (pg_start < intel_private.gtt_entries) { |
804 | printk(KERN_DEBUG PFX "pg_start == 0x%.8lx,intel_private.gtt_entries == 0x%.8x\n", | 806 | dev_printk(KERN_DEBUG, &intel_private.pcidev->dev, |
805 | pg_start, intel_private.gtt_entries); | 807 | "pg_start == 0x%.8lx, intel_private.gtt_entries == 0x%.8x\n", |
808 | pg_start, intel_private.gtt_entries); | ||
806 | 809 | ||
807 | printk(KERN_INFO PFX "Trying to insert into local/stolen memory\n"); | 810 | dev_info(&intel_private.pcidev->dev, |
811 | "trying to insert into local/stolen memory\n"); | ||
808 | goto out_err; | 812 | goto out_err; |
809 | } | 813 | } |
810 | 814 | ||
@@ -851,7 +855,8 @@ static int intel_i830_remove_entries(struct agp_memory *mem, off_t pg_start, | |||
851 | return 0; | 855 | return 0; |
852 | 856 | ||
853 | if (pg_start < intel_private.gtt_entries) { | 857 | if (pg_start < intel_private.gtt_entries) { |
854 | printk(KERN_INFO PFX "Trying to disable local/stolen memory\n"); | 858 | dev_info(&intel_private.pcidev->dev, |
859 | "trying to disable local/stolen memory\n"); | ||
855 | return -EINVAL; | 860 | return -EINVAL; |
856 | } | 861 | } |
857 | 862 | ||
@@ -957,7 +962,7 @@ static void intel_i9xx_setup_flush(void) | |||
957 | if (intel_private.ifp_resource.start) { | 962 | if (intel_private.ifp_resource.start) { |
958 | intel_private.i9xx_flush_page = ioremap_nocache(intel_private.ifp_resource.start, PAGE_SIZE); | 963 | intel_private.i9xx_flush_page = ioremap_nocache(intel_private.ifp_resource.start, PAGE_SIZE); |
959 | if (!intel_private.i9xx_flush_page) | 964 | if (!intel_private.i9xx_flush_page) |
960 | printk(KERN_INFO "unable to ioremap flush page - no chipset flushing"); | 965 | dev_info(&intel_private.pcidev->dev, "can't ioremap flush page - no chipset flushing"); |
961 | } | 966 | } |
962 | } | 967 | } |
963 | 968 | ||
@@ -1028,10 +1033,12 @@ static int intel_i915_insert_entries(struct agp_memory *mem, off_t pg_start, | |||
1028 | num_entries = A_SIZE_FIX(temp)->num_entries; | 1033 | num_entries = A_SIZE_FIX(temp)->num_entries; |
1029 | 1034 | ||
1030 | if (pg_start < intel_private.gtt_entries) { | 1035 | if (pg_start < intel_private.gtt_entries) { |
1031 | printk(KERN_DEBUG PFX "pg_start == 0x%.8lx,intel_private.gtt_entries == 0x%.8x\n", | 1036 | dev_printk(KERN_DEBUG, &intel_private.pcidev->dev, |
1032 | pg_start, intel_private.gtt_entries); | 1037 | "pg_start == 0x%.8lx, intel_private.gtt_entries == 0x%.8x\n", |
1038 | pg_start, intel_private.gtt_entries); | ||
1033 | 1039 | ||
1034 | printk(KERN_INFO PFX "Trying to insert into local/stolen memory\n"); | 1040 | dev_info(&intel_private.pcidev->dev, |
1041 | "trying to insert into local/stolen memory\n"); | ||
1035 | goto out_err; | 1042 | goto out_err; |
1036 | } | 1043 | } |
1037 | 1044 | ||
@@ -1078,7 +1085,8 @@ static int intel_i915_remove_entries(struct agp_memory *mem, off_t pg_start, | |||
1078 | return 0; | 1085 | return 0; |
1079 | 1086 | ||
1080 | if (pg_start < intel_private.gtt_entries) { | 1087 | if (pg_start < intel_private.gtt_entries) { |
1081 | printk(KERN_INFO PFX "Trying to disable local/stolen memory\n"); | 1088 | dev_info(&intel_private.pcidev->dev, |
1089 | "trying to disable local/stolen memory\n"); | ||
1082 | return -EINVAL; | 1090 | return -EINVAL; |
1083 | } | 1091 | } |
1084 | 1092 | ||
@@ -1182,7 +1190,7 @@ static unsigned long intel_i965_mask_memory(struct agp_bridge_data *bridge, | |||
1182 | static void intel_i965_get_gtt_range(int *gtt_offset, int *gtt_size) | 1190 | static void intel_i965_get_gtt_range(int *gtt_offset, int *gtt_size) |
1183 | { | 1191 | { |
1184 | switch (agp_bridge->dev->device) { | 1192 | switch (agp_bridge->dev->device) { |
1185 | case PCI_DEVICE_ID_INTEL_IGD_HB: | 1193 | case PCI_DEVICE_ID_INTEL_GM45_HB: |
1186 | case PCI_DEVICE_ID_INTEL_IGD_E_HB: | 1194 | case PCI_DEVICE_ID_INTEL_IGD_E_HB: |
1187 | case PCI_DEVICE_ID_INTEL_Q45_HB: | 1195 | case PCI_DEVICE_ID_INTEL_Q45_HB: |
1188 | case PCI_DEVICE_ID_INTEL_G45_HB: | 1196 | case PCI_DEVICE_ID_INTEL_G45_HB: |
@@ -1379,7 +1387,7 @@ static int intel_815_configure(void) | |||
1379 | /* the Intel 815 chipset spec. says that bits 29-31 in the | 1387 | /* the Intel 815 chipset spec. says that bits 29-31 in the |
1380 | * ATTBASE register are reserved -> try not to write them */ | 1388 | * ATTBASE register are reserved -> try not to write them */ |
1381 | if (agp_bridge->gatt_bus_addr & INTEL_815_ATTBASE_MASK) { | 1389 | if (agp_bridge->gatt_bus_addr & INTEL_815_ATTBASE_MASK) { |
1382 | printk(KERN_EMERG PFX "gatt bus addr too high"); | 1390 | dev_emerg(&agp_bridge->dev->dev, "gatt bus addr too high"); |
1383 | return -EINVAL; | 1391 | return -EINVAL; |
1384 | } | 1392 | } |
1385 | 1393 | ||
@@ -2117,8 +2125,8 @@ static const struct intel_driver_description { | |||
2117 | NULL, &intel_g33_driver }, | 2125 | NULL, &intel_g33_driver }, |
2118 | { PCI_DEVICE_ID_INTEL_Q33_HB, PCI_DEVICE_ID_INTEL_Q33_IG, 0, "Q33", | 2126 | { PCI_DEVICE_ID_INTEL_Q33_HB, PCI_DEVICE_ID_INTEL_Q33_IG, 0, "Q33", |
2119 | NULL, &intel_g33_driver }, | 2127 | NULL, &intel_g33_driver }, |
2120 | { PCI_DEVICE_ID_INTEL_IGD_HB, PCI_DEVICE_ID_INTEL_IGD_IG, 0, | 2128 | { PCI_DEVICE_ID_INTEL_GM45_HB, PCI_DEVICE_ID_INTEL_GM45_IG, 0, |
2121 | "Intel Integrated Graphics Device", NULL, &intel_i965_driver }, | 2129 | "Mobile Intel? GM45 Express", NULL, &intel_i965_driver }, |
2122 | { PCI_DEVICE_ID_INTEL_IGD_E_HB, PCI_DEVICE_ID_INTEL_IGD_E_IG, 0, | 2130 | { PCI_DEVICE_ID_INTEL_IGD_E_HB, PCI_DEVICE_ID_INTEL_IGD_E_IG, 0, |
2123 | "Intel Integrated Graphics Device", NULL, &intel_i965_driver }, | 2131 | "Intel Integrated Graphics Device", NULL, &intel_i965_driver }, |
2124 | { PCI_DEVICE_ID_INTEL_Q45_HB, PCI_DEVICE_ID_INTEL_Q45_IG, 0, | 2132 | { PCI_DEVICE_ID_INTEL_Q45_HB, PCI_DEVICE_ID_INTEL_Q45_IG, 0, |
@@ -2163,8 +2171,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, | |||
2163 | 2171 | ||
2164 | if (intel_agp_chipsets[i].name == NULL) { | 2172 | if (intel_agp_chipsets[i].name == NULL) { |
2165 | if (cap_ptr) | 2173 | if (cap_ptr) |
2166 | printk(KERN_WARNING PFX "Unsupported Intel chipset" | 2174 | dev_warn(&pdev->dev, "unsupported Intel chipset [%04x/%04x]\n", |
2167 | "(device id: %04x)\n", pdev->device); | 2175 | pdev->vendor, pdev->device); |
2168 | agp_put_bridge(bridge); | 2176 | agp_put_bridge(bridge); |
2169 | return -ENODEV; | 2177 | return -ENODEV; |
2170 | } | 2178 | } |
@@ -2172,9 +2180,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, | |||
2172 | if (bridge->driver == NULL) { | 2180 | if (bridge->driver == NULL) { |
2173 | /* bridge has no AGP and no IGD detected */ | 2181 | /* bridge has no AGP and no IGD detected */ |
2174 | if (cap_ptr) | 2182 | if (cap_ptr) |
2175 | printk(KERN_WARNING PFX "Failed to find bridge device " | 2183 | dev_warn(&pdev->dev, "can't find bridge device (chip_id: %04x)\n", |
2176 | "(chip_id: %04x)\n", | 2184 | intel_agp_chipsets[i].gmch_chip_id); |
2177 | intel_agp_chipsets[i].gmch_chip_id); | ||
2178 | agp_put_bridge(bridge); | 2185 | agp_put_bridge(bridge); |
2179 | return -ENODEV; | 2186 | return -ENODEV; |
2180 | } | 2187 | } |
@@ -2183,8 +2190,7 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, | |||
2183 | bridge->capndx = cap_ptr; | 2190 | bridge->capndx = cap_ptr; |
2184 | bridge->dev_private_data = &intel_private; | 2191 | bridge->dev_private_data = &intel_private; |
2185 | 2192 | ||
2186 | printk(KERN_INFO PFX "Detected an Intel %s Chipset.\n", | 2193 | dev_info(&pdev->dev, "Intel %s Chipset\n", intel_agp_chipsets[i].name); |
2187 | intel_agp_chipsets[i].name); | ||
2188 | 2194 | ||
2189 | /* | 2195 | /* |
2190 | * The following fixes the case where the BIOS has "forgotten" to | 2196 | * The following fixes the case where the BIOS has "forgotten" to |
@@ -2194,7 +2200,7 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, | |||
2194 | r = &pdev->resource[0]; | 2200 | r = &pdev->resource[0]; |
2195 | if (!r->start && r->end) { | 2201 | if (!r->start && r->end) { |
2196 | if (pci_assign_resource(pdev, 0)) { | 2202 | if (pci_assign_resource(pdev, 0)) { |
2197 | printk(KERN_ERR PFX "could not assign resource 0\n"); | 2203 | dev_err(&pdev->dev, "can't assign resource 0\n"); |
2198 | agp_put_bridge(bridge); | 2204 | agp_put_bridge(bridge); |
2199 | return -ENODEV; | 2205 | return -ENODEV; |
2200 | } | 2206 | } |
@@ -2206,7 +2212,7 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, | |||
2206 | * 20030610 - hamish@zot.org | 2212 | * 20030610 - hamish@zot.org |
2207 | */ | 2213 | */ |
2208 | if (pci_enable_device(pdev)) { | 2214 | if (pci_enable_device(pdev)) { |
2209 | printk(KERN_ERR PFX "Unable to Enable PCI device\n"); | 2215 | dev_err(&pdev->dev, "can't enable PCI device\n"); |
2210 | agp_put_bridge(bridge); | 2216 | agp_put_bridge(bridge); |
2211 | return -ENODEV; | 2217 | return -ENODEV; |
2212 | } | 2218 | } |
@@ -2238,6 +2244,7 @@ static void __devexit agp_intel_remove(struct pci_dev *pdev) | |||
2238 | static int agp_intel_resume(struct pci_dev *pdev) | 2244 | static int agp_intel_resume(struct pci_dev *pdev) |
2239 | { | 2245 | { |
2240 | struct agp_bridge_data *bridge = pci_get_drvdata(pdev); | 2246 | struct agp_bridge_data *bridge = pci_get_drvdata(pdev); |
2247 | int ret_val; | ||
2241 | 2248 | ||
2242 | pci_restore_state(pdev); | 2249 | pci_restore_state(pdev); |
2243 | 2250 | ||
@@ -2265,6 +2272,10 @@ static int agp_intel_resume(struct pci_dev *pdev) | |||
2265 | else if (bridge->driver == &intel_i965_driver) | 2272 | else if (bridge->driver == &intel_i965_driver) |
2266 | intel_i915_configure(); | 2273 | intel_i915_configure(); |
2267 | 2274 | ||
2275 | ret_val = agp_rebind_memory(); | ||
2276 | if (ret_val != 0) | ||
2277 | return ret_val; | ||
2278 | |||
2268 | return 0; | 2279 | return 0; |
2269 | } | 2280 | } |
2270 | #endif | 2281 | #endif |
@@ -2315,7 +2326,7 @@ static struct pci_device_id agp_intel_pci_table[] = { | |||
2315 | ID(PCI_DEVICE_ID_INTEL_G33_HB), | 2326 | ID(PCI_DEVICE_ID_INTEL_G33_HB), |
2316 | ID(PCI_DEVICE_ID_INTEL_Q35_HB), | 2327 | ID(PCI_DEVICE_ID_INTEL_Q35_HB), |
2317 | ID(PCI_DEVICE_ID_INTEL_Q33_HB), | 2328 | ID(PCI_DEVICE_ID_INTEL_Q33_HB), |
2318 | ID(PCI_DEVICE_ID_INTEL_IGD_HB), | 2329 | ID(PCI_DEVICE_ID_INTEL_GM45_HB), |
2319 | ID(PCI_DEVICE_ID_INTEL_IGD_E_HB), | 2330 | ID(PCI_DEVICE_ID_INTEL_IGD_E_HB), |
2320 | ID(PCI_DEVICE_ID_INTEL_Q45_HB), | 2331 | ID(PCI_DEVICE_ID_INTEL_Q45_HB), |
2321 | ID(PCI_DEVICE_ID_INTEL_G45_HB), | 2332 | ID(PCI_DEVICE_ID_INTEL_G45_HB), |
diff --git a/drivers/char/agp/isoch.c b/drivers/char/agp/isoch.c index 3f9ccde62377..c73385cc4b8a 100644 --- a/drivers/char/agp/isoch.c +++ b/drivers/char/agp/isoch.c | |||
@@ -153,7 +153,7 @@ static int agp_3_5_isochronous_node_enable(struct agp_bridge_data *bridge, | |||
153 | 153 | ||
154 | /* Check if this configuration has any chance of working */ | 154 | /* Check if this configuration has any chance of working */ |
155 | if (tot_bw > target.maxbw) { | 155 | if (tot_bw > target.maxbw) { |
156 | printk(KERN_ERR PFX "isochronous bandwidth required " | 156 | dev_err(&td->dev, "isochronous bandwidth required " |
157 | "by AGP 3.0 devices exceeds that which is supported by " | 157 | "by AGP 3.0 devices exceeds that which is supported by " |
158 | "the AGP 3.0 bridge!\n"); | 158 | "the AGP 3.0 bridge!\n"); |
159 | ret = -ENODEV; | 159 | ret = -ENODEV; |
@@ -188,7 +188,7 @@ static int agp_3_5_isochronous_node_enable(struct agp_bridge_data *bridge, | |||
188 | /* Exit if the minimal ISOCH_N allocation among the masters is more | 188 | /* Exit if the minimal ISOCH_N allocation among the masters is more |
189 | * than the target can handle. */ | 189 | * than the target can handle. */ |
190 | if (tot_n > target.n) { | 190 | if (tot_n > target.n) { |
191 | printk(KERN_ERR PFX "number of isochronous " | 191 | dev_err(&td->dev, "number of isochronous " |
192 | "transactions per period required by AGP 3.0 devices " | 192 | "transactions per period required by AGP 3.0 devices " |
193 | "exceeds that which is supported by the AGP 3.0 " | 193 | "exceeds that which is supported by the AGP 3.0 " |
194 | "bridge!\n"); | 194 | "bridge!\n"); |
@@ -229,7 +229,7 @@ static int agp_3_5_isochronous_node_enable(struct agp_bridge_data *bridge, | |||
229 | /* Exit if the minimal RQ needs of the masters exceeds what the target | 229 | /* Exit if the minimal RQ needs of the masters exceeds what the target |
230 | * can provide. */ | 230 | * can provide. */ |
231 | if (tot_rq > rq_isoch) { | 231 | if (tot_rq > rq_isoch) { |
232 | printk(KERN_ERR PFX "number of request queue slots " | 232 | dev_err(&td->dev, "number of request queue slots " |
233 | "required by the isochronous bandwidth requested by " | 233 | "required by the isochronous bandwidth requested by " |
234 | "AGP 3.0 devices exceeds the number provided by the " | 234 | "AGP 3.0 devices exceeds the number provided by the " |
235 | "AGP 3.0 bridge!\n"); | 235 | "AGP 3.0 bridge!\n"); |
@@ -359,8 +359,9 @@ int agp_3_5_enable(struct agp_bridge_data *bridge) | |||
359 | case 0x0001: /* Unclassified device */ | 359 | case 0x0001: /* Unclassified device */ |
360 | /* Don't know what this is, but log it for investigation. */ | 360 | /* Don't know what this is, but log it for investigation. */ |
361 | if (mcapndx != 0) { | 361 | if (mcapndx != 0) { |
362 | printk (KERN_INFO PFX "Wacky, found unclassified AGP device. %x:%x\n", | 362 | dev_info(&td->dev, "wacky, found unclassified AGP device %s [%04x/%04x]\n", |
363 | dev->vendor, dev->device); | 363 | pci_name(dev), |
364 | dev->vendor, dev->device); | ||
364 | } | 365 | } |
365 | continue; | 366 | continue; |
366 | 367 | ||
@@ -407,17 +408,18 @@ int agp_3_5_enable(struct agp_bridge_data *bridge) | |||
407 | } | 408 | } |
408 | 409 | ||
409 | if (mcapndx == 0) { | 410 | if (mcapndx == 0) { |
410 | printk(KERN_ERR PFX "woah! Non-AGP device " | 411 | dev_err(&td->dev, "woah! Non-AGP device %s on " |
411 | "found on the secondary bus of an AGP 3.5 bridge!\n"); | 412 | "secondary bus of AGP 3.5 bridge!\n", |
413 | pci_name(dev)); | ||
412 | ret = -ENODEV; | 414 | ret = -ENODEV; |
413 | goto free_and_exit; | 415 | goto free_and_exit; |
414 | } | 416 | } |
415 | 417 | ||
416 | mmajor = (ncapid >> AGP_MAJOR_VERSION_SHIFT) & 0xf; | 418 | mmajor = (ncapid >> AGP_MAJOR_VERSION_SHIFT) & 0xf; |
417 | if (mmajor < 3) { | 419 | if (mmajor < 3) { |
418 | printk(KERN_ERR PFX "woah! AGP 2.0 device " | 420 | dev_err(&td->dev, "woah! AGP 2.0 device %s on " |
419 | "found on the secondary bus of an AGP 3.5 " | 421 | "secondary bus of AGP 3.5 bridge operating " |
420 | "bridge operating with AGP 3.0 electricals!\n"); | 422 | "with AGP 3.0 electricals!\n", pci_name(dev)); |
421 | ret = -ENODEV; | 423 | ret = -ENODEV; |
422 | goto free_and_exit; | 424 | goto free_and_exit; |
423 | } | 425 | } |
@@ -427,10 +429,10 @@ int agp_3_5_enable(struct agp_bridge_data *bridge) | |||
427 | pci_read_config_dword(dev, cur->capndx+AGPSTAT, &mstatus); | 429 | pci_read_config_dword(dev, cur->capndx+AGPSTAT, &mstatus); |
428 | 430 | ||
429 | if (((mstatus >> 3) & 0x1) == 0) { | 431 | if (((mstatus >> 3) & 0x1) == 0) { |
430 | printk(KERN_ERR PFX "woah! AGP 3.x device " | 432 | dev_err(&td->dev, "woah! AGP 3.x device %s not " |
431 | "not operating in AGP 3.x mode found on the " | 433 | "operating in AGP 3.x mode on secondary bus " |
432 | "secondary bus of an AGP 3.5 bridge operating " | 434 | "of AGP 3.5 bridge operating with AGP 3.0 " |
433 | "with AGP 3.0 electricals!\n"); | 435 | "electricals!\n", pci_name(dev)); |
434 | ret = -ENODEV; | 436 | ret = -ENODEV; |
435 | goto free_and_exit; | 437 | goto free_and_exit; |
436 | } | 438 | } |
@@ -444,9 +446,9 @@ int agp_3_5_enable(struct agp_bridge_data *bridge) | |||
444 | if (isoch) { | 446 | if (isoch) { |
445 | ret = agp_3_5_isochronous_node_enable(bridge, dev_list, ndevs); | 447 | ret = agp_3_5_isochronous_node_enable(bridge, dev_list, ndevs); |
446 | if (ret) { | 448 | if (ret) { |
447 | printk(KERN_INFO PFX "Something bad happened setting " | 449 | dev_info(&td->dev, "something bad happened setting " |
448 | "up isochronous xfers. Falling back to " | 450 | "up isochronous xfers; falling back to " |
449 | "non-isochronous xfer mode.\n"); | 451 | "non-isochronous xfer mode\n"); |
450 | } else { | 452 | } else { |
451 | goto free_and_exit; | 453 | goto free_and_exit; |
452 | } | 454 | } |
@@ -466,4 +468,3 @@ free_and_exit: | |||
466 | get_out: | 468 | get_out: |
467 | return ret; | 469 | return ret; |
468 | } | 470 | } |
469 | |||
diff --git a/drivers/char/agp/sis-agp.c b/drivers/char/agp/sis-agp.c index b6791846809f..2587ef96a960 100644 --- a/drivers/char/agp/sis-agp.c +++ b/drivers/char/agp/sis-agp.c | |||
@@ -79,10 +79,8 @@ static void sis_delayed_enable(struct agp_bridge_data *bridge, u32 mode) | |||
79 | u32 command; | 79 | u32 command; |
80 | int rate; | 80 | int rate; |
81 | 81 | ||
82 | printk(KERN_INFO PFX "Found an AGP %d.%d compliant device at %s.\n", | 82 | dev_info(&agp_bridge->dev->dev, "AGP %d.%d bridge\n", |
83 | agp_bridge->major_version, | 83 | agp_bridge->major_version, agp_bridge->minor_version); |
84 | agp_bridge->minor_version, | ||
85 | pci_name(agp_bridge->dev)); | ||
86 | 84 | ||
87 | pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx + PCI_AGP_STATUS, &command); | 85 | pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx + PCI_AGP_STATUS, &command); |
88 | command = agp_collect_device_status(bridge, mode, command); | 86 | command = agp_collect_device_status(bridge, mode, command); |
@@ -94,8 +92,8 @@ static void sis_delayed_enable(struct agp_bridge_data *bridge, u32 mode) | |||
94 | if (!agp) | 92 | if (!agp) |
95 | continue; | 93 | continue; |
96 | 94 | ||
97 | printk(KERN_INFO PFX "Putting AGP V3 device at %s into %dx mode\n", | 95 | dev_info(&agp_bridge->dev->dev, "putting AGP V3 device at %s into %dx mode\n", |
98 | pci_name(device), rate); | 96 | pci_name(device), rate); |
99 | 97 | ||
100 | pci_write_config_dword(device, agp + PCI_AGP_COMMAND, command); | 98 | pci_write_config_dword(device, agp + PCI_AGP_COMMAND, command); |
101 | 99 | ||
@@ -105,7 +103,7 @@ static void sis_delayed_enable(struct agp_bridge_data *bridge, u32 mode) | |||
105 | * cannot be configured | 103 | * cannot be configured |
106 | */ | 104 | */ |
107 | if (device->device == bridge->dev->device) { | 105 | if (device->device == bridge->dev->device) { |
108 | printk(KERN_INFO PFX "SiS delay workaround: giving bridge time to recover.\n"); | 106 | dev_info(&agp_bridge->dev->dev, "SiS delay workaround: giving bridge time to recover\n"); |
109 | msleep(10); | 107 | msleep(10); |
110 | } | 108 | } |
111 | } | 109 | } |
@@ -190,7 +188,8 @@ static int __devinit agp_sis_probe(struct pci_dev *pdev, | |||
190 | return -ENODEV; | 188 | return -ENODEV; |
191 | 189 | ||
192 | 190 | ||
193 | printk(KERN_INFO PFX "Detected SiS chipset - id:%i\n", pdev->device); | 191 | dev_info(&pdev->dev, "SiS chipset [%04x/%04x]\n", |
192 | pdev->vendor, pdev->device); | ||
194 | bridge = agp_alloc_bridge(); | 193 | bridge = agp_alloc_bridge(); |
195 | if (!bridge) | 194 | if (!bridge) |
196 | return -ENOMEM; | 195 | return -ENOMEM; |
@@ -242,7 +241,7 @@ static struct pci_device_id agp_sis_pci_table[] = { | |||
242 | .class = (PCI_CLASS_BRIDGE_HOST << 8), | 241 | .class = (PCI_CLASS_BRIDGE_HOST << 8), |
243 | .class_mask = ~0, | 242 | .class_mask = ~0, |
244 | .vendor = PCI_VENDOR_ID_SI, | 243 | .vendor = PCI_VENDOR_ID_SI, |
245 | .device = PCI_DEVICE_ID_SI_5591_AGP, | 244 | .device = PCI_DEVICE_ID_SI_5591, |
246 | .subvendor = PCI_ANY_ID, | 245 | .subvendor = PCI_ANY_ID, |
247 | .subdevice = PCI_ANY_ID, | 246 | .subdevice = PCI_ANY_ID, |
248 | }, | 247 | }, |
diff --git a/drivers/char/agp/sworks-agp.c b/drivers/char/agp/sworks-agp.c index 0e054c134490..2fb27fe4c10c 100644 --- a/drivers/char/agp/sworks-agp.c +++ b/drivers/char/agp/sworks-agp.c | |||
@@ -241,7 +241,8 @@ static void serverworks_tlbflush(struct agp_memory *temp) | |||
241 | while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1) { | 241 | while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1) { |
242 | cpu_relax(); | 242 | cpu_relax(); |
243 | if (time_after(jiffies, timeout)) { | 243 | if (time_after(jiffies, timeout)) { |
244 | printk(KERN_ERR PFX "TLB post flush took more than 3 seconds\n"); | 244 | dev_err(&serverworks_private.svrwrks_dev->dev, |
245 | "TLB post flush took more than 3 seconds\n"); | ||
245 | break; | 246 | break; |
246 | } | 247 | } |
247 | } | 248 | } |
@@ -251,7 +252,8 @@ static void serverworks_tlbflush(struct agp_memory *temp) | |||
251 | while (readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1) { | 252 | while (readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1) { |
252 | cpu_relax(); | 253 | cpu_relax(); |
253 | if (time_after(jiffies, timeout)) { | 254 | if (time_after(jiffies, timeout)) { |
254 | printk(KERN_ERR PFX "TLB Dir flush took more than 3 seconds\n"); | 255 | dev_err(&serverworks_private.svrwrks_dev->dev, |
256 | "TLB Dir flush took more than 3 seconds\n"); | ||
255 | break; | 257 | break; |
256 | } | 258 | } |
257 | } | 259 | } |
@@ -271,7 +273,7 @@ static int serverworks_configure(void) | |||
271 | temp = (temp & PCI_BASE_ADDRESS_MEM_MASK); | 273 | temp = (temp & PCI_BASE_ADDRESS_MEM_MASK); |
272 | serverworks_private.registers = (volatile u8 __iomem *) ioremap(temp, 4096); | 274 | serverworks_private.registers = (volatile u8 __iomem *) ioremap(temp, 4096); |
273 | if (!serverworks_private.registers) { | 275 | if (!serverworks_private.registers) { |
274 | printk (KERN_ERR PFX "Unable to ioremap() memory.\n"); | 276 | dev_err(&agp_bridge->dev->dev, "can't ioremap(%#x)\n", temp); |
275 | return -ENOMEM; | 277 | return -ENOMEM; |
276 | } | 278 | } |
277 | 279 | ||
@@ -451,7 +453,7 @@ static int __devinit agp_serverworks_probe(struct pci_dev *pdev, | |||
451 | 453 | ||
452 | switch (pdev->device) { | 454 | switch (pdev->device) { |
453 | case 0x0006: | 455 | case 0x0006: |
454 | printk (KERN_ERR PFX "ServerWorks CNB20HE is unsupported due to lack of documentation.\n"); | 456 | dev_err(&pdev->dev, "ServerWorks CNB20HE is unsupported due to lack of documentation\n"); |
455 | return -ENODEV; | 457 | return -ENODEV; |
456 | 458 | ||
457 | case PCI_DEVICE_ID_SERVERWORKS_HE: | 459 | case PCI_DEVICE_ID_SERVERWORKS_HE: |
@@ -461,8 +463,8 @@ static int __devinit agp_serverworks_probe(struct pci_dev *pdev, | |||
461 | 463 | ||
462 | default: | 464 | default: |
463 | if (cap_ptr) | 465 | if (cap_ptr) |
464 | printk(KERN_ERR PFX "Unsupported Serverworks chipset " | 466 | dev_err(&pdev->dev, "unsupported Serverworks chipset " |
465 | "(device id: %04x)\n", pdev->device); | 467 | "[%04x/%04x]\n", pdev->vendor, pdev->device); |
466 | return -ENODEV; | 468 | return -ENODEV; |
467 | } | 469 | } |
468 | 470 | ||
@@ -470,8 +472,7 @@ static int __devinit agp_serverworks_probe(struct pci_dev *pdev, | |||
470 | bridge_dev = pci_get_bus_and_slot((unsigned int)pdev->bus->number, | 472 | bridge_dev = pci_get_bus_and_slot((unsigned int)pdev->bus->number, |
471 | PCI_DEVFN(0, 1)); | 473 | PCI_DEVFN(0, 1)); |
472 | if (!bridge_dev) { | 474 | if (!bridge_dev) { |
473 | printk(KERN_INFO PFX "Detected a Serverworks chipset " | 475 | dev_info(&pdev->dev, "can't find secondary device\n"); |
474 | "but could not find the secondary device.\n"); | ||
475 | return -ENODEV; | 476 | return -ENODEV; |
476 | } | 477 | } |
477 | 478 | ||
@@ -482,8 +483,8 @@ static int __devinit agp_serverworks_probe(struct pci_dev *pdev, | |||
482 | if (temp & PCI_BASE_ADDRESS_MEM_TYPE_64) { | 483 | if (temp & PCI_BASE_ADDRESS_MEM_TYPE_64) { |
483 | pci_read_config_dword(pdev, SVWRKS_APSIZE + 4, &temp2); | 484 | pci_read_config_dword(pdev, SVWRKS_APSIZE + 4, &temp2); |
484 | if (temp2 != 0) { | 485 | if (temp2 != 0) { |
485 | printk(KERN_INFO PFX "Detected 64 bit aperture address, " | 486 | dev_info(&pdev->dev, "64 bit aperture address, " |
486 | "but top bits are not zero. Disabling agp\n"); | 487 | "but top bits are not zero; disabling AGP\n"); |
487 | return -ENODEV; | 488 | return -ENODEV; |
488 | } | 489 | } |
489 | serverworks_private.mm_addr_ofs = 0x18; | 490 | serverworks_private.mm_addr_ofs = 0x18; |
@@ -495,8 +496,8 @@ static int __devinit agp_serverworks_probe(struct pci_dev *pdev, | |||
495 | pci_read_config_dword(pdev, | 496 | pci_read_config_dword(pdev, |
496 | serverworks_private.mm_addr_ofs + 4, &temp2); | 497 | serverworks_private.mm_addr_ofs + 4, &temp2); |
497 | if (temp2 != 0) { | 498 | if (temp2 != 0) { |
498 | printk(KERN_INFO PFX "Detected 64 bit MMIO address, " | 499 | dev_info(&pdev->dev, "64 bit MMIO address, but top " |
499 | "but top bits are not zero. Disabling agp\n"); | 500 | "bits are not zero; disabling AGP\n"); |
500 | return -ENODEV; | 501 | return -ENODEV; |
501 | } | 502 | } |
502 | } | 503 | } |
diff --git a/drivers/char/agp/uninorth-agp.c b/drivers/char/agp/uninorth-agp.c index d2fa3cfca02a..eef72709ec53 100644 --- a/drivers/char/agp/uninorth-agp.c +++ b/drivers/char/agp/uninorth-agp.c | |||
@@ -46,8 +46,8 @@ static int uninorth_fetch_size(void) | |||
46 | break; | 46 | break; |
47 | 47 | ||
48 | if (i == agp_bridge->driver->num_aperture_sizes) { | 48 | if (i == agp_bridge->driver->num_aperture_sizes) { |
49 | printk(KERN_ERR PFX "Invalid aperture size, using" | 49 | dev_err(&agp_bridge->dev->dev, "invalid aperture size, " |
50 | " default\n"); | 50 | "using default\n"); |
51 | size = 0; | 51 | size = 0; |
52 | aperture = NULL; | 52 | aperture = NULL; |
53 | } | 53 | } |
@@ -108,8 +108,8 @@ static int uninorth_configure(void) | |||
108 | 108 | ||
109 | current_size = A_SIZE_32(agp_bridge->current_size); | 109 | current_size = A_SIZE_32(agp_bridge->current_size); |
110 | 110 | ||
111 | printk(KERN_INFO PFX "configuring for size idx: %d\n", | 111 | dev_info(&agp_bridge->dev->dev, "configuring for size idx: %d\n", |
112 | current_size->size_value); | 112 | current_size->size_value); |
113 | 113 | ||
114 | /* aperture size and gatt addr */ | 114 | /* aperture size and gatt addr */ |
115 | pci_write_config_dword(agp_bridge->dev, | 115 | pci_write_config_dword(agp_bridge->dev, |
@@ -197,8 +197,9 @@ static int u3_insert_memory(struct agp_memory *mem, off_t pg_start, int type) | |||
197 | gp = (u32 *) &agp_bridge->gatt_table[pg_start]; | 197 | gp = (u32 *) &agp_bridge->gatt_table[pg_start]; |
198 | for (i = 0; i < mem->page_count; ++i) { | 198 | for (i = 0; i < mem->page_count; ++i) { |
199 | if (gp[i]) { | 199 | if (gp[i]) { |
200 | printk("u3_insert_memory: entry 0x%x occupied (%x)\n", | 200 | dev_info(&agp_bridge->dev->dev, |
201 | i, gp[i]); | 201 | "u3_insert_memory: entry 0x%x occupied (%x)\n", |
202 | i, gp[i]); | ||
202 | return -EBUSY; | 203 | return -EBUSY; |
203 | } | 204 | } |
204 | } | 205 | } |
@@ -276,8 +277,8 @@ static void uninorth_agp_enable(struct agp_bridge_data *bridge, u32 mode) | |||
276 | &scratch); | 277 | &scratch); |
277 | } while ((scratch & PCI_AGP_COMMAND_AGP) == 0 && ++timeout < 1000); | 278 | } while ((scratch & PCI_AGP_COMMAND_AGP) == 0 && ++timeout < 1000); |
278 | if ((scratch & PCI_AGP_COMMAND_AGP) == 0) | 279 | if ((scratch & PCI_AGP_COMMAND_AGP) == 0) |
279 | printk(KERN_ERR PFX "failed to write UniNorth AGP" | 280 | dev_err(&bridge->dev->dev, "can't write UniNorth AGP " |
280 | " command register\n"); | 281 | "command register\n"); |
281 | 282 | ||
282 | if (uninorth_rev >= 0x30) { | 283 | if (uninorth_rev >= 0x30) { |
283 | /* This is an AGP V3 */ | 284 | /* This is an AGP V3 */ |
@@ -330,8 +331,8 @@ static int agp_uninorth_suspend(struct pci_dev *pdev) | |||
330 | pci_read_config_dword(device, agp + PCI_AGP_COMMAND, &cmd); | 331 | pci_read_config_dword(device, agp + PCI_AGP_COMMAND, &cmd); |
331 | if (!(cmd & PCI_AGP_COMMAND_AGP)) | 332 | if (!(cmd & PCI_AGP_COMMAND_AGP)) |
332 | continue; | 333 | continue; |
333 | printk("uninorth-agp: disabling AGP on device %s\n", | 334 | dev_info(&pdev->dev, "disabling AGP on device %s\n", |
334 | pci_name(device)); | 335 | pci_name(device)); |
335 | cmd &= ~PCI_AGP_COMMAND_AGP; | 336 | cmd &= ~PCI_AGP_COMMAND_AGP; |
336 | pci_write_config_dword(device, agp + PCI_AGP_COMMAND, cmd); | 337 | pci_write_config_dword(device, agp + PCI_AGP_COMMAND, cmd); |
337 | } | 338 | } |
@@ -341,8 +342,7 @@ static int agp_uninorth_suspend(struct pci_dev *pdev) | |||
341 | pci_read_config_dword(pdev, agp + PCI_AGP_COMMAND, &cmd); | 342 | pci_read_config_dword(pdev, agp + PCI_AGP_COMMAND, &cmd); |
342 | bridge->dev_private_data = (void *)(long)cmd; | 343 | bridge->dev_private_data = (void *)(long)cmd; |
343 | if (cmd & PCI_AGP_COMMAND_AGP) { | 344 | if (cmd & PCI_AGP_COMMAND_AGP) { |
344 | printk("uninorth-agp: disabling AGP on bridge %s\n", | 345 | dev_info(&pdev->dev, "disabling AGP on bridge\n"); |
345 | pci_name(pdev)); | ||
346 | cmd &= ~PCI_AGP_COMMAND_AGP; | 346 | cmd &= ~PCI_AGP_COMMAND_AGP; |
347 | pci_write_config_dword(pdev, agp + PCI_AGP_COMMAND, cmd); | 347 | pci_write_config_dword(pdev, agp + PCI_AGP_COMMAND, cmd); |
348 | } | 348 | } |
@@ -591,14 +591,14 @@ static int __devinit agp_uninorth_probe(struct pci_dev *pdev, | |||
591 | /* probe for known chipsets */ | 591 | /* probe for known chipsets */ |
592 | for (j = 0; devs[j].chipset_name != NULL; ++j) { | 592 | for (j = 0; devs[j].chipset_name != NULL; ++j) { |
593 | if (pdev->device == devs[j].device_id) { | 593 | if (pdev->device == devs[j].device_id) { |
594 | printk(KERN_INFO PFX "Detected Apple %s chipset\n", | 594 | dev_info(&pdev->dev, "Apple %s chipset\n", |
595 | devs[j].chipset_name); | 595 | devs[j].chipset_name); |
596 | goto found; | 596 | goto found; |
597 | } | 597 | } |
598 | } | 598 | } |
599 | 599 | ||
600 | printk(KERN_ERR PFX "Unsupported Apple chipset (device id: %04x).\n", | 600 | dev_err(&pdev->dev, "unsupported Apple chipset [%04x/%04x]\n", |
601 | pdev->device); | 601 | pdev->vendor, pdev->device); |
602 | return -ENODEV; | 602 | return -ENODEV; |
603 | 603 | ||
604 | found: | 604 | found: |
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c index 02aac104842d..fd64137b1ab9 100644 --- a/drivers/char/hvc_console.c +++ b/drivers/char/hvc_console.c | |||
@@ -322,11 +322,10 @@ static int hvc_open(struct tty_struct *tty, struct file * filp) | |||
322 | 322 | ||
323 | hp->tty = tty; | 323 | hp->tty = tty; |
324 | 324 | ||
325 | if (hp->ops->notifier_add) | ||
326 | rc = hp->ops->notifier_add(hp, hp->data); | ||
327 | |||
328 | spin_unlock_irqrestore(&hp->lock, flags); | 325 | spin_unlock_irqrestore(&hp->lock, flags); |
329 | 326 | ||
327 | if (hp->ops->notifier_add) | ||
328 | rc = hp->ops->notifier_add(hp, hp->data); | ||
330 | 329 | ||
331 | /* | 330 | /* |
332 | * If the notifier fails we return an error. The tty layer | 331 | * If the notifier fails we return an error. The tty layer |
diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c index d9799e2bcfbf..f53d4d00faf0 100644 --- a/drivers/char/rtc.c +++ b/drivers/char/rtc.c | |||
@@ -78,7 +78,6 @@ | |||
78 | #include <linux/wait.h> | 78 | #include <linux/wait.h> |
79 | #include <linux/bcd.h> | 79 | #include <linux/bcd.h> |
80 | #include <linux/delay.h> | 80 | #include <linux/delay.h> |
81 | #include <linux/smp_lock.h> | ||
82 | #include <linux/uaccess.h> | 81 | #include <linux/uaccess.h> |
83 | 82 | ||
84 | #include <asm/current.h> | 83 | #include <asm/current.h> |
diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c index 31a0e0b455b6..97b003839fb6 100644 --- a/drivers/cpuidle/sysfs.c +++ b/drivers/cpuidle/sysfs.c | |||
@@ -21,8 +21,8 @@ static int __init cpuidle_sysfs_setup(char *unused) | |||
21 | } | 21 | } |
22 | __setup("cpuidle_sysfs_switch", cpuidle_sysfs_setup); | 22 | __setup("cpuidle_sysfs_switch", cpuidle_sysfs_setup); |
23 | 23 | ||
24 | static ssize_t show_available_governors(struct sys_device *dev, | 24 | static ssize_t show_available_governors(struct sysdev_class *class, |
25 | struct sysdev_attribute *attr, char *buf) | 25 | char *buf) |
26 | { | 26 | { |
27 | ssize_t i = 0; | 27 | ssize_t i = 0; |
28 | struct cpuidle_governor *tmp; | 28 | struct cpuidle_governor *tmp; |
@@ -40,8 +40,8 @@ out: | |||
40 | return i; | 40 | return i; |
41 | } | 41 | } |
42 | 42 | ||
43 | static ssize_t show_current_driver(struct sys_device *dev, | 43 | static ssize_t show_current_driver(struct sysdev_class *class, |
44 | struct sysdev_attribute *attr, char *buf) | 44 | char *buf) |
45 | { | 45 | { |
46 | ssize_t ret; | 46 | ssize_t ret; |
47 | 47 | ||
@@ -55,8 +55,8 @@ static ssize_t show_current_driver(struct sys_device *dev, | |||
55 | return ret; | 55 | return ret; |
56 | } | 56 | } |
57 | 57 | ||
58 | static ssize_t show_current_governor(struct sys_device *dev, | 58 | static ssize_t show_current_governor(struct sysdev_class *class, |
59 | struct sysdev_attribute *attr, char *buf) | 59 | char *buf) |
60 | { | 60 | { |
61 | ssize_t ret; | 61 | ssize_t ret; |
62 | 62 | ||
@@ -70,9 +70,8 @@ static ssize_t show_current_governor(struct sys_device *dev, | |||
70 | return ret; | 70 | return ret; |
71 | } | 71 | } |
72 | 72 | ||
73 | static ssize_t store_current_governor(struct sys_device *dev, | 73 | static ssize_t store_current_governor(struct sysdev_class *class, |
74 | struct sysdev_attribute *attr, | 74 | const char *buf, size_t count) |
75 | const char *buf, size_t count) | ||
76 | { | 75 | { |
77 | char gov_name[CPUIDLE_NAME_LEN]; | 76 | char gov_name[CPUIDLE_NAME_LEN]; |
78 | int ret = -EINVAL; | 77 | int ret = -EINVAL; |
@@ -104,8 +103,9 @@ static ssize_t store_current_governor(struct sys_device *dev, | |||
104 | return count; | 103 | return count; |
105 | } | 104 | } |
106 | 105 | ||
107 | static SYSDEV_ATTR(current_driver, 0444, show_current_driver, NULL); | 106 | static SYSDEV_CLASS_ATTR(current_driver, 0444, show_current_driver, NULL); |
108 | static SYSDEV_ATTR(current_governor_ro, 0444, show_current_governor, NULL); | 107 | static SYSDEV_CLASS_ATTR(current_governor_ro, 0444, show_current_governor, |
108 | NULL); | ||
109 | 109 | ||
110 | static struct attribute *cpuclass_default_attrs[] = { | 110 | static struct attribute *cpuclass_default_attrs[] = { |
111 | &attr_current_driver.attr, | 111 | &attr_current_driver.attr, |
@@ -113,9 +113,10 @@ static struct attribute *cpuclass_default_attrs[] = { | |||
113 | NULL | 113 | NULL |
114 | }; | 114 | }; |
115 | 115 | ||
116 | static SYSDEV_ATTR(available_governors, 0444, show_available_governors, NULL); | 116 | static SYSDEV_CLASS_ATTR(available_governors, 0444, show_available_governors, |
117 | static SYSDEV_ATTR(current_governor, 0644, show_current_governor, | 117 | NULL); |
118 | store_current_governor); | 118 | static SYSDEV_CLASS_ATTR(current_governor, 0644, show_current_governor, |
119 | store_current_governor); | ||
119 | 120 | ||
120 | static struct attribute *cpuclass_switch_attrs[] = { | 121 | static struct attribute *cpuclass_switch_attrs[] = { |
121 | &attr_available_governors.attr, | 122 | &attr_available_governors.attr, |
diff --git a/drivers/firmware/memmap.c b/drivers/firmware/memmap.c index 001622eb86f9..3bf8ee120d42 100644 --- a/drivers/firmware/memmap.c +++ b/drivers/firmware/memmap.c | |||
@@ -84,20 +84,23 @@ static struct kobj_type memmap_ktype = { | |||
84 | */ | 84 | */ |
85 | 85 | ||
86 | /* | 86 | /* |
87 | * Firmware memory map entries | 87 | * Firmware memory map entries. No locking is needed because the |
88 | * firmware_map_add() and firmware_map_add_early() functions are called | ||
89 | * in firmware initialisation code in one single thread of execution. | ||
88 | */ | 90 | */ |
89 | static LIST_HEAD(map_entries); | 91 | static LIST_HEAD(map_entries); |
90 | 92 | ||
91 | /** | 93 | /** |
92 | * Common implementation of firmware_map_add() and firmware_map_add_early() | 94 | * firmware_map_add_entry() - Does the real work to add a firmware memmap entry. |
93 | * which expects a pre-allocated struct firmware_map_entry. | ||
94 | * | ||
95 | * @start: Start of the memory range. | 95 | * @start: Start of the memory range. |
96 | * @end: End of the memory range (inclusive). | 96 | * @end: End of the memory range (inclusive). |
97 | * @type: Type of the memory range. | 97 | * @type: Type of the memory range. |
98 | * @entry: Pre-allocated (either kmalloc() or bootmem allocator), uninitialised | 98 | * @entry: Pre-allocated (either kmalloc() or bootmem allocator), uninitialised |
99 | * entry. | 99 | * entry. |
100 | */ | 100 | * |
101 | * Common implementation of firmware_map_add() and firmware_map_add_early() | ||
102 | * which expects a pre-allocated struct firmware_map_entry. | ||
103 | **/ | ||
101 | static int firmware_map_add_entry(resource_size_t start, resource_size_t end, | 104 | static int firmware_map_add_entry(resource_size_t start, resource_size_t end, |
102 | const char *type, | 105 | const char *type, |
103 | struct firmware_map_entry *entry) | 106 | struct firmware_map_entry *entry) |
@@ -115,33 +118,52 @@ static int firmware_map_add_entry(resource_size_t start, resource_size_t end, | |||
115 | return 0; | 118 | return 0; |
116 | } | 119 | } |
117 | 120 | ||
118 | /* | 121 | /** |
119 | * See <linux/firmware-map.h> for documentation. | 122 | * firmware_map_add() - Adds a firmware mapping entry. |
120 | */ | 123 | * @start: Start of the memory range. |
124 | * @end: End of the memory range (inclusive). | ||
125 | * @type: Type of the memory range. | ||
126 | * | ||
127 | * This function uses kmalloc() for memory | ||
128 | * allocation. Use firmware_map_add_early() if you want to use the bootmem | ||
129 | * allocator. | ||
130 | * | ||
131 | * That function must be called before late_initcall. | ||
132 | * | ||
133 | * Returns 0 on success, or -ENOMEM if no memory could be allocated. | ||
134 | **/ | ||
121 | int firmware_map_add(resource_size_t start, resource_size_t end, | 135 | int firmware_map_add(resource_size_t start, resource_size_t end, |
122 | const char *type) | 136 | const char *type) |
123 | { | 137 | { |
124 | struct firmware_map_entry *entry; | 138 | struct firmware_map_entry *entry; |
125 | 139 | ||
126 | entry = kmalloc(sizeof(struct firmware_map_entry), GFP_ATOMIC); | 140 | entry = kmalloc(sizeof(struct firmware_map_entry), GFP_ATOMIC); |
127 | WARN_ON(!entry); | ||
128 | if (!entry) | 141 | if (!entry) |
129 | return -ENOMEM; | 142 | return -ENOMEM; |
130 | 143 | ||
131 | return firmware_map_add_entry(start, end, type, entry); | 144 | return firmware_map_add_entry(start, end, type, entry); |
132 | } | 145 | } |
133 | 146 | ||
134 | /* | 147 | /** |
135 | * See <linux/firmware-map.h> for documentation. | 148 | * firmware_map_add_early() - Adds a firmware mapping entry. |
136 | */ | 149 | * @start: Start of the memory range. |
150 | * @end: End of the memory range (inclusive). | ||
151 | * @type: Type of the memory range. | ||
152 | * | ||
153 | * Adds a firmware mapping entry. This function uses the bootmem allocator | ||
154 | * for memory allocation. Use firmware_map_add() if you want to use kmalloc(). | ||
155 | * | ||
156 | * That function must be called before late_initcall. | ||
157 | * | ||
158 | * Returns 0 on success, or -ENOMEM if no memory could be allocated. | ||
159 | **/ | ||
137 | int __init firmware_map_add_early(resource_size_t start, resource_size_t end, | 160 | int __init firmware_map_add_early(resource_size_t start, resource_size_t end, |
138 | const char *type) | 161 | const char *type) |
139 | { | 162 | { |
140 | struct firmware_map_entry *entry; | 163 | struct firmware_map_entry *entry; |
141 | 164 | ||
142 | entry = alloc_bootmem_low(sizeof(struct firmware_map_entry)); | 165 | entry = alloc_bootmem_low(sizeof(struct firmware_map_entry)); |
143 | WARN_ON(!entry); | 166 | if (WARN_ON(!entry)) |
144 | if (!entry) | ||
145 | return -ENOMEM; | 167 | return -ENOMEM; |
146 | 168 | ||
147 | return firmware_map_add_entry(start, end, type, entry); | 169 | return firmware_map_add_entry(start, end, type, entry); |
@@ -183,7 +205,10 @@ static ssize_t memmap_attr_show(struct kobject *kobj, | |||
183 | /* | 205 | /* |
184 | * Initialises stuff and adds the entries in the map_entries list to | 206 | * Initialises stuff and adds the entries in the map_entries list to |
185 | * sysfs. Important is that firmware_map_add() and firmware_map_add_early() | 207 | * sysfs. Important is that firmware_map_add() and firmware_map_add_early() |
186 | * must be called before late_initcall. | 208 | * must be called before late_initcall. That's just because that function |
209 | * is called as late_initcall() function, which means that if you call | ||
210 | * firmware_map_add() or firmware_map_add_early() afterwards, the entries | ||
211 | * are not added to sysfs. | ||
187 | */ | 212 | */ |
188 | static int __init memmap_init(void) | 213 | static int __init memmap_init(void) |
189 | { | 214 | { |
@@ -192,13 +217,13 @@ static int __init memmap_init(void) | |||
192 | struct kset *memmap_kset; | 217 | struct kset *memmap_kset; |
193 | 218 | ||
194 | memmap_kset = kset_create_and_add("memmap", NULL, firmware_kobj); | 219 | memmap_kset = kset_create_and_add("memmap", NULL, firmware_kobj); |
195 | WARN_ON(!memmap_kset); | 220 | if (WARN_ON(!memmap_kset)) |
196 | if (!memmap_kset) | ||
197 | return -ENOMEM; | 221 | return -ENOMEM; |
198 | 222 | ||
199 | list_for_each_entry(entry, &map_entries, list) { | 223 | list_for_each_entry(entry, &map_entries, list) { |
200 | entry->kobj.kset = memmap_kset; | 224 | entry->kobj.kset = memmap_kset; |
201 | kobject_add(&entry->kobj, NULL, "%d", i++); | 225 | if (kobject_add(&entry->kobj, NULL, "%d", i++)) |
226 | kobject_put(&entry->kobj); | ||
202 | } | 227 | } |
203 | 228 | ||
204 | return 0; | 229 | return 0; |
diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h index 0b0618edd645..1ab919f836a8 100644 --- a/drivers/infiniband/hw/ehca/ehca_classes.h +++ b/drivers/infiniband/hw/ehca/ehca_classes.h | |||
@@ -156,6 +156,14 @@ struct ehca_mod_qp_parm { | |||
156 | 156 | ||
157 | #define EHCA_MOD_QP_PARM_MAX 4 | 157 | #define EHCA_MOD_QP_PARM_MAX 4 |
158 | 158 | ||
159 | #define QMAP_IDX_MASK 0xFFFFULL | ||
160 | |||
161 | /* struct for tracking if cqes have been reported to the application */ | ||
162 | struct ehca_qmap_entry { | ||
163 | u16 app_wr_id; | ||
164 | u16 reported; | ||
165 | }; | ||
166 | |||
159 | struct ehca_qp { | 167 | struct ehca_qp { |
160 | union { | 168 | union { |
161 | struct ib_qp ib_qp; | 169 | struct ib_qp ib_qp; |
@@ -165,6 +173,7 @@ struct ehca_qp { | |||
165 | enum ehca_ext_qp_type ext_type; | 173 | enum ehca_ext_qp_type ext_type; |
166 | enum ib_qp_state state; | 174 | enum ib_qp_state state; |
167 | struct ipz_queue ipz_squeue; | 175 | struct ipz_queue ipz_squeue; |
176 | struct ehca_qmap_entry *sq_map; | ||
168 | struct ipz_queue ipz_rqueue; | 177 | struct ipz_queue ipz_rqueue; |
169 | struct h_galpas galpas; | 178 | struct h_galpas galpas; |
170 | u32 qkey; | 179 | u32 qkey; |
diff --git a/drivers/infiniband/hw/ehca/ehca_qes.h b/drivers/infiniband/hw/ehca/ehca_qes.h index 818803057ebf..5d28e3e98a20 100644 --- a/drivers/infiniband/hw/ehca/ehca_qes.h +++ b/drivers/infiniband/hw/ehca/ehca_qes.h | |||
@@ -213,6 +213,7 @@ struct ehca_wqe { | |||
213 | #define WC_STATUS_ERROR_BIT 0x80000000 | 213 | #define WC_STATUS_ERROR_BIT 0x80000000 |
214 | #define WC_STATUS_REMOTE_ERROR_FLAGS 0x0000F800 | 214 | #define WC_STATUS_REMOTE_ERROR_FLAGS 0x0000F800 |
215 | #define WC_STATUS_PURGE_BIT 0x10 | 215 | #define WC_STATUS_PURGE_BIT 0x10 |
216 | #define WC_SEND_RECEIVE_BIT 0x80 | ||
216 | 217 | ||
217 | struct ehca_cqe { | 218 | struct ehca_cqe { |
218 | u64 work_request_id; | 219 | u64 work_request_id; |
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c index ea13efddf175..b6bcee036734 100644 --- a/drivers/infiniband/hw/ehca/ehca_qp.c +++ b/drivers/infiniband/hw/ehca/ehca_qp.c | |||
@@ -412,6 +412,7 @@ static struct ehca_qp *internal_create_qp( | |||
412 | struct ehca_shca *shca = container_of(pd->device, struct ehca_shca, | 412 | struct ehca_shca *shca = container_of(pd->device, struct ehca_shca, |
413 | ib_device); | 413 | ib_device); |
414 | struct ib_ucontext *context = NULL; | 414 | struct ib_ucontext *context = NULL; |
415 | u32 nr_qes; | ||
415 | u64 h_ret; | 416 | u64 h_ret; |
416 | int is_llqp = 0, has_srq = 0; | 417 | int is_llqp = 0, has_srq = 0; |
417 | int qp_type, max_send_sge, max_recv_sge, ret; | 418 | int qp_type, max_send_sge, max_recv_sge, ret; |
@@ -715,6 +716,15 @@ static struct ehca_qp *internal_create_qp( | |||
715 | "and pages ret=%i", ret); | 716 | "and pages ret=%i", ret); |
716 | goto create_qp_exit2; | 717 | goto create_qp_exit2; |
717 | } | 718 | } |
719 | nr_qes = my_qp->ipz_squeue.queue_length / | ||
720 | my_qp->ipz_squeue.qe_size; | ||
721 | my_qp->sq_map = vmalloc(nr_qes * | ||
722 | sizeof(struct ehca_qmap_entry)); | ||
723 | if (!my_qp->sq_map) { | ||
724 | ehca_err(pd->device, "Couldn't allocate squeue " | ||
725 | "map ret=%i", ret); | ||
726 | goto create_qp_exit3; | ||
727 | } | ||
718 | } | 728 | } |
719 | 729 | ||
720 | if (HAS_RQ(my_qp)) { | 730 | if (HAS_RQ(my_qp)) { |
@@ -724,7 +734,7 @@ static struct ehca_qp *internal_create_qp( | |||
724 | if (ret) { | 734 | if (ret) { |
725 | ehca_err(pd->device, "Couldn't initialize rqueue " | 735 | ehca_err(pd->device, "Couldn't initialize rqueue " |
726 | "and pages ret=%i", ret); | 736 | "and pages ret=%i", ret); |
727 | goto create_qp_exit3; | 737 | goto create_qp_exit4; |
728 | } | 738 | } |
729 | } | 739 | } |
730 | 740 | ||
@@ -770,7 +780,7 @@ static struct ehca_qp *internal_create_qp( | |||
770 | if (!my_qp->mod_qp_parm) { | 780 | if (!my_qp->mod_qp_parm) { |
771 | ehca_err(pd->device, | 781 | ehca_err(pd->device, |
772 | "Could not alloc mod_qp_parm"); | 782 | "Could not alloc mod_qp_parm"); |
773 | goto create_qp_exit4; | 783 | goto create_qp_exit5; |
774 | } | 784 | } |
775 | } | 785 | } |
776 | } | 786 | } |
@@ -780,7 +790,7 @@ static struct ehca_qp *internal_create_qp( | |||
780 | h_ret = ehca_define_sqp(shca, my_qp, init_attr); | 790 | h_ret = ehca_define_sqp(shca, my_qp, init_attr); |
781 | if (h_ret != H_SUCCESS) { | 791 | if (h_ret != H_SUCCESS) { |
782 | ret = ehca2ib_return_code(h_ret); | 792 | ret = ehca2ib_return_code(h_ret); |
783 | goto create_qp_exit5; | 793 | goto create_qp_exit6; |
784 | } | 794 | } |
785 | } | 795 | } |
786 | 796 | ||
@@ -789,7 +799,7 @@ static struct ehca_qp *internal_create_qp( | |||
789 | if (ret) { | 799 | if (ret) { |
790 | ehca_err(pd->device, | 800 | ehca_err(pd->device, |
791 | "Couldn't assign qp to send_cq ret=%i", ret); | 801 | "Couldn't assign qp to send_cq ret=%i", ret); |
792 | goto create_qp_exit5; | 802 | goto create_qp_exit6; |
793 | } | 803 | } |
794 | } | 804 | } |
795 | 805 | ||
@@ -815,22 +825,26 @@ static struct ehca_qp *internal_create_qp( | |||
815 | if (ib_copy_to_udata(udata, &resp, sizeof resp)) { | 825 | if (ib_copy_to_udata(udata, &resp, sizeof resp)) { |
816 | ehca_err(pd->device, "Copy to udata failed"); | 826 | ehca_err(pd->device, "Copy to udata failed"); |
817 | ret = -EINVAL; | 827 | ret = -EINVAL; |
818 | goto create_qp_exit6; | 828 | goto create_qp_exit7; |
819 | } | 829 | } |
820 | } | 830 | } |
821 | 831 | ||
822 | return my_qp; | 832 | return my_qp; |
823 | 833 | ||
824 | create_qp_exit6: | 834 | create_qp_exit7: |
825 | ehca_cq_unassign_qp(my_qp->send_cq, my_qp->real_qp_num); | 835 | ehca_cq_unassign_qp(my_qp->send_cq, my_qp->real_qp_num); |
826 | 836 | ||
827 | create_qp_exit5: | 837 | create_qp_exit6: |
828 | kfree(my_qp->mod_qp_parm); | 838 | kfree(my_qp->mod_qp_parm); |
829 | 839 | ||
830 | create_qp_exit4: | 840 | create_qp_exit5: |
831 | if (HAS_RQ(my_qp)) | 841 | if (HAS_RQ(my_qp)) |
832 | ipz_queue_dtor(my_pd, &my_qp->ipz_rqueue); | 842 | ipz_queue_dtor(my_pd, &my_qp->ipz_rqueue); |
833 | 843 | ||
844 | create_qp_exit4: | ||
845 | if (HAS_SQ(my_qp)) | ||
846 | vfree(my_qp->sq_map); | ||
847 | |||
834 | create_qp_exit3: | 848 | create_qp_exit3: |
835 | if (HAS_SQ(my_qp)) | 849 | if (HAS_SQ(my_qp)) |
836 | ipz_queue_dtor(my_pd, &my_qp->ipz_squeue); | 850 | ipz_queue_dtor(my_pd, &my_qp->ipz_squeue); |
@@ -1534,8 +1548,6 @@ static int internal_modify_qp(struct ib_qp *ibqp, | |||
1534 | if (attr_mask & IB_QP_QKEY) | 1548 | if (attr_mask & IB_QP_QKEY) |
1535 | my_qp->qkey = attr->qkey; | 1549 | my_qp->qkey = attr->qkey; |
1536 | 1550 | ||
1537 | my_qp->state = qp_new_state; | ||
1538 | |||
1539 | modify_qp_exit2: | 1551 | modify_qp_exit2: |
1540 | if (squeue_locked) { /* this means: sqe -> rts */ | 1552 | if (squeue_locked) { /* this means: sqe -> rts */ |
1541 | spin_unlock_irqrestore(&my_qp->spinlock_s, flags); | 1553 | spin_unlock_irqrestore(&my_qp->spinlock_s, flags); |
@@ -1551,6 +1563,8 @@ modify_qp_exit1: | |||
1551 | int ehca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask, | 1563 | int ehca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask, |
1552 | struct ib_udata *udata) | 1564 | struct ib_udata *udata) |
1553 | { | 1565 | { |
1566 | int ret = 0; | ||
1567 | |||
1554 | struct ehca_shca *shca = container_of(ibqp->device, struct ehca_shca, | 1568 | struct ehca_shca *shca = container_of(ibqp->device, struct ehca_shca, |
1555 | ib_device); | 1569 | ib_device); |
1556 | struct ehca_qp *my_qp = container_of(ibqp, struct ehca_qp, ib_qp); | 1570 | struct ehca_qp *my_qp = container_of(ibqp, struct ehca_qp, ib_qp); |
@@ -1597,12 +1611,18 @@ int ehca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask, | |||
1597 | attr->qp_state, my_qp->init_attr.port_num, | 1611 | attr->qp_state, my_qp->init_attr.port_num, |
1598 | ibqp->qp_type); | 1612 | ibqp->qp_type); |
1599 | spin_unlock_irqrestore(&sport->mod_sqp_lock, flags); | 1613 | spin_unlock_irqrestore(&sport->mod_sqp_lock, flags); |
1600 | return 0; | 1614 | goto out; |
1601 | } | 1615 | } |
1602 | spin_unlock_irqrestore(&sport->mod_sqp_lock, flags); | 1616 | spin_unlock_irqrestore(&sport->mod_sqp_lock, flags); |
1603 | } | 1617 | } |
1604 | 1618 | ||
1605 | return internal_modify_qp(ibqp, attr, attr_mask, 0); | 1619 | ret = internal_modify_qp(ibqp, attr, attr_mask, 0); |
1620 | |||
1621 | out: | ||
1622 | if ((ret == 0) && (attr_mask & IB_QP_STATE)) | ||
1623 | my_qp->state = attr->qp_state; | ||
1624 | |||
1625 | return ret; | ||
1606 | } | 1626 | } |
1607 | 1627 | ||
1608 | void ehca_recover_sqp(struct ib_qp *sqp) | 1628 | void ehca_recover_sqp(struct ib_qp *sqp) |
@@ -1973,8 +1993,10 @@ static int internal_destroy_qp(struct ib_device *dev, struct ehca_qp *my_qp, | |||
1973 | 1993 | ||
1974 | if (HAS_RQ(my_qp)) | 1994 | if (HAS_RQ(my_qp)) |
1975 | ipz_queue_dtor(my_pd, &my_qp->ipz_rqueue); | 1995 | ipz_queue_dtor(my_pd, &my_qp->ipz_rqueue); |
1976 | if (HAS_SQ(my_qp)) | 1996 | if (HAS_SQ(my_qp)) { |
1977 | ipz_queue_dtor(my_pd, &my_qp->ipz_squeue); | 1997 | ipz_queue_dtor(my_pd, &my_qp->ipz_squeue); |
1998 | vfree(my_qp->sq_map); | ||
1999 | } | ||
1978 | kmem_cache_free(qp_cache, my_qp); | 2000 | kmem_cache_free(qp_cache, my_qp); |
1979 | atomic_dec(&shca->num_qps); | 2001 | atomic_dec(&shca->num_qps); |
1980 | return 0; | 2002 | return 0; |
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c index 898c8b5c38dd..4426d82fe798 100644 --- a/drivers/infiniband/hw/ehca/ehca_reqs.c +++ b/drivers/infiniband/hw/ehca/ehca_reqs.c | |||
@@ -139,6 +139,7 @@ static void trace_send_wr_ud(const struct ib_send_wr *send_wr) | |||
139 | static inline int ehca_write_swqe(struct ehca_qp *qp, | 139 | static inline int ehca_write_swqe(struct ehca_qp *qp, |
140 | struct ehca_wqe *wqe_p, | 140 | struct ehca_wqe *wqe_p, |
141 | const struct ib_send_wr *send_wr, | 141 | const struct ib_send_wr *send_wr, |
142 | u32 sq_map_idx, | ||
142 | int hidden) | 143 | int hidden) |
143 | { | 144 | { |
144 | u32 idx; | 145 | u32 idx; |
@@ -157,7 +158,11 @@ static inline int ehca_write_swqe(struct ehca_qp *qp, | |||
157 | /* clear wqe header until sglist */ | 158 | /* clear wqe header until sglist */ |
158 | memset(wqe_p, 0, offsetof(struct ehca_wqe, u.ud_av.sg_list)); | 159 | memset(wqe_p, 0, offsetof(struct ehca_wqe, u.ud_av.sg_list)); |
159 | 160 | ||
160 | wqe_p->work_request_id = send_wr->wr_id; | 161 | wqe_p->work_request_id = send_wr->wr_id & ~QMAP_IDX_MASK; |
162 | wqe_p->work_request_id |= sq_map_idx & QMAP_IDX_MASK; | ||
163 | |||
164 | qp->sq_map[sq_map_idx].app_wr_id = send_wr->wr_id & QMAP_IDX_MASK; | ||
165 | qp->sq_map[sq_map_idx].reported = 0; | ||
161 | 166 | ||
162 | switch (send_wr->opcode) { | 167 | switch (send_wr->opcode) { |
163 | case IB_WR_SEND: | 168 | case IB_WR_SEND: |
@@ -381,6 +386,7 @@ static inline int post_one_send(struct ehca_qp *my_qp, | |||
381 | { | 386 | { |
382 | struct ehca_wqe *wqe_p; | 387 | struct ehca_wqe *wqe_p; |
383 | int ret; | 388 | int ret; |
389 | u32 sq_map_idx; | ||
384 | u64 start_offset = my_qp->ipz_squeue.current_q_offset; | 390 | u64 start_offset = my_qp->ipz_squeue.current_q_offset; |
385 | 391 | ||
386 | /* get pointer next to free WQE */ | 392 | /* get pointer next to free WQE */ |
@@ -393,8 +399,15 @@ static inline int post_one_send(struct ehca_qp *my_qp, | |||
393 | "qp_num=%x", my_qp->ib_qp.qp_num); | 399 | "qp_num=%x", my_qp->ib_qp.qp_num); |
394 | return -ENOMEM; | 400 | return -ENOMEM; |
395 | } | 401 | } |
402 | |||
403 | /* | ||
404 | * Get the index of the WQE in the send queue. The same index is used | ||
405 | * for writing into the sq_map. | ||
406 | */ | ||
407 | sq_map_idx = start_offset / my_qp->ipz_squeue.qe_size; | ||
408 | |||
396 | /* write a SEND WQE into the QUEUE */ | 409 | /* write a SEND WQE into the QUEUE */ |
397 | ret = ehca_write_swqe(my_qp, wqe_p, cur_send_wr, hidden); | 410 | ret = ehca_write_swqe(my_qp, wqe_p, cur_send_wr, sq_map_idx, hidden); |
398 | /* | 411 | /* |
399 | * if something failed, | 412 | * if something failed, |
400 | * reset the free entry pointer to the start value | 413 | * reset the free entry pointer to the start value |
@@ -589,7 +602,7 @@ static inline int ehca_poll_cq_one(struct ib_cq *cq, struct ib_wc *wc) | |||
589 | struct ehca_qp *my_qp; | 602 | struct ehca_qp *my_qp; |
590 | int cqe_count = 0, is_error; | 603 | int cqe_count = 0, is_error; |
591 | 604 | ||
592 | poll_cq_one_read_cqe: | 605 | repoll: |
593 | cqe = (struct ehca_cqe *) | 606 | cqe = (struct ehca_cqe *) |
594 | ipz_qeit_get_inc_valid(&my_cq->ipz_queue); | 607 | ipz_qeit_get_inc_valid(&my_cq->ipz_queue); |
595 | if (!cqe) { | 608 | if (!cqe) { |
@@ -617,7 +630,7 @@ poll_cq_one_read_cqe: | |||
617 | ehca_dmp(cqe, 64, "cq_num=%x qp_num=%x", | 630 | ehca_dmp(cqe, 64, "cq_num=%x qp_num=%x", |
618 | my_cq->cq_number, cqe->local_qp_number); | 631 | my_cq->cq_number, cqe->local_qp_number); |
619 | /* ignore this purged cqe */ | 632 | /* ignore this purged cqe */ |
620 | goto poll_cq_one_read_cqe; | 633 | goto repoll; |
621 | } | 634 | } |
622 | spin_lock_irqsave(&qp->spinlock_s, flags); | 635 | spin_lock_irqsave(&qp->spinlock_s, flags); |
623 | purgeflag = qp->sqerr_purgeflag; | 636 | purgeflag = qp->sqerr_purgeflag; |
@@ -636,7 +649,7 @@ poll_cq_one_read_cqe: | |||
636 | * that caused sqe and turn off purge flag | 649 | * that caused sqe and turn off purge flag |
637 | */ | 650 | */ |
638 | qp->sqerr_purgeflag = 0; | 651 | qp->sqerr_purgeflag = 0; |
639 | goto poll_cq_one_read_cqe; | 652 | goto repoll; |
640 | } | 653 | } |
641 | } | 654 | } |
642 | 655 | ||
@@ -654,8 +667,34 @@ poll_cq_one_read_cqe: | |||
654 | my_cq, my_cq->cq_number); | 667 | my_cq, my_cq->cq_number); |
655 | } | 668 | } |
656 | 669 | ||
657 | /* we got a completion! */ | 670 | read_lock(&ehca_qp_idr_lock); |
658 | wc->wr_id = cqe->work_request_id; | 671 | my_qp = idr_find(&ehca_qp_idr, cqe->qp_token); |
672 | read_unlock(&ehca_qp_idr_lock); | ||
673 | if (!my_qp) | ||
674 | goto repoll; | ||
675 | wc->qp = &my_qp->ib_qp; | ||
676 | |||
677 | if (!(cqe->w_completion_flags & WC_SEND_RECEIVE_BIT)) { | ||
678 | struct ehca_qmap_entry *qmap_entry; | ||
679 | /* | ||
680 | * We got a send completion and need to restore the original | ||
681 | * wr_id. | ||
682 | */ | ||
683 | qmap_entry = &my_qp->sq_map[cqe->work_request_id & | ||
684 | QMAP_IDX_MASK]; | ||
685 | |||
686 | if (qmap_entry->reported) { | ||
687 | ehca_warn(cq->device, "Double cqe on qp_num=%#x", | ||
688 | my_qp->real_qp_num); | ||
689 | /* found a double cqe, discard it and read next one */ | ||
690 | goto repoll; | ||
691 | } | ||
692 | wc->wr_id = cqe->work_request_id & ~QMAP_IDX_MASK; | ||
693 | wc->wr_id |= qmap_entry->app_wr_id; | ||
694 | qmap_entry->reported = 1; | ||
695 | } else | ||
696 | /* We got a receive completion. */ | ||
697 | wc->wr_id = cqe->work_request_id; | ||
659 | 698 | ||
660 | /* eval ib_wc_opcode */ | 699 | /* eval ib_wc_opcode */ |
661 | wc->opcode = ib_wc_opcode[cqe->optype]-1; | 700 | wc->opcode = ib_wc_opcode[cqe->optype]-1; |
@@ -667,7 +706,7 @@ poll_cq_one_read_cqe: | |||
667 | ehca_dmp(cqe, 64, "ehca_cq=%p cq_num=%x", | 706 | ehca_dmp(cqe, 64, "ehca_cq=%p cq_num=%x", |
668 | my_cq, my_cq->cq_number); | 707 | my_cq, my_cq->cq_number); |
669 | /* update also queue adder to throw away this entry!!! */ | 708 | /* update also queue adder to throw away this entry!!! */ |
670 | goto poll_cq_one_exit0; | 709 | goto repoll; |
671 | } | 710 | } |
672 | 711 | ||
673 | /* eval ib_wc_status */ | 712 | /* eval ib_wc_status */ |
@@ -678,11 +717,6 @@ poll_cq_one_read_cqe: | |||
678 | } else | 717 | } else |
679 | wc->status = IB_WC_SUCCESS; | 718 | wc->status = IB_WC_SUCCESS; |
680 | 719 | ||
681 | read_lock(&ehca_qp_idr_lock); | ||
682 | my_qp = idr_find(&ehca_qp_idr, cqe->qp_token); | ||
683 | wc->qp = &my_qp->ib_qp; | ||
684 | read_unlock(&ehca_qp_idr_lock); | ||
685 | |||
686 | wc->byte_len = cqe->nr_bytes_transferred; | 720 | wc->byte_len = cqe->nr_bytes_transferred; |
687 | wc->pkey_index = cqe->pkey_index; | 721 | wc->pkey_index = cqe->pkey_index; |
688 | wc->slid = cqe->rlid; | 722 | wc->slid = cqe->rlid; |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c index 7ebc400a4b3d..341ffedafed6 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c | |||
@@ -202,7 +202,7 @@ static void ipoib_cm_free_rx_ring(struct net_device *dev, | |||
202 | dev_kfree_skb_any(rx_ring[i].skb); | 202 | dev_kfree_skb_any(rx_ring[i].skb); |
203 | } | 203 | } |
204 | 204 | ||
205 | kfree(rx_ring); | 205 | vfree(rx_ring); |
206 | } | 206 | } |
207 | 207 | ||
208 | static void ipoib_cm_start_rx_drain(struct ipoib_dev_priv *priv) | 208 | static void ipoib_cm_start_rx_drain(struct ipoib_dev_priv *priv) |
@@ -352,9 +352,14 @@ static int ipoib_cm_nonsrq_init_rx(struct net_device *dev, struct ib_cm_id *cm_i | |||
352 | int ret; | 352 | int ret; |
353 | int i; | 353 | int i; |
354 | 354 | ||
355 | rx->rx_ring = kcalloc(ipoib_recvq_size, sizeof *rx->rx_ring, GFP_KERNEL); | 355 | rx->rx_ring = vmalloc(ipoib_recvq_size * sizeof *rx->rx_ring); |
356 | if (!rx->rx_ring) | 356 | if (!rx->rx_ring) { |
357 | printk(KERN_WARNING "%s: failed to allocate CM non-SRQ ring (%d entries)\n", | ||
358 | priv->ca->name, ipoib_recvq_size); | ||
357 | return -ENOMEM; | 359 | return -ENOMEM; |
360 | } | ||
361 | |||
362 | memset(rx->rx_ring, 0, ipoib_recvq_size * sizeof *rx->rx_ring); | ||
358 | 363 | ||
359 | t = kmalloc(sizeof *t, GFP_KERNEL); | 364 | t = kmalloc(sizeof *t, GFP_KERNEL); |
360 | if (!t) { | 365 | if (!t) { |
@@ -1494,14 +1499,16 @@ static void ipoib_cm_create_srq(struct net_device *dev, int max_sge) | |||
1494 | return; | 1499 | return; |
1495 | } | 1500 | } |
1496 | 1501 | ||
1497 | priv->cm.srq_ring = kzalloc(ipoib_recvq_size * sizeof *priv->cm.srq_ring, | 1502 | priv->cm.srq_ring = vmalloc(ipoib_recvq_size * sizeof *priv->cm.srq_ring); |
1498 | GFP_KERNEL); | ||
1499 | if (!priv->cm.srq_ring) { | 1503 | if (!priv->cm.srq_ring) { |
1500 | printk(KERN_WARNING "%s: failed to allocate CM SRQ ring (%d entries)\n", | 1504 | printk(KERN_WARNING "%s: failed to allocate CM SRQ ring (%d entries)\n", |
1501 | priv->ca->name, ipoib_recvq_size); | 1505 | priv->ca->name, ipoib_recvq_size); |
1502 | ib_destroy_srq(priv->cm.srq); | 1506 | ib_destroy_srq(priv->cm.srq); |
1503 | priv->cm.srq = NULL; | 1507 | priv->cm.srq = NULL; |
1508 | return; | ||
1504 | } | 1509 | } |
1510 | |||
1511 | memset(priv->cm.srq_ring, 0, ipoib_recvq_size * sizeof *priv->cm.srq_ring); | ||
1505 | } | 1512 | } |
1506 | 1513 | ||
1507 | int ipoib_cm_dev_init(struct net_device *dev) | 1514 | int ipoib_cm_dev_init(struct net_device *dev) |
diff --git a/drivers/lguest/page_tables.c b/drivers/lguest/page_tables.c index d93500f24fbb..81d0c6053447 100644 --- a/drivers/lguest/page_tables.c +++ b/drivers/lguest/page_tables.c | |||
@@ -108,9 +108,8 @@ static unsigned long gpte_addr(pgd_t gpgd, unsigned long vaddr) | |||
108 | } | 108 | } |
109 | /*:*/ | 109 | /*:*/ |
110 | 110 | ||
111 | /*M:014 get_pfn is slow; it takes the mmap sem and calls get_user_pages. We | 111 | /*M:014 get_pfn is slow: we could probably try to grab batches of pages here as |
112 | * could probably try to grab batches of pages here as an optimization | 112 | * an optimization (ie. pre-faulting). :*/ |
113 | * (ie. pre-faulting). :*/ | ||
114 | 113 | ||
115 | /*H:350 This routine takes a page number given by the Guest and converts it to | 114 | /*H:350 This routine takes a page number given by the Guest and converts it to |
116 | * an actual, physical page number. It can fail for several reasons: the | 115 | * an actual, physical page number. It can fail for several reasons: the |
@@ -123,19 +122,13 @@ static unsigned long gpte_addr(pgd_t gpgd, unsigned long vaddr) | |||
123 | static unsigned long get_pfn(unsigned long virtpfn, int write) | 122 | static unsigned long get_pfn(unsigned long virtpfn, int write) |
124 | { | 123 | { |
125 | struct page *page; | 124 | struct page *page; |
126 | /* This value indicates failure. */ | ||
127 | unsigned long ret = -1UL; | ||
128 | 125 | ||
129 | /* get_user_pages() is a complex interface: it gets the "struct | 126 | /* gup me one page at this address please! */ |
130 | * vm_area_struct" and "struct page" assocated with a range of pages. | 127 | if (get_user_pages_fast(virtpfn << PAGE_SHIFT, 1, write, &page) == 1) |
131 | * It also needs the task's mmap_sem held, and is not very quick. | 128 | return page_to_pfn(page); |
132 | * It returns the number of pages it got. */ | 129 | |
133 | down_read(¤t->mm->mmap_sem); | 130 | /* This value indicates failure. */ |
134 | if (get_user_pages(current, current->mm, virtpfn << PAGE_SHIFT, | 131 | return -1UL; |
135 | 1, write, 1, &page, NULL) == 1) | ||
136 | ret = page_to_pfn(page); | ||
137 | up_read(¤t->mm->mmap_sem); | ||
138 | return ret; | ||
139 | } | 132 | } |
140 | 133 | ||
141 | /*H:340 Converting a Guest page table entry to a shadow (ie. real) page table | 134 | /*H:340 Converting a Guest page table entry to a shadow (ie. real) page table |
@@ -174,7 +167,7 @@ static pte_t gpte_to_spte(struct lg_cpu *cpu, pte_t gpte, int write) | |||
174 | /*H:460 And to complete the chain, release_pte() looks like this: */ | 167 | /*H:460 And to complete the chain, release_pte() looks like this: */ |
175 | static void release_pte(pte_t pte) | 168 | static void release_pte(pte_t pte) |
176 | { | 169 | { |
177 | /* Remember that get_user_pages() took a reference to the page, in | 170 | /* Remember that get_user_pages_fast() took a reference to the page, in |
178 | * get_pfn()? We have to put it back now. */ | 171 | * get_pfn()? We have to put it back now. */ |
179 | if (pte_flags(pte) & _PAGE_PRESENT) | 172 | if (pte_flags(pte) & _PAGE_PRESENT) |
180 | put_page(pfn_to_page(pte_pfn(pte))); | 173 | put_page(pfn_to_page(pte_pfn(pte))); |
diff --git a/drivers/misc/sgi-gru/grutables.h b/drivers/misc/sgi-gru/grutables.h index 4251018f70ff..a78f70deeb59 100644 --- a/drivers/misc/sgi-gru/grutables.h +++ b/drivers/misc/sgi-gru/grutables.h | |||
@@ -279,7 +279,7 @@ struct gru_stats_s { | |||
279 | #if defined CONFIG_IA64 | 279 | #if defined CONFIG_IA64 |
280 | #define VADDR_HI_BIT 64 | 280 | #define VADDR_HI_BIT 64 |
281 | #define GRUREGION(addr) ((addr) >> (VADDR_HI_BIT - 3) & 3) | 281 | #define GRUREGION(addr) ((addr) >> (VADDR_HI_BIT - 3) & 3) |
282 | #elif defined __x86_64 | 282 | #elif defined CONFIG_X86_64 |
283 | #define VADDR_HI_BIT 48 | 283 | #define VADDR_HI_BIT 48 |
284 | #define GRUREGION(addr) (0) /* ZZZ could do better */ | 284 | #define GRUREGION(addr) (0) /* ZZZ could do better */ |
285 | #else | 285 | #else |
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index 856cc1af40df..35dcc06eb3e2 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c | |||
@@ -13,7 +13,6 @@ | |||
13 | 13 | ||
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
15 | #include <linux/rtc.h> | 15 | #include <linux/rtc.h> |
16 | #include <linux/smp_lock.h> | ||
17 | #include "rtc-core.h" | 16 | #include "rtc-core.h" |
18 | 17 | ||
19 | static dev_t rtc_devt; | 18 | static dev_t rtc_devt; |
@@ -27,11 +26,8 @@ static int rtc_dev_open(struct inode *inode, struct file *file) | |||
27 | struct rtc_device, char_dev); | 26 | struct rtc_device, char_dev); |
28 | const struct rtc_class_ops *ops = rtc->ops; | 27 | const struct rtc_class_ops *ops = rtc->ops; |
29 | 28 | ||
30 | lock_kernel(); | 29 | if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags)) |
31 | if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags)) { | 30 | return -EBUSY; |
32 | err = -EBUSY; | ||
33 | goto out; | ||
34 | } | ||
35 | 31 | ||
36 | file->private_data = rtc; | 32 | file->private_data = rtc; |
37 | 33 | ||
@@ -41,13 +37,11 @@ static int rtc_dev_open(struct inode *inode, struct file *file) | |||
41 | rtc->irq_data = 0; | 37 | rtc->irq_data = 0; |
42 | spin_unlock_irq(&rtc->irq_lock); | 38 | spin_unlock_irq(&rtc->irq_lock); |
43 | 39 | ||
44 | goto out; | 40 | return 0; |
45 | } | 41 | } |
46 | 42 | ||
47 | /* something has gone wrong */ | 43 | /* something has gone wrong */ |
48 | clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags); | 44 | clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags); |
49 | out: | ||
50 | unlock_kernel(); | ||
51 | return err; | 45 | return err; |
52 | } | 46 | } |
53 | 47 | ||
diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c index fbb90b1e4098..a81adab6e515 100644 --- a/drivers/rtc/rtc-isl1208.c +++ b/drivers/rtc/rtc-isl1208.c | |||
@@ -482,7 +482,7 @@ isl1208_sysfs_register(struct device *dev) | |||
482 | static int | 482 | static int |
483 | isl1208_sysfs_unregister(struct device *dev) | 483 | isl1208_sysfs_unregister(struct device *dev) |
484 | { | 484 | { |
485 | device_remove_file(dev, &dev_attr_atrim); | 485 | device_remove_file(dev, &dev_attr_dtrim); |
486 | device_remove_file(dev, &dev_attr_atrim); | 486 | device_remove_file(dev, &dev_attr_atrim); |
487 | device_remove_file(dev, &dev_attr_usr); | 487 | device_remove_file(dev, &dev_attr_usr); |
488 | 488 | ||
diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c index fcdd73f25625..994da56fffed 100644 --- a/drivers/scsi/device_handler/scsi_dh_alua.c +++ b/drivers/scsi/device_handler/scsi_dh_alua.c | |||
@@ -680,7 +680,7 @@ static int alua_prep_fn(struct scsi_device *sdev, struct request *req) | |||
680 | 680 | ||
681 | } | 681 | } |
682 | 682 | ||
683 | const struct scsi_dh_devlist alua_dev_list[] = { | 683 | static const struct scsi_dh_devlist alua_dev_list[] = { |
684 | {"HP", "MSA VOLUME" }, | 684 | {"HP", "MSA VOLUME" }, |
685 | {"HP", "HSV101" }, | 685 | {"HP", "HSV101" }, |
686 | {"HP", "HSV111" }, | 686 | {"HP", "HSV111" }, |
diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c index aa46b131b20e..b9d23e9e9a44 100644 --- a/drivers/scsi/device_handler/scsi_dh_emc.c +++ b/drivers/scsi/device_handler/scsi_dh_emc.c | |||
@@ -562,7 +562,7 @@ done: | |||
562 | return result; | 562 | return result; |
563 | } | 563 | } |
564 | 564 | ||
565 | const struct scsi_dh_devlist clariion_dev_list[] = { | 565 | static const struct scsi_dh_devlist clariion_dev_list[] = { |
566 | {"DGC", "RAID"}, | 566 | {"DGC", "RAID"}, |
567 | {"DGC", "DISK"}, | 567 | {"DGC", "DISK"}, |
568 | {"DGC", "VRAID"}, | 568 | {"DGC", "VRAID"}, |
diff --git a/drivers/scsi/device_handler/scsi_dh_hp_sw.c b/drivers/scsi/device_handler/scsi_dh_hp_sw.c index 9c7a1f8ebb72..a6a4ef3ad51c 100644 --- a/drivers/scsi/device_handler/scsi_dh_hp_sw.c +++ b/drivers/scsi/device_handler/scsi_dh_hp_sw.c | |||
@@ -282,7 +282,7 @@ static int hp_sw_activate(struct scsi_device *sdev) | |||
282 | return ret; | 282 | return ret; |
283 | } | 283 | } |
284 | 284 | ||
285 | const struct scsi_dh_devlist hp_sw_dh_data_list[] = { | 285 | static const struct scsi_dh_devlist hp_sw_dh_data_list[] = { |
286 | {"COMPAQ", "MSA1000 VOLUME"}, | 286 | {"COMPAQ", "MSA1000 VOLUME"}, |
287 | {"COMPAQ", "HSV110"}, | 287 | {"COMPAQ", "HSV110"}, |
288 | {"HP", "HSV100"}, | 288 | {"HP", "HSV100"}, |
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c index b093a501f8ae..e7c7b4ebc1fe 100644 --- a/drivers/scsi/device_handler/scsi_dh_rdac.c +++ b/drivers/scsi/device_handler/scsi_dh_rdac.c | |||
@@ -574,7 +574,7 @@ static int rdac_check_sense(struct scsi_device *sdev, | |||
574 | return SCSI_RETURN_NOT_HANDLED; | 574 | return SCSI_RETURN_NOT_HANDLED; |
575 | } | 575 | } |
576 | 576 | ||
577 | const struct scsi_dh_devlist rdac_dev_list[] = { | 577 | static const struct scsi_dh_devlist rdac_dev_list[] = { |
578 | {"IBM", "1722"}, | 578 | {"IBM", "1722"}, |
579 | {"IBM", "1724"}, | 579 | {"IBM", "1724"}, |
580 | {"IBM", "1726"}, | 580 | {"IBM", "1726"}, |
diff --git a/drivers/usb/misc/isight_firmware.c b/drivers/usb/misc/isight_firmware.c index d94aa7387608..b897f6554ecd 100644 --- a/drivers/usb/misc/isight_firmware.c +++ b/drivers/usb/misc/isight_firmware.c | |||
@@ -48,7 +48,8 @@ static int isight_firmware_load(struct usb_interface *intf, | |||
48 | 48 | ||
49 | if (request_firmware(&firmware, "isight.fw", &dev->dev) != 0) { | 49 | if (request_firmware(&firmware, "isight.fw", &dev->dev) != 0) { |
50 | printk(KERN_ERR "Unable to load isight firmware\n"); | 50 | printk(KERN_ERR "Unable to load isight firmware\n"); |
51 | return -ENODEV; | 51 | ret = -ENODEV; |
52 | goto out; | ||
52 | } | 53 | } |
53 | 54 | ||
54 | ptr = firmware->data; | 55 | ptr = firmware->data; |
@@ -91,7 +92,6 @@ static int isight_firmware_load(struct usb_interface *intf, | |||
91 | buf, llen, 300) != llen) { | 92 | buf, llen, 300) != llen) { |
92 | printk(KERN_ERR | 93 | printk(KERN_ERR |
93 | "Failed to load isight firmware\n"); | 94 | "Failed to load isight firmware\n"); |
94 | kfree(buf); | ||
95 | ret = -ENODEV; | 95 | ret = -ENODEV; |
96 | goto out; | 96 | goto out; |
97 | } | 97 | } |
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c index e7018a2f56af..9c5925927ece 100644 --- a/drivers/video/atmel_lcdfb.c +++ b/drivers/video/atmel_lcdfb.c | |||
@@ -39,7 +39,9 @@ | |||
39 | #endif | 39 | #endif |
40 | 40 | ||
41 | #if defined(CONFIG_ARCH_AT91) | 41 | #if defined(CONFIG_ARCH_AT91) |
42 | #define ATMEL_LCDFB_FBINFO_DEFAULT FBINFO_DEFAULT | 42 | #define ATMEL_LCDFB_FBINFO_DEFAULT (FBINFO_DEFAULT \ |
43 | | FBINFO_PARTIAL_PAN_OK \ | ||
44 | | FBINFO_HWACCEL_YPAN) | ||
43 | 45 | ||
44 | static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo, | 46 | static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo, |
45 | struct fb_var_screeninfo *var) | 47 | struct fb_var_screeninfo *var) |
@@ -177,7 +179,7 @@ static struct fb_fix_screeninfo atmel_lcdfb_fix __initdata = { | |||
177 | .type = FB_TYPE_PACKED_PIXELS, | 179 | .type = FB_TYPE_PACKED_PIXELS, |
178 | .visual = FB_VISUAL_TRUECOLOR, | 180 | .visual = FB_VISUAL_TRUECOLOR, |
179 | .xpanstep = 0, | 181 | .xpanstep = 0, |
180 | .ypanstep = 0, | 182 | .ypanstep = 1, |
181 | .ywrapstep = 0, | 183 | .ywrapstep = 0, |
182 | .accel = FB_ACCEL_NONE, | 184 | .accel = FB_ACCEL_NONE, |
183 | }; | 185 | }; |
@@ -240,9 +242,11 @@ static int atmel_lcdfb_alloc_video_memory(struct atmel_lcdfb_info *sinfo) | |||
240 | { | 242 | { |
241 | struct fb_info *info = sinfo->info; | 243 | struct fb_info *info = sinfo->info; |
242 | struct fb_var_screeninfo *var = &info->var; | 244 | struct fb_var_screeninfo *var = &info->var; |
245 | unsigned int smem_len; | ||
243 | 246 | ||
244 | info->fix.smem_len = (var->xres_virtual * var->yres_virtual | 247 | smem_len = (var->xres_virtual * var->yres_virtual |
245 | * ((var->bits_per_pixel + 7) / 8)); | 248 | * ((var->bits_per_pixel + 7) / 8)); |
249 | info->fix.smem_len = max(smem_len, sinfo->smem_len); | ||
246 | 250 | ||
247 | info->screen_base = dma_alloc_writecombine(info->device, info->fix.smem_len, | 251 | info->screen_base = dma_alloc_writecombine(info->device, info->fix.smem_len, |
248 | (dma_addr_t *)&info->fix.smem_start, GFP_KERNEL); | 252 | (dma_addr_t *)&info->fix.smem_start, GFP_KERNEL); |
@@ -794,6 +798,7 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev) | |||
794 | sinfo->default_monspecs = pdata_sinfo->default_monspecs; | 798 | sinfo->default_monspecs = pdata_sinfo->default_monspecs; |
795 | sinfo->atmel_lcdfb_power_control = pdata_sinfo->atmel_lcdfb_power_control; | 799 | sinfo->atmel_lcdfb_power_control = pdata_sinfo->atmel_lcdfb_power_control; |
796 | sinfo->guard_time = pdata_sinfo->guard_time; | 800 | sinfo->guard_time = pdata_sinfo->guard_time; |
801 | sinfo->smem_len = pdata_sinfo->smem_len; | ||
797 | sinfo->lcdcon_is_backlight = pdata_sinfo->lcdcon_is_backlight; | 802 | sinfo->lcdcon_is_backlight = pdata_sinfo->lcdcon_is_backlight; |
798 | sinfo->lcd_wiring_mode = pdata_sinfo->lcd_wiring_mode; | 803 | sinfo->lcd_wiring_mode = pdata_sinfo->lcd_wiring_mode; |
799 | } else { | 804 | } else { |
diff --git a/drivers/video/aty/radeon_accel.c b/drivers/video/aty/radeon_accel.c index 4d13f68436e6..aa95f8350242 100644 --- a/drivers/video/aty/radeon_accel.c +++ b/drivers/video/aty/radeon_accel.c | |||
@@ -55,6 +55,10 @@ static void radeonfb_prim_fillrect(struct radeonfb_info *rinfo, | |||
55 | OUTREG(DP_WRITE_MSK, 0xffffffff); | 55 | OUTREG(DP_WRITE_MSK, 0xffffffff); |
56 | OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM)); | 56 | OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM)); |
57 | 57 | ||
58 | radeon_fifo_wait(2); | ||
59 | OUTREG(DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL); | ||
60 | OUTREG(WAIT_UNTIL, (WAIT_2D_IDLECLEAN | WAIT_DMA_GUI_IDLE)); | ||
61 | |||
58 | radeon_fifo_wait(2); | 62 | radeon_fifo_wait(2); |
59 | OUTREG(DST_Y_X, (region->dy << 16) | region->dx); | 63 | OUTREG(DST_Y_X, (region->dy << 16) | region->dx); |
60 | OUTREG(DST_WIDTH_HEIGHT, (region->width << 16) | region->height); | 64 | OUTREG(DST_WIDTH_HEIGHT, (region->width << 16) | region->height); |
@@ -116,6 +120,10 @@ static void radeonfb_prim_copyarea(struct radeonfb_info *rinfo, | |||
116 | OUTREG(DP_CNTL, (xdir>=0 ? DST_X_LEFT_TO_RIGHT : 0) | 120 | OUTREG(DP_CNTL, (xdir>=0 ? DST_X_LEFT_TO_RIGHT : 0) |
117 | | (ydir>=0 ? DST_Y_TOP_TO_BOTTOM : 0)); | 121 | | (ydir>=0 ? DST_Y_TOP_TO_BOTTOM : 0)); |
118 | 122 | ||
123 | radeon_fifo_wait(2); | ||
124 | OUTREG(DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL); | ||
125 | OUTREG(WAIT_UNTIL, (WAIT_2D_IDLECLEAN | WAIT_DMA_GUI_IDLE)); | ||
126 | |||
119 | radeon_fifo_wait(3); | 127 | radeon_fifo_wait(3); |
120 | OUTREG(SRC_Y_X, (sy << 16) | sx); | 128 | OUTREG(SRC_Y_X, (sy << 16) | sx); |
121 | OUTREG(DST_Y_X, (dy << 16) | dx); | 129 | OUTREG(DST_Y_X, (dy << 16) | dx); |
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 33859934a8e4..c6299e8a041d 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -2518,7 +2518,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, | |||
2518 | c = vc->vc_video_erase_char; | 2518 | c = vc->vc_video_erase_char; |
2519 | vc->vc_video_erase_char = | 2519 | vc->vc_video_erase_char = |
2520 | ((c & 0xfe00) >> 1) | (c & 0xff); | 2520 | ((c & 0xfe00) >> 1) | (c & 0xff); |
2521 | c = vc->vc_def_color; | 2521 | c = vc->vc_scrl_erase_char; |
2522 | vc->vc_scrl_erase_char = | 2522 | vc->vc_scrl_erase_char = |
2523 | ((c & 0xFE00) >> 1) | (c & 0xFF); | 2523 | ((c & 0xFE00) >> 1) | (c & 0xFF); |
2524 | vc->vc_attr >>= 1; | 2524 | vc->vc_attr >>= 1; |
@@ -2551,7 +2551,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, | |||
2551 | if (vc->vc_can_do_color) { | 2551 | if (vc->vc_can_do_color) { |
2552 | vc->vc_video_erase_char = | 2552 | vc->vc_video_erase_char = |
2553 | ((c & 0xff00) << 1) | (c & 0xff); | 2553 | ((c & 0xff00) << 1) | (c & 0xff); |
2554 | c = vc->vc_def_color; | 2554 | c = vc->vc_scrl_erase_char; |
2555 | vc->vc_scrl_erase_char = | 2555 | vc->vc_scrl_erase_char = |
2556 | ((c & 0xFF00) << 1) | (c & 0xFF); | 2556 | ((c & 0xFF00) << 1) | (c & 0xFF); |
2557 | vc->vc_attr <<= 1; | 2557 | vc->vc_attr <<= 1; |
diff --git a/drivers/video/matrox/i2c-matroxfb.c b/drivers/video/matrox/i2c-matroxfb.c index 75ee5a12e549..c14e3e2212b3 100644 --- a/drivers/video/matrox/i2c-matroxfb.c +++ b/drivers/video/matrox/i2c-matroxfb.c | |||
@@ -87,13 +87,7 @@ static int matroxfb_gpio_getscl(void* data) { | |||
87 | return (matroxfb_read_gpio(b->minfo) & b->mask.clock) ? 1 : 0; | 87 | return (matroxfb_read_gpio(b->minfo) & b->mask.clock) ? 1 : 0; |
88 | } | 88 | } |
89 | 89 | ||
90 | static struct i2c_adapter matrox_i2c_adapter_template = | 90 | static const struct i2c_algo_bit_data matrox_i2c_algo_template = |
91 | { | ||
92 | .owner = THIS_MODULE, | ||
93 | .id = I2C_HW_B_G400, | ||
94 | }; | ||
95 | |||
96 | static struct i2c_algo_bit_data matrox_i2c_algo_template = | ||
97 | { | 91 | { |
98 | .setsda = matroxfb_gpio_setsda, | 92 | .setsda = matroxfb_gpio_setsda, |
99 | .setscl = matroxfb_gpio_setscl, | 93 | .setscl = matroxfb_gpio_setscl, |
@@ -112,7 +106,7 @@ static int i2c_bus_reg(struct i2c_bit_adapter* b, struct matrox_fb_info* minfo, | |||
112 | b->minfo = minfo; | 106 | b->minfo = minfo; |
113 | b->mask.data = data; | 107 | b->mask.data = data; |
114 | b->mask.clock = clock; | 108 | b->mask.clock = clock; |
115 | b->adapter = matrox_i2c_adapter_template; | 109 | b->adapter.owner = THIS_MODULE; |
116 | snprintf(b->adapter.name, sizeof(b->adapter.name), name, | 110 | snprintf(b->adapter.name, sizeof(b->adapter.name), name, |
117 | minfo->fbcon.node); | 111 | minfo->fbcon.node); |
118 | i2c_set_adapdata(&b->adapter, b); | 112 | i2c_set_adapdata(&b->adapter, b); |
@@ -187,6 +181,17 @@ static void* i2c_matroxfb_probe(struct matrox_fb_info* minfo) { | |||
187 | MAT_DATA, MAT_CLK, "MAVEN:fb%u", 0); | 181 | MAT_DATA, MAT_CLK, "MAVEN:fb%u", 0); |
188 | if (err) | 182 | if (err) |
189 | printk(KERN_INFO "i2c-matroxfb: Could not register Maven i2c bus. Continuing anyway.\n"); | 183 | printk(KERN_INFO "i2c-matroxfb: Could not register Maven i2c bus. Continuing anyway.\n"); |
184 | else { | ||
185 | struct i2c_board_info maven_info = { | ||
186 | I2C_BOARD_INFO("maven", 0x1b), | ||
187 | }; | ||
188 | unsigned short const addr_list[2] = { | ||
189 | 0x1b, I2C_CLIENT_END | ||
190 | }; | ||
191 | |||
192 | i2c_new_probed_device(&m2info->maven.adapter, | ||
193 | &maven_info, addr_list); | ||
194 | } | ||
190 | } | 195 | } |
191 | return m2info; | 196 | return m2info; |
192 | fail_ddc1:; | 197 | fail_ddc1:; |
diff --git a/drivers/video/matrox/matroxfb_maven.c b/drivers/video/matrox/matroxfb_maven.c index 89da27bd5c49..042408a8c631 100644 --- a/drivers/video/matrox/matroxfb_maven.c +++ b/drivers/video/matrox/matroxfb_maven.c | |||
@@ -19,8 +19,6 @@ | |||
19 | #include <linux/matroxfb.h> | 19 | #include <linux/matroxfb.h> |
20 | #include <asm/div64.h> | 20 | #include <asm/div64.h> |
21 | 21 | ||
22 | #define MAVEN_I2CID (0x1B) | ||
23 | |||
24 | #define MGATVO_B 1 | 22 | #define MGATVO_B 1 |
25 | #define MGATVO_C 2 | 23 | #define MGATVO_C 2 |
26 | 24 | ||
@@ -128,7 +126,7 @@ static int get_ctrl_id(__u32 v4l2_id) { | |||
128 | 126 | ||
129 | struct maven_data { | 127 | struct maven_data { |
130 | struct matrox_fb_info* primary_head; | 128 | struct matrox_fb_info* primary_head; |
131 | struct i2c_client client; | 129 | struct i2c_client *client; |
132 | int version; | 130 | int version; |
133 | }; | 131 | }; |
134 | 132 | ||
@@ -974,7 +972,7 @@ static inline int maven_compute_timming(struct maven_data* md, | |||
974 | 972 | ||
975 | static int maven_program_timming(struct maven_data* md, | 973 | static int maven_program_timming(struct maven_data* md, |
976 | const struct mavenregs* m) { | 974 | const struct mavenregs* m) { |
977 | struct i2c_client* c = &md->client; | 975 | struct i2c_client *c = md->client; |
978 | 976 | ||
979 | if (m->mode == MATROXFB_OUTPUT_MODE_MONITOR) { | 977 | if (m->mode == MATROXFB_OUTPUT_MODE_MONITOR) { |
980 | LR(0x80); | 978 | LR(0x80); |
@@ -1011,7 +1009,7 @@ static int maven_program_timming(struct maven_data* md, | |||
1011 | } | 1009 | } |
1012 | 1010 | ||
1013 | static inline int maven_resync(struct maven_data* md) { | 1011 | static inline int maven_resync(struct maven_data* md) { |
1014 | struct i2c_client* c = &md->client; | 1012 | struct i2c_client *c = md->client; |
1015 | maven_set_reg(c, 0x95, 0x20); /* start whole thing */ | 1013 | maven_set_reg(c, 0x95, 0x20); /* start whole thing */ |
1016 | return 0; | 1014 | return 0; |
1017 | } | 1015 | } |
@@ -1069,48 +1067,48 @@ static int maven_set_control (struct maven_data* md, | |||
1069 | maven_compute_bwlevel(md, &blacklevel, &whitelevel); | 1067 | maven_compute_bwlevel(md, &blacklevel, &whitelevel); |
1070 | blacklevel = (blacklevel >> 2) | ((blacklevel & 3) << 8); | 1068 | blacklevel = (blacklevel >> 2) | ((blacklevel & 3) << 8); |
1071 | whitelevel = (whitelevel >> 2) | ((whitelevel & 3) << 8); | 1069 | whitelevel = (whitelevel >> 2) | ((whitelevel & 3) << 8); |
1072 | maven_set_reg_pair(&md->client, 0x0e, blacklevel); | 1070 | maven_set_reg_pair(md->client, 0x0e, blacklevel); |
1073 | maven_set_reg_pair(&md->client, 0x1e, whitelevel); | 1071 | maven_set_reg_pair(md->client, 0x1e, whitelevel); |
1074 | } | 1072 | } |
1075 | break; | 1073 | break; |
1076 | case V4L2_CID_SATURATION: | 1074 | case V4L2_CID_SATURATION: |
1077 | { | 1075 | { |
1078 | maven_set_reg(&md->client, 0x20, p->value); | 1076 | maven_set_reg(md->client, 0x20, p->value); |
1079 | maven_set_reg(&md->client, 0x22, p->value); | 1077 | maven_set_reg(md->client, 0x22, p->value); |
1080 | } | 1078 | } |
1081 | break; | 1079 | break; |
1082 | case V4L2_CID_HUE: | 1080 | case V4L2_CID_HUE: |
1083 | { | 1081 | { |
1084 | maven_set_reg(&md->client, 0x25, p->value); | 1082 | maven_set_reg(md->client, 0x25, p->value); |
1085 | } | 1083 | } |
1086 | break; | 1084 | break; |
1087 | case V4L2_CID_GAMMA: | 1085 | case V4L2_CID_GAMMA: |
1088 | { | 1086 | { |
1089 | const struct maven_gamma* g; | 1087 | const struct maven_gamma* g; |
1090 | g = maven_compute_gamma(md); | 1088 | g = maven_compute_gamma(md); |
1091 | maven_set_reg(&md->client, 0x83, g->reg83); | 1089 | maven_set_reg(md->client, 0x83, g->reg83); |
1092 | maven_set_reg(&md->client, 0x84, g->reg84); | 1090 | maven_set_reg(md->client, 0x84, g->reg84); |
1093 | maven_set_reg(&md->client, 0x85, g->reg85); | 1091 | maven_set_reg(md->client, 0x85, g->reg85); |
1094 | maven_set_reg(&md->client, 0x86, g->reg86); | 1092 | maven_set_reg(md->client, 0x86, g->reg86); |
1095 | maven_set_reg(&md->client, 0x87, g->reg87); | 1093 | maven_set_reg(md->client, 0x87, g->reg87); |
1096 | maven_set_reg(&md->client, 0x88, g->reg88); | 1094 | maven_set_reg(md->client, 0x88, g->reg88); |
1097 | maven_set_reg(&md->client, 0x89, g->reg89); | 1095 | maven_set_reg(md->client, 0x89, g->reg89); |
1098 | maven_set_reg(&md->client, 0x8a, g->reg8a); | 1096 | maven_set_reg(md->client, 0x8a, g->reg8a); |
1099 | maven_set_reg(&md->client, 0x8b, g->reg8b); | 1097 | maven_set_reg(md->client, 0x8b, g->reg8b); |
1100 | } | 1098 | } |
1101 | break; | 1099 | break; |
1102 | case MATROXFB_CID_TESTOUT: | 1100 | case MATROXFB_CID_TESTOUT: |
1103 | { | 1101 | { |
1104 | unsigned char val | 1102 | unsigned char val |
1105 | = maven_get_reg(&md->client,0x8d); | 1103 | = maven_get_reg(md->client, 0x8d); |
1106 | if (p->value) val |= 0x10; | 1104 | if (p->value) val |= 0x10; |
1107 | else val &= ~0x10; | 1105 | else val &= ~0x10; |
1108 | maven_set_reg(&md->client, 0x8d, val); | 1106 | maven_set_reg(md->client, 0x8d, val); |
1109 | } | 1107 | } |
1110 | break; | 1108 | break; |
1111 | case MATROXFB_CID_DEFLICKER: | 1109 | case MATROXFB_CID_DEFLICKER: |
1112 | { | 1110 | { |
1113 | maven_set_reg(&md->client, 0x93, maven_compute_deflicker(md)); | 1111 | maven_set_reg(md->client, 0x93, maven_compute_deflicker(md)); |
1114 | } | 1112 | } |
1115 | break; | 1113 | break; |
1116 | } | 1114 | } |
@@ -1189,6 +1187,7 @@ static int maven_init_client(struct i2c_client* clnt) { | |||
1189 | MINFO_FROM(container_of(clnt->adapter, struct i2c_bit_adapter, adapter)->minfo); | 1187 | MINFO_FROM(container_of(clnt->adapter, struct i2c_bit_adapter, adapter)->minfo); |
1190 | 1188 | ||
1191 | md->primary_head = MINFO; | 1189 | md->primary_head = MINFO; |
1190 | md->client = clnt; | ||
1192 | down_write(&ACCESS_FBINFO(altout.lock)); | 1191 | down_write(&ACCESS_FBINFO(altout.lock)); |
1193 | ACCESS_FBINFO(outputs[1]).output = &maven_altout; | 1192 | ACCESS_FBINFO(outputs[1]).output = &maven_altout; |
1194 | ACCESS_FBINFO(outputs[1]).src = ACCESS_FBINFO(outputs[1]).default_src; | 1193 | ACCESS_FBINFO(outputs[1]).src = ACCESS_FBINFO(outputs[1]).default_src; |
@@ -1232,14 +1231,11 @@ static int maven_shutdown_client(struct i2c_client* clnt) { | |||
1232 | return 0; | 1231 | return 0; |
1233 | } | 1232 | } |
1234 | 1233 | ||
1235 | static const unsigned short normal_i2c[] = { MAVEN_I2CID, I2C_CLIENT_END }; | 1234 | static int maven_probe(struct i2c_client *client, |
1236 | I2C_CLIENT_INSMOD; | 1235 | const struct i2c_device_id *id) |
1237 | 1236 | { | |
1238 | static struct i2c_driver maven_driver; | 1237 | struct i2c_adapter *adapter = client->adapter; |
1239 | 1238 | int err = -ENODEV; | |
1240 | static int maven_detect_client(struct i2c_adapter* adapter, int address, int kind) { | ||
1241 | int err = 0; | ||
1242 | struct i2c_client* new_client; | ||
1243 | struct maven_data* data; | 1239 | struct maven_data* data; |
1244 | 1240 | ||
1245 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WRITE_WORD_DATA | | 1241 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WRITE_WORD_DATA | |
@@ -1250,50 +1246,37 @@ static int maven_detect_client(struct i2c_adapter* adapter, int address, int kin | |||
1250 | err = -ENOMEM; | 1246 | err = -ENOMEM; |
1251 | goto ERROR0; | 1247 | goto ERROR0; |
1252 | } | 1248 | } |
1253 | new_client = &data->client; | 1249 | i2c_set_clientdata(client, data); |
1254 | i2c_set_clientdata(new_client, data); | 1250 | err = maven_init_client(client); |
1255 | new_client->addr = address; | ||
1256 | new_client->adapter = adapter; | ||
1257 | new_client->driver = &maven_driver; | ||
1258 | new_client->flags = 0; | ||
1259 | strlcpy(new_client->name, "maven", I2C_NAME_SIZE); | ||
1260 | if ((err = i2c_attach_client(new_client))) | ||
1261 | goto ERROR3; | ||
1262 | err = maven_init_client(new_client); | ||
1263 | if (err) | 1251 | if (err) |
1264 | goto ERROR4; | 1252 | goto ERROR4; |
1265 | return 0; | 1253 | return 0; |
1266 | ERROR4:; | 1254 | ERROR4:; |
1267 | i2c_detach_client(new_client); | 1255 | kfree(data); |
1268 | ERROR3:; | ||
1269 | kfree(new_client); | ||
1270 | ERROR0:; | 1256 | ERROR0:; |
1271 | return err; | 1257 | return err; |
1272 | } | 1258 | } |
1273 | 1259 | ||
1274 | static int maven_attach_adapter(struct i2c_adapter* adapter) { | 1260 | static int maven_remove(struct i2c_client *client) |
1275 | if (adapter->id == I2C_HW_B_G400) | 1261 | { |
1276 | return i2c_probe(adapter, &addr_data, &maven_detect_client); | ||
1277 | return 0; | ||
1278 | } | ||
1279 | |||
1280 | static int maven_detach_client(struct i2c_client* client) { | ||
1281 | int err; | ||
1282 | |||
1283 | if ((err = i2c_detach_client(client))) | ||
1284 | return err; | ||
1285 | maven_shutdown_client(client); | 1262 | maven_shutdown_client(client); |
1286 | kfree(i2c_get_clientdata(client)); | 1263 | kfree(i2c_get_clientdata(client)); |
1287 | return 0; | 1264 | return 0; |
1288 | } | 1265 | } |
1289 | 1266 | ||
1267 | static const struct i2c_device_id maven_id[] = { | ||
1268 | { "maven", 0 }, | ||
1269 | { } | ||
1270 | }; | ||
1271 | MODULE_DEVICE_TABLE(i2c, maven_id); | ||
1272 | |||
1290 | static struct i2c_driver maven_driver={ | 1273 | static struct i2c_driver maven_driver={ |
1291 | .driver = { | 1274 | .driver = { |
1292 | .name = "maven", | 1275 | .name = "maven", |
1293 | }, | 1276 | }, |
1294 | .id = I2C_DRIVERID_MGATVO, | 1277 | .probe = maven_probe, |
1295 | .attach_adapter = maven_attach_adapter, | 1278 | .remove = maven_remove, |
1296 | .detach_client = maven_detach_client, | 1279 | .id_table = maven_id, |
1297 | }; | 1280 | }; |
1298 | 1281 | ||
1299 | static int __init matroxfb_maven_init(void) | 1282 | static int __init matroxfb_maven_init(void) |
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 32b9fe153641..db20542796bf 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
@@ -285,10 +285,11 @@ config ALIM1535_WDT | |||
285 | 285 | ||
286 | config ALIM7101_WDT | 286 | config ALIM7101_WDT |
287 | tristate "ALi M7101 PMU Computer Watchdog" | 287 | tristate "ALi M7101 PMU Computer Watchdog" |
288 | depends on X86 && PCI | 288 | depends on PCI |
289 | help | 289 | help |
290 | This is the driver for the hardware watchdog on the ALi M7101 PMU | 290 | This is the driver for the hardware watchdog on the ALi M7101 PMU |
291 | as used in the x86 Cobalt servers. | 291 | as used in the x86 Cobalt servers and also found in some |
292 | SPARC Netra servers too. | ||
292 | 293 | ||
293 | To compile this driver as a module, choose M here: the | 294 | To compile this driver as a module, choose M here: the |
294 | module will be called alim7101_wdt. | 295 | module will be called alim7101_wdt. |
diff --git a/fs/dlm/config.c b/fs/dlm/config.c index c4e7d721bd8d..89d2fb7b991a 100644 --- a/fs/dlm/config.c +++ b/fs/dlm/config.c | |||
@@ -2,7 +2,7 @@ | |||
2 | ******************************************************************************* | 2 | ******************************************************************************* |
3 | ** | 3 | ** |
4 | ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | 4 | ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. |
5 | ** Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. | 5 | ** Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. |
6 | ** | 6 | ** |
7 | ** This copyrighted material is made available to anyone wishing to use, | 7 | ** This copyrighted material is made available to anyone wishing to use, |
8 | ** modify, copy, or redistribute it subject to the terms and conditions | 8 | ** modify, copy, or redistribute it subject to the terms and conditions |
@@ -30,16 +30,16 @@ | |||
30 | 30 | ||
31 | static struct config_group *space_list; | 31 | static struct config_group *space_list; |
32 | static struct config_group *comm_list; | 32 | static struct config_group *comm_list; |
33 | static struct comm *local_comm; | 33 | static struct dlm_comm *local_comm; |
34 | 34 | ||
35 | struct clusters; | 35 | struct dlm_clusters; |
36 | struct cluster; | 36 | struct dlm_cluster; |
37 | struct spaces; | 37 | struct dlm_spaces; |
38 | struct space; | 38 | struct dlm_space; |
39 | struct comms; | 39 | struct dlm_comms; |
40 | struct comm; | 40 | struct dlm_comm; |
41 | struct nodes; | 41 | struct dlm_nodes; |
42 | struct node; | 42 | struct dlm_node; |
43 | 43 | ||
44 | static struct config_group *make_cluster(struct config_group *, const char *); | 44 | static struct config_group *make_cluster(struct config_group *, const char *); |
45 | static void drop_cluster(struct config_group *, struct config_item *); | 45 | static void drop_cluster(struct config_group *, struct config_item *); |
@@ -68,17 +68,22 @@ static ssize_t show_node(struct config_item *i, struct configfs_attribute *a, | |||
68 | static ssize_t store_node(struct config_item *i, struct configfs_attribute *a, | 68 | static ssize_t store_node(struct config_item *i, struct configfs_attribute *a, |
69 | const char *buf, size_t len); | 69 | const char *buf, size_t len); |
70 | 70 | ||
71 | static ssize_t comm_nodeid_read(struct comm *cm, char *buf); | 71 | static ssize_t comm_nodeid_read(struct dlm_comm *cm, char *buf); |
72 | static ssize_t comm_nodeid_write(struct comm *cm, const char *buf, size_t len); | 72 | static ssize_t comm_nodeid_write(struct dlm_comm *cm, const char *buf, |
73 | static ssize_t comm_local_read(struct comm *cm, char *buf); | 73 | size_t len); |
74 | static ssize_t comm_local_write(struct comm *cm, const char *buf, size_t len); | 74 | static ssize_t comm_local_read(struct dlm_comm *cm, char *buf); |
75 | static ssize_t comm_addr_write(struct comm *cm, const char *buf, size_t len); | 75 | static ssize_t comm_local_write(struct dlm_comm *cm, const char *buf, |
76 | static ssize_t node_nodeid_read(struct node *nd, char *buf); | 76 | size_t len); |
77 | static ssize_t node_nodeid_write(struct node *nd, const char *buf, size_t len); | 77 | static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, |
78 | static ssize_t node_weight_read(struct node *nd, char *buf); | 78 | size_t len); |
79 | static ssize_t node_weight_write(struct node *nd, const char *buf, size_t len); | 79 | static ssize_t node_nodeid_read(struct dlm_node *nd, char *buf); |
80 | 80 | static ssize_t node_nodeid_write(struct dlm_node *nd, const char *buf, | |
81 | struct cluster { | 81 | size_t len); |
82 | static ssize_t node_weight_read(struct dlm_node *nd, char *buf); | ||
83 | static ssize_t node_weight_write(struct dlm_node *nd, const char *buf, | ||
84 | size_t len); | ||
85 | |||
86 | struct dlm_cluster { | ||
82 | struct config_group group; | 87 | struct config_group group; |
83 | unsigned int cl_tcp_port; | 88 | unsigned int cl_tcp_port; |
84 | unsigned int cl_buffer_size; | 89 | unsigned int cl_buffer_size; |
@@ -109,11 +114,11 @@ enum { | |||
109 | 114 | ||
110 | struct cluster_attribute { | 115 | struct cluster_attribute { |
111 | struct configfs_attribute attr; | 116 | struct configfs_attribute attr; |
112 | ssize_t (*show)(struct cluster *, char *); | 117 | ssize_t (*show)(struct dlm_cluster *, char *); |
113 | ssize_t (*store)(struct cluster *, const char *, size_t); | 118 | ssize_t (*store)(struct dlm_cluster *, const char *, size_t); |
114 | }; | 119 | }; |
115 | 120 | ||
116 | static ssize_t cluster_set(struct cluster *cl, unsigned int *cl_field, | 121 | static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field, |
117 | int *info_field, int check_zero, | 122 | int *info_field, int check_zero, |
118 | const char *buf, size_t len) | 123 | const char *buf, size_t len) |
119 | { | 124 | { |
@@ -134,12 +139,12 @@ static ssize_t cluster_set(struct cluster *cl, unsigned int *cl_field, | |||
134 | } | 139 | } |
135 | 140 | ||
136 | #define CLUSTER_ATTR(name, check_zero) \ | 141 | #define CLUSTER_ATTR(name, check_zero) \ |
137 | static ssize_t name##_write(struct cluster *cl, const char *buf, size_t len) \ | 142 | static ssize_t name##_write(struct dlm_cluster *cl, const char *buf, size_t len) \ |
138 | { \ | 143 | { \ |
139 | return cluster_set(cl, &cl->cl_##name, &dlm_config.ci_##name, \ | 144 | return cluster_set(cl, &cl->cl_##name, &dlm_config.ci_##name, \ |
140 | check_zero, buf, len); \ | 145 | check_zero, buf, len); \ |
141 | } \ | 146 | } \ |
142 | static ssize_t name##_read(struct cluster *cl, char *buf) \ | 147 | static ssize_t name##_read(struct dlm_cluster *cl, char *buf) \ |
143 | { \ | 148 | { \ |
144 | return snprintf(buf, PAGE_SIZE, "%u\n", cl->cl_##name); \ | 149 | return snprintf(buf, PAGE_SIZE, "%u\n", cl->cl_##name); \ |
145 | } \ | 150 | } \ |
@@ -181,8 +186,8 @@ enum { | |||
181 | 186 | ||
182 | struct comm_attribute { | 187 | struct comm_attribute { |
183 | struct configfs_attribute attr; | 188 | struct configfs_attribute attr; |
184 | ssize_t (*show)(struct comm *, char *); | 189 | ssize_t (*show)(struct dlm_comm *, char *); |
185 | ssize_t (*store)(struct comm *, const char *, size_t); | 190 | ssize_t (*store)(struct dlm_comm *, const char *, size_t); |
186 | }; | 191 | }; |
187 | 192 | ||
188 | static struct comm_attribute comm_attr_nodeid = { | 193 | static struct comm_attribute comm_attr_nodeid = { |
@@ -222,8 +227,8 @@ enum { | |||
222 | 227 | ||
223 | struct node_attribute { | 228 | struct node_attribute { |
224 | struct configfs_attribute attr; | 229 | struct configfs_attribute attr; |
225 | ssize_t (*show)(struct node *, char *); | 230 | ssize_t (*show)(struct dlm_node *, char *); |
226 | ssize_t (*store)(struct node *, const char *, size_t); | 231 | ssize_t (*store)(struct dlm_node *, const char *, size_t); |
227 | }; | 232 | }; |
228 | 233 | ||
229 | static struct node_attribute node_attr_nodeid = { | 234 | static struct node_attribute node_attr_nodeid = { |
@@ -248,26 +253,26 @@ static struct configfs_attribute *node_attrs[] = { | |||
248 | NULL, | 253 | NULL, |
249 | }; | 254 | }; |
250 | 255 | ||
251 | struct clusters { | 256 | struct dlm_clusters { |
252 | struct configfs_subsystem subsys; | 257 | struct configfs_subsystem subsys; |
253 | }; | 258 | }; |
254 | 259 | ||
255 | struct spaces { | 260 | struct dlm_spaces { |
256 | struct config_group ss_group; | 261 | struct config_group ss_group; |
257 | }; | 262 | }; |
258 | 263 | ||
259 | struct space { | 264 | struct dlm_space { |
260 | struct config_group group; | 265 | struct config_group group; |
261 | struct list_head members; | 266 | struct list_head members; |
262 | struct mutex members_lock; | 267 | struct mutex members_lock; |
263 | int members_count; | 268 | int members_count; |
264 | }; | 269 | }; |
265 | 270 | ||
266 | struct comms { | 271 | struct dlm_comms { |
267 | struct config_group cs_group; | 272 | struct config_group cs_group; |
268 | }; | 273 | }; |
269 | 274 | ||
270 | struct comm { | 275 | struct dlm_comm { |
271 | struct config_item item; | 276 | struct config_item item; |
272 | int nodeid; | 277 | int nodeid; |
273 | int local; | 278 | int local; |
@@ -275,11 +280,11 @@ struct comm { | |||
275 | struct sockaddr_storage *addr[DLM_MAX_ADDR_COUNT]; | 280 | struct sockaddr_storage *addr[DLM_MAX_ADDR_COUNT]; |
276 | }; | 281 | }; |
277 | 282 | ||
278 | struct nodes { | 283 | struct dlm_nodes { |
279 | struct config_group ns_group; | 284 | struct config_group ns_group; |
280 | }; | 285 | }; |
281 | 286 | ||
282 | struct node { | 287 | struct dlm_node { |
283 | struct config_item item; | 288 | struct config_item item; |
284 | struct list_head list; /* space->members */ | 289 | struct list_head list; /* space->members */ |
285 | int nodeid; | 290 | int nodeid; |
@@ -372,38 +377,40 @@ static struct config_item_type node_type = { | |||
372 | .ct_owner = THIS_MODULE, | 377 | .ct_owner = THIS_MODULE, |
373 | }; | 378 | }; |
374 | 379 | ||
375 | static struct cluster *to_cluster(struct config_item *i) | 380 | static struct dlm_cluster *to_cluster(struct config_item *i) |
376 | { | 381 | { |
377 | return i ? container_of(to_config_group(i), struct cluster, group):NULL; | 382 | return i ? container_of(to_config_group(i), struct dlm_cluster, group) : |
383 | NULL; | ||
378 | } | 384 | } |
379 | 385 | ||
380 | static struct space *to_space(struct config_item *i) | 386 | static struct dlm_space *to_space(struct config_item *i) |
381 | { | 387 | { |
382 | return i ? container_of(to_config_group(i), struct space, group) : NULL; | 388 | return i ? container_of(to_config_group(i), struct dlm_space, group) : |
389 | NULL; | ||
383 | } | 390 | } |
384 | 391 | ||
385 | static struct comm *to_comm(struct config_item *i) | 392 | static struct dlm_comm *to_comm(struct config_item *i) |
386 | { | 393 | { |
387 | return i ? container_of(i, struct comm, item) : NULL; | 394 | return i ? container_of(i, struct dlm_comm, item) : NULL; |
388 | } | 395 | } |
389 | 396 | ||
390 | static struct node *to_node(struct config_item *i) | 397 | static struct dlm_node *to_node(struct config_item *i) |
391 | { | 398 | { |
392 | return i ? container_of(i, struct node, item) : NULL; | 399 | return i ? container_of(i, struct dlm_node, item) : NULL; |
393 | } | 400 | } |
394 | 401 | ||
395 | static struct config_group *make_cluster(struct config_group *g, | 402 | static struct config_group *make_cluster(struct config_group *g, |
396 | const char *name) | 403 | const char *name) |
397 | { | 404 | { |
398 | struct cluster *cl = NULL; | 405 | struct dlm_cluster *cl = NULL; |
399 | struct spaces *sps = NULL; | 406 | struct dlm_spaces *sps = NULL; |
400 | struct comms *cms = NULL; | 407 | struct dlm_comms *cms = NULL; |
401 | void *gps = NULL; | 408 | void *gps = NULL; |
402 | 409 | ||
403 | cl = kzalloc(sizeof(struct cluster), GFP_KERNEL); | 410 | cl = kzalloc(sizeof(struct dlm_cluster), GFP_KERNEL); |
404 | gps = kcalloc(3, sizeof(struct config_group *), GFP_KERNEL); | 411 | gps = kcalloc(3, sizeof(struct config_group *), GFP_KERNEL); |
405 | sps = kzalloc(sizeof(struct spaces), GFP_KERNEL); | 412 | sps = kzalloc(sizeof(struct dlm_spaces), GFP_KERNEL); |
406 | cms = kzalloc(sizeof(struct comms), GFP_KERNEL); | 413 | cms = kzalloc(sizeof(struct dlm_comms), GFP_KERNEL); |
407 | 414 | ||
408 | if (!cl || !gps || !sps || !cms) | 415 | if (!cl || !gps || !sps || !cms) |
409 | goto fail; | 416 | goto fail; |
@@ -443,7 +450,7 @@ static struct config_group *make_cluster(struct config_group *g, | |||
443 | 450 | ||
444 | static void drop_cluster(struct config_group *g, struct config_item *i) | 451 | static void drop_cluster(struct config_group *g, struct config_item *i) |
445 | { | 452 | { |
446 | struct cluster *cl = to_cluster(i); | 453 | struct dlm_cluster *cl = to_cluster(i); |
447 | struct config_item *tmp; | 454 | struct config_item *tmp; |
448 | int j; | 455 | int j; |
449 | 456 | ||
@@ -461,20 +468,20 @@ static void drop_cluster(struct config_group *g, struct config_item *i) | |||
461 | 468 | ||
462 | static void release_cluster(struct config_item *i) | 469 | static void release_cluster(struct config_item *i) |
463 | { | 470 | { |
464 | struct cluster *cl = to_cluster(i); | 471 | struct dlm_cluster *cl = to_cluster(i); |
465 | kfree(cl->group.default_groups); | 472 | kfree(cl->group.default_groups); |
466 | kfree(cl); | 473 | kfree(cl); |
467 | } | 474 | } |
468 | 475 | ||
469 | static struct config_group *make_space(struct config_group *g, const char *name) | 476 | static struct config_group *make_space(struct config_group *g, const char *name) |
470 | { | 477 | { |
471 | struct space *sp = NULL; | 478 | struct dlm_space *sp = NULL; |
472 | struct nodes *nds = NULL; | 479 | struct dlm_nodes *nds = NULL; |
473 | void *gps = NULL; | 480 | void *gps = NULL; |
474 | 481 | ||
475 | sp = kzalloc(sizeof(struct space), GFP_KERNEL); | 482 | sp = kzalloc(sizeof(struct dlm_space), GFP_KERNEL); |
476 | gps = kcalloc(2, sizeof(struct config_group *), GFP_KERNEL); | 483 | gps = kcalloc(2, sizeof(struct config_group *), GFP_KERNEL); |
477 | nds = kzalloc(sizeof(struct nodes), GFP_KERNEL); | 484 | nds = kzalloc(sizeof(struct dlm_nodes), GFP_KERNEL); |
478 | 485 | ||
479 | if (!sp || !gps || !nds) | 486 | if (!sp || !gps || !nds) |
480 | goto fail; | 487 | goto fail; |
@@ -500,7 +507,7 @@ static struct config_group *make_space(struct config_group *g, const char *name) | |||
500 | 507 | ||
501 | static void drop_space(struct config_group *g, struct config_item *i) | 508 | static void drop_space(struct config_group *g, struct config_item *i) |
502 | { | 509 | { |
503 | struct space *sp = to_space(i); | 510 | struct dlm_space *sp = to_space(i); |
504 | struct config_item *tmp; | 511 | struct config_item *tmp; |
505 | int j; | 512 | int j; |
506 | 513 | ||
@@ -517,16 +524,16 @@ static void drop_space(struct config_group *g, struct config_item *i) | |||
517 | 524 | ||
518 | static void release_space(struct config_item *i) | 525 | static void release_space(struct config_item *i) |
519 | { | 526 | { |
520 | struct space *sp = to_space(i); | 527 | struct dlm_space *sp = to_space(i); |
521 | kfree(sp->group.default_groups); | 528 | kfree(sp->group.default_groups); |
522 | kfree(sp); | 529 | kfree(sp); |
523 | } | 530 | } |
524 | 531 | ||
525 | static struct config_item *make_comm(struct config_group *g, const char *name) | 532 | static struct config_item *make_comm(struct config_group *g, const char *name) |
526 | { | 533 | { |
527 | struct comm *cm; | 534 | struct dlm_comm *cm; |
528 | 535 | ||
529 | cm = kzalloc(sizeof(struct comm), GFP_KERNEL); | 536 | cm = kzalloc(sizeof(struct dlm_comm), GFP_KERNEL); |
530 | if (!cm) | 537 | if (!cm) |
531 | return ERR_PTR(-ENOMEM); | 538 | return ERR_PTR(-ENOMEM); |
532 | 539 | ||
@@ -539,7 +546,7 @@ static struct config_item *make_comm(struct config_group *g, const char *name) | |||
539 | 546 | ||
540 | static void drop_comm(struct config_group *g, struct config_item *i) | 547 | static void drop_comm(struct config_group *g, struct config_item *i) |
541 | { | 548 | { |
542 | struct comm *cm = to_comm(i); | 549 | struct dlm_comm *cm = to_comm(i); |
543 | if (local_comm == cm) | 550 | if (local_comm == cm) |
544 | local_comm = NULL; | 551 | local_comm = NULL; |
545 | dlm_lowcomms_close(cm->nodeid); | 552 | dlm_lowcomms_close(cm->nodeid); |
@@ -550,16 +557,16 @@ static void drop_comm(struct config_group *g, struct config_item *i) | |||
550 | 557 | ||
551 | static void release_comm(struct config_item *i) | 558 | static void release_comm(struct config_item *i) |
552 | { | 559 | { |
553 | struct comm *cm = to_comm(i); | 560 | struct dlm_comm *cm = to_comm(i); |
554 | kfree(cm); | 561 | kfree(cm); |
555 | } | 562 | } |
556 | 563 | ||
557 | static struct config_item *make_node(struct config_group *g, const char *name) | 564 | static struct config_item *make_node(struct config_group *g, const char *name) |
558 | { | 565 | { |
559 | struct space *sp = to_space(g->cg_item.ci_parent); | 566 | struct dlm_space *sp = to_space(g->cg_item.ci_parent); |
560 | struct node *nd; | 567 | struct dlm_node *nd; |
561 | 568 | ||
562 | nd = kzalloc(sizeof(struct node), GFP_KERNEL); | 569 | nd = kzalloc(sizeof(struct dlm_node), GFP_KERNEL); |
563 | if (!nd) | 570 | if (!nd) |
564 | return ERR_PTR(-ENOMEM); | 571 | return ERR_PTR(-ENOMEM); |
565 | 572 | ||
@@ -578,8 +585,8 @@ static struct config_item *make_node(struct config_group *g, const char *name) | |||
578 | 585 | ||
579 | static void drop_node(struct config_group *g, struct config_item *i) | 586 | static void drop_node(struct config_group *g, struct config_item *i) |
580 | { | 587 | { |
581 | struct space *sp = to_space(g->cg_item.ci_parent); | 588 | struct dlm_space *sp = to_space(g->cg_item.ci_parent); |
582 | struct node *nd = to_node(i); | 589 | struct dlm_node *nd = to_node(i); |
583 | 590 | ||
584 | mutex_lock(&sp->members_lock); | 591 | mutex_lock(&sp->members_lock); |
585 | list_del(&nd->list); | 592 | list_del(&nd->list); |
@@ -591,11 +598,11 @@ static void drop_node(struct config_group *g, struct config_item *i) | |||
591 | 598 | ||
592 | static void release_node(struct config_item *i) | 599 | static void release_node(struct config_item *i) |
593 | { | 600 | { |
594 | struct node *nd = to_node(i); | 601 | struct dlm_node *nd = to_node(i); |
595 | kfree(nd); | 602 | kfree(nd); |
596 | } | 603 | } |
597 | 604 | ||
598 | static struct clusters clusters_root = { | 605 | static struct dlm_clusters clusters_root = { |
599 | .subsys = { | 606 | .subsys = { |
600 | .su_group = { | 607 | .su_group = { |
601 | .cg_item = { | 608 | .cg_item = { |
@@ -625,7 +632,7 @@ void dlm_config_exit(void) | |||
625 | static ssize_t show_cluster(struct config_item *i, struct configfs_attribute *a, | 632 | static ssize_t show_cluster(struct config_item *i, struct configfs_attribute *a, |
626 | char *buf) | 633 | char *buf) |
627 | { | 634 | { |
628 | struct cluster *cl = to_cluster(i); | 635 | struct dlm_cluster *cl = to_cluster(i); |
629 | struct cluster_attribute *cla = | 636 | struct cluster_attribute *cla = |
630 | container_of(a, struct cluster_attribute, attr); | 637 | container_of(a, struct cluster_attribute, attr); |
631 | return cla->show ? cla->show(cl, buf) : 0; | 638 | return cla->show ? cla->show(cl, buf) : 0; |
@@ -635,7 +642,7 @@ static ssize_t store_cluster(struct config_item *i, | |||
635 | struct configfs_attribute *a, | 642 | struct configfs_attribute *a, |
636 | const char *buf, size_t len) | 643 | const char *buf, size_t len) |
637 | { | 644 | { |
638 | struct cluster *cl = to_cluster(i); | 645 | struct dlm_cluster *cl = to_cluster(i); |
639 | struct cluster_attribute *cla = | 646 | struct cluster_attribute *cla = |
640 | container_of(a, struct cluster_attribute, attr); | 647 | container_of(a, struct cluster_attribute, attr); |
641 | return cla->store ? cla->store(cl, buf, len) : -EINVAL; | 648 | return cla->store ? cla->store(cl, buf, len) : -EINVAL; |
@@ -644,7 +651,7 @@ static ssize_t store_cluster(struct config_item *i, | |||
644 | static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a, | 651 | static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a, |
645 | char *buf) | 652 | char *buf) |
646 | { | 653 | { |
647 | struct comm *cm = to_comm(i); | 654 | struct dlm_comm *cm = to_comm(i); |
648 | struct comm_attribute *cma = | 655 | struct comm_attribute *cma = |
649 | container_of(a, struct comm_attribute, attr); | 656 | container_of(a, struct comm_attribute, attr); |
650 | return cma->show ? cma->show(cm, buf) : 0; | 657 | return cma->show ? cma->show(cm, buf) : 0; |
@@ -653,29 +660,31 @@ static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a, | |||
653 | static ssize_t store_comm(struct config_item *i, struct configfs_attribute *a, | 660 | static ssize_t store_comm(struct config_item *i, struct configfs_attribute *a, |
654 | const char *buf, size_t len) | 661 | const char *buf, size_t len) |
655 | { | 662 | { |
656 | struct comm *cm = to_comm(i); | 663 | struct dlm_comm *cm = to_comm(i); |
657 | struct comm_attribute *cma = | 664 | struct comm_attribute *cma = |
658 | container_of(a, struct comm_attribute, attr); | 665 | container_of(a, struct comm_attribute, attr); |
659 | return cma->store ? cma->store(cm, buf, len) : -EINVAL; | 666 | return cma->store ? cma->store(cm, buf, len) : -EINVAL; |
660 | } | 667 | } |
661 | 668 | ||
662 | static ssize_t comm_nodeid_read(struct comm *cm, char *buf) | 669 | static ssize_t comm_nodeid_read(struct dlm_comm *cm, char *buf) |
663 | { | 670 | { |
664 | return sprintf(buf, "%d\n", cm->nodeid); | 671 | return sprintf(buf, "%d\n", cm->nodeid); |
665 | } | 672 | } |
666 | 673 | ||
667 | static ssize_t comm_nodeid_write(struct comm *cm, const char *buf, size_t len) | 674 | static ssize_t comm_nodeid_write(struct dlm_comm *cm, const char *buf, |
675 | size_t len) | ||
668 | { | 676 | { |
669 | cm->nodeid = simple_strtol(buf, NULL, 0); | 677 | cm->nodeid = simple_strtol(buf, NULL, 0); |
670 | return len; | 678 | return len; |
671 | } | 679 | } |
672 | 680 | ||
673 | static ssize_t comm_local_read(struct comm *cm, char *buf) | 681 | static ssize_t comm_local_read(struct dlm_comm *cm, char *buf) |
674 | { | 682 | { |
675 | return sprintf(buf, "%d\n", cm->local); | 683 | return sprintf(buf, "%d\n", cm->local); |
676 | } | 684 | } |
677 | 685 | ||
678 | static ssize_t comm_local_write(struct comm *cm, const char *buf, size_t len) | 686 | static ssize_t comm_local_write(struct dlm_comm *cm, const char *buf, |
687 | size_t len) | ||
679 | { | 688 | { |
680 | cm->local= simple_strtol(buf, NULL, 0); | 689 | cm->local= simple_strtol(buf, NULL, 0); |
681 | if (cm->local && !local_comm) | 690 | if (cm->local && !local_comm) |
@@ -683,7 +692,7 @@ static ssize_t comm_local_write(struct comm *cm, const char *buf, size_t len) | |||
683 | return len; | 692 | return len; |
684 | } | 693 | } |
685 | 694 | ||
686 | static ssize_t comm_addr_write(struct comm *cm, const char *buf, size_t len) | 695 | static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, size_t len) |
687 | { | 696 | { |
688 | struct sockaddr_storage *addr; | 697 | struct sockaddr_storage *addr; |
689 | 698 | ||
@@ -705,7 +714,7 @@ static ssize_t comm_addr_write(struct comm *cm, const char *buf, size_t len) | |||
705 | static ssize_t show_node(struct config_item *i, struct configfs_attribute *a, | 714 | static ssize_t show_node(struct config_item *i, struct configfs_attribute *a, |
706 | char *buf) | 715 | char *buf) |
707 | { | 716 | { |
708 | struct node *nd = to_node(i); | 717 | struct dlm_node *nd = to_node(i); |
709 | struct node_attribute *nda = | 718 | struct node_attribute *nda = |
710 | container_of(a, struct node_attribute, attr); | 719 | container_of(a, struct node_attribute, attr); |
711 | return nda->show ? nda->show(nd, buf) : 0; | 720 | return nda->show ? nda->show(nd, buf) : 0; |
@@ -714,29 +723,31 @@ static ssize_t show_node(struct config_item *i, struct configfs_attribute *a, | |||
714 | static ssize_t store_node(struct config_item *i, struct configfs_attribute *a, | 723 | static ssize_t store_node(struct config_item *i, struct configfs_attribute *a, |
715 | const char *buf, size_t len) | 724 | const char *buf, size_t len) |
716 | { | 725 | { |
717 | struct node *nd = to_node(i); | 726 | struct dlm_node *nd = to_node(i); |
718 | struct node_attribute *nda = | 727 | struct node_attribute *nda = |
719 | container_of(a, struct node_attribute, attr); | 728 | container_of(a, struct node_attribute, attr); |
720 | return nda->store ? nda->store(nd, buf, len) : -EINVAL; | 729 | return nda->store ? nda->store(nd, buf, len) : -EINVAL; |
721 | } | 730 | } |
722 | 731 | ||
723 | static ssize_t node_nodeid_read(struct node *nd, char *buf) | 732 | static ssize_t node_nodeid_read(struct dlm_node *nd, char *buf) |
724 | { | 733 | { |
725 | return sprintf(buf, "%d\n", nd->nodeid); | 734 | return sprintf(buf, "%d\n", nd->nodeid); |
726 | } | 735 | } |
727 | 736 | ||
728 | static ssize_t node_nodeid_write(struct node *nd, const char *buf, size_t len) | 737 | static ssize_t node_nodeid_write(struct dlm_node *nd, const char *buf, |
738 | size_t len) | ||
729 | { | 739 | { |
730 | nd->nodeid = simple_strtol(buf, NULL, 0); | 740 | nd->nodeid = simple_strtol(buf, NULL, 0); |
731 | return len; | 741 | return len; |
732 | } | 742 | } |
733 | 743 | ||
734 | static ssize_t node_weight_read(struct node *nd, char *buf) | 744 | static ssize_t node_weight_read(struct dlm_node *nd, char *buf) |
735 | { | 745 | { |
736 | return sprintf(buf, "%d\n", nd->weight); | 746 | return sprintf(buf, "%d\n", nd->weight); |
737 | } | 747 | } |
738 | 748 | ||
739 | static ssize_t node_weight_write(struct node *nd, const char *buf, size_t len) | 749 | static ssize_t node_weight_write(struct dlm_node *nd, const char *buf, |
750 | size_t len) | ||
740 | { | 751 | { |
741 | nd->weight = simple_strtol(buf, NULL, 0); | 752 | nd->weight = simple_strtol(buf, NULL, 0); |
742 | return len; | 753 | return len; |
@@ -746,7 +757,7 @@ static ssize_t node_weight_write(struct node *nd, const char *buf, size_t len) | |||
746 | * Functions for the dlm to get the info that's been configured | 757 | * Functions for the dlm to get the info that's been configured |
747 | */ | 758 | */ |
748 | 759 | ||
749 | static struct space *get_space(char *name) | 760 | static struct dlm_space *get_space(char *name) |
750 | { | 761 | { |
751 | struct config_item *i; | 762 | struct config_item *i; |
752 | 763 | ||
@@ -760,15 +771,15 @@ static struct space *get_space(char *name) | |||
760 | return to_space(i); | 771 | return to_space(i); |
761 | } | 772 | } |
762 | 773 | ||
763 | static void put_space(struct space *sp) | 774 | static void put_space(struct dlm_space *sp) |
764 | { | 775 | { |
765 | config_item_put(&sp->group.cg_item); | 776 | config_item_put(&sp->group.cg_item); |
766 | } | 777 | } |
767 | 778 | ||
768 | static struct comm *get_comm(int nodeid, struct sockaddr_storage *addr) | 779 | static struct dlm_comm *get_comm(int nodeid, struct sockaddr_storage *addr) |
769 | { | 780 | { |
770 | struct config_item *i; | 781 | struct config_item *i; |
771 | struct comm *cm = NULL; | 782 | struct dlm_comm *cm = NULL; |
772 | int found = 0; | 783 | int found = 0; |
773 | 784 | ||
774 | if (!comm_list) | 785 | if (!comm_list) |
@@ -801,7 +812,7 @@ static struct comm *get_comm(int nodeid, struct sockaddr_storage *addr) | |||
801 | return cm; | 812 | return cm; |
802 | } | 813 | } |
803 | 814 | ||
804 | static void put_comm(struct comm *cm) | 815 | static void put_comm(struct dlm_comm *cm) |
805 | { | 816 | { |
806 | config_item_put(&cm->item); | 817 | config_item_put(&cm->item); |
807 | } | 818 | } |
@@ -810,8 +821,8 @@ static void put_comm(struct comm *cm) | |||
810 | int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out, | 821 | int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out, |
811 | int **new_out, int *new_count_out) | 822 | int **new_out, int *new_count_out) |
812 | { | 823 | { |
813 | struct space *sp; | 824 | struct dlm_space *sp; |
814 | struct node *nd; | 825 | struct dlm_node *nd; |
815 | int i = 0, rv = 0, ids_count = 0, new_count = 0; | 826 | int i = 0, rv = 0, ids_count = 0, new_count = 0; |
816 | int *ids, *new; | 827 | int *ids, *new; |
817 | 828 | ||
@@ -874,8 +885,8 @@ int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out, | |||
874 | 885 | ||
875 | int dlm_node_weight(char *lsname, int nodeid) | 886 | int dlm_node_weight(char *lsname, int nodeid) |
876 | { | 887 | { |
877 | struct space *sp; | 888 | struct dlm_space *sp; |
878 | struct node *nd; | 889 | struct dlm_node *nd; |
879 | int w = -EEXIST; | 890 | int w = -EEXIST; |
880 | 891 | ||
881 | sp = get_space(lsname); | 892 | sp = get_space(lsname); |
@@ -897,7 +908,7 @@ int dlm_node_weight(char *lsname, int nodeid) | |||
897 | 908 | ||
898 | int dlm_nodeid_to_addr(int nodeid, struct sockaddr_storage *addr) | 909 | int dlm_nodeid_to_addr(int nodeid, struct sockaddr_storage *addr) |
899 | { | 910 | { |
900 | struct comm *cm = get_comm(nodeid, NULL); | 911 | struct dlm_comm *cm = get_comm(nodeid, NULL); |
901 | if (!cm) | 912 | if (!cm) |
902 | return -EEXIST; | 913 | return -EEXIST; |
903 | if (!cm->addr_count) | 914 | if (!cm->addr_count) |
@@ -909,7 +920,7 @@ int dlm_nodeid_to_addr(int nodeid, struct sockaddr_storage *addr) | |||
909 | 920 | ||
910 | int dlm_addr_to_nodeid(struct sockaddr_storage *addr, int *nodeid) | 921 | int dlm_addr_to_nodeid(struct sockaddr_storage *addr, int *nodeid) |
911 | { | 922 | { |
912 | struct comm *cm = get_comm(0, addr); | 923 | struct dlm_comm *cm = get_comm(0, addr); |
913 | if (!cm) | 924 | if (!cm) |
914 | return -EEXIST; | 925 | return -EEXIST; |
915 | *nodeid = cm->nodeid; | 926 | *nodeid = cm->nodeid; |
diff --git a/fs/dlm/user.c b/fs/dlm/user.c index 929e48ae7591..34f14a14fb4e 100644 --- a/fs/dlm/user.c +++ b/fs/dlm/user.c | |||
@@ -527,8 +527,10 @@ static ssize_t device_write(struct file *file, const char __user *buf, | |||
527 | k32buf = (struct dlm_write_request32 *)kbuf; | 527 | k32buf = (struct dlm_write_request32 *)kbuf; |
528 | kbuf = kmalloc(count + 1 + (sizeof(struct dlm_write_request) - | 528 | kbuf = kmalloc(count + 1 + (sizeof(struct dlm_write_request) - |
529 | sizeof(struct dlm_write_request32)), GFP_KERNEL); | 529 | sizeof(struct dlm_write_request32)), GFP_KERNEL); |
530 | if (!kbuf) | 530 | if (!kbuf) { |
531 | kfree(k32buf); | ||
531 | return -ENOMEM; | 532 | return -ENOMEM; |
533 | } | ||
532 | 534 | ||
533 | if (proc) | 535 | if (proc) |
534 | set_bit(DLM_PROC_FLAGS_COMPAT, &proc->flags); | 536 | set_bit(DLM_PROC_FLAGS_COMPAT, &proc->flags); |
@@ -539,8 +541,10 @@ static ssize_t device_write(struct file *file, const char __user *buf, | |||
539 | 541 | ||
540 | /* do we really need this? can a write happen after a close? */ | 542 | /* do we really need this? can a write happen after a close? */ |
541 | if ((kbuf->cmd == DLM_USER_LOCK || kbuf->cmd == DLM_USER_UNLOCK) && | 543 | if ((kbuf->cmd == DLM_USER_LOCK || kbuf->cmd == DLM_USER_UNLOCK) && |
542 | (proc && test_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags))) | 544 | (proc && test_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags))) { |
543 | return -EINVAL; | 545 | error = -EINVAL; |
546 | goto out_free; | ||
547 | } | ||
544 | 548 | ||
545 | sigfillset(&allsigs); | 549 | sigfillset(&allsigs); |
546 | sigprocmask(SIG_BLOCK, &allsigs, &tmpsig); | 550 | sigprocmask(SIG_BLOCK, &allsigs, &tmpsig); |
diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 0c87474f7917..7cc0eb756b55 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c | |||
@@ -1041,10 +1041,7 @@ retry: | |||
1041 | } | 1041 | } |
1042 | 1042 | ||
1043 | /* | 1043 | /* |
1044 | * It opens an eventpoll file descriptor. The "size" parameter is there | 1044 | * Open an eventpoll file descriptor. |
1045 | * for historical reasons, when epoll was using an hash instead of an | ||
1046 | * RB tree. With the current implementation, the "size" parameter is ignored | ||
1047 | * (besides sanity checks). | ||
1048 | */ | 1045 | */ |
1049 | asmlinkage long sys_epoll_create1(int flags) | 1046 | asmlinkage long sys_epoll_create1(int flags) |
1050 | { | 1047 | { |
diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c index 8dee32007500..0540ca27a446 100644 --- a/fs/jbd/transaction.c +++ b/fs/jbd/transaction.c | |||
@@ -291,7 +291,7 @@ handle_t *journal_start(journal_t *journal, int nblocks) | |||
291 | goto out; | 291 | goto out; |
292 | } | 292 | } |
293 | 293 | ||
294 | lock_acquire(&handle->h_lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 294 | lock_map_acquire(&handle->h_lockdep_map); |
295 | 295 | ||
296 | out: | 296 | out: |
297 | return handle; | 297 | return handle; |
@@ -1448,7 +1448,7 @@ int journal_stop(handle_t *handle) | |||
1448 | spin_unlock(&journal->j_state_lock); | 1448 | spin_unlock(&journal->j_state_lock); |
1449 | } | 1449 | } |
1450 | 1450 | ||
1451 | lock_release(&handle->h_lockdep_map, 1, _THIS_IP_); | 1451 | lock_map_release(&handle->h_lockdep_map); |
1452 | 1452 | ||
1453 | jbd_free_handle(handle); | 1453 | jbd_free_handle(handle); |
1454 | return err; | 1454 | return err; |
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index 4f7cadbb19fa..e5d540588fa9 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c | |||
@@ -301,7 +301,7 @@ handle_t *jbd2_journal_start(journal_t *journal, int nblocks) | |||
301 | goto out; | 301 | goto out; |
302 | } | 302 | } |
303 | 303 | ||
304 | lock_acquire(&handle->h_lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 304 | lock_map_acquire(&handle->h_lockdep_map); |
305 | out: | 305 | out: |
306 | return handle; | 306 | return handle; |
307 | } | 307 | } |
@@ -1279,7 +1279,7 @@ int jbd2_journal_stop(handle_t *handle) | |||
1279 | spin_unlock(&journal->j_state_lock); | 1279 | spin_unlock(&journal->j_state_lock); |
1280 | } | 1280 | } |
1281 | 1281 | ||
1282 | lock_release(&handle->h_lockdep_map, 1, _THIS_IP_); | 1282 | lock_map_release(&handle->h_lockdep_map); |
1283 | 1283 | ||
1284 | jbd2_free_handle(handle); | 1284 | jbd2_free_handle(handle); |
1285 | return err; | 1285 | return err; |
diff --git a/fs/lockd/svc4proc.c b/fs/lockd/svc4proc.c index 399444639337..4a714f64515b 100644 --- a/fs/lockd/svc4proc.c +++ b/fs/lockd/svc4proc.c | |||
@@ -83,7 +83,7 @@ nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
83 | { | 83 | { |
84 | struct nlm_host *host; | 84 | struct nlm_host *host; |
85 | struct nlm_file *file; | 85 | struct nlm_file *file; |
86 | int rc = rpc_success; | 86 | __be32 rc = rpc_success; |
87 | 87 | ||
88 | dprintk("lockd: TEST4 called\n"); | 88 | dprintk("lockd: TEST4 called\n"); |
89 | resp->cookie = argp->cookie; | 89 | resp->cookie = argp->cookie; |
@@ -116,7 +116,7 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
116 | { | 116 | { |
117 | struct nlm_host *host; | 117 | struct nlm_host *host; |
118 | struct nlm_file *file; | 118 | struct nlm_file *file; |
119 | int rc = rpc_success; | 119 | __be32 rc = rpc_success; |
120 | 120 | ||
121 | dprintk("lockd: LOCK called\n"); | 121 | dprintk("lockd: LOCK called\n"); |
122 | 122 | ||
diff --git a/fs/lockd/svcproc.c b/fs/lockd/svcproc.c index 76019d2ff72d..76262c1986f2 100644 --- a/fs/lockd/svcproc.c +++ b/fs/lockd/svcproc.c | |||
@@ -112,7 +112,7 @@ nlmsvc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
112 | { | 112 | { |
113 | struct nlm_host *host; | 113 | struct nlm_host *host; |
114 | struct nlm_file *file; | 114 | struct nlm_file *file; |
115 | int rc = rpc_success; | 115 | __be32 rc = rpc_success; |
116 | 116 | ||
117 | dprintk("lockd: TEST called\n"); | 117 | dprintk("lockd: TEST called\n"); |
118 | resp->cookie = argp->cookie; | 118 | resp->cookie = argp->cookie; |
@@ -146,7 +146,7 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
146 | { | 146 | { |
147 | struct nlm_host *host; | 147 | struct nlm_host *host; |
148 | struct nlm_file *file; | 148 | struct nlm_file *file; |
149 | int rc = rpc_success; | 149 | __be32 rc = rpc_success; |
150 | 150 | ||
151 | dprintk("lockd: LOCK called\n"); | 151 | dprintk("lockd: LOCK called\n"); |
152 | 152 | ||
diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index 33bfcf09db46..9dc036f18356 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c | |||
@@ -1023,7 +1023,7 @@ exp_export(struct nfsctl_export *nxp) | |||
1023 | /* Look up the dentry */ | 1023 | /* Look up the dentry */ |
1024 | err = path_lookup(nxp->ex_path, 0, &nd); | 1024 | err = path_lookup(nxp->ex_path, 0, &nd); |
1025 | if (err) | 1025 | if (err) |
1026 | goto out_unlock; | 1026 | goto out_put_clp; |
1027 | err = -EINVAL; | 1027 | err = -EINVAL; |
1028 | 1028 | ||
1029 | exp = exp_get_by_name(clp, nd.path.mnt, nd.path.dentry, NULL); | 1029 | exp = exp_get_by_name(clp, nd.path.mnt, nd.path.dentry, NULL); |
@@ -1090,9 +1090,9 @@ finish: | |||
1090 | exp_put(exp); | 1090 | exp_put(exp); |
1091 | if (fsid_key && !IS_ERR(fsid_key)) | 1091 | if (fsid_key && !IS_ERR(fsid_key)) |
1092 | cache_put(&fsid_key->h, &svc_expkey_cache); | 1092 | cache_put(&fsid_key->h, &svc_expkey_cache); |
1093 | if (clp) | ||
1094 | auth_domain_put(clp); | ||
1095 | path_put(&nd.path); | 1093 | path_put(&nd.path); |
1094 | out_put_clp: | ||
1095 | auth_domain_put(clp); | ||
1096 | out_unlock: | 1096 | out_unlock: |
1097 | exp_writeunlock(); | 1097 | exp_writeunlock(); |
1098 | out: | 1098 | out: |
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index 282a13596c70..d318c7e663fa 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/mnt_namespace.h> | 27 | #include <linux/mnt_namespace.h> |
28 | #include <linux/mount.h> | 28 | #include <linux/mount.h> |
29 | #include <linux/namei.h> | 29 | #include <linux/namei.h> |
30 | #include <linux/quotaops.h> | ||
31 | 30 | ||
32 | struct file_system_type reiserfs_fs_type; | 31 | struct file_system_type reiserfs_fs_type; |
33 | 32 | ||
diff --git a/fs/seq_file.c b/fs/seq_file.c index 3f54dbd6c49b..5d54205e486b 100644 --- a/fs/seq_file.c +++ b/fs/seq_file.c | |||
@@ -443,6 +443,20 @@ int seq_dentry(struct seq_file *m, struct dentry *dentry, char *esc) | |||
443 | return -1; | 443 | return -1; |
444 | } | 444 | } |
445 | 445 | ||
446 | int seq_bitmap(struct seq_file *m, unsigned long *bits, unsigned int nr_bits) | ||
447 | { | ||
448 | size_t len = bitmap_scnprintf_len(nr_bits); | ||
449 | |||
450 | if (m->count + len < m->size) { | ||
451 | bitmap_scnprintf(m->buf + m->count, m->size - m->count, | ||
452 | bits, nr_bits); | ||
453 | m->count += len; | ||
454 | return 0; | ||
455 | } | ||
456 | m->count = m->size; | ||
457 | return -1; | ||
458 | } | ||
459 | |||
446 | static void *single_start(struct seq_file *p, loff_t *pos) | 460 | static void *single_start(struct seq_file *p, loff_t *pos) |
447 | { | 461 | { |
448 | return NULL + (*pos == 0); | 462 | return NULL + (*pos == 0); |
diff --git a/include/asm-generic/ioctl.h b/include/asm-generic/ioctl.h index 864181385579..15828b2d663c 100644 --- a/include/asm-generic/ioctl.h +++ b/include/asm-generic/ioctl.h | |||
@@ -68,12 +68,16 @@ | |||
68 | ((nr) << _IOC_NRSHIFT) | \ | 68 | ((nr) << _IOC_NRSHIFT) | \ |
69 | ((size) << _IOC_SIZESHIFT)) | 69 | ((size) << _IOC_SIZESHIFT)) |
70 | 70 | ||
71 | #ifdef __KERNEL__ | ||
71 | /* provoke compile error for invalid uses of size argument */ | 72 | /* provoke compile error for invalid uses of size argument */ |
72 | extern unsigned int __invalid_size_argument_for_IOC; | 73 | extern unsigned int __invalid_size_argument_for_IOC; |
73 | #define _IOC_TYPECHECK(t) \ | 74 | #define _IOC_TYPECHECK(t) \ |
74 | ((sizeof(t) == sizeof(t[1]) && \ | 75 | ((sizeof(t) == sizeof(t[1]) && \ |
75 | sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ | 76 | sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ |
76 | sizeof(t) : __invalid_size_argument_for_IOC) | 77 | sizeof(t) : __invalid_size_argument_for_IOC) |
78 | #else | ||
79 | #define _IOC_TYPECHECK(t) (sizeof(t)) | ||
80 | #endif | ||
77 | 81 | ||
78 | /* used to create numbers */ | 82 | /* used to create numbers */ |
79 | #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) | 83 | #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) |
diff --git a/include/asm-x86/efi.h b/include/asm-x86/efi.h index 7ed2bd7a7f51..d4f2b0abe929 100644 --- a/include/asm-x86/efi.h +++ b/include/asm-x86/efi.h | |||
@@ -86,7 +86,7 @@ extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3, | |||
86 | efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \ | 86 | efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \ |
87 | (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6)) | 87 | (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6)) |
88 | 88 | ||
89 | extern void *efi_ioremap(unsigned long addr, unsigned long size); | 89 | extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size); |
90 | 90 | ||
91 | #endif /* CONFIG_X86_32 */ | 91 | #endif /* CONFIG_X86_32 */ |
92 | 92 | ||
diff --git a/include/asm-x86/hw_irq.h b/include/asm-x86/hw_irq.h index 77ba51df5668..edd0b95f14d0 100644 --- a/include/asm-x86/hw_irq.h +++ b/include/asm-x86/hw_irq.h | |||
@@ -98,9 +98,17 @@ extern void (*const interrupt[NR_IRQS])(void); | |||
98 | #else | 98 | #else |
99 | typedef int vector_irq_t[NR_VECTORS]; | 99 | typedef int vector_irq_t[NR_VECTORS]; |
100 | DECLARE_PER_CPU(vector_irq_t, vector_irq); | 100 | DECLARE_PER_CPU(vector_irq_t, vector_irq); |
101 | extern spinlock_t vector_lock; | ||
102 | #endif | 101 | #endif |
103 | extern void setup_vector_irq(int cpu); | 102 | |
103 | #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_X86_64) | ||
104 | extern void lock_vector_lock(void); | ||
105 | extern void unlock_vector_lock(void); | ||
106 | extern void __setup_vector_irq(int cpu); | ||
107 | #else | ||
108 | static inline void lock_vector_lock(void) {} | ||
109 | static inline void unlock_vector_lock(void) {} | ||
110 | static inline void __setup_vector_irq(int cpu) {} | ||
111 | #endif | ||
104 | 112 | ||
105 | #endif /* !ASSEMBLY_ */ | 113 | #endif /* !ASSEMBLY_ */ |
106 | 114 | ||
diff --git a/include/asm-x86/irq_vectors.h b/include/asm-x86/irq_vectors.h index 90b1d1f12f08..b95d167b7fb2 100644 --- a/include/asm-x86/irq_vectors.h +++ b/include/asm-x86/irq_vectors.h | |||
@@ -109,7 +109,15 @@ | |||
109 | #define LAST_VM86_IRQ 15 | 109 | #define LAST_VM86_IRQ 15 |
110 | #define invalid_vm86_irq(irq) ((irq) < 3 || (irq) > 15) | 110 | #define invalid_vm86_irq(irq) ((irq) < 3 || (irq) > 15) |
111 | 111 | ||
112 | #if !defined(CONFIG_X86_VOYAGER) | 112 | #ifdef CONFIG_X86_64 |
113 | # if NR_CPUS < MAX_IO_APICS | ||
114 | # define NR_IRQS (NR_VECTORS + (32 * NR_CPUS)) | ||
115 | # else | ||
116 | # define NR_IRQS (NR_VECTORS + (32 * MAX_IO_APICS)) | ||
117 | # endif | ||
118 | # define NR_IRQ_VECTORS NR_IRQS | ||
119 | |||
120 | #elif !defined(CONFIG_X86_VOYAGER) | ||
113 | 121 | ||
114 | # if defined(CONFIG_X86_IO_APIC) || defined(CONFIG_PARAVIRT) || defined(CONFIG_X86_VISWS) | 122 | # if defined(CONFIG_X86_IO_APIC) || defined(CONFIG_PARAVIRT) || defined(CONFIG_X86_VISWS) |
115 | 123 | ||
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index a26f565e8189..327f60658d94 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -356,6 +356,7 @@ unifdef-y += virtio_balloon.h | |||
356 | unifdef-y += virtio_console.h | 356 | unifdef-y += virtio_console.h |
357 | unifdef-y += virtio_pci.h | 357 | unifdef-y += virtio_pci.h |
358 | unifdef-y += virtio_ring.h | 358 | unifdef-y += virtio_ring.h |
359 | unifdef-y += virtio_rng.h | ||
359 | unifdef-y += vt.h | 360 | unifdef-y += vt.h |
360 | unifdef-y += wait.h | 361 | unifdef-y += wait.h |
361 | unifdef-y += wanrouter.h | 362 | unifdef-y += wanrouter.h |
diff --git a/include/linux/agp_backend.h b/include/linux/agp_backend.h index 972b12bcfb36..2b8df8b420fd 100644 --- a/include/linux/agp_backend.h +++ b/include/linux/agp_backend.h | |||
@@ -30,6 +30,8 @@ | |||
30 | #ifndef _AGP_BACKEND_H | 30 | #ifndef _AGP_BACKEND_H |
31 | #define _AGP_BACKEND_H 1 | 31 | #define _AGP_BACKEND_H 1 |
32 | 32 | ||
33 | #include <linux/list.h> | ||
34 | |||
33 | enum chipset_type { | 35 | enum chipset_type { |
34 | NOT_SUPPORTED, | 36 | NOT_SUPPORTED, |
35 | SUPPORTED, | 37 | SUPPORTED, |
@@ -78,6 +80,8 @@ struct agp_memory { | |||
78 | bool is_bound; | 80 | bool is_bound; |
79 | bool is_flushed; | 81 | bool is_flushed; |
80 | bool vmalloc_flag; | 82 | bool vmalloc_flag; |
83 | /* list of agp_memory mapped to the aperture */ | ||
84 | struct list_head mapped_list; | ||
81 | }; | 85 | }; |
82 | 86 | ||
83 | #define AGP_NORMAL_MEMORY 0 | 87 | #define AGP_NORMAL_MEMORY 0 |
@@ -96,6 +100,7 @@ extern struct agp_memory *agp_allocate_memory(struct agp_bridge_data *, size_t, | |||
96 | extern int agp_copy_info(struct agp_bridge_data *, struct agp_kern_info *); | 100 | extern int agp_copy_info(struct agp_bridge_data *, struct agp_kern_info *); |
97 | extern int agp_bind_memory(struct agp_memory *, off_t); | 101 | extern int agp_bind_memory(struct agp_memory *, off_t); |
98 | extern int agp_unbind_memory(struct agp_memory *); | 102 | extern int agp_unbind_memory(struct agp_memory *); |
103 | extern int agp_rebind_memory(void); | ||
99 | extern void agp_enable(struct agp_bridge_data *, u32); | 104 | extern void agp_enable(struct agp_bridge_data *, u32); |
100 | extern struct agp_bridge_data *agp_backend_acquire(struct pci_dev *); | 105 | extern struct agp_bridge_data *agp_backend_acquire(struct pci_dev *); |
101 | extern void agp_backend_release(struct agp_bridge_data *); | 106 | extern void agp_backend_release(struct agp_bridge_data *); |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index 1abfe664c444..89781fd48859 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
@@ -110,6 +110,7 @@ extern int __bitmap_weight(const unsigned long *bitmap, int bits); | |||
110 | 110 | ||
111 | extern int bitmap_scnprintf(char *buf, unsigned int len, | 111 | extern int bitmap_scnprintf(char *buf, unsigned int len, |
112 | const unsigned long *src, int nbits); | 112 | const unsigned long *src, int nbits); |
113 | extern int bitmap_scnprintf_len(unsigned int nr_bits); | ||
113 | extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user, | 114 | extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user, |
114 | unsigned long *dst, int nbits); | 115 | unsigned long *dst, int nbits); |
115 | extern int bitmap_parse_user(const char __user *ubuf, unsigned int ulen, | 116 | extern int bitmap_parse_user(const char __user *ubuf, unsigned int ulen, |
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 652470b687c9..95837bfb5256 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -97,10 +97,14 @@ extern void *__alloc_bootmem_low_node(pg_data_t *pgdat, | |||
97 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE | 97 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE |
98 | #define alloc_bootmem(x) \ | 98 | #define alloc_bootmem(x) \ |
99 | __alloc_bootmem(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | 99 | __alloc_bootmem(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) |
100 | #define alloc_bootmem_nopanic(x) \ | ||
101 | __alloc_bootmem_nopanic(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | ||
100 | #define alloc_bootmem_low(x) \ | 102 | #define alloc_bootmem_low(x) \ |
101 | __alloc_bootmem_low(x, SMP_CACHE_BYTES, 0) | 103 | __alloc_bootmem_low(x, SMP_CACHE_BYTES, 0) |
102 | #define alloc_bootmem_pages(x) \ | 104 | #define alloc_bootmem_pages(x) \ |
103 | __alloc_bootmem(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | 105 | __alloc_bootmem(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) |
106 | #define alloc_bootmem_pages_nopanic(x) \ | ||
107 | __alloc_bootmem_nopanic(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | ||
104 | #define alloc_bootmem_low_pages(x) \ | 108 | #define alloc_bootmem_low_pages(x) \ |
105 | __alloc_bootmem_low(x, PAGE_SIZE, 0) | 109 | __alloc_bootmem_low(x, PAGE_SIZE, 0) |
106 | #define alloc_bootmem_node(pgdat, x) \ | 110 | #define alloc_bootmem_node(pgdat, x) \ |
diff --git a/include/linux/byteorder.h b/include/linux/byteorder.h new file mode 100644 index 000000000000..29f002d73d98 --- /dev/null +++ b/include/linux/byteorder.h | |||
@@ -0,0 +1,372 @@ | |||
1 | #ifndef _LINUX_BYTEORDER_H | ||
2 | #define _LINUX_BYTEORDER_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/swab.h> | ||
6 | |||
7 | #if defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN) | ||
8 | # error Fix asm/byteorder.h to define one endianness | ||
9 | #endif | ||
10 | |||
11 | #if !defined(__LITTLE_ENDIAN) && !defined(__BIG_ENDIAN) | ||
12 | # error Fix asm/byteorder.h to define arch endianness | ||
13 | #endif | ||
14 | |||
15 | #ifdef __LITTLE_ENDIAN | ||
16 | # undef __LITTLE_ENDIAN | ||
17 | # define __LITTLE_ENDIAN 1234 | ||
18 | #endif | ||
19 | |||
20 | #ifdef __BIG_ENDIAN | ||
21 | # undef __BIG_ENDIAN | ||
22 | # define __BIG_ENDIAN 4321 | ||
23 | #endif | ||
24 | |||
25 | #if defined(__LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN_BITFIELD) | ||
26 | # define __LITTLE_ENDIAN_BITFIELD | ||
27 | #endif | ||
28 | |||
29 | #if defined(__BIG_ENDIAN) && !defined(__BIG_ENDIAN_BITFIELD) | ||
30 | # define __BIG_ENDIAN_BITFIELD | ||
31 | #endif | ||
32 | |||
33 | #ifdef __LITTLE_ENDIAN | ||
34 | # define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) | ||
35 | # define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) | ||
36 | # define __le64_to_cpu(x) ((__force __u64)(__le64)(x)) | ||
37 | # define __cpu_to_le16(x) ((__force __le16)(__u16)(x)) | ||
38 | # define __cpu_to_le32(x) ((__force __le32)(__u32)(x)) | ||
39 | # define __cpu_to_le64(x) ((__force __le64)(__u64)(x)) | ||
40 | |||
41 | # define __be16_to_cpu(x) __swab16((__force __u16)(__be16)(x)) | ||
42 | # define __be32_to_cpu(x) __swab32((__force __u32)(__be32)(x)) | ||
43 | # define __be64_to_cpu(x) __swab64((__force __u64)(__be64)(x)) | ||
44 | # define __cpu_to_be16(x) ((__force __be16)__swab16(x)) | ||
45 | # define __cpu_to_be32(x) ((__force __be32)__swab32(x)) | ||
46 | # define __cpu_to_be64(x) ((__force __be64)__swab64(x)) | ||
47 | #endif | ||
48 | |||
49 | #ifdef __BIG_ENDIAN | ||
50 | # define __be16_to_cpu(x) ((__force __u16)(__be16)(x)) | ||
51 | # define __be32_to_cpu(x) ((__force __u32)(__be32)(x)) | ||
52 | # define __be64_to_cpu(x) ((__force __u64)(__be64)(x)) | ||
53 | # define __cpu_to_be16(x) ((__force __be16)(__u16)(x)) | ||
54 | # define __cpu_to_be32(x) ((__force __be32)(__u32)(x)) | ||
55 | # define __cpu_to_be64(x) ((__force __be64)(__u64)(x)) | ||
56 | |||
57 | # define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x)) | ||
58 | # define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x)) | ||
59 | # define __le64_to_cpu(x) __swab64((__force __u64)(__le64)(x)) | ||
60 | # define __cpu_to_le16(x) ((__force __le16)__swab16(x)) | ||
61 | # define __cpu_to_le32(x) ((__force __le32)__swab32(x)) | ||
62 | # define __cpu_to_le64(x) ((__force __le64)__swab64(x)) | ||
63 | #endif | ||
64 | |||
65 | /* | ||
66 | * These helpers could be phased out over time as the base version | ||
67 | * handles constant folding. | ||
68 | */ | ||
69 | #define __constant_htonl(x) __cpu_to_be32(x) | ||
70 | #define __constant_ntohl(x) __be32_to_cpu(x) | ||
71 | #define __constant_htons(x) __cpu_to_be16(x) | ||
72 | #define __constant_ntohs(x) __be16_to_cpu(x) | ||
73 | |||
74 | #define __constant_le16_to_cpu(x) __le16_to_cpu(x) | ||
75 | #define __constant_le32_to_cpu(x) __le32_to_cpu(x) | ||
76 | #define __constant_le64_to_cpu(x) __le64_to_cpu(x) | ||
77 | #define __constant_be16_to_cpu(x) __be16_to_cpu(x) | ||
78 | #define __constant_be32_to_cpu(x) __be32_to_cpu(x) | ||
79 | #define __constant_be64_to_cpu(x) __be64_to_cpu(x) | ||
80 | |||
81 | #define __constant_cpu_to_le16(x) __cpu_to_le16(x) | ||
82 | #define __constant_cpu_to_le32(x) __cpu_to_le32(x) | ||
83 | #define __constant_cpu_to_le64(x) __cpu_to_le64(x) | ||
84 | #define __constant_cpu_to_be16(x) __cpu_to_be16(x) | ||
85 | #define __constant_cpu_to_be32(x) __cpu_to_be32(x) | ||
86 | #define __constant_cpu_to_be64(x) __cpu_to_be64(x) | ||
87 | |||
88 | static inline void __le16_to_cpus(__u16 *p) | ||
89 | { | ||
90 | #ifdef __BIG_ENDIAN | ||
91 | __swab16s(p); | ||
92 | #endif | ||
93 | } | ||
94 | |||
95 | static inline void __cpu_to_le16s(__u16 *p) | ||
96 | { | ||
97 | #ifdef __BIG_ENDIAN | ||
98 | __swab16s(p); | ||
99 | #endif | ||
100 | } | ||
101 | |||
102 | static inline void __le32_to_cpus(__u32 *p) | ||
103 | { | ||
104 | #ifdef __BIG_ENDIAN | ||
105 | __swab32s(p); | ||
106 | #endif | ||
107 | } | ||
108 | |||
109 | static inline void __cpu_to_le32s(__u32 *p) | ||
110 | { | ||
111 | #ifdef __BIG_ENDIAN | ||
112 | __swab32s(p); | ||
113 | #endif | ||
114 | } | ||
115 | |||
116 | static inline void __le64_to_cpus(__u64 *p) | ||
117 | { | ||
118 | #ifdef __BIG_ENDIAN | ||
119 | __swab64s(p); | ||
120 | #endif | ||
121 | } | ||
122 | |||
123 | static inline void __cpu_to_le64s(__u64 *p) | ||
124 | { | ||
125 | #ifdef __BIG_ENDIAN | ||
126 | __swab64s(p); | ||
127 | #endif | ||
128 | } | ||
129 | |||
130 | static inline void __be16_to_cpus(__u16 *p) | ||
131 | { | ||
132 | #ifdef __LITTLE_ENDIAN | ||
133 | __swab16s(p); | ||
134 | #endif | ||
135 | } | ||
136 | |||
137 | static inline void __cpu_to_be16s(__u16 *p) | ||
138 | { | ||
139 | #ifdef __LITTLE_ENDIAN | ||
140 | __swab16s(p); | ||
141 | #endif | ||
142 | } | ||
143 | |||
144 | static inline void __be32_to_cpus(__u32 *p) | ||
145 | { | ||
146 | #ifdef __LITTLE_ENDIAN | ||
147 | __swab32s(p); | ||
148 | #endif | ||
149 | } | ||
150 | |||
151 | static inline void __cpu_to_be32s(__u32 *p) | ||
152 | { | ||
153 | #ifdef __LITTLE_ENDIAN | ||
154 | __swab32s(p); | ||
155 | #endif | ||
156 | } | ||
157 | |||
158 | static inline void __be64_to_cpus(__u64 *p) | ||
159 | { | ||
160 | #ifdef __LITTLE_ENDIAN | ||
161 | __swab64s(p); | ||
162 | #endif | ||
163 | } | ||
164 | |||
165 | static inline void __cpu_to_be64s(__u64 *p) | ||
166 | { | ||
167 | #ifdef __LITTLE_ENDIAN | ||
168 | __swab64s(p); | ||
169 | #endif | ||
170 | } | ||
171 | |||
172 | static inline __u16 __le16_to_cpup(const __le16 *p) | ||
173 | { | ||
174 | #ifdef __LITTLE_ENDIAN | ||
175 | return (__force __u16)*p; | ||
176 | #else | ||
177 | return __swab16p((__force __u16 *)p); | ||
178 | #endif | ||
179 | } | ||
180 | |||
181 | static inline __u32 __le32_to_cpup(const __le32 *p) | ||
182 | { | ||
183 | #ifdef __LITTLE_ENDIAN | ||
184 | return (__force __u32)*p; | ||
185 | #else | ||
186 | return __swab32p((__force __u32 *)p); | ||
187 | #endif | ||
188 | } | ||
189 | |||
190 | static inline __u64 __le64_to_cpup(const __le64 *p) | ||
191 | { | ||
192 | #ifdef __LITTLE_ENDIAN | ||
193 | return (__force __u64)*p; | ||
194 | #else | ||
195 | return __swab64p((__force __u64 *)p); | ||
196 | #endif | ||
197 | } | ||
198 | |||
199 | static inline __le16 __cpu_to_le16p(const __u16 *p) | ||
200 | { | ||
201 | #ifdef __LITTLE_ENDIAN | ||
202 | return (__force __le16)*p; | ||
203 | #else | ||
204 | return (__force __le16)__swab16p(p); | ||
205 | #endif | ||
206 | } | ||
207 | |||
208 | static inline __le32 __cpu_to_le32p(const __u32 *p) | ||
209 | { | ||
210 | #ifdef __LITTLE_ENDIAN | ||
211 | return (__force __le32)*p; | ||
212 | #else | ||
213 | return (__force __le32)__swab32p(p); | ||
214 | #endif | ||
215 | } | ||
216 | |||
217 | static inline __le64 __cpu_to_le64p(const __u64 *p) | ||
218 | { | ||
219 | #ifdef __LITTLE_ENDIAN | ||
220 | return (__force __le64)*p; | ||
221 | #else | ||
222 | return (__force __le64)__swab64p(p); | ||
223 | #endif | ||
224 | } | ||
225 | |||
226 | static inline __u16 __be16_to_cpup(const __be16 *p) | ||
227 | { | ||
228 | #ifdef __BIG_ENDIAN | ||
229 | return (__force __u16)*p; | ||
230 | #else | ||
231 | return __swab16p((__force __u16 *)p); | ||
232 | #endif | ||
233 | } | ||
234 | |||
235 | static inline __u32 __be32_to_cpup(const __be32 *p) | ||
236 | { | ||
237 | #ifdef __BIG_ENDIAN | ||
238 | return (__force __u32)*p; | ||
239 | #else | ||
240 | return __swab32p((__force __u32 *)p); | ||
241 | #endif | ||
242 | } | ||
243 | |||
244 | static inline __u64 __be64_to_cpup(const __be64 *p) | ||
245 | { | ||
246 | #ifdef __BIG_ENDIAN | ||
247 | return (__force __u64)*p; | ||
248 | #else | ||
249 | return __swab64p((__force __u64 *)p); | ||
250 | #endif | ||
251 | } | ||
252 | |||
253 | static inline __be16 __cpu_to_be16p(const __u16 *p) | ||
254 | { | ||
255 | #ifdef __BIG_ENDIAN | ||
256 | return (__force __be16)*p; | ||
257 | #else | ||
258 | return (__force __be16)__swab16p(p); | ||
259 | #endif | ||
260 | } | ||
261 | |||
262 | static inline __be32 __cpu_to_be32p(const __u32 *p) | ||
263 | { | ||
264 | #ifdef __BIG_ENDIAN | ||
265 | return (__force __be32)*p; | ||
266 | #else | ||
267 | return (__force __be32)__swab32p(p); | ||
268 | #endif | ||
269 | } | ||
270 | |||
271 | static inline __be64 __cpu_to_be64p(const __u64 *p) | ||
272 | { | ||
273 | #ifdef __BIG_ENDIAN | ||
274 | return (__force __be64)*p; | ||
275 | #else | ||
276 | return (__force __be64)__swab64p(p); | ||
277 | #endif | ||
278 | } | ||
279 | |||
280 | #ifdef __KERNEL__ | ||
281 | |||
282 | # define le16_to_cpu __le16_to_cpu | ||
283 | # define le32_to_cpu __le32_to_cpu | ||
284 | # define le64_to_cpu __le64_to_cpu | ||
285 | # define be16_to_cpu __be16_to_cpu | ||
286 | # define be32_to_cpu __be32_to_cpu | ||
287 | # define be64_to_cpu __be64_to_cpu | ||
288 | # define cpu_to_le16 __cpu_to_le16 | ||
289 | # define cpu_to_le32 __cpu_to_le32 | ||
290 | # define cpu_to_le64 __cpu_to_le64 | ||
291 | # define cpu_to_be16 __cpu_to_be16 | ||
292 | # define cpu_to_be32 __cpu_to_be32 | ||
293 | # define cpu_to_be64 __cpu_to_be64 | ||
294 | |||
295 | # define le16_to_cpup __le16_to_cpup | ||
296 | # define le32_to_cpup __le32_to_cpup | ||
297 | # define le64_to_cpup __le64_to_cpup | ||
298 | # define be16_to_cpup __be16_to_cpup | ||
299 | # define be32_to_cpup __be32_to_cpup | ||
300 | # define be64_to_cpup __be64_to_cpup | ||
301 | # define cpu_to_le16p __cpu_to_le16p | ||
302 | # define cpu_to_le32p __cpu_to_le32p | ||
303 | # define cpu_to_le64p __cpu_to_le64p | ||
304 | # define cpu_to_be16p __cpu_to_be16p | ||
305 | # define cpu_to_be32p __cpu_to_be32p | ||
306 | # define cpu_to_be64p __cpu_to_be64p | ||
307 | |||
308 | # define le16_to_cpus __le16_to_cpus | ||
309 | # define le32_to_cpus __le32_to_cpus | ||
310 | # define le64_to_cpus __le64_to_cpus | ||
311 | # define be16_to_cpus __be16_to_cpus | ||
312 | # define be32_to_cpus __be32_to_cpus | ||
313 | # define be64_to_cpus __be64_to_cpus | ||
314 | # define cpu_to_le16s __cpu_to_le16s | ||
315 | # define cpu_to_le32s __cpu_to_le32s | ||
316 | # define cpu_to_le64s __cpu_to_le64s | ||
317 | # define cpu_to_be16s __cpu_to_be16s | ||
318 | # define cpu_to_be32s __cpu_to_be32s | ||
319 | # define cpu_to_be64s __cpu_to_be64s | ||
320 | |||
321 | /* | ||
322 | * They have to be macros in order to do the constant folding | ||
323 | * correctly - if the argument passed into a inline function | ||
324 | * it is no longer constant according to gcc.. | ||
325 | */ | ||
326 | # undef ntohl | ||
327 | # undef ntohs | ||
328 | # undef htonl | ||
329 | # undef htons | ||
330 | |||
331 | # define ___htonl(x) __cpu_to_be32(x) | ||
332 | # define ___htons(x) __cpu_to_be16(x) | ||
333 | # define ___ntohl(x) __be32_to_cpu(x) | ||
334 | # define ___ntohs(x) __be16_to_cpu(x) | ||
335 | |||
336 | # define htonl(x) ___htonl(x) | ||
337 | # define ntohl(x) ___ntohl(x) | ||
338 | # define htons(x) ___htons(x) | ||
339 | # define ntohs(x) ___ntohs(x) | ||
340 | |||
341 | static inline void le16_add_cpu(__le16 *var, u16 val) | ||
342 | { | ||
343 | *var = cpu_to_le16(le16_to_cpup(var) + val); | ||
344 | } | ||
345 | |||
346 | static inline void le32_add_cpu(__le32 *var, u32 val) | ||
347 | { | ||
348 | *var = cpu_to_le32(le32_to_cpup(var) + val); | ||
349 | } | ||
350 | |||
351 | static inline void le64_add_cpu(__le64 *var, u64 val) | ||
352 | { | ||
353 | *var = cpu_to_le64(le64_to_cpup(var) + val); | ||
354 | } | ||
355 | |||
356 | static inline void be16_add_cpu(__be16 *var, u16 val) | ||
357 | { | ||
358 | *var = cpu_to_be16(be16_to_cpup(var) + val); | ||
359 | } | ||
360 | |||
361 | static inline void be32_add_cpu(__be32 *var, u32 val) | ||
362 | { | ||
363 | *var = cpu_to_be32(be32_to_cpup(var) + val); | ||
364 | } | ||
365 | |||
366 | static inline void be64_add_cpu(__be64 *var, u64 val) | ||
367 | { | ||
368 | *var = cpu_to_be64(be64_to_cpup(var) + val); | ||
369 | } | ||
370 | |||
371 | #endif /* __KERNEL__ */ | ||
372 | #endif /* _LINUX_BYTEORDER_H */ | ||
diff --git a/include/linux/firmware-map.h b/include/linux/firmware-map.h index acbdbcc16051..6e199c8dfacc 100644 --- a/include/linux/firmware-map.h +++ b/include/linux/firmware-map.h | |||
@@ -24,34 +24,8 @@ | |||
24 | */ | 24 | */ |
25 | #ifdef CONFIG_FIRMWARE_MEMMAP | 25 | #ifdef CONFIG_FIRMWARE_MEMMAP |
26 | 26 | ||
27 | /** | ||
28 | * Adds a firmware mapping entry. This function uses kmalloc() for memory | ||
29 | * allocation. Use firmware_map_add_early() if you want to use the bootmem | ||
30 | * allocator. | ||
31 | * | ||
32 | * That function must be called before late_initcall. | ||
33 | * | ||
34 | * @start: Start of the memory range. | ||
35 | * @end: End of the memory range (inclusive). | ||
36 | * @type: Type of the memory range. | ||
37 | * | ||
38 | * Returns 0 on success, or -ENOMEM if no memory could be allocated. | ||
39 | */ | ||
40 | int firmware_map_add(resource_size_t start, resource_size_t end, | 27 | int firmware_map_add(resource_size_t start, resource_size_t end, |
41 | const char *type); | 28 | const char *type); |
42 | |||
43 | /** | ||
44 | * Adds a firmware mapping entry. This function uses the bootmem allocator | ||
45 | * for memory allocation. Use firmware_map_add() if you want to use kmalloc(). | ||
46 | * | ||
47 | * That function must be called before late_initcall. | ||
48 | * | ||
49 | * @start: Start of the memory range. | ||
50 | * @end: End of the memory range (inclusive). | ||
51 | * @type: Type of the memory range. | ||
52 | * | ||
53 | * Returns 0 on success, or -ENOMEM if no memory could be allocated. | ||
54 | */ | ||
55 | int firmware_map_add_early(resource_size_t start, resource_size_t end, | 29 | int firmware_map_add_early(resource_size_t start, resource_size_t end, |
56 | const char *type); | 30 | const char *type); |
57 | 31 | ||
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 4862398e05bf..bf34c5f4c051 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -39,7 +39,6 @@ | |||
39 | #define I2C_DRIVERID_SAA7111A 8 /* video input processor */ | 39 | #define I2C_DRIVERID_SAA7111A 8 /* video input processor */ |
40 | #define I2C_DRIVERID_SAA7185B 13 /* video encoder */ | 40 | #define I2C_DRIVERID_SAA7185B 13 /* video encoder */ |
41 | #define I2C_DRIVERID_SAA7110 22 /* video decoder */ | 41 | #define I2C_DRIVERID_SAA7110 22 /* video decoder */ |
42 | #define I2C_DRIVERID_MGATVO 23 /* Matrox TVOut */ | ||
43 | #define I2C_DRIVERID_SAA5249 24 /* SAA5249 and compatibles */ | 42 | #define I2C_DRIVERID_SAA5249 24 /* SAA5249 and compatibles */ |
44 | #define I2C_DRIVERID_PCF8583 25 /* real time clock */ | 43 | #define I2C_DRIVERID_PCF8583 25 /* real time clock */ |
45 | #define I2C_DRIVERID_SAB3036 26 /* SAB3036 tuner */ | 44 | #define I2C_DRIVERID_SAB3036 26 /* SAB3036 tuner */ |
@@ -95,7 +94,6 @@ | |||
95 | #define I2C_HW_B_BT848 0x010005 /* BT848 video boards */ | 94 | #define I2C_HW_B_BT848 0x010005 /* BT848 video boards */ |
96 | #define I2C_HW_B_VIA 0x010007 /* Via vt82c586b */ | 95 | #define I2C_HW_B_VIA 0x010007 /* Via vt82c586b */ |
97 | #define I2C_HW_B_HYDRA 0x010008 /* Apple Hydra Mac I/O */ | 96 | #define I2C_HW_B_HYDRA 0x010008 /* Apple Hydra Mac I/O */ |
98 | #define I2C_HW_B_G400 0x010009 /* Matrox G400 */ | ||
99 | #define I2C_HW_B_I810 0x01000a /* Intel I810 */ | 97 | #define I2C_HW_B_I810 0x01000a /* Intel I810 */ |
100 | #define I2C_HW_B_VOO 0x01000b /* 3dfx Voodoo 3 / Banshee */ | 98 | #define I2C_HW_B_VOO 0x01000b /* 3dfx Voodoo 3 / Banshee */ |
101 | #define I2C_HW_B_SCX200 0x01000e /* Nat'l Semi SCx200 I2C */ | 99 | #define I2C_HW_B_SCX200 0x01000e /* Nat'l Semi SCx200 I2C */ |
diff --git a/include/linux/init.h b/include/linux/init.h index 11b84e106053..93538b696e3d 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -139,6 +139,7 @@ extern initcall_t __con_initcall_start[], __con_initcall_end[]; | |||
139 | extern initcall_t __security_initcall_start[], __security_initcall_end[]; | 139 | extern initcall_t __security_initcall_start[], __security_initcall_end[]; |
140 | 140 | ||
141 | /* Defined in init/main.c */ | 141 | /* Defined in init/main.c */ |
142 | extern int do_one_initcall(initcall_t fn); | ||
142 | extern char __initdata boot_command_line[]; | 143 | extern char __initdata boot_command_line[]; |
143 | extern char *saved_command_line; | 144 | extern char *saved_command_line; |
144 | extern unsigned int reset_devices; | 145 | extern unsigned int reset_devices; |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index aaa998f65c7a..2651f805ba6d 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -108,6 +108,13 @@ struct completion; | |||
108 | struct pt_regs; | 108 | struct pt_regs; |
109 | struct user; | 109 | struct user; |
110 | 110 | ||
111 | #ifdef CONFIG_PREEMPT_VOLUNTARY | ||
112 | extern int _cond_resched(void); | ||
113 | # define might_resched() _cond_resched() | ||
114 | #else | ||
115 | # define might_resched() do { } while (0) | ||
116 | #endif | ||
117 | |||
111 | /** | 118 | /** |
112 | * might_sleep - annotation for functions that can sleep | 119 | * might_sleep - annotation for functions that can sleep |
113 | * | 120 | * |
@@ -118,13 +125,6 @@ struct user; | |||
118 | * be bitten later when the calling function happens to sleep when it is not | 125 | * be bitten later when the calling function happens to sleep when it is not |
119 | * supposed to. | 126 | * supposed to. |
120 | */ | 127 | */ |
121 | #ifdef CONFIG_PREEMPT_VOLUNTARY | ||
122 | extern int _cond_resched(void); | ||
123 | # define might_resched() _cond_resched() | ||
124 | #else | ||
125 | # define might_resched() do { } while (0) | ||
126 | #endif | ||
127 | |||
128 | #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP | 128 | #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP |
129 | void __might_sleep(char *file, int line); | 129 | void __might_sleep(char *file, int line); |
130 | # define might_sleep() \ | 130 | # define might_sleep() \ |
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 2486eb4edbf1..331e5f1c2d8e 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -89,6 +89,7 @@ struct lock_class { | |||
89 | 89 | ||
90 | struct lockdep_subclass_key *key; | 90 | struct lockdep_subclass_key *key; |
91 | unsigned int subclass; | 91 | unsigned int subclass; |
92 | unsigned int dep_gen_id; | ||
92 | 93 | ||
93 | /* | 94 | /* |
94 | * IRQ/softirq usage tracking bits: | 95 | * IRQ/softirq usage tracking bits: |
@@ -189,6 +190,14 @@ struct lock_chain { | |||
189 | u64 chain_key; | 190 | u64 chain_key; |
190 | }; | 191 | }; |
191 | 192 | ||
193 | #define MAX_LOCKDEP_KEYS_BITS 13 | ||
194 | /* | ||
195 | * Subtract one because we offset hlock->class_idx by 1 in order | ||
196 | * to make 0 mean no class. This avoids overflowing the class_idx | ||
197 | * bitfield and hitting the BUG in hlock_class(). | ||
198 | */ | ||
199 | #define MAX_LOCKDEP_KEYS ((1UL << MAX_LOCKDEP_KEYS_BITS) - 1) | ||
200 | |||
192 | struct held_lock { | 201 | struct held_lock { |
193 | /* | 202 | /* |
194 | * One-way hash of the dependency chain up to this point. We | 203 | * One-way hash of the dependency chain up to this point. We |
@@ -205,14 +214,14 @@ struct held_lock { | |||
205 | * with zero), here we store the previous hash value: | 214 | * with zero), here we store the previous hash value: |
206 | */ | 215 | */ |
207 | u64 prev_chain_key; | 216 | u64 prev_chain_key; |
208 | struct lock_class *class; | ||
209 | unsigned long acquire_ip; | 217 | unsigned long acquire_ip; |
210 | struct lockdep_map *instance; | 218 | struct lockdep_map *instance; |
211 | 219 | struct lockdep_map *nest_lock; | |
212 | #ifdef CONFIG_LOCK_STAT | 220 | #ifdef CONFIG_LOCK_STAT |
213 | u64 waittime_stamp; | 221 | u64 waittime_stamp; |
214 | u64 holdtime_stamp; | 222 | u64 holdtime_stamp; |
215 | #endif | 223 | #endif |
224 | unsigned int class_idx:MAX_LOCKDEP_KEYS_BITS; | ||
216 | /* | 225 | /* |
217 | * The lock-stack is unified in that the lock chains of interrupt | 226 | * The lock-stack is unified in that the lock chains of interrupt |
218 | * contexts nest ontop of process context chains, but we 'separate' | 227 | * contexts nest ontop of process context chains, but we 'separate' |
@@ -226,11 +235,11 @@ struct held_lock { | |||
226 | * The following field is used to detect when we cross into an | 235 | * The following field is used to detect when we cross into an |
227 | * interrupt context: | 236 | * interrupt context: |
228 | */ | 237 | */ |
229 | int irq_context; | 238 | unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */ |
230 | int trylock; | 239 | unsigned int trylock:1; |
231 | int read; | 240 | unsigned int read:2; /* see lock_acquire() comment */ |
232 | int check; | 241 | unsigned int check:2; /* see lock_acquire() comment */ |
233 | int hardirqs_off; | 242 | unsigned int hardirqs_off:1; |
234 | }; | 243 | }; |
235 | 244 | ||
236 | /* | 245 | /* |
@@ -294,11 +303,15 @@ extern void lockdep_init_map(struct lockdep_map *lock, const char *name, | |||
294 | * 2: full validation | 303 | * 2: full validation |
295 | */ | 304 | */ |
296 | extern void lock_acquire(struct lockdep_map *lock, unsigned int subclass, | 305 | extern void lock_acquire(struct lockdep_map *lock, unsigned int subclass, |
297 | int trylock, int read, int check, unsigned long ip); | 306 | int trylock, int read, int check, |
307 | struct lockdep_map *nest_lock, unsigned long ip); | ||
298 | 308 | ||
299 | extern void lock_release(struct lockdep_map *lock, int nested, | 309 | extern void lock_release(struct lockdep_map *lock, int nested, |
300 | unsigned long ip); | 310 | unsigned long ip); |
301 | 311 | ||
312 | extern void lock_set_subclass(struct lockdep_map *lock, unsigned int subclass, | ||
313 | unsigned long ip); | ||
314 | |||
302 | # define INIT_LOCKDEP .lockdep_recursion = 0, | 315 | # define INIT_LOCKDEP .lockdep_recursion = 0, |
303 | 316 | ||
304 | #define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0) | 317 | #define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0) |
@@ -313,8 +326,9 @@ static inline void lockdep_on(void) | |||
313 | { | 326 | { |
314 | } | 327 | } |
315 | 328 | ||
316 | # define lock_acquire(l, s, t, r, c, i) do { } while (0) | 329 | # define lock_acquire(l, s, t, r, c, n, i) do { } while (0) |
317 | # define lock_release(l, n, i) do { } while (0) | 330 | # define lock_release(l, n, i) do { } while (0) |
331 | # define lock_set_subclass(l, s, i) do { } while (0) | ||
318 | # define lockdep_init() do { } while (0) | 332 | # define lockdep_init() do { } while (0) |
319 | # define lockdep_info() do { } while (0) | 333 | # define lockdep_info() do { } while (0) |
320 | # define lockdep_init_map(lock, name, key, sub) do { (void)(key); } while (0) | 334 | # define lockdep_init_map(lock, name, key, sub) do { (void)(key); } while (0) |
@@ -400,9 +414,11 @@ static inline void print_irqtrace_events(struct task_struct *curr) | |||
400 | 414 | ||
401 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 415 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
402 | # ifdef CONFIG_PROVE_LOCKING | 416 | # ifdef CONFIG_PROVE_LOCKING |
403 | # define spin_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 2, i) | 417 | # define spin_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 2, NULL, i) |
418 | # define spin_acquire_nest(l, s, t, n, i) lock_acquire(l, s, t, 0, 2, n, i) | ||
404 | # else | 419 | # else |
405 | # define spin_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 1, i) | 420 | # define spin_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 1, NULL, i) |
421 | # define spin_acquire_nest(l, s, t, n, i) lock_acquire(l, s, t, 0, 1, NULL, i) | ||
406 | # endif | 422 | # endif |
407 | # define spin_release(l, n, i) lock_release(l, n, i) | 423 | # define spin_release(l, n, i) lock_release(l, n, i) |
408 | #else | 424 | #else |
@@ -412,11 +428,11 @@ static inline void print_irqtrace_events(struct task_struct *curr) | |||
412 | 428 | ||
413 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 429 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
414 | # ifdef CONFIG_PROVE_LOCKING | 430 | # ifdef CONFIG_PROVE_LOCKING |
415 | # define rwlock_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 2, i) | 431 | # define rwlock_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 2, NULL, i) |
416 | # define rwlock_acquire_read(l, s, t, i) lock_acquire(l, s, t, 2, 2, i) | 432 | # define rwlock_acquire_read(l, s, t, i) lock_acquire(l, s, t, 2, 2, NULL, i) |
417 | # else | 433 | # else |
418 | # define rwlock_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 1, i) | 434 | # define rwlock_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 1, NULL, i) |
419 | # define rwlock_acquire_read(l, s, t, i) lock_acquire(l, s, t, 2, 1, i) | 435 | # define rwlock_acquire_read(l, s, t, i) lock_acquire(l, s, t, 2, 1, NULL, i) |
420 | # endif | 436 | # endif |
421 | # define rwlock_release(l, n, i) lock_release(l, n, i) | 437 | # define rwlock_release(l, n, i) lock_release(l, n, i) |
422 | #else | 438 | #else |
@@ -427,9 +443,9 @@ static inline void print_irqtrace_events(struct task_struct *curr) | |||
427 | 443 | ||
428 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 444 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
429 | # ifdef CONFIG_PROVE_LOCKING | 445 | # ifdef CONFIG_PROVE_LOCKING |
430 | # define mutex_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 2, i) | 446 | # define mutex_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 2, NULL, i) |
431 | # else | 447 | # else |
432 | # define mutex_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 1, i) | 448 | # define mutex_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 1, NULL, i) |
433 | # endif | 449 | # endif |
434 | # define mutex_release(l, n, i) lock_release(l, n, i) | 450 | # define mutex_release(l, n, i) lock_release(l, n, i) |
435 | #else | 451 | #else |
@@ -439,11 +455,11 @@ static inline void print_irqtrace_events(struct task_struct *curr) | |||
439 | 455 | ||
440 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 456 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
441 | # ifdef CONFIG_PROVE_LOCKING | 457 | # ifdef CONFIG_PROVE_LOCKING |
442 | # define rwsem_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 2, i) | 458 | # define rwsem_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 2, NULL, i) |
443 | # define rwsem_acquire_read(l, s, t, i) lock_acquire(l, s, t, 1, 2, i) | 459 | # define rwsem_acquire_read(l, s, t, i) lock_acquire(l, s, t, 1, 2, NULL, i) |
444 | # else | 460 | # else |
445 | # define rwsem_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 1, i) | 461 | # define rwsem_acquire(l, s, t, i) lock_acquire(l, s, t, 0, 1, NULL, i) |
446 | # define rwsem_acquire_read(l, s, t, i) lock_acquire(l, s, t, 1, 1, i) | 462 | # define rwsem_acquire_read(l, s, t, i) lock_acquire(l, s, t, 1, 1, NULL, i) |
447 | # endif | 463 | # endif |
448 | # define rwsem_release(l, n, i) lock_release(l, n, i) | 464 | # define rwsem_release(l, n, i) lock_release(l, n, i) |
449 | #else | 465 | #else |
@@ -452,4 +468,16 @@ static inline void print_irqtrace_events(struct task_struct *curr) | |||
452 | # define rwsem_release(l, n, i) do { } while (0) | 468 | # define rwsem_release(l, n, i) do { } while (0) |
453 | #endif | 469 | #endif |
454 | 470 | ||
471 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
472 | # ifdef CONFIG_PROVE_LOCKING | ||
473 | # define lock_map_acquire(l) lock_acquire(l, 0, 0, 0, 2, NULL, _THIS_IP_) | ||
474 | # else | ||
475 | # define lock_map_acquire(l) lock_acquire(l, 0, 0, 0, 1, NULL, _THIS_IP_) | ||
476 | # endif | ||
477 | # define lock_map_release(l) lock_release(l, 1, _THIS_IP_) | ||
478 | #else | ||
479 | # define lock_map_acquire(l) do { } while (0) | ||
480 | # define lock_map_release(l) do { } while (0) | ||
481 | #endif | ||
482 | |||
455 | #endif /* __LINUX_LOCKDEP_H */ | 483 | #endif /* __LINUX_LOCKDEP_H */ |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 335288bff1b7..fa651609b65d 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -834,7 +834,6 @@ extern int mprotect_fixup(struct vm_area_struct *vma, | |||
834 | struct vm_area_struct **pprev, unsigned long start, | 834 | struct vm_area_struct **pprev, unsigned long start, |
835 | unsigned long end, unsigned long newflags); | 835 | unsigned long end, unsigned long newflags); |
836 | 836 | ||
837 | #ifdef CONFIG_HAVE_GET_USER_PAGES_FAST | ||
838 | /* | 837 | /* |
839 | * get_user_pages_fast provides equivalent functionality to get_user_pages, | 838 | * get_user_pages_fast provides equivalent functionality to get_user_pages, |
840 | * operating on current and current->mm (force=0 and doesn't return any vmas). | 839 | * operating on current and current->mm (force=0 and doesn't return any vmas). |
@@ -848,25 +847,6 @@ extern int mprotect_fixup(struct vm_area_struct *vma, | |||
848 | int get_user_pages_fast(unsigned long start, int nr_pages, int write, | 847 | int get_user_pages_fast(unsigned long start, int nr_pages, int write, |
849 | struct page **pages); | 848 | struct page **pages); |
850 | 849 | ||
851 | #else | ||
852 | /* | ||
853 | * Should probably be moved to asm-generic, and architectures can include it if | ||
854 | * they don't implement their own get_user_pages_fast. | ||
855 | */ | ||
856 | #define get_user_pages_fast(start, nr_pages, write, pages) \ | ||
857 | ({ \ | ||
858 | struct mm_struct *mm = current->mm; \ | ||
859 | int ret; \ | ||
860 | \ | ||
861 | down_read(&mm->mmap_sem); \ | ||
862 | ret = get_user_pages(current, mm, start, nr_pages, \ | ||
863 | write, 0, pages, NULL); \ | ||
864 | up_read(&mm->mmap_sem); \ | ||
865 | \ | ||
866 | ret; \ | ||
867 | }) | ||
868 | #endif | ||
869 | |||
870 | /* | 850 | /* |
871 | * A callback you can register to apply pressure to ageable caches. | 851 | * A callback you can register to apply pressure to ageable caches. |
872 | * | 852 | * |
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h index 8c774905dcfe..4ab843622727 100644 --- a/include/linux/rcuclassic.h +++ b/include/linux/rcuclassic.h | |||
@@ -117,7 +117,7 @@ extern int rcu_needs_cpu(int cpu); | |||
117 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 117 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
118 | extern struct lockdep_map rcu_lock_map; | 118 | extern struct lockdep_map rcu_lock_map; |
119 | # define rcu_read_acquire() \ | 119 | # define rcu_read_acquire() \ |
120 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, _THIS_IP_) | 120 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) |
121 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | 121 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) |
122 | #else | 122 | #else |
123 | # define rcu_read_acquire() do { } while (0) | 123 | # define rcu_read_acquire() do { } while (0) |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 5270d449ff9d..5850bfb968a8 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1551,16 +1551,10 @@ static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask) | |||
1551 | 1551 | ||
1552 | extern unsigned long long sched_clock(void); | 1552 | extern unsigned long long sched_clock(void); |
1553 | 1553 | ||
1554 | #ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK | 1554 | extern void sched_clock_init(void); |
1555 | static inline void sched_clock_init(void) | 1555 | extern u64 sched_clock_cpu(int cpu); |
1556 | { | ||
1557 | } | ||
1558 | |||
1559 | static inline u64 sched_clock_cpu(int cpu) | ||
1560 | { | ||
1561 | return sched_clock(); | ||
1562 | } | ||
1563 | 1556 | ||
1557 | #ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK | ||
1564 | static inline void sched_clock_tick(void) | 1558 | static inline void sched_clock_tick(void) |
1565 | { | 1559 | { |
1566 | } | 1560 | } |
@@ -1572,28 +1566,11 @@ static inline void sched_clock_idle_sleep_event(void) | |||
1572 | static inline void sched_clock_idle_wakeup_event(u64 delta_ns) | 1566 | static inline void sched_clock_idle_wakeup_event(u64 delta_ns) |
1573 | { | 1567 | { |
1574 | } | 1568 | } |
1575 | 1569 | #else | |
1576 | #ifdef CONFIG_NO_HZ | ||
1577 | static inline void sched_clock_tick_stop(int cpu) | ||
1578 | { | ||
1579 | } | ||
1580 | |||
1581 | static inline void sched_clock_tick_start(int cpu) | ||
1582 | { | ||
1583 | } | ||
1584 | #endif | ||
1585 | |||
1586 | #else /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */ | ||
1587 | extern void sched_clock_init(void); | ||
1588 | extern u64 sched_clock_cpu(int cpu); | ||
1589 | extern void sched_clock_tick(void); | 1570 | extern void sched_clock_tick(void); |
1590 | extern void sched_clock_idle_sleep_event(void); | 1571 | extern void sched_clock_idle_sleep_event(void); |
1591 | extern void sched_clock_idle_wakeup_event(u64 delta_ns); | 1572 | extern void sched_clock_idle_wakeup_event(u64 delta_ns); |
1592 | #ifdef CONFIG_NO_HZ | ||
1593 | extern void sched_clock_tick_stop(int cpu); | ||
1594 | extern void sched_clock_tick_start(int cpu); | ||
1595 | #endif | 1573 | #endif |
1596 | #endif /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */ | ||
1597 | 1574 | ||
1598 | /* | 1575 | /* |
1599 | * For kernel-internal use: high-speed (but slightly incorrect) per-cpu | 1576 | * For kernel-internal use: high-speed (but slightly incorrect) per-cpu |
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index a66304a09955..a1783b229ef4 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
@@ -4,6 +4,8 @@ | |||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/string.h> | 5 | #include <linux/string.h> |
6 | #include <linux/mutex.h> | 6 | #include <linux/mutex.h> |
7 | #include <linux/cpumask.h> | ||
8 | #include <linux/nodemask.h> | ||
7 | 9 | ||
8 | struct seq_operations; | 10 | struct seq_operations; |
9 | struct file; | 11 | struct file; |
@@ -47,6 +49,16 @@ int seq_path(struct seq_file *, struct path *, char *); | |||
47 | int seq_dentry(struct seq_file *, struct dentry *, char *); | 49 | int seq_dentry(struct seq_file *, struct dentry *, char *); |
48 | int seq_path_root(struct seq_file *m, struct path *path, struct path *root, | 50 | int seq_path_root(struct seq_file *m, struct path *path, struct path *root, |
49 | char *esc); | 51 | char *esc); |
52 | int seq_bitmap(struct seq_file *m, unsigned long *bits, unsigned int nr_bits); | ||
53 | static inline int seq_cpumask(struct seq_file *m, cpumask_t *mask) | ||
54 | { | ||
55 | return seq_bitmap(m, mask->bits, NR_CPUS); | ||
56 | } | ||
57 | |||
58 | static inline int seq_nodemask(struct seq_file *m, nodemask_t *mask) | ||
59 | { | ||
60 | return seq_bitmap(m, mask->bits, MAX_NUMNODES); | ||
61 | } | ||
50 | 62 | ||
51 | int single_open(struct file *, int (*)(struct seq_file *, void *), void *); | 63 | int single_open(struct file *, int (*)(struct seq_file *, void *), void *); |
52 | int single_release(struct inode *, struct file *); | 64 | int single_release(struct inode *, struct file *); |
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 61e5610ad165..e0c0fccced46 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
@@ -183,8 +183,14 @@ do { \ | |||
183 | 183 | ||
184 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 184 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
185 | # define spin_lock_nested(lock, subclass) _spin_lock_nested(lock, subclass) | 185 | # define spin_lock_nested(lock, subclass) _spin_lock_nested(lock, subclass) |
186 | # define spin_lock_nest_lock(lock, nest_lock) \ | ||
187 | do { \ | ||
188 | typecheck(struct lockdep_map *, &(nest_lock)->dep_map);\ | ||
189 | _spin_lock_nest_lock(lock, &(nest_lock)->dep_map); \ | ||
190 | } while (0) | ||
186 | #else | 191 | #else |
187 | # define spin_lock_nested(lock, subclass) _spin_lock(lock) | 192 | # define spin_lock_nested(lock, subclass) _spin_lock(lock) |
193 | # define spin_lock_nest_lock(lock, nest_lock) _spin_lock(lock) | ||
188 | #endif | 194 | #endif |
189 | 195 | ||
190 | #define write_lock(lock) _write_lock(lock) | 196 | #define write_lock(lock) _write_lock(lock) |
diff --git a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h index 8a2307ce7296..d79845d034b5 100644 --- a/include/linux/spinlock_api_smp.h +++ b/include/linux/spinlock_api_smp.h | |||
@@ -22,6 +22,8 @@ int in_lock_functions(unsigned long addr); | |||
22 | void __lockfunc _spin_lock(spinlock_t *lock) __acquires(lock); | 22 | void __lockfunc _spin_lock(spinlock_t *lock) __acquires(lock); |
23 | void __lockfunc _spin_lock_nested(spinlock_t *lock, int subclass) | 23 | void __lockfunc _spin_lock_nested(spinlock_t *lock, int subclass) |
24 | __acquires(lock); | 24 | __acquires(lock); |
25 | void __lockfunc _spin_lock_nest_lock(spinlock_t *lock, struct lockdep_map *map) | ||
26 | __acquires(lock); | ||
25 | void __lockfunc _read_lock(rwlock_t *lock) __acquires(lock); | 27 | void __lockfunc _read_lock(rwlock_t *lock) __acquires(lock); |
26 | void __lockfunc _write_lock(rwlock_t *lock) __acquires(lock); | 28 | void __lockfunc _write_lock(rwlock_t *lock) __acquires(lock); |
27 | void __lockfunc _spin_lock_bh(spinlock_t *lock) __acquires(lock); | 29 | void __lockfunc _spin_lock_bh(spinlock_t *lock) __acquires(lock); |
diff --git a/include/linux/swab.h b/include/linux/swab.h new file mode 100644 index 000000000000..270d5c208a89 --- /dev/null +++ b/include/linux/swab.h | |||
@@ -0,0 +1,309 @@ | |||
1 | #ifndef _LINUX_SWAB_H | ||
2 | #define _LINUX_SWAB_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/compiler.h> | ||
6 | #include <asm/byteorder.h> | ||
7 | |||
8 | /* | ||
9 | * casts are necessary for constants, because we never know how for sure | ||
10 | * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. | ||
11 | */ | ||
12 | #define __const_swab16(x) ((__u16)( \ | ||
13 | (((__u16)(x) & (__u16)0x00ffU) << 8) | \ | ||
14 | (((__u16)(x) & (__u16)0xff00U) >> 8))) | ||
15 | |||
16 | #define __const_swab32(x) ((__u32)( \ | ||
17 | (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ | ||
18 | (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ | ||
19 | (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ | ||
20 | (((__u32)(x) & (__u32)0xff000000UL) >> 24))) | ||
21 | |||
22 | #define __const_swab64(x) ((__u64)( \ | ||
23 | (((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \ | ||
24 | (((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \ | ||
25 | (((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \ | ||
26 | (((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \ | ||
27 | (((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \ | ||
28 | (((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ | ||
29 | (((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \ | ||
30 | (((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56))) | ||
31 | |||
32 | #define __const_swahw32(x) ((__u32)( \ | ||
33 | (((__u32)(x) & (__u32)0x0000ffffUL) << 16) | \ | ||
34 | (((__u32)(x) & (__u32)0xffff0000UL) >> 16))) | ||
35 | |||
36 | #define __const_swahb32(x) ((__u32)( \ | ||
37 | (((__u32)(x) & (__u32)0x00ff00ffUL) << 8) | \ | ||
38 | (((__u32)(x) & (__u32)0xff00ff00UL) >> 8))) | ||
39 | |||
40 | /* | ||
41 | * Implement the following as inlines, but define the interface using | ||
42 | * macros to allow constant folding when possible: | ||
43 | * ___swab16, ___swab32, ___swab64, ___swahw32, ___swahb32 | ||
44 | */ | ||
45 | |||
46 | static inline __attribute_const__ __u16 ___swab16(__u16 val) | ||
47 | { | ||
48 | #ifdef __arch_swab16 | ||
49 | return __arch_swab16(val); | ||
50 | #elif defined(__arch_swab16p) | ||
51 | return __arch_swab16p(&val); | ||
52 | #else | ||
53 | return __const_swab16(val); | ||
54 | #endif | ||
55 | } | ||
56 | |||
57 | static inline __attribute_const__ __u32 ___swab32(__u32 val) | ||
58 | { | ||
59 | #ifdef __arch_swab32 | ||
60 | return __arch_swab32(val); | ||
61 | #elif defined(__arch_swab32p) | ||
62 | return __arch_swab32p(&val); | ||
63 | #else | ||
64 | return __const_swab32(val); | ||
65 | #endif | ||
66 | } | ||
67 | |||
68 | static inline __attribute_const__ __u64 ___swab64(__u64 val) | ||
69 | { | ||
70 | #ifdef __arch_swab64 | ||
71 | return __arch_swab64(val); | ||
72 | #elif defined(__arch_swab64p) | ||
73 | return __arch_swab64p(&val); | ||
74 | #elif defined(__SWAB_64_THRU_32__) | ||
75 | __u32 h = val >> 32; | ||
76 | __u32 l = val & ((1ULL << 32) - 1); | ||
77 | return (((__u64)___swab32(l)) << 32) | ((__u64)(___swab32(h))); | ||
78 | #else | ||
79 | return __const_swab64(val); | ||
80 | #endif | ||
81 | } | ||
82 | |||
83 | static inline __attribute_const__ __u32 ___swahw32(__u32 val) | ||
84 | { | ||
85 | #ifdef __arch_swahw32 | ||
86 | return __arch_swahw32(val); | ||
87 | #elif defined(__arch_swahw32p) | ||
88 | return __arch_swahw32p(&val); | ||
89 | #else | ||
90 | return __const_swahw32(val); | ||
91 | #endif | ||
92 | } | ||
93 | |||
94 | static inline __attribute_const__ __u32 ___swahb32(__u32 val) | ||
95 | { | ||
96 | #ifdef __arch_swahb32 | ||
97 | return __arch_swahb32(val); | ||
98 | #elif defined(__arch_swahb32p) | ||
99 | return __arch_swahb32p(&val); | ||
100 | #else | ||
101 | return __const_swahb32(val); | ||
102 | #endif | ||
103 | } | ||
104 | |||
105 | /** | ||
106 | * __swab16 - return a byteswapped 16-bit value | ||
107 | * @x: value to byteswap | ||
108 | */ | ||
109 | #define __swab16(x) \ | ||
110 | (__builtin_constant_p((__u16)(x)) ? \ | ||
111 | __const_swab16((x)) : \ | ||
112 | ___swab16((x))) | ||
113 | |||
114 | /** | ||
115 | * __swab32 - return a byteswapped 32-bit value | ||
116 | * @x: value to byteswap | ||
117 | */ | ||
118 | #define __swab32(x) \ | ||
119 | (__builtin_constant_p((__u32)(x)) ? \ | ||
120 | __const_swab32((x)) : \ | ||
121 | ___swab32((x))) | ||
122 | |||
123 | /** | ||
124 | * __swab64 - return a byteswapped 64-bit value | ||
125 | * @x: value to byteswap | ||
126 | */ | ||
127 | #define __swab64(x) \ | ||
128 | (__builtin_constant_p((__u64)(x)) ? \ | ||
129 | __const_swab64((x)) : \ | ||
130 | ___swab64((x))) | ||
131 | |||
132 | /** | ||
133 | * __swahw32 - return a word-swapped 32-bit value | ||
134 | * @x: value to wordswap | ||
135 | * | ||
136 | * __swahw32(0x12340000) is 0x00001234 | ||
137 | */ | ||
138 | #define __swahw32(x) \ | ||
139 | (__builtin_constant_p((__u32)(x)) ? \ | ||
140 | __const_swahw32((x)) : \ | ||
141 | ___swahw32((x))) | ||
142 | |||
143 | /** | ||
144 | * __swahb32 - return a high and low byte-swapped 32-bit value | ||
145 | * @x: value to byteswap | ||
146 | * | ||
147 | * __swahb32(0x12345678) is 0x34127856 | ||
148 | */ | ||
149 | #define __swahb32(x) \ | ||
150 | (__builtin_constant_p((__u32)(x)) ? \ | ||
151 | __const_swahb32((x)) : \ | ||
152 | ___swahb32((x))) | ||
153 | |||
154 | /** | ||
155 | * __swab16p - return a byteswapped 16-bit value from a pointer | ||
156 | * @p: pointer to a naturally-aligned 16-bit value | ||
157 | */ | ||
158 | static inline __u16 __swab16p(const __u16 *p) | ||
159 | { | ||
160 | #ifdef __arch_swab16p | ||
161 | return __arch_swab16p(p); | ||
162 | #else | ||
163 | return __swab16(*p); | ||
164 | #endif | ||
165 | } | ||
166 | |||
167 | /** | ||
168 | * __swab32p - return a byteswapped 32-bit value from a pointer | ||
169 | * @p: pointer to a naturally-aligned 32-bit value | ||
170 | */ | ||
171 | static inline __u32 __swab32p(const __u32 *p) | ||
172 | { | ||
173 | #ifdef __arch_swab32p | ||
174 | return __arch_swab32p(p); | ||
175 | #else | ||
176 | return __swab32(*p); | ||
177 | #endif | ||
178 | } | ||
179 | |||
180 | /** | ||
181 | * __swab64p - return a byteswapped 64-bit value from a pointer | ||
182 | * @p: pointer to a naturally-aligned 64-bit value | ||
183 | */ | ||
184 | static inline __u64 __swab64p(const __u64 *p) | ||
185 | { | ||
186 | #ifdef __arch_swab64p | ||
187 | return __arch_swab64p(p); | ||
188 | #else | ||
189 | return __swab64(*p); | ||
190 | #endif | ||
191 | } | ||
192 | |||
193 | /** | ||
194 | * __swahw32p - return a wordswapped 32-bit value from a pointer | ||
195 | * @p: pointer to a naturally-aligned 32-bit value | ||
196 | * | ||
197 | * See __swahw32() for details of wordswapping. | ||
198 | */ | ||
199 | static inline __u32 __swahw32p(const __u32 *p) | ||
200 | { | ||
201 | #ifdef __arch_swahw32p | ||
202 | return __arch_swahw32p(p); | ||
203 | #else | ||
204 | return __swahw32(*p); | ||
205 | #endif | ||
206 | } | ||
207 | |||
208 | /** | ||
209 | * __swahb32p - return a high and low byteswapped 32-bit value from a pointer | ||
210 | * @p: pointer to a naturally-aligned 32-bit value | ||
211 | * | ||
212 | * See __swahb32() for details of high/low byteswapping. | ||
213 | */ | ||
214 | static inline __u32 __swahb32p(const __u32 *p) | ||
215 | { | ||
216 | #ifdef __arch_swahb32p | ||
217 | return __arch_swahb32p(p); | ||
218 | #else | ||
219 | return __swahb32(*p); | ||
220 | #endif | ||
221 | } | ||
222 | |||
223 | /** | ||
224 | * __swab16s - byteswap a 16-bit value in-place | ||
225 | * @p: pointer to a naturally-aligned 16-bit value | ||
226 | */ | ||
227 | static inline void __swab16s(__u16 *p) | ||
228 | { | ||
229 | #ifdef __arch_swab16s | ||
230 | __arch_swab16s(p); | ||
231 | #else | ||
232 | *p = __swab16p(p); | ||
233 | #endif | ||
234 | } | ||
235 | /** | ||
236 | * __swab32s - byteswap a 32-bit value in-place | ||
237 | * @p: pointer to a naturally-aligned 32-bit value | ||
238 | */ | ||
239 | static inline void __swab32s(__u32 *p) | ||
240 | { | ||
241 | #ifdef __arch_swab32s | ||
242 | __arch_swab32s(p); | ||
243 | #else | ||
244 | *p = __swab32p(p); | ||
245 | #endif | ||
246 | } | ||
247 | |||
248 | /** | ||
249 | * __swab64s - byteswap a 64-bit value in-place | ||
250 | * @p: pointer to a naturally-aligned 64-bit value | ||
251 | */ | ||
252 | static inline void __swab64s(__u64 *p) | ||
253 | { | ||
254 | #ifdef __arch_swab64s | ||
255 | __arch_swab64s(p); | ||
256 | #else | ||
257 | *p = __swab64p(p); | ||
258 | #endif | ||
259 | } | ||
260 | |||
261 | /** | ||
262 | * __swahw32s - wordswap a 32-bit value in-place | ||
263 | * @p: pointer to a naturally-aligned 32-bit value | ||
264 | * | ||
265 | * See __swahw32() for details of wordswapping | ||
266 | */ | ||
267 | static inline void __swahw32s(__u32 *p) | ||
268 | { | ||
269 | #ifdef __arch_swahw32s | ||
270 | __arch_swahw32s(p); | ||
271 | #else | ||
272 | *p = __swahw32p(p); | ||
273 | #endif | ||
274 | } | ||
275 | |||
276 | /** | ||
277 | * __swahb32s - high and low byteswap a 32-bit value in-place | ||
278 | * @p: pointer to a naturally-aligned 32-bit value | ||
279 | * | ||
280 | * See __swahb32() for details of high and low byte swapping | ||
281 | */ | ||
282 | static inline void __swahb32s(__u32 *p) | ||
283 | { | ||
284 | #ifdef __arch_swahb32s | ||
285 | __arch_swahb32s(p); | ||
286 | #else | ||
287 | *p = __swahb32p(p); | ||
288 | #endif | ||
289 | } | ||
290 | |||
291 | #ifdef __KERNEL__ | ||
292 | # define swab16 __swab16 | ||
293 | # define swab32 __swab32 | ||
294 | # define swab64 __swab64 | ||
295 | # define swahw32 __swahw32 | ||
296 | # define swahb32 __swahb32 | ||
297 | # define swab16p __swab16p | ||
298 | # define swab32p __swab32p | ||
299 | # define swab64p __swab64p | ||
300 | # define swahw32p __swahw32p | ||
301 | # define swahb32p __swahb32p | ||
302 | # define swab16s __swab16s | ||
303 | # define swab32s __swab32s | ||
304 | # define swab64s __swab64s | ||
305 | # define swahw32s __swahw32s | ||
306 | # define swahb32s __swahb32s | ||
307 | #endif /* __KERNEL__ */ | ||
308 | |||
309 | #endif /* _LINUX_SWAB_H */ | ||
diff --git a/include/video/atmel_lcdc.h b/include/video/atmel_lcdc.h index 613173b5db69..920c4e9cb93d 100644 --- a/include/video/atmel_lcdc.h +++ b/include/video/atmel_lcdc.h | |||
@@ -41,6 +41,7 @@ struct atmel_lcdfb_info { | |||
41 | struct work_struct task; | 41 | struct work_struct task; |
42 | 42 | ||
43 | unsigned int guard_time; | 43 | unsigned int guard_time; |
44 | unsigned int smem_len; | ||
44 | struct platform_device *pdev; | 45 | struct platform_device *pdev; |
45 | struct clk *bus_clk; | 46 | struct clk *bus_clk; |
46 | struct clk *lcdc_clk; | 47 | struct clk *lcdc_clk; |
diff --git a/include/video/radeon.h b/include/video/radeon.h index 95a1f2038b1d..099ffa5e5bee 100644 --- a/include/video/radeon.h +++ b/include/video/radeon.h | |||
@@ -742,6 +742,10 @@ | |||
742 | #define SOFT_RESET_RB (1 << 6) | 742 | #define SOFT_RESET_RB (1 << 6) |
743 | #define SOFT_RESET_HDP (1 << 7) | 743 | #define SOFT_RESET_HDP (1 << 7) |
744 | 744 | ||
745 | /* WAIT_UNTIL bit constants */ | ||
746 | #define WAIT_DMA_GUI_IDLE (1 << 9) | ||
747 | #define WAIT_2D_IDLECLEAN (1 << 16) | ||
748 | |||
745 | /* SURFACE_CNTL bit consants */ | 749 | /* SURFACE_CNTL bit consants */ |
746 | #define SURF_TRANSLATION_DIS (1 << 8) | 750 | #define SURF_TRANSLATION_DIS (1 << 8) |
747 | #define NONSURF_AP0_SWP_16BPP (1 << 20) | 751 | #define NONSURF_AP0_SWP_16BPP (1 << 20) |
diff --git a/init/main.c b/init/main.c index 0bc7e167bf45..f6f7042331dc 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -691,7 +691,7 @@ asmlinkage void __init start_kernel(void) | |||
691 | rest_init(); | 691 | rest_init(); |
692 | } | 692 | } |
693 | 693 | ||
694 | static int __initdata initcall_debug; | 694 | static int initcall_debug; |
695 | 695 | ||
696 | static int __init initcall_debug_setup(char *str) | 696 | static int __init initcall_debug_setup(char *str) |
697 | { | 697 | { |
@@ -700,7 +700,7 @@ static int __init initcall_debug_setup(char *str) | |||
700 | } | 700 | } |
701 | __setup("initcall_debug", initcall_debug_setup); | 701 | __setup("initcall_debug", initcall_debug_setup); |
702 | 702 | ||
703 | static void __init do_one_initcall(initcall_t fn) | 703 | int do_one_initcall(initcall_t fn) |
704 | { | 704 | { |
705 | int count = preempt_count(); | 705 | int count = preempt_count(); |
706 | ktime_t t0, t1, delta; | 706 | ktime_t t0, t1, delta; |
@@ -740,6 +740,8 @@ static void __init do_one_initcall(initcall_t fn) | |||
740 | print_fn_descriptor_symbol(KERN_WARNING "initcall %s", fn); | 740 | print_fn_descriptor_symbol(KERN_WARNING "initcall %s", fn); |
741 | printk(" returned with %s\n", msgbuf); | 741 | printk(" returned with %s\n", msgbuf); |
742 | } | 742 | } |
743 | |||
744 | return result; | ||
743 | } | 745 | } |
744 | 746 | ||
745 | 747 | ||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz index 382dd5a8b2d7..94fabd534b03 100644 --- a/kernel/Kconfig.hz +++ b/kernel/Kconfig.hz | |||
@@ -55,4 +55,4 @@ config HZ | |||
55 | default 1000 if HZ_1000 | 55 | default 1000 if HZ_1000 |
56 | 56 | ||
57 | config SCHED_HRTICK | 57 | config SCHED_HRTICK |
58 | def_bool HIGH_RES_TIMERS && USE_GENERIC_SMP_HELPERS | 58 | def_bool HIGH_RES_TIMERS && (!SMP || USE_GENERIC_SMP_HELPERS) |
diff --git a/kernel/cpu.c b/kernel/cpu.c index e202a68d1cc1..f17e9854c246 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c | |||
@@ -349,6 +349,8 @@ static int __cpuinit _cpu_up(unsigned int cpu, int tasks_frozen) | |||
349 | goto out_notify; | 349 | goto out_notify; |
350 | BUG_ON(!cpu_online(cpu)); | 350 | BUG_ON(!cpu_online(cpu)); |
351 | 351 | ||
352 | cpu_set(cpu, cpu_active_map); | ||
353 | |||
352 | /* Now call notifier in preparation. */ | 354 | /* Now call notifier in preparation. */ |
353 | raw_notifier_call_chain(&cpu_chain, CPU_ONLINE | mod, hcpu); | 355 | raw_notifier_call_chain(&cpu_chain, CPU_ONLINE | mod, hcpu); |
354 | 356 | ||
@@ -367,7 +369,7 @@ int __cpuinit cpu_up(unsigned int cpu) | |||
367 | if (!cpu_isset(cpu, cpu_possible_map)) { | 369 | if (!cpu_isset(cpu, cpu_possible_map)) { |
368 | printk(KERN_ERR "can't online cpu %d because it is not " | 370 | printk(KERN_ERR "can't online cpu %d because it is not " |
369 | "configured as may-hotadd at boot time\n", cpu); | 371 | "configured as may-hotadd at boot time\n", cpu); |
370 | #if defined(CONFIG_IA64) || defined(CONFIG_X86_64) || defined(CONFIG_S390) | 372 | #if defined(CONFIG_IA64) || defined(CONFIG_X86_64) |
371 | printk(KERN_ERR "please check additional_cpus= boot " | 373 | printk(KERN_ERR "please check additional_cpus= boot " |
372 | "parameter\n"); | 374 | "parameter\n"); |
373 | #endif | 375 | #endif |
@@ -383,9 +385,6 @@ int __cpuinit cpu_up(unsigned int cpu) | |||
383 | 385 | ||
384 | err = _cpu_up(cpu, 0); | 386 | err = _cpu_up(cpu, 0); |
385 | 387 | ||
386 | if (cpu_online(cpu)) | ||
387 | cpu_set(cpu, cpu_active_map); | ||
388 | |||
389 | out: | 388 | out: |
390 | cpu_maps_update_done(); | 389 | cpu_maps_update_done(); |
391 | return err; | 390 | return err; |
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index 6c6d35d68ee9..a09dd29c2fd7 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c | |||
@@ -8,6 +8,7 @@ | |||
8 | 8 | ||
9 | #include <linux/irq.h> | 9 | #include <linux/irq.h> |
10 | #include <linux/proc_fs.h> | 10 | #include <linux/proc_fs.h> |
11 | #include <linux/seq_file.h> | ||
11 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
12 | 13 | ||
13 | #include "internals.h" | 14 | #include "internals.h" |
@@ -16,23 +17,18 @@ static struct proc_dir_entry *root_irq_dir; | |||
16 | 17 | ||
17 | #ifdef CONFIG_SMP | 18 | #ifdef CONFIG_SMP |
18 | 19 | ||
19 | static int irq_affinity_read_proc(char *page, char **start, off_t off, | 20 | static int irq_affinity_proc_show(struct seq_file *m, void *v) |
20 | int count, int *eof, void *data) | ||
21 | { | 21 | { |
22 | struct irq_desc *desc = irq_desc + (long)data; | 22 | struct irq_desc *desc = irq_desc + (long)m->private; |
23 | cpumask_t *mask = &desc->affinity; | 23 | cpumask_t *mask = &desc->affinity; |
24 | int len; | ||
25 | 24 | ||
26 | #ifdef CONFIG_GENERIC_PENDING_IRQ | 25 | #ifdef CONFIG_GENERIC_PENDING_IRQ |
27 | if (desc->status & IRQ_MOVE_PENDING) | 26 | if (desc->status & IRQ_MOVE_PENDING) |
28 | mask = &desc->pending_mask; | 27 | mask = &desc->pending_mask; |
29 | #endif | 28 | #endif |
30 | len = cpumask_scnprintf(page, count, *mask); | 29 | seq_cpumask(m, mask); |
31 | 30 | seq_putc(m, '\n'); | |
32 | if (count - len < 2) | 31 | return 0; |
33 | return -EINVAL; | ||
34 | len += sprintf(page + len, "\n"); | ||
35 | return len; | ||
36 | } | 32 | } |
37 | 33 | ||
38 | #ifndef is_affinity_mask_valid | 34 | #ifndef is_affinity_mask_valid |
@@ -40,11 +36,12 @@ static int irq_affinity_read_proc(char *page, char **start, off_t off, | |||
40 | #endif | 36 | #endif |
41 | 37 | ||
42 | int no_irq_affinity; | 38 | int no_irq_affinity; |
43 | static int irq_affinity_write_proc(struct file *file, const char __user *buffer, | 39 | static ssize_t irq_affinity_proc_write(struct file *file, |
44 | unsigned long count, void *data) | 40 | const char __user *buffer, size_t count, loff_t *pos) |
45 | { | 41 | { |
46 | unsigned int irq = (int)(long)data, full_count = count, err; | 42 | unsigned int irq = (int)(long)PDE(file->f_path.dentry->d_inode)->data; |
47 | cpumask_t new_value; | 43 | cpumask_t new_value; |
44 | int err; | ||
48 | 45 | ||
49 | if (!irq_desc[irq].chip->set_affinity || no_irq_affinity || | 46 | if (!irq_desc[irq].chip->set_affinity || no_irq_affinity || |
50 | irq_balancing_disabled(irq)) | 47 | irq_balancing_disabled(irq)) |
@@ -65,28 +62,38 @@ static int irq_affinity_write_proc(struct file *file, const char __user *buffer, | |||
65 | if (!cpus_intersects(new_value, cpu_online_map)) | 62 | if (!cpus_intersects(new_value, cpu_online_map)) |
66 | /* Special case for empty set - allow the architecture | 63 | /* Special case for empty set - allow the architecture |
67 | code to set default SMP affinity. */ | 64 | code to set default SMP affinity. */ |
68 | return irq_select_affinity(irq) ? -EINVAL : full_count; | 65 | return irq_select_affinity(irq) ? -EINVAL : count; |
69 | 66 | ||
70 | irq_set_affinity(irq, new_value); | 67 | irq_set_affinity(irq, new_value); |
71 | 68 | ||
72 | return full_count; | 69 | return count; |
73 | } | 70 | } |
74 | 71 | ||
75 | static int default_affinity_read(char *page, char **start, off_t off, | 72 | static int irq_affinity_proc_open(struct inode *inode, struct file *file) |
76 | int count, int *eof, void *data) | ||
77 | { | 73 | { |
78 | int len = cpumask_scnprintf(page, count, irq_default_affinity); | 74 | return single_open(file, irq_affinity_proc_show, PDE(inode)->data); |
79 | if (count - len < 2) | ||
80 | return -EINVAL; | ||
81 | len += sprintf(page + len, "\n"); | ||
82 | return len; | ||
83 | } | 75 | } |
84 | 76 | ||
85 | static int default_affinity_write(struct file *file, const char __user *buffer, | 77 | static const struct file_operations irq_affinity_proc_fops = { |
86 | unsigned long count, void *data) | 78 | .open = irq_affinity_proc_open, |
79 | .read = seq_read, | ||
80 | .llseek = seq_lseek, | ||
81 | .release = single_release, | ||
82 | .write = irq_affinity_proc_write, | ||
83 | }; | ||
84 | |||
85 | static int default_affinity_show(struct seq_file *m, void *v) | ||
86 | { | ||
87 | seq_cpumask(m, &irq_default_affinity); | ||
88 | seq_putc(m, '\n'); | ||
89 | return 0; | ||
90 | } | ||
91 | |||
92 | static ssize_t default_affinity_write(struct file *file, | ||
93 | const char __user *buffer, size_t count, loff_t *ppos) | ||
87 | { | 94 | { |
88 | unsigned int full_count = count, err; | ||
89 | cpumask_t new_value; | 95 | cpumask_t new_value; |
96 | int err; | ||
90 | 97 | ||
91 | err = cpumask_parse_user(buffer, count, new_value); | 98 | err = cpumask_parse_user(buffer, count, new_value); |
92 | if (err) | 99 | if (err) |
@@ -105,8 +112,21 @@ static int default_affinity_write(struct file *file, const char __user *buffer, | |||
105 | 112 | ||
106 | irq_default_affinity = new_value; | 113 | irq_default_affinity = new_value; |
107 | 114 | ||
108 | return full_count; | 115 | return count; |
109 | } | 116 | } |
117 | |||
118 | static int default_affinity_open(struct inode *inode, struct file *file) | ||
119 | { | ||
120 | return single_open(file, default_affinity_show, NULL); | ||
121 | } | ||
122 | |||
123 | static const struct file_operations default_affinity_proc_fops = { | ||
124 | .open = default_affinity_open, | ||
125 | .read = seq_read, | ||
126 | .llseek = seq_lseek, | ||
127 | .release = single_release, | ||
128 | .write = default_affinity_write, | ||
129 | }; | ||
110 | #endif | 130 | #endif |
111 | 131 | ||
112 | static int irq_spurious_read(char *page, char **start, off_t off, | 132 | static int irq_spurious_read(char *page, char **start, off_t off, |
@@ -178,16 +198,9 @@ void register_irq_proc(unsigned int irq) | |||
178 | irq_desc[irq].dir = proc_mkdir(name, root_irq_dir); | 198 | irq_desc[irq].dir = proc_mkdir(name, root_irq_dir); |
179 | 199 | ||
180 | #ifdef CONFIG_SMP | 200 | #ifdef CONFIG_SMP |
181 | { | 201 | /* create /proc/irq/<irq>/smp_affinity */ |
182 | /* create /proc/irq/<irq>/smp_affinity */ | 202 | proc_create_data("smp_affinity", 0600, irq_desc[irq].dir, |
183 | entry = create_proc_entry("smp_affinity", 0600, irq_desc[irq].dir); | 203 | &irq_affinity_proc_fops, (void *)(long)irq); |
184 | |||
185 | if (entry) { | ||
186 | entry->data = (void *)(long)irq; | ||
187 | entry->read_proc = irq_affinity_read_proc; | ||
188 | entry->write_proc = irq_affinity_write_proc; | ||
189 | } | ||
190 | } | ||
191 | #endif | 204 | #endif |
192 | 205 | ||
193 | entry = create_proc_entry("spurious", 0444, irq_desc[irq].dir); | 206 | entry = create_proc_entry("spurious", 0444, irq_desc[irq].dir); |
@@ -208,15 +221,8 @@ void unregister_handler_proc(unsigned int irq, struct irqaction *action) | |||
208 | void register_default_affinity_proc(void) | 221 | void register_default_affinity_proc(void) |
209 | { | 222 | { |
210 | #ifdef CONFIG_SMP | 223 | #ifdef CONFIG_SMP |
211 | struct proc_dir_entry *entry; | 224 | proc_create("irq/default_smp_affinity", 0600, NULL, |
212 | 225 | &default_affinity_proc_fops); | |
213 | /* create /proc/irq/default_smp_affinity */ | ||
214 | entry = create_proc_entry("default_smp_affinity", 0600, root_irq_dir); | ||
215 | if (entry) { | ||
216 | entry->data = NULL; | ||
217 | entry->read_proc = default_affinity_read; | ||
218 | entry->write_proc = default_affinity_write; | ||
219 | } | ||
220 | #endif | 226 | #endif |
221 | } | 227 | } |
222 | 228 | ||
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index d38a64362973..1aa91fd6b06e 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
@@ -124,6 +124,15 @@ static struct lock_list list_entries[MAX_LOCKDEP_ENTRIES]; | |||
124 | unsigned long nr_lock_classes; | 124 | unsigned long nr_lock_classes; |
125 | static struct lock_class lock_classes[MAX_LOCKDEP_KEYS]; | 125 | static struct lock_class lock_classes[MAX_LOCKDEP_KEYS]; |
126 | 126 | ||
127 | static inline struct lock_class *hlock_class(struct held_lock *hlock) | ||
128 | { | ||
129 | if (!hlock->class_idx) { | ||
130 | DEBUG_LOCKS_WARN_ON(1); | ||
131 | return NULL; | ||
132 | } | ||
133 | return lock_classes + hlock->class_idx - 1; | ||
134 | } | ||
135 | |||
127 | #ifdef CONFIG_LOCK_STAT | 136 | #ifdef CONFIG_LOCK_STAT |
128 | static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], lock_stats); | 137 | static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], lock_stats); |
129 | 138 | ||
@@ -222,7 +231,7 @@ static void lock_release_holdtime(struct held_lock *hlock) | |||
222 | 231 | ||
223 | holdtime = sched_clock() - hlock->holdtime_stamp; | 232 | holdtime = sched_clock() - hlock->holdtime_stamp; |
224 | 233 | ||
225 | stats = get_lock_stats(hlock->class); | 234 | stats = get_lock_stats(hlock_class(hlock)); |
226 | if (hlock->read) | 235 | if (hlock->read) |
227 | lock_time_inc(&stats->read_holdtime, holdtime); | 236 | lock_time_inc(&stats->read_holdtime, holdtime); |
228 | else | 237 | else |
@@ -372,6 +381,19 @@ unsigned int nr_process_chains; | |||
372 | unsigned int max_lockdep_depth; | 381 | unsigned int max_lockdep_depth; |
373 | unsigned int max_recursion_depth; | 382 | unsigned int max_recursion_depth; |
374 | 383 | ||
384 | static unsigned int lockdep_dependency_gen_id; | ||
385 | |||
386 | static bool lockdep_dependency_visit(struct lock_class *source, | ||
387 | unsigned int depth) | ||
388 | { | ||
389 | if (!depth) | ||
390 | lockdep_dependency_gen_id++; | ||
391 | if (source->dep_gen_id == lockdep_dependency_gen_id) | ||
392 | return true; | ||
393 | source->dep_gen_id = lockdep_dependency_gen_id; | ||
394 | return false; | ||
395 | } | ||
396 | |||
375 | #ifdef CONFIG_DEBUG_LOCKDEP | 397 | #ifdef CONFIG_DEBUG_LOCKDEP |
376 | /* | 398 | /* |
377 | * We cannot printk in early bootup code. Not even early_printk() | 399 | * We cannot printk in early bootup code. Not even early_printk() |
@@ -505,7 +527,7 @@ static void print_lockdep_cache(struct lockdep_map *lock) | |||
505 | 527 | ||
506 | static void print_lock(struct held_lock *hlock) | 528 | static void print_lock(struct held_lock *hlock) |
507 | { | 529 | { |
508 | print_lock_name(hlock->class); | 530 | print_lock_name(hlock_class(hlock)); |
509 | printk(", at: "); | 531 | printk(", at: "); |
510 | print_ip_sym(hlock->acquire_ip); | 532 | print_ip_sym(hlock->acquire_ip); |
511 | } | 533 | } |
@@ -558,6 +580,9 @@ static void print_lock_dependencies(struct lock_class *class, int depth) | |||
558 | { | 580 | { |
559 | struct lock_list *entry; | 581 | struct lock_list *entry; |
560 | 582 | ||
583 | if (lockdep_dependency_visit(class, depth)) | ||
584 | return; | ||
585 | |||
561 | if (DEBUG_LOCKS_WARN_ON(depth >= 20)) | 586 | if (DEBUG_LOCKS_WARN_ON(depth >= 20)) |
562 | return; | 587 | return; |
563 | 588 | ||
@@ -932,7 +957,7 @@ static noinline int print_circular_bug_tail(void) | |||
932 | if (debug_locks_silent) | 957 | if (debug_locks_silent) |
933 | return 0; | 958 | return 0; |
934 | 959 | ||
935 | this.class = check_source->class; | 960 | this.class = hlock_class(check_source); |
936 | if (!save_trace(&this.trace)) | 961 | if (!save_trace(&this.trace)) |
937 | return 0; | 962 | return 0; |
938 | 963 | ||
@@ -959,6 +984,67 @@ static int noinline print_infinite_recursion_bug(void) | |||
959 | return 0; | 984 | return 0; |
960 | } | 985 | } |
961 | 986 | ||
987 | unsigned long __lockdep_count_forward_deps(struct lock_class *class, | ||
988 | unsigned int depth) | ||
989 | { | ||
990 | struct lock_list *entry; | ||
991 | unsigned long ret = 1; | ||
992 | |||
993 | if (lockdep_dependency_visit(class, depth)) | ||
994 | return 0; | ||
995 | |||
996 | /* | ||
997 | * Recurse this class's dependency list: | ||
998 | */ | ||
999 | list_for_each_entry(entry, &class->locks_after, entry) | ||
1000 | ret += __lockdep_count_forward_deps(entry->class, depth + 1); | ||
1001 | |||
1002 | return ret; | ||
1003 | } | ||
1004 | |||
1005 | unsigned long lockdep_count_forward_deps(struct lock_class *class) | ||
1006 | { | ||
1007 | unsigned long ret, flags; | ||
1008 | |||
1009 | local_irq_save(flags); | ||
1010 | __raw_spin_lock(&lockdep_lock); | ||
1011 | ret = __lockdep_count_forward_deps(class, 0); | ||
1012 | __raw_spin_unlock(&lockdep_lock); | ||
1013 | local_irq_restore(flags); | ||
1014 | |||
1015 | return ret; | ||
1016 | } | ||
1017 | |||
1018 | unsigned long __lockdep_count_backward_deps(struct lock_class *class, | ||
1019 | unsigned int depth) | ||
1020 | { | ||
1021 | struct lock_list *entry; | ||
1022 | unsigned long ret = 1; | ||
1023 | |||
1024 | if (lockdep_dependency_visit(class, depth)) | ||
1025 | return 0; | ||
1026 | /* | ||
1027 | * Recurse this class's dependency list: | ||
1028 | */ | ||
1029 | list_for_each_entry(entry, &class->locks_before, entry) | ||
1030 | ret += __lockdep_count_backward_deps(entry->class, depth + 1); | ||
1031 | |||
1032 | return ret; | ||
1033 | } | ||
1034 | |||
1035 | unsigned long lockdep_count_backward_deps(struct lock_class *class) | ||
1036 | { | ||
1037 | unsigned long ret, flags; | ||
1038 | |||
1039 | local_irq_save(flags); | ||
1040 | __raw_spin_lock(&lockdep_lock); | ||
1041 | ret = __lockdep_count_backward_deps(class, 0); | ||
1042 | __raw_spin_unlock(&lockdep_lock); | ||
1043 | local_irq_restore(flags); | ||
1044 | |||
1045 | return ret; | ||
1046 | } | ||
1047 | |||
962 | /* | 1048 | /* |
963 | * Prove that the dependency graph starting at <entry> can not | 1049 | * Prove that the dependency graph starting at <entry> can not |
964 | * lead to <target>. Print an error and return 0 if it does. | 1050 | * lead to <target>. Print an error and return 0 if it does. |
@@ -968,6 +1054,9 @@ check_noncircular(struct lock_class *source, unsigned int depth) | |||
968 | { | 1054 | { |
969 | struct lock_list *entry; | 1055 | struct lock_list *entry; |
970 | 1056 | ||
1057 | if (lockdep_dependency_visit(source, depth)) | ||
1058 | return 1; | ||
1059 | |||
971 | debug_atomic_inc(&nr_cyclic_check_recursions); | 1060 | debug_atomic_inc(&nr_cyclic_check_recursions); |
972 | if (depth > max_recursion_depth) | 1061 | if (depth > max_recursion_depth) |
973 | max_recursion_depth = depth; | 1062 | max_recursion_depth = depth; |
@@ -977,7 +1066,7 @@ check_noncircular(struct lock_class *source, unsigned int depth) | |||
977 | * Check this lock's dependency list: | 1066 | * Check this lock's dependency list: |
978 | */ | 1067 | */ |
979 | list_for_each_entry(entry, &source->locks_after, entry) { | 1068 | list_for_each_entry(entry, &source->locks_after, entry) { |
980 | if (entry->class == check_target->class) | 1069 | if (entry->class == hlock_class(check_target)) |
981 | return print_circular_bug_header(entry, depth+1); | 1070 | return print_circular_bug_header(entry, depth+1); |
982 | debug_atomic_inc(&nr_cyclic_checks); | 1071 | debug_atomic_inc(&nr_cyclic_checks); |
983 | if (!check_noncircular(entry->class, depth+1)) | 1072 | if (!check_noncircular(entry->class, depth+1)) |
@@ -1011,6 +1100,9 @@ find_usage_forwards(struct lock_class *source, unsigned int depth) | |||
1011 | struct lock_list *entry; | 1100 | struct lock_list *entry; |
1012 | int ret; | 1101 | int ret; |
1013 | 1102 | ||
1103 | if (lockdep_dependency_visit(source, depth)) | ||
1104 | return 1; | ||
1105 | |||
1014 | if (depth > max_recursion_depth) | 1106 | if (depth > max_recursion_depth) |
1015 | max_recursion_depth = depth; | 1107 | max_recursion_depth = depth; |
1016 | if (depth >= RECURSION_LIMIT) | 1108 | if (depth >= RECURSION_LIMIT) |
@@ -1050,6 +1142,9 @@ find_usage_backwards(struct lock_class *source, unsigned int depth) | |||
1050 | struct lock_list *entry; | 1142 | struct lock_list *entry; |
1051 | int ret; | 1143 | int ret; |
1052 | 1144 | ||
1145 | if (lockdep_dependency_visit(source, depth)) | ||
1146 | return 1; | ||
1147 | |||
1053 | if (!__raw_spin_is_locked(&lockdep_lock)) | 1148 | if (!__raw_spin_is_locked(&lockdep_lock)) |
1054 | return DEBUG_LOCKS_WARN_ON(1); | 1149 | return DEBUG_LOCKS_WARN_ON(1); |
1055 | 1150 | ||
@@ -1064,6 +1159,11 @@ find_usage_backwards(struct lock_class *source, unsigned int depth) | |||
1064 | return 2; | 1159 | return 2; |
1065 | } | 1160 | } |
1066 | 1161 | ||
1162 | if (!source && debug_locks_off_graph_unlock()) { | ||
1163 | WARN_ON(1); | ||
1164 | return 0; | ||
1165 | } | ||
1166 | |||
1067 | /* | 1167 | /* |
1068 | * Check this lock's dependency list: | 1168 | * Check this lock's dependency list: |
1069 | */ | 1169 | */ |
@@ -1103,9 +1203,9 @@ print_bad_irq_dependency(struct task_struct *curr, | |||
1103 | printk("\nand this task is already holding:\n"); | 1203 | printk("\nand this task is already holding:\n"); |
1104 | print_lock(prev); | 1204 | print_lock(prev); |
1105 | printk("which would create a new lock dependency:\n"); | 1205 | printk("which would create a new lock dependency:\n"); |
1106 | print_lock_name(prev->class); | 1206 | print_lock_name(hlock_class(prev)); |
1107 | printk(" ->"); | 1207 | printk(" ->"); |
1108 | print_lock_name(next->class); | 1208 | print_lock_name(hlock_class(next)); |
1109 | printk("\n"); | 1209 | printk("\n"); |
1110 | 1210 | ||
1111 | printk("\nbut this new dependency connects a %s-irq-safe lock:\n", | 1211 | printk("\nbut this new dependency connects a %s-irq-safe lock:\n", |
@@ -1146,12 +1246,12 @@ check_usage(struct task_struct *curr, struct held_lock *prev, | |||
1146 | 1246 | ||
1147 | find_usage_bit = bit_backwards; | 1247 | find_usage_bit = bit_backwards; |
1148 | /* fills in <backwards_match> */ | 1248 | /* fills in <backwards_match> */ |
1149 | ret = find_usage_backwards(prev->class, 0); | 1249 | ret = find_usage_backwards(hlock_class(prev), 0); |
1150 | if (!ret || ret == 1) | 1250 | if (!ret || ret == 1) |
1151 | return ret; | 1251 | return ret; |
1152 | 1252 | ||
1153 | find_usage_bit = bit_forwards; | 1253 | find_usage_bit = bit_forwards; |
1154 | ret = find_usage_forwards(next->class, 0); | 1254 | ret = find_usage_forwards(hlock_class(next), 0); |
1155 | if (!ret || ret == 1) | 1255 | if (!ret || ret == 1) |
1156 | return ret; | 1256 | return ret; |
1157 | /* ret == 2 */ | 1257 | /* ret == 2 */ |
@@ -1272,18 +1372,32 @@ check_deadlock(struct task_struct *curr, struct held_lock *next, | |||
1272 | struct lockdep_map *next_instance, int read) | 1372 | struct lockdep_map *next_instance, int read) |
1273 | { | 1373 | { |
1274 | struct held_lock *prev; | 1374 | struct held_lock *prev; |
1375 | struct held_lock *nest = NULL; | ||
1275 | int i; | 1376 | int i; |
1276 | 1377 | ||
1277 | for (i = 0; i < curr->lockdep_depth; i++) { | 1378 | for (i = 0; i < curr->lockdep_depth; i++) { |
1278 | prev = curr->held_locks + i; | 1379 | prev = curr->held_locks + i; |
1279 | if (prev->class != next->class) | 1380 | |
1381 | if (prev->instance == next->nest_lock) | ||
1382 | nest = prev; | ||
1383 | |||
1384 | if (hlock_class(prev) != hlock_class(next)) | ||
1280 | continue; | 1385 | continue; |
1386 | |||
1281 | /* | 1387 | /* |
1282 | * Allow read-after-read recursion of the same | 1388 | * Allow read-after-read recursion of the same |
1283 | * lock class (i.e. read_lock(lock)+read_lock(lock)): | 1389 | * lock class (i.e. read_lock(lock)+read_lock(lock)): |
1284 | */ | 1390 | */ |
1285 | if ((read == 2) && prev->read) | 1391 | if ((read == 2) && prev->read) |
1286 | return 2; | 1392 | return 2; |
1393 | |||
1394 | /* | ||
1395 | * We're holding the nest_lock, which serializes this lock's | ||
1396 | * nesting behaviour. | ||
1397 | */ | ||
1398 | if (nest) | ||
1399 | return 2; | ||
1400 | |||
1287 | return print_deadlock_bug(curr, prev, next); | 1401 | return print_deadlock_bug(curr, prev, next); |
1288 | } | 1402 | } |
1289 | return 1; | 1403 | return 1; |
@@ -1329,7 +1443,7 @@ check_prev_add(struct task_struct *curr, struct held_lock *prev, | |||
1329 | */ | 1443 | */ |
1330 | check_source = next; | 1444 | check_source = next; |
1331 | check_target = prev; | 1445 | check_target = prev; |
1332 | if (!(check_noncircular(next->class, 0))) | 1446 | if (!(check_noncircular(hlock_class(next), 0))) |
1333 | return print_circular_bug_tail(); | 1447 | return print_circular_bug_tail(); |
1334 | 1448 | ||
1335 | if (!check_prev_add_irq(curr, prev, next)) | 1449 | if (!check_prev_add_irq(curr, prev, next)) |
@@ -1353,8 +1467,8 @@ check_prev_add(struct task_struct *curr, struct held_lock *prev, | |||
1353 | * chains - the second one will be new, but L1 already has | 1467 | * chains - the second one will be new, but L1 already has |
1354 | * L2 added to its dependency list, due to the first chain.) | 1468 | * L2 added to its dependency list, due to the first chain.) |
1355 | */ | 1469 | */ |
1356 | list_for_each_entry(entry, &prev->class->locks_after, entry) { | 1470 | list_for_each_entry(entry, &hlock_class(prev)->locks_after, entry) { |
1357 | if (entry->class == next->class) { | 1471 | if (entry->class == hlock_class(next)) { |
1358 | if (distance == 1) | 1472 | if (distance == 1) |
1359 | entry->distance = 1; | 1473 | entry->distance = 1; |
1360 | return 2; | 1474 | return 2; |
@@ -1365,26 +1479,28 @@ check_prev_add(struct task_struct *curr, struct held_lock *prev, | |||
1365 | * Ok, all validations passed, add the new lock | 1479 | * Ok, all validations passed, add the new lock |
1366 | * to the previous lock's dependency list: | 1480 | * to the previous lock's dependency list: |
1367 | */ | 1481 | */ |
1368 | ret = add_lock_to_list(prev->class, next->class, | 1482 | ret = add_lock_to_list(hlock_class(prev), hlock_class(next), |
1369 | &prev->class->locks_after, next->acquire_ip, distance); | 1483 | &hlock_class(prev)->locks_after, |
1484 | next->acquire_ip, distance); | ||
1370 | 1485 | ||
1371 | if (!ret) | 1486 | if (!ret) |
1372 | return 0; | 1487 | return 0; |
1373 | 1488 | ||
1374 | ret = add_lock_to_list(next->class, prev->class, | 1489 | ret = add_lock_to_list(hlock_class(next), hlock_class(prev), |
1375 | &next->class->locks_before, next->acquire_ip, distance); | 1490 | &hlock_class(next)->locks_before, |
1491 | next->acquire_ip, distance); | ||
1376 | if (!ret) | 1492 | if (!ret) |
1377 | return 0; | 1493 | return 0; |
1378 | 1494 | ||
1379 | /* | 1495 | /* |
1380 | * Debugging printouts: | 1496 | * Debugging printouts: |
1381 | */ | 1497 | */ |
1382 | if (verbose(prev->class) || verbose(next->class)) { | 1498 | if (verbose(hlock_class(prev)) || verbose(hlock_class(next))) { |
1383 | graph_unlock(); | 1499 | graph_unlock(); |
1384 | printk("\n new dependency: "); | 1500 | printk("\n new dependency: "); |
1385 | print_lock_name(prev->class); | 1501 | print_lock_name(hlock_class(prev)); |
1386 | printk(" => "); | 1502 | printk(" => "); |
1387 | print_lock_name(next->class); | 1503 | print_lock_name(hlock_class(next)); |
1388 | printk("\n"); | 1504 | printk("\n"); |
1389 | dump_stack(); | 1505 | dump_stack(); |
1390 | return graph_lock(); | 1506 | return graph_lock(); |
@@ -1481,7 +1597,7 @@ static inline int lookup_chain_cache(struct task_struct *curr, | |||
1481 | struct held_lock *hlock, | 1597 | struct held_lock *hlock, |
1482 | u64 chain_key) | 1598 | u64 chain_key) |
1483 | { | 1599 | { |
1484 | struct lock_class *class = hlock->class; | 1600 | struct lock_class *class = hlock_class(hlock); |
1485 | struct list_head *hash_head = chainhashentry(chain_key); | 1601 | struct list_head *hash_head = chainhashentry(chain_key); |
1486 | struct lock_chain *chain; | 1602 | struct lock_chain *chain; |
1487 | struct held_lock *hlock_curr, *hlock_next; | 1603 | struct held_lock *hlock_curr, *hlock_next; |
@@ -1554,7 +1670,7 @@ cache_hit: | |||
1554 | if (likely(cn + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS)) { | 1670 | if (likely(cn + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS)) { |
1555 | chain->base = cn; | 1671 | chain->base = cn; |
1556 | for (j = 0; j < chain->depth - 1; j++, i++) { | 1672 | for (j = 0; j < chain->depth - 1; j++, i++) { |
1557 | int lock_id = curr->held_locks[i].class - lock_classes; | 1673 | int lock_id = curr->held_locks[i].class_idx - 1; |
1558 | chain_hlocks[chain->base + j] = lock_id; | 1674 | chain_hlocks[chain->base + j] = lock_id; |
1559 | } | 1675 | } |
1560 | chain_hlocks[chain->base + j] = class - lock_classes; | 1676 | chain_hlocks[chain->base + j] = class - lock_classes; |
@@ -1650,7 +1766,7 @@ static void check_chain_key(struct task_struct *curr) | |||
1650 | WARN_ON(1); | 1766 | WARN_ON(1); |
1651 | return; | 1767 | return; |
1652 | } | 1768 | } |
1653 | id = hlock->class - lock_classes; | 1769 | id = hlock->class_idx - 1; |
1654 | if (DEBUG_LOCKS_WARN_ON(id >= MAX_LOCKDEP_KEYS)) | 1770 | if (DEBUG_LOCKS_WARN_ON(id >= MAX_LOCKDEP_KEYS)) |
1655 | return; | 1771 | return; |
1656 | 1772 | ||
@@ -1695,7 +1811,7 @@ print_usage_bug(struct task_struct *curr, struct held_lock *this, | |||
1695 | print_lock(this); | 1811 | print_lock(this); |
1696 | 1812 | ||
1697 | printk("{%s} state was registered at:\n", usage_str[prev_bit]); | 1813 | printk("{%s} state was registered at:\n", usage_str[prev_bit]); |
1698 | print_stack_trace(this->class->usage_traces + prev_bit, 1); | 1814 | print_stack_trace(hlock_class(this)->usage_traces + prev_bit, 1); |
1699 | 1815 | ||
1700 | print_irqtrace_events(curr); | 1816 | print_irqtrace_events(curr); |
1701 | printk("\nother info that might help us debug this:\n"); | 1817 | printk("\nother info that might help us debug this:\n"); |
@@ -1714,7 +1830,7 @@ static inline int | |||
1714 | valid_state(struct task_struct *curr, struct held_lock *this, | 1830 | valid_state(struct task_struct *curr, struct held_lock *this, |
1715 | enum lock_usage_bit new_bit, enum lock_usage_bit bad_bit) | 1831 | enum lock_usage_bit new_bit, enum lock_usage_bit bad_bit) |
1716 | { | 1832 | { |
1717 | if (unlikely(this->class->usage_mask & (1 << bad_bit))) | 1833 | if (unlikely(hlock_class(this)->usage_mask & (1 << bad_bit))) |
1718 | return print_usage_bug(curr, this, bad_bit, new_bit); | 1834 | return print_usage_bug(curr, this, bad_bit, new_bit); |
1719 | return 1; | 1835 | return 1; |
1720 | } | 1836 | } |
@@ -1753,7 +1869,7 @@ print_irq_inversion_bug(struct task_struct *curr, struct lock_class *other, | |||
1753 | lockdep_print_held_locks(curr); | 1869 | lockdep_print_held_locks(curr); |
1754 | 1870 | ||
1755 | printk("\nthe first lock's dependencies:\n"); | 1871 | printk("\nthe first lock's dependencies:\n"); |
1756 | print_lock_dependencies(this->class, 0); | 1872 | print_lock_dependencies(hlock_class(this), 0); |
1757 | 1873 | ||
1758 | printk("\nthe second lock's dependencies:\n"); | 1874 | printk("\nthe second lock's dependencies:\n"); |
1759 | print_lock_dependencies(other, 0); | 1875 | print_lock_dependencies(other, 0); |
@@ -1776,7 +1892,7 @@ check_usage_forwards(struct task_struct *curr, struct held_lock *this, | |||
1776 | 1892 | ||
1777 | find_usage_bit = bit; | 1893 | find_usage_bit = bit; |
1778 | /* fills in <forwards_match> */ | 1894 | /* fills in <forwards_match> */ |
1779 | ret = find_usage_forwards(this->class, 0); | 1895 | ret = find_usage_forwards(hlock_class(this), 0); |
1780 | if (!ret || ret == 1) | 1896 | if (!ret || ret == 1) |
1781 | return ret; | 1897 | return ret; |
1782 | 1898 | ||
@@ -1795,7 +1911,7 @@ check_usage_backwards(struct task_struct *curr, struct held_lock *this, | |||
1795 | 1911 | ||
1796 | find_usage_bit = bit; | 1912 | find_usage_bit = bit; |
1797 | /* fills in <backwards_match> */ | 1913 | /* fills in <backwards_match> */ |
1798 | ret = find_usage_backwards(this->class, 0); | 1914 | ret = find_usage_backwards(hlock_class(this), 0); |
1799 | if (!ret || ret == 1) | 1915 | if (!ret || ret == 1) |
1800 | return ret; | 1916 | return ret; |
1801 | 1917 | ||
@@ -1861,7 +1977,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | |||
1861 | LOCK_ENABLED_HARDIRQS_READ, "hard-read")) | 1977 | LOCK_ENABLED_HARDIRQS_READ, "hard-read")) |
1862 | return 0; | 1978 | return 0; |
1863 | #endif | 1979 | #endif |
1864 | if (hardirq_verbose(this->class)) | 1980 | if (hardirq_verbose(hlock_class(this))) |
1865 | ret = 2; | 1981 | ret = 2; |
1866 | break; | 1982 | break; |
1867 | case LOCK_USED_IN_SOFTIRQ: | 1983 | case LOCK_USED_IN_SOFTIRQ: |
@@ -1886,7 +2002,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | |||
1886 | LOCK_ENABLED_SOFTIRQS_READ, "soft-read")) | 2002 | LOCK_ENABLED_SOFTIRQS_READ, "soft-read")) |
1887 | return 0; | 2003 | return 0; |
1888 | #endif | 2004 | #endif |
1889 | if (softirq_verbose(this->class)) | 2005 | if (softirq_verbose(hlock_class(this))) |
1890 | ret = 2; | 2006 | ret = 2; |
1891 | break; | 2007 | break; |
1892 | case LOCK_USED_IN_HARDIRQ_READ: | 2008 | case LOCK_USED_IN_HARDIRQ_READ: |
@@ -1899,7 +2015,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | |||
1899 | if (!check_usage_forwards(curr, this, | 2015 | if (!check_usage_forwards(curr, this, |
1900 | LOCK_ENABLED_HARDIRQS, "hard")) | 2016 | LOCK_ENABLED_HARDIRQS, "hard")) |
1901 | return 0; | 2017 | return 0; |
1902 | if (hardirq_verbose(this->class)) | 2018 | if (hardirq_verbose(hlock_class(this))) |
1903 | ret = 2; | 2019 | ret = 2; |
1904 | break; | 2020 | break; |
1905 | case LOCK_USED_IN_SOFTIRQ_READ: | 2021 | case LOCK_USED_IN_SOFTIRQ_READ: |
@@ -1912,7 +2028,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | |||
1912 | if (!check_usage_forwards(curr, this, | 2028 | if (!check_usage_forwards(curr, this, |
1913 | LOCK_ENABLED_SOFTIRQS, "soft")) | 2029 | LOCK_ENABLED_SOFTIRQS, "soft")) |
1914 | return 0; | 2030 | return 0; |
1915 | if (softirq_verbose(this->class)) | 2031 | if (softirq_verbose(hlock_class(this))) |
1916 | ret = 2; | 2032 | ret = 2; |
1917 | break; | 2033 | break; |
1918 | case LOCK_ENABLED_HARDIRQS: | 2034 | case LOCK_ENABLED_HARDIRQS: |
@@ -1938,7 +2054,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | |||
1938 | LOCK_USED_IN_HARDIRQ_READ, "hard-read")) | 2054 | LOCK_USED_IN_HARDIRQ_READ, "hard-read")) |
1939 | return 0; | 2055 | return 0; |
1940 | #endif | 2056 | #endif |
1941 | if (hardirq_verbose(this->class)) | 2057 | if (hardirq_verbose(hlock_class(this))) |
1942 | ret = 2; | 2058 | ret = 2; |
1943 | break; | 2059 | break; |
1944 | case LOCK_ENABLED_SOFTIRQS: | 2060 | case LOCK_ENABLED_SOFTIRQS: |
@@ -1964,7 +2080,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | |||
1964 | LOCK_USED_IN_SOFTIRQ_READ, "soft-read")) | 2080 | LOCK_USED_IN_SOFTIRQ_READ, "soft-read")) |
1965 | return 0; | 2081 | return 0; |
1966 | #endif | 2082 | #endif |
1967 | if (softirq_verbose(this->class)) | 2083 | if (softirq_verbose(hlock_class(this))) |
1968 | ret = 2; | 2084 | ret = 2; |
1969 | break; | 2085 | break; |
1970 | case LOCK_ENABLED_HARDIRQS_READ: | 2086 | case LOCK_ENABLED_HARDIRQS_READ: |
@@ -1979,7 +2095,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | |||
1979 | LOCK_USED_IN_HARDIRQ, "hard")) | 2095 | LOCK_USED_IN_HARDIRQ, "hard")) |
1980 | return 0; | 2096 | return 0; |
1981 | #endif | 2097 | #endif |
1982 | if (hardirq_verbose(this->class)) | 2098 | if (hardirq_verbose(hlock_class(this))) |
1983 | ret = 2; | 2099 | ret = 2; |
1984 | break; | 2100 | break; |
1985 | case LOCK_ENABLED_SOFTIRQS_READ: | 2101 | case LOCK_ENABLED_SOFTIRQS_READ: |
@@ -1994,7 +2110,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | |||
1994 | LOCK_USED_IN_SOFTIRQ, "soft")) | 2110 | LOCK_USED_IN_SOFTIRQ, "soft")) |
1995 | return 0; | 2111 | return 0; |
1996 | #endif | 2112 | #endif |
1997 | if (softirq_verbose(this->class)) | 2113 | if (softirq_verbose(hlock_class(this))) |
1998 | ret = 2; | 2114 | ret = 2; |
1999 | break; | 2115 | break; |
2000 | default: | 2116 | default: |
@@ -2310,7 +2426,7 @@ static int mark_lock(struct task_struct *curr, struct held_lock *this, | |||
2310 | * If already set then do not dirty the cacheline, | 2426 | * If already set then do not dirty the cacheline, |
2311 | * nor do any checks: | 2427 | * nor do any checks: |
2312 | */ | 2428 | */ |
2313 | if (likely(this->class->usage_mask & new_mask)) | 2429 | if (likely(hlock_class(this)->usage_mask & new_mask)) |
2314 | return 1; | 2430 | return 1; |
2315 | 2431 | ||
2316 | if (!graph_lock()) | 2432 | if (!graph_lock()) |
@@ -2318,14 +2434,14 @@ static int mark_lock(struct task_struct *curr, struct held_lock *this, | |||
2318 | /* | 2434 | /* |
2319 | * Make sure we didnt race: | 2435 | * Make sure we didnt race: |
2320 | */ | 2436 | */ |
2321 | if (unlikely(this->class->usage_mask & new_mask)) { | 2437 | if (unlikely(hlock_class(this)->usage_mask & new_mask)) { |
2322 | graph_unlock(); | 2438 | graph_unlock(); |
2323 | return 1; | 2439 | return 1; |
2324 | } | 2440 | } |
2325 | 2441 | ||
2326 | this->class->usage_mask |= new_mask; | 2442 | hlock_class(this)->usage_mask |= new_mask; |
2327 | 2443 | ||
2328 | if (!save_trace(this->class->usage_traces + new_bit)) | 2444 | if (!save_trace(hlock_class(this)->usage_traces + new_bit)) |
2329 | return 0; | 2445 | return 0; |
2330 | 2446 | ||
2331 | switch (new_bit) { | 2447 | switch (new_bit) { |
@@ -2405,7 +2521,7 @@ EXPORT_SYMBOL_GPL(lockdep_init_map); | |||
2405 | */ | 2521 | */ |
2406 | static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, | 2522 | static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, |
2407 | int trylock, int read, int check, int hardirqs_off, | 2523 | int trylock, int read, int check, int hardirqs_off, |
2408 | unsigned long ip) | 2524 | struct lockdep_map *nest_lock, unsigned long ip) |
2409 | { | 2525 | { |
2410 | struct task_struct *curr = current; | 2526 | struct task_struct *curr = current; |
2411 | struct lock_class *class = NULL; | 2527 | struct lock_class *class = NULL; |
@@ -2459,10 +2575,12 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
2459 | return 0; | 2575 | return 0; |
2460 | 2576 | ||
2461 | hlock = curr->held_locks + depth; | 2577 | hlock = curr->held_locks + depth; |
2462 | 2578 | if (DEBUG_LOCKS_WARN_ON(!class)) | |
2463 | hlock->class = class; | 2579 | return 0; |
2580 | hlock->class_idx = class - lock_classes + 1; | ||
2464 | hlock->acquire_ip = ip; | 2581 | hlock->acquire_ip = ip; |
2465 | hlock->instance = lock; | 2582 | hlock->instance = lock; |
2583 | hlock->nest_lock = nest_lock; | ||
2466 | hlock->trylock = trylock; | 2584 | hlock->trylock = trylock; |
2467 | hlock->read = read; | 2585 | hlock->read = read; |
2468 | hlock->check = check; | 2586 | hlock->check = check; |
@@ -2574,6 +2692,55 @@ static int check_unlock(struct task_struct *curr, struct lockdep_map *lock, | |||
2574 | return 1; | 2692 | return 1; |
2575 | } | 2693 | } |
2576 | 2694 | ||
2695 | static int | ||
2696 | __lock_set_subclass(struct lockdep_map *lock, | ||
2697 | unsigned int subclass, unsigned long ip) | ||
2698 | { | ||
2699 | struct task_struct *curr = current; | ||
2700 | struct held_lock *hlock, *prev_hlock; | ||
2701 | struct lock_class *class; | ||
2702 | unsigned int depth; | ||
2703 | int i; | ||
2704 | |||
2705 | depth = curr->lockdep_depth; | ||
2706 | if (DEBUG_LOCKS_WARN_ON(!depth)) | ||
2707 | return 0; | ||
2708 | |||
2709 | prev_hlock = NULL; | ||
2710 | for (i = depth-1; i >= 0; i--) { | ||
2711 | hlock = curr->held_locks + i; | ||
2712 | /* | ||
2713 | * We must not cross into another context: | ||
2714 | */ | ||
2715 | if (prev_hlock && prev_hlock->irq_context != hlock->irq_context) | ||
2716 | break; | ||
2717 | if (hlock->instance == lock) | ||
2718 | goto found_it; | ||
2719 | prev_hlock = hlock; | ||
2720 | } | ||
2721 | return print_unlock_inbalance_bug(curr, lock, ip); | ||
2722 | |||
2723 | found_it: | ||
2724 | class = register_lock_class(lock, subclass, 0); | ||
2725 | hlock->class_idx = class - lock_classes + 1; | ||
2726 | |||
2727 | curr->lockdep_depth = i; | ||
2728 | curr->curr_chain_key = hlock->prev_chain_key; | ||
2729 | |||
2730 | for (; i < depth; i++) { | ||
2731 | hlock = curr->held_locks + i; | ||
2732 | if (!__lock_acquire(hlock->instance, | ||
2733 | hlock_class(hlock)->subclass, hlock->trylock, | ||
2734 | hlock->read, hlock->check, hlock->hardirqs_off, | ||
2735 | hlock->nest_lock, hlock->acquire_ip)) | ||
2736 | return 0; | ||
2737 | } | ||
2738 | |||
2739 | if (DEBUG_LOCKS_WARN_ON(curr->lockdep_depth != depth)) | ||
2740 | return 0; | ||
2741 | return 1; | ||
2742 | } | ||
2743 | |||
2577 | /* | 2744 | /* |
2578 | * Remove the lock to the list of currently held locks in a | 2745 | * Remove the lock to the list of currently held locks in a |
2579 | * potentially non-nested (out of order) manner. This is a | 2746 | * potentially non-nested (out of order) manner. This is a |
@@ -2624,9 +2791,9 @@ found_it: | |||
2624 | for (i++; i < depth; i++) { | 2791 | for (i++; i < depth; i++) { |
2625 | hlock = curr->held_locks + i; | 2792 | hlock = curr->held_locks + i; |
2626 | if (!__lock_acquire(hlock->instance, | 2793 | if (!__lock_acquire(hlock->instance, |
2627 | hlock->class->subclass, hlock->trylock, | 2794 | hlock_class(hlock)->subclass, hlock->trylock, |
2628 | hlock->read, hlock->check, hlock->hardirqs_off, | 2795 | hlock->read, hlock->check, hlock->hardirqs_off, |
2629 | hlock->acquire_ip)) | 2796 | hlock->nest_lock, hlock->acquire_ip)) |
2630 | return 0; | 2797 | return 0; |
2631 | } | 2798 | } |
2632 | 2799 | ||
@@ -2669,7 +2836,7 @@ static int lock_release_nested(struct task_struct *curr, | |||
2669 | 2836 | ||
2670 | #ifdef CONFIG_DEBUG_LOCKDEP | 2837 | #ifdef CONFIG_DEBUG_LOCKDEP |
2671 | hlock->prev_chain_key = 0; | 2838 | hlock->prev_chain_key = 0; |
2672 | hlock->class = NULL; | 2839 | hlock->class_idx = 0; |
2673 | hlock->acquire_ip = 0; | 2840 | hlock->acquire_ip = 0; |
2674 | hlock->irq_context = 0; | 2841 | hlock->irq_context = 0; |
2675 | #endif | 2842 | #endif |
@@ -2738,18 +2905,36 @@ static void check_flags(unsigned long flags) | |||
2738 | #endif | 2905 | #endif |
2739 | } | 2906 | } |
2740 | 2907 | ||
2908 | void | ||
2909 | lock_set_subclass(struct lockdep_map *lock, | ||
2910 | unsigned int subclass, unsigned long ip) | ||
2911 | { | ||
2912 | unsigned long flags; | ||
2913 | |||
2914 | if (unlikely(current->lockdep_recursion)) | ||
2915 | return; | ||
2916 | |||
2917 | raw_local_irq_save(flags); | ||
2918 | current->lockdep_recursion = 1; | ||
2919 | check_flags(flags); | ||
2920 | if (__lock_set_subclass(lock, subclass, ip)) | ||
2921 | check_chain_key(current); | ||
2922 | current->lockdep_recursion = 0; | ||
2923 | raw_local_irq_restore(flags); | ||
2924 | } | ||
2925 | |||
2926 | EXPORT_SYMBOL_GPL(lock_set_subclass); | ||
2927 | |||
2741 | /* | 2928 | /* |
2742 | * We are not always called with irqs disabled - do that here, | 2929 | * We are not always called with irqs disabled - do that here, |
2743 | * and also avoid lockdep recursion: | 2930 | * and also avoid lockdep recursion: |
2744 | */ | 2931 | */ |
2745 | void lock_acquire(struct lockdep_map *lock, unsigned int subclass, | 2932 | void lock_acquire(struct lockdep_map *lock, unsigned int subclass, |
2746 | int trylock, int read, int check, unsigned long ip) | 2933 | int trylock, int read, int check, |
2934 | struct lockdep_map *nest_lock, unsigned long ip) | ||
2747 | { | 2935 | { |
2748 | unsigned long flags; | 2936 | unsigned long flags; |
2749 | 2937 | ||
2750 | if (unlikely(!lock_stat && !prove_locking)) | ||
2751 | return; | ||
2752 | |||
2753 | if (unlikely(current->lockdep_recursion)) | 2938 | if (unlikely(current->lockdep_recursion)) |
2754 | return; | 2939 | return; |
2755 | 2940 | ||
@@ -2758,7 +2943,7 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
2758 | 2943 | ||
2759 | current->lockdep_recursion = 1; | 2944 | current->lockdep_recursion = 1; |
2760 | __lock_acquire(lock, subclass, trylock, read, check, | 2945 | __lock_acquire(lock, subclass, trylock, read, check, |
2761 | irqs_disabled_flags(flags), ip); | 2946 | irqs_disabled_flags(flags), nest_lock, ip); |
2762 | current->lockdep_recursion = 0; | 2947 | current->lockdep_recursion = 0; |
2763 | raw_local_irq_restore(flags); | 2948 | raw_local_irq_restore(flags); |
2764 | } | 2949 | } |
@@ -2770,9 +2955,6 @@ void lock_release(struct lockdep_map *lock, int nested, | |||
2770 | { | 2955 | { |
2771 | unsigned long flags; | 2956 | unsigned long flags; |
2772 | 2957 | ||
2773 | if (unlikely(!lock_stat && !prove_locking)) | ||
2774 | return; | ||
2775 | |||
2776 | if (unlikely(current->lockdep_recursion)) | 2958 | if (unlikely(current->lockdep_recursion)) |
2777 | return; | 2959 | return; |
2778 | 2960 | ||
@@ -2845,9 +3027,9 @@ __lock_contended(struct lockdep_map *lock, unsigned long ip) | |||
2845 | found_it: | 3027 | found_it: |
2846 | hlock->waittime_stamp = sched_clock(); | 3028 | hlock->waittime_stamp = sched_clock(); |
2847 | 3029 | ||
2848 | point = lock_contention_point(hlock->class, ip); | 3030 | point = lock_contention_point(hlock_class(hlock), ip); |
2849 | 3031 | ||
2850 | stats = get_lock_stats(hlock->class); | 3032 | stats = get_lock_stats(hlock_class(hlock)); |
2851 | if (point < ARRAY_SIZE(stats->contention_point)) | 3033 | if (point < ARRAY_SIZE(stats->contention_point)) |
2852 | stats->contention_point[i]++; | 3034 | stats->contention_point[i]++; |
2853 | if (lock->cpu != smp_processor_id()) | 3035 | if (lock->cpu != smp_processor_id()) |
@@ -2893,7 +3075,7 @@ found_it: | |||
2893 | hlock->holdtime_stamp = now; | 3075 | hlock->holdtime_stamp = now; |
2894 | } | 3076 | } |
2895 | 3077 | ||
2896 | stats = get_lock_stats(hlock->class); | 3078 | stats = get_lock_stats(hlock_class(hlock)); |
2897 | if (waittime) { | 3079 | if (waittime) { |
2898 | if (hlock->read) | 3080 | if (hlock->read) |
2899 | lock_time_inc(&stats->read_waittime, waittime); | 3081 | lock_time_inc(&stats->read_waittime, waittime); |
@@ -2988,6 +3170,7 @@ static void zap_class(struct lock_class *class) | |||
2988 | list_del_rcu(&class->hash_entry); | 3170 | list_del_rcu(&class->hash_entry); |
2989 | list_del_rcu(&class->lock_entry); | 3171 | list_del_rcu(&class->lock_entry); |
2990 | 3172 | ||
3173 | class->key = NULL; | ||
2991 | } | 3174 | } |
2992 | 3175 | ||
2993 | static inline int within(const void *addr, void *start, unsigned long size) | 3176 | static inline int within(const void *addr, void *start, unsigned long size) |
diff --git a/kernel/lockdep_internals.h b/kernel/lockdep_internals.h index c3600a091a28..55db193d366d 100644 --- a/kernel/lockdep_internals.h +++ b/kernel/lockdep_internals.h | |||
@@ -17,9 +17,6 @@ | |||
17 | */ | 17 | */ |
18 | #define MAX_LOCKDEP_ENTRIES 8192UL | 18 | #define MAX_LOCKDEP_ENTRIES 8192UL |
19 | 19 | ||
20 | #define MAX_LOCKDEP_KEYS_BITS 11 | ||
21 | #define MAX_LOCKDEP_KEYS (1UL << MAX_LOCKDEP_KEYS_BITS) | ||
22 | |||
23 | #define MAX_LOCKDEP_CHAINS_BITS 14 | 20 | #define MAX_LOCKDEP_CHAINS_BITS 14 |
24 | #define MAX_LOCKDEP_CHAINS (1UL << MAX_LOCKDEP_CHAINS_BITS) | 21 | #define MAX_LOCKDEP_CHAINS (1UL << MAX_LOCKDEP_CHAINS_BITS) |
25 | 22 | ||
@@ -53,6 +50,9 @@ extern unsigned int nr_process_chains; | |||
53 | extern unsigned int max_lockdep_depth; | 50 | extern unsigned int max_lockdep_depth; |
54 | extern unsigned int max_recursion_depth; | 51 | extern unsigned int max_recursion_depth; |
55 | 52 | ||
53 | extern unsigned long lockdep_count_forward_deps(struct lock_class *); | ||
54 | extern unsigned long lockdep_count_backward_deps(struct lock_class *); | ||
55 | |||
56 | #ifdef CONFIG_DEBUG_LOCKDEP | 56 | #ifdef CONFIG_DEBUG_LOCKDEP |
57 | /* | 57 | /* |
58 | * Various lockdep statistics: | 58 | * Various lockdep statistics: |
diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c index 9b0e940e2545..fa19aee604c2 100644 --- a/kernel/lockdep_proc.c +++ b/kernel/lockdep_proc.c | |||
@@ -63,34 +63,6 @@ static void l_stop(struct seq_file *m, void *v) | |||
63 | { | 63 | { |
64 | } | 64 | } |
65 | 65 | ||
66 | static unsigned long count_forward_deps(struct lock_class *class) | ||
67 | { | ||
68 | struct lock_list *entry; | ||
69 | unsigned long ret = 1; | ||
70 | |||
71 | /* | ||
72 | * Recurse this class's dependency list: | ||
73 | */ | ||
74 | list_for_each_entry(entry, &class->locks_after, entry) | ||
75 | ret += count_forward_deps(entry->class); | ||
76 | |||
77 | return ret; | ||
78 | } | ||
79 | |||
80 | static unsigned long count_backward_deps(struct lock_class *class) | ||
81 | { | ||
82 | struct lock_list *entry; | ||
83 | unsigned long ret = 1; | ||
84 | |||
85 | /* | ||
86 | * Recurse this class's dependency list: | ||
87 | */ | ||
88 | list_for_each_entry(entry, &class->locks_before, entry) | ||
89 | ret += count_backward_deps(entry->class); | ||
90 | |||
91 | return ret; | ||
92 | } | ||
93 | |||
94 | static void print_name(struct seq_file *m, struct lock_class *class) | 66 | static void print_name(struct seq_file *m, struct lock_class *class) |
95 | { | 67 | { |
96 | char str[128]; | 68 | char str[128]; |
@@ -124,10 +96,10 @@ static int l_show(struct seq_file *m, void *v) | |||
124 | #ifdef CONFIG_DEBUG_LOCKDEP | 96 | #ifdef CONFIG_DEBUG_LOCKDEP |
125 | seq_printf(m, " OPS:%8ld", class->ops); | 97 | seq_printf(m, " OPS:%8ld", class->ops); |
126 | #endif | 98 | #endif |
127 | nr_forward_deps = count_forward_deps(class); | 99 | nr_forward_deps = lockdep_count_forward_deps(class); |
128 | seq_printf(m, " FD:%5ld", nr_forward_deps); | 100 | seq_printf(m, " FD:%5ld", nr_forward_deps); |
129 | 101 | ||
130 | nr_backward_deps = count_backward_deps(class); | 102 | nr_backward_deps = lockdep_count_backward_deps(class); |
131 | seq_printf(m, " BD:%5ld", nr_backward_deps); | 103 | seq_printf(m, " BD:%5ld", nr_backward_deps); |
132 | 104 | ||
133 | get_usage_chars(class, &c1, &c2, &c3, &c4); | 105 | get_usage_chars(class, &c1, &c2, &c3, &c4); |
@@ -229,6 +201,9 @@ static int lc_show(struct seq_file *m, void *v) | |||
229 | 201 | ||
230 | for (i = 0; i < chain->depth; i++) { | 202 | for (i = 0; i < chain->depth; i++) { |
231 | class = lock_chain_get_class(chain, i); | 203 | class = lock_chain_get_class(chain, i); |
204 | if (!class->key) | ||
205 | continue; | ||
206 | |||
232 | seq_printf(m, "[%p] ", class->key); | 207 | seq_printf(m, "[%p] ", class->key); |
233 | print_name(m, class); | 208 | print_name(m, class); |
234 | seq_puts(m, "\n"); | 209 | seq_puts(m, "\n"); |
@@ -350,7 +325,7 @@ static int lockdep_stats_show(struct seq_file *m, void *v) | |||
350 | if (class->usage_mask & LOCKF_ENABLED_HARDIRQS_READ) | 325 | if (class->usage_mask & LOCKF_ENABLED_HARDIRQS_READ) |
351 | nr_hardirq_read_unsafe++; | 326 | nr_hardirq_read_unsafe++; |
352 | 327 | ||
353 | sum_forward_deps += count_forward_deps(class); | 328 | sum_forward_deps += lockdep_count_forward_deps(class); |
354 | } | 329 | } |
355 | #ifdef CONFIG_DEBUG_LOCKDEP | 330 | #ifdef CONFIG_DEBUG_LOCKDEP |
356 | DEBUG_LOCKS_WARN_ON(debug_atomic_read(&nr_unused_locks) != nr_unused); | 331 | DEBUG_LOCKS_WARN_ON(debug_atomic_read(&nr_unused_locks) != nr_unused); |
diff --git a/kernel/module.c b/kernel/module.c index 61d212120df4..08864d257eb0 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -2288,7 +2288,7 @@ sys_init_module(void __user *umod, | |||
2288 | 2288 | ||
2289 | /* Start the module */ | 2289 | /* Start the module */ |
2290 | if (mod->init != NULL) | 2290 | if (mod->init != NULL) |
2291 | ret = mod->init(); | 2291 | ret = do_one_initcall(mod->init); |
2292 | if (ret < 0) { | 2292 | if (ret < 0) { |
2293 | /* Init routine failed: abort. Try to protect us from | 2293 | /* Init routine failed: abort. Try to protect us from |
2294 | buggy refcounters. */ | 2294 | buggy refcounters. */ |
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index 9a21681aa80f..e36d5798cbff 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c | |||
@@ -289,21 +289,29 @@ void do_schedule_next_timer(struct siginfo *info) | |||
289 | else | 289 | else |
290 | schedule_next_timer(timr); | 290 | schedule_next_timer(timr); |
291 | 291 | ||
292 | info->si_overrun = timr->it_overrun_last; | 292 | info->si_overrun += timr->it_overrun_last; |
293 | } | 293 | } |
294 | 294 | ||
295 | if (timr) | 295 | if (timr) |
296 | unlock_timer(timr, flags); | 296 | unlock_timer(timr, flags); |
297 | } | 297 | } |
298 | 298 | ||
299 | int posix_timer_event(struct k_itimer *timr,int si_private) | 299 | int posix_timer_event(struct k_itimer *timr, int si_private) |
300 | { | 300 | { |
301 | memset(&timr->sigq->info, 0, sizeof(siginfo_t)); | 301 | /* |
302 | * FIXME: if ->sigq is queued we can race with | ||
303 | * dequeue_signal()->do_schedule_next_timer(). | ||
304 | * | ||
305 | * If dequeue_signal() sees the "right" value of | ||
306 | * si_sys_private it calls do_schedule_next_timer(). | ||
307 | * We re-queue ->sigq and drop ->it_lock(). | ||
308 | * do_schedule_next_timer() locks the timer | ||
309 | * and re-schedules it while ->sigq is pending. | ||
310 | * Not really bad, but not that we want. | ||
311 | */ | ||
302 | timr->sigq->info.si_sys_private = si_private; | 312 | timr->sigq->info.si_sys_private = si_private; |
303 | /* Send signal to the process that owns this timer.*/ | ||
304 | 313 | ||
305 | timr->sigq->info.si_signo = timr->it_sigev_signo; | 314 | timr->sigq->info.si_signo = timr->it_sigev_signo; |
306 | timr->sigq->info.si_errno = 0; | ||
307 | timr->sigq->info.si_code = SI_TIMER; | 315 | timr->sigq->info.si_code = SI_TIMER; |
308 | timr->sigq->info.si_tid = timr->it_id; | 316 | timr->sigq->info.si_tid = timr->it_id; |
309 | timr->sigq->info.si_value = timr->it_sigev_value; | 317 | timr->sigq->info.si_value = timr->it_sigev_value; |
@@ -435,6 +443,7 @@ static struct k_itimer * alloc_posix_timer(void) | |||
435 | kmem_cache_free(posix_timers_cache, tmr); | 443 | kmem_cache_free(posix_timers_cache, tmr); |
436 | tmr = NULL; | 444 | tmr = NULL; |
437 | } | 445 | } |
446 | memset(&tmr->sigq->info, 0, sizeof(siginfo_t)); | ||
438 | return tmr; | 447 | return tmr; |
439 | } | 448 | } |
440 | 449 | ||
diff --git a/kernel/sched.c b/kernel/sched.c index 04160d277e7a..d601fb0406ca 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -600,7 +600,6 @@ struct rq { | |||
600 | /* BKL stats */ | 600 | /* BKL stats */ |
601 | unsigned int bkl_count; | 601 | unsigned int bkl_count; |
602 | #endif | 602 | #endif |
603 | struct lock_class_key rq_lock_key; | ||
604 | }; | 603 | }; |
605 | 604 | ||
606 | static DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); | 605 | static DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); |
@@ -834,7 +833,7 @@ static inline u64 global_rt_period(void) | |||
834 | 833 | ||
835 | static inline u64 global_rt_runtime(void) | 834 | static inline u64 global_rt_runtime(void) |
836 | { | 835 | { |
837 | if (sysctl_sched_rt_period < 0) | 836 | if (sysctl_sched_rt_runtime < 0) |
838 | return RUNTIME_INF; | 837 | return RUNTIME_INF; |
839 | 838 | ||
840 | return (u64)sysctl_sched_rt_runtime * NSEC_PER_USEC; | 839 | return (u64)sysctl_sched_rt_runtime * NSEC_PER_USEC; |
@@ -2759,10 +2758,10 @@ static void double_rq_lock(struct rq *rq1, struct rq *rq2) | |||
2759 | } else { | 2758 | } else { |
2760 | if (rq1 < rq2) { | 2759 | if (rq1 < rq2) { |
2761 | spin_lock(&rq1->lock); | 2760 | spin_lock(&rq1->lock); |
2762 | spin_lock(&rq2->lock); | 2761 | spin_lock_nested(&rq2->lock, SINGLE_DEPTH_NESTING); |
2763 | } else { | 2762 | } else { |
2764 | spin_lock(&rq2->lock); | 2763 | spin_lock(&rq2->lock); |
2765 | spin_lock(&rq1->lock); | 2764 | spin_lock_nested(&rq1->lock, SINGLE_DEPTH_NESTING); |
2766 | } | 2765 | } |
2767 | } | 2766 | } |
2768 | update_rq_clock(rq1); | 2767 | update_rq_clock(rq1); |
@@ -2805,14 +2804,21 @@ static int double_lock_balance(struct rq *this_rq, struct rq *busiest) | |||
2805 | if (busiest < this_rq) { | 2804 | if (busiest < this_rq) { |
2806 | spin_unlock(&this_rq->lock); | 2805 | spin_unlock(&this_rq->lock); |
2807 | spin_lock(&busiest->lock); | 2806 | spin_lock(&busiest->lock); |
2808 | spin_lock(&this_rq->lock); | 2807 | spin_lock_nested(&this_rq->lock, SINGLE_DEPTH_NESTING); |
2809 | ret = 1; | 2808 | ret = 1; |
2810 | } else | 2809 | } else |
2811 | spin_lock(&busiest->lock); | 2810 | spin_lock_nested(&busiest->lock, SINGLE_DEPTH_NESTING); |
2812 | } | 2811 | } |
2813 | return ret; | 2812 | return ret; |
2814 | } | 2813 | } |
2815 | 2814 | ||
2815 | static void double_unlock_balance(struct rq *this_rq, struct rq *busiest) | ||
2816 | __releases(busiest->lock) | ||
2817 | { | ||
2818 | spin_unlock(&busiest->lock); | ||
2819 | lock_set_subclass(&this_rq->lock.dep_map, 0, _RET_IP_); | ||
2820 | } | ||
2821 | |||
2816 | /* | 2822 | /* |
2817 | * If dest_cpu is allowed for this process, migrate the task to it. | 2823 | * If dest_cpu is allowed for this process, migrate the task to it. |
2818 | * This is accomplished by forcing the cpu_allowed mask to only | 2824 | * This is accomplished by forcing the cpu_allowed mask to only |
@@ -3637,7 +3643,7 @@ redo: | |||
3637 | ld_moved = move_tasks(this_rq, this_cpu, busiest, | 3643 | ld_moved = move_tasks(this_rq, this_cpu, busiest, |
3638 | imbalance, sd, CPU_NEWLY_IDLE, | 3644 | imbalance, sd, CPU_NEWLY_IDLE, |
3639 | &all_pinned); | 3645 | &all_pinned); |
3640 | spin_unlock(&busiest->lock); | 3646 | double_unlock_balance(this_rq, busiest); |
3641 | 3647 | ||
3642 | if (unlikely(all_pinned)) { | 3648 | if (unlikely(all_pinned)) { |
3643 | cpu_clear(cpu_of(busiest), *cpus); | 3649 | cpu_clear(cpu_of(busiest), *cpus); |
@@ -3752,7 +3758,7 @@ static void active_load_balance(struct rq *busiest_rq, int busiest_cpu) | |||
3752 | else | 3758 | else |
3753 | schedstat_inc(sd, alb_failed); | 3759 | schedstat_inc(sd, alb_failed); |
3754 | } | 3760 | } |
3755 | spin_unlock(&target_rq->lock); | 3761 | double_unlock_balance(busiest_rq, target_rq); |
3756 | } | 3762 | } |
3757 | 3763 | ||
3758 | #ifdef CONFIG_NO_HZ | 3764 | #ifdef CONFIG_NO_HZ |
@@ -8000,7 +8006,6 @@ void __init sched_init(void) | |||
8000 | 8006 | ||
8001 | rq = cpu_rq(i); | 8007 | rq = cpu_rq(i); |
8002 | spin_lock_init(&rq->lock); | 8008 | spin_lock_init(&rq->lock); |
8003 | lockdep_set_class(&rq->lock, &rq->rq_lock_key); | ||
8004 | rq->nr_running = 0; | 8009 | rq->nr_running = 0; |
8005 | init_cfs_rq(&rq->cfs, rq); | 8010 | init_cfs_rq(&rq->cfs, rq); |
8006 | init_rt_rq(&rq->rt, rq); | 8011 | init_rt_rq(&rq->rt, rq); |
diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c index 22ed55d1167f..204991a0bfa7 100644 --- a/kernel/sched_clock.c +++ b/kernel/sched_clock.c | |||
@@ -32,13 +32,19 @@ | |||
32 | #include <linux/ktime.h> | 32 | #include <linux/ktime.h> |
33 | #include <linux/module.h> | 33 | #include <linux/module.h> |
34 | 34 | ||
35 | /* | ||
36 | * Scheduler clock - returns current time in nanosec units. | ||
37 | * This is default implementation. | ||
38 | * Architectures and sub-architectures can override this. | ||
39 | */ | ||
40 | unsigned long long __attribute__((weak)) sched_clock(void) | ||
41 | { | ||
42 | return (unsigned long long)jiffies * (NSEC_PER_SEC / HZ); | ||
43 | } | ||
35 | 44 | ||
36 | #ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK | 45 | static __read_mostly int sched_clock_running; |
37 | 46 | ||
38 | #define MULTI_SHIFT 15 | 47 | #ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK |
39 | /* Max is double, Min is 1/2 */ | ||
40 | #define MAX_MULTI (2LL << MULTI_SHIFT) | ||
41 | #define MIN_MULTI (1LL << (MULTI_SHIFT-1)) | ||
42 | 48 | ||
43 | struct sched_clock_data { | 49 | struct sched_clock_data { |
44 | /* | 50 | /* |
@@ -49,14 +55,9 @@ struct sched_clock_data { | |||
49 | raw_spinlock_t lock; | 55 | raw_spinlock_t lock; |
50 | 56 | ||
51 | unsigned long tick_jiffies; | 57 | unsigned long tick_jiffies; |
52 | u64 prev_raw; | ||
53 | u64 tick_raw; | 58 | u64 tick_raw; |
54 | u64 tick_gtod; | 59 | u64 tick_gtod; |
55 | u64 clock; | 60 | u64 clock; |
56 | s64 multi; | ||
57 | #ifdef CONFIG_NO_HZ | ||
58 | int check_max; | ||
59 | #endif | ||
60 | }; | 61 | }; |
61 | 62 | ||
62 | static DEFINE_PER_CPU_SHARED_ALIGNED(struct sched_clock_data, sched_clock_data); | 63 | static DEFINE_PER_CPU_SHARED_ALIGNED(struct sched_clock_data, sched_clock_data); |
@@ -71,8 +72,6 @@ static inline struct sched_clock_data *cpu_sdc(int cpu) | |||
71 | return &per_cpu(sched_clock_data, cpu); | 72 | return &per_cpu(sched_clock_data, cpu); |
72 | } | 73 | } |
73 | 74 | ||
74 | static __read_mostly int sched_clock_running; | ||
75 | |||
76 | void sched_clock_init(void) | 75 | void sched_clock_init(void) |
77 | { | 76 | { |
78 | u64 ktime_now = ktime_to_ns(ktime_get()); | 77 | u64 ktime_now = ktime_to_ns(ktime_get()); |
@@ -84,90 +83,39 @@ void sched_clock_init(void) | |||
84 | 83 | ||
85 | scd->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; | 84 | scd->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; |
86 | scd->tick_jiffies = now_jiffies; | 85 | scd->tick_jiffies = now_jiffies; |
87 | scd->prev_raw = 0; | ||
88 | scd->tick_raw = 0; | 86 | scd->tick_raw = 0; |
89 | scd->tick_gtod = ktime_now; | 87 | scd->tick_gtod = ktime_now; |
90 | scd->clock = ktime_now; | 88 | scd->clock = ktime_now; |
91 | scd->multi = 1 << MULTI_SHIFT; | ||
92 | #ifdef CONFIG_NO_HZ | ||
93 | scd->check_max = 1; | ||
94 | #endif | ||
95 | } | 89 | } |
96 | 90 | ||
97 | sched_clock_running = 1; | 91 | sched_clock_running = 1; |
98 | } | 92 | } |
99 | 93 | ||
100 | #ifdef CONFIG_NO_HZ | ||
101 | /* | ||
102 | * The dynamic ticks makes the delta jiffies inaccurate. This | ||
103 | * prevents us from checking the maximum time update. | ||
104 | * Disable the maximum check during stopped ticks. | ||
105 | */ | ||
106 | void sched_clock_tick_stop(int cpu) | ||
107 | { | ||
108 | struct sched_clock_data *scd = cpu_sdc(cpu); | ||
109 | |||
110 | scd->check_max = 0; | ||
111 | } | ||
112 | |||
113 | void sched_clock_tick_start(int cpu) | ||
114 | { | ||
115 | struct sched_clock_data *scd = cpu_sdc(cpu); | ||
116 | |||
117 | scd->check_max = 1; | ||
118 | } | ||
119 | |||
120 | static int check_max(struct sched_clock_data *scd) | ||
121 | { | ||
122 | return scd->check_max; | ||
123 | } | ||
124 | #else | ||
125 | static int check_max(struct sched_clock_data *scd) | ||
126 | { | ||
127 | return 1; | ||
128 | } | ||
129 | #endif /* CONFIG_NO_HZ */ | ||
130 | |||
131 | /* | 94 | /* |
132 | * update the percpu scd from the raw @now value | 95 | * update the percpu scd from the raw @now value |
133 | * | 96 | * |
134 | * - filter out backward motion | 97 | * - filter out backward motion |
135 | * - use jiffies to generate a min,max window to clip the raw values | 98 | * - use jiffies to generate a min,max window to clip the raw values |
136 | */ | 99 | */ |
137 | static void __update_sched_clock(struct sched_clock_data *scd, u64 now, u64 *time) | 100 | static u64 __update_sched_clock(struct sched_clock_data *scd, u64 now) |
138 | { | 101 | { |
139 | unsigned long now_jiffies = jiffies; | 102 | unsigned long now_jiffies = jiffies; |
140 | long delta_jiffies = now_jiffies - scd->tick_jiffies; | 103 | long delta_jiffies = now_jiffies - scd->tick_jiffies; |
141 | u64 clock = scd->clock; | 104 | u64 clock = scd->clock; |
142 | u64 min_clock, max_clock; | 105 | u64 min_clock, max_clock; |
143 | s64 delta = now - scd->prev_raw; | 106 | s64 delta = now - scd->tick_raw; |
144 | 107 | ||
145 | WARN_ON_ONCE(!irqs_disabled()); | 108 | WARN_ON_ONCE(!irqs_disabled()); |
146 | 109 | min_clock = scd->tick_gtod + delta_jiffies * TICK_NSEC; | |
147 | /* | ||
148 | * At schedule tick the clock can be just under the gtod. We don't | ||
149 | * want to push it too prematurely. | ||
150 | */ | ||
151 | min_clock = scd->tick_gtod + (delta_jiffies * TICK_NSEC); | ||
152 | if (min_clock > TICK_NSEC) | ||
153 | min_clock -= TICK_NSEC / 2; | ||
154 | 110 | ||
155 | if (unlikely(delta < 0)) { | 111 | if (unlikely(delta < 0)) { |
156 | clock++; | 112 | clock++; |
157 | goto out; | 113 | goto out; |
158 | } | 114 | } |
159 | 115 | ||
160 | /* | 116 | max_clock = min_clock + TICK_NSEC; |
161 | * The clock must stay within a jiffie of the gtod. | ||
162 | * But since we may be at the start of a jiffy or the end of one | ||
163 | * we add another jiffy buffer. | ||
164 | */ | ||
165 | max_clock = scd->tick_gtod + (2 + delta_jiffies) * TICK_NSEC; | ||
166 | |||
167 | delta *= scd->multi; | ||
168 | delta >>= MULTI_SHIFT; | ||
169 | 117 | ||
170 | if (unlikely(clock + delta > max_clock) && check_max(scd)) { | 118 | if (unlikely(clock + delta > max_clock)) { |
171 | if (clock < max_clock) | 119 | if (clock < max_clock) |
172 | clock = max_clock; | 120 | clock = max_clock; |
173 | else | 121 | else |
@@ -180,12 +128,10 @@ static void __update_sched_clock(struct sched_clock_data *scd, u64 now, u64 *tim | |||
180 | if (unlikely(clock < min_clock)) | 128 | if (unlikely(clock < min_clock)) |
181 | clock = min_clock; | 129 | clock = min_clock; |
182 | 130 | ||
183 | if (time) | 131 | scd->tick_jiffies = now_jiffies; |
184 | *time = clock; | 132 | scd->clock = clock; |
185 | else { | 133 | |
186 | scd->prev_raw = now; | 134 | return clock; |
187 | scd->clock = clock; | ||
188 | } | ||
189 | } | 135 | } |
190 | 136 | ||
191 | static void lock_double_clock(struct sched_clock_data *data1, | 137 | static void lock_double_clock(struct sched_clock_data *data1, |
@@ -203,7 +149,7 @@ static void lock_double_clock(struct sched_clock_data *data1, | |||
203 | u64 sched_clock_cpu(int cpu) | 149 | u64 sched_clock_cpu(int cpu) |
204 | { | 150 | { |
205 | struct sched_clock_data *scd = cpu_sdc(cpu); | 151 | struct sched_clock_data *scd = cpu_sdc(cpu); |
206 | u64 now, clock; | 152 | u64 now, clock, this_clock, remote_clock; |
207 | 153 | ||
208 | if (unlikely(!sched_clock_running)) | 154 | if (unlikely(!sched_clock_running)) |
209 | return 0ull; | 155 | return 0ull; |
@@ -212,43 +158,44 @@ u64 sched_clock_cpu(int cpu) | |||
212 | now = sched_clock(); | 158 | now = sched_clock(); |
213 | 159 | ||
214 | if (cpu != raw_smp_processor_id()) { | 160 | if (cpu != raw_smp_processor_id()) { |
215 | /* | ||
216 | * in order to update a remote cpu's clock based on our | ||
217 | * unstable raw time rebase it against: | ||
218 | * tick_raw (offset between raw counters) | ||
219 | * tick_gotd (tick offset between cpus) | ||
220 | */ | ||
221 | struct sched_clock_data *my_scd = this_scd(); | 161 | struct sched_clock_data *my_scd = this_scd(); |
222 | 162 | ||
223 | lock_double_clock(scd, my_scd); | 163 | lock_double_clock(scd, my_scd); |
224 | 164 | ||
225 | now -= my_scd->tick_raw; | 165 | this_clock = __update_sched_clock(my_scd, now); |
226 | now += scd->tick_raw; | 166 | remote_clock = scd->clock; |
227 | 167 | ||
228 | now += my_scd->tick_gtod; | 168 | /* |
229 | now -= scd->tick_gtod; | 169 | * Use the opportunity that we have both locks |
170 | * taken to couple the two clocks: we take the | ||
171 | * larger time as the latest time for both | ||
172 | * runqueues. (this creates monotonic movement) | ||
173 | */ | ||
174 | if (likely(remote_clock < this_clock)) { | ||
175 | clock = this_clock; | ||
176 | scd->clock = clock; | ||
177 | } else { | ||
178 | /* | ||
179 | * Should be rare, but possible: | ||
180 | */ | ||
181 | clock = remote_clock; | ||
182 | my_scd->clock = remote_clock; | ||
183 | } | ||
230 | 184 | ||
231 | __raw_spin_unlock(&my_scd->lock); | 185 | __raw_spin_unlock(&my_scd->lock); |
232 | |||
233 | __update_sched_clock(scd, now, &clock); | ||
234 | |||
235 | __raw_spin_unlock(&scd->lock); | ||
236 | |||
237 | } else { | 186 | } else { |
238 | __raw_spin_lock(&scd->lock); | 187 | __raw_spin_lock(&scd->lock); |
239 | __update_sched_clock(scd, now, NULL); | 188 | clock = __update_sched_clock(scd, now); |
240 | clock = scd->clock; | ||
241 | __raw_spin_unlock(&scd->lock); | ||
242 | } | 189 | } |
243 | 190 | ||
191 | __raw_spin_unlock(&scd->lock); | ||
192 | |||
244 | return clock; | 193 | return clock; |
245 | } | 194 | } |
246 | 195 | ||
247 | void sched_clock_tick(void) | 196 | void sched_clock_tick(void) |
248 | { | 197 | { |
249 | struct sched_clock_data *scd = this_scd(); | 198 | struct sched_clock_data *scd = this_scd(); |
250 | unsigned long now_jiffies = jiffies; | ||
251 | s64 mult, delta_gtod, delta_raw; | ||
252 | u64 now, now_gtod; | 199 | u64 now, now_gtod; |
253 | 200 | ||
254 | if (unlikely(!sched_clock_running)) | 201 | if (unlikely(!sched_clock_running)) |
@@ -260,29 +207,14 @@ void sched_clock_tick(void) | |||
260 | now = sched_clock(); | 207 | now = sched_clock(); |
261 | 208 | ||
262 | __raw_spin_lock(&scd->lock); | 209 | __raw_spin_lock(&scd->lock); |
263 | __update_sched_clock(scd, now, NULL); | 210 | __update_sched_clock(scd, now); |
264 | /* | 211 | /* |
265 | * update tick_gtod after __update_sched_clock() because that will | 212 | * update tick_gtod after __update_sched_clock() because that will |
266 | * already observe 1 new jiffy; adding a new tick_gtod to that would | 213 | * already observe 1 new jiffy; adding a new tick_gtod to that would |
267 | * increase the clock 2 jiffies. | 214 | * increase the clock 2 jiffies. |
268 | */ | 215 | */ |
269 | delta_gtod = now_gtod - scd->tick_gtod; | ||
270 | delta_raw = now - scd->tick_raw; | ||
271 | |||
272 | if ((long)delta_raw > 0) { | ||
273 | mult = delta_gtod << MULTI_SHIFT; | ||
274 | do_div(mult, delta_raw); | ||
275 | scd->multi = mult; | ||
276 | if (scd->multi > MAX_MULTI) | ||
277 | scd->multi = MAX_MULTI; | ||
278 | else if (scd->multi < MIN_MULTI) | ||
279 | scd->multi = MIN_MULTI; | ||
280 | } else | ||
281 | scd->multi = 1 << MULTI_SHIFT; | ||
282 | |||
283 | scd->tick_raw = now; | 216 | scd->tick_raw = now; |
284 | scd->tick_gtod = now_gtod; | 217 | scd->tick_gtod = now_gtod; |
285 | scd->tick_jiffies = now_jiffies; | ||
286 | __raw_spin_unlock(&scd->lock); | 218 | __raw_spin_unlock(&scd->lock); |
287 | } | 219 | } |
288 | 220 | ||
@@ -301,7 +233,6 @@ EXPORT_SYMBOL_GPL(sched_clock_idle_sleep_event); | |||
301 | void sched_clock_idle_wakeup_event(u64 delta_ns) | 233 | void sched_clock_idle_wakeup_event(u64 delta_ns) |
302 | { | 234 | { |
303 | struct sched_clock_data *scd = this_scd(); | 235 | struct sched_clock_data *scd = this_scd(); |
304 | u64 now = sched_clock(); | ||
305 | 236 | ||
306 | /* | 237 | /* |
307 | * Override the previous timestamp and ignore all | 238 | * Override the previous timestamp and ignore all |
@@ -310,27 +241,30 @@ void sched_clock_idle_wakeup_event(u64 delta_ns) | |||
310 | * rq clock: | 241 | * rq clock: |
311 | */ | 242 | */ |
312 | __raw_spin_lock(&scd->lock); | 243 | __raw_spin_lock(&scd->lock); |
313 | scd->prev_raw = now; | ||
314 | scd->clock += delta_ns; | 244 | scd->clock += delta_ns; |
315 | scd->multi = 1 << MULTI_SHIFT; | ||
316 | __raw_spin_unlock(&scd->lock); | 245 | __raw_spin_unlock(&scd->lock); |
317 | 246 | ||
318 | touch_softlockup_watchdog(); | 247 | touch_softlockup_watchdog(); |
319 | } | 248 | } |
320 | EXPORT_SYMBOL_GPL(sched_clock_idle_wakeup_event); | 249 | EXPORT_SYMBOL_GPL(sched_clock_idle_wakeup_event); |
321 | 250 | ||
322 | #endif | 251 | #else /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */ |
323 | 252 | ||
324 | /* | 253 | void sched_clock_init(void) |
325 | * Scheduler clock - returns current time in nanosec units. | ||
326 | * This is default implementation. | ||
327 | * Architectures and sub-architectures can override this. | ||
328 | */ | ||
329 | unsigned long long __attribute__((weak)) sched_clock(void) | ||
330 | { | 254 | { |
331 | return (unsigned long long)jiffies * (NSEC_PER_SEC / HZ); | 255 | sched_clock_running = 1; |
332 | } | 256 | } |
333 | 257 | ||
258 | u64 sched_clock_cpu(int cpu) | ||
259 | { | ||
260 | if (unlikely(!sched_clock_running)) | ||
261 | return 0; | ||
262 | |||
263 | return sched_clock(); | ||
264 | } | ||
265 | |||
266 | #endif | ||
267 | |||
334 | unsigned long long cpu_clock(int cpu) | 268 | unsigned long long cpu_clock(int cpu) |
335 | { | 269 | { |
336 | unsigned long long clock; | 270 | unsigned long long clock; |
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index cf2cd6ce4cb2..fb8994c6d4bb 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
@@ -899,7 +899,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) | |||
899 | * doesn't make sense. Rely on vruntime for fairness. | 899 | * doesn't make sense. Rely on vruntime for fairness. |
900 | */ | 900 | */ |
901 | if (rq->curr != p) | 901 | if (rq->curr != p) |
902 | delta = max(10000LL, delta); | 902 | delta = max_t(s64, 10000LL, delta); |
903 | 903 | ||
904 | hrtick_start(rq, delta); | 904 | hrtick_start(rq, delta); |
905 | } | 905 | } |
@@ -1442,18 +1442,23 @@ __load_balance_iterator(struct cfs_rq *cfs_rq, struct list_head *next) | |||
1442 | struct task_struct *p = NULL; | 1442 | struct task_struct *p = NULL; |
1443 | struct sched_entity *se; | 1443 | struct sched_entity *se; |
1444 | 1444 | ||
1445 | while (next != &cfs_rq->tasks) { | 1445 | if (next == &cfs_rq->tasks) |
1446 | return NULL; | ||
1447 | |||
1448 | /* Skip over entities that are not tasks */ | ||
1449 | do { | ||
1446 | se = list_entry(next, struct sched_entity, group_node); | 1450 | se = list_entry(next, struct sched_entity, group_node); |
1447 | next = next->next; | 1451 | next = next->next; |
1452 | } while (next != &cfs_rq->tasks && !entity_is_task(se)); | ||
1448 | 1453 | ||
1449 | /* Skip over entities that are not tasks */ | 1454 | if (next == &cfs_rq->tasks) |
1450 | if (entity_is_task(se)) { | 1455 | return NULL; |
1451 | p = task_of(se); | ||
1452 | break; | ||
1453 | } | ||
1454 | } | ||
1455 | 1456 | ||
1456 | cfs_rq->balance_iterator = next; | 1457 | cfs_rq->balance_iterator = next; |
1458 | |||
1459 | if (entity_is_task(se)) | ||
1460 | p = task_of(se); | ||
1461 | |||
1457 | return p; | 1462 | return p; |
1458 | } | 1463 | } |
1459 | 1464 | ||
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 908c04f9dad0..6163e4cf885b 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c | |||
@@ -861,6 +861,8 @@ static void put_prev_task_rt(struct rq *rq, struct task_struct *p) | |||
861 | #define RT_MAX_TRIES 3 | 861 | #define RT_MAX_TRIES 3 |
862 | 862 | ||
863 | static int double_lock_balance(struct rq *this_rq, struct rq *busiest); | 863 | static int double_lock_balance(struct rq *this_rq, struct rq *busiest); |
864 | static void double_unlock_balance(struct rq *this_rq, struct rq *busiest); | ||
865 | |||
864 | static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep); | 866 | static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep); |
865 | 867 | ||
866 | static int pick_rt_task(struct rq *rq, struct task_struct *p, int cpu) | 868 | static int pick_rt_task(struct rq *rq, struct task_struct *p, int cpu) |
@@ -1022,7 +1024,7 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq) | |||
1022 | break; | 1024 | break; |
1023 | 1025 | ||
1024 | /* try again */ | 1026 | /* try again */ |
1025 | spin_unlock(&lowest_rq->lock); | 1027 | double_unlock_balance(rq, lowest_rq); |
1026 | lowest_rq = NULL; | 1028 | lowest_rq = NULL; |
1027 | } | 1029 | } |
1028 | 1030 | ||
@@ -1091,7 +1093,7 @@ static int push_rt_task(struct rq *rq) | |||
1091 | 1093 | ||
1092 | resched_task(lowest_rq->curr); | 1094 | resched_task(lowest_rq->curr); |
1093 | 1095 | ||
1094 | spin_unlock(&lowest_rq->lock); | 1096 | double_unlock_balance(rq, lowest_rq); |
1095 | 1097 | ||
1096 | ret = 1; | 1098 | ret = 1; |
1097 | out: | 1099 | out: |
@@ -1197,7 +1199,7 @@ static int pull_rt_task(struct rq *this_rq) | |||
1197 | 1199 | ||
1198 | } | 1200 | } |
1199 | skip: | 1201 | skip: |
1200 | spin_unlock(&src_rq->lock); | 1202 | double_unlock_balance(this_rq, src_rq); |
1201 | } | 1203 | } |
1202 | 1204 | ||
1203 | return ret; | 1205 | return ret; |
diff --git a/kernel/signal.c b/kernel/signal.c index 954f77d7e3bc..c539f60c6f41 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -1304,6 +1304,7 @@ int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group) | |||
1304 | q->info.si_overrun++; | 1304 | q->info.si_overrun++; |
1305 | goto out; | 1305 | goto out; |
1306 | } | 1306 | } |
1307 | q->info.si_overrun = 0; | ||
1307 | 1308 | ||
1308 | signalfd_notify(t, sig); | 1309 | signalfd_notify(t, sig); |
1309 | pending = group ? &t->signal->shared_pending : &t->pending; | 1310 | pending = group ? &t->signal->shared_pending : &t->pending; |
diff --git a/kernel/smp.c b/kernel/smp.c index 96fc7c0edc59..782e2b93e465 100644 --- a/kernel/smp.c +++ b/kernel/smp.c | |||
@@ -135,7 +135,8 @@ void generic_smp_call_function_interrupt(void) | |||
135 | */ | 135 | */ |
136 | smp_wmb(); | 136 | smp_wmb(); |
137 | data->csd.flags &= ~CSD_FLAG_WAIT; | 137 | data->csd.flags &= ~CSD_FLAG_WAIT; |
138 | } else | 138 | } |
139 | if (data->csd.flags & CSD_FLAG_ALLOC) | ||
139 | call_rcu(&data->rcu_head, rcu_free_call_data); | 140 | call_rcu(&data->rcu_head, rcu_free_call_data); |
140 | } | 141 | } |
141 | rcu_read_unlock(); | 142 | rcu_read_unlock(); |
@@ -260,6 +261,42 @@ void __smp_call_function_single(int cpu, struct call_single_data *data) | |||
260 | generic_exec_single(cpu, data); | 261 | generic_exec_single(cpu, data); |
261 | } | 262 | } |
262 | 263 | ||
264 | /* Dummy function */ | ||
265 | static void quiesce_dummy(void *unused) | ||
266 | { | ||
267 | } | ||
268 | |||
269 | /* | ||
270 | * Ensure stack based data used in call function mask is safe to free. | ||
271 | * | ||
272 | * This is needed by smp_call_function_mask when using on-stack data, because | ||
273 | * a single call function queue is shared by all CPUs, and any CPU may pick up | ||
274 | * the data item on the queue at any time before it is deleted. So we need to | ||
275 | * ensure that all CPUs have transitioned through a quiescent state after | ||
276 | * this call. | ||
277 | * | ||
278 | * This is a very slow function, implemented by sending synchronous IPIs to | ||
279 | * all possible CPUs. For this reason, we have to alloc data rather than use | ||
280 | * stack based data even in the case of synchronous calls. The stack based | ||
281 | * data is then just used for deadlock/oom fallback which will be very rare. | ||
282 | * | ||
283 | * If a faster scheme can be made, we could go back to preferring stack based | ||
284 | * data -- the data allocation/free is non-zero cost. | ||
285 | */ | ||
286 | static void smp_call_function_mask_quiesce_stack(cpumask_t mask) | ||
287 | { | ||
288 | struct call_single_data data; | ||
289 | int cpu; | ||
290 | |||
291 | data.func = quiesce_dummy; | ||
292 | data.info = NULL; | ||
293 | |||
294 | for_each_cpu_mask(cpu, mask) { | ||
295 | data.flags = CSD_FLAG_WAIT; | ||
296 | generic_exec_single(cpu, &data); | ||
297 | } | ||
298 | } | ||
299 | |||
263 | /** | 300 | /** |
264 | * smp_call_function_mask(): Run a function on a set of other CPUs. | 301 | * smp_call_function_mask(): Run a function on a set of other CPUs. |
265 | * @mask: The set of cpus to run on. | 302 | * @mask: The set of cpus to run on. |
@@ -285,6 +322,7 @@ int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info, | |||
285 | cpumask_t allbutself; | 322 | cpumask_t allbutself; |
286 | unsigned long flags; | 323 | unsigned long flags; |
287 | int cpu, num_cpus; | 324 | int cpu, num_cpus; |
325 | int slowpath = 0; | ||
288 | 326 | ||
289 | /* Can deadlock when called with interrupts disabled */ | 327 | /* Can deadlock when called with interrupts disabled */ |
290 | WARN_ON(irqs_disabled()); | 328 | WARN_ON(irqs_disabled()); |
@@ -306,15 +344,16 @@ int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info, | |||
306 | return smp_call_function_single(cpu, func, info, wait); | 344 | return smp_call_function_single(cpu, func, info, wait); |
307 | } | 345 | } |
308 | 346 | ||
309 | if (!wait) { | 347 | data = kmalloc(sizeof(*data), GFP_ATOMIC); |
310 | data = kmalloc(sizeof(*data), GFP_ATOMIC); | 348 | if (data) { |
311 | if (data) | 349 | data->csd.flags = CSD_FLAG_ALLOC; |
312 | data->csd.flags = CSD_FLAG_ALLOC; | 350 | if (wait) |
313 | } | 351 | data->csd.flags |= CSD_FLAG_WAIT; |
314 | if (!data) { | 352 | } else { |
315 | data = &d; | 353 | data = &d; |
316 | data->csd.flags = CSD_FLAG_WAIT; | 354 | data->csd.flags = CSD_FLAG_WAIT; |
317 | wait = 1; | 355 | wait = 1; |
356 | slowpath = 1; | ||
318 | } | 357 | } |
319 | 358 | ||
320 | spin_lock_init(&data->lock); | 359 | spin_lock_init(&data->lock); |
@@ -331,8 +370,11 @@ int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info, | |||
331 | arch_send_call_function_ipi(mask); | 370 | arch_send_call_function_ipi(mask); |
332 | 371 | ||
333 | /* optionally wait for the CPUs to complete */ | 372 | /* optionally wait for the CPUs to complete */ |
334 | if (wait) | 373 | if (wait) { |
335 | csd_flag_wait(&data->csd); | 374 | csd_flag_wait(&data->csd); |
375 | if (unlikely(slowpath)) | ||
376 | smp_call_function_mask_quiesce_stack(mask); | ||
377 | } | ||
336 | 378 | ||
337 | return 0; | 379 | return 0; |
338 | } | 380 | } |
diff --git a/kernel/spinlock.c b/kernel/spinlock.c index a1fb54c93cdd..44baeea94ab9 100644 --- a/kernel/spinlock.c +++ b/kernel/spinlock.c | |||
@@ -292,6 +292,7 @@ void __lockfunc _spin_lock_nested(spinlock_t *lock, int subclass) | |||
292 | } | 292 | } |
293 | 293 | ||
294 | EXPORT_SYMBOL(_spin_lock_nested); | 294 | EXPORT_SYMBOL(_spin_lock_nested); |
295 | |||
295 | unsigned long __lockfunc _spin_lock_irqsave_nested(spinlock_t *lock, int subclass) | 296 | unsigned long __lockfunc _spin_lock_irqsave_nested(spinlock_t *lock, int subclass) |
296 | { | 297 | { |
297 | unsigned long flags; | 298 | unsigned long flags; |
@@ -314,6 +315,16 @@ unsigned long __lockfunc _spin_lock_irqsave_nested(spinlock_t *lock, int subclas | |||
314 | 315 | ||
315 | EXPORT_SYMBOL(_spin_lock_irqsave_nested); | 316 | EXPORT_SYMBOL(_spin_lock_irqsave_nested); |
316 | 317 | ||
318 | void __lockfunc _spin_lock_nest_lock(spinlock_t *lock, | ||
319 | struct lockdep_map *nest_lock) | ||
320 | { | ||
321 | preempt_disable(); | ||
322 | spin_acquire_nest(&lock->dep_map, 0, 0, nest_lock, _RET_IP_); | ||
323 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
324 | } | ||
325 | |||
326 | EXPORT_SYMBOL(_spin_lock_nest_lock); | ||
327 | |||
317 | #endif | 328 | #endif |
318 | 329 | ||
319 | void __lockfunc _spin_unlock(spinlock_t *lock) | 330 | void __lockfunc _spin_unlock(spinlock_t *lock) |
diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c index e446c7c7d6a9..af3c7cea258b 100644 --- a/kernel/stop_machine.c +++ b/kernel/stop_machine.c | |||
@@ -65,7 +65,6 @@ static void ack_state(void) | |||
65 | static int stop_cpu(struct stop_machine_data *smdata) | 65 | static int stop_cpu(struct stop_machine_data *smdata) |
66 | { | 66 | { |
67 | enum stopmachine_state curstate = STOPMACHINE_NONE; | 67 | enum stopmachine_state curstate = STOPMACHINE_NONE; |
68 | int uninitialized_var(ret); | ||
69 | 68 | ||
70 | /* Simple state machine */ | 69 | /* Simple state machine */ |
71 | do { | 70 | do { |
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 825b4c00fe44..f5da526424a9 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
@@ -289,7 +289,6 @@ void tick_nohz_stop_sched_tick(int inidle) | |||
289 | ts->tick_stopped = 1; | 289 | ts->tick_stopped = 1; |
290 | ts->idle_jiffies = last_jiffies; | 290 | ts->idle_jiffies = last_jiffies; |
291 | rcu_enter_nohz(); | 291 | rcu_enter_nohz(); |
292 | sched_clock_tick_stop(cpu); | ||
293 | } | 292 | } |
294 | 293 | ||
295 | /* | 294 | /* |
@@ -392,7 +391,6 @@ void tick_nohz_restart_sched_tick(void) | |||
392 | select_nohz_load_balancer(0); | 391 | select_nohz_load_balancer(0); |
393 | now = ktime_get(); | 392 | now = ktime_get(); |
394 | tick_do_update_jiffies64(now); | 393 | tick_do_update_jiffies64(now); |
395 | sched_clock_tick_start(cpu); | ||
396 | cpu_clear(cpu, nohz_cpu_mask); | 394 | cpu_clear(cpu, nohz_cpu_mask); |
397 | 395 | ||
398 | /* | 396 | /* |
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 4a26a1382df0..4048e92aa04f 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c | |||
@@ -290,11 +290,11 @@ static void run_workqueue(struct cpu_workqueue_struct *cwq) | |||
290 | 290 | ||
291 | BUG_ON(get_wq_data(work) != cwq); | 291 | BUG_ON(get_wq_data(work) != cwq); |
292 | work_clear_pending(work); | 292 | work_clear_pending(work); |
293 | lock_acquire(&cwq->wq->lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 293 | lock_map_acquire(&cwq->wq->lockdep_map); |
294 | lock_acquire(&lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 294 | lock_map_acquire(&lockdep_map); |
295 | f(work); | 295 | f(work); |
296 | lock_release(&lockdep_map, 1, _THIS_IP_); | 296 | lock_map_release(&lockdep_map); |
297 | lock_release(&cwq->wq->lockdep_map, 1, _THIS_IP_); | 297 | lock_map_release(&cwq->wq->lockdep_map); |
298 | 298 | ||
299 | if (unlikely(in_atomic() || lockdep_depth(current) > 0)) { | 299 | if (unlikely(in_atomic() || lockdep_depth(current) > 0)) { |
300 | printk(KERN_ERR "BUG: workqueue leaked lock or atomic: " | 300 | printk(KERN_ERR "BUG: workqueue leaked lock or atomic: " |
@@ -413,8 +413,8 @@ void flush_workqueue(struct workqueue_struct *wq) | |||
413 | int cpu; | 413 | int cpu; |
414 | 414 | ||
415 | might_sleep(); | 415 | might_sleep(); |
416 | lock_acquire(&wq->lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 416 | lock_map_acquire(&wq->lockdep_map); |
417 | lock_release(&wq->lockdep_map, 1, _THIS_IP_); | 417 | lock_map_release(&wq->lockdep_map); |
418 | for_each_cpu_mask_nr(cpu, *cpu_map) | 418 | for_each_cpu_mask_nr(cpu, *cpu_map) |
419 | flush_cpu_workqueue(per_cpu_ptr(wq->cpu_wq, cpu)); | 419 | flush_cpu_workqueue(per_cpu_ptr(wq->cpu_wq, cpu)); |
420 | } | 420 | } |
@@ -441,8 +441,8 @@ int flush_work(struct work_struct *work) | |||
441 | if (!cwq) | 441 | if (!cwq) |
442 | return 0; | 442 | return 0; |
443 | 443 | ||
444 | lock_acquire(&cwq->wq->lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 444 | lock_map_acquire(&cwq->wq->lockdep_map); |
445 | lock_release(&cwq->wq->lockdep_map, 1, _THIS_IP_); | 445 | lock_map_release(&cwq->wq->lockdep_map); |
446 | 446 | ||
447 | prev = NULL; | 447 | prev = NULL; |
448 | spin_lock_irq(&cwq->lock); | 448 | spin_lock_irq(&cwq->lock); |
@@ -536,8 +536,8 @@ static void wait_on_work(struct work_struct *work) | |||
536 | 536 | ||
537 | might_sleep(); | 537 | might_sleep(); |
538 | 538 | ||
539 | lock_acquire(&work->lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 539 | lock_map_acquire(&work->lockdep_map); |
540 | lock_release(&work->lockdep_map, 1, _THIS_IP_); | 540 | lock_map_release(&work->lockdep_map); |
541 | 541 | ||
542 | cwq = get_wq_data(work); | 542 | cwq = get_wq_data(work); |
543 | if (!cwq) | 543 | if (!cwq) |
@@ -872,8 +872,8 @@ static void cleanup_workqueue_thread(struct cpu_workqueue_struct *cwq) | |||
872 | if (cwq->thread == NULL) | 872 | if (cwq->thread == NULL) |
873 | return; | 873 | return; |
874 | 874 | ||
875 | lock_acquire(&cwq->wq->lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 875 | lock_map_acquire(&cwq->wq->lockdep_map); |
876 | lock_release(&cwq->wq->lockdep_map, 1, _THIS_IP_); | 876 | lock_map_release(&cwq->wq->lockdep_map); |
877 | 877 | ||
878 | flush_cpu_workqueue(cwq); | 878 | flush_cpu_workqueue(cwq); |
879 | /* | 879 | /* |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index e1d4764435ed..800ac8485544 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -735,6 +735,15 @@ config FIREWIRE_OHCI_REMOTE_DMA | |||
735 | 735 | ||
736 | If unsure, say N. | 736 | If unsure, say N. |
737 | 737 | ||
738 | menuconfig BUILD_DOCSRC | ||
739 | bool "Build targets in Documentation/ tree" | ||
740 | depends on HEADERS_CHECK | ||
741 | help | ||
742 | This option attempts to build objects from the source files in the | ||
743 | kernel Documentation/ tree. | ||
744 | |||
745 | Say N if you are unsure. | ||
746 | |||
738 | source "samples/Kconfig" | 747 | source "samples/Kconfig" |
739 | 748 | ||
740 | source "lib/Kconfig.kgdb" | 749 | source "lib/Kconfig.kgdb" |
diff --git a/lib/bitmap.c b/lib/bitmap.c index 482df94ea21e..06fb57c86de0 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c | |||
@@ -316,6 +316,17 @@ int bitmap_scnprintf(char *buf, unsigned int buflen, | |||
316 | EXPORT_SYMBOL(bitmap_scnprintf); | 316 | EXPORT_SYMBOL(bitmap_scnprintf); |
317 | 317 | ||
318 | /** | 318 | /** |
319 | * bitmap_scnprintf_len - return buffer length needed to convert | ||
320 | * bitmap to an ASCII hex string | ||
321 | * @nr_bits: number of bits to be converted | ||
322 | */ | ||
323 | int bitmap_scnprintf_len(unsigned int nr_bits) | ||
324 | { | ||
325 | unsigned int nr_nibbles = ALIGN(nr_bits, 4) / 4; | ||
326 | return nr_nibbles + ALIGN(nr_nibbles, CHUNKSZ / 4) / (CHUNKSZ / 4) - 1; | ||
327 | } | ||
328 | |||
329 | /** | ||
319 | * __bitmap_parse - convert an ASCII hex string into a bitmap. | 330 | * __bitmap_parse - convert an ASCII hex string into a bitmap. |
320 | * @buf: pointer to buffer containing string. | 331 | * @buf: pointer to buffer containing string. |
321 | * @buflen: buffer size in bytes. If string is smaller than this | 332 | * @buflen: buffer size in bytes. If string is smaller than this |
diff --git a/lib/debug_locks.c b/lib/debug_locks.c index 0ef01d14727c..0218b4693dd8 100644 --- a/lib/debug_locks.c +++ b/lib/debug_locks.c | |||
@@ -8,6 +8,7 @@ | |||
8 | * | 8 | * |
9 | * Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> | 9 | * Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> |
10 | */ | 10 | */ |
11 | #include <linux/kernel.h> | ||
11 | #include <linux/rwsem.h> | 12 | #include <linux/rwsem.h> |
12 | #include <linux/mutex.h> | 13 | #include <linux/mutex.h> |
13 | #include <linux/module.h> | 14 | #include <linux/module.h> |
@@ -37,6 +38,7 @@ int debug_locks_off(void) | |||
37 | { | 38 | { |
38 | if (xchg(&debug_locks, 0)) { | 39 | if (xchg(&debug_locks, 0)) { |
39 | if (!debug_locks_silent) { | 40 | if (!debug_locks_silent) { |
41 | oops_in_progress = 1; | ||
40 | console_verbose(); | 42 | console_verbose(); |
41 | return 1; | 43 | return 1; |
42 | } | 44 | } |
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 1dc2d1d18fa8..d8d1d1142248 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c | |||
@@ -220,7 +220,7 @@ int strict_strtou##type(const char *cp, unsigned int base, valtype *res)\ | |||
220 | if (len == 0) \ | 220 | if (len == 0) \ |
221 | return -EINVAL; \ | 221 | return -EINVAL; \ |
222 | \ | 222 | \ |
223 | val = simple_strtoul(cp, &tail, base); \ | 223 | val = simple_strtou##type(cp, &tail, base); \ |
224 | if ((*tail == '\0') || \ | 224 | if ((*tail == '\0') || \ |
225 | ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {\ | 225 | ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {\ |
226 | *res = val; \ | 226 | *res = val; \ |
diff --git a/mm/Kconfig b/mm/Kconfig index 446c6588c753..0bd9c2dbb2a0 100644 --- a/mm/Kconfig +++ b/mm/Kconfig | |||
@@ -77,9 +77,6 @@ config FLAT_NODE_MEM_MAP | |||
77 | def_bool y | 77 | def_bool y |
78 | depends on !SPARSEMEM | 78 | depends on !SPARSEMEM |
79 | 79 | ||
80 | config HAVE_GET_USER_PAGES_FAST | ||
81 | bool | ||
82 | |||
83 | # | 80 | # |
84 | # Both the NUMA code and DISCONTIGMEM use arrays of pg_data_t's | 81 | # Both the NUMA code and DISCONTIGMEM use arrays of pg_data_t's |
85 | # to represent different areas of memory. This variable allows | 82 | # to represent different areas of memory. This variable allows |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 757ca983fd99..67a71191136e 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -565,7 +565,7 @@ static struct page *alloc_fresh_huge_page_node(struct hstate *h, int nid) | |||
565 | huge_page_order(h)); | 565 | huge_page_order(h)); |
566 | if (page) { | 566 | if (page) { |
567 | if (arch_prepare_hugepage(page)) { | 567 | if (arch_prepare_hugepage(page)) { |
568 | __free_pages(page, HUGETLB_PAGE_ORDER); | 568 | __free_pages(page, huge_page_order(h)); |
569 | return NULL; | 569 | return NULL; |
570 | } | 570 | } |
571 | prep_new_huge_page(h, page, nid); | 571 | prep_new_huge_page(h, page, nid); |
@@ -665,6 +665,11 @@ static struct page *alloc_buddy_huge_page(struct hstate *h, | |||
665 | __GFP_REPEAT|__GFP_NOWARN, | 665 | __GFP_REPEAT|__GFP_NOWARN, |
666 | huge_page_order(h)); | 666 | huge_page_order(h)); |
667 | 667 | ||
668 | if (page && arch_prepare_hugepage(page)) { | ||
669 | __free_pages(page, huge_page_order(h)); | ||
670 | return NULL; | ||
671 | } | ||
672 | |||
668 | spin_lock(&hugetlb_lock); | 673 | spin_lock(&hugetlb_lock); |
669 | if (page) { | 674 | if (page) { |
670 | /* | 675 | /* |
@@ -1937,6 +1942,18 @@ retry: | |||
1937 | lock_page(page); | 1942 | lock_page(page); |
1938 | } | 1943 | } |
1939 | 1944 | ||
1945 | /* | ||
1946 | * If we are going to COW a private mapping later, we examine the | ||
1947 | * pending reservations for this page now. This will ensure that | ||
1948 | * any allocations necessary to record that reservation occur outside | ||
1949 | * the spinlock. | ||
1950 | */ | ||
1951 | if (write_access && !(vma->vm_flags & VM_SHARED)) | ||
1952 | if (vma_needs_reservation(h, vma, address) < 0) { | ||
1953 | ret = VM_FAULT_OOM; | ||
1954 | goto backout_unlocked; | ||
1955 | } | ||
1956 | |||
1940 | spin_lock(&mm->page_table_lock); | 1957 | spin_lock(&mm->page_table_lock); |
1941 | size = i_size_read(mapping->host) >> huge_page_shift(h); | 1958 | size = i_size_read(mapping->host) >> huge_page_shift(h); |
1942 | if (idx >= size) | 1959 | if (idx >= size) |
@@ -1962,6 +1979,7 @@ out: | |||
1962 | 1979 | ||
1963 | backout: | 1980 | backout: |
1964 | spin_unlock(&mm->page_table_lock); | 1981 | spin_unlock(&mm->page_table_lock); |
1982 | backout_unlocked: | ||
1965 | unlock_page(page); | 1983 | unlock_page(page); |
1966 | put_page(page); | 1984 | put_page(page); |
1967 | goto out; | 1985 | goto out; |
@@ -1973,6 +1991,7 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | |||
1973 | pte_t *ptep; | 1991 | pte_t *ptep; |
1974 | pte_t entry; | 1992 | pte_t entry; |
1975 | int ret; | 1993 | int ret; |
1994 | struct page *pagecache_page = NULL; | ||
1976 | static DEFINE_MUTEX(hugetlb_instantiation_mutex); | 1995 | static DEFINE_MUTEX(hugetlb_instantiation_mutex); |
1977 | struct hstate *h = hstate_vma(vma); | 1996 | struct hstate *h = hstate_vma(vma); |
1978 | 1997 | ||
@@ -1989,25 +2008,44 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | |||
1989 | entry = huge_ptep_get(ptep); | 2008 | entry = huge_ptep_get(ptep); |
1990 | if (huge_pte_none(entry)) { | 2009 | if (huge_pte_none(entry)) { |
1991 | ret = hugetlb_no_page(mm, vma, address, ptep, write_access); | 2010 | ret = hugetlb_no_page(mm, vma, address, ptep, write_access); |
1992 | mutex_unlock(&hugetlb_instantiation_mutex); | 2011 | goto out_unlock; |
1993 | return ret; | ||
1994 | } | 2012 | } |
1995 | 2013 | ||
1996 | ret = 0; | 2014 | ret = 0; |
1997 | 2015 | ||
2016 | /* | ||
2017 | * If we are going to COW the mapping later, we examine the pending | ||
2018 | * reservations for this page now. This will ensure that any | ||
2019 | * allocations necessary to record that reservation occur outside the | ||
2020 | * spinlock. For private mappings, we also lookup the pagecache | ||
2021 | * page now as it is used to determine if a reservation has been | ||
2022 | * consumed. | ||
2023 | */ | ||
2024 | if (write_access && !pte_write(entry)) { | ||
2025 | if (vma_needs_reservation(h, vma, address) < 0) { | ||
2026 | ret = VM_FAULT_OOM; | ||
2027 | goto out_unlock; | ||
2028 | } | ||
2029 | |||
2030 | if (!(vma->vm_flags & VM_SHARED)) | ||
2031 | pagecache_page = hugetlbfs_pagecache_page(h, | ||
2032 | vma, address); | ||
2033 | } | ||
2034 | |||
1998 | spin_lock(&mm->page_table_lock); | 2035 | spin_lock(&mm->page_table_lock); |
1999 | /* Check for a racing update before calling hugetlb_cow */ | 2036 | /* Check for a racing update before calling hugetlb_cow */ |
2000 | if (likely(pte_same(entry, huge_ptep_get(ptep)))) | 2037 | if (likely(pte_same(entry, huge_ptep_get(ptep)))) |
2001 | if (write_access && !pte_write(entry)) { | 2038 | if (write_access && !pte_write(entry)) |
2002 | struct page *page; | 2039 | ret = hugetlb_cow(mm, vma, address, ptep, entry, |
2003 | page = hugetlbfs_pagecache_page(h, vma, address); | 2040 | pagecache_page); |
2004 | ret = hugetlb_cow(mm, vma, address, ptep, entry, page); | ||
2005 | if (page) { | ||
2006 | unlock_page(page); | ||
2007 | put_page(page); | ||
2008 | } | ||
2009 | } | ||
2010 | spin_unlock(&mm->page_table_lock); | 2041 | spin_unlock(&mm->page_table_lock); |
2042 | |||
2043 | if (pagecache_page) { | ||
2044 | unlock_page(pagecache_page); | ||
2045 | put_page(pagecache_page); | ||
2046 | } | ||
2047 | |||
2048 | out_unlock: | ||
2011 | mutex_unlock(&hugetlb_instantiation_mutex); | 2049 | mutex_unlock(&hugetlb_instantiation_mutex); |
2012 | 2050 | ||
2013 | return ret; | 2051 | return ret; |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 7056c3bdb478..0f1f7a7374ba 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -796,6 +796,8 @@ int mem_cgroup_shrink_usage(struct mm_struct *mm, gfp_t gfp_mask) | |||
796 | 796 | ||
797 | if (mem_cgroup_subsys.disabled) | 797 | if (mem_cgroup_subsys.disabled) |
798 | return 0; | 798 | return 0; |
799 | if (!mm) | ||
800 | return 0; | ||
799 | 801 | ||
800 | rcu_read_lock(); | 802 | rcu_read_lock(); |
801 | mem = mem_cgroup_from_task(rcu_dereference(mm->owner)); | 803 | mem = mem_cgroup_from_task(rcu_dereference(mm->owner)); |
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index e550bec20582..83369058ec13 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
@@ -803,7 +803,6 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest, | |||
803 | int do_migrate_pages(struct mm_struct *mm, | 803 | int do_migrate_pages(struct mm_struct *mm, |
804 | const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags) | 804 | const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags) |
805 | { | 805 | { |
806 | LIST_HEAD(pagelist); | ||
807 | int busy = 0; | 806 | int busy = 0; |
808 | int err = 0; | 807 | int err = 0; |
809 | nodemask_t tmp; | 808 | nodemask_t tmp; |
@@ -2273,14 +2273,14 @@ int install_special_mapping(struct mm_struct *mm, | |||
2273 | 2273 | ||
2274 | static DEFINE_MUTEX(mm_all_locks_mutex); | 2274 | static DEFINE_MUTEX(mm_all_locks_mutex); |
2275 | 2275 | ||
2276 | static void vm_lock_anon_vma(struct anon_vma *anon_vma) | 2276 | static void vm_lock_anon_vma(struct mm_struct *mm, struct anon_vma *anon_vma) |
2277 | { | 2277 | { |
2278 | if (!test_bit(0, (unsigned long *) &anon_vma->head.next)) { | 2278 | if (!test_bit(0, (unsigned long *) &anon_vma->head.next)) { |
2279 | /* | 2279 | /* |
2280 | * The LSB of head.next can't change from under us | 2280 | * The LSB of head.next can't change from under us |
2281 | * because we hold the mm_all_locks_mutex. | 2281 | * because we hold the mm_all_locks_mutex. |
2282 | */ | 2282 | */ |
2283 | spin_lock(&anon_vma->lock); | 2283 | spin_lock_nest_lock(&anon_vma->lock, &mm->mmap_sem); |
2284 | /* | 2284 | /* |
2285 | * We can safely modify head.next after taking the | 2285 | * We can safely modify head.next after taking the |
2286 | * anon_vma->lock. If some other vma in this mm shares | 2286 | * anon_vma->lock. If some other vma in this mm shares |
@@ -2296,7 +2296,7 @@ static void vm_lock_anon_vma(struct anon_vma *anon_vma) | |||
2296 | } | 2296 | } |
2297 | } | 2297 | } |
2298 | 2298 | ||
2299 | static void vm_lock_mapping(struct address_space *mapping) | 2299 | static void vm_lock_mapping(struct mm_struct *mm, struct address_space *mapping) |
2300 | { | 2300 | { |
2301 | if (!test_bit(AS_MM_ALL_LOCKS, &mapping->flags)) { | 2301 | if (!test_bit(AS_MM_ALL_LOCKS, &mapping->flags)) { |
2302 | /* | 2302 | /* |
@@ -2310,7 +2310,7 @@ static void vm_lock_mapping(struct address_space *mapping) | |||
2310 | */ | 2310 | */ |
2311 | if (test_and_set_bit(AS_MM_ALL_LOCKS, &mapping->flags)) | 2311 | if (test_and_set_bit(AS_MM_ALL_LOCKS, &mapping->flags)) |
2312 | BUG(); | 2312 | BUG(); |
2313 | spin_lock(&mapping->i_mmap_lock); | 2313 | spin_lock_nest_lock(&mapping->i_mmap_lock, &mm->mmap_sem); |
2314 | } | 2314 | } |
2315 | } | 2315 | } |
2316 | 2316 | ||
@@ -2358,11 +2358,17 @@ int mm_take_all_locks(struct mm_struct *mm) | |||
2358 | for (vma = mm->mmap; vma; vma = vma->vm_next) { | 2358 | for (vma = mm->mmap; vma; vma = vma->vm_next) { |
2359 | if (signal_pending(current)) | 2359 | if (signal_pending(current)) |
2360 | goto out_unlock; | 2360 | goto out_unlock; |
2361 | if (vma->anon_vma) | ||
2362 | vm_lock_anon_vma(vma->anon_vma); | ||
2363 | if (vma->vm_file && vma->vm_file->f_mapping) | 2361 | if (vma->vm_file && vma->vm_file->f_mapping) |
2364 | vm_lock_mapping(vma->vm_file->f_mapping); | 2362 | vm_lock_mapping(mm, vma->vm_file->f_mapping); |
2363 | } | ||
2364 | |||
2365 | for (vma = mm->mmap; vma; vma = vma->vm_next) { | ||
2366 | if (signal_pending(current)) | ||
2367 | goto out_unlock; | ||
2368 | if (vma->anon_vma) | ||
2369 | vm_lock_anon_vma(mm, vma->anon_vma); | ||
2365 | } | 2370 | } |
2371 | |||
2366 | ret = 0; | 2372 | ret = 0; |
2367 | 2373 | ||
2368 | out_unlock: | 2374 | out_unlock: |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 401d104d2bb6..af982f7cdb2a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -4437,7 +4437,7 @@ void *__init alloc_large_system_hash(const char *tablename, | |||
4437 | do { | 4437 | do { |
4438 | size = bucketsize << log2qty; | 4438 | size = bucketsize << log2qty; |
4439 | if (flags & HASH_EARLY) | 4439 | if (flags & HASH_EARLY) |
4440 | table = alloc_bootmem(size); | 4440 | table = alloc_bootmem_nopanic(size); |
4441 | else if (hashdist) | 4441 | else if (hashdist) |
4442 | table = __vmalloc(size, GFP_ATOMIC, PAGE_KERNEL); | 4442 | table = __vmalloc(size, GFP_ATOMIC, PAGE_KERNEL); |
4443 | else { | 4443 | else { |
diff --git a/mm/sparse.c b/mm/sparse.c index 5d9dbbb9d39e..39db301b920d 100644 --- a/mm/sparse.c +++ b/mm/sparse.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <asm/dma.h> | 12 | #include <asm/dma.h> |
13 | #include <asm/pgalloc.h> | 13 | #include <asm/pgalloc.h> |
14 | #include <asm/pgtable.h> | 14 | #include <asm/pgtable.h> |
15 | #include "internal.h" | ||
16 | 15 | ||
17 | /* | 16 | /* |
18 | * Permanent SPARSEMEM data: | 17 | * Permanent SPARSEMEM data: |
@@ -171,3 +171,18 @@ void arch_pick_mmap_layout(struct mm_struct *mm) | |||
171 | mm->unmap_area = arch_unmap_area; | 171 | mm->unmap_area = arch_unmap_area; |
172 | } | 172 | } |
173 | #endif | 173 | #endif |
174 | |||
175 | int __attribute__((weak)) get_user_pages_fast(unsigned long start, | ||
176 | int nr_pages, int write, struct page **pages) | ||
177 | { | ||
178 | struct mm_struct *mm = current->mm; | ||
179 | int ret; | ||
180 | |||
181 | down_read(&mm->mmap_sem); | ||
182 | ret = get_user_pages(current, mm, start, nr_pages, | ||
183 | write, 0, pages, NULL); | ||
184 | up_read(&mm->mmap_sem); | ||
185 | |||
186 | return ret; | ||
187 | } | ||
188 | EXPORT_SYMBOL_GPL(get_user_pages_fast); | ||
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index ef9f072b47fc..a73d6ca0a906 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -101,6 +101,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}," | |||
101 | "{Intel, ICH8}," | 101 | "{Intel, ICH8}," |
102 | "{Intel, ICH9}," | 102 | "{Intel, ICH9}," |
103 | "{Intel, ICH10}," | 103 | "{Intel, ICH10}," |
104 | "{Intel, PCH}," | ||
104 | "{Intel, SCH}," | 105 | "{Intel, SCH}," |
105 | "{ATI, SB450}," | 106 | "{ATI, SB450}," |
106 | "{ATI, SB600}," | 107 | "{ATI, SB600}," |
@@ -2263,6 +2264,8 @@ static struct pci_device_id azx_ids[] = { | |||
2263 | { PCI_DEVICE(0x8086, 0x293f), .driver_data = AZX_DRIVER_ICH }, | 2264 | { PCI_DEVICE(0x8086, 0x293f), .driver_data = AZX_DRIVER_ICH }, |
2264 | { PCI_DEVICE(0x8086, 0x3a3e), .driver_data = AZX_DRIVER_ICH }, | 2265 | { PCI_DEVICE(0x8086, 0x3a3e), .driver_data = AZX_DRIVER_ICH }, |
2265 | { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH }, | 2266 | { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH }, |
2267 | /* PCH */ | ||
2268 | { PCI_DEVICE(0x8086, 0x3b56), .driver_data = AZX_DRIVER_ICH }, | ||
2266 | /* SCH */ | 2269 | /* SCH */ |
2267 | { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH }, | 2270 | { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH }, |
2268 | /* ATI SB 450/600 */ | 2271 | /* ATI SB 450/600 */ |
@@ -2272,6 +2275,7 @@ static struct pci_device_id azx_ids[] = { | |||
2272 | { PCI_DEVICE(0x1002, 0x793b), .driver_data = AZX_DRIVER_ATIHDMI }, | 2275 | { PCI_DEVICE(0x1002, 0x793b), .driver_data = AZX_DRIVER_ATIHDMI }, |
2273 | { PCI_DEVICE(0x1002, 0x7919), .driver_data = AZX_DRIVER_ATIHDMI }, | 2276 | { PCI_DEVICE(0x1002, 0x7919), .driver_data = AZX_DRIVER_ATIHDMI }, |
2274 | { PCI_DEVICE(0x1002, 0x960f), .driver_data = AZX_DRIVER_ATIHDMI }, | 2277 | { PCI_DEVICE(0x1002, 0x960f), .driver_data = AZX_DRIVER_ATIHDMI }, |
2278 | { PCI_DEVICE(0x1002, 0x970f), .driver_data = AZX_DRIVER_ATIHDMI }, | ||
2275 | { PCI_DEVICE(0x1002, 0xaa00), .driver_data = AZX_DRIVER_ATIHDMI }, | 2279 | { PCI_DEVICE(0x1002, 0xaa00), .driver_data = AZX_DRIVER_ATIHDMI }, |
2276 | { PCI_DEVICE(0x1002, 0xaa08), .driver_data = AZX_DRIVER_ATIHDMI }, | 2280 | { PCI_DEVICE(0x1002, 0xaa08), .driver_data = AZX_DRIVER_ATIHDMI }, |
2277 | { PCI_DEVICE(0x1002, 0xaa10), .driver_data = AZX_DRIVER_ATIHDMI }, | 2281 | { PCI_DEVICE(0x1002, 0xaa10), .driver_data = AZX_DRIVER_ATIHDMI }, |
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c index e23cb09f0d14..c6a8edf302ad 100644 --- a/sound/soc/codecs/wm8750.c +++ b/sound/soc/codecs/wm8750.c | |||
@@ -348,8 +348,9 @@ static const struct snd_soc_dapm_widget wm8750_dapm_widgets[] = { | |||
348 | SND_SOC_DAPM_OUTPUT("ROUT1"), | 348 | SND_SOC_DAPM_OUTPUT("ROUT1"), |
349 | SND_SOC_DAPM_OUTPUT("LOUT2"), | 349 | SND_SOC_DAPM_OUTPUT("LOUT2"), |
350 | SND_SOC_DAPM_OUTPUT("ROUT2"), | 350 | SND_SOC_DAPM_OUTPUT("ROUT2"), |
351 | SND_SOC_DAPM_OUTPUT("MONO"), | 351 | SND_SOC_DAPM_OUTPUT("MONO1"), |
352 | SND_SOC_DAPM_OUTPUT("OUT3"), | 352 | SND_SOC_DAPM_OUTPUT("OUT3"), |
353 | SND_SOC_DAPM_OUTPUT("VREF"), | ||
353 | 354 | ||
354 | SND_SOC_DAPM_INPUT("LINPUT1"), | 355 | SND_SOC_DAPM_INPUT("LINPUT1"), |
355 | SND_SOC_DAPM_INPUT("LINPUT2"), | 356 | SND_SOC_DAPM_INPUT("LINPUT2"), |
diff --git a/sound/soc/pxa/spitz.c b/sound/soc/pxa/spitz.c index eefc25b83514..37cb768fc933 100644 --- a/sound/soc/pxa/spitz.c +++ b/sound/soc/pxa/spitz.c | |||
@@ -297,7 +297,7 @@ static int spitz_wm8750_init(struct snd_soc_codec *codec) | |||
297 | snd_soc_dapm_disable_pin(codec, "LINPUT3"); | 297 | snd_soc_dapm_disable_pin(codec, "LINPUT3"); |
298 | snd_soc_dapm_disable_pin(codec, "RINPUT3"); | 298 | snd_soc_dapm_disable_pin(codec, "RINPUT3"); |
299 | snd_soc_dapm_disable_pin(codec, "OUT3"); | 299 | snd_soc_dapm_disable_pin(codec, "OUT3"); |
300 | snd_soc_dapm_disable_pin(codec, "MONO"); | 300 | snd_soc_dapm_disable_pin(codec, "MONO1"); |
301 | 301 | ||
302 | /* Add spitz specific controls */ | 302 | /* Add spitz specific controls */ |
303 | for (i = 0; i < ARRAY_SIZE(wm8750_spitz_controls); i++) { | 303 | for (i = 0; i < ARRAY_SIZE(wm8750_spitz_controls); i++) { |