Pārlūkot izejas kodu

Auto-update from upstream

Len Brown 19 gadi atpakaļ
vecāks
revīzija
d8bcd8e415
100 mainītis faili ar 702 papildinājumiem un 487 dzēšanām
  1. 3 3
      MAINTAINERS
  2. 2 2
      Makefile
  3. 1 1
      arch/alpha/kernel/machvec_impl.h
  4. 4 4
      arch/arm/kernel/calls.S
  5. 49 0
      arch/arm/kernel/entry-armv.S
  6. 2 18
      arch/arm/kernel/entry-common.S
  7. 1 1
      arch/i386/mm/ioremap.c
  8. 1 1
      arch/i386/pci/Makefile
  9. 1 1
      arch/i386/pci/mmconfig.c
  10. 1 1
      arch/ia64/configs/sn2_defconfig
  11. 29 0
      arch/ia64/kernel/time.c
  12. 3 3
      arch/ia64/kernel/uncached.c
  13. 3 0
      arch/ia64/kernel/vmlinux.lds.S
  14. 1 1
      arch/ia64/sn/kernel/sn2/sn2_smp.c
  15. 24 24
      arch/ia64/sn/pci/pcibr/pcibr_reg.c
  16. 6 6
      arch/ia64/sn/pci/tioca_provider.c
  17. 4 3
      arch/powerpc/configs/cell_defconfig
  18. 5 4
      arch/powerpc/configs/g5_defconfig
  19. 4 3
      arch/powerpc/configs/iseries_defconfig
  20. 5 5
      arch/powerpc/configs/maple_defconfig
  21. 4 3
      arch/powerpc/configs/ppc64_defconfig
  22. 4 3
      arch/powerpc/configs/pseries_defconfig
  23. 2 2
      arch/powerpc/kernel/entry_64.S
  24. 1 1
      arch/powerpc/kernel/syscalls.c
  25. 2 1
      arch/ppc/platforms/85xx/mpc85xx_cds_common.c
  26. 1 0
      arch/ppc/syslib/ppc4xx_dma.c
  27. 12 12
      arch/sparc/kernel/ebus.c
  28. 1 1
      arch/sparc/kernel/led.c
  29. 1 1
      arch/sparc/kernel/pcic.c
  30. 2 2
      arch/sparc/kernel/time.c
  31. 1 1
      arch/sparc/mm/sun4c.c
  32. 0 5
      arch/sparc64/Makefile
  33. 2 0
      arch/um/Kconfig
  34. 4 0
      arch/um/Makefile-x86_64
  35. 16 13
      arch/um/include/sysdep-i386/stub.h
  36. 17 13
      arch/um/include/sysdep-x86_64/stub.h
  37. 13 10
      arch/um/kernel/skas/clone.c
  38. 0 5
      arch/um/scripts/Makefile.rules
  39. 1 1
      arch/x86_64/mm/ioremap.c
  40. 1 1
      arch/x86_64/pci/Makefile
  41. 7 7
      arch/x86_64/pci/mmconfig.c
  42. 31 14
      block/scsi_ioctl.c
  43. 1 1
      drivers/atm/adummy.c
  44. 0 1
      drivers/base/memory.c
  45. 1 1
      drivers/char/Kconfig
  46. 8 3
      drivers/char/drm/radeon_cp.c
  47. 1 0
      drivers/char/drm/radeon_drv.h
  48. 4 2
      drivers/char/ipmi/ipmi_si_intf.c
  49. 1 1
      drivers/char/mwave/mwavepub.h
  50. 7 6
      drivers/char/pcmcia/cm4000_cs.c
  51. 8 7
      drivers/char/watchdog/booke_wdt.c
  52. 1 1
      drivers/char/watchdog/wdrtas.c
  53. 3 3
      drivers/firmware/dell_rbu.c
  54. 6 5
      drivers/i2c/busses/i2c-mv64xxx.c
  55. 1 0
      drivers/ieee1394/hosts.h
  56. 57 10
      drivers/ieee1394/nodemgr.c
  57. 1 1
      drivers/input/misc/wistron_btns.c
  58. 1 1
      drivers/macintosh/therm_pm72.c
  59. 1 1
      drivers/md/md.c
  60. 3 3
      drivers/media/dvb/bt8xx/dst_ca.c
  61. 3 0
      drivers/media/dvb/ttpci/av7110.c
  62. 2 1
      drivers/media/dvb/ttpci/av7110_hw.h
  63. 24 18
      drivers/media/video/cx25840/cx25840-core.c
  64. 4 4
      drivers/media/video/em28xx/em28xx-core.c
  65. 1 1
      drivers/media/video/em28xx/em28xx-i2c.c
  66. 1 1
      drivers/media/video/em28xx/em28xx-video.c
  67. 4 4
      drivers/media/video/em28xx/em28xx.h
  68. 1 1
      drivers/media/video/saa7134/saa7134-alsa.c
  69. 1 1
      drivers/media/video/tveeprom.c
  70. 5 1
      drivers/message/i2o/pci.c
  71. 2 2
      drivers/mtd/onenand/generic.c
  72. 40 13
      drivers/mtd/onenand/onenand_base.c
  73. 2 2
      drivers/mtd/onenand/onenand_bbt.c
  74. 5 5
      drivers/net/s2io.c
  75. 101 85
      drivers/net/tg3.c
  76. 3 4
      drivers/pci/Makefile
  77. 10 9
      drivers/sbus/char/jsflash.c
  78. 5 5
      drivers/sbus/char/uctrl.c
  79. 1 1
      drivers/sbus/char/vfc.h
  80. 3 3
      drivers/sbus/char/vfc_dev.c
  81. 20 5
      drivers/scsi/dpt_i2o.c
  82. 1 1
      drivers/scsi/iscsi_tcp.c
  83. 1 1
      drivers/scsi/scsi_transport_iscsi.c
  84. 2 0
      drivers/usb/host/uhci-hcd.c
  85. 1 0
      drivers/usb/input/hid-input.c
  86. 1 1
      drivers/usb/misc/auerswald.c
  87. 1 1
      drivers/video/arcfb.c
  88. 5 3
      drivers/video/console/fbcon_ud.c
  89. 2 2
      drivers/video/cyber2000fb.c
  90. 5 0
      drivers/video/intelfb/intelfb.h
  91. 20 31
      drivers/video/intelfb/intelfbdrv.c
  92. 4 0
      fs/lockd/clntlock.c
  93. 6 18
      fs/nfs/direct.c
  94. 4 19
      fs/nfs/file.c
  95. 23 5
      fs/nfs/inode.c
  96. 1 1
      fs/nfsd/nfs2acl.c
  97. 1 1
      fs/nfsd/nfs3acl.c
  98. 6 2
      fs/relayfs/relay.c
  99. 2 2
      fs/xfs/quota/xfs_qm.c
  100. 1 9
      include/asm-ia64/delay.h

+ 3 - 3
MAINTAINERS

@@ -536,7 +536,7 @@ P:	Mauro Carvalho Chehab
 M:	mchehab@brturbo.com.br
 M:	mchehab@brturbo.com.br
 L:	video4linux-list@redhat.com
 L:	video4linux-list@redhat.com
 W:	http://linuxtv.org
 W:	http://linuxtv.org
-T:	quilt http://www.linuxtv.org/download/quilt/
+T:	git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
 S:	Maintained
 S:	Maintained
 
 
 BUSLOGIC SCSI DRIVER
 BUSLOGIC SCSI DRIVER
@@ -834,7 +834,7 @@ P:	LinuxTV.org Project
 M: 	linux-dvb-maintainer@linuxtv.org
 M: 	linux-dvb-maintainer@linuxtv.org
 L: 	linux-dvb@linuxtv.org (subscription required)
 L: 	linux-dvb@linuxtv.org (subscription required)
 W:	http://linuxtv.org/
 W:	http://linuxtv.org/
-T:	quilt http://www.linuxtv.org/download/quilt/
+T:	git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
 S:	Supported
 S:	Supported
 
 
 EATA-DMA SCSI DRIVER
 EATA-DMA SCSI DRIVER
@@ -2896,7 +2896,7 @@ P:	Mauro Carvalho Chehab
 M:	mchehab@brturbo.com.br
 M:	mchehab@brturbo.com.br
 L:	video4linux-list@redhat.com
 L:	video4linux-list@redhat.com
 W:	http://linuxtv.org
 W:	http://linuxtv.org
-T:	quilt http://www.linuxtv.org/download/quilt/
+T:	git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
 S:	Maintained
 S:	Maintained
 
 
 W1 DALLAS'S 1-WIRE BUS
 W1 DALLAS'S 1-WIRE BUS

+ 2 - 2
Makefile

@@ -1,8 +1,8 @@
 VERSION = 2
 VERSION = 2
 PATCHLEVEL = 6
 PATCHLEVEL = 6
 SUBLEVEL = 15
 SUBLEVEL = 15
-EXTRAVERSION =-rc5
-NAME=Affluent Albatross
+EXTRAVERSION =-rc6
+NAME=Sliding Snow Leopard
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*
 # To see a list of typical targets execute "make help"
 # To see a list of typical targets execute "make help"

+ 1 - 1
arch/alpha/kernel/machvec_impl.h

@@ -41,7 +41,7 @@
 #define CAT1(x,y)  x##y
 #define CAT1(x,y)  x##y
 #define CAT(x,y)   CAT1(x,y)
 #define CAT(x,y)   CAT1(x,y)
 
 
-#define DO_DEFAULT_RTC rtc_port: 0x70
+#define DO_DEFAULT_RTC .rtc_port = 0x70
 
 
 #define DO_EV4_MMU							\
 #define DO_EV4_MMU							\
 	.max_asn =			EV4_MAX_ASN,			\
 	.max_asn =			EV4_MAX_ASN,			\

+ 4 - 4
arch/arm/kernel/calls.S

@@ -131,7 +131,7 @@ __syscall_start:
 		.long	sys_wait4
 		.long	sys_wait4
 /* 115 */	.long	sys_swapoff
 /* 115 */	.long	sys_swapoff
 		.long	sys_sysinfo
 		.long	sys_sysinfo
-		.long	sys_ipc_wrapper
+		.long	sys_ipc
 		.long	sys_fsync
 		.long	sys_fsync
 		.long	sys_sigreturn_wrapper
 		.long	sys_sigreturn_wrapper
 /* 120 */	.long	sys_clone_wrapper
 /* 120 */	.long	sys_clone_wrapper
@@ -254,7 +254,7 @@ __syscall_start:
 		.long	sys_fremovexattr
 		.long	sys_fremovexattr
 		.long	sys_tkill
 		.long	sys_tkill
 		.long	sys_sendfile64
 		.long	sys_sendfile64
-/* 240 */	.long	sys_futex_wrapper
+/* 240 */	.long	sys_futex
 		.long	sys_sched_setaffinity
 		.long	sys_sched_setaffinity
 		.long	sys_sched_getaffinity
 		.long	sys_sched_getaffinity
 		.long	sys_io_setup
 		.long	sys_io_setup
@@ -284,7 +284,7 @@ __syscall_start:
 		.long	sys_fstatfs64
 		.long	sys_fstatfs64
 		.long	sys_tgkill
 		.long	sys_tgkill
 		.long	sys_utimes
 		.long	sys_utimes
-/* 270 */	.long	sys_arm_fadvise64_64_wrapper
+/* 270 */	.long	sys_arm_fadvise64_64
 		.long	sys_pciconfig_iobase
 		.long	sys_pciconfig_iobase
 		.long	sys_pciconfig_read
 		.long	sys_pciconfig_read
 		.long	sys_pciconfig_write
 		.long	sys_pciconfig_write
@@ -333,7 +333,7 @@ __syscall_start:
 		.long	sys_inotify_init
 		.long	sys_inotify_init
 		.long	sys_inotify_add_watch
 		.long	sys_inotify_add_watch
 		.long	sys_inotify_rm_watch
 		.long	sys_inotify_rm_watch
-		.long	sys_mbind_wrapper
+		.long	sys_mbind
 /* 320 */	.long	sys_get_mempolicy
 /* 320 */	.long	sys_get_mempolicy
 		.long	sys_set_mempolicy
 		.long	sys_set_mempolicy
 __syscall_end:
 __syscall_end:

+ 49 - 0
arch/arm/kernel/entry-armv.S

@@ -611,6 +611,47 @@ ENTRY(__switch_to)
 	.globl	__kuser_helper_start
 	.globl	__kuser_helper_start
 __kuser_helper_start:
 __kuser_helper_start:
 
 
+/*
+ * Reference prototype:
+ *
+ *	void __kernel_memory_barrier(void)
+ *
+ * Input:
+ *
+ *	lr = return address
+ *
+ * Output:
+ *
+ *	none
+ *
+ * Clobbered:
+ *
+ *	the Z flag might be lost
+ *
+ * Definition and user space usage example:
+ *
+ *	typedef void (__kernel_dmb_t)(void);
+ *	#define __kernel_dmb (*(__kernel_dmb_t *)0xffff0fa0)
+ *
+ * Apply any needed memory barrier to preserve consistency with data modified
+ * manually and __kuser_cmpxchg usage.
+ *
+ * This could be used as follows:
+ *
+ * #define __kernel_dmb() \
+ *         asm volatile ( "mov r0, #0xffff0fff; mov lr, pc; sub pc, r0, #95" \
+ *	        : : : "lr","cc" )
+ */
+
+__kuser_memory_barrier:				@ 0xffff0fa0
+
+#if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP)
+	mcr	p15, 0, r0, c7, c10, 5	@ dmb
+#endif
+	mov	pc, lr
+
+	.align	5
+
 /*
 /*
  * Reference prototype:
  * Reference prototype:
  *
  *
@@ -642,6 +683,8 @@ __kuser_helper_start:
  * The C flag is also set if *ptr was changed to allow for assembly
  * The C flag is also set if *ptr was changed to allow for assembly
  * optimization in the calling code.
  * optimization in the calling code.
  *
  *
+ * Note: this routine already includes memory barriers as needed.
+ *
  * For example, a user space atomic_add implementation could look like this:
  * For example, a user space atomic_add implementation could look like this:
  *
  *
  * #define atomic_add(ptr, val) \
  * #define atomic_add(ptr, val) \
@@ -698,10 +741,16 @@ __kuser_cmpxchg:				@ 0xffff0fc0
 
 
 #else
 #else
 
 
+#ifdef CONFIG_SMP
+	mcr	p15, 0, r0, c7, c10, 5	@ dmb
+#endif
 	ldrex	r3, [r2]
 	ldrex	r3, [r2]
 	subs	r3, r3, r0
 	subs	r3, r3, r0
 	strexeq	r3, r1, [r2]
 	strexeq	r3, r1, [r2]
 	rsbs	r0, r3, #0
 	rsbs	r0, r3, #0
+#ifdef CONFIG_SMP
+	mcr	p15, 0, r0, c7, c10, 5	@ dmb
+#endif
 	mov	pc, lr
 	mov	pc, lr
 
 
 #endif
 #endif

+ 2 - 18
arch/arm/kernel/entry-common.S

@@ -145,7 +145,7 @@ ENTRY(vector_swi)
 #endif
 #endif
 	enable_irq
 	enable_irq
 
 
-	str	r4, [sp, #-S_OFF]!		@ push fifth arg
+	stmdb	sp!, {r4, r5}			@ push fifth and sixth args
 
 
 	get_thread_info tsk
 	get_thread_info tsk
 	ldr	ip, [tsk, #TI_FLAGS]		@ check for syscall tracing
 	ldr	ip, [tsk, #TI_FLAGS]		@ check for syscall tracing
@@ -204,7 +204,7 @@ ENTRY(sys_call_table)
  * Special system call wrappers
  * Special system call wrappers
  */
  */
 @ r0 = syscall number
 @ r0 = syscall number
-@ r5 = syscall table
+@ r8 = syscall table
 		.type	sys_syscall, #function
 		.type	sys_syscall, #function
 sys_syscall:
 sys_syscall:
 		eor	scno, r0, #__NR_SYSCALL_BASE
 		eor	scno, r0, #__NR_SYSCALL_BASE
@@ -255,22 +255,6 @@ sys_sigaltstack_wrapper:
 		ldr	r2, [sp, #S_OFF + S_SP]
 		ldr	r2, [sp, #S_OFF + S_SP]
 		b	do_sigaltstack
 		b	do_sigaltstack
 
 
-sys_futex_wrapper:
-		str	r5, [sp, #4]		@ push sixth arg
-		b	sys_futex
-
-sys_arm_fadvise64_64_wrapper:
-		str	r5, [sp, #4]		@ push r5 to stack
-		b	sys_arm_fadvise64_64
-
-sys_mbind_wrapper:
-		str	r5, [sp, #4]
-		b	sys_mbind
-
-sys_ipc_wrapper:
-		str	r5, [sp, #4]		@ push sixth arg
-		b	sys_ipc
-
 /*
 /*
  * Note: off_4k (r5) is always units of 4K.  If we can't do the requested
  * Note: off_4k (r5) is always units of 4K.  If we can't do the requested
  * offset, we return EINVAL.
  * offset, we return EINVAL.

+ 1 - 1
arch/i386/mm/ioremap.c

@@ -245,7 +245,7 @@ void iounmap(volatile void __iomem *addr)
 			addr < phys_to_virt(ISA_END_ADDRESS))
 			addr < phys_to_virt(ISA_END_ADDRESS))
 		return;
 		return;
 
 
-	addr = (volatile void *)(PAGE_MASK & (unsigned long __force)addr);
+	addr = (volatile void __iomem *)(PAGE_MASK & (unsigned long __force)addr);
 
 
 	/* Use the vm area unlocked, assuming the caller
 	/* Use the vm area unlocked, assuming the caller
 	   ensures there isn't another iounmap for the same address
 	   ensures there isn't another iounmap for the same address

+ 1 - 1
arch/i386/pci/Makefile

@@ -1,7 +1,7 @@
 obj-y				:= i386.o
 obj-y				:= i386.o
 
 
 obj-$(CONFIG_PCI_BIOS)		+= pcbios.o
 obj-$(CONFIG_PCI_BIOS)		+= pcbios.o
-obj-$(CONFIG_PCI_MMCONFIG)	+= mmconfig.o
+obj-$(CONFIG_PCI_MMCONFIG)	+= mmconfig.o direct.o
 obj-$(CONFIG_PCI_DIRECT)	+= direct.o
 obj-$(CONFIG_PCI_DIRECT)	+= direct.o
 
 
 pci-y				:= fixup.o
 pci-y				:= fixup.o

+ 1 - 1
arch/i386/pci/mmconfig.c

@@ -155,7 +155,7 @@ static __init void unreachable_devices(void)
 		addr = get_base_addr(0, 0, PCI_DEVFN(i, 0));
 		addr = get_base_addr(0, 0, PCI_DEVFN(i, 0));
 		if (addr != 0)
 		if (addr != 0)
 			pci_exp_set_dev_base(addr, 0, PCI_DEVFN(i, 0));
 			pci_exp_set_dev_base(addr, 0, PCI_DEVFN(i, 0));
-		if (addr == 0 || readl((u32 *)addr) != val1)
+		if (addr == 0 || readl((u32 __iomem *)mmcfg_virt_addr) != val1)
 			set_bit(i, fallback_slots);
 			set_bit(i, fallback_slots);
 		spin_unlock_irqrestore(&pci_config_lock, flags);
 		spin_unlock_irqrestore(&pci_config_lock, flags);
 	}
 	}

+ 1 - 1
arch/ia64/configs/sn2_defconfig

@@ -113,7 +113,7 @@ CONFIG_IOSAPIC=y
 CONFIG_IA64_SGI_SN_XP=m
 CONFIG_IA64_SGI_SN_XP=m
 CONFIG_FORCE_MAX_ZONEORDER=17
 CONFIG_FORCE_MAX_ZONEORDER=17
 CONFIG_SMP=y
 CONFIG_SMP=y
-CONFIG_NR_CPUS=512
+CONFIG_NR_CPUS=1024
 # CONFIG_HOTPLUG_CPU is not set
 # CONFIG_HOTPLUG_CPU is not set
 CONFIG_SCHED_SMT=y
 CONFIG_SCHED_SMT=y
 CONFIG_PREEMPT=y
 CONFIG_PREEMPT=y

+ 29 - 0
arch/ia64/kernel/time.c

@@ -249,3 +249,32 @@ time_init (void)
 	 */
 	 */
 	set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec);
 	set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec);
 }
 }
+
+#define SMALLUSECS 100
+
+void
+udelay (unsigned long usecs)
+{
+	unsigned long start;
+	unsigned long cycles;
+	unsigned long smallusecs;
+
+	/*
+	 * Execute the non-preemptible delay loop (because the ITC might
+	 * not be synchronized between CPUS) in relatively short time
+	 * chunks, allowing preemption between the chunks.
+	 */
+	while (usecs > 0) {
+		smallusecs = (usecs > SMALLUSECS) ? SMALLUSECS : usecs;
+		preempt_disable();
+		cycles = smallusecs*local_cpu_data->cyc_per_usec;
+		start = ia64_get_itc();
+
+		while (ia64_get_itc() - start < cycles)
+			cpu_relax();
+
+		preempt_enable();
+		usecs -= smallusecs;
+	}
+}
+EXPORT_SYMBOL(udelay);

+ 3 - 3
arch/ia64/kernel/uncached.c

@@ -53,7 +53,7 @@ static void uncached_ipi_visibility(void *data)
 	if ((status != PAL_VISIBILITY_OK) &&
 	if ((status != PAL_VISIBILITY_OK) &&
 	    (status != PAL_VISIBILITY_OK_REMOTE_NEEDED))
 	    (status != PAL_VISIBILITY_OK_REMOTE_NEEDED))
 		printk(KERN_DEBUG "pal_prefetch_visibility() returns %i on "
 		printk(KERN_DEBUG "pal_prefetch_visibility() returns %i on "
-		       "CPU %i\n", status, get_cpu());
+		       "CPU %i\n", status, raw_smp_processor_id());
 }
 }
 
 
 
 
@@ -63,7 +63,7 @@ static void uncached_ipi_mc_drain(void *data)
 	status = ia64_pal_mc_drain();
 	status = ia64_pal_mc_drain();
 	if (status)
 	if (status)
 		printk(KERN_WARNING "ia64_pal_mc_drain() failed with %i on "
 		printk(KERN_WARNING "ia64_pal_mc_drain() failed with %i on "
-		       "CPU %i\n", status, get_cpu());
+		       "CPU %i\n", status, raw_smp_processor_id());
 }
 }
 
 
 
 
@@ -105,7 +105,7 @@ uncached_get_new_chunk(struct gen_pool *poolp)
 	status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL);
 	status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL);
 
 
 	dprintk(KERN_INFO "pal_prefetch_visibility() returns %i on cpu %i\n",
 	dprintk(KERN_INFO "pal_prefetch_visibility() returns %i on cpu %i\n",
-		status, get_cpu());
+		status, raw_smp_processor_id());
 
 
 	if (!status) {
 	if (!status) {
 		status = smp_call_function(uncached_ipi_visibility, NULL, 0, 1);
 		status = smp_call_function(uncached_ipi_visibility, NULL, 0, 1);

+ 3 - 0
arch/ia64/kernel/vmlinux.lds.S

@@ -177,6 +177,9 @@ SECTIONS
 	}
 	}
   . = ALIGN(PAGE_SIZE);		/* make sure the gate page doesn't expose kernel data */
   . = ALIGN(PAGE_SIZE);		/* make sure the gate page doesn't expose kernel data */
 
 
+  .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET)
+        { *(.data.read_mostly) }
+
   .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET)
   .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET)
         { *(.data.cacheline_aligned) }
         { *(.data.cacheline_aligned) }
 
 

+ 1 - 1
arch/ia64/sn/kernel/sn2/sn2_smp.c

@@ -202,7 +202,7 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
 		     unsigned long end, unsigned long nbits)
 		     unsigned long end, unsigned long nbits)
 {
 {
 	int i, opt, shub1, cnode, mynasid, cpu, lcpu = 0, nasid, flushed = 0;
 	int i, opt, shub1, cnode, mynasid, cpu, lcpu = 0, nasid, flushed = 0;
-	int mymm = (mm == current->active_mm);
+	int mymm = (mm == current->active_mm && current->mm);
 	volatile unsigned long *ptc0, *ptc1;
 	volatile unsigned long *ptc0, *ptc1;
 	unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value;
 	unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value;
 	short nasids[MAX_NUMNODES], nix;
 	short nasids[MAX_NUMNODES], nix;

+ 24 - 24
arch/ia64/sn/pci/pcibr/pcibr_reg.c

@@ -25,7 +25,7 @@ union br_ptr {
  */
  */
 void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
 void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
 		switch (pcibus_info->pbi_bridge_type) {
 		switch (pcibus_info->pbi_bridge_type) {
@@ -38,14 +38,14 @@ void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_control_bit_clr: unknown bridgetype bridge 0x%p",
 			    ("pcireg_control_bit_clr: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 }
 }
 
 
 void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
 void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
 		switch (pcibus_info->pbi_bridge_type) {
 		switch (pcibus_info->pbi_bridge_type) {
@@ -58,7 +58,7 @@ void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_control_bit_set: unknown bridgetype bridge 0x%p",
 			    ("pcireg_control_bit_set: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 }
 }
@@ -68,7 +68,7 @@ void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
  */
  */
 uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
 uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 	uint64_t ret = 0;
 	uint64_t ret = 0;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
@@ -82,7 +82,7 @@ uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_tflush_get: unknown bridgetype bridge 0x%p",
 			    ("pcireg_tflush_get: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 
 
@@ -98,7 +98,7 @@ uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
  */
  */
 uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
 uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 	uint64_t ret = 0;
 	uint64_t ret = 0;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
@@ -112,7 +112,7 @@ uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_intr_status_get: unknown bridgetype bridge 0x%p",
 			    ("pcireg_intr_status_get: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 	return ret;
 	return ret;
@@ -123,7 +123,7 @@ uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
  */
  */
 void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
 void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
 		switch (pcibus_info->pbi_bridge_type) {
 		switch (pcibus_info->pbi_bridge_type) {
@@ -136,14 +136,14 @@ void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_intr_enable_bit_clr: unknown bridgetype bridge 0x%p",
 			    ("pcireg_intr_enable_bit_clr: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 }
 }
 
 
 void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
 void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
 		switch (pcibus_info->pbi_bridge_type) {
 		switch (pcibus_info->pbi_bridge_type) {
@@ -156,7 +156,7 @@ void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_intr_enable_bit_set: unknown bridgetype bridge 0x%p",
 			    ("pcireg_intr_enable_bit_set: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 }
 }
@@ -167,7 +167,7 @@ void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
 void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
 void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
 			       uint64_t addr)
 			       uint64_t addr)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
 		switch (pcibus_info->pbi_bridge_type) {
 		switch (pcibus_info->pbi_bridge_type) {
@@ -186,7 +186,7 @@ void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_intr_addr_addr_get: unknown bridgetype bridge 0x%p",
 			    ("pcireg_intr_addr_addr_get: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 }
 }
@@ -196,7 +196,7 @@ void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
  */
  */
 void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
 void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
 		switch (pcibus_info->pbi_bridge_type) {
 		switch (pcibus_info->pbi_bridge_type) {
@@ -209,7 +209,7 @@ void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_force_intr_set: unknown bridgetype bridge 0x%p",
 			    ("pcireg_force_intr_set: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 }
 }
@@ -219,7 +219,7 @@ void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
  */
  */
 uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
 uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 	uint64_t ret = 0;
 	uint64_t ret = 0;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
@@ -233,7 +233,7 @@ uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
 			    __sn_readq_relaxed(&ptr->pic.p_wr_req_buf[device]);
 			    __sn_readq_relaxed(&ptr->pic.p_wr_req_buf[device]);
 			break;
 			break;
 		default:
 		default:
-		      panic("pcireg_wrb_flush_get: unknown bridgetype bridge 0x%p", (void *)ptr);
+		      panic("pcireg_wrb_flush_get: unknown bridgetype bridge 0x%p", ptr);
 		}
 		}
 
 
 	}
 	}
@@ -244,7 +244,7 @@ uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
 void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index,
 void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index,
 			uint64_t val)
 			uint64_t val)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
 		switch (pcibus_info->pbi_bridge_type) {
 		switch (pcibus_info->pbi_bridge_type) {
@@ -257,15 +257,15 @@ void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index,
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_int_ate_set: unknown bridgetype bridge 0x%p",
 			    ("pcireg_int_ate_set: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 }
 }
 
 
-uint64_t *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index)
+uint64_t __iomem *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index)
 {
 {
-	union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base;
-	uint64_t *ret = (uint64_t *) 0;
+	union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
+	uint64_t __iomem *ret = NULL;
 
 
 	if (pcibus_info) {
 	if (pcibus_info) {
 		switch (pcibus_info->pbi_bridge_type) {
 		switch (pcibus_info->pbi_bridge_type) {
@@ -278,7 +278,7 @@ uint64_t *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index)
 		default:
 		default:
 			panic
 			panic
 			    ("pcireg_int_ate_addr: unknown bridgetype bridge 0x%p",
 			    ("pcireg_int_ate_addr: unknown bridgetype bridge 0x%p",
-			     (void *)ptr);
+			     ptr);
 		}
 		}
 	}
 	}
 	return ret;
 	return ret;

+ 6 - 6
arch/ia64/sn/pci/tioca_provider.c

@@ -38,10 +38,10 @@ tioca_gart_init(struct tioca_kernel *tioca_kern)
 	uint64_t offset;
 	uint64_t offset;
 	struct page *tmp;
 	struct page *tmp;
 	struct tioca_common *tioca_common;
 	struct tioca_common *tioca_common;
-	struct tioca *ca_base;
+	struct tioca __iomem *ca_base;
 
 
 	tioca_common = tioca_kern->ca_common;
 	tioca_common = tioca_kern->ca_common;
-	ca_base = (struct tioca *)tioca_common->ca_common.bs_base;
+	ca_base = (struct tioca __iomem *)tioca_common->ca_common.bs_base;
 
 
 	if (list_empty(tioca_kern->ca_devices))
 	if (list_empty(tioca_kern->ca_devices))
 		return 0;
 		return 0;
@@ -215,7 +215,7 @@ tioca_fastwrite_enable(struct tioca_kernel *tioca_kern)
 {
 {
 	int cap_ptr;
 	int cap_ptr;
 	uint32_t reg;
 	uint32_t reg;
-	struct tioca *tioca_base;
+	struct tioca __iomem *tioca_base;
 	struct pci_dev *pdev;
 	struct pci_dev *pdev;
 	struct tioca_common *common;
 	struct tioca_common *common;
 
 
@@ -257,7 +257,7 @@ tioca_fastwrite_enable(struct tioca_kernel *tioca_kern)
 	 * Set ca's fw to match
 	 * Set ca's fw to match
 	 */
 	 */
 
 
-	tioca_base = (struct tioca *)common->ca_common.bs_base;
+	tioca_base = (struct tioca __iomem*)common->ca_common.bs_base;
 	__sn_setq_relaxed(&tioca_base->ca_control1, CA_AGP_FW_ENABLE);
 	__sn_setq_relaxed(&tioca_base->ca_control1, CA_AGP_FW_ENABLE);
 }
 }
 
 
@@ -322,7 +322,7 @@ static uint64_t
 tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr)
 tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr)
 {
 {
 	struct tioca_common *tioca_common;
 	struct tioca_common *tioca_common;
-	struct tioca *ca_base;
+	struct tioca __iomem *ca_base;
 	uint64_t ct_addr;
 	uint64_t ct_addr;
 	dma_addr_t bus_addr;
 	dma_addr_t bus_addr;
 	uint32_t node_upper;
 	uint32_t node_upper;
@@ -330,7 +330,7 @@ tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr)
 	struct pcidev_info *pcidev_info = SN_PCIDEV_INFO(pdev);
 	struct pcidev_info *pcidev_info = SN_PCIDEV_INFO(pdev);
 
 
 	tioca_common = (struct tioca_common *)pcidev_info->pdi_pcibus_info;
 	tioca_common = (struct tioca_common *)pcidev_info->pdi_pcibus_info;
-	ca_base = (struct tioca *)tioca_common->ca_common.bs_base;
+	ca_base = (struct tioca __iomem *)tioca_common->ca_common.bs_base;
 
 
 	ct_addr = PHYS_TO_TIODMA(paddr);
 	ct_addr = PHYS_TO_TIODMA(paddr);
 	if (!ct_addr)
 	if (!ct_addr)

+ 4 - 3
arch/powerpc/configs/cell_defconfig

@@ -1,7 +1,7 @@
 #
 #
 # Automatically generated make config: don't edit
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1
-# Tue Nov 15 14:36:20 2005
+# Linux kernel version: 2.6.15-rc5
+# Tue Dec 20 15:59:26 2005
 #
 #
 CONFIG_PPC64=y
 CONFIG_PPC64=y
 CONFIG_64BIT=y
 CONFIG_64BIT=y
@@ -53,6 +53,7 @@ CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 # CONFIG_IKCONFIG is not set
 # CONFIG_CPUSETS is not set
 # CONFIG_CPUSETS is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_ALL is not set
@@ -151,7 +152,7 @@ CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
 # CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_PPC_64K_PAGES is not set
 CONFIG_SCHED_SMT=y
 CONFIG_SCHED_SMT=y
 CONFIG_PROC_DEVICETREE=y
 CONFIG_PROC_DEVICETREE=y

+ 5 - 4
arch/powerpc/configs/g5_defconfig

@@ -1,7 +1,7 @@
 #
 #
 # Automatically generated make config: don't edit
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1
-# Tue Nov 15 14:39:20 2005
+# Linux kernel version: 2.6.15-rc5
+# Tue Dec 20 15:59:30 2005
 #
 #
 CONFIG_PPC64=y
 CONFIG_PPC64=y
 CONFIG_64BIT=y
 CONFIG_64BIT=y
@@ -53,6 +53,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_IKCONFIG_PROC=y
 # CONFIG_CPUSETS is not set
 # CONFIG_CPUSETS is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_ALL is not set
@@ -162,7 +163,7 @@ CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
 # CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_SCHED_SMT is not set
 # CONFIG_SCHED_SMT is not set
 CONFIG_PROC_DEVICETREE=y
 CONFIG_PROC_DEVICETREE=y
@@ -1203,6 +1204,7 @@ CONFIG_USB_MON=y
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
 CONFIG_USB_SERIAL_GENERIC=y
 # CONFIG_USB_SERIAL_AIRPRIME is not set
 # CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
 CONFIG_USB_SERIAL_BELKIN=m
 CONFIG_USB_SERIAL_BELKIN=m
 CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
 CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
 # CONFIG_USB_SERIAL_CP2101 is not set
 # CONFIG_USB_SERIAL_CP2101 is not set
@@ -1233,7 +1235,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
 CONFIG_USB_SERIAL_KLSI=m
 CONFIG_USB_SERIAL_KLSI=m
 CONFIG_USB_SERIAL_KOBIL_SCT=m
 CONFIG_USB_SERIAL_KOBIL_SCT=m
 CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NOKIA_DKU2 is not set
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_PL2303=m
 # CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_HP4X is not set
 CONFIG_USB_SERIAL_SAFE=m
 CONFIG_USB_SERIAL_SAFE=m

+ 4 - 3
arch/powerpc/configs/iseries_defconfig

@@ -1,7 +1,7 @@
 #
 #
 # Automatically generated make config: don't edit
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1
-# Tue Nov 15 14:38:09 2005
+# Linux kernel version: 2.6.15-rc5
+# Tue Dec 20 15:59:32 2005
 #
 #
 CONFIG_PPC64=y
 CONFIG_PPC64=y
 CONFIG_64BIT=y
 CONFIG_64BIT=y
@@ -55,6 +55,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_IKCONFIG_PROC=y
 # CONFIG_CPUSETS is not set
 # CONFIG_CPUSETS is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_ALL is not set
@@ -144,7 +145,7 @@ CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
 # CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_SCHED_SMT is not set
 # CONFIG_SCHED_SMT is not set
 CONFIG_PROC_DEVICETREE=y
 CONFIG_PROC_DEVICETREE=y

+ 5 - 5
arch/powerpc/configs/maple_defconfig

@@ -1,7 +1,7 @@
 #
 #
 # Automatically generated make config: don't edit
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1
-# Tue Nov 15 14:38:58 2005
+# Linux kernel version: 2.6.15-rc5
+# Tue Dec 20 15:59:36 2005
 #
 #
 CONFIG_PPC64=y
 CONFIG_PPC64=y
 CONFIG_64BIT=y
 CONFIG_64BIT=y
@@ -53,6 +53,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_IKCONFIG_PROC=y
 # CONFIG_CPUSETS is not set
 # CONFIG_CPUSETS is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS_ALL=y
 CONFIG_KALLSYMS_ALL=y
@@ -149,7 +150,7 @@ CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
 # CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_SCHED_SMT is not set
 # CONFIG_SCHED_SMT is not set
 CONFIG_PROC_DEVICETREE=y
 CONFIG_PROC_DEVICETREE=y
@@ -242,7 +243,6 @@ CONFIG_TCP_CONG_BIC=y
 # QoS and/or fair queueing
 # QoS and/or fair queueing
 #
 #
 # CONFIG_NET_SCHED is not set
 # CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
 
 
 #
 #
 # Network testing
 # Network testing
@@ -794,6 +794,7 @@ CONFIG_USB_SERIAL=y
 # CONFIG_USB_SERIAL_CONSOLE is not set
 # CONFIG_USB_SERIAL_CONSOLE is not set
 CONFIG_USB_SERIAL_GENERIC=y
 CONFIG_USB_SERIAL_GENERIC=y
 # CONFIG_USB_SERIAL_AIRPRIME is not set
 # CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
 # CONFIG_USB_SERIAL_BELKIN is not set
 # CONFIG_USB_SERIAL_BELKIN is not set
 # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
 # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
 # CONFIG_USB_SERIAL_CP2101 is not set
 # CONFIG_USB_SERIAL_CP2101 is not set
@@ -824,7 +825,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
 # CONFIG_USB_SERIAL_KLSI is not set
 # CONFIG_USB_SERIAL_KLSI is not set
 # CONFIG_USB_SERIAL_KOBIL_SCT is not set
 # CONFIG_USB_SERIAL_KOBIL_SCT is not set
 # CONFIG_USB_SERIAL_MCT_U232 is not set
 # CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_NOKIA_DKU2 is not set
 # CONFIG_USB_SERIAL_PL2303 is not set
 # CONFIG_USB_SERIAL_PL2303 is not set
 # CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_SAFE is not set
 # CONFIG_USB_SERIAL_SAFE is not set

+ 4 - 3
arch/powerpc/configs/ppc64_defconfig

@@ -1,7 +1,7 @@
 #
 #
 # Automatically generated make config: don't edit
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1
-# Fri Nov 18 16:23:24 2005
+# Linux kernel version: 2.6.15-rc5
+# Tue Dec 20 15:59:38 2005
 #
 #
 CONFIG_PPC64=y
 CONFIG_PPC64=y
 CONFIG_64BIT=y
 CONFIG_64BIT=y
@@ -54,6 +54,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_CPUSETS=y
 CONFIG_CPUSETS=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS_ALL=y
 CONFIG_KALLSYMS_ALL=y
@@ -176,7 +177,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
 # CONFIG_SPARSEMEM_STATIC is not set
 # CONFIG_SPARSEMEM_STATIC is not set
 CONFIG_SPARSEMEM_EXTREME=y
 CONFIG_SPARSEMEM_EXTREME=y
 # CONFIG_MEMORY_HOTPLUG is not set
 # CONFIG_MEMORY_HOTPLUG is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_SCHED_SMT is not set
 # CONFIG_SCHED_SMT is not set
 CONFIG_PROC_DEVICETREE=y
 CONFIG_PROC_DEVICETREE=y

+ 4 - 3
arch/powerpc/configs/pseries_defconfig

@@ -1,7 +1,7 @@
 #
 #
 # Automatically generated make config: don't edit
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1
-# Tue Nov 15 14:36:55 2005
+# Linux kernel version: 2.6.15-rc5
+# Tue Dec 20 15:59:40 2005
 #
 #
 CONFIG_PPC64=y
 CONFIG_PPC64=y
 CONFIG_64BIT=y
 CONFIG_64BIT=y
@@ -55,6 +55,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_CPUSETS=y
 CONFIG_CPUSETS=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS_ALL=y
 CONFIG_KALLSYMS_ALL=y
@@ -163,7 +164,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
 # CONFIG_SPARSEMEM_STATIC is not set
 # CONFIG_SPARSEMEM_STATIC is not set
 CONFIG_SPARSEMEM_EXTREME=y
 CONFIG_SPARSEMEM_EXTREME=y
 # CONFIG_MEMORY_HOTPLUG is not set
 # CONFIG_MEMORY_HOTPLUG is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_SPLIT_PTLOCK_CPUS=4
 CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
 CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
 # CONFIG_PPC_64K_PAGES is not set
 # CONFIG_PPC_64K_PAGES is not set
 CONFIG_SCHED_SMT=y
 CONFIG_SCHED_SMT=y

+ 2 - 2
arch/powerpc/kernel/entry_64.S

@@ -183,8 +183,8 @@ syscall_exit_trace_cont:
 	ld	r13,GPR13(r1)		/* returning to usermode */
 	ld	r13,GPR13(r1)		/* returning to usermode */
 1:	ld	r2,GPR2(r1)
 1:	ld	r2,GPR2(r1)
 	li	r12,MSR_RI
 	li	r12,MSR_RI
-	andc	r10,r10,r12
-	mtmsrd	r10,1			/* clear MSR.RI */
+	andc	r11,r10,r12
+	mtmsrd	r11,1			/* clear MSR.RI */
 	ld	r1,GPR1(r1)
 	ld	r1,GPR1(r1)
 	mtlr	r4
 	mtlr	r4
 	mtcr	r5
 	mtcr	r5

+ 1 - 1
arch/powerpc/kernel/syscalls.c

@@ -247,7 +247,7 @@ long ppc64_personality(unsigned long personality)
 #define OVERRIDE_MACHINE    0
 #define OVERRIDE_MACHINE    0
 #endif
 #endif
 
 
-static inline int override_machine(char *mach)
+static inline int override_machine(char __user *mach)
 {
 {
 	if (OVERRIDE_MACHINE) {
 	if (OVERRIDE_MACHINE) {
 		/* change ppc64 to ppc */
 		/* change ppc64 to ppc */

+ 2 - 1
arch/ppc/platforms/85xx/mpc85xx_cds_common.c

@@ -130,10 +130,11 @@ mpc85xx_cds_show_cpuinfo(struct seq_file *m)
 }
 }
 
 
 #ifdef CONFIG_CPM2
 #ifdef CONFIG_CPM2
-static void cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs)
 {
 {
 	while((irq = cpm2_get_irq(regs)) >= 0)
 	while((irq = cpm2_get_irq(regs)) >= 0)
 		__do_IRQ(irq, regs);
 		__do_IRQ(irq, regs);
+	return IRQ_HANDLED;
 }
 }
 
 
 static struct irqaction cpm2_irqaction = {
 static struct irqaction cpm2_irqaction = {

+ 1 - 0
arch/ppc/syslib/ppc4xx_dma.c

@@ -30,6 +30,7 @@
 
 
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/io.h>
 #include <asm/io.h>
+#include <asm/dma.h>
 #include <asm/ppc4xx_dma.h>
 #include <asm/ppc4xx_dma.h>
 
 
 ppc_dma_ch_t dma_channels[MAX_PPC4xx_DMA_CHANNELS];
 ppc_dma_ch_t dma_channels[MAX_PPC4xx_DMA_CHANNELS];

+ 12 - 12
arch/sparc/kernel/ebus.c

@@ -22,7 +22,7 @@
 #include <asm/oplib.h>
 #include <asm/oplib.h>
 #include <asm/bpp.h>
 #include <asm/bpp.h>
 
 
-struct linux_ebus *ebus_chain = 0;
+struct linux_ebus *ebus_chain = NULL;
 
 
 /* We are together with pcic.c under CONFIG_PCI. */
 /* We are together with pcic.c under CONFIG_PCI. */
 extern unsigned int pcic_pin_to_irq(unsigned int, char *name);
 extern unsigned int pcic_pin_to_irq(unsigned int, char *name);
@@ -46,7 +46,7 @@ static struct ebus_device_irq je1_1[] = {
 	{ "SUNW,CS4231",	 0 },
 	{ "SUNW,CS4231",	 0 },
 	{ "parallel",		 0 },
 	{ "parallel",		 0 },
 	{ "se",			 2 },
 	{ "se",			 2 },
-	{ 0, 0 }
+	{ NULL, 0 }
 };
 };
 
 
 /*
 /*
@@ -55,7 +55,7 @@ static struct ebus_device_irq je1_1[] = {
  */
  */
 static struct ebus_system_entry ebus_blacklist[] = {
 static struct ebus_system_entry ebus_blacklist[] = {
 	{ "SUNW,JavaEngine1", je1_1 },
 	{ "SUNW,JavaEngine1", je1_1 },
-	{ 0, 0 }
+	{ NULL, NULL }
 };
 };
 
 
 static struct ebus_device_irq *ebus_blackp = NULL;
 static struct ebus_device_irq *ebus_blackp = NULL;
@@ -233,7 +233,7 @@ void __init fill_ebus_device(int node, struct linux_ebus_device *dev)
 			ebus_alloc(sizeof(struct linux_ebus_child));
 			ebus_alloc(sizeof(struct linux_ebus_child));
 
 
 		child = dev->children;
 		child = dev->children;
-		child->next = 0;
+		child->next = NULL;
 		child->parent = dev;
 		child->parent = dev;
 		child->bus = dev->bus;
 		child->bus = dev->bus;
 		fill_ebus_child(node, &regs[0], child);
 		fill_ebus_child(node, &regs[0], child);
@@ -243,7 +243,7 @@ void __init fill_ebus_device(int node, struct linux_ebus_device *dev)
 				ebus_alloc(sizeof(struct linux_ebus_child));
 				ebus_alloc(sizeof(struct linux_ebus_child));
 
 
 			child = child->next;
 			child = child->next;
-			child->next = 0;
+			child->next = NULL;
 			child->parent = dev;
 			child->parent = dev;
 			child->bus = dev->bus;
 			child->bus = dev->bus;
 			fill_ebus_child(node, &regs[0], child);
 			fill_ebus_child(node, &regs[0], child);
@@ -275,7 +275,7 @@ void __init ebus_init(void)
 		}
 		}
 	}
 	}
 
 
-	pdev = pci_get_device(PCI_VENDOR_ID_SUN, PCI_DEVICE_ID_SUN_EBUS, 0);
+	pdev = pci_get_device(PCI_VENDOR_ID_SUN, PCI_DEVICE_ID_SUN_EBUS, NULL);
 	if (!pdev) {
 	if (!pdev) {
 		return;
 		return;
 	}
 	}
@@ -284,7 +284,7 @@ void __init ebus_init(void)
 
 
 	ebus_chain = ebus = (struct linux_ebus *)
 	ebus_chain = ebus = (struct linux_ebus *)
 			ebus_alloc(sizeof(struct linux_ebus));
 			ebus_alloc(sizeof(struct linux_ebus));
-	ebus->next = 0;
+	ebus->next = NULL;
 
 
 	while (ebusnd) {
 	while (ebusnd) {
 
 
@@ -325,8 +325,8 @@ void __init ebus_init(void)
 				ebus_alloc(sizeof(struct linux_ebus_device));
 				ebus_alloc(sizeof(struct linux_ebus_device));
 
 
 		dev = ebus->devices;
 		dev = ebus->devices;
-		dev->next = 0;
-		dev->children = 0;
+		dev->next = NULL;
+		dev->children = NULL;
 		dev->bus = ebus;
 		dev->bus = ebus;
 		fill_ebus_device(nd, dev);
 		fill_ebus_device(nd, dev);
 
 
@@ -335,8 +335,8 @@ void __init ebus_init(void)
 				ebus_alloc(sizeof(struct linux_ebus_device));
 				ebus_alloc(sizeof(struct linux_ebus_device));
 
 
 			dev = dev->next;
 			dev = dev->next;
-			dev->next = 0;
-			dev->children = 0;
+			dev->next = NULL;
+			dev->children = NULL;
 			dev->bus = ebus;
 			dev->bus = ebus;
 			fill_ebus_device(nd, dev);
 			fill_ebus_device(nd, dev);
 		}
 		}
@@ -353,7 +353,7 @@ void __init ebus_init(void)
 		ebus->next = (struct linux_ebus *)
 		ebus->next = (struct linux_ebus *)
 			ebus_alloc(sizeof(struct linux_ebus));
 			ebus_alloc(sizeof(struct linux_ebus));
 		ebus = ebus->next;
 		ebus = ebus->next;
-		ebus->next = 0;
+		ebus->next = NULL;
 		++num_ebus;
 		++num_ebus;
 	}
 	}
 	if (pdev)
 	if (pdev)

+ 1 - 1
arch/sparc/kernel/led.c

@@ -55,7 +55,7 @@ static int led_read_proc(char *buf, char **start, off_t offset, int count,
 	return len;
 	return len;
 }
 }
 
 
-static int led_write_proc(struct file *file, const char *buffer,
+static int led_write_proc(struct file *file, const char __user *buffer,
 			  unsigned long count, void *data)
 			  unsigned long count, void *data)
 {
 {
 	char *buf = NULL;
 	char *buf = NULL;

+ 1 - 1
arch/sparc/kernel/pcic.c

@@ -161,7 +161,7 @@ static struct pcic_sn2list pcic_known_sysnames[] = {
 static int pcic0_up;
 static int pcic0_up;
 static struct linux_pcic pcic0;
 static struct linux_pcic pcic0;
 
 
-void * __iomem pcic_regs;
+void __iomem *pcic_regs;
 volatile int pcic_speculative;
 volatile int pcic_speculative;
 volatile int pcic_trapped;
 volatile int pcic_trapped;
 
 

+ 2 - 2
arch/sparc/kernel/time.c

@@ -49,7 +49,7 @@ DEFINE_SPINLOCK(rtc_lock);
 enum sparc_clock_type sp_clock_typ;
 enum sparc_clock_type sp_clock_typ;
 DEFINE_SPINLOCK(mostek_lock);
 DEFINE_SPINLOCK(mostek_lock);
 void __iomem *mstk48t02_regs = NULL;
 void __iomem *mstk48t02_regs = NULL;
-static struct mostek48t08 *mstk48t08_regs = NULL;
+static struct mostek48t08 __iomem *mstk48t08_regs = NULL;
 static int set_rtc_mmss(unsigned long);
 static int set_rtc_mmss(unsigned long);
 static int sbus_do_settimeofday(struct timespec *tv);
 static int sbus_do_settimeofday(struct timespec *tv);
 
 
@@ -342,7 +342,7 @@ static __inline__ void clock_probe(void)
 		/* XXX r/o attribute is somewhere in r.flags */
 		/* XXX r/o attribute is somewhere in r.flags */
 		r.flags = clk_reg[0].which_io;
 		r.flags = clk_reg[0].which_io;
 		r.start = clk_reg[0].phys_addr;
 		r.start = clk_reg[0].phys_addr;
-		mstk48t08_regs = (struct mostek48t08 *) sbus_ioremap(&r, 0,
+		mstk48t08_regs = sbus_ioremap(&r, 0,
 		    sizeof(struct mostek48t08), "mk48t08");
 		    sizeof(struct mostek48t08), "mk48t08");
 
 
 		mstk48t02_regs = &mstk48t08_regs->regs;
 		mstk48t02_regs = &mstk48t08_regs->regs;

+ 1 - 1
arch/sparc/mm/sun4c.c

@@ -497,7 +497,7 @@ static void __init sun4c_probe_mmu(void)
 	patch_kernel_fault_handler();
 	patch_kernel_fault_handler();
 }
 }
 
 
-volatile unsigned long *sun4c_memerr_reg = NULL;
+volatile unsigned long __iomem *sun4c_memerr_reg = NULL;
 
 
 void __init sun4c_probe_memerr_reg(void)
 void __init sun4c_probe_memerr_reg(void)
 {
 {

+ 0 - 5
arch/sparc64/Makefile

@@ -17,7 +17,6 @@ CC		:= $(shell if $(CC) -m64 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then
 NEW_GCC := $(call cc-option-yn, -m64 -mcmodel=medlow)
 NEW_GCC := $(call cc-option-yn, -m64 -mcmodel=medlow)
 NEW_GAS := $(shell if $(LD) -V 2>&1 | grep 'elf64_sparc' > /dev/null; then echo y; else echo n; fi)
 NEW_GAS := $(shell if $(LD) -V 2>&1 | grep 'elf64_sparc' > /dev/null; then echo y; else echo n; fi)
 UNDECLARED_REGS := $(shell if $(CC) -c -x assembler /dev/null -Wa,--help | grep undeclared-regs > /dev/null; then echo y; else echo n; fi; )
 UNDECLARED_REGS := $(shell if $(CC) -c -x assembler /dev/null -Wa,--help | grep undeclared-regs > /dev/null; then echo y; else echo n; fi; )
-INLINE_LIMIT := $(call cc-option-yn, -m64 -finline-limit=100000)
 
 
 export NEW_GCC
 export NEW_GCC
 
 
@@ -49,10 +48,6 @@ else
   AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL)
   AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL)
 endif
 endif
 
 
-ifeq ($(INLINE_LIMIT),y)
-  CFLAGS := $(CFLAGS) -finline-limit=100000
-endif
-
 ifeq ($(CONFIG_MCOUNT),y)
 ifeq ($(CONFIG_MCOUNT),y)
   CFLAGS := $(CFLAGS) -pg
   CFLAGS := $(CFLAGS) -pg
 endif
 endif

+ 2 - 0
arch/um/Kconfig

@@ -289,6 +289,8 @@ source "arch/um/Kconfig.net"
 
 
 source "drivers/net/Kconfig"
 source "drivers/net/Kconfig"
 
 
+source "drivers/connector/Kconfig"
+
 source "fs/Kconfig"
 source "fs/Kconfig"
 
 
 source "security/Kconfig"
 source "security/Kconfig"

+ 4 - 0
arch/um/Makefile-x86_64

@@ -12,3 +12,7 @@ CHECKFLAGS  += -m64
 
 
 ELF_ARCH := i386:x86-64
 ELF_ARCH := i386:x86-64
 ELF_FORMAT := elf64-x86-64
 ELF_FORMAT := elf64-x86-64
+
+# Not on all 64-bit distros /lib is a symlink to /lib64. PLD is an example.
+
+LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64

+ 16 - 13
arch/um/include/sysdep-i386/stub.h

@@ -6,8 +6,12 @@
 #ifndef __SYSDEP_STUB_H
 #ifndef __SYSDEP_STUB_H
 #define __SYSDEP_STUB_H
 #define __SYSDEP_STUB_H
 
 
+#include <sys/mman.h>
 #include <asm/ptrace.h>
 #include <asm/ptrace.h>
 #include <asm/unistd.h>
 #include <asm/unistd.h>
+#include "stub-data.h"
+#include "kern_constants.h"
+#include "uml-config.h"
 
 
 extern void stub_segv_handler(int sig);
 extern void stub_segv_handler(int sig);
 extern void stub_clone_handler(void);
 extern void stub_clone_handler(void);
@@ -76,23 +80,22 @@ static inline long stub_syscall5(long syscall, long arg1, long arg2, long arg3,
 	return ret;
 	return ret;
 }
 }
 
 
-static inline long stub_syscall6(long syscall, long arg1, long arg2, long arg3,
-				 long arg4, long arg5, long arg6)
+static inline void trap_myself(void)
 {
 {
-	long ret;
-
-	__asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ; "
-			"int $0x80 ; pop %%ebp"
-			: "=a" (ret)
-			: "g" (syscall), "b" (arg1), "c" (arg2), "d" (arg3),
-			  "S" (arg4), "D" (arg5), "0" (arg6));
-
-	return ret;
+	__asm("int3");
 }
 }
 
 
-static inline void trap_myself(void)
+static inline void remap_stack(int fd, unsigned long offset)
 {
 {
-	__asm("int3");
+	__asm__ volatile ("movl %%eax,%%ebp ; movl %0,%%eax ; int $0x80 ;"
+			  "movl %7, %%ebx ; movl %%eax, (%%ebx)"
+			  : : "g" (STUB_MMAP_NR), "b" (UML_CONFIG_STUB_DATA), 
+			    "c" (UM_KERN_PAGE_SIZE), 
+			    "d" (PROT_READ | PROT_WRITE),
+			    "S" (MAP_FIXED | MAP_SHARED), "D" (fd), 
+			    "a" (offset), 
+			    "i" (&((struct stub_data *) UML_CONFIG_STUB_DATA)->err) 
+			  : "memory");
 }
 }
 
 
 #endif
 #endif

+ 17 - 13
arch/um/include/sysdep-x86_64/stub.h

@@ -6,8 +6,12 @@
 #ifndef __SYSDEP_STUB_H
 #ifndef __SYSDEP_STUB_H
 #define __SYSDEP_STUB_H
 #define __SYSDEP_STUB_H
 
 
+#include <sys/mman.h>
 #include <asm/unistd.h>
 #include <asm/unistd.h>
 #include <sysdep/ptrace_user.h>
 #include <sysdep/ptrace_user.h>
+#include "stub-data.h"
+#include "kern_constants.h"
+#include "uml-config.h"
 
 
 extern void stub_segv_handler(int sig);
 extern void stub_segv_handler(int sig);
 extern void stub_clone_handler(void);
 extern void stub_clone_handler(void);
@@ -81,23 +85,23 @@ static inline long stub_syscall5(long syscall, long arg1, long arg2, long arg3,
 	return ret;
 	return ret;
 }
 }
 
 
-static inline long stub_syscall6(long syscall, long arg1, long arg2, long arg3,
-				 long arg4, long arg5, long arg6)
+static inline void trap_myself(void)
 {
 {
-	long ret;
-
-	__asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; "
-		"movq %7, %%r9; " __syscall : "=a" (ret)
-		: "0" (syscall), "D" (arg1), "S" (arg2), "d" (arg3),
-		  "g" (arg4), "g" (arg5), "g" (arg6)
-		: __syscall_clobber, "r10", "r8", "r9" );
-
-	return ret;
+	__asm("int3");
 }
 }
 
 
-static inline void trap_myself(void)
+static inline void remap_stack(long fd, unsigned long offset)
 {
 {
-	__asm("int3");
+	__asm__ volatile ("movq %4,%%r10 ; movq %5,%%r8 ; "
+			  "movq %6, %%r9; " __syscall "; movq %7, %%rbx ; "
+			  "movq %%rax, (%%rbx)": 
+			  : "a" (STUB_MMAP_NR), "D" (UML_CONFIG_STUB_DATA), 
+			    "S" (UM_KERN_PAGE_SIZE), 
+			    "d" (PROT_READ | PROT_WRITE), 
+                            "g" (MAP_FIXED | MAP_SHARED), "g" (fd), 
+			    "g" (offset),
+			    "i" (&((struct stub_data *) UML_CONFIG_STUB_DATA)->err)
+			  : __syscall_clobber, "r10", "r8", "r9" );
 }
 }
 
 
 #endif
 #endif

+ 13 - 10
arch/um/kernel/skas/clone.c

@@ -18,11 +18,10 @@
  * on some systems.
  * on some systems.
  */
  */
 
 
-#define STUB_DATA(field) (((struct stub_data *) UML_CONFIG_STUB_DATA)->field)
-
 void __attribute__ ((__section__ (".__syscall_stub")))
 void __attribute__ ((__section__ (".__syscall_stub")))
 stub_clone_handler(void)
 stub_clone_handler(void)
 {
 {
+	struct stub_data *data = (struct stub_data *) UML_CONFIG_STUB_DATA;
 	long err;
 	long err;
 
 
 	err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,
 	err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,
@@ -35,17 +34,21 @@ stub_clone_handler(void)
 	if(err)
 	if(err)
 		goto out;
 		goto out;
 
 
-	err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL,
-			    (long) &STUB_DATA(timer), 0);
+	err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL, 
+			    (long) &data->timer, 0);
 	if(err)
 	if(err)
 		goto out;
 		goto out;
 
 
-	err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA,
-			    UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE,
-			    MAP_FIXED | MAP_SHARED, STUB_DATA(fd),
-			    STUB_DATA(offset));
+	remap_stack(data->fd, data->offset);
+	goto done;
+
  out:
  out:
-	/* save current result. Parent: pid; child: retcode of mmap */
-	STUB_DATA(err) = err;
+	/* save current result. 
+	 * Parent: pid; 
+	 * child: retcode of mmap already saved and it jumps around this 
+	 * assignment
+	 */
+	data->err = err;
+ done:
 	trap_myself();
 	trap_myself();
 }
 }

+ 0 - 5
arch/um/scripts/Makefile.rules

@@ -21,11 +21,6 @@ define unprofile
 endef
 endef
 
 
 
 
-# The stubs and unmap.o can't try to call mcount or update basic block data
-define unprofile
-	$(patsubst -pg,,$(patsubst -fprofile-arcs -ftest-coverage,,$(1)))
-endef
-
 # cmd_make_link checks to see if the $(foo-dir) variable starts with a /.  If
 # cmd_make_link checks to see if the $(foo-dir) variable starts with a /.  If
 # so, it's considered to be a path relative to $(srcdir) rather than
 # so, it's considered to be a path relative to $(srcdir) rather than
 # $(srcdir)/arch/$(SUBARCH).  This is because x86_64 wants to get ldt.c from
 # $(srcdir)/arch/$(SUBARCH).  This is because x86_64 wants to get ldt.c from

+ 1 - 1
arch/x86_64/mm/ioremap.c

@@ -263,7 +263,7 @@ void iounmap(volatile void __iomem *addr)
 		addr < phys_to_virt(ISA_END_ADDRESS))
 		addr < phys_to_virt(ISA_END_ADDRESS))
 		return;
 		return;
 
 
-	addr = (volatile void *)(PAGE_MASK & (unsigned long __force)addr);
+	addr = (volatile void __iomem *)(PAGE_MASK & (unsigned long __force)addr);
 	/* Use the vm area unlocked, assuming the caller
 	/* Use the vm area unlocked, assuming the caller
 	   ensures there isn't another iounmap for the same address
 	   ensures there isn't another iounmap for the same address
 	   in parallel. Reuse of the virtual address is prevented by
 	   in parallel. Reuse of the virtual address is prevented by

+ 1 - 1
arch/x86_64/pci/Makefile

@@ -11,7 +11,7 @@ obj-y		+= fixup.o
 obj-$(CONFIG_ACPI)	+= acpi.o
 obj-$(CONFIG_ACPI)	+= acpi.o
 obj-y			+= legacy.o irq.o common.o
 obj-y			+= legacy.o irq.o common.o
 # mmconfig has a 64bit special
 # mmconfig has a 64bit special
-obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o
+obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
 
 
 obj-$(CONFIG_NUMA)	+= k8-bus.o
 obj-$(CONFIG_NUMA)	+= k8-bus.o
 
 

+ 7 - 7
arch/x86_64/pci/mmconfig.c

@@ -18,11 +18,11 @@ static DECLARE_BITMAP(fallback_slots, 32);
 /* Static virtual mapping of the MMCONFIG aperture */
 /* Static virtual mapping of the MMCONFIG aperture */
 struct mmcfg_virt {
 struct mmcfg_virt {
 	struct acpi_table_mcfg_config *cfg;
 	struct acpi_table_mcfg_config *cfg;
-	char *virt;
+	char __iomem *virt;
 };
 };
 static struct mmcfg_virt *pci_mmcfg_virt;
 static struct mmcfg_virt *pci_mmcfg_virt;
 
 
-static char *get_virt(unsigned int seg, unsigned bus)
+static char __iomem *get_virt(unsigned int seg, unsigned bus)
 {
 {
 	int cfg_num = -1;
 	int cfg_num = -1;
 	struct acpi_table_mcfg_config *cfg;
 	struct acpi_table_mcfg_config *cfg;
@@ -43,9 +43,9 @@ static char *get_virt(unsigned int seg, unsigned bus)
 	}
 	}
 }
 }
 
 
-static char *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn)
+static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn)
 {
 {
-	char *addr;
+	char __iomem *addr;
 	if (seg == 0 && bus == 0 && test_bit(PCI_SLOT(devfn), &fallback_slots))
 	if (seg == 0 && bus == 0 && test_bit(PCI_SLOT(devfn), &fallback_slots))
 		return NULL;
 		return NULL;
 	addr = get_virt(seg, bus);
 	addr = get_virt(seg, bus);
@@ -57,7 +57,7 @@ static char *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn
 static int pci_mmcfg_read(unsigned int seg, unsigned int bus,
 static int pci_mmcfg_read(unsigned int seg, unsigned int bus,
 			  unsigned int devfn, int reg, int len, u32 *value)
 			  unsigned int devfn, int reg, int len, u32 *value)
 {
 {
-	char *addr;
+	char __iomem *addr;
 
 
 	/* Why do we have this when nobody checks it. How about a BUG()!? -AK */
 	/* Why do we have this when nobody checks it. How about a BUG()!? -AK */
 	if (unlikely(!value || (bus > 255) || (devfn > 255) || (reg > 4095)))
 	if (unlikely(!value || (bus > 255) || (devfn > 255) || (reg > 4095)))
@@ -85,7 +85,7 @@ static int pci_mmcfg_read(unsigned int seg, unsigned int bus,
 static int pci_mmcfg_write(unsigned int seg, unsigned int bus,
 static int pci_mmcfg_write(unsigned int seg, unsigned int bus,
 			   unsigned int devfn, int reg, int len, u32 value)
 			   unsigned int devfn, int reg, int len, u32 value)
 {
 {
-	char *addr;
+	char __iomem *addr;
 
 
 	/* Why do we have this when nobody checks it. How about a BUG()!? -AK */
 	/* Why do we have this when nobody checks it. How about a BUG()!? -AK */
 	if (unlikely((bus > 255) || (devfn > 255) || (reg > 4095)))
 	if (unlikely((bus > 255) || (devfn > 255) || (reg > 4095)))
@@ -127,7 +127,7 @@ static __init void unreachable_devices(void)
 	int i;
 	int i;
 	for (i = 0; i < 32; i++) {
 	for (i = 0; i < 32; i++) {
 		u32 val1;
 		u32 val1;
-		char *addr;
+		char __iomem *addr;
 
 
 		pci_conf1_read(0, 0, PCI_DEVFN(i,0), 0, 4, &val1);
 		pci_conf1_read(0, 0, PCI_DEVFN(i,0), 0, 4, &val1);
 		if (val1 == 0xffffffff)
 		if (val1 == 0xffffffff)

+ 31 - 14
block/scsi_ioctl.c

@@ -442,11 +442,37 @@ error:
 	return err;
 	return err;
 }
 }
 
 
+
+/* Send basic block requests */
+static int __blk_send_generic(request_queue_t *q, struct gendisk *bd_disk, int cmd, int data)
+{
+	struct request *rq;
+	int err;
+
+	rq = blk_get_request(q, WRITE, __GFP_WAIT);
+	rq->flags |= REQ_BLOCK_PC;
+	rq->data = NULL;
+	rq->data_len = 0;
+	rq->timeout = BLK_DEFAULT_TIMEOUT;
+	memset(rq->cmd, 0, sizeof(rq->cmd));
+	rq->cmd[0] = cmd;
+	rq->cmd[4] = data;
+	rq->cmd_len = 6;
+	err = blk_execute_rq(q, bd_disk, rq, 0);
+	blk_put_request(rq);
+
+	return err;
+}
+
+static inline int blk_send_start_stop(request_queue_t *q, struct gendisk *bd_disk, int data)
+{
+	return __blk_send_generic(q, bd_disk, GPCMD_START_STOP_UNIT, data);
+}
+
 int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd, void __user *arg)
 int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd, void __user *arg)
 {
 {
 	request_queue_t *q;
 	request_queue_t *q;
-	struct request *rq;
-	int close = 0, err;
+	int err;
 
 
 	q = bd_disk->queue;
 	q = bd_disk->queue;
 	if (!q)
 	if (!q)
@@ -564,19 +590,10 @@ int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd,
 			err = sg_scsi_ioctl(file, q, bd_disk, arg);
 			err = sg_scsi_ioctl(file, q, bd_disk, arg);
 			break;
 			break;
 		case CDROMCLOSETRAY:
 		case CDROMCLOSETRAY:
-			close = 1;
+			err = blk_send_start_stop(q, bd_disk, 0x03);
+			break;
 		case CDROMEJECT:
 		case CDROMEJECT:
-			rq = blk_get_request(q, WRITE, __GFP_WAIT);
-			rq->flags |= REQ_BLOCK_PC;
-			rq->data = NULL;
-			rq->data_len = 0;
-			rq->timeout = BLK_DEFAULT_TIMEOUT;
-			memset(rq->cmd, 0, sizeof(rq->cmd));
-			rq->cmd[0] = GPCMD_START_STOP_UNIT;
-			rq->cmd[4] = 0x02 + (close != 0);
-			rq->cmd_len = 6;
-			err = blk_execute_rq(q, bd_disk, rq, 0);
-			blk_put_request(rq);
+			err = blk_send_start_stop(q, bd_disk, 0x02);
 			break;
 			break;
 		default:
 		default:
 			err = -ENOTTY;
 			err = -ENOTTY;

+ 1 - 1
drivers/atm/adummy.c

@@ -123,7 +123,7 @@ static int __init adummy_init(void)
 	}
 	}
 	memset(adummy_dev, 0, sizeof(struct adummy_dev));
 	memset(adummy_dev, 0, sizeof(struct adummy_dev));
 
 
-	atm_dev = atm_dev_register(DEV_LABEL, &adummy_ops, -1, 0);
+	atm_dev = atm_dev_register(DEV_LABEL, &adummy_ops, -1, NULL);
 	if (!atm_dev) {
 	if (!atm_dev) {
 		printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n");
 		printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n");
 		err = -ENODEV;
 		err = -ENODEV;

+ 0 - 1
drivers/base/memory.c

@@ -28,7 +28,6 @@
 static struct sysdev_class memory_sysdev_class = {
 static struct sysdev_class memory_sysdev_class = {
 	set_kset_name(MEMORY_CLASS_NAME),
 	set_kset_name(MEMORY_CLASS_NAME),
 };
 };
-EXPORT_SYMBOL(memory_sysdev_class);
 
 
 static char *memory_hotplug_name(struct kset *kset, struct kobject *kobj)
 static char *memory_hotplug_name(struct kset *kset, struct kobject *kobj)
 {
 {

+ 1 - 1
drivers/char/Kconfig

@@ -687,7 +687,7 @@ config NVRAM
 
 
 config RTC
 config RTC
 	tristate "Enhanced Real Time Clock Support"
 	tristate "Enhanced Real Time Clock Support"
-	depends on !PPC32 && !PARISC && !IA64 && !M68K
+	depends on !PPC32 && !PARISC && !IA64 && !M68K && (!(SPARC32 || SPARC64) || PCI)
 	---help---
 	---help---
 	  If you say Y here and create a character special file /dev/rtc with
 	  If you say Y here and create a character special file /dev/rtc with
 	  major number 10 and minor number 135 using mknod ("man mknod"), you
 	  major number 10 and minor number 135 using mknod ("man mknod"), you

+ 8 - 3
drivers/char/drm/radeon_cp.c

@@ -1311,7 +1311,9 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on)
 
 
 static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
 static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
 {
 {
-	drm_radeon_private_t *dev_priv = dev->dev_private;;
+	drm_radeon_private_t *dev_priv = dev->dev_private;
+	unsigned int mem_size;
+
 	DRM_DEBUG("\n");
 	DRM_DEBUG("\n");
 
 
 	dev_priv->is_pci = init->is_pci;
 	dev_priv->is_pci = init->is_pci;
@@ -1521,8 +1523,11 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
 					  + dev_priv->fb_location) >> 10));
 					  + dev_priv->fb_location) >> 10));
 
 
 	dev_priv->gart_size = init->gart_size;
 	dev_priv->gart_size = init->gart_size;
-	dev_priv->gart_vm_start = dev_priv->fb_location
-	    + RADEON_READ(RADEON_CONFIG_APER_SIZE) * 2;
+
+	mem_size = RADEON_READ(RADEON_CONFIG_MEMSIZE);
+	if (mem_size == 0)
+		mem_size = 0x800000;
+	dev_priv->gart_vm_start = dev_priv->fb_location + mem_size;
 
 
 #if __OS_HAS_AGP
 #if __OS_HAS_AGP
 	if (!dev_priv->is_pci)
 	if (!dev_priv->is_pci)

+ 1 - 0
drivers/char/drm/radeon_drv.h

@@ -379,6 +379,7 @@ extern int r300_do_cp_cmdbuf(drm_device_t * dev, DRMFILE filp,
 #	define RADEON_PLL_WR_EN			(1 << 7)
 #	define RADEON_PLL_WR_EN			(1 << 7)
 #define RADEON_CLOCK_CNTL_INDEX		0x0008
 #define RADEON_CLOCK_CNTL_INDEX		0x0008
 #define RADEON_CONFIG_APER_SIZE		0x0108
 #define RADEON_CONFIG_APER_SIZE		0x0108
+#define RADEON_CONFIG_MEMSIZE		0x00f8
 #define RADEON_CRTC_OFFSET		0x0224
 #define RADEON_CRTC_OFFSET		0x0224
 #define RADEON_CRTC_OFFSET_CNTL		0x0228
 #define RADEON_CRTC_OFFSET_CNTL		0x0228
 #	define RADEON_CRTC_TILE_EN		(1 << 15)
 #	define RADEON_CRTC_TILE_EN		(1 << 15)

+ 4 - 2
drivers/char/ipmi/ipmi_si_intf.c

@@ -2399,7 +2399,8 @@ static int init_one_smi(int intf_num, struct smi_info **smi)
 			new_smi->handlers->cleanup(new_smi->si_sm);
 			new_smi->handlers->cleanup(new_smi->si_sm);
 		kfree(new_smi->si_sm);
 		kfree(new_smi->si_sm);
 	}
 	}
-	new_smi->io_cleanup(new_smi);
+	if (new_smi->io_cleanup)
+		new_smi->io_cleanup(new_smi);
 
 
 	return rv;
 	return rv;
 }
 }
@@ -2518,7 +2519,8 @@ static void __exit cleanup_one_si(struct smi_info *to_clean)
 
 
 	kfree(to_clean->si_sm);
 	kfree(to_clean->si_sm);
 
 
-	to_clean->io_cleanup(to_clean);
+	if (to_clean->io_cleanup)
+		to_clean->io_cleanup(to_clean);
 }
 }
 
 
 static __exit void cleanup_ipmi_si(void)
 static __exit void cleanup_ipmi_si(void)

+ 1 - 1
drivers/char/mwave/mwavepub.h

@@ -69,7 +69,7 @@ typedef struct _MW_ABILITIES {
 typedef struct _MW_READWRITE {
 typedef struct _MW_READWRITE {
 	unsigned short usDspAddress;	/* The dsp address */
 	unsigned short usDspAddress;	/* The dsp address */
 	unsigned long ulDataLength;	/* The size in bytes of the data or user buffer */
 	unsigned long ulDataLength;	/* The size in bytes of the data or user buffer */
-	void *pBuf;		/* Input:variable sized buffer */
+	void __user *pBuf;		/* Input:variable sized buffer */
 } MW_READWRITE, *pMW_READWRITE;
 } MW_READWRITE, *pMW_READWRITE;
 
 
 #define IOCTL_MW_RESET           _IO(MWAVE_MINOR,1)
 #define IOCTL_MW_RESET           _IO(MWAVE_MINOR,1)

+ 7 - 6
drivers/char/pcmcia/cm4000_cs.c

@@ -1444,6 +1444,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
 	dev_link_t *link;
 	dev_link_t *link;
 	int size;
 	int size;
 	int rc;
 	int rc;
+	void __user *argp = (void __user *)arg;
 #ifdef PCMCIA_DEBUG
 #ifdef PCMCIA_DEBUG
 	char *ioctl_names[CM_IOC_MAXNR + 1] = {
 	char *ioctl_names[CM_IOC_MAXNR + 1] = {
 		[_IOC_NR(CM_IOCGSTATUS)] "CM_IOCGSTATUS",
 		[_IOC_NR(CM_IOCGSTATUS)] "CM_IOCGSTATUS",
@@ -1481,11 +1482,11 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
 	      _IOC_DIR(cmd), _IOC_READ, _IOC_WRITE, size, cmd);
 	      _IOC_DIR(cmd), _IOC_READ, _IOC_WRITE, size, cmd);
 
 
 	if (_IOC_DIR(cmd) & _IOC_READ) {
 	if (_IOC_DIR(cmd) & _IOC_READ) {
-		if (!access_ok(VERIFY_WRITE, (void *)arg, size))
+		if (!access_ok(VERIFY_WRITE, argp, size))
 			return -EFAULT;
 			return -EFAULT;
 	}
 	}
 	if (_IOC_DIR(cmd) & _IOC_WRITE) {
 	if (_IOC_DIR(cmd) & _IOC_WRITE) {
-		if (!access_ok(VERIFY_READ, (void *)arg, size))
+		if (!access_ok(VERIFY_READ, argp, size))
 			return -EFAULT;
 			return -EFAULT;
 	}
 	}
 
 
@@ -1506,14 +1507,14 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
 				status |= CM_NO_READER;
 				status |= CM_NO_READER;
 			if (test_bit(IS_BAD_CARD, &dev->flags))
 			if (test_bit(IS_BAD_CARD, &dev->flags))
 				status |= CM_BAD_CARD;
 				status |= CM_BAD_CARD;
-			if (copy_to_user((int *)arg, &status, sizeof(int)))
+			if (copy_to_user(argp, &status, sizeof(int)))
 				return -EFAULT;
 				return -EFAULT;
 		}
 		}
 		return 0;
 		return 0;
 	case CM_IOCGATR:
 	case CM_IOCGATR:
 		DEBUGP(4, dev, "... in CM_IOCGATR\n");
 		DEBUGP(4, dev, "... in CM_IOCGATR\n");
 		{
 		{
-			struct atreq *atreq = (struct atreq *) arg;
+			struct atreq __user *atreq = argp;
 			int tmp;
 			int tmp;
 			/* allow nonblocking io and being interrupted */
 			/* allow nonblocking io and being interrupted */
 			if (wait_event_interruptible
 			if (wait_event_interruptible
@@ -1597,7 +1598,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
 		{
 		{
 			struct ptsreq krnptsreq;
 			struct ptsreq krnptsreq;
 
 
-			if (copy_from_user(&krnptsreq, (struct ptsreq *) arg,
+			if (copy_from_user(&krnptsreq, argp,
 					   sizeof(struct ptsreq)))
 					   sizeof(struct ptsreq)))
 				return -EFAULT;
 				return -EFAULT;
 
 
@@ -1641,7 +1642,7 @@ static int cmm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
 			int old_pc_debug = 0;
 			int old_pc_debug = 0;
 
 
 			old_pc_debug = pc_debug;
 			old_pc_debug = pc_debug;
-			if (copy_from_user(&pc_debug, (int *)arg, sizeof(int)))
+			if (copy_from_user(&pc_debug, argp, sizeof(int)))
 				return -EFAULT;
 				return -EFAULT;
 
 
 			if (old_pc_debug != pc_debug)
 			if (old_pc_debug != pc_debug)

+ 8 - 7
drivers/char/watchdog/booke_wdt.c

@@ -72,7 +72,7 @@ static __inline__ void booke_wdt_ping(void)
 /*
 /*
  * booke_wdt_write:
  * booke_wdt_write:
  */
  */
-static ssize_t booke_wdt_write (struct file *file, const char *buf,
+static ssize_t booke_wdt_write (struct file *file, const char __user *buf,
 				size_t count, loff_t *ppos)
 				size_t count, loff_t *ppos)
 {
 {
 	booke_wdt_ping();
 	booke_wdt_ping();
@@ -92,14 +92,15 @@ static int booke_wdt_ioctl (struct inode *inode, struct file *file,
 			    unsigned int cmd, unsigned long arg)
 			    unsigned int cmd, unsigned long arg)
 {
 {
 	u32 tmp = 0;
 	u32 tmp = 0;
+	u32 __user *p = (u32 __user *)arg;
 
 
 	switch (cmd) {
 	switch (cmd) {
 	case WDIOC_GETSUPPORT:
 	case WDIOC_GETSUPPORT:
-		if (copy_to_user ((struct watchdog_info *) arg, &ident,
+		if (copy_to_user ((struct watchdog_info __user *) arg, &ident,
 				sizeof(struct watchdog_info)))
 				sizeof(struct watchdog_info)))
 			return -EFAULT;
 			return -EFAULT;
 	case WDIOC_GETSTATUS:
 	case WDIOC_GETSTATUS:
-		return put_user(ident.options, (u32 *) arg);
+		return put_user(ident.options, p);
 	case WDIOC_GETBOOTSTATUS:
 	case WDIOC_GETBOOTSTATUS:
 		/* XXX: something is clearing TSR */
 		/* XXX: something is clearing TSR */
 		tmp = mfspr(SPRN_TSR) & TSR_WRS(3);
 		tmp = mfspr(SPRN_TSR) & TSR_WRS(3);
@@ -109,14 +110,14 @@ static int booke_wdt_ioctl (struct inode *inode, struct file *file,
 		booke_wdt_ping();
 		booke_wdt_ping();
 		return 0;
 		return 0;
 	case WDIOC_SETTIMEOUT:
 	case WDIOC_SETTIMEOUT:
-		if (get_user(booke_wdt_period, (u32 *) arg))
+		if (get_user(booke_wdt_period, p))
 			return -EFAULT;
 			return -EFAULT;
 		mtspr(SPRN_TCR, (mfspr(SPRN_TCR)&~WDTP(0))|WDTP(booke_wdt_period));
 		mtspr(SPRN_TCR, (mfspr(SPRN_TCR)&~WDTP(0))|WDTP(booke_wdt_period));
 		return 0;
 		return 0;
 	case WDIOC_GETTIMEOUT:
 	case WDIOC_GETTIMEOUT:
-		return put_user(booke_wdt_period, (u32 *) arg);
+		return put_user(booke_wdt_period, p);
 	case WDIOC_SETOPTIONS:
 	case WDIOC_SETOPTIONS:
-		if (get_user(tmp, (u32 *) arg))
+		if (get_user(tmp, p))
 			return -EINVAL;
 			return -EINVAL;
 		if (tmp == WDIOS_ENABLECARD) {
 		if (tmp == WDIOS_ENABLECARD) {
 			booke_wdt_ping();
 			booke_wdt_ping();
@@ -172,7 +173,7 @@ static int __init booke_wdt_init(void)
 	int ret = 0;
 	int ret = 0;
 
 
 	printk (KERN_INFO "PowerPC Book-E Watchdog Timer Loaded\n");
 	printk (KERN_INFO "PowerPC Book-E Watchdog Timer Loaded\n");
-	ident.firmware_version = cpu_specs[0].pvr_value;
+	ident.firmware_version = cur_cpu_spec->pvr_value;
 
 
 	ret = misc_register(&booke_wdt_miscdev);
 	ret = misc_register(&booke_wdt_miscdev);
 	if (ret) {
 	if (ret) {

+ 1 - 1
drivers/char/watchdog/wdrtas.c

@@ -320,7 +320,7 @@ static int
 wdrtas_ioctl(struct inode *inode, struct file *file,
 wdrtas_ioctl(struct inode *inode, struct file *file,
 	     unsigned int cmd, unsigned long arg)
 	     unsigned int cmd, unsigned long arg)
 {
 {
-	int __user *argp = (void *)arg;
+	int __user *argp = (void __user *)arg;
 	int i;
 	int i;
 	static struct watchdog_info wdinfo = {
 	static struct watchdog_info wdinfo = {
 		.options = WDRTAS_SUPPORTED_MASK,
 		.options = WDRTAS_SUPPORTED_MASK,

+ 3 - 3
drivers/firmware/dell_rbu.c

@@ -105,8 +105,8 @@ static int create_packet(void *data, size_t length)
 	int ordernum = 0;
 	int ordernum = 0;
 	int retval = 0;
 	int retval = 0;
 	unsigned int packet_array_size = 0;
 	unsigned int packet_array_size = 0;
-	void **invalid_addr_packet_array = 0;
-	void *packet_data_temp_buf = 0;
+	void **invalid_addr_packet_array = NULL;
+	void *packet_data_temp_buf = NULL;
 	unsigned int idx = 0;
 	unsigned int idx = 0;
 
 
 	pr_debug("create_packet: entry \n");
 	pr_debug("create_packet: entry \n");
@@ -178,7 +178,7 @@ static int create_packet(void *data, size_t length)
 						packet_data_temp_buf),
 						packet_data_temp_buf),
 					allocation_floor);
 					allocation_floor);
 			invalid_addr_packet_array[idx++] = packet_data_temp_buf;
 			invalid_addr_packet_array[idx++] = packet_data_temp_buf;
-			packet_data_temp_buf = 0;
+			packet_data_temp_buf = NULL;
 		}
 		}
 	}
 	}
 	spin_lock(&rbu_data.lock);
 	spin_lock(&rbu_data.lock);

+ 6 - 5
drivers/i2c/busses/i2c-mv64xxx.c

@@ -529,14 +529,15 @@ mv64xxx_i2c_probe(struct platform_device *pd)
 	i2c_set_adapdata(&drv_data->adapter, drv_data);
 	i2c_set_adapdata(&drv_data->adapter, drv_data);
 
 
 	if (request_irq(drv_data->irq, mv64xxx_i2c_intr, 0,
 	if (request_irq(drv_data->irq, mv64xxx_i2c_intr, 0,
-		MV64XXX_I2C_CTLR_NAME, drv_data)) {
-
-		dev_err(dev, "mv64xxx: Can't register intr handler "
-			"irq: %d\n", drv_data->irq);
+			MV64XXX_I2C_CTLR_NAME, drv_data)) {
+		dev_err(&drv_data->adapter.dev,
+			"mv64xxx: Can't register intr handler irq: %d\n",
+			drv_data->irq);
 		rc = -EINVAL;
 		rc = -EINVAL;
 		goto exit_unmap_regs;
 		goto exit_unmap_regs;
 	} else if ((rc = i2c_add_adapter(&drv_data->adapter)) != 0) {
 	} else if ((rc = i2c_add_adapter(&drv_data->adapter)) != 0) {
-		dev_err(dev, "mv64xxx: Can't add i2c adapter, rc: %d\n", -rc);
+		dev_err(&drv_data->adapter.dev,
+			"mv64xxx: Can't add i2c adapter, rc: %d\n", -rc);
 		goto exit_free_irq;
 		goto exit_free_irq;
 	}
 	}
 
 

+ 1 - 0
drivers/ieee1394/hosts.h

@@ -41,6 +41,7 @@ struct hpsb_host {
         /* this nodes state */
         /* this nodes state */
         unsigned in_bus_reset:1;
         unsigned in_bus_reset:1;
         unsigned is_shutdown:1;
         unsigned is_shutdown:1;
+	unsigned resume_packet_sent:1;
 
 
         /* this nodes' duties on the bus */
         /* this nodes' duties on the bus */
         unsigned is_root:1;
         unsigned is_root:1;

+ 57 - 10
drivers/ieee1394/nodemgr.c

@@ -1349,6 +1349,33 @@ static void nodemgr_update_pdrv(struct node_entry *ne)
 }
 }
 
 
 
 
+/* Write the BROADCAST_CHANNEL as per IEEE1394a 8.3.2.3.11 and 8.4.2.3.  This
+ * seems like an optional service but in the end it is practically mandatory
+ * as a consequence of these clauses.
+ *
+ * Note that we cannot do a broadcast write to all nodes at once because some
+ * pre-1394a devices would hang. */
+static void nodemgr_irm_write_bc(struct node_entry *ne, int generation)
+{
+	const u64 bc_addr = (CSR_REGISTER_BASE | CSR_BROADCAST_CHANNEL);
+	quadlet_t bc_remote, bc_local;
+	int ret;
+
+	if (!ne->host->is_irm || ne->generation != generation ||
+	    ne->nodeid == ne->host->node_id)
+		return;
+
+	bc_local = cpu_to_be32(ne->host->csr.broadcast_channel);
+
+	/* Check if the register is implemented and 1394a compliant. */
+	ret = hpsb_read(ne->host, ne->nodeid, generation, bc_addr, &bc_remote,
+			sizeof(bc_remote));
+	if (!ret && bc_remote & cpu_to_be32(0x80000000) &&
+	    bc_remote != bc_local)
+		hpsb_node_write(ne, bc_addr, &bc_local, sizeof(bc_local));
+}
+
+
 static void nodemgr_probe_ne(struct host_info *hi, struct node_entry *ne, int generation)
 static void nodemgr_probe_ne(struct host_info *hi, struct node_entry *ne, int generation)
 {
 {
 	struct device *dev;
 	struct device *dev;
@@ -1360,6 +1387,8 @@ static void nodemgr_probe_ne(struct host_info *hi, struct node_entry *ne, int ge
 	if (!dev)
 	if (!dev)
 		return;
 		return;
 
 
+	nodemgr_irm_write_bc(ne, generation);
+
 	/* If "needs_probe", then this is either a new or changed node we
 	/* If "needs_probe", then this is either a new or changed node we
 	 * rescan totally. If the generation matches for an existing node
 	 * rescan totally. If the generation matches for an existing node
 	 * (one that existed prior to the bus reset) we send update calls
 	 * (one that existed prior to the bus reset) we send update calls
@@ -1413,9 +1442,25 @@ static void nodemgr_node_probe(struct host_info *hi, int generation)
 	return;
 	return;
 }
 }
 
 
-/* Because we are a 1394a-2000 compliant IRM, we need to inform all the other
- * nodes of the broadcast channel.  (Really we're only setting the validity
- * bit). Other IRM responsibilities go in here as well. */
+static int nodemgr_send_resume_packet(struct hpsb_host *host)
+{
+	struct hpsb_packet *packet;
+	int ret = 1;
+
+	packet = hpsb_make_phypacket(host,
+			0x003c0000 | NODEID_TO_NODE(host->node_id) << 24);
+	if (packet) {
+		packet->no_waiter = 1;
+		packet->generation = get_hpsb_generation(host);
+		ret = hpsb_send_packet(packet);
+	}
+	if (ret)
+		HPSB_WARN("fw-host%d: Failed to broadcast resume packet",
+			  host->id);
+	return ret;
+}
+
+/* Perform a few high-level IRM responsibilities. */
 static int nodemgr_do_irm_duties(struct hpsb_host *host, int cycles)
 static int nodemgr_do_irm_duties(struct hpsb_host *host, int cycles)
 {
 {
 	quadlet_t bc;
 	quadlet_t bc;
@@ -1424,13 +1469,8 @@ static int nodemgr_do_irm_duties(struct hpsb_host *host, int cycles)
 	if (!host->is_irm || host->irm_id == (nodeid_t)-1)
 	if (!host->is_irm || host->irm_id == (nodeid_t)-1)
 		return 1;
 		return 1;
 
 
-	host->csr.broadcast_channel |= 0x40000000;  /* set validity bit */
-
-	bc = cpu_to_be32(host->csr.broadcast_channel);
-
-	hpsb_write(host, LOCAL_BUS | ALL_NODES, get_hpsb_generation(host),
-		   (CSR_REGISTER_BASE | CSR_BROADCAST_CHANNEL),
-		   &bc, sizeof(quadlet_t));
+	/* We are a 1394a-2000 compliant IRM. Set the validity bit. */
+	host->csr.broadcast_channel |= 0x40000000;
 
 
 	/* If there is no bus manager then we should set the root node's
 	/* If there is no bus manager then we should set the root node's
 	 * force_root bit to promote bus stability per the 1394
 	 * force_root bit to promote bus stability per the 1394
@@ -1463,6 +1503,13 @@ static int nodemgr_do_irm_duties(struct hpsb_host *host, int cycles)
 		}
 		}
 	}
 	}
 
 
+	/* Some devices suspend their ports while being connected to an inactive
+	 * host adapter, i.e. if connected before the low-level driver is
+	 * loaded.  They become visible either when physically unplugged and
+	 * replugged, or when receiving a resume packet.  Send one once. */
+	if (!host->resume_packet_sent && !nodemgr_send_resume_packet(host))
+		host->resume_packet_sent = 1;
+
 	return 1;
 	return 1;
 }
 }
 
 

+ 1 - 1
drivers/input/misc/wistron_btns.c

@@ -320,7 +320,7 @@ static struct dmi_system_id dmi_ids[] = {
 		},
 		},
 		.driver_data = keymap_acer_aspire_1500
 		.driver_data = keymap_acer_aspire_1500
 	},
 	},
-	{ 0, }
+	{ NULL, }
 };
 };
 
 
 static int __init select_keymap(void)
 static int __init select_keymap(void)

+ 1 - 1
drivers/macintosh/therm_pm72.c

@@ -933,7 +933,7 @@ static void do_monitor_cpu_combined(void)
 	if (state0->overtemp > 0) {
 	if (state0->overtemp > 0) {
 		state0->rpm = state0->mpu.rmaxn_exhaust_fan;
 		state0->rpm = state0->mpu.rmaxn_exhaust_fan;
 		state0->intake_rpm = intake = state0->mpu.rmaxn_intake_fan;
 		state0->intake_rpm = intake = state0->mpu.rmaxn_intake_fan;
-		pump = state0->pump_min;
+		pump = state0->pump_max;
 		goto do_set_fans;
 		goto do_set_fans;
 	}
 	}
 
 

+ 1 - 1
drivers/md/md.c

@@ -1729,7 +1729,7 @@ level_show(mddev_t *mddev, char *page)
 	if (p == NULL && mddev->raid_disks == 0)
 	if (p == NULL && mddev->raid_disks == 0)
 		return 0;
 		return 0;
 	if (mddev->level >= 0)
 	if (mddev->level >= 0)
-		return sprintf(page, "RAID-%d\n", mddev->level);
+		return sprintf(page, "raid%d\n", mddev->level);
 	else
 	else
 		return sprintf(page, "%s\n", p->name);
 		return sprintf(page, "%s\n", p->name);
 }
 }

+ 3 - 3
drivers/media/dvb/bt8xx/dst_ca.c

@@ -406,7 +406,7 @@ static int ca_send_message(struct dst_state *state, struct ca_msg *p_ca_message,
 	}
 	}
 	dprintk(verbose, DST_CA_DEBUG, 1, " ");
 	dprintk(verbose, DST_CA_DEBUG, 1, " ");
 
 
-	if (copy_from_user(p_ca_message, (void *)arg, sizeof (struct ca_msg))) {
+	if (copy_from_user(p_ca_message, arg, sizeof (struct ca_msg))) {
 		result = -EFAULT;
 		result = -EFAULT;
 		goto free_mem_and_exit;
 		goto free_mem_and_exit;
 	}
 	}
@@ -579,7 +579,7 @@ static int dst_ca_release(struct inode *inode, struct file *file)
 	return 0;
 	return 0;
 }
 }
 
 
-static int dst_ca_read(struct file *file, char __user *buffer, size_t length, loff_t *offset)
+static ssize_t dst_ca_read(struct file *file, char __user *buffer, size_t length, loff_t *offset)
 {
 {
 	int bytes_read = 0;
 	int bytes_read = 0;
 
 
@@ -588,7 +588,7 @@ static int dst_ca_read(struct file *file, char __user *buffer, size_t length, lo
 	return bytes_read;
 	return bytes_read;
 }
 }
 
 
-static int dst_ca_write(struct file *file, const char __user *buffer, size_t length, loff_t *offset)
+static ssize_t dst_ca_write(struct file *file, const char __user *buffer, size_t length, loff_t *offset)
 {
 {
 	dprintk(verbose, DST_CA_DEBUG, 1, " Device write.");
 	dprintk(verbose, DST_CA_DEBUG, 1, " Device write.");
 
 

+ 3 - 0
drivers/media/dvb/ttpci/av7110.c

@@ -176,6 +176,9 @@ static void init_av7110_av(struct av7110 *av7110)
 		}
 		}
 	}
 	}
 
 
+	if (dev->pci->subsystem_vendor == 0x13c2 && dev->pci->subsystem_device == 0x000e)
+		av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, SpdifSwitch, 1, 0); // SPDIF on
+
 	ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
 	ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
 	if (ret < 0)
 	if (ret < 0)
 		printk("dvb-ttpci:cannot set volume :%d\n",ret);
 		printk("dvb-ttpci:cannot set volume :%d\n",ret);

+ 2 - 1
drivers/media/dvb/ttpci/av7110_hw.h

@@ -143,7 +143,8 @@ enum av7110_audio_command {
 	MainSwitch,
 	MainSwitch,
 	ADSwitch,
 	ADSwitch,
 	SendDiSEqC,
 	SendDiSEqC,
-	SetRegister
+	SetRegister,
+	SpdifSwitch
 };
 };
 
 
 enum av7110_request_command {
 enum av7110_request_command {

+ 24 - 18
drivers/media/video/cx25840/cx25840-core.c

@@ -333,24 +333,30 @@ static int set_input(struct i2c_client *client, enum cx25840_input input)
 
 
 static int set_v4lstd(struct i2c_client *client, v4l2_std_id std)
 static int set_v4lstd(struct i2c_client *client, v4l2_std_id std)
 {
 {
-	u8 fmt;
-
-	switch (std) {
-	/* zero is autodetect */
-	case 0: fmt = 0x0; break;
-	/* default ntsc to ntsc-m */
-	case V4L2_STD_NTSC:
-	case V4L2_STD_NTSC_M: fmt = 0x1; break;
-	case V4L2_STD_NTSC_M_JP: fmt = 0x2; break;
-	case V4L2_STD_NTSC_443: fmt = 0x3; break;
-	case V4L2_STD_PAL: fmt = 0x4; break;
-	case V4L2_STD_PAL_M: fmt = 0x5; break;
-	case V4L2_STD_PAL_N: fmt = 0x6; break;
-	case V4L2_STD_PAL_Nc: fmt = 0x7; break;
-	case V4L2_STD_PAL_60: fmt = 0x8; break;
-	case V4L2_STD_SECAM: fmt = 0xc; break;
-	default:
-		return -ERANGE;
+	u8 fmt=0; 	/* zero is autodetect */
+
+	/* First tests should be against specific std */
+	if (std & V4L2_STD_NTSC_M_JP) {
+		fmt=0x2;
+	} else if (std & V4L2_STD_NTSC_443) {
+		fmt=0x3;
+	} else if (std & V4L2_STD_PAL_M) {
+		fmt=0x5;
+	} else if (std & V4L2_STD_PAL_N) {
+		fmt=0x6;
+	} else if (std & V4L2_STD_PAL_Nc) {
+		fmt=0x7;
+	} else if (std & V4L2_STD_PAL_60) {
+		fmt=0x8;
+	} else {
+		/* Then, test against generic ones */
+		if (std & V4L2_STD_NTSC) {
+			fmt=0x1;
+		} else if (std & V4L2_STD_PAL) {
+			fmt=0x4;
+		} else if (std & V4L2_STD_SECAM) {
+			fmt=0xc;
+		}
 	}
 	}
 
 
 	cx25840_and_or(client, 0x400, ~0xf, fmt);
 	cx25840_and_or(client, 0x400, ~0xf, fmt);

+ 4 - 4
drivers/media/video/em28xx/em28xx-core.c

@@ -39,7 +39,7 @@ MODULE_PARM_DESC(core_debug,"enable debug messages [core]");
 #define em28xx_coredbg(fmt, arg...) do {\
 #define em28xx_coredbg(fmt, arg...) do {\
 	if (core_debug) \
 	if (core_debug) \
 		printk(KERN_INFO "%s %s :"fmt, \
 		printk(KERN_INFO "%s %s :"fmt, \
-			 dev->name, __FUNCTION__, ##arg); } while (0)
+			 dev->name, __FUNCTION__ , ##arg); } while (0)
 
 
 static unsigned int reg_debug;
 static unsigned int reg_debug;
 module_param(reg_debug,int,0644);
 module_param(reg_debug,int,0644);
@@ -48,7 +48,7 @@ MODULE_PARM_DESC(reg_debug,"enable debug messages [URB reg]");
 #define em28xx_regdbg(fmt, arg...) do {\
 #define em28xx_regdbg(fmt, arg...) do {\
 	if (reg_debug) \
 	if (reg_debug) \
 		printk(KERN_INFO "%s %s :"fmt, \
 		printk(KERN_INFO "%s %s :"fmt, \
-			 dev->name, __FUNCTION__, ##arg); } while (0)
+			 dev->name, __FUNCTION__ , ##arg); } while (0)
 
 
 static unsigned int isoc_debug;
 static unsigned int isoc_debug;
 module_param(isoc_debug,int,0644);
 module_param(isoc_debug,int,0644);
@@ -57,7 +57,7 @@ MODULE_PARM_DESC(isoc_debug,"enable debug messages [isoc transfers]");
 #define em28xx_isocdbg(fmt, arg...) do {\
 #define em28xx_isocdbg(fmt, arg...) do {\
 	if (isoc_debug) \
 	if (isoc_debug) \
 		printk(KERN_INFO "%s %s :"fmt, \
 		printk(KERN_INFO "%s %s :"fmt, \
-			 dev->name, __FUNCTION__, ##arg); } while (0)
+			 dev->name, __FUNCTION__ , ##arg); } while (0)
 
 
 static int alt = EM28XX_PINOUT;
 static int alt = EM28XX_PINOUT;
 module_param(alt, int, 0644);
 module_param(alt, int, 0644);
@@ -126,7 +126,7 @@ u32 em28xx_request_buffers(struct em28xx *dev, u32 count)
 	const size_t imagesize = PAGE_ALIGN(dev->frame_size);	/*needs to be page aligned cause the buffers can be mapped individually! */
 	const size_t imagesize = PAGE_ALIGN(dev->frame_size);	/*needs to be page aligned cause the buffers can be mapped individually! */
 	void *buff = NULL;
 	void *buff = NULL;
 	u32 i;
 	u32 i;
-	em28xx_coredbg("requested %i buffers with size %i", count, imagesize);
+	em28xx_coredbg("requested %i buffers with size %zd", count, imagesize);
 	if (count > EM28XX_NUM_FRAMES)
 	if (count > EM28XX_NUM_FRAMES)
 		count = EM28XX_NUM_FRAMES;
 		count = EM28XX_NUM_FRAMES;
 
 

+ 1 - 1
drivers/media/video/em28xx/em28xx-i2c.c

@@ -44,7 +44,7 @@ MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
 			printk(fmt, ##args); } while (0)
 			printk(fmt, ##args); } while (0)
 #define dprintk2(lvl,fmt, args...) if (i2c_debug>=lvl) do{ \
 #define dprintk2(lvl,fmt, args...) if (i2c_debug>=lvl) do{ \
 			printk(KERN_DEBUG "%s at %s: " fmt, \
 			printk(KERN_DEBUG "%s at %s: " fmt, \
-			dev->name, __FUNCTION__, ##args); } while (0)
+			dev->name, __FUNCTION__ , ##args); } while (0)
 
 
 /*
 /*
  * em2800_i2c_send_max4()
  * em2800_i2c_send_max4()

+ 1 - 1
drivers/media/video/em28xx/em28xx-video.c

@@ -45,7 +45,7 @@
 #define em28xx_videodbg(fmt, arg...) do {\
 #define em28xx_videodbg(fmt, arg...) do {\
 	if (video_debug) \
 	if (video_debug) \
 		printk(KERN_INFO "%s %s :"fmt, \
 		printk(KERN_INFO "%s %s :"fmt, \
-			 dev->name, __FUNCTION__, ##arg); } while (0)
+			 dev->name, __FUNCTION__ , ##arg); } while (0)
 
 
 MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_DESCRIPTION(DRIVER_DESC);
 MODULE_DESCRIPTION(DRIVER_DESC);

+ 4 - 4
drivers/media/video/em28xx/em28xx.h

@@ -392,18 +392,18 @@ extern const unsigned int em28xx_bcount;
 /* printk macros */
 /* printk macros */
 
 
 #define em28xx_err(fmt, arg...) do {\
 #define em28xx_err(fmt, arg...) do {\
-	printk(KERN_ERR fmt, ##arg); } while (0)
+	printk(KERN_ERR fmt , ##arg); } while (0)
 
 
 #define em28xx_errdev(fmt, arg...) do {\
 #define em28xx_errdev(fmt, arg...) do {\
 	printk(KERN_ERR "%s: "fmt,\
 	printk(KERN_ERR "%s: "fmt,\
-			dev->name, ##arg); } while (0)
+			dev->name , ##arg); } while (0)
 
 
 #define em28xx_info(fmt, arg...) do {\
 #define em28xx_info(fmt, arg...) do {\
 	printk(KERN_INFO "%s: "fmt,\
 	printk(KERN_INFO "%s: "fmt,\
-			dev->name, ##arg); } while (0)
+			dev->name , ##arg); } while (0)
 #define em28xx_warn(fmt, arg...) do {\
 #define em28xx_warn(fmt, arg...) do {\
 	printk(KERN_WARNING "%s: "fmt,\
 	printk(KERN_WARNING "%s: "fmt,\
-			dev->name, ##arg); } while (0)
+			dev->name , ##arg); } while (0)
 
 
 inline static int em28xx_audio_source(struct em28xx *dev, int input)
 inline static int em28xx_audio_source(struct em28xx *dev, int input)
 {
 {

+ 1 - 1
drivers/media/video/saa7134/saa7134-alsa.c

@@ -60,7 +60,7 @@ module_param_array(index, int, NULL, 0444);
 MODULE_PARM_DESC(index, "Index value for SAA7134 capture interface(s).");
 MODULE_PARM_DESC(index, "Index value for SAA7134 capture interface(s).");
 
 
 #define dprintk(fmt, arg...)    if (debug) \
 #define dprintk(fmt, arg...)    if (debug) \
-	printk(KERN_DEBUG "%s/alsa: " fmt, dev->name, ## arg)
+	printk(KERN_DEBUG "%s/alsa: " fmt, dev->name , ##arg)
 
 
 
 
 
 

+ 1 - 1
drivers/media/video/tveeprom.c

@@ -206,7 +206,7 @@ hauppauge_tuner[] =
 	{ TUNER_ABSENT,        "TCL 2002MI_3H"},
 	{ TUNER_ABSENT,        "TCL 2002MI_3H"},
 	{ TUNER_TCL_2002N,     "TCL 2002N 5H"},
 	{ TUNER_TCL_2002N,     "TCL 2002N 5H"},
 	/* 100-109 */
 	/* 100-109 */
-	{ TUNER_ABSENT,        "Philips FMD1216ME"},
+	{ TUNER_PHILIPS_FMD1216ME_MK3, "Philips FMD1216ME"},
 	{ TUNER_TEA5767,       "Philips TEA5768HL FM Radio"},
 	{ TUNER_TEA5767,       "Philips TEA5768HL FM Radio"},
 	{ TUNER_ABSENT,        "Panasonic ENV57H12D5"},
 	{ TUNER_ABSENT,        "Panasonic ENV57H12D5"},
 	{ TUNER_PHILIPS_FM1236_MK3, "TCL MFNM05-4"},
 	{ TUNER_PHILIPS_FM1236_MK3, "TCL MFNM05-4"},

+ 5 - 1
drivers/message/i2o/pci.c

@@ -303,6 +303,7 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev,
 	struct i2o_controller *c;
 	struct i2o_controller *c;
 	int rc;
 	int rc;
 	struct pci_dev *i960 = NULL;
 	struct pci_dev *i960 = NULL;
+	int pci_dev_busy = 0;
 
 
 	printk(KERN_INFO "i2o: Checking for PCI I2O controllers...\n");
 	printk(KERN_INFO "i2o: Checking for PCI I2O controllers...\n");
 
 
@@ -395,6 +396,8 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev,
 	if ((rc = i2o_pci_alloc(c))) {
 	if ((rc = i2o_pci_alloc(c))) {
 		printk(KERN_ERR "%s: DMA / IO allocation for I2O controller "
 		printk(KERN_ERR "%s: DMA / IO allocation for I2O controller "
 		       " failed\n", c->name);
 		       " failed\n", c->name);
+		if (rc == -ENODEV)
+			pci_dev_busy = 1;
 		goto free_controller;
 		goto free_controller;
 	}
 	}
 
 
@@ -425,7 +428,8 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev,
 	i2o_iop_free(c);
 	i2o_iop_free(c);
 
 
       disable:
       disable:
-	pci_disable_device(pdev);
+	if (!pci_dev_busy)
+		pci_disable_device(pdev);
 
 
 	return rc;
 	return rc;
 }
 }

+ 2 - 2
drivers/mtd/onenand/generic.c

@@ -12,9 +12,9 @@
  *   This is a device driver for the OneNAND flash for generic boards.
  *   This is a device driver for the OneNAND flash for generic boards.
  */
  */
 
 
-#include <linux/device.h>
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/onenand.h>
 #include <linux/mtd/onenand.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>
@@ -39,7 +39,7 @@ static int __devinit generic_onenand_probe(struct device *dev)
 {
 {
 	struct onenand_info *info;
 	struct onenand_info *info;
 	struct platform_device *pdev = to_platform_device(dev);
 	struct platform_device *pdev = to_platform_device(dev);
-	struct onenand_platform_data *pdata = pdev->dev.platform_data;
+	struct flash_platform_data *pdata = pdev->dev.platform_data;
 	struct resource *res = pdev->resource;
 	struct resource *res = pdev->resource;
 	unsigned long size = res->end - res->start + 1;
 	unsigned long size = res->end - res->start + 1;
 	int err;
 	int err;

+ 40 - 13
drivers/mtd/onenand/onenand_base.c

@@ -940,7 +940,7 @@ static int onenand_writev_ecc(struct mtd_info *mtd, const struct kvec *vecs,
 	u_char *eccbuf, struct nand_oobinfo *oobsel)
 	u_char *eccbuf, struct nand_oobinfo *oobsel)
 {
 {
 	struct onenand_chip *this = mtd->priv;
 	struct onenand_chip *this = mtd->priv;
-	unsigned char buffer[MAX_ONENAND_PAGESIZE], *pbuf;
+	unsigned char *pbuf;
 	size_t total_len, len;
 	size_t total_len, len;
 	int i, written = 0;
 	int i, written = 0;
 	int ret = 0;
 	int ret = 0;
@@ -975,7 +975,7 @@ static int onenand_writev_ecc(struct mtd_info *mtd, const struct kvec *vecs,
 	/* Loop until all keve's data has been written */
 	/* Loop until all keve's data has been written */
 	len = 0;
 	len = 0;
 	while (count) {
 	while (count) {
-		pbuf = buffer;
+		pbuf = this->page_buf;
 		/*
 		/*
 		 * If the given tuple is >= pagesize then
 		 * If the given tuple is >= pagesize then
 		 * write it out from the iov
 		 * write it out from the iov
@@ -995,7 +995,7 @@ static int onenand_writev_ecc(struct mtd_info *mtd, const struct kvec *vecs,
 			int cnt = 0, thislen;
 			int cnt = 0, thislen;
 			while (cnt < mtd->oobblock) {
 			while (cnt < mtd->oobblock) {
 				thislen = min_t(int, mtd->oobblock - cnt, vecs->iov_len - len);
 				thislen = min_t(int, mtd->oobblock - cnt, vecs->iov_len - len);
-				memcpy(buffer + cnt, vecs->iov_base + len, thislen);
+				memcpy(this->page_buf + cnt, vecs->iov_base + len, thislen);
 				cnt += thislen;
 				cnt += thislen;
 				len += thislen;
 				len += thislen;
 
 
@@ -1296,6 +1296,12 @@ static int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)
 
 
 	/* Block lock scheme */
 	/* Block lock scheme */
 	for (block = start; block < end; block++) {
 	for (block = start; block < end; block++) {
+		/* Set block address */
+		value = onenand_block_address(this, block);
+		this->write_word(value, this->base + ONENAND_REG_START_ADDRESS1);
+		/* Select DataRAM for DDP */
+		value = onenand_bufferram_address(this, block);
+		this->write_word(value, this->base + ONENAND_REG_START_ADDRESS2);
 		/* Set start block address */
 		/* Set start block address */
 		this->write_word(block, this->base + ONENAND_REG_START_BLOCK_ADDRESS);
 		this->write_word(block, this->base + ONENAND_REG_START_BLOCK_ADDRESS);
 		/* Write unlock command */
 		/* Write unlock command */
@@ -1309,10 +1315,6 @@ static int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)
 		    & ONENAND_CTRL_ONGO)
 		    & ONENAND_CTRL_ONGO)
 			continue;
 			continue;
 
 
-		/* Set block address for read block status */
-		value = onenand_block_address(this, block);
-		this->write_word(value, this->base + ONENAND_REG_START_ADDRESS1);
-
 		/* Check lock status */
 		/* Check lock status */
 		status = this->read_word(this->base + ONENAND_REG_WP_STATUS);
 		status = this->read_word(this->base + ONENAND_REG_WP_STATUS);
 		if (!(status & ONENAND_WP_US))
 		if (!(status & ONENAND_WP_US))
@@ -1346,7 +1348,6 @@ static void onenand_print_device_info(int device)
 
 
 static const struct onenand_manufacturers onenand_manuf_ids[] = {
 static const struct onenand_manufacturers onenand_manuf_ids[] = {
         {ONENAND_MFR_SAMSUNG, "Samsung"},
         {ONENAND_MFR_SAMSUNG, "Samsung"},
-        {ONENAND_MFR_UNKNOWN, "Unknown"}
 };
 };
 
 
 /**
 /**
@@ -1357,17 +1358,22 @@ static const struct onenand_manufacturers onenand_manuf_ids[] = {
  */
  */
 static int onenand_check_maf(int manuf)
 static int onenand_check_maf(int manuf)
 {
 {
+	int size = ARRAY_SIZE(onenand_manuf_ids);
+	char *name;
         int i;
         int i;
 
 
-        for (i = 0; onenand_manuf_ids[i].id; i++) {
+	for (i = 0; i < size; i++)
                 if (manuf == onenand_manuf_ids[i].id)
                 if (manuf == onenand_manuf_ids[i].id)
                         break;
                         break;
-        }
 
 
-        printk(KERN_DEBUG "OneNAND Manufacturer: %s (0x%0x)\n",
-                onenand_manuf_ids[i].name, manuf);
+	if (i < size)
+		name = onenand_manuf_ids[i].name;
+	else
+		name = "Unknown";
+
+	printk(KERN_DEBUG "OneNAND Manufacturer: %s (0x%0x)\n", name, manuf);
 
 
-        return (i != ONENAND_MFR_UNKNOWN);
+	return (i == size);
 }
 }
 
 
 /**
 /**
@@ -1513,6 +1519,18 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
 		this->read_bufferram = onenand_sync_read_bufferram;
 		this->read_bufferram = onenand_sync_read_bufferram;
 	}
 	}
 
 
+	/* Allocate buffers, if necessary */
+	if (!this->page_buf) {
+		size_t len;
+		len = mtd->oobblock + mtd->oobsize;
+		this->page_buf = kmalloc(len, GFP_KERNEL);
+		if (!this->page_buf) {
+			printk(KERN_ERR "onenand_scan(): Can't allocate page_buf\n");
+			return -ENOMEM;
+		}
+		this->options |= ONENAND_PAGEBUF_ALLOC;
+	}
+
 	this->state = FL_READY;
 	this->state = FL_READY;
 	init_waitqueue_head(&this->wq);
 	init_waitqueue_head(&this->wq);
 	spin_lock_init(&this->chip_lock);
 	spin_lock_init(&this->chip_lock);
@@ -1574,12 +1592,21 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
  */
  */
 void onenand_release(struct mtd_info *mtd)
 void onenand_release(struct mtd_info *mtd)
 {
 {
+	struct onenand_chip *this = mtd->priv;
+
 #ifdef CONFIG_MTD_PARTITIONS
 #ifdef CONFIG_MTD_PARTITIONS
 	/* Deregister partitions */
 	/* Deregister partitions */
 	del_mtd_partitions (mtd);
 	del_mtd_partitions (mtd);
 #endif
 #endif
 	/* Deregister the device */
 	/* Deregister the device */
 	del_mtd_device (mtd);
 	del_mtd_device (mtd);
+
+	/* Free bad block table memory, if allocated */
+	if (this->bbm)
+		kfree(this->bbm);
+	/* Buffer allocated by onenand_scan */
+	if (this->options & ONENAND_PAGEBUF_ALLOC)
+		kfree(this->page_buf);
 }
 }
 
 
 EXPORT_SYMBOL_GPL(onenand_scan);
 EXPORT_SYMBOL_GPL(onenand_scan);

+ 2 - 2
drivers/mtd/onenand/onenand_bbt.c

@@ -118,10 +118,10 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
  */
  */
 static inline int onenand_memory_bbt (struct mtd_info *mtd, struct nand_bbt_descr *bd)
 static inline int onenand_memory_bbt (struct mtd_info *mtd, struct nand_bbt_descr *bd)
 {
 {
-	unsigned char data_buf[MAX_ONENAND_PAGESIZE];
+	struct onenand_chip *this = mtd->priv;
 
 
         bd->options &= ~NAND_BBT_SCANEMPTY;
         bd->options &= ~NAND_BBT_SCANEMPTY;
-        return create_bbt(mtd, data_buf, bd, -1);
+	return create_bbt(mtd, this->page_buf, bd, -1);
 }
 }
 
 
 /**
 /**

+ 5 - 5
drivers/net/s2io.c

@@ -3078,7 +3078,7 @@ int s2io_set_swapper(nic_t * sp)
 
 
 static int wait_for_msix_trans(nic_t *nic, int i)
 static int wait_for_msix_trans(nic_t *nic, int i)
 {
 {
-	XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
+	XENA_dev_config_t __iomem *bar0 = nic->bar0;
 	u64 val64;
 	u64 val64;
 	int ret = 0, cnt = 0;
 	int ret = 0, cnt = 0;
 
 
@@ -3099,7 +3099,7 @@ static int wait_for_msix_trans(nic_t *nic, int i)
 
 
 void restore_xmsi_data(nic_t *nic)
 void restore_xmsi_data(nic_t *nic)
 {
 {
-	XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
+	XENA_dev_config_t __iomem *bar0 = nic->bar0;
 	u64 val64;
 	u64 val64;
 	int i;
 	int i;
 
 
@@ -3117,7 +3117,7 @@ void restore_xmsi_data(nic_t *nic)
 
 
 static void store_xmsi_data(nic_t *nic)
 static void store_xmsi_data(nic_t *nic)
 {
 {
-	XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
+	XENA_dev_config_t __iomem *bar0 = nic->bar0;
 	u64 val64, addr, data;
 	u64 val64, addr, data;
 	int i;
 	int i;
 
 
@@ -3140,7 +3140,7 @@ static void store_xmsi_data(nic_t *nic)
 
 
 int s2io_enable_msi(nic_t *nic)
 int s2io_enable_msi(nic_t *nic)
 {
 {
-	XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
+	XENA_dev_config_t __iomem *bar0 = nic->bar0;
 	u16 msi_ctrl, msg_val;
 	u16 msi_ctrl, msg_val;
 	struct config_param *config = &nic->config;
 	struct config_param *config = &nic->config;
 	struct net_device *dev = nic->dev;
 	struct net_device *dev = nic->dev;
@@ -3190,7 +3190,7 @@ int s2io_enable_msi(nic_t *nic)
 
 
 int s2io_enable_msi_x(nic_t *nic)
 int s2io_enable_msi_x(nic_t *nic)
 {
 {
-	XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
+	XENA_dev_config_t __iomem *bar0 = nic->bar0;
 	u64 tx_mat, rx_mat;
 	u64 tx_mat, rx_mat;
 	u16 msi_control; /* Temp variable */
 	u16 msi_control; /* Temp variable */
 	int ret, i, j, msix_indx = 1;
 	int ret, i, j, msix_indx = 1;

+ 101 - 85
drivers/net/tg3.c

@@ -68,8 +68,8 @@
 
 
 #define DRV_MODULE_NAME		"tg3"
 #define DRV_MODULE_NAME		"tg3"
 #define PFX DRV_MODULE_NAME	": "
 #define PFX DRV_MODULE_NAME	": "
-#define DRV_MODULE_VERSION	"3.45"
-#define DRV_MODULE_RELDATE	"Dec 13, 2005"
+#define DRV_MODULE_VERSION	"3.46"
+#define DRV_MODULE_RELDATE	"Dec 19, 2005"
 
 
 #define TG3_DEF_MAC_MODE	0
 #define TG3_DEF_MAC_MODE	0
 #define TG3_DEF_RX_MODE		0
 #define TG3_DEF_RX_MODE		0
@@ -341,6 +341,16 @@ static struct {
 	{ "interrupt test (offline)" },
 	{ "interrupt test (offline)" },
 };
 };
 
 
+static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
+{
+	writel(val, tp->regs + off);
+}
+
+static u32 tg3_read32(struct tg3 *tp, u32 off)
+{
+	return (readl(tp->regs + off)); 
+}
+
 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
 {
 {
 	unsigned long flags;
 	unsigned long flags;
@@ -411,13 +421,29 @@ static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
 	return val;
 	return val;
 }
 }
 
 
-static void _tw32_flush(struct tg3 *tp, u32 off, u32 val)
+/* usec_wait specifies the wait time in usec when writing to certain registers
+ * where it is unsafe to read back the register without some delay.
+ * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
+ * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
+ */
+static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
 {
 {
-	tp->write32(tp, off, val);
-	if (!(tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) &&
-	    !(tp->tg3_flags & TG3_FLAG_5701_REG_WRITE_BUG) &&
-	    !(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
-		tp->read32(tp, off);	/* flush */
+	if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) ||
+	    (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
+		/* Non-posted methods */
+		tp->write32(tp, off, val);
+	else {
+		/* Posted method */
+		tg3_write32(tp, off, val);
+		if (usec_wait)
+			udelay(usec_wait);
+		tp->read32(tp, off);
+	}
+	/* Wait again after the read for the posted method to guarantee that
+	 * the wait time is met.
+	 */
+	if (usec_wait)
+		udelay(usec_wait);
 }
 }
 
 
 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
@@ -438,16 +464,6 @@ static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
 		readl(mbox);
 		readl(mbox);
 }
 }
 
 
-static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
-{
-	writel(val, tp->regs + off);
-}
-
-static u32 tg3_read32(struct tg3 *tp, u32 off)
-{
-	return (readl(tp->regs + off)); 
-}
-
 #define tw32_mailbox(reg, val)	tp->write32_mbox(tp, reg, val)
 #define tw32_mailbox(reg, val)	tp->write32_mbox(tp, reg, val)
 #define tw32_mailbox_f(reg, val)	tw32_mailbox_flush(tp, (reg), (val))
 #define tw32_mailbox_f(reg, val)	tw32_mailbox_flush(tp, (reg), (val))
 #define tw32_rx_mbox(reg, val)	tp->write32_rx_mbox(tp, reg, val)
 #define tw32_rx_mbox(reg, val)	tp->write32_rx_mbox(tp, reg, val)
@@ -455,7 +471,8 @@ static u32 tg3_read32(struct tg3 *tp, u32 off)
 #define tr32_mailbox(reg)	tp->read32_mbox(tp, reg)
 #define tr32_mailbox(reg)	tp->read32_mbox(tp, reg)
 
 
 #define tw32(reg,val)		tp->write32(tp, reg, val)
 #define tw32(reg,val)		tp->write32(tp, reg, val)
-#define tw32_f(reg,val)		_tw32_flush(tp,(reg),(val))
+#define tw32_f(reg,val)		_tw32_flush(tp,(reg),(val), 0)
+#define tw32_wait_f(reg,val,us)	_tw32_flush(tp,(reg),(val), (us))
 #define tr32(reg)		tp->read32(tp, reg)
 #define tr32(reg)		tp->read32(tp, reg)
 
 
 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
@@ -595,21 +612,19 @@ static void tg3_switch_clocks(struct tg3 *tp)
 
 
 	if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
 	if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
 		if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
 		if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
-			tw32_f(TG3PCI_CLOCK_CTRL,
-			       clock_ctrl | CLOCK_CTRL_625_CORE);
-			udelay(40);
+			tw32_wait_f(TG3PCI_CLOCK_CTRL,
+				    clock_ctrl | CLOCK_CTRL_625_CORE, 40);
 		}
 		}
 	} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
 	} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
-		tw32_f(TG3PCI_CLOCK_CTRL,
-		     clock_ctrl |
-		     (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK));
-		udelay(40);
-		tw32_f(TG3PCI_CLOCK_CTRL,
-		     clock_ctrl | (CLOCK_CTRL_ALTCLK));
-		udelay(40);
+		tw32_wait_f(TG3PCI_CLOCK_CTRL,
+			    clock_ctrl |
+			    (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
+			    40);
+		tw32_wait_f(TG3PCI_CLOCK_CTRL,
+			    clock_ctrl | (CLOCK_CTRL_ALTCLK),
+			    40);
 	}
 	}
-	tw32_f(TG3PCI_CLOCK_CTRL, clock_ctrl);
-	udelay(40);
+	tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
 }
 }
 
 
 #define PHY_BUSY_LOOPS	5000
 #define PHY_BUSY_LOOPS	5000
@@ -1017,39 +1032,50 @@ static void tg3_frob_aux_power(struct tg3 *tp)
 	if ((tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) != 0)
 	if ((tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) != 0)
 		return;
 		return;
 
 
-	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
-		tp_peer = pci_get_drvdata(tp->pdev_peer);
-		if (!tp_peer)
+	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
+	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
+		struct net_device *dev_peer;
+
+		dev_peer = pci_get_drvdata(tp->pdev_peer);
+		if (!dev_peer)
 			BUG();
 			BUG();
+		tp_peer = netdev_priv(dev_peer);
 	}
 	}
 
 
-
 	if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
 	if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
 	    (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 ||
 	    (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 ||
 	    (tp_peer->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
 	    (tp_peer->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
 	    (tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
 	    (tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
-			tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
-			     (GRC_LCLCTRL_GPIO_OE0 |
-			      GRC_LCLCTRL_GPIO_OE1 |
-			      GRC_LCLCTRL_GPIO_OE2 |
-			      GRC_LCLCTRL_GPIO_OUTPUT0 |
-			      GRC_LCLCTRL_GPIO_OUTPUT1));
-			udelay(100);
+			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
+				    (GRC_LCLCTRL_GPIO_OE0 |
+				     GRC_LCLCTRL_GPIO_OE1 |
+				     GRC_LCLCTRL_GPIO_OE2 |
+				     GRC_LCLCTRL_GPIO_OUTPUT0 |
+				     GRC_LCLCTRL_GPIO_OUTPUT1),
+				    100);
 		} else {
 		} else {
 			u32 no_gpio2;
 			u32 no_gpio2;
-			u32 grc_local_ctrl;
+			u32 grc_local_ctrl = 0;
 
 
 			if (tp_peer != tp &&
 			if (tp_peer != tp &&
 			    (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
 			    (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
 				return;
 				return;
 
 
+			/* Workaround to prevent overdrawing Amps. */
+			if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
+			    ASIC_REV_5714) {
+				grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
+				tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
+					    grc_local_ctrl, 100);
+			}
+
 			/* On 5753 and variants, GPIO2 cannot be used. */
 			/* On 5753 and variants, GPIO2 cannot be used. */
 			no_gpio2 = tp->nic_sram_data_cfg &
 			no_gpio2 = tp->nic_sram_data_cfg &
 				    NIC_SRAM_DATA_CFG_NO_GPIO2;
 				    NIC_SRAM_DATA_CFG_NO_GPIO2;
 
 
-			grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
+			grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
 					 GRC_LCLCTRL_GPIO_OE1 |
 					 GRC_LCLCTRL_GPIO_OE1 |
 					 GRC_LCLCTRL_GPIO_OE2 |
 					 GRC_LCLCTRL_GPIO_OE2 |
 					 GRC_LCLCTRL_GPIO_OUTPUT1 |
 					 GRC_LCLCTRL_GPIO_OUTPUT1 |
@@ -1058,21 +1084,18 @@ static void tg3_frob_aux_power(struct tg3 *tp)
 				grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
 				grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
 						    GRC_LCLCTRL_GPIO_OUTPUT2);
 						    GRC_LCLCTRL_GPIO_OUTPUT2);
 			}
 			}
-			tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
-						grc_local_ctrl);
-			udelay(100);
+			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
+						    grc_local_ctrl, 100);
 
 
 			grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
 			grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
 
 
-			tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
-						grc_local_ctrl);
-			udelay(100);
+			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
+						    grc_local_ctrl, 100);
 
 
 			if (!no_gpio2) {
 			if (!no_gpio2) {
 				grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
 				grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
-				tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
-				       grc_local_ctrl);
-				udelay(100);
+				tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
+					    grc_local_ctrl, 100);
 			}
 			}
 		}
 		}
 	} else {
 	} else {
@@ -1082,19 +1105,16 @@ static void tg3_frob_aux_power(struct tg3 *tp)
 			    (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
 			    (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
 				return;
 				return;
 
 
-			tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
-			     (GRC_LCLCTRL_GPIO_OE1 |
-			      GRC_LCLCTRL_GPIO_OUTPUT1));
-			udelay(100);
+			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
+				    (GRC_LCLCTRL_GPIO_OE1 |
+				     GRC_LCLCTRL_GPIO_OUTPUT1), 100);
 
 
-			tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
-			     (GRC_LCLCTRL_GPIO_OE1));
-			udelay(100);
+			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
+				    GRC_LCLCTRL_GPIO_OE1, 100);
 
 
-			tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
-			     (GRC_LCLCTRL_GPIO_OE1 |
-			      GRC_LCLCTRL_GPIO_OUTPUT1));
-			udelay(100);
+			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
+				    (GRC_LCLCTRL_GPIO_OE1 |
+				     GRC_LCLCTRL_GPIO_OUTPUT1), 100);
 		}
 		}
 	}
 	}
 }
 }
@@ -1137,10 +1157,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
 		udelay(100);	/* Delay after power state change */
 		udelay(100);	/* Delay after power state change */
 
 
 		/* Switch out of Vaux if it is not a LOM */
 		/* Switch out of Vaux if it is not a LOM */
-		if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT)) {
-			tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
-			udelay(100);
-		}
+		if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
+			tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
 
 
 		return 0;
 		return 0;
 
 
@@ -1239,10 +1257,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
 		base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
 		base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
 			     CLOCK_CTRL_TXCLK_DISABLE);
 			     CLOCK_CTRL_TXCLK_DISABLE);
 
 
-		tw32_f(TG3PCI_CLOCK_CTRL, base_val |
-		     CLOCK_CTRL_ALTCLK |
-		     CLOCK_CTRL_PWRDOWN_PLL133);
-		udelay(40);
+		tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
+			    CLOCK_CTRL_PWRDOWN_PLL133, 40);
 	} else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
 	} else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
 		/* do nothing */
 		/* do nothing */
 	} else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
 	} else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
@@ -1263,11 +1279,11 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
 			newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
 		}
 		}
 
 
-		tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1);
-		udelay(40);
+		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
+			    40);
 
 
-		tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2);
-		udelay(40);
+		tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
+			    40);
 
 
 		if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
 		if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
 			u32 newbits3;
 			u32 newbits3;
@@ -1281,9 +1297,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
 				newbits3 = CLOCK_CTRL_44MHZ_CORE;
 				newbits3 = CLOCK_CTRL_44MHZ_CORE;
 			}
 			}
 
 
-			tw32_f(TG3PCI_CLOCK_CTRL,
-					 tp->pci_clock_ctrl | newbits3);
-			udelay(40);
+			tw32_wait_f(TG3PCI_CLOCK_CTRL,
+				    tp->pci_clock_ctrl | newbits3, 40);
 		}
 		}
 	}
 	}
 
 
@@ -1294,7 +1309,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
 			tg3_writephy(tp, MII_TG3_EXT_CTRL,
 				     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
 				     MII_TG3_EXT_CTRL_FORCE_LED_OFF);
 			tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2);
 			tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2);
-			tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
+			if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
+				tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
 		}
 		}
 	}
 	}
 
 
@@ -7959,13 +7975,12 @@ static int tg3_test_memory(struct tg3 *tp)
 		u32 offset;
 		u32 offset;
 		u32 len;
 		u32 len;
 	} mem_tbl_570x[] = {
 	} mem_tbl_570x[] = {
-		{ 0x00000000, 0x01000},
+		{ 0x00000000, 0x00b50},
 		{ 0x00002000, 0x1c000},
 		{ 0x00002000, 0x1c000},
 		{ 0xffffffff, 0x00000}
 		{ 0xffffffff, 0x00000}
 	}, mem_tbl_5705[] = {
 	}, mem_tbl_5705[] = {
 		{ 0x00000100, 0x0000c},
 		{ 0x00000100, 0x0000c},
 		{ 0x00000200, 0x00008},
 		{ 0x00000200, 0x00008},
-		{ 0x00000b50, 0x00400},
 		{ 0x00004000, 0x00800},
 		{ 0x00004000, 0x00800},
 		{ 0x00006000, 0x01000},
 		{ 0x00006000, 0x01000},
 		{ 0x00008000, 0x02000},
 		{ 0x00008000, 0x02000},
@@ -10466,7 +10481,7 @@ static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
 	return str;
 	return str;
 }
 }
 
 
-static struct pci_dev * __devinit tg3_find_5704_peer(struct tg3 *tp)
+static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
 {
 {
 	struct pci_dev *peer;
 	struct pci_dev *peer;
 	unsigned int func, devnr = tp->pdev->devfn & ~7;
 	unsigned int func, devnr = tp->pdev->devfn & ~7;
@@ -10719,8 +10734,9 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
 		tp->rx_pending = 63;
 		tp->rx_pending = 63;
 	}
 	}
 
 
-	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
-		tp->pdev_peer = tg3_find_5704_peer(tp);
+	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
+	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714))
+		tp->pdev_peer = tg3_find_peer(tp);
 
 
 	err = tg3_get_device_address(tp);
 	err = tg3_get_device_address(tp);
 	if (err) {
 	if (err) {

+ 3 - 4
drivers/pci/Makefile

@@ -6,6 +6,9 @@ obj-y		+= access.o bus.o probe.o remove.o pci.o quirks.o \
 			pci-driver.o search.o pci-sysfs.o rom.o setup-res.o
 			pci-driver.o search.o pci-sysfs.o rom.o setup-res.o
 obj-$(CONFIG_PROC_FS) += proc.o
 obj-$(CONFIG_PROC_FS) += proc.o
 
 
+# Build PCI Express stuff if needed
+obj-$(CONFIG_PCIEPORTBUS) += pcie/
+
 obj-$(CONFIG_HOTPLUG) += hotplug.o
 obj-$(CONFIG_HOTPLUG) += hotplug.o
 
 
 # Build the PCI Hotplug drivers if we were asked to
 # Build the PCI Hotplug drivers if we were asked to
@@ -40,7 +43,3 @@ endif
 ifeq ($(CONFIG_PCI_DEBUG),y)
 ifeq ($(CONFIG_PCI_DEBUG),y)
 EXTRA_CFLAGS += -DDEBUG
 EXTRA_CFLAGS += -DDEBUG
 endif
 endif
-
-# Build PCI Express stuff if needed
-obj-$(CONFIG_PCIEPORTBUS) += pcie/
-

+ 10 - 9
drivers/sbus/char/jsflash.c

@@ -249,11 +249,11 @@ static loff_t jsf_lseek(struct file * file, loff_t offset, int orig)
 /*
 /*
  * OS SIMM Cannot be read in other size but a 32bits word.
  * OS SIMM Cannot be read in other size but a 32bits word.
  */
  */
-static ssize_t jsf_read(struct file * file, char * buf, 
+static ssize_t jsf_read(struct file * file, char __user * buf, 
     size_t togo, loff_t *ppos)
     size_t togo, loff_t *ppos)
 {
 {
 	unsigned long p = *ppos;
 	unsigned long p = *ppos;
-	char *tmp = buf;
+	char __user *tmp = buf;
 
 
 	union byte4 {
 	union byte4 {
 		char s[4];
 		char s[4];
@@ -305,7 +305,7 @@ static ssize_t jsf_read(struct file * file, char * buf,
 	return tmp-buf;
 	return tmp-buf;
 }
 }
 
 
-static ssize_t jsf_write(struct file * file, const char * buf,
+static ssize_t jsf_write(struct file * file, const char __user * buf,
     size_t count, loff_t *ppos)
     size_t count, loff_t *ppos)
 {
 {
 	return -ENOSPC;
 	return -ENOSPC;
@@ -356,10 +356,10 @@ static int jsf_ioctl_erase(unsigned long arg)
  * Program a block of flash.
  * Program a block of flash.
  * Very simple because we can do it byte by byte anyway.
  * Very simple because we can do it byte by byte anyway.
  */
  */
-static int jsf_ioctl_program(unsigned long arg)
+static int jsf_ioctl_program(void __user *arg)
 {
 {
 	struct jsflash_program_arg abuf;
 	struct jsflash_program_arg abuf;
-	char *uptr;
+	char __user *uptr;
 	unsigned long p;
 	unsigned long p;
 	unsigned int togo;
 	unsigned int togo;
 	union {
 	union {
@@ -367,13 +367,13 @@ static int jsf_ioctl_program(unsigned long arg)
 		char s[4];
 		char s[4];
 	} b;
 	} b;
 
 
-	if (copy_from_user(&abuf, (char *)arg, JSFPRGSZ))
+	if (copy_from_user(&abuf, arg, JSFPRGSZ))
 		return -EFAULT; 
 		return -EFAULT; 
 	p = abuf.off;
 	p = abuf.off;
 	togo = abuf.size;
 	togo = abuf.size;
 	if ((togo & 3) || (p & 3)) return -EINVAL;
 	if ((togo & 3) || (p & 3)) return -EINVAL;
 
 
-	uptr = (char *) (unsigned long) abuf.data;
+	uptr = (char __user *) (unsigned long) abuf.data;
 	while (togo != 0) {
 	while (togo != 0) {
 		togo -= 4;
 		togo -= 4;
 		if (copy_from_user(&b.s[0], uptr, 4))
 		if (copy_from_user(&b.s[0], uptr, 4))
@@ -390,19 +390,20 @@ static int jsf_ioctl(struct inode *inode, struct file *f, unsigned int cmd,
     unsigned long arg)
     unsigned long arg)
 {
 {
 	int error = -ENOTTY;
 	int error = -ENOTTY;
+	void __user *argp = (void __user *)arg;
 
 
 	if (!capable(CAP_SYS_ADMIN))
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
 		return -EPERM;
 	switch (cmd) {
 	switch (cmd) {
 	case JSFLASH_IDENT:
 	case JSFLASH_IDENT:
-		if (copy_to_user((void *)arg, &jsf0.id, JSFIDSZ))
+		if (copy_to_user(argp, &jsf0.id, JSFIDSZ))
 			return -EFAULT;
 			return -EFAULT;
 		break;
 		break;
 	case JSFLASH_ERASE:
 	case JSFLASH_ERASE:
 		error = jsf_ioctl_erase(arg);
 		error = jsf_ioctl_erase(arg);
 		break;
 		break;
 	case JSFLASH_PROGRAM:
 	case JSFLASH_PROGRAM:
-		error = jsf_ioctl_program(arg);
+		error = jsf_ioctl_program(argp);
 		break;
 		break;
 	}
 	}
 
 

+ 5 - 5
drivers/sbus/char/uctrl.c

@@ -309,7 +309,7 @@ static void uctrl_do_txn(struct uctrl_txn *txn)
 	}
 	}
 }
 }
 
 
-void uctrl_get_event_status()
+void uctrl_get_event_status(void)
 {
 {
 	struct uctrl_driver *driver = &drv;
 	struct uctrl_driver *driver = &drv;
 	struct uctrl_txn txn;
 	struct uctrl_txn txn;
@@ -318,7 +318,7 @@ void uctrl_get_event_status()
 	txn.opcode = READ_EVENT_STATUS;
 	txn.opcode = READ_EVENT_STATUS;
 	txn.inbits = 0;
 	txn.inbits = 0;
 	txn.outbits = 2;
 	txn.outbits = 2;
-	txn.inbuf = 0;
+	txn.inbuf = NULL;
 	txn.outbuf = outbits;
 	txn.outbuf = outbits;
 
 
 	uctrl_do_txn(&txn);
 	uctrl_do_txn(&txn);
@@ -329,7 +329,7 @@ void uctrl_get_event_status()
 	dprintk(("ev is %x\n", driver->status.event_status));
 	dprintk(("ev is %x\n", driver->status.event_status));
 }
 }
 
 
-void uctrl_get_external_status()
+void uctrl_get_external_status(void)
 {
 {
 	struct uctrl_driver *driver = &drv;
 	struct uctrl_driver *driver = &drv;
 	struct uctrl_txn txn;
 	struct uctrl_txn txn;
@@ -339,7 +339,7 @@ void uctrl_get_external_status()
 	txn.opcode = READ_EXTERNAL_STATUS;
 	txn.opcode = READ_EXTERNAL_STATUS;
 	txn.inbits = 0;
 	txn.inbits = 0;
 	txn.outbits = 2;
 	txn.outbits = 2;
-	txn.inbuf = 0;
+	txn.inbuf = NULL;
 	txn.outbuf = outbits;
 	txn.outbuf = outbits;
 
 
 	uctrl_do_txn(&txn);
 	uctrl_do_txn(&txn);
@@ -414,7 +414,7 @@ static void __exit ts102_uctrl_cleanup(void)
 	if (driver->irq)
 	if (driver->irq)
 		free_irq(driver->irq, driver);
 		free_irq(driver->irq, driver);
 	if (driver->regs)
 	if (driver->regs)
-		driver->regs = 0;
+		driver->regs = NULL;
 }
 }
 
 
 module_init(ts102_uctrl_init);
 module_init(ts102_uctrl_init);

+ 1 - 1
drivers/sbus/char/vfc.h

@@ -125,7 +125,7 @@ struct vfc_regs {
 
 
 
 
 struct vfc_dev {
 struct vfc_dev {
-	volatile struct vfc_regs *regs;
+	volatile struct vfc_regs __iomem *regs;
 	struct vfc_regs *phys_regs;
 	struct vfc_regs *phys_regs;
 	unsigned int control_reg;
 	unsigned int control_reg;
 	struct semaphore device_lock_sem;
 	struct semaphore device_lock_sem;

+ 3 - 3
drivers/sbus/char/vfc_dev.c

@@ -149,7 +149,7 @@ int init_vfc_device(struct sbus_dev *sdev,struct vfc_dev *dev, int instance)
 	}
 	}
 	printk("Initializing vfc%d\n",instance);
 	printk("Initializing vfc%d\n",instance);
 	dev->regs = NULL;
 	dev->regs = NULL;
-	dev->regs = (volatile struct vfc_regs *)
+	dev->regs = (volatile struct vfc_regs __iomem *)
 		sbus_ioremap(&sdev->resource[0], 0,
 		sbus_ioremap(&sdev->resource[0], 0,
 			     sizeof(struct vfc_regs), vfcstr);
 			     sizeof(struct vfc_regs), vfcstr);
 	dev->which_io = sdev->reg_addrs[0].which_io;
 	dev->which_io = sdev->reg_addrs[0].which_io;
@@ -319,7 +319,7 @@ int vfc_capture_poll(struct vfc_dev *dev)
 	int timeout = 1000;
 	int timeout = 1000;
 
 
 	while (!timeout--) {
 	while (!timeout--) {
-		if (dev->regs->control & VFC_STATUS_CAPTURE)
+		if (sbus_readl(&dev->regs->control) & VFC_STATUS_CAPTURE)
 			break;
 			break;
 		vfc_i2c_delay_no_busy(dev, 100);
 		vfc_i2c_delay_no_busy(dev, 100);
 	}
 	}
@@ -718,7 +718,7 @@ static void deinit_vfc_device(struct vfc_dev *dev)
 	if(dev == NULL)
 	if(dev == NULL)
 		return;
 		return;
 	devfs_remove("vfc/%d", dev->instance);
 	devfs_remove("vfc/%d", dev->instance);
-	sbus_iounmap((unsigned long)dev->regs, sizeof(struct vfc_regs));
+	sbus_iounmap(dev->regs, sizeof(struct vfc_regs));
 	kfree(dev);
 	kfree(dev);
 }
 }
 
 

+ 20 - 5
drivers/scsi/dpt_i2o.c

@@ -660,7 +660,12 @@ static int adpt_abort(struct scsi_cmnd * cmd)
 	msg[2] = 0;
 	msg[2] = 0;
 	msg[3]= 0; 
 	msg[3]= 0; 
 	msg[4] = (u32)cmd;
 	msg[4] = (u32)cmd;
-	if( (rcode = adpt_i2o_post_wait(pHba, msg, sizeof(msg), FOREVER)) != 0){
+	if (pHba->host)
+		spin_lock_irq(pHba->host->host_lock);
+	rcode = adpt_i2o_post_wait(pHba, msg, sizeof(msg), FOREVER);
+	if (pHba->host)
+		spin_unlock_irq(pHba->host->host_lock);
+	if (rcode != 0) {
 		if(rcode == -EOPNOTSUPP ){
 		if(rcode == -EOPNOTSUPP ){
 			printk(KERN_INFO"%s: Abort cmd not supported\n",pHba->name);
 			printk(KERN_INFO"%s: Abort cmd not supported\n",pHba->name);
 			return FAILED;
 			return FAILED;
@@ -697,10 +702,15 @@ static int adpt_device_reset(struct scsi_cmnd* cmd)
 	msg[2] = 0;
 	msg[2] = 0;
 	msg[3] = 0;
 	msg[3] = 0;
 
 
+	if (pHba->host)
+		spin_lock_irq(pHba->host->host_lock);
 	old_state = d->state;
 	old_state = d->state;
 	d->state |= DPTI_DEV_RESET;
 	d->state |= DPTI_DEV_RESET;
-	if( (rcode = adpt_i2o_post_wait(pHba, msg,sizeof(msg), FOREVER)) ){
-		d->state = old_state;
+	rcode = adpt_i2o_post_wait(pHba, msg,sizeof(msg), FOREVER);
+	d->state = old_state;
+	if (pHba->host)
+		spin_unlock_irq(pHba->host->host_lock);
+	if (rcode != 0) {
 		if(rcode == -EOPNOTSUPP ){
 		if(rcode == -EOPNOTSUPP ){
 			printk(KERN_INFO"%s: Device reset not supported\n",pHba->name);
 			printk(KERN_INFO"%s: Device reset not supported\n",pHba->name);
 			return FAILED;
 			return FAILED;
@@ -708,7 +718,6 @@ static int adpt_device_reset(struct scsi_cmnd* cmd)
 		printk(KERN_INFO"%s: Device reset failed\n",pHba->name);
 		printk(KERN_INFO"%s: Device reset failed\n",pHba->name);
 		return FAILED;
 		return FAILED;
 	} else {
 	} else {
-		d->state = old_state;
 		printk(KERN_INFO"%s: Device reset successful\n",pHba->name);
 		printk(KERN_INFO"%s: Device reset successful\n",pHba->name);
 		return SUCCESS;
 		return SUCCESS;
 	}
 	}
@@ -721,6 +730,7 @@ static int adpt_bus_reset(struct scsi_cmnd* cmd)
 {
 {
 	adpt_hba* pHba;
 	adpt_hba* pHba;
 	u32 msg[4];
 	u32 msg[4];
+	u32 rcode;
 
 
 	pHba = (adpt_hba*)cmd->device->host->hostdata[0];
 	pHba = (adpt_hba*)cmd->device->host->hostdata[0];
 	memset(msg, 0, sizeof(msg));
 	memset(msg, 0, sizeof(msg));
@@ -729,7 +739,12 @@ static int adpt_bus_reset(struct scsi_cmnd* cmd)
 	msg[1] = (I2O_HBA_BUS_RESET<<24|HOST_TID<<12|pHba->channel[cmd->device->channel].tid);
 	msg[1] = (I2O_HBA_BUS_RESET<<24|HOST_TID<<12|pHba->channel[cmd->device->channel].tid);
 	msg[2] = 0;
 	msg[2] = 0;
 	msg[3] = 0;
 	msg[3] = 0;
-	if(adpt_i2o_post_wait(pHba, msg,sizeof(msg), FOREVER) ){
+	if (pHba->host)
+		spin_lock_irq(pHba->host->host_lock);
+	rcode = adpt_i2o_post_wait(pHba, msg,sizeof(msg), FOREVER);
+	if (pHba->host)
+		spin_unlock_irq(pHba->host->host_lock);
+	if (rcode != 0) {
 		printk(KERN_WARNING"%s: Bus reset failed.\n",pHba->name);
 		printk(KERN_WARNING"%s: Bus reset failed.\n",pHba->name);
 		return FAILED;
 		return FAILED;
 	} else {
 	} else {

+ 1 - 1
drivers/scsi/iscsi_tcp.c

@@ -3368,7 +3368,7 @@ iscsi_conn_set_param(iscsi_connh_t connh, enum iscsi_param param,
 	switch(param) {
 	switch(param) {
 	case ISCSI_PARAM_MAX_RECV_DLENGTH: {
 	case ISCSI_PARAM_MAX_RECV_DLENGTH: {
 		char *saveptr = conn->data;
 		char *saveptr = conn->data;
-		int flags = GFP_KERNEL;
+		gfp_t flags = GFP_KERNEL;
 
 
 		if (conn->data_size >= value) {
 		if (conn->data_size >= value) {
 			conn->max_recv_dlength = value;
 			conn->max_recv_dlength = value;

+ 1 - 1
drivers/scsi/scsi_transport_iscsi.c

@@ -249,7 +249,7 @@ static inline struct list_head *skb_to_lh(struct sk_buff *skb)
 }
 }
 
 
 static void*
 static void*
-mempool_zone_alloc_skb(unsigned int gfp_mask, void *pool_data)
+mempool_zone_alloc_skb(gfp_t gfp_mask, void *pool_data)
 {
 {
 	struct mempool_zone *zone = pool_data;
 	struct mempool_zone *zone = pool_data;
 
 

+ 2 - 0
drivers/usb/host/uhci-hcd.c

@@ -717,6 +717,7 @@ static int uhci_suspend(struct usb_hcd *hcd, pm_message_t message)
 	 * at the source, so we must turn off PIRQ.
 	 * at the source, so we must turn off PIRQ.
 	 */
 	 */
 	pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP, 0);
 	pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP, 0);
+	mb();
 	clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
 	clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
 	uhci->hc_inaccessible = 1;
 	uhci->hc_inaccessible = 1;
 	hcd->poll_rh = 0;
 	hcd->poll_rh = 0;
@@ -738,6 +739,7 @@ static int uhci_resume(struct usb_hcd *hcd)
 	 * really don't want to keep a stale HCD_FLAG_HW_ACCESSIBLE=0
 	 * really don't want to keep a stale HCD_FLAG_HW_ACCESSIBLE=0
 	 */
 	 */
 	set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
 	set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
+	mb();
 
 
 	if (uhci->rh_state == UHCI_RH_RESET)	/* Dead */
 	if (uhci->rh_state == UHCI_RH_RESET)	/* Dead */
 		return 0;
 		return 0;

+ 1 - 0
drivers/usb/input/hid-input.c

@@ -137,6 +137,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
 			switch (usage->hid & 0xffff) {
 			switch (usage->hid & 0xffff) {
 				case 0xba: map_abs(ABS_RUDDER); break;
 				case 0xba: map_abs(ABS_RUDDER); break;
 				case 0xbb: map_abs(ABS_THROTTLE); break;
 				case 0xbb: map_abs(ABS_THROTTLE); break;
+				default:   goto ignore;
 			}
 			}
 			break;
 			break;
 
 

+ 1 - 1
drivers/usb/misc/auerswald.c

@@ -1696,7 +1696,7 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t
 	int ret;
 	int ret;
 	wait_queue_t wait;
 	wait_queue_t wait;
 
 
-        dbg ("auerchar_write %d bytes", len);
+        dbg ("auerchar_write %zd bytes", len);
 
 
 	/* Error checking */
 	/* Error checking */
 	if (!ccp)
 	if (!ccp)

+ 1 - 1
drivers/video/arcfb.c

@@ -441,7 +441,7 @@ static int arcfb_ioctl(struct inode *inode, struct file *file,
  * the fb. it's inefficient for them to do anything less than 64*8
  * the fb. it's inefficient for them to do anything less than 64*8
  * writes since we update the lcd in each write() anyway.
  * writes since we update the lcd in each write() anyway.
  */
  */
-static ssize_t arcfb_write(struct file *file, const char *buf, size_t count,
+static ssize_t arcfb_write(struct file *file, const char __user *buf, size_t count,
 				loff_t *ppos)
 				loff_t *ppos)
 {
 {
 	/* modded from epson 1355 */
 	/* modded from epson 1355 */

+ 5 - 3
drivers/video/console/fbcon_ud.c

@@ -420,13 +420,15 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info,
 int ud_update_start(struct fb_info *info)
 int ud_update_start(struct fb_info *info)
 {
 {
 	struct fbcon_ops *ops = info->fbcon_par;
 	struct fbcon_ops *ops = info->fbcon_par;
-	u32 xoffset, yoffset;
+	int xoffset, yoffset;
 	u32 vyres = GETVYRES(ops->p->scrollmode, info);
 	u32 vyres = GETVYRES(ops->p->scrollmode, info);
 	u32 vxres = GETVXRES(ops->p->scrollmode, info);
 	u32 vxres = GETVXRES(ops->p->scrollmode, info);
 	int err;
 	int err;
 
 
-	xoffset = (vxres - info->var.xres) - ops->var.xoffset;
-	yoffset = (vyres - info->var.yres) - ops->var.yoffset;
+	xoffset = vxres - info->var.xres - ops->var.xoffset;
+	yoffset = vyres - info->var.yres - ops->var.yoffset;
+	if (yoffset < 0)
+		yoffset += vyres;
 	ops->var.xoffset = xoffset;
 	ops->var.xoffset = xoffset;
 	ops->var.yoffset = yoffset;
 	ops->var.yoffset = yoffset;
 	err = fb_pan_display(info, &ops->var);
 	err = fb_pan_display(info, &ops->var);

+ 2 - 2
drivers/video/cyber2000fb.c

@@ -1512,7 +1512,7 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb)
 	 * I/O cycles storing into a reserved memory space at
 	 * I/O cycles storing into a reserved memory space at
 	 * physical address 0x3000000
 	 * physical address 0x3000000
 	 */
 	 */
-	unsigned char *iop;
+	unsigned char __iomem *iop;
 
 
 	iop = ioremap(0x3000000, 0x5000);
 	iop = ioremap(0x3000000, 0x5000);
 	if (iop == NULL) {
 	if (iop == NULL) {
@@ -1526,7 +1526,7 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb)
 	writeb(EXT_BIU_MISC, iop + 0x3ce);
 	writeb(EXT_BIU_MISC, iop + 0x3ce);
 	writeb(EXT_BIU_MISC_LIN_ENABLE, iop + 0x3cf);
 	writeb(EXT_BIU_MISC_LIN_ENABLE, iop + 0x3cf);
 
 
-	iounmap((void *)iop);
+	iounmap(iop);
 #else
 #else
 	/*
 	/*
 	 * Most other machine types are "normal", so
 	 * Most other machine types are "normal", so

+ 5 - 0
drivers/video/intelfb/intelfb.h

@@ -41,6 +41,10 @@
 
 
 /*** hw-related values ***/
 /*** hw-related values ***/
 
 
+/* Resource Allocation */
+#define INTELFB_FB_ACQUIRED                 1
+#define INTELFB_MMIO_ACQUIRED               2
+
 /* PCI ids for supported devices */
 /* PCI ids for supported devices */
 #define PCI_DEVICE_ID_INTEL_830M	0x3577
 #define PCI_DEVICE_ID_INTEL_830M	0x3577
 #define PCI_DEVICE_ID_INTEL_845G	0x2562
 #define PCI_DEVICE_ID_INTEL_845G	0x2562
@@ -257,6 +261,7 @@ struct intelfb_info {
 	int hwcursor;
 	int hwcursor;
 	int fixed_mode;
 	int fixed_mode;
 	int ring_active;
 	int ring_active;
+	int flag;
 
 
 	/* hw cursor */
 	/* hw cursor */
 	int cursor_on;
 	int cursor_on;

+ 20 - 31
drivers/video/intelfb/intelfbdrv.c

@@ -135,9 +135,6 @@
 static void __devinit get_initial_mode(struct intelfb_info *dinfo);
 static void __devinit get_initial_mode(struct intelfb_info *dinfo);
 static void update_dinfo(struct intelfb_info *dinfo,
 static void update_dinfo(struct intelfb_info *dinfo,
 			 struct fb_var_screeninfo *var);
 			 struct fb_var_screeninfo *var);
-static int intelfb_get_fix(struct fb_fix_screeninfo *fix,
-			   struct fb_info *info);
-
 static int intelfb_check_var(struct fb_var_screeninfo *var,
 static int intelfb_check_var(struct fb_var_screeninfo *var,
 			     struct fb_info *info);
 			     struct fb_info *info);
 static int intelfb_set_par(struct fb_info *info);
 static int intelfb_set_par(struct fb_info *info);
@@ -473,9 +470,9 @@ cleanup(struct intelfb_info *dinfo)
 	if (dinfo->aperture.virtual)
 	if (dinfo->aperture.virtual)
 		iounmap((void __iomem *)dinfo->aperture.virtual);
 		iounmap((void __iomem *)dinfo->aperture.virtual);
 
 
-	if (dinfo->mmio_base_phys)
+	if (dinfo->flag & INTELFB_MMIO_ACQUIRED)
 		release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE);
 		release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE);
-	if (dinfo->aperture.physical)
+	if (dinfo->flag & INTELFB_FB_ACQUIRED)
 		release_mem_region(dinfo->aperture.physical,
 		release_mem_region(dinfo->aperture.physical,
 				   dinfo->aperture.size);
 				   dinfo->aperture.size);
 	framebuffer_release(dinfo->info);
 	framebuffer_release(dinfo->info);
@@ -572,6 +569,9 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
 		cleanup(dinfo);
 		cleanup(dinfo);
 		return -ENODEV;
 		return -ENODEV;
 	}
 	}
+
+	dinfo->flag |= INTELFB_FB_ACQUIRED;
+
 	if (!request_mem_region(dinfo->mmio_base_phys,
 	if (!request_mem_region(dinfo->mmio_base_phys,
 				INTEL_REG_SIZE,
 				INTEL_REG_SIZE,
 				INTELFB_MODULE_NAME)) {
 				INTELFB_MODULE_NAME)) {
@@ -580,6 +580,8 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
 		return -ENODEV;
 		return -ENODEV;
 	}
 	}
 
 
+	dinfo->flag |= INTELFB_MMIO_ACQUIRED;
+
 	/* Get the chipset info. */
 	/* Get the chipset info. */
 	dinfo->pci_chipset = pdev->device;
 	dinfo->pci_chipset = pdev->device;
 
 
@@ -1091,7 +1093,17 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo)
 		return 1;
 		return 1;
 
 
 	info->pixmap.scan_align = 1;
 	info->pixmap.scan_align = 1;
-
+	strcpy(info->fix.id, dinfo->name);
+	info->fix.smem_start = dinfo->fb.physical;
+	info->fix.smem_len = dinfo->fb.size;
+	info->fix.type = FB_TYPE_PACKED_PIXELS;
+	info->fix.type_aux = 0;
+	info->fix.xpanstep = 8;
+	info->fix.ypanstep = 1;
+	info->fix.ywrapstep = 0;
+	info->fix.mmio_start = dinfo->mmio_base_phys;
+	info->fix.mmio_len = INTEL_REG_SIZE;
+	info->fix.accel = FB_ACCEL_I830;
 	update_dinfo(dinfo, &info->var);
 	update_dinfo(dinfo, &info->var);
 
 
 	return 0;
 	return 0;
@@ -1109,7 +1121,8 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
 	dinfo->yres = var->xres;
 	dinfo->yres = var->xres;
 	dinfo->pixclock = var->pixclock;
 	dinfo->pixclock = var->pixclock;
 
 
-	intelfb_get_fix(&dinfo->info->fix, dinfo->info);
+	dinfo->info->fix.visual = dinfo->visual;
+	dinfo->info->fix.line_length = dinfo->pitch;
 
 
 	switch (dinfo->bpp) {
 	switch (dinfo->bpp) {
 	case 8:
 	case 8:
@@ -1139,30 +1152,6 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
 
 
 /* fbops functions */
 /* fbops functions */
 
 
-static int
-intelfb_get_fix(struct fb_fix_screeninfo *fix, struct fb_info *info)
-{
-	struct intelfb_info *dinfo = GET_DINFO(info);
-
-	DBG_MSG("intelfb_get_fix\n");
-
-	memset(fix, 0, sizeof(*fix));
-	strcpy(fix->id, dinfo->name);
-	fix->smem_start = dinfo->fb.physical;
-	fix->smem_len = dinfo->fb.size;
-	fix->type = FB_TYPE_PACKED_PIXELS;
-	fix->type_aux = 0;
-	fix->visual = dinfo->visual;
-	fix->xpanstep = 8;
-	fix->ypanstep = 1;
-	fix->ywrapstep = 0;
-	fix->line_length = dinfo->pitch;
-	fix->mmio_start = dinfo->mmio_base_phys;
-	fix->mmio_len = INTEL_REG_SIZE;
-	fix->accel = FB_ACCEL_I830;
-	return 0;
-}
-
 /***************************************************************
 /***************************************************************
  *                       fbdev interface                       *
  *                       fbdev interface                       *
  ***************************************************************/
  ***************************************************************/

+ 4 - 0
fs/lockd/clntlock.c

@@ -157,6 +157,8 @@ void nlmclnt_mark_reclaim(struct nlm_host *host)
 		inode = fl->fl_file->f_dentry->d_inode;
 		inode = fl->fl_file->f_dentry->d_inode;
 		if (inode->i_sb->s_magic != NFS_SUPER_MAGIC)
 		if (inode->i_sb->s_magic != NFS_SUPER_MAGIC)
 			continue;
 			continue;
+		if (fl->fl_u.nfs_fl.owner == NULL)
+			continue;
 		if (fl->fl_u.nfs_fl.owner->host != host)
 		if (fl->fl_u.nfs_fl.owner->host != host)
 			continue;
 			continue;
 		if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_GRANTED))
 		if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_GRANTED))
@@ -226,6 +228,8 @@ restart:
 		inode = fl->fl_file->f_dentry->d_inode;
 		inode = fl->fl_file->f_dentry->d_inode;
 		if (inode->i_sb->s_magic != NFS_SUPER_MAGIC)
 		if (inode->i_sb->s_magic != NFS_SUPER_MAGIC)
 			continue;
 			continue;
+		if (fl->fl_u.nfs_fl.owner == NULL)
+			continue;
 		if (fl->fl_u.nfs_fl.owner->host != host)
 		if (fl->fl_u.nfs_fl.owner->host != host)
 			continue;
 			continue;
 		if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_RECLAIM))
 		if (!(fl->fl_u.nfs_fl.flags & NFS_LCK_RECLAIM))

+ 6 - 18
fs/nfs/direct.c

@@ -678,15 +678,9 @@ nfs_file_direct_read(struct kiocb *iocb, char __user *buf, size_t count, loff_t
 	if (!count)
 	if (!count)
 		goto out;
 		goto out;
 
 
-	if (mapping->nrpages) {
-		retval = filemap_fdatawrite(mapping);
-		if (retval == 0)
-			retval = nfs_wb_all(inode);
-		if (retval == 0)
-			retval = filemap_fdatawait(mapping);
-		if (retval)
-			goto out;
-	}
+	retval = nfs_sync_mapping(mapping);
+	if (retval)
+		goto out;
 
 
 	retval = nfs_direct_read(inode, ctx, &iov, pos, 1);
 	retval = nfs_direct_read(inode, ctx, &iov, pos, 1);
 	if (retval > 0)
 	if (retval > 0)
@@ -764,15 +758,9 @@ nfs_file_direct_write(struct kiocb *iocb, const char __user *buf, size_t count,
 	if (!count)
 	if (!count)
 		goto out;
 		goto out;
 
 
-	if (mapping->nrpages) {
-		retval = filemap_fdatawrite(mapping);
-		if (retval == 0)
-			retval = nfs_wb_all(inode);
-		if (retval == 0)
-			retval = filemap_fdatawait(mapping);
-		if (retval)
-			goto out;
-	}
+	retval = nfs_sync_mapping(mapping);
+	if (retval)
+		goto out;
 
 
 	retval = nfs_direct_write(inode, ctx, &iov, pos, 1);
 	retval = nfs_direct_write(inode, ctx, &iov, pos, 1);
 	if (mapping->nrpages)
 	if (mapping->nrpages)

+ 4 - 19
fs/nfs/file.c

@@ -433,11 +433,7 @@ static int do_unlk(struct file *filp, int cmd, struct file_lock *fl)
 	 * Flush all pending writes before doing anything
 	 * Flush all pending writes before doing anything
 	 * with locks..
 	 * with locks..
 	 */
 	 */
-	filemap_fdatawrite(filp->f_mapping);
-	down(&inode->i_sem);
-	nfs_wb_all(inode);
-	up(&inode->i_sem);
-	filemap_fdatawait(filp->f_mapping);
+	nfs_sync_mapping(filp->f_mapping);
 
 
 	/* NOTE: special case
 	/* NOTE: special case
 	 * 	If we're signalled while cleaning up locks on process exit, we
 	 * 	If we're signalled while cleaning up locks on process exit, we
@@ -465,15 +461,8 @@ static int do_setlk(struct file *filp, int cmd, struct file_lock *fl)
 	 * Flush all pending writes before doing anything
 	 * Flush all pending writes before doing anything
 	 * with locks..
 	 * with locks..
 	 */
 	 */
-	status = filemap_fdatawrite(filp->f_mapping);
-	if (status == 0) {
-		down(&inode->i_sem);
-		status = nfs_wb_all(inode);
-		up(&inode->i_sem);
-		if (status == 0)
-			status = filemap_fdatawait(filp->f_mapping);
-	}
-	if (status < 0)
+	status = nfs_sync_mapping(filp->f_mapping);
+	if (status != 0)
 		goto out;
 		goto out;
 
 
 	lock_kernel();
 	lock_kernel();
@@ -497,11 +486,7 @@ static int do_setlk(struct file *filp, int cmd, struct file_lock *fl)
 	 * Make sure we clear the cache whenever we try to get the lock.
 	 * Make sure we clear the cache whenever we try to get the lock.
 	 * This makes locking act as a cache coherency point.
 	 * This makes locking act as a cache coherency point.
 	 */
 	 */
-	filemap_fdatawrite(filp->f_mapping);
-	down(&inode->i_sem);
-	nfs_wb_all(inode);	/* we may have slept */
-	up(&inode->i_sem);
-	filemap_fdatawait(filp->f_mapping);
+	nfs_sync_mapping(filp->f_mapping);
 	nfs_zap_caches(inode);
 	nfs_zap_caches(inode);
 out:
 out:
 	rpc_clnt_sigunmask(NFS_CLIENT(inode), &oldset);
 	rpc_clnt_sigunmask(NFS_CLIENT(inode), &oldset);

+ 23 - 5
fs/nfs/inode.c

@@ -640,6 +640,27 @@ static int nfs_show_options(struct seq_file *m, struct vfsmount *mnt)
 	return 0;
 	return 0;
 }
 }
 
 
+/**
+ * nfs_sync_mapping - helper to flush all mmapped dirty data to disk
+ */
+int nfs_sync_mapping(struct address_space *mapping)
+{
+	int ret;
+
+	if (mapping->nrpages == 0)
+		return 0;
+	unmap_mapping_range(mapping, 0, 0, 0);
+	ret = filemap_fdatawrite(mapping);
+	if (ret != 0)
+		goto out;
+	ret = filemap_fdatawait(mapping);
+	if (ret != 0)
+		goto out;
+	ret = nfs_wb_all(mapping->host);
+out:
+	return ret;
+}
+
 /*
 /*
  * Invalidate the local caches
  * Invalidate the local caches
  */
  */
@@ -1179,11 +1200,8 @@ void nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
 	struct nfs_inode *nfsi = NFS_I(inode);
 	struct nfs_inode *nfsi = NFS_I(inode);
 
 
 	if (nfsi->cache_validity & NFS_INO_INVALID_DATA) {
 	if (nfsi->cache_validity & NFS_INO_INVALID_DATA) {
-		if (S_ISREG(inode->i_mode)) {
-			if (filemap_fdatawrite(mapping) == 0)
-				filemap_fdatawait(mapping);
-			nfs_wb_all(inode);
-		}
+		if (S_ISREG(inode->i_mode))
+			nfs_sync_mapping(mapping);
 		invalidate_inode_pages2(mapping);
 		invalidate_inode_pages2(mapping);
 
 
 		spin_lock(&inode->i_lock);
 		spin_lock(&inode->i_lock);

+ 1 - 1
fs/nfsd/nfs2acl.c

@@ -107,7 +107,7 @@ static int nfsacld_proc_setacl(struct svc_rqst * rqstp,
 	dprintk("nfsd: SETACL(2acl)   %s\n", SVCFH_fmt(&argp->fh));
 	dprintk("nfsd: SETACL(2acl)   %s\n", SVCFH_fmt(&argp->fh));
 
 
 	fh = fh_copy(&resp->fh, &argp->fh);
 	fh = fh_copy(&resp->fh, &argp->fh);
-	nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_NOP);
+	nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_SATTR);
 
 
 	if (!nfserr) {
 	if (!nfserr) {
 		nfserr = nfserrno( nfsd_set_posix_acl(
 		nfserr = nfserrno( nfsd_set_posix_acl(

+ 1 - 1
fs/nfsd/nfs3acl.c

@@ -101,7 +101,7 @@ static int nfsd3_proc_setacl(struct svc_rqst * rqstp,
 	int nfserr = 0;
 	int nfserr = 0;
 
 
 	fh = fh_copy(&resp->fh, &argp->fh);
 	fh = fh_copy(&resp->fh, &argp->fh);
-	nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_NOP);
+	nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_SATTR);
 
 
 	if (!nfserr) {
 	if (!nfserr) {
 		nfserr = nfserrno( nfsd_set_posix_acl(
 		nfserr = nfserrno( nfsd_set_posix_acl(

+ 6 - 2
fs/relayfs/relay.c

@@ -333,8 +333,7 @@ size_t relay_switch_subbuf(struct rchan_buf *buf, size_t length)
 	return length;
 	return length;
 
 
 toobig:
 toobig:
-	printk(KERN_WARNING "relayfs: event too large (%Zd)\n", length);
-	WARN_ON(1);
+	buf->chan->last_toobig = length;
 	return 0;
 	return 0;
 }
 }
 
 
@@ -399,6 +398,11 @@ void relay_close(struct rchan *chan)
 		relay_close_buf(chan->buf[i]);
 		relay_close_buf(chan->buf[i]);
 	}
 	}
 
 
+	if (chan->last_toobig)
+		printk(KERN_WARNING "relayfs: one or more items not logged "
+		       "[item size (%Zd) > sub-buffer size (%Zd)]\n",
+		       chan->last_toobig, chan->subbuf_size);
+
 	kref_put(&chan->kref, relay_destroy_channel);
 	kref_put(&chan->kref, relay_destroy_channel);
 }
 }
 
 

+ 2 - 2
fs/xfs/quota/xfs_qm.c

@@ -78,7 +78,7 @@ STATIC int	xfs_qm_dqhashlock_nowait(xfs_dquot_t *);
 
 
 STATIC int	xfs_qm_init_quotainos(xfs_mount_t *);
 STATIC int	xfs_qm_init_quotainos(xfs_mount_t *);
 STATIC int	xfs_qm_init_quotainfo(xfs_mount_t *);
 STATIC int	xfs_qm_init_quotainfo(xfs_mount_t *);
-STATIC int	xfs_qm_shake(int, unsigned int);
+STATIC int	xfs_qm_shake(int, gfp_t);
 
 
 #ifdef DEBUG
 #ifdef DEBUG
 extern mutex_t	qcheck_lock;
 extern mutex_t	qcheck_lock;
@@ -2197,7 +2197,7 @@ xfs_qm_shake_freelist(
  */
  */
 /* ARGSUSED */
 /* ARGSUSED */
 STATIC int
 STATIC int
-xfs_qm_shake(int nr_to_scan, unsigned int gfp_mask)
+xfs_qm_shake(int nr_to_scan, gfp_t gfp_mask)
 {
 {
 	int	ndqused, nfree, n;
 	int	ndqused, nfree, n;
 
 

+ 1 - 9
include/asm-ia64/delay.h

@@ -84,14 +84,6 @@ __delay (unsigned long loops)
 	ia64_delay_loop (loops - 1);
 	ia64_delay_loop (loops - 1);
 }
 }
 
 
-static __inline__ void
-udelay (unsigned long usecs)
-{
-	unsigned long start = ia64_get_itc();
-	unsigned long cycles = usecs*local_cpu_data->cyc_per_usec;
-
-	while (ia64_get_itc() - start < cycles)
-		cpu_relax();
-}
+extern void udelay (unsigned long usecs);
 
 
 #endif /* _ASM_IA64_DELAY_H */
 #endif /* _ASM_IA64_DELAY_H */

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels