فهرست منبع

Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git

Steve French 20 سال پیش
والد
کامیت
160b13f17c
93فایلهای تغییر یافته به همراه361 افزوده شده و 313 حذف شده
  1. 1 1
      Makefile
  2. 1 1
      arch/alpha/Kconfig
  3. 3 3
      arch/alpha/kernel/smp.c
  4. 3 3
      arch/alpha/oprofile/common.c
  5. 1 1
      arch/arm/Kconfig
  6. 1 1
      arch/arm/kernel/traps.c
  7. 3 3
      arch/arm/nwfpe/fpopcode.h
  8. 6 4
      arch/i386/kernel/traps.c
  9. 1 1
      arch/ia64/hp/sim/boot/boot_head.S
  10. 1 0
      arch/ia64/pci/pci.c
  11. 10 8
      arch/ia64/sn/kernel/io_init.c
  12. 2 1
      arch/m32r/Kconfig
  13. 1 1
      arch/m32r/Kconfig.debug
  14. 3 1
      arch/m32r/kernel/setup_m32700ut.c
  15. 3 1
      arch/m32r/kernel/setup_opsput.c
  16. 1 0
      arch/m32r/kernel/smpboot.c
  17. 1 0
      arch/m32r/lib/csum_partial_copy.c
  18. 2 0
      arch/m32r/mm/discontig.c
  19. 4 1
      arch/ppc/Kconfig
  20. 10 4
      arch/ppc/platforms/4xx/Kconfig
  21. 2 0
      arch/ppc64/kernel/setup.c
  22. 4 4
      arch/s390/kernel/cpcmd.c
  23. 1 0
      arch/sparc64/kernel/pci.c
  24. 13 8
      arch/x86_64/defconfig
  25. 11 2
      arch/x86_64/pci/k8-bus.c
  26. 21 10
      drivers/block/cfq-iosched.c
  27. 4 4
      drivers/char/Kconfig
  28. 1 0
      drivers/infiniband/Kconfig
  29. 1 0
      drivers/isdn/hisax/Kconfig
  30. 1 1
      drivers/macintosh/Kconfig
  31. 3 4
      drivers/md/md.c
  32. 1 1
      drivers/media/video/Kconfig
  33. 2 2
      drivers/net/Kconfig
  34. 1 2
      drivers/net/ibm_emac/ibm_emac_core.c
  35. 1 1
      drivers/net/tokenring/Kconfig
  36. 1 1
      drivers/net/wireless/Kconfig
  37. 1 1
      drivers/parport/Kconfig
  38. 1 0
      drivers/pcmcia/pcmcia_resource.c
  39. 1 1
      drivers/s390/cio/qdio.c
  40. 0 9
      drivers/s390/crypto/z90crypt.h
  41. 3 3
      drivers/scsi/Kconfig
  42. 1 0
      drivers/scsi/ahci.c
  43. 1 1
      drivers/scsi/arm/Kconfig
  44. 1 1
      drivers/scsi/ata_piix.c
  45. 0 25
      drivers/scsi/libata-core.c
  46. 1 1
      drivers/scsi/libata.h
  47. 1 1
      drivers/scsi/sata_promise.c
  48. 2 2
      drivers/serial/Kconfig
  49. 1 1
      drivers/serial/m32r_sio.c
  50. 1 1
      drivers/usb/net/usbnet.c
  51. 1 2
      drivers/usb/net/zd1201.c
  52. 1 1
      drivers/video/console/Kconfig
  53. 13 16
      include/asm-alpha/system.h
  54. 4 2
      include/asm-arm/arch-ixp4xx/timex.h
  55. 1 1
      include/asm-arm/bug.h
  56. 1 1
      include/asm-arm/cpu-multi32.h
  57. 1 1
      include/asm-arm/cpu-single.h
  58. 0 8
      include/asm-ia64/io.h
  59. 0 2
      include/asm-m32r/smp.h
  60. 3 3
      include/asm-m68k/page.h
  61. 1 1
      include/asm-ppc/time.h
  62. 2 19
      include/asm-s390/uaccess.h
  63. 16 2
      include/net/ax25.h
  64. 5 0
      include/net/sock.h
  65. 2 0
      include/sound/core.h
  66. 19 0
      kernel/cpuset.c
  67. 1 1
      kernel/timer.c
  68. 4 1
      lib/vsprintf.c
  69. 13 14
      net/ax25/af_ax25.c
  70. 7 5
      net/ax25/ax25_route.c
  71. 36 47
      net/ax25/ax25_uid.c
  72. 7 4
      net/ipv4/inetpeer.c
  73. 7 0
      net/ipv4/netfilter/ip_queue.c
  74. 1 1
      net/ipv4/tcp.c
  75. 7 2
      net/ipv4/tcp_ipv4.c
  76. 0 4
      net/ipv4/tcp_output.c
  77. 7 0
      net/ipv6/netfilter/ip6_queue.c
  78. 7 2
      net/ipv6/tcp_ipv6.c
  79. 17 14
      net/netrom/af_netrom.c
  80. 14 13
      net/rose/af_rose.c
  81. 4 2
      net/rose/rose_route.c
  82. 1 0
      net/sched/sch_generic.c
  83. 1 0
      net/sctp/proc.c
  84. 0 2
      net/sunrpc/auth_gss/gss_krb5_crypto.c
  85. 1 1
      sound/Kconfig
  86. 1 1
      sound/core/Makefile
  87. 1 1
      sound/core/sound.c
  88. 1 1
      sound/isa/Kconfig
  89. 8 8
      sound/oss/Kconfig
  90. 1 1
      sound/oss/Makefile
  91. 2 2
      sound/oss/i810_audio.c
  92. 0 4
      sound/oss/vidc.h
  93. 1 1
      sound/pci/Kconfig

+ 1 - 1
Makefile

@@ -1,7 +1,7 @@
 VERSION = 2
 VERSION = 2
 PATCHLEVEL = 6
 PATCHLEVEL = 6
 SUBLEVEL = 13
 SUBLEVEL = 13
-EXTRAVERSION =-rc6
+EXTRAVERSION =-rc7
 NAME=Woozy Numbat
 NAME=Woozy Numbat
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*

+ 1 - 1
arch/alpha/Kconfig

@@ -522,7 +522,7 @@ source "mm/Kconfig"
 
 
 config NUMA
 config NUMA
 	bool "NUMA Support (EXPERIMENTAL)"
 	bool "NUMA Support (EXPERIMENTAL)"
-	depends on DISCONTIGMEM
+	depends on DISCONTIGMEM && BROKEN
 	help
 	help
 	  Say Y to compile the kernel to support NUMA (Non-Uniform Memory
 	  Say Y to compile the kernel to support NUMA (Non-Uniform Memory
 	  Access).  This option is for configuring high-end multiprocessor
 	  Access).  This option is for configuring high-end multiprocessor

+ 3 - 3
arch/alpha/kernel/smp.c

@@ -1036,7 +1036,7 @@ debug_spin_lock(spinlock_t * lock, const char *base_file, int line_no)
 	"	br	1b\n"
 	"	br	1b\n"
 	".previous"
 	".previous"
 	: "=r" (tmp), "=m" (lock->lock), "=r" (stuck)
 	: "=r" (tmp), "=m" (lock->lock), "=r" (stuck)
-	: "1" (lock->lock), "2" (stuck) : "memory");
+	: "m" (lock->lock), "2" (stuck) : "memory");
 
 
 	if (stuck < 0) {
 	if (stuck < 0) {
 		printk(KERN_WARNING
 		printk(KERN_WARNING
@@ -1115,7 +1115,7 @@ void _raw_write_lock(rwlock_t * lock)
 	".previous"
 	".previous"
 	: "=m" (*(volatile int *)lock), "=&r" (regx), "=&r" (regy),
 	: "=m" (*(volatile int *)lock), "=&r" (regx), "=&r" (regy),
 	  "=&r" (stuck_lock), "=&r" (stuck_reader)
 	  "=&r" (stuck_lock), "=&r" (stuck_reader)
-	: "0" (*(volatile int *)lock), "3" (stuck_lock), "4" (stuck_reader) : "memory");
+	: "m" (*(volatile int *)lock), "3" (stuck_lock), "4" (stuck_reader) : "memory");
 
 
 	if (stuck_lock < 0) {
 	if (stuck_lock < 0) {
 		printk(KERN_WARNING "write_lock stuck at %p\n", inline_pc);
 		printk(KERN_WARNING "write_lock stuck at %p\n", inline_pc);
@@ -1153,7 +1153,7 @@ void _raw_read_lock(rwlock_t * lock)
 	"	br	1b\n"
 	"	br	1b\n"
 	".previous"
 	".previous"
 	: "=m" (*(volatile int *)lock), "=&r" (regx), "=&r" (stuck_lock)
 	: "=m" (*(volatile int *)lock), "=&r" (regx), "=&r" (stuck_lock)
-	: "0" (*(volatile int *)lock), "2" (stuck_lock) : "memory");
+	: "m" (*(volatile int *)lock), "2" (stuck_lock) : "memory");
 
 
 	if (stuck_lock < 0) {
 	if (stuck_lock < 0) {
 		printk(KERN_WARNING "read_lock stuck at %p\n", inline_pc);
 		printk(KERN_WARNING "read_lock stuck at %p\n", inline_pc);

+ 3 - 3
arch/alpha/oprofile/common.c

@@ -65,7 +65,7 @@ op_axp_setup(void)
 	model->reg_setup(&reg, ctr, &sys);
 	model->reg_setup(&reg, ctr, &sys);
 
 
 	/* Configure the registers on all cpus.  */
 	/* Configure the registers on all cpus.  */
-	smp_call_function(model->cpu_setup, &reg, 0, 1);
+	(void)smp_call_function(model->cpu_setup, &reg, 0, 1);
 	model->cpu_setup(&reg);
 	model->cpu_setup(&reg);
 	return 0;
 	return 0;
 }
 }
@@ -86,7 +86,7 @@ op_axp_cpu_start(void *dummy)
 static int
 static int
 op_axp_start(void)
 op_axp_start(void)
 {
 {
-	smp_call_function(op_axp_cpu_start, NULL, 0, 1);
+	(void)smp_call_function(op_axp_cpu_start, NULL, 0, 1);
 	op_axp_cpu_start(NULL);
 	op_axp_cpu_start(NULL);
 	return 0;
 	return 0;
 }
 }
@@ -101,7 +101,7 @@ op_axp_cpu_stop(void *dummy)
 static void
 static void
 op_axp_stop(void)
 op_axp_stop(void)
 {
 {
-	smp_call_function(op_axp_cpu_stop, NULL, 0, 1);
+	(void)smp_call_function(op_axp_cpu_stop, NULL, 0, 1);
 	op_axp_cpu_stop(NULL);
 	op_axp_cpu_stop(NULL);
 }
 }
 
 

+ 1 - 1
arch/arm/Kconfig

@@ -310,7 +310,7 @@ menu "Kernel Features"
 
 
 config SMP
 config SMP
 	bool "Symmetric Multi-Processing (EXPERIMENTAL)"
 	bool "Symmetric Multi-Processing (EXPERIMENTAL)"
-	depends on EXPERIMENTAL #&& n
+	depends on EXPERIMENTAL && BROKEN #&& n
 	help
 	help
 	  This enables support for systems with more than one CPU. If you have
 	  This enables support for systems with more than one CPU. If you have
 	  a system with only one CPU, like most personal computers, say N. If
 	  a system with only one CPU, like most personal computers, say N. If

+ 1 - 1
arch/arm/kernel/traps.c

@@ -617,7 +617,7 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
 	notify_die("unknown data abort code", regs, &info, instr, 0);
 	notify_die("unknown data abort code", regs, &info, instr, 0);
 }
 }
 
 
-volatile void __bug(const char *file, int line, void *data)
+void __attribute__((noreturn)) __bug(const char *file, int line, void *data)
 {
 {
 	printk(KERN_CRIT"kernel BUG at %s:%d!", file, line);
 	printk(KERN_CRIT"kernel BUG at %s:%d!", file, line);
 	if (data)
 	if (data)

+ 3 - 3
arch/arm/nwfpe/fpopcode.h

@@ -370,20 +370,20 @@ TABLE 5
 #define getRoundingMode(opcode)		((opcode & MASK_ROUNDING_MODE) >> 5)
 #define getRoundingMode(opcode)		((opcode & MASK_ROUNDING_MODE) >> 5)
 
 
 #ifdef CONFIG_FPE_NWFPE_XP
 #ifdef CONFIG_FPE_NWFPE_XP
-static inline const floatx80 getExtendedConstant(const unsigned int nIndex)
+static inline __attribute_pure__ floatx80 getExtendedConstant(const unsigned int nIndex)
 {
 {
 	extern const floatx80 floatx80Constant[];
 	extern const floatx80 floatx80Constant[];
 	return floatx80Constant[nIndex];
 	return floatx80Constant[nIndex];
 }
 }
 #endif
 #endif
 
 
-static inline const float64 getDoubleConstant(const unsigned int nIndex)
+static inline __attribute_pure__ float64 getDoubleConstant(const unsigned int nIndex)
 {
 {
 	extern const float64 float64Constant[];
 	extern const float64 float64Constant[];
 	return float64Constant[nIndex];
 	return float64Constant[nIndex];
 }
 }
 
 
-static inline const float32 getSingleConstant(const unsigned int nIndex)
+static inline __attribute_pure__ float32 getSingleConstant(const unsigned int nIndex)
 {
 {
 	extern const float32 float32Constant[];
 	extern const float32 float32Constant[];
 	return float32Constant[nIndex];
 	return float32Constant[nIndex];

+ 6 - 4
arch/i386/kernel/traps.c

@@ -803,15 +803,17 @@ void math_error(void __user *eip)
 	 */
 	 */
 	cwd = get_fpu_cwd(task);
 	cwd = get_fpu_cwd(task);
 	swd = get_fpu_swd(task);
 	swd = get_fpu_swd(task);
-	switch (((~cwd) & swd & 0x3f) | (swd & 0x240)) {
+	switch (swd & ~cwd & 0x3f) {
 		case 0x000:
 		case 0x000:
 		default:
 		default:
 			break;
 			break;
 		case 0x001: /* Invalid Op */
 		case 0x001: /* Invalid Op */
-		case 0x041: /* Stack Fault */
-		case 0x241: /* Stack Fault | Direction */
+			/*
+			 * swd & 0x240 == 0x040: Stack Underflow
+			 * swd & 0x240 == 0x240: Stack Overflow
+			 * User must clear the SF bit (0x40) if set
+			 */
 			info.si_code = FPE_FLTINV;
 			info.si_code = FPE_FLTINV;
-			/* Should we clear the SF or let user space do it ???? */
 			break;
 			break;
 		case 0x002: /* Denormalize */
 		case 0x002: /* Denormalize */
 		case 0x010: /* Underflow */
 		case 0x010: /* Underflow */

+ 1 - 1
arch/ia64/hp/sim/boot/boot_head.S

@@ -22,7 +22,7 @@ GLOBAL_ENTRY(_start)
 	.save rp, r0
 	.save rp, r0
 	.body
 	.body
 	movl gp = __gp
 	movl gp = __gp
-	movl sp = stack_mem
+	movl sp = stack_mem+16384-16
 	bsw.1
 	bsw.1
 	br.call.sptk.many rp=start_bootloader
 	br.call.sptk.many rp=start_bootloader
 END(_start)
 END(_start)

+ 1 - 0
arch/ia64/pci/pci.c

@@ -380,6 +380,7 @@ void pcibios_bus_to_resource(struct pci_dev *dev,
 	res->start = region->start + offset;
 	res->start = region->start + offset;
 	res->end = region->end + offset;
 	res->end = region->end + offset;
 }
 }
+EXPORT_SYMBOL(pcibios_bus_to_resource);
 
 
 static int __devinit is_valid_resource(struct pci_dev *dev, int idx)
 static int __devinit is_valid_resource(struct pci_dev *dev, int idx)
 {
 {

+ 10 - 8
arch/ia64/sn/kernel/io_init.c

@@ -323,7 +323,7 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
 	struct pci_controller *controller;
 	struct pci_controller *controller;
 	struct pcibus_bussoft *prom_bussoft_ptr;
 	struct pcibus_bussoft *prom_bussoft_ptr;
 	struct hubdev_info *hubdev_info;
 	struct hubdev_info *hubdev_info;
-	void *provider_soft;
+	void *provider_soft = NULL;
 	struct sn_pcibus_provider *provider;
 	struct sn_pcibus_provider *provider;
 
 
  	status = sal_get_pcibus_info((u64) segment, (u64) busnum,
  	status = sal_get_pcibus_info((u64) segment, (u64) busnum,
@@ -339,7 +339,7 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
 	if (bus == NULL) {
 	if (bus == NULL) {
  		bus = pci_scan_bus(busnum, &pci_root_ops, controller);
  		bus = pci_scan_bus(busnum, &pci_root_ops, controller);
  		if (bus == NULL)
  		if (bus == NULL)
- 			return;	/* error, or bus already scanned */
+ 			goto error_return; /* error, or bus already scanned */
  		bus->sysdata = NULL;
  		bus->sysdata = NULL;
 	}
 	}
 
 
@@ -352,28 +352,30 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
 	 */
 	 */
 
 
 	if (prom_bussoft_ptr->bs_asic_type >= PCIIO_ASIC_MAX_TYPES)
 	if (prom_bussoft_ptr->bs_asic_type >= PCIIO_ASIC_MAX_TYPES)
-		return;		/* unsupported asic type */
+		goto error_return; /* unsupported asic type */
 
 
 	if (prom_bussoft_ptr->bs_asic_type == PCIIO_ASIC_TYPE_PPB)
 	if (prom_bussoft_ptr->bs_asic_type == PCIIO_ASIC_TYPE_PPB)
 		goto error_return; /* no further fixup necessary */
 		goto error_return; /* no further fixup necessary */
 
 
 	provider = sn_pci_provider[prom_bussoft_ptr->bs_asic_type];
 	provider = sn_pci_provider[prom_bussoft_ptr->bs_asic_type];
 	if (provider == NULL)
 	if (provider == NULL)
-		return;		/* no provider registerd for this asic */
+		goto error_return; /* no provider registerd for this asic */
 
 
-	provider_soft = NULL;
+	bus->sysdata = controller;
 	if (provider->bus_fixup)
 	if (provider->bus_fixup)
 		provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller);
 		provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller);
 
 
-	if (provider_soft == NULL)
-		return;		/* fixup failed or not applicable */
+	if (provider_soft == NULL) {
+		/* fixup failed or not applicable */
+		bus->sysdata = NULL;
+		goto error_return;
+	}
 
 
 	/*
 	/*
 	 * Generic bus fixup goes here.  Don't reference prom_bussoft_ptr
 	 * Generic bus fixup goes here.  Don't reference prom_bussoft_ptr
 	 * after this point.
 	 * after this point.
 	 */
 	 */
 
 
-	bus->sysdata = controller;
 	PCI_CONTROLLER(bus)->platform_data = provider_soft;
 	PCI_CONTROLLER(bus)->platform_data = provider_soft;
 	nasid = NASID_GET(SN_PCIBUS_BUSSOFT(bus)->bs_base);
 	nasid = NASID_GET(SN_PCIBUS_BUSSOFT(bus)->bs_base);
 	cnode = nasid_to_cnodeid(nasid);
 	cnode = nasid_to_cnodeid(nasid);

+ 2 - 1
arch/m32r/Kconfig

@@ -269,7 +269,7 @@ config NR_CPUS
 # Common NUMA Features
 # Common NUMA Features
 config NUMA
 config NUMA
 	bool "Numa Memory Allocation Support"
 	bool "Numa Memory Allocation Support"
-	depends on SMP
+	depends on SMP && BROKEN
 	default n
 	default n
 
 
 # turning this on wastes a bunch of space.
 # turning this on wastes a bunch of space.
@@ -286,6 +286,7 @@ menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
 
 
 config PCI
 config PCI
 	bool "PCI support"
 	bool "PCI support"
+	depends on BROKEN
 	default n
 	default n
 	help
 	help
 	  Find out whether you have a PCI motherboard. PCI is the name of a
 	  Find out whether you have a PCI motherboard. PCI is the name of a

+ 1 - 1
arch/m32r/Kconfig.debug

@@ -20,7 +20,7 @@ config DEBUG_STACK_USAGE
 
 
 config DEBUG_PAGEALLOC
 config DEBUG_PAGEALLOC
 	bool "Page alloc debugging"
 	bool "Page alloc debugging"
-	depends on DEBUG_KERNEL
+	depends on DEBUG_KERNEL && BROKEN
 	help
 	help
 	  Unmap pages from the kernel linear mapping after free_pages().
 	  Unmap pages from the kernel linear mapping after free_pages().
 	  This results in a large slowdown, but helps to find certain types
 	  This results in a large slowdown, but helps to find certain types

+ 3 - 1
arch/m32r/kernel/setup_m32700ut.c

@@ -30,9 +30,11 @@
 typedef struct {
 typedef struct {
 	unsigned long icucr;  /* ICU Control Register */
 	unsigned long icucr;  /* ICU Control Register */
 } icu_data_t;
 } icu_data_t;
+static icu_data_t icu_data[M32700UT_NUM_CPU_IRQ];
+#else
+icu_data_t icu_data[M32700UT_NUM_CPU_IRQ];
 #endif /* CONFIG_SMP */
 #endif /* CONFIG_SMP */
 
 
-static icu_data_t icu_data[M32700UT_NUM_CPU_IRQ];
 
 
 static void disable_m32700ut_irq(unsigned int irq)
 static void disable_m32700ut_irq(unsigned int irq)
 {
 {

+ 3 - 1
arch/m32r/kernel/setup_opsput.c

@@ -31,9 +31,11 @@
 typedef struct {
 typedef struct {
 	unsigned long icucr;  /* ICU Control Register */
 	unsigned long icucr;  /* ICU Control Register */
 } icu_data_t;
 } icu_data_t;
+static icu_data_t icu_data[OPSPUT_NUM_CPU_IRQ];
+#else
+icu_data_t icu_data[OPSPUT_NUM_CPU_IRQ];
 #endif /* CONFIG_SMP */
 #endif /* CONFIG_SMP */
 
 
-static icu_data_t icu_data[OPSPUT_NUM_CPU_IRQ];
 
 
 static void disable_opsput_irq(unsigned int irq)
 static void disable_opsput_irq(unsigned int irq)
 {
 {

+ 1 - 0
arch/m32r/kernel/smpboot.c

@@ -91,6 +91,7 @@ extern struct {
 
 
 /* which physical physical ID maps to which logical CPU number */
 /* which physical physical ID maps to which logical CPU number */
 static volatile int physid_2_cpu[NR_CPUS];
 static volatile int physid_2_cpu[NR_CPUS];
+#define physid_to_cpu(physid)	physid_2_cpu[physid]
 
 
 /* which logical CPU number maps to which physical ID */
 /* which logical CPU number maps to which physical ID */
 volatile int cpu_2_physid[NR_CPUS];
 volatile int cpu_2_physid[NR_CPUS];

+ 1 - 0
arch/m32r/lib/csum_partial_copy.c

@@ -58,3 +58,4 @@ csum_partial_copy_from_user (const unsigned char __user *src,
 	return csum_partial(dst, len-missing, sum);
 	return csum_partial(dst, len-missing, sum);
 }
 }
 EXPORT_SYMBOL(csum_partial_copy_from_user);
 EXPORT_SYMBOL(csum_partial_copy_from_user);
+EXPORT_SYMBOL(csum_partial);

+ 2 - 0
arch/m32r/mm/discontig.c

@@ -12,12 +12,14 @@
 #include <linux/mmzone.h>
 #include <linux/mmzone.h>
 #include <linux/initrd.h>
 #include <linux/initrd.h>
 #include <linux/nodemask.h>
 #include <linux/nodemask.h>
+#include <linux/module.h>
 
 
 #include <asm/setup.h>
 #include <asm/setup.h>
 
 
 extern char _end[];
 extern char _end[];
 
 
 struct pglist_data *node_data[MAX_NUMNODES];
 struct pglist_data *node_data[MAX_NUMNODES];
+EXPORT_SYMBOL(node_data);
 static bootmem_data_t node_bdata[MAX_NUMNODES] __initdata;
 static bootmem_data_t node_bdata[MAX_NUMNODES] __initdata;
 
 
 pg_data_t m32r_node_data[MAX_NUMNODES];
 pg_data_t m32r_node_data[MAX_NUMNODES];

+ 4 - 1
arch/ppc/Kconfig

@@ -911,6 +911,7 @@ config PPCBUG_NVRAM
 	default y if PPC_PREP
 	default y if PPC_PREP
 
 
 config SMP
 config SMP
+	depends on PPC_STD_MMU
 	bool "Symmetric multi-processing support"
 	bool "Symmetric multi-processing support"
 	---help---
 	---help---
 	  This enables support for systems with more than one CPU. If you have
 	  This enables support for systems with more than one CPU. If you have
@@ -930,7 +931,7 @@ config SMP
 
 
 config IRQ_ALL_CPUS
 config IRQ_ALL_CPUS
 	bool "Distribute interrupts on all CPUs by default"
 	bool "Distribute interrupts on all CPUs by default"
-	depends on SMP
+	depends on SMP && !MV64360
 	help
 	help
 	  This option gives the kernel permission to distribute IRQs across
 	  This option gives the kernel permission to distribute IRQs across
 	  multiple CPUs.  Saying N here will route all IRQs to the first
 	  multiple CPUs.  Saying N here will route all IRQs to the first
@@ -1121,7 +1122,9 @@ config PROC_HARDWARE
 
 
 source "drivers/zorro/Kconfig"
 source "drivers/zorro/Kconfig"
 
 
+if !44x || BROKEN
 source kernel/power/Kconfig
 source kernel/power/Kconfig
+endif
 
 
 config SECCOMP
 config SECCOMP
 	bool "Enable seccomp to safely compute untrusted bytecode"
 	bool "Enable seccomp to safely compute untrusted bytecode"

+ 10 - 4
arch/ppc/platforms/4xx/Kconfig

@@ -3,6 +3,11 @@ config 4xx
 	depends on 40x || 44x
 	depends on 40x || 44x
 	default y
 	default y
 
 
+config WANT_EARLY_SERIAL
+	bool
+	select SERIAL_8250
+	default n
+
 menu "IBM 4xx options"
 menu "IBM 4xx options"
 	depends on 4xx
 	depends on 4xx
 
 
@@ -18,6 +23,7 @@ config ASH
 
 
 config BUBINGA
 config BUBINGA
 	bool "Bubinga"
 	bool "Bubinga"
+	select WANT_EARLY_SERIAL
 	help
 	help
 	  This option enables support for the IBM 405EP evaluation board.
 	  This option enables support for the IBM 405EP evaluation board.
 
 
@@ -70,21 +76,25 @@ choice
 
 
 config BAMBOO
 config BAMBOO
 	bool "Bamboo"
 	bool "Bamboo"
+	select WANT_EARLY_SERIAL
 	help
 	help
 	  This option enables support for the IBM PPC440EP evaluation board.
 	  This option enables support for the IBM PPC440EP evaluation board.
 
 
 config EBONY
 config EBONY
 	bool "Ebony"
 	bool "Ebony"
+	select WANT_EARLY_SERIAL
 	help
 	help
 	  This option enables support for the IBM PPC440GP evaluation board.
 	  This option enables support for the IBM PPC440GP evaluation board.
 
 
 config LUAN
 config LUAN
 	bool "Luan"
 	bool "Luan"
+	select WANT_EARLY_SERIAL
 	help
 	help
 	  This option enables support for the IBM PPC440SP evaluation board.
 	  This option enables support for the IBM PPC440SP evaluation board.
 
 
 config OCOTEA
 config OCOTEA
 	bool "Ocotea"
 	bool "Ocotea"
+	select WANT_EARLY_SERIAL
 	help
 	help
 	  This option enables support for the IBM PPC440GX evaluation board.
 	  This option enables support for the IBM PPC440GX evaluation board.
 
 
@@ -230,10 +240,6 @@ config PPC_GEN550
 	depends on 4xx
 	depends on 4xx
 	default y
 	default y
 
 
-config PM
-	bool "Power Management support (EXPERIMENTAL)"
-	depends on 4xx && EXPERIMENTAL
-
 choice
 choice
 	prompt "TTYS0 device and default console"
 	prompt "TTYS0 device and default console"
 	depends on 40x
 	depends on 40x

+ 2 - 0
arch/ppc64/kernel/setup.c

@@ -706,6 +706,8 @@ void machine_power_off(void)
 	local_irq_disable();
 	local_irq_disable();
 	while (1) ;
 	while (1) ;
 }
 }
+/* Used by the G5 thermal driver */
+EXPORT_SYMBOL_GPL(machine_power_off);
 
 
 void machine_halt(void)
 void machine_halt(void)
 {
 {

+ 4 - 4
arch/s390/kernel/cpcmd.c

@@ -46,9 +46,9 @@ int  __cpcmd(const char *cmd, char *response, int rlen, int *response_code)
 				"lra	3,0(%4)\n"
 				"lra	3,0(%4)\n"
 				"lr	5,%5\n"
 				"lr	5,%5\n"
 				"diag	2,4,0x8\n"
 				"diag	2,4,0x8\n"
-				"brc	8, .Litfits\n"
+				"brc	8, 1f\n"
 				"ar	5, %5\n"
 				"ar	5, %5\n"
-				".Litfits: \n"
+				"1: \n"
 				"lr	%0,4\n"
 				"lr	%0,4\n"
 				"lr	%1,5\n"
 				"lr	%1,5\n"
 				: "=d" (return_code), "=d" (return_len)
 				: "=d" (return_code), "=d" (return_len)
@@ -64,9 +64,9 @@ int  __cpcmd(const char *cmd, char *response, int rlen, int *response_code)
 				"sam31\n"
 				"sam31\n"
 				"diag	2,4,0x8\n"
 				"diag	2,4,0x8\n"
 				"sam64\n"
 				"sam64\n"
-				"brc	8, .Litfits\n"
+				"brc	8, 1f\n"
 				"agr	5, %5\n"
 				"agr	5, %5\n"
-				".Litfits: \n"
+				"1: \n"
 				"lgr	%0,4\n"
 				"lgr	%0,4\n"
 				"lgr	%1,5\n"
 				"lgr	%1,5\n"
 				: "=d" (return_code), "=d" (return_len)
 				: "=d" (return_code), "=d" (return_len)

+ 1 - 0
arch/sparc64/kernel/pci.c

@@ -540,6 +540,7 @@ void pcibios_bus_to_resource(struct pci_dev *pdev, struct resource *res,
 
 
 	pbm->parent->resource_adjust(pdev, res, root);
 	pbm->parent->resource_adjust(pdev, res, root);
 }
 }
+EXPORT_SYMBOL(pcibios_bus_to_resource);
 
 
 char * __init pcibios_setup(char *str)
 char * __init pcibios_setup(char *str)
 {
 {

+ 13 - 8
arch/x86_64/defconfig

@@ -1,7 +1,7 @@
 #
 #
 # Automatically generated make config: don't edit
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.13-rc3
-# Fri Jul 22 16:47:31 2005
+# Linux kernel version: 2.6.13-rc6-git3
+# Fri Aug 12 16:40:34 2005
 #
 #
 CONFIG_X86_64=y
 CONFIG_X86_64=y
 CONFIG_64BIT=y
 CONFIG_64BIT=y
@@ -284,10 +284,6 @@ CONFIG_IPV6=y
 # Network testing
 # Network testing
 #
 #
 # CONFIG_NET_PKTGEN is not set
 # CONFIG_NET_PKTGEN is not set
-CONFIG_NETPOLL=y
-# CONFIG_NETPOLL_RX is not set
-# CONFIG_NETPOLL_TRAP is not set
-CONFIG_NET_POLL_CONTROLLER=y
 # CONFIG_HAMRADIO is not set
 # CONFIG_HAMRADIO is not set
 # CONFIG_IRDA is not set
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
 # CONFIG_BT is not set
@@ -463,6 +459,7 @@ CONFIG_AIC79XX_DEBUG_MASK=0
 # CONFIG_MEGARAID_NEWGEN is not set
 # CONFIG_MEGARAID_NEWGEN is not set
 # CONFIG_MEGARAID_LEGACY is not set
 # CONFIG_MEGARAID_LEGACY is not set
 CONFIG_SCSI_SATA=y
 CONFIG_SCSI_SATA=y
+# CONFIG_SCSI_SATA_AHCI is not set
 # CONFIG_SCSI_SATA_SVW is not set
 # CONFIG_SCSI_SATA_SVW is not set
 CONFIG_SCSI_ATA_PIIX=y
 CONFIG_SCSI_ATA_PIIX=y
 # CONFIG_SCSI_SATA_NV is not set
 # CONFIG_SCSI_SATA_NV is not set
@@ -492,6 +489,7 @@ CONFIG_SCSI_QLA2XXX=y
 # CONFIG_SCSI_QLA2300 is not set
 # CONFIG_SCSI_QLA2300 is not set
 # CONFIG_SCSI_QLA2322 is not set
 # CONFIG_SCSI_QLA2322 is not set
 # CONFIG_SCSI_QLA6312 is not set
 # CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_QLA24XX is not set
 # CONFIG_SCSI_LPFC is not set
 # CONFIG_SCSI_LPFC is not set
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_DC390T is not set
@@ -512,9 +510,11 @@ CONFIG_BLK_DEV_DM=y
 #
 #
 # Fusion MPT device support
 # Fusion MPT device support
 #
 #
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
+CONFIG_FUSION=y
+CONFIG_FUSION_SPI=y
 # CONFIG_FUSION_FC is not set
 # CONFIG_FUSION_FC is not set
+CONFIG_FUSION_MAX_SGE=128
+# CONFIG_FUSION_CTL is not set
 
 
 #
 #
 # IEEE 1394 (FireWire) support
 # IEEE 1394 (FireWire) support
@@ -585,6 +585,7 @@ CONFIG_8139TOO=y
 # CONFIG_ACENIC is not set
 # CONFIG_ACENIC is not set
 # CONFIG_DL2K is not set
 # CONFIG_DL2K is not set
 CONFIG_E1000=y
 CONFIG_E1000=y
+# CONFIG_E1000_NAPI is not set
 # CONFIG_NS83820 is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_YELLOWFIN is not set
@@ -624,6 +625,10 @@ CONFIG_S2IO=m
 # CONFIG_NET_FC is not set
 # CONFIG_NET_FC is not set
 # CONFIG_SHAPER is not set
 # CONFIG_SHAPER is not set
 CONFIG_NETCONSOLE=y
 CONFIG_NETCONSOLE=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
 
 
 #
 #
 # ISDN subsystem
 # ISDN subsystem

+ 11 - 2
arch/x86_64/pci/k8-bus.c

@@ -47,13 +47,22 @@ fill_mp_bus_to_cpumask(void)
 			 * if there are no busses hanging off of the current
 			 * if there are no busses hanging off of the current
 			 * ldt link then both the secondary and subordinate
 			 * ldt link then both the secondary and subordinate
 			 * bus number fields are set to 0.
 			 * bus number fields are set to 0.
+			 * 
+			 * RED-PEN
+			 * This is slightly broken because it assumes
+ 			 * HT node IDs == Linux node ids, which is not always
+			 * true. However it is probably mostly true.
 			 */
 			 */
 			if (!(SECONDARY_LDT_BUS_NUMBER(ldtbus) == 0
 			if (!(SECONDARY_LDT_BUS_NUMBER(ldtbus) == 0
 				&& SUBORDINATE_LDT_BUS_NUMBER(ldtbus) == 0)) {
 				&& SUBORDINATE_LDT_BUS_NUMBER(ldtbus) == 0)) {
 				for (j = SECONDARY_LDT_BUS_NUMBER(ldtbus);
 				for (j = SECONDARY_LDT_BUS_NUMBER(ldtbus);
 				     j <= SUBORDINATE_LDT_BUS_NUMBER(ldtbus);
 				     j <= SUBORDINATE_LDT_BUS_NUMBER(ldtbus);
-				     j++)
-					pci_bus_to_node[j] = NODE_ID(nid);
+				     j++) { 
+					int node = NODE_ID(nid);
+					if (!node_online(node))
+						node = 0;
+					pci_bus_to_node[j] = node;
+				}		
 			}
 			}
 		}
 		}
 	}
 	}

+ 21 - 10
drivers/block/cfq-iosched.c

@@ -47,7 +47,7 @@ static int cfq_slice_idle = HZ / 100;
 /*
 /*
  * disable queueing at the driver/hardware level
  * disable queueing at the driver/hardware level
  */
  */
-static int cfq_max_depth = 1;
+static int cfq_max_depth = 2;
 
 
 /*
 /*
  * for the hash of cfqq inside the cfqd
  * for the hash of cfqq inside the cfqd
@@ -385,9 +385,15 @@ cfq_choose_req(struct cfq_data *cfqd, struct cfq_rq *crq1, struct cfq_rq *crq2)
 		return crq2;
 		return crq2;
 	if (crq2 == NULL)
 	if (crq2 == NULL)
 		return crq1;
 		return crq1;
-	if (cfq_crq_requeued(crq1))
+
+	if (cfq_crq_requeued(crq1) && !cfq_crq_requeued(crq2))
 		return crq1;
 		return crq1;
-	if (cfq_crq_requeued(crq2))
+	else if (cfq_crq_requeued(crq2) && !cfq_crq_requeued(crq1))
+		return crq2;
+
+	if (cfq_crq_is_sync(crq1) && !cfq_crq_is_sync(crq2))
+		return crq1;
+	else if (cfq_crq_is_sync(crq2) && !cfq_crq_is_sync(crq1))
 		return crq2;
 		return crq2;
 
 
 	s1 = crq1->request->sector;
 	s1 = crq1->request->sector;
@@ -1769,18 +1775,23 @@ static void
 cfq_crq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
 cfq_crq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
 		 struct cfq_rq *crq)
 		 struct cfq_rq *crq)
 {
 {
-	const int sync = cfq_crq_is_sync(crq);
+	struct cfq_io_context *cic;
 
 
 	cfqq->next_crq = cfq_choose_req(cfqd, cfqq->next_crq, crq);
 	cfqq->next_crq = cfq_choose_req(cfqd, cfqq->next_crq, crq);
 
 
-	if (sync) {
-		struct cfq_io_context *cic = crq->io_context;
+	/*
+	 * we never wait for an async request and we don't allow preemption
+	 * of an async request. so just return early
+	 */
+	if (!cfq_crq_is_sync(crq))
+		return;
 
 
-		cfq_update_io_thinktime(cfqd, cic);
-		cfq_update_idle_window(cfqd, cfqq, cic);
+	cic = crq->io_context;
 
 
-		cic->last_queue = jiffies;
-	}
+	cfq_update_io_thinktime(cfqd, cic);
+	cfq_update_idle_window(cfqd, cfqq, cic);
+
+	cic->last_queue = jiffies;
 
 
 	if (cfqq == cfqd->active_queue) {
 	if (cfqq == cfqd->active_queue) {
 		/*
 		/*

+ 4 - 4
drivers/char/Kconfig

@@ -80,7 +80,7 @@ config SERIAL_NONSTANDARD
 
 
 config COMPUTONE
 config COMPUTONE
 	tristate "Computone IntelliPort Plus serial support"
 	tristate "Computone IntelliPort Plus serial support"
-	depends on SERIAL_NONSTANDARD && BROKEN_ON_SMP
+	depends on SERIAL_NONSTANDARD && BROKEN_ON_SMP && (BROKEN || !SPARC32)
 	---help---
 	---help---
 	  This driver supports the entire family of Intelliport II/Plus
 	  This driver supports the entire family of Intelliport II/Plus
 	  controllers with the exception of the MicroChannel controllers and
 	  controllers with the exception of the MicroChannel controllers and
@@ -138,7 +138,7 @@ config CYZ_INTR
 
 
 config DIGIEPCA
 config DIGIEPCA
 	tristate "Digiboard Intelligent Async Support"
 	tristate "Digiboard Intelligent Async Support"
-	depends on SERIAL_NONSTANDARD && BROKEN_ON_SMP
+	depends on SERIAL_NONSTANDARD && BROKEN_ON_SMP && (!64BIT || BROKEN)
 	---help---
 	---help---
 	  This is a driver for Digi International's Xx, Xeve, and Xem series
 	  This is a driver for Digi International's Xx, Xeve, and Xem series
 	  of cards which provide multiple serial ports. You would need
 	  of cards which provide multiple serial ports. You would need
@@ -208,7 +208,7 @@ config SYNCLINK
 
 
 config SYNCLINKMP
 config SYNCLINKMP
 	tristate "SyncLink Multiport support"
 	tristate "SyncLink Multiport support"
-	depends on SERIAL_NONSTANDARD
+	depends on SERIAL_NONSTANDARD && (BROKEN || !SPARC32)
 	help
 	help
 	  Enable support for the SyncLink Multiport (2 or 4 ports)
 	  Enable support for the SyncLink Multiport (2 or 4 ports)
 	  serial adapter, running asynchronous and HDLC communications up
 	  serial adapter, running asynchronous and HDLC communications up
@@ -735,7 +735,7 @@ config SGI_IP27_RTC
 
 
 config GEN_RTC
 config GEN_RTC
 	tristate "Generic /dev/rtc emulation"
 	tristate "Generic /dev/rtc emulation"
-	depends on RTC!=y && !IA64 && !ARM && !PPC64
+	depends on RTC!=y && !IA64 && !ARM && !PPC64 && !M32R && !SPARC32
 	---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

+ 1 - 0
drivers/infiniband/Kconfig

@@ -1,6 +1,7 @@
 menu "InfiniBand support"
 menu "InfiniBand support"
 
 
 config INFINIBAND
 config INFINIBAND
+	depends on PCI || BROKEN
 	tristate "InfiniBand support"
 	tristate "InfiniBand support"
 	---help---
 	---help---
 	  Core support for InfiniBand (IB).  Make sure to also select
 	  Core support for InfiniBand (IB).  Make sure to also select

+ 1 - 0
drivers/isdn/hisax/Kconfig

@@ -134,6 +134,7 @@ config HISAX_AVM_A1
 
 
 config HISAX_FRITZPCI
 config HISAX_FRITZPCI
 	bool "AVM PnP/PCI (Fritz!PnP/PCI)"
 	bool "AVM PnP/PCI (Fritz!PnP/PCI)"
+	depends on BROKEN || !PPC64
 	help
 	help
 	  This enables HiSax support for the AVM "Fritz!PnP" and "Fritz!PCI".
 	  This enables HiSax support for the AVM "Fritz!PnP" and "Fritz!PCI".
 	  See <file:Documentation/isdn/README.HiSax> on how to configure it.
 	  See <file:Documentation/isdn/README.HiSax> on how to configure it.

+ 1 - 1
drivers/macintosh/Kconfig

@@ -103,7 +103,7 @@ config PMAC_MEDIABAY
 # on non-powerbook machines (but only on PMU based ones AFAIK)
 # on non-powerbook machines (but only on PMU based ones AFAIK)
 config PMAC_BACKLIGHT
 config PMAC_BACKLIGHT
 	bool "Backlight control for LCD screens"
 	bool "Backlight control for LCD screens"
-	depends on ADB_PMU
+	depends on ADB_PMU && (BROKEN || !PPC64)
 	help
 	help
 	  Say Y here to build in code to manage the LCD backlight on a
 	  Say Y here to build in code to manage the LCD backlight on a
 	  Macintosh PowerBook.  With this code, the backlight will be turned
 	  Macintosh PowerBook.  With this code, the backlight will be turned

+ 3 - 4
drivers/md/md.c

@@ -256,8 +256,7 @@ static inline void mddev_unlock(mddev_t * mddev)
 {
 {
 	up(&mddev->reconfig_sem);
 	up(&mddev->reconfig_sem);
 
 
-	if (mddev->thread)
-		md_wakeup_thread(mddev->thread);
+	md_wakeup_thread(mddev->thread);
 }
 }
 
 
 mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr)
 mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr)
@@ -1714,6 +1713,7 @@ static int do_md_run(mddev_t * mddev)
 	mddev->in_sync = 1;
 	mddev->in_sync = 1;
 	
 	
 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
+	md_wakeup_thread(mddev->thread);
 	
 	
 	if (mddev->sb_dirty)
 	if (mddev->sb_dirty)
 		md_update_sb(mddev);
 		md_update_sb(mddev);
@@ -2236,8 +2236,7 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
 			export_rdev(rdev);
 			export_rdev(rdev);
 
 
 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
-		if (mddev->thread)
-			md_wakeup_thread(mddev->thread);
+		md_wakeup_thread(mddev->thread);
 		return err;
 		return err;
 	}
 	}
 
 

+ 1 - 1
drivers/media/video/Kconfig

@@ -356,7 +356,7 @@ config VIDEO_M32R_AR
 
 
 config VIDEO_M32R_AR_M64278
 config VIDEO_M32R_AR_M64278
 	tristate "Use Colour AR module M64278(VGA)"
 	tristate "Use Colour AR module M64278(VGA)"
-	depends on VIDEO_M32R_AR
+	depends on VIDEO_M32R_AR && PLAT_M32700UT
 	---help---
 	---help---
 	  Say Y here to use the Renesas M64278E-800 camera module,
 	  Say Y here to use the Renesas M64278E-800 camera module,
 	  which supports VGA(640x480 pixcels) size of images.
 	  which supports VGA(640x480 pixcels) size of images.

+ 2 - 2
drivers/net/Kconfig

@@ -1145,7 +1145,7 @@ config IBMVETH
 	  be called ibmveth.
 	  be called ibmveth.
 
 
 config IBM_EMAC
 config IBM_EMAC
-	tristate "IBM PPC4xx EMAC driver support"
+	bool "IBM PPC4xx EMAC driver support"
 	depends on 4xx
 	depends on 4xx
 	select CRC32
 	select CRC32
 	---help---
 	---help---
@@ -1154,7 +1154,7 @@ config IBM_EMAC
 
 
 config IBM_EMAC_ERRMSG
 config IBM_EMAC_ERRMSG
 	bool "Verbose error messages"
 	bool "Verbose error messages"
-	depends on IBM_EMAC
+	depends on IBM_EMAC && BROKEN
 
 
 config IBM_EMAC_RXB
 config IBM_EMAC_RXB
 	int "Number of receive buffers"
 	int "Number of receive buffers"

+ 1 - 2
drivers/net/ibm_emac/ibm_emac_core.c

@@ -1712,11 +1712,10 @@ struct mal_commac_ops emac_commac_ops = {
 };
 };
 
 
 #ifdef CONFIG_NET_POLL_CONTROLLER
 #ifdef CONFIG_NET_POLL_CONTROLLER
-static int emac_netpoll(struct net_device *ndev)
+static void emac_netpoll(struct net_device *ndev)
 {
 {
 	emac_rxeob_dev((void *)ndev, 0);
 	emac_rxeob_dev((void *)ndev, 0);
 	emac_txeob_dev((void *)ndev, 0);
 	emac_txeob_dev((void *)ndev, 0);
-	return 0;
 }
 }
 #endif
 #endif
 
 

+ 1 - 1
drivers/net/tokenring/Kconfig

@@ -84,7 +84,7 @@ config 3C359
 
 
 config TMS380TR
 config TMS380TR
 	tristate "Generic TMS380 Token Ring ISA/PCI adapter support"
 	tristate "Generic TMS380 Token Ring ISA/PCI adapter support"
-	depends on TR && (PCI || ISA)
+	depends on TR && (PCI || ISA && ISA_DMA_API)
 	select FW_LOADER
 	select FW_LOADER
 	---help---
 	---help---
 	  This driver provides generic support for token ring adapters
 	  This driver provides generic support for token ring adapters

+ 1 - 1
drivers/net/wireless/Kconfig

@@ -270,7 +270,7 @@ config PCMCIA_HERMES
 
 
 config AIRO_CS
 config AIRO_CS
 	tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
 	tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
-	depends on NET_RADIO && PCMCIA
+	depends on NET_RADIO && PCMCIA && (BROKEN || !M32R)
 	---help---
 	---help---
 	  This is the standard Linux driver to support Cisco/Aironet PCMCIA
 	  This is the standard Linux driver to support Cisco/Aironet PCMCIA
 	  802.11 wireless cards.  This driver is the same as the Aironet
 	  802.11 wireless cards.  This driver is the same as the Aironet

+ 1 - 1
drivers/parport/Kconfig

@@ -34,7 +34,7 @@ config PARPORT
 
 
 config PARPORT_PC
 config PARPORT_PC
 	tristate "PC-style hardware"
 	tristate "PC-style hardware"
-	depends on PARPORT && (!SPARC64 || PCI) && !SPARC32
+	depends on PARPORT && (!SPARC64 || PCI) && !SPARC32 && !M32R
 	---help---
 	---help---
 	  You should say Y here if you have a PC-style parallel port. All
 	  You should say Y here if you have a PC-style parallel port. All
 	  IBM PC compatible computers and some Alphas have PC-style
 	  IBM PC compatible computers and some Alphas have PC-style

+ 1 - 0
drivers/pcmcia/pcmcia_resource.c

@@ -41,6 +41,7 @@ module_param(io_speed, int, 0444);
 
 
 
 
 #ifdef CONFIG_PCMCIA_PROBE
 #ifdef CONFIG_PCMCIA_PROBE
+#include <asm/irq.h>
 /* mask of IRQs already reserved by other cards, we should avoid using them */
 /* mask of IRQs already reserved by other cards, we should avoid using them */
 static u8 pcmcia_used_irq[NR_IRQS];
 static u8 pcmcia_used_irq[NR_IRQS];
 #endif
 #endif

+ 1 - 1
drivers/s390/cio/qdio.c

@@ -230,7 +230,7 @@ qdio_siga_input(struct qdio_q *q)
 }
 }
 
 
 /* locked by the locks in qdio_activate and qdio_cleanup */
 /* locked by the locks in qdio_activate and qdio_cleanup */
-static __u32 * volatile 
+static __u32 volatile *
 qdio_get_indicator(void)
 qdio_get_indicator(void)
 {
 {
 	int i;
 	int i;

+ 0 - 9
drivers/s390/crypto/z90crypt.h

@@ -35,15 +35,6 @@
 #define z90crypt_RELEASE 3	// 2 = PCIXCC, 3 = rewrite for coding standards
 #define z90crypt_RELEASE 3	// 2 = PCIXCC, 3 = rewrite for coding standards
 #define z90crypt_VARIANT 2	// 2 = added PCIXCC MCL3 and CEX2C support
 #define z90crypt_VARIANT 2	// 2 = added PCIXCC MCL3 and CEX2C support
 
 
-/**
- * If we are not using the sparse checker, __user has no use.
- */
-#ifdef __CHECKER__
-# define __user		__attribute__((noderef, address_space(1)))
-#else
-# define __user
-#endif
-
 /**
 /**
  * struct ica_rsa_modexpo
  * struct ica_rsa_modexpo
  *
  *

+ 3 - 3
drivers/scsi/Kconfig

@@ -1696,7 +1696,7 @@ config TT_DMA_EMUL
 
 
 config MAC_SCSI
 config MAC_SCSI
 	bool "Macintosh NCR5380 SCSI"
 	bool "Macintosh NCR5380 SCSI"
-	depends on MAC && SCSI
+	depends on MAC && SCSI=y
 	help
 	help
 	  This is the NCR 5380 SCSI controller included on most of the 68030
 	  This is the NCR 5380 SCSI controller included on most of the 68030
 	  based Macintoshes.  If you have one of these say Y and read the
 	  based Macintoshes.  If you have one of these say Y and read the
@@ -1717,7 +1717,7 @@ config SCSI_MAC_ESP
 
 
 config MVME147_SCSI
 config MVME147_SCSI
 	bool "WD33C93 SCSI driver for MVME147"
 	bool "WD33C93 SCSI driver for MVME147"
-	depends on MVME147 && SCSI
+	depends on MVME147 && SCSI=y
 	help
 	help
 	  Support for the on-board SCSI controller on the Motorola MVME147
 	  Support for the on-board SCSI controller on the Motorola MVME147
 	  single-board computer.
 	  single-board computer.
@@ -1758,7 +1758,7 @@ config SUN3_SCSI
 
 
 config SUN3X_ESP
 config SUN3X_ESP
 	bool "Sun3x ESP SCSI"
 	bool "Sun3x ESP SCSI"
-	depends on SUN3X && SCSI
+	depends on SUN3X && SCSI=y
 	help
 	help
 	  The ESP was an on-board SCSI controller used on Sun 3/80
 	  The ESP was an on-board SCSI controller used on Sun 3/80
 	  machines.  Say Y here to compile in support for it.
 	  machines.  Say Y here to compile in support for it.

+ 1 - 0
drivers/scsi/ahci.c

@@ -1105,6 +1105,7 @@ MODULE_AUTHOR("Jeff Garzik");
 MODULE_DESCRIPTION("AHCI SATA low-level driver");
 MODULE_DESCRIPTION("AHCI SATA low-level driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
 MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
 MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
+MODULE_VERSION(DRV_VERSION);
 
 
 module_init(ahci_init);
 module_init(ahci_init);
 module_exit(ahci_exit);
 module_exit(ahci_exit);

+ 1 - 1
drivers/scsi/arm/Kconfig

@@ -3,7 +3,7 @@
 #
 #
 config SCSI_ACORNSCSI_3
 config SCSI_ACORNSCSI_3
 	tristate "Acorn SCSI card (aka30) support"
 	tristate "Acorn SCSI card (aka30) support"
-	depends on ARCH_ACORN && SCSI
+	depends on ARCH_ACORN && SCSI && BROKEN
 	help
 	help
 	  This enables support for the Acorn SCSI card (aka30). If you have an
 	  This enables support for the Acorn SCSI card (aka30). If you have an
 	  Acorn system with one of these, say Y. If unsure, say N.
 	  Acorn system with one of these, say Y. If unsure, say N.

+ 1 - 1
drivers/scsi/ata_piix.c

@@ -32,7 +32,7 @@
 #include <linux/libata.h>
 #include <linux/libata.h>
 
 
 #define DRV_NAME	"ata_piix"
 #define DRV_NAME	"ata_piix"
-#define DRV_VERSION	"1.03"
+#define DRV_VERSION	"1.04"
 
 
 enum {
 enum {
 	PIIX_IOCFG		= 0x54, /* IDE I/O configuration register */
 	PIIX_IOCFG		= 0x54, /* IDE I/O configuration register */

+ 0 - 25
drivers/scsi/libata-core.c

@@ -2268,19 +2268,6 @@ void ata_qc_prep(struct ata_queued_cmd *qc)
  *	spin_lock_irqsave(host_set lock)
  *	spin_lock_irqsave(host_set lock)
  */
  */
 
 
-
-
-/**
- *	ata_sg_init_one - Prepare a one-entry scatter-gather list.
- *	@qc:  Queued command
- *	@buf:  transfer buffer
- *	@buflen:  length of buf
- *
- *	Builds a single-entry scatter-gather list to initiate a
- *	transfer utilizing the specified buffer.
- *
- *	LOCKING:
- */
 void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, unsigned int buflen)
 void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, unsigned int buflen)
 {
 {
 	struct scatterlist *sg;
 	struct scatterlist *sg;
@@ -2312,18 +2299,6 @@ void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, unsigned int buflen)
  *	spin_lock_irqsave(host_set lock)
  *	spin_lock_irqsave(host_set lock)
  */
  */
 
 
-
-/**
- *	ata_sg_init - Assign a scatter gather list to a queued command
- *	@qc:  Queued command
- *	@sg:  Scatter-gather list
- *	@n_elem:  length of sg list
- *
- *	Attaches a scatter-gather list to a queued command.
- *
- *	LOCKING:
- */
-
 void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
 void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
 		 unsigned int n_elem)
 		 unsigned int n_elem)
 {
 {

+ 1 - 1
drivers/scsi/libata.h

@@ -26,7 +26,7 @@
 #define __LIBATA_H__
 #define __LIBATA_H__
 
 
 #define DRV_NAME	"libata"
 #define DRV_NAME	"libata"
-#define DRV_VERSION	"1.11"	/* must be exactly four chars */
+#define DRV_VERSION	"1.12"	/* must be exactly four chars */
 
 
 struct ata_scsi_args {
 struct ata_scsi_args {
 	u16			*id;
 	u16			*id;

+ 1 - 1
drivers/scsi/sata_promise.c

@@ -40,7 +40,7 @@
 #include "sata_promise.h"
 #include "sata_promise.h"
 
 
 #define DRV_NAME	"sata_promise"
 #define DRV_NAME	"sata_promise"
-#define DRV_VERSION	"1.01"
+#define DRV_VERSION	"1.02"
 
 
 
 
 enum {
 enum {

+ 2 - 2
drivers/serial/Kconfig

@@ -211,7 +211,7 @@ comment "Non-8250 serial port support"
 
 
 config SERIAL_AMBA_PL010
 config SERIAL_AMBA_PL010
 	tristate "ARM AMBA PL010 serial port support"
 	tristate "ARM AMBA PL010 serial port support"
-	depends on ARM_AMBA
+	depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE)
 	select SERIAL_CORE
 	select SERIAL_CORE
 	help
 	help
 	  This selects the ARM(R) AMBA(R) PrimeCell PL010 UART.  If you have
 	  This selects the ARM(R) AMBA(R) PrimeCell PL010 UART.  If you have
@@ -819,7 +819,7 @@ config SERIAL_M32R_SIO_CONSOLE
 
 
 config SERIAL_M32R_PLDSIO
 config SERIAL_M32R_PLDSIO
 	bool "M32R SIO I/F on a PLD"
 	bool "M32R SIO I/F on a PLD"
-	depends on SERIAL_M32R_SIO=y
+	depends on SERIAL_M32R_SIO=y && (PLAT_OPSPUT || PALT_USRV || PLAT_M32700UT)
 	default n
 	default n
 	help
 	help
 	  Say Y here if you want to use the M32R serial controller
 	  Say Y here if you want to use the M32R serial controller

+ 1 - 1
drivers/serial/m32r_sio.c

@@ -1123,7 +1123,7 @@ static int __init m32r_sio_console_setup(struct console *co, char *options)
 	return uart_set_options(port, co, baud, parity, bits, flow);
 	return uart_set_options(port, co, baud, parity, bits, flow);
 }
 }
 
 
-extern struct uart_driver m32r_sio_reg;
+static struct uart_driver m32r_sio_reg;
 static struct console m32r_sio_console = {
 static struct console m32r_sio_console = {
 	.name		= "ttyS",
 	.name		= "ttyS",
 	.write		= m32r_sio_console_write,
 	.write		= m32r_sio_console_write,

+ 1 - 1
drivers/usb/net/usbnet.c

@@ -1922,7 +1922,7 @@ static int genelink_rx_fixup (struct usbnet *dev, struct sk_buff *skb)
 
 
 			// copy the packet data to the new skb
 			// copy the packet data to the new skb
 			memcpy(skb_put(gl_skb, size), packet->packet_data, size);
 			memcpy(skb_put(gl_skb, size), packet->packet_data, size);
-			skb_return (dev, skb);
+			skb_return (dev, gl_skb);
 		}
 		}
 
 
 		// advance to the next packet
 		// advance to the next packet

+ 1 - 2
drivers/usb/net/zd1201.c

@@ -346,8 +346,7 @@ static void zd1201_usbrx(struct urb *urb, struct pt_regs *regs)
 			if (datalen<14)
 			if (datalen<14)
 				goto resubmit;
 				goto resubmit;
 			if ((seq & IEEE802_11_SCTL_FRAG) == 0) {
 			if ((seq & IEEE802_11_SCTL_FRAG) == 0) {
-				frag = kmalloc(sizeof(struct zd1201_frag*),
-				    GFP_ATOMIC);
+				frag = kmalloc(sizeof(*frag), GFP_ATOMIC);
 				if (!frag)
 				if (!frag)
 					goto resubmit;
 					goto resubmit;
 				skb = dev_alloc_skb(IEEE802_11_DATA_LEN +14+2);
 				skb = dev_alloc_skb(IEEE802_11_DATA_LEN +14+2);

+ 1 - 1
drivers/video/console/Kconfig

@@ -6,7 +6,7 @@ menu "Console display driver support"
 
 
 config VGA_CONSOLE
 config VGA_CONSOLE
 	bool "VGA text console" if EMBEDDED || !X86
 	bool "VGA text console" if EMBEDDED || !X86
-	depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC32 && !SPARC64 && !M68K && !PARISC
+	depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC32 && !SPARC64 && !M68K && !PARISC && !ARCH_VERSATILE
 	default y
 	default y
 	help
 	help
 	  Saying Y here will allow you to use Linux in text mode through a
 	  Saying Y here will allow you to use Linux in text mode through a

+ 13 - 16
include/asm-alpha/system.h

@@ -443,22 +443,19 @@ __xchg_u64(volatile long *m, unsigned long val)
    if something tries to do an invalid xchg().  */
    if something tries to do an invalid xchg().  */
 extern void __xchg_called_with_bad_pointer(void);
 extern void __xchg_called_with_bad_pointer(void);
 
 
-static inline unsigned long
-__xchg(volatile void *ptr, unsigned long x, int size)
-{
-	switch (size) {
-		case 1:
-			return __xchg_u8(ptr, x);
-		case 2:
-			return __xchg_u16(ptr, x);
-		case 4:
-			return __xchg_u32(ptr, x);
-		case 8:
-			return __xchg_u64(ptr, x);
-	}
-	__xchg_called_with_bad_pointer();
-	return x;
-}
+#define __xchg(ptr, x, size) \
+({ \
+	unsigned long __xchg__res; \
+	volatile void *__xchg__ptr = (ptr); \
+	switch (size) { \
+		case 1: __xchg__res = __xchg_u8(__xchg__ptr, x); break; \
+		case 2: __xchg__res = __xchg_u16(__xchg__ptr, x); break; \
+		case 4: __xchg__res = __xchg_u32(__xchg__ptr, x); break; \
+		case 8: __xchg__res = __xchg_u64(__xchg__ptr, x); break; \
+		default: __xchg_called_with_bad_pointer(); __xchg__res = x; \
+	} \
+	__xchg__res; \
+})
 
 
 #define xchg(ptr,x)							     \
 #define xchg(ptr,x)							     \
   ({									     \
   ({									     \

+ 4 - 2
include/asm-arm/arch-ixp4xx/timex.h

@@ -7,7 +7,9 @@
 
 
 /*
 /*
  * We use IXP425 General purpose timer for our timer needs, it runs at 
  * We use IXP425 General purpose timer for our timer needs, it runs at 
- * 66.66... MHz
+ * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the
+ * timer register ignores the bottom 2 bits of the LATCH value.
  */
  */
-#define CLOCK_TICK_RATE (66666666)
+#define FREQ 66666666
+#define CLOCK_TICK_RATE (((FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ)
 
 

+ 1 - 1
include/asm-arm/bug.h

@@ -5,7 +5,7 @@
 
 
 #ifdef CONFIG_BUG
 #ifdef CONFIG_BUG
 #ifdef CONFIG_DEBUG_BUGVERBOSE
 #ifdef CONFIG_DEBUG_BUGVERBOSE
-extern volatile void __bug(const char *file, int line, void *data);
+extern void __bug(const char *file, int line, void *data) __attribute__((noreturn));
 
 
 /* give file/line information */
 /* give file/line information */
 #define BUG()		__bug(__FILE__, __LINE__, NULL)
 #define BUG()		__bug(__FILE__, __LINE__, NULL)

+ 1 - 1
include/asm-arm/cpu-multi32.h

@@ -31,7 +31,7 @@ extern struct processor {
 	/*
 	/*
 	 * Special stuff for a reset
 	 * Special stuff for a reset
 	 */
 	 */
-	volatile void (*reset)(unsigned long addr);
+	void (*reset)(unsigned long addr) __attribute__((noreturn));
 	/*
 	/*
 	 * Idle the processor
 	 * Idle the processor
 	 */
 	 */

+ 1 - 1
include/asm-arm/cpu-single.h

@@ -41,4 +41,4 @@ extern int cpu_do_idle(void);
 extern void cpu_dcache_clean_area(void *, int);
 extern void cpu_dcache_clean_area(void *, int);
 extern void cpu_do_switch_mm(unsigned long pgd_phys, struct mm_struct *mm);
 extern void cpu_do_switch_mm(unsigned long pgd_phys, struct mm_struct *mm);
 extern void cpu_set_pte(pte_t *ptep, pte_t pte);
 extern void cpu_set_pte(pte_t *ptep, pte_t pte);
-extern volatile void cpu_reset(unsigned long addr);
+extern void cpu_reset(unsigned long addr) __attribute__((noreturn));

+ 0 - 8
include/asm-ia64/io.h

@@ -120,14 +120,6 @@ static inline void ___ia64_mmiowb(void)
 	ia64_mfa();
 	ia64_mfa();
 }
 }
 
 
-static inline const unsigned long
-__ia64_get_io_port_base (void)
-{
-	extern unsigned long ia64_iobase;
-
-	return ia64_iobase;
-}
-
 static inline void*
 static inline void*
 __ia64_mk_io_addr (unsigned long port)
 __ia64_mk_io_addr (unsigned long port)
 {
 {

+ 0 - 2
include/asm-m32r/smp.h

@@ -61,9 +61,7 @@ extern physid_mask_t phys_cpu_present_map;
  * Some lowlevel functions might want to know about
  * Some lowlevel functions might want to know about
  * the real CPU ID <-> CPU # mapping.
  * the real CPU ID <-> CPU # mapping.
  */
  */
-extern volatile int physid_2_cpu[NR_CPUS];
 extern volatile int cpu_2_physid[NR_CPUS];
 extern volatile int cpu_2_physid[NR_CPUS];
-#define physid_to_cpu(physid)	physid_2_cpu[physid]
 #define cpu_to_physid(cpu_id)	cpu_2_physid[cpu_id]
 #define cpu_to_physid(cpu_id)	cpu_2_physid[cpu_id]
 
 
 #define raw_smp_processor_id()	(current_thread_info()->cpu)
 #define raw_smp_processor_id()	(current_thread_info()->cpu)

+ 3 - 3
include/asm-m68k/page.h

@@ -138,13 +138,13 @@ extern unsigned long m68k_memoffset;
 #define __pa(vaddr)		((unsigned long)(vaddr)+m68k_memoffset)
 #define __pa(vaddr)		((unsigned long)(vaddr)+m68k_memoffset)
 #define __va(paddr)		((void *)((unsigned long)(paddr)-m68k_memoffset))
 #define __va(paddr)		((void *)((unsigned long)(paddr)-m68k_memoffset))
 #else
 #else
-#define __pa(vaddr)		virt_to_phys((void *)vaddr)
-#define __va(paddr)		phys_to_virt((unsigned long)paddr)
+#define __pa(vaddr)		virt_to_phys((void *)(vaddr))
+#define __va(paddr)		phys_to_virt((unsigned long)(paddr))
 #endif
 #endif
 
 
 #else	/* !CONFIG_SUN3 */
 #else	/* !CONFIG_SUN3 */
 /* This #define is a horrible hack to suppress lots of warnings. --m */
 /* This #define is a horrible hack to suppress lots of warnings. --m */
-#define __pa(x) ___pa((unsigned long)x)
+#define __pa(x) ___pa((unsigned long)(x))
 static inline unsigned long ___pa(unsigned long x)
 static inline unsigned long ___pa(unsigned long x)
 {
 {
      if(x == 0)
      if(x == 0)

+ 1 - 1
include/asm-ppc/time.h

@@ -58,7 +58,7 @@ static __inline__ void set_dec(unsigned int val)
 /* Accessor functions for the timebase (RTC on 601) registers. */
 /* Accessor functions for the timebase (RTC on 601) registers. */
 /* If one day CONFIG_POWER is added just define __USE_RTC as 1 */
 /* If one day CONFIG_POWER is added just define __USE_RTC as 1 */
 #ifdef CONFIG_6xx
 #ifdef CONFIG_6xx
-extern __inline__ int const __USE_RTC(void) {
+extern __inline__ int __attribute_pure__ __USE_RTC(void) {
 	return (mfspr(SPRN_PVR)>>16) == 1;
 	return (mfspr(SPRN_PVR)>>16) == 1;
 }
 }
 #else
 #else

+ 2 - 19
include/asm-s390/uaccess.h

@@ -149,11 +149,11 @@ struct exception_table_entry
 })
 })
 #endif
 #endif
 
 
-#ifndef __CHECKER__
 #define __put_user(x, ptr) \
 #define __put_user(x, ptr) \
 ({								\
 ({								\
 	__typeof__(*(ptr)) __x = (x);				\
 	__typeof__(*(ptr)) __x = (x);				\
 	int __pu_err;						\
 	int __pu_err;						\
+        __chk_user_ptr(ptr);                                    \
 	switch (sizeof (*(ptr))) {				\
 	switch (sizeof (*(ptr))) {				\
 	case 1:							\
 	case 1:							\
 	case 2:							\
 	case 2:							\
@@ -167,14 +167,6 @@ struct exception_table_entry
 	 }							\
 	 }							\
 	__pu_err;						\
 	__pu_err;						\
 })
 })
-#else
-#define __put_user(x, ptr)			\
-({						\
-	void __user *p;				\
-	p = (ptr);				\
-	0;					\
-})
-#endif
 
 
 #define put_user(x, ptr)					\
 #define put_user(x, ptr)					\
 ({								\
 ({								\
@@ -213,11 +205,11 @@ extern int __put_user_bad(void) __attribute__((noreturn));
 })
 })
 #endif
 #endif
 
 
-#ifndef __CHECKER__
 #define __get_user(x, ptr)					\
 #define __get_user(x, ptr)					\
 ({								\
 ({								\
 	__typeof__(*(ptr)) __x;					\
 	__typeof__(*(ptr)) __x;					\
 	int __gu_err;						\
 	int __gu_err;						\
+        __chk_user_ptr(ptr);                                    \
 	switch (sizeof(*(ptr))) {				\
 	switch (sizeof(*(ptr))) {				\
 	case 1:							\
 	case 1:							\
 	case 2:							\
 	case 2:							\
@@ -232,15 +224,6 @@ extern int __put_user_bad(void) __attribute__((noreturn));
 	(x) = __x;						\
 	(x) = __x;						\
 	__gu_err;						\
 	__gu_err;						\
 })
 })
-#else
-#define __get_user(x, ptr)			\
-({						\
-	void __user *p;				\
-	p = (ptr);				\
-	0;					\
-})
-#endif
-
 
 
 #define get_user(x, ptr)					\
 #define get_user(x, ptr)					\
 ({								\
 ({								\

+ 16 - 2
include/net/ax25.h

@@ -139,11 +139,25 @@ enum {
 #define AX25_DEF_DS_TIMEOUT	(3 * 60 * HZ)		/* DAMA timeout 3 minutes */
 #define AX25_DEF_DS_TIMEOUT	(3 * 60 * HZ)		/* DAMA timeout 3 minutes */
 
 
 typedef struct ax25_uid_assoc {
 typedef struct ax25_uid_assoc {
-	struct ax25_uid_assoc	*next;
+	struct hlist_node	uid_node;
+	atomic_t		refcount;
 	uid_t			uid;
 	uid_t			uid;
 	ax25_address		call;
 	ax25_address		call;
 } ax25_uid_assoc;
 } ax25_uid_assoc;
 
 
+#define ax25_uid_for_each(__ax25, node, list) \
+	hlist_for_each_entry(__ax25, node, list, uid_node)
+
+#define ax25_uid_hold(ax25) \
+	atomic_inc(&((ax25)->refcount))
+
+static inline void ax25_uid_put(ax25_uid_assoc *assoc)
+{
+	if (atomic_dec_and_test(&assoc->refcount)) {
+		kfree(assoc);
+	}
+}
+
 typedef struct {
 typedef struct {
 	ax25_address		calls[AX25_MAX_DIGIS];
 	ax25_address		calls[AX25_MAX_DIGIS];
 	unsigned char		repeated[AX25_MAX_DIGIS];
 	unsigned char		repeated[AX25_MAX_DIGIS];
@@ -376,7 +390,7 @@ extern unsigned long ax25_display_timer(struct timer_list *);
 
 
 /* ax25_uid.c */
 /* ax25_uid.c */
 extern int  ax25_uid_policy;
 extern int  ax25_uid_policy;
-extern ax25_address *ax25_findbyuid(uid_t);
+extern ax25_uid_assoc *ax25_findbyuid(uid_t);
 extern int  ax25_uid_ioctl(int, struct sockaddr_ax25 *);
 extern int  ax25_uid_ioctl(int, struct sockaddr_ax25 *);
 extern struct file_operations ax25_uid_fops;
 extern struct file_operations ax25_uid_fops;
 extern void ax25_uid_free(void);
 extern void ax25_uid_free(void);

+ 5 - 0
include/net/sock.h

@@ -384,6 +384,11 @@ enum sock_flags {
 	SOCK_QUEUE_SHRUNK, /* write queue has been shrunk recently */
 	SOCK_QUEUE_SHRUNK, /* write queue has been shrunk recently */
 };
 };
 
 
+static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
+{
+	nsk->sk_flags = osk->sk_flags;
+}
+
 static inline void sock_set_flag(struct sock *sk, enum sock_flags flag)
 static inline void sock_set_flag(struct sock *sk, enum sock_flags flag)
 {
 {
 	__set_bit(flag, &sk->sk_flags);
 	__set_bit(flag, &sk->sk_flags);

+ 2 - 0
include/sound/core.h

@@ -360,11 +360,13 @@ int snd_device_free_all(snd_card_t *card, snd_device_cmd_t cmd);
 
 
 /* isadma.c */
 /* isadma.c */
 
 
+#ifdef CONFIG_ISA_DMA_API
 #define DMA_MODE_NO_ENABLE	0x0100
 #define DMA_MODE_NO_ENABLE	0x0100
 
 
 void snd_dma_program(unsigned long dma, unsigned long addr, unsigned int size, unsigned short mode);
 void snd_dma_program(unsigned long dma, unsigned long addr, unsigned int size, unsigned short mode);
 void snd_dma_disable(unsigned long dma);
 void snd_dma_disable(unsigned long dma);
 unsigned int snd_dma_pointer(unsigned long dma, unsigned int size);
 unsigned int snd_dma_pointer(unsigned long dma, unsigned int size);
+#endif
 
 
 /* misc.c */
 /* misc.c */
 
 

+ 19 - 0
kernel/cpuset.c

@@ -635,6 +635,25 @@ static void update_cpu_domains(struct cpuset *cur)
 	if (par == NULL || cpus_empty(cur->cpus_allowed))
 	if (par == NULL || cpus_empty(cur->cpus_allowed))
 		return;
 		return;
 
 
+	/*
+	 * Hack to avoid 2.6.13 partial node dynamic sched domain bug.
+	 * Require the 'cpu_exclusive' cpuset to include all (or none)
+	 * of the CPUs on each node, or return w/o changing sched domains.
+	 * Remove this hack when dynamic sched domains fixed.
+	 */
+	{
+		int i, j;
+
+		for_each_cpu_mask(i, cur->cpus_allowed) {
+			cpumask_t mask = node_to_cpumask(cpu_to_node(i));
+
+			for_each_cpu_mask(j, mask) {
+				if (!cpu_isset(j, cur->cpus_allowed))
+					return;
+			}
+		}
+	}
+
 	/*
 	/*
 	 * Get all cpus from parent's cpus_allowed not part of exclusive
 	 * Get all cpus from parent's cpus_allowed not part of exclusive
 	 * children
 	 * children

+ 1 - 1
kernel/timer.c

@@ -1023,7 +1023,7 @@ asmlinkage long sys_getppid(void)
 	parent = me->group_leader->real_parent;
 	parent = me->group_leader->real_parent;
 	for (;;) {
 	for (;;) {
 		pid = parent->tgid;
 		pid = parent->tgid;
-#ifdef CONFIG_SMP
+#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
 {
 {
 		struct task_struct *old = parent;
 		struct task_struct *old = parent;
 
 

+ 4 - 1
lib/vsprintf.c

@@ -269,6 +269,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
 	int qualifier;		/* 'h', 'l', or 'L' for integer fields */
 	int qualifier;		/* 'h', 'l', or 'L' for integer fields */
 				/* 'z' support added 23/7/1999 S.H.    */
 				/* 'z' support added 23/7/1999 S.H.    */
 				/* 'z' changed to 'Z' --davidm 1/25/99 */
 				/* 'z' changed to 'Z' --davidm 1/25/99 */
+				/* 't' added for ptrdiff_t */
 
 
 	/* Reject out-of-range values early */
 	/* Reject out-of-range values early */
 	if (unlikely((int) size < 0)) {
 	if (unlikely((int) size < 0)) {
@@ -339,7 +340,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
 		/* get the conversion qualifier */
 		/* get the conversion qualifier */
 		qualifier = -1;
 		qualifier = -1;
 		if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' ||
 		if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' ||
-		    *fmt =='Z' || *fmt == 'z') {
+		    *fmt =='Z' || *fmt == 'z' || *fmt == 't') {
 			qualifier = *fmt;
 			qualifier = *fmt;
 			++fmt;
 			++fmt;
 			if (qualifier == 'l' && *fmt == 'l') {
 			if (qualifier == 'l' && *fmt == 'l') {
@@ -467,6 +468,8 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
 				num = (signed long) num;
 				num = (signed long) num;
 		} else if (qualifier == 'Z' || qualifier == 'z') {
 		} else if (qualifier == 'Z' || qualifier == 'z') {
 			num = va_arg(args, size_t);
 			num = va_arg(args, size_t);
+		} else if (qualifier == 't') {
+			num = va_arg(args, ptrdiff_t);
 		} else if (qualifier == 'h') {
 		} else if (qualifier == 'h') {
 			num = (unsigned short) va_arg(args, int);
 			num = (unsigned short) va_arg(args, int);
 			if (flags & SIGN)
 			if (flags & SIGN)

+ 13 - 14
net/ax25/af_ax25.c

@@ -875,12 +875,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
 	sk->sk_sndbuf   = osk->sk_sndbuf;
 	sk->sk_sndbuf   = osk->sk_sndbuf;
 	sk->sk_state    = TCP_ESTABLISHED;
 	sk->sk_state    = TCP_ESTABLISHED;
 	sk->sk_sleep    = osk->sk_sleep;
 	sk->sk_sleep    = osk->sk_sleep;
-
-	if (sock_flag(osk, SOCK_DBG))
-		sock_set_flag(sk, SOCK_DBG);
-
-	if (sock_flag(osk, SOCK_ZAPPED))
-		sock_set_flag(sk, SOCK_ZAPPED);
+	sock_copy_flags(sk, osk);
 
 
 	oax25 = ax25_sk(osk);
 	oax25 = ax25_sk(osk);
 
 
@@ -1007,7 +1002,8 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 	struct sock *sk = sock->sk;
 	struct sock *sk = sock->sk;
 	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
 	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
 	ax25_dev *ax25_dev = NULL;
 	ax25_dev *ax25_dev = NULL;
-	ax25_address *call;
+	ax25_uid_assoc *user;
+	ax25_address call;
 	ax25_cb *ax25;
 	ax25_cb *ax25;
 	int err = 0;
 	int err = 0;
 
 
@@ -1026,9 +1022,15 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 	if (addr->fsa_ax25.sax25_family != AF_AX25)
 	if (addr->fsa_ax25.sax25_family != AF_AX25)
 		return -EINVAL;
 		return -EINVAL;
 
 
-	call = ax25_findbyuid(current->euid);
-	if (call == NULL && ax25_uid_policy && !capable(CAP_NET_ADMIN)) {
-		return -EACCES;
+	user = ax25_findbyuid(current->euid);
+	if (user) {
+		call = user->call;
+		ax25_uid_put(user);
+	} else {
+		if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
+			return -EACCES;
+
+		call = addr->fsa_ax25.sax25_call;
 	}
 	}
 
 
 	lock_sock(sk);
 	lock_sock(sk);
@@ -1039,10 +1041,7 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 		goto out;
 		goto out;
 	}
 	}
 
 
-	if (call == NULL)
-		ax25->source_addr = addr->fsa_ax25.sax25_call;
-	else
-		ax25->source_addr = *call;
+	ax25->source_addr = call;
 
 
 	/*
 	/*
 	 * User already set interface with SO_BINDTODEVICE
 	 * User already set interface with SO_BINDTODEVICE

+ 7 - 5
net/ax25/ax25_route.c

@@ -422,8 +422,8 @@ static inline void ax25_adjust_path(ax25_address *addr, ax25_digi *digipeat)
  */
  */
 int ax25_rt_autobind(ax25_cb *ax25, ax25_address *addr)
 int ax25_rt_autobind(ax25_cb *ax25, ax25_address *addr)
 {
 {
+	ax25_uid_assoc *user;
 	ax25_route *ax25_rt;
 	ax25_route *ax25_rt;
-	ax25_address *call;
 	int err;
 	int err;
 
 
 	if ((ax25_rt = ax25_get_route(addr, NULL)) == NULL)
 	if ((ax25_rt = ax25_get_route(addr, NULL)) == NULL)
@@ -434,16 +434,18 @@ int ax25_rt_autobind(ax25_cb *ax25, ax25_address *addr)
 		goto put;
 		goto put;
 	}
 	}
 
 
-	if ((call = ax25_findbyuid(current->euid)) == NULL) {
+	user = ax25_findbyuid(current->euid);
+	if (user) {
+		ax25->source_addr = user->call;
+		ax25_uid_put(user);
+	} else {
 		if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) {
 		if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) {
 			err = -EPERM;
 			err = -EPERM;
 			goto put;
 			goto put;
 		}
 		}
-		call = (ax25_address *)ax25->ax25_dev->dev->dev_addr;
+		ax25->source_addr = *(ax25_address *)ax25->ax25_dev->dev->dev_addr;
 	}
 	}
 
 
-	ax25->source_addr = *call;
-
 	if (ax25_rt->digipeat != NULL) {
 	if (ax25_rt->digipeat != NULL) {
 		if ((ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
 		if ((ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
 			err = -ENOMEM;
 			err = -ENOMEM;

+ 36 - 47
net/ax25/ax25_uid.c

@@ -28,6 +28,7 @@
 #include <linux/fcntl.h>
 #include <linux/fcntl.h>
 #include <linux/mm.h>
 #include <linux/mm.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
+#include <linux/list.h>
 #include <linux/notifier.h>
 #include <linux/notifier.h>
 #include <linux/proc_fs.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/seq_file.h>
@@ -41,38 +42,41 @@
  *	Callsign/UID mapper. This is in kernel space for security on multi-amateur machines.
  *	Callsign/UID mapper. This is in kernel space for security on multi-amateur machines.
  */
  */
 
 
-static ax25_uid_assoc *ax25_uid_list;
+HLIST_HEAD(ax25_uid_list);
 static DEFINE_RWLOCK(ax25_uid_lock);
 static DEFINE_RWLOCK(ax25_uid_lock);
 
 
 int ax25_uid_policy = 0;
 int ax25_uid_policy = 0;
 
 
-ax25_address *ax25_findbyuid(uid_t uid)
+ax25_uid_assoc *ax25_findbyuid(uid_t uid)
 {
 {
-	ax25_uid_assoc *ax25_uid;
-	ax25_address *res = NULL;
+	ax25_uid_assoc *ax25_uid, *res = NULL;
+	struct hlist_node *node;
 
 
 	read_lock(&ax25_uid_lock);
 	read_lock(&ax25_uid_lock);
-	for (ax25_uid = ax25_uid_list; ax25_uid != NULL; ax25_uid = ax25_uid->next) {
+	ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) {
 		if (ax25_uid->uid == uid) {
 		if (ax25_uid->uid == uid) {
-			res = &ax25_uid->call;
+			ax25_uid_hold(ax25_uid);
+			res = ax25_uid;
 			break;
 			break;
 		}
 		}
 	}
 	}
 	read_unlock(&ax25_uid_lock);
 	read_unlock(&ax25_uid_lock);
 
 
-	return NULL;
+	return res;
 }
 }
 
 
 int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
 int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
 {
 {
-	ax25_uid_assoc *s, *ax25_uid;
+	ax25_uid_assoc *ax25_uid;
+	struct hlist_node *node;
+	ax25_uid_assoc *user;
 	unsigned long res;
 	unsigned long res;
 
 
 	switch (cmd) {
 	switch (cmd) {
 	case SIOCAX25GETUID:
 	case SIOCAX25GETUID:
 		res = -ENOENT;
 		res = -ENOENT;
 		read_lock(&ax25_uid_lock);
 		read_lock(&ax25_uid_lock);
-		for (ax25_uid = ax25_uid_list; ax25_uid != NULL; ax25_uid = ax25_uid->next) {
+		ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) {
 			if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) {
 			if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) {
 				res = ax25_uid->uid;
 				res = ax25_uid->uid;
 				break;
 				break;
@@ -85,19 +89,22 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
 	case SIOCAX25ADDUID:
 	case SIOCAX25ADDUID:
 		if (!capable(CAP_NET_ADMIN))
 		if (!capable(CAP_NET_ADMIN))
 			return -EPERM;
 			return -EPERM;
-		if (ax25_findbyuid(sax->sax25_uid))
+		user = ax25_findbyuid(sax->sax25_uid);
+		if (user) {
+			ax25_uid_put(user);
 			return -EEXIST;
 			return -EEXIST;
+		}
 		if (sax->sax25_uid == 0)
 		if (sax->sax25_uid == 0)
 			return -EINVAL;
 			return -EINVAL;
 		if ((ax25_uid = kmalloc(sizeof(*ax25_uid), GFP_KERNEL)) == NULL)
 		if ((ax25_uid = kmalloc(sizeof(*ax25_uid), GFP_KERNEL)) == NULL)
 			return -ENOMEM;
 			return -ENOMEM;
 
 
+		atomic_set(&ax25_uid->refcount, 1);
 		ax25_uid->uid  = sax->sax25_uid;
 		ax25_uid->uid  = sax->sax25_uid;
 		ax25_uid->call = sax->sax25_call;
 		ax25_uid->call = sax->sax25_call;
 
 
 		write_lock(&ax25_uid_lock);
 		write_lock(&ax25_uid_lock);
-		ax25_uid->next = ax25_uid_list;
-		ax25_uid_list  = ax25_uid;
+		hlist_add_head(&ax25_uid->uid_node, &ax25_uid_list);
 		write_unlock(&ax25_uid_lock);
 		write_unlock(&ax25_uid_lock);
 
 
 		return 0;
 		return 0;
@@ -106,34 +113,21 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
 		if (!capable(CAP_NET_ADMIN))
 		if (!capable(CAP_NET_ADMIN))
 			return -EPERM;
 			return -EPERM;
 
 
+		ax25_uid = NULL;
 		write_lock(&ax25_uid_lock);
 		write_lock(&ax25_uid_lock);
-		for (ax25_uid = ax25_uid_list; ax25_uid != NULL; ax25_uid = ax25_uid->next) {
-			if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) {
+		ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) {
+			if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0)
 				break;
 				break;
-			}
 		}
 		}
 		if (ax25_uid == NULL) {
 		if (ax25_uid == NULL) {
 			write_unlock(&ax25_uid_lock);
 			write_unlock(&ax25_uid_lock);
 			return -ENOENT;
 			return -ENOENT;
 		}
 		}
-		if ((s = ax25_uid_list) == ax25_uid) {
-			ax25_uid_list = s->next;
-			write_unlock(&ax25_uid_lock);
-			kfree(ax25_uid);
-			return 0;
-		}
-		while (s != NULL && s->next != NULL) {
-			if (s->next == ax25_uid) {
-				s->next = ax25_uid->next;
-				write_unlock(&ax25_uid_lock);
-				kfree(ax25_uid);
-				return 0;
-			}
-			s = s->next;
-		}
+		hlist_del_init(&ax25_uid->uid_node);
+		ax25_uid_put(ax25_uid);
 		write_unlock(&ax25_uid_lock);
 		write_unlock(&ax25_uid_lock);
 
 
-		return -ENOENT;
+		return 0;
 
 
 	default:
 	default:
 		return -EINVAL;
 		return -EINVAL;
@@ -147,13 +141,11 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
 static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos)
 static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos)
 {
 {
 	struct ax25_uid_assoc *pt;
 	struct ax25_uid_assoc *pt;
-	int i = 1;
+	struct hlist_node *node;
+	int i = 0;
 
 
 	read_lock(&ax25_uid_lock);
 	read_lock(&ax25_uid_lock);
-	if (*pos == 0)
-		return SEQ_START_TOKEN;
-
-	for (pt = ax25_uid_list; pt != NULL; pt = pt->next) {
+	ax25_uid_for_each(pt, node, &ax25_uid_list) {
 		if (i == *pos)
 		if (i == *pos)
 			return pt;
 			return pt;
 		++i;
 		++i;
@@ -164,8 +156,9 @@ static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos)
 static void *ax25_uid_seq_next(struct seq_file *seq, void *v, loff_t *pos)
 static void *ax25_uid_seq_next(struct seq_file *seq, void *v, loff_t *pos)
 {
 {
 	++*pos;
 	++*pos;
-	return (v == SEQ_START_TOKEN) ? ax25_uid_list : 
-		((struct ax25_uid_assoc *) v)->next;
+
+	return hlist_entry(((ax25_uid_assoc *)v)->uid_node.next,
+	                   ax25_uid_assoc, uid_node);
 }
 }
 
 
 static void ax25_uid_seq_stop(struct seq_file *seq, void *v)
 static void ax25_uid_seq_stop(struct seq_file *seq, void *v)
@@ -179,7 +172,6 @@ static int ax25_uid_seq_show(struct seq_file *seq, void *v)
 		seq_printf(seq, "Policy: %d\n", ax25_uid_policy);
 		seq_printf(seq, "Policy: %d\n", ax25_uid_policy);
 	else {
 	else {
 		struct ax25_uid_assoc *pt = v;
 		struct ax25_uid_assoc *pt = v;
-		
 
 
 		seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(&pt->call));
 		seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(&pt->call));
 	}
 	}
@@ -213,16 +205,13 @@ struct file_operations ax25_uid_fops = {
  */
  */
 void __exit ax25_uid_free(void)
 void __exit ax25_uid_free(void)
 {
 {
-	ax25_uid_assoc *s, *ax25_uid;
+	ax25_uid_assoc *ax25_uid;
+	struct hlist_node *node;
 
 
 	write_lock(&ax25_uid_lock);
 	write_lock(&ax25_uid_lock);
-	ax25_uid = ax25_uid_list;
-	while (ax25_uid != NULL) {
-		s        = ax25_uid;
-		ax25_uid = ax25_uid->next;
-
-		kfree(s);
+	ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) {
+		hlist_del_init(&ax25_uid->uid_node);
+		ax25_uid_put(ax25_uid);
 	}
 	}
-	ax25_uid_list = NULL;
 	write_unlock(&ax25_uid_lock);
 	write_unlock(&ax25_uid_lock);
 }
 }

+ 7 - 4
net/ipv4/inetpeer.c

@@ -450,10 +450,13 @@ static void peer_check_expire(unsigned long dummy)
 	/* Trigger the timer after inet_peer_gc_mintime .. inet_peer_gc_maxtime
 	/* Trigger the timer after inet_peer_gc_mintime .. inet_peer_gc_maxtime
 	 * interval depending on the total number of entries (more entries,
 	 * interval depending on the total number of entries (more entries,
 	 * less interval). */
 	 * less interval). */
-	peer_periodic_timer.expires = jiffies
-		+ inet_peer_gc_maxtime
-		- (inet_peer_gc_maxtime - inet_peer_gc_mintime) / HZ *
-			peer_total / inet_peer_threshold * HZ;
+	if (peer_total >= inet_peer_threshold)
+		peer_periodic_timer.expires = jiffies + inet_peer_gc_mintime;
+	else
+		peer_periodic_timer.expires = jiffies
+			+ inet_peer_gc_maxtime
+			- (inet_peer_gc_maxtime - inet_peer_gc_mintime) / HZ *
+				peer_total / inet_peer_threshold * HZ;
 	add_timer(&peer_periodic_timer);
 	add_timer(&peer_periodic_timer);
 }
 }
 
 

+ 7 - 0
net/ipv4/netfilter/ip_queue.c

@@ -214,6 +214,12 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp)
 		break;
 		break;
 	
 	
 	case IPQ_COPY_PACKET:
 	case IPQ_COPY_PACKET:
+		if (entry->skb->ip_summed == CHECKSUM_HW &&
+		    (*errp = skb_checksum_help(entry->skb,
+		                               entry->info->outdev == NULL))) {
+			read_unlock_bh(&queue_lock);
+			return NULL;
+		}
 		if (copy_range == 0 || copy_range > entry->skb->len)
 		if (copy_range == 0 || copy_range > entry->skb->len)
 			data_len = entry->skb->len;
 			data_len = entry->skb->len;
 		else
 		else
@@ -385,6 +391,7 @@ ipq_mangle_ipv4(ipq_verdict_msg_t *v, struct ipq_queue_entry *e)
 	if (!skb_ip_make_writable(&e->skb, v->data_len))
 	if (!skb_ip_make_writable(&e->skb, v->data_len))
 		return -ENOMEM;
 		return -ENOMEM;
 	memcpy(e->skb->data, v->payload, v->data_len);
 	memcpy(e->skb->data, v->payload, v->data_len);
+	e->skb->ip_summed = CHECKSUM_NONE;
 	e->skb->nfcache |= NFC_ALTERED;
 	e->skb->nfcache |= NFC_ALTERED;
 
 
 	/*
 	/*

+ 1 - 1
net/ipv4/tcp.c

@@ -584,7 +584,7 @@ static inline void skb_entail(struct sock *sk, struct tcp_sock *tp,
 	sk_charge_skb(sk, skb);
 	sk_charge_skb(sk, skb);
 	if (!sk->sk_send_head)
 	if (!sk->sk_send_head)
 		sk->sk_send_head = skb;
 		sk->sk_send_head = skb;
-	else if (tp->nonagle&TCP_NAGLE_PUSH)
+	if (tp->nonagle & TCP_NAGLE_PUSH)
 		tp->nonagle &= ~TCP_NAGLE_PUSH; 
 		tp->nonagle &= ~TCP_NAGLE_PUSH; 
 }
 }
 
 

+ 7 - 2
net/ipv4/tcp_ipv4.c

@@ -242,9 +242,14 @@ static int tcp_v4_get_port(struct sock *sk, unsigned short snum)
 		tcp_port_rover = rover;
 		tcp_port_rover = rover;
 		spin_unlock(&tcp_portalloc_lock);
 		spin_unlock(&tcp_portalloc_lock);
 
 
-		/* Exhausted local port range during search? */
+		/* Exhausted local port range during search?  It is not
+		 * possible for us to be holding one of the bind hash
+		 * locks if this test triggers, because if 'remaining'
+		 * drops to zero, we broke out of the do/while loop at
+		 * the top level, not from the 'break;' statement.
+		 */
 		ret = 1;
 		ret = 1;
-		if (remaining <= 0)
+		if (unlikely(remaining <= 0))
 			goto fail;
 			goto fail;
 
 
 		/* OK, here is the one we will use.  HEAD is
 		/* OK, here is the one we will use.  HEAD is

+ 0 - 4
net/ipv4/tcp_output.c

@@ -925,10 +925,6 @@ static int tcp_tso_should_defer(struct sock *sk, struct tcp_sock *tp, struct sk_
 
 
 	limit = min(send_win, cong_win);
 	limit = min(send_win, cong_win);
 
 
-	/* If sk_send_head can be sent fully now, just do it.  */
-	if (skb->len <= limit)
-		return 0;
-
 	if (sysctl_tcp_tso_win_divisor) {
 	if (sysctl_tcp_tso_win_divisor) {
 		u32 chunk = min(tp->snd_wnd, tp->snd_cwnd * tp->mss_cache);
 		u32 chunk = min(tp->snd_wnd, tp->snd_cwnd * tp->mss_cache);
 
 

+ 7 - 0
net/ipv6/netfilter/ip6_queue.c

@@ -211,6 +211,12 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp)
 		break;
 		break;
 	
 	
 	case IPQ_COPY_PACKET:
 	case IPQ_COPY_PACKET:
+		if (entry->skb->ip_summed == CHECKSUM_HW &&
+		    (*errp = skb_checksum_help(entry->skb,
+		                               entry->info->outdev == NULL))) {
+			read_unlock_bh(&queue_lock);
+			return NULL;
+		}
 		if (copy_range == 0 || copy_range > entry->skb->len)
 		if (copy_range == 0 || copy_range > entry->skb->len)
 			data_len = entry->skb->len;
 			data_len = entry->skb->len;
 		else
 		else
@@ -381,6 +387,7 @@ ipq_mangle_ipv6(ipq_verdict_msg_t *v, struct ipq_queue_entry *e)
 	if (!skb_ip_make_writable(&e->skb, v->data_len))
 	if (!skb_ip_make_writable(&e->skb, v->data_len))
 		return -ENOMEM;
 		return -ENOMEM;
 	memcpy(e->skb->data, v->payload, v->data_len);
 	memcpy(e->skb->data, v->payload, v->data_len);
+	e->skb->ip_summed = CHECKSUM_NONE;
 	e->skb->nfcache |= NFC_ALTERED;
 	e->skb->nfcache |= NFC_ALTERED;
 
 
 	/*
 	/*

+ 7 - 2
net/ipv6/tcp_ipv6.c

@@ -158,9 +158,14 @@ static int tcp_v6_get_port(struct sock *sk, unsigned short snum)
 		tcp_port_rover = rover;
 		tcp_port_rover = rover;
 		spin_unlock(&tcp_portalloc_lock);
 		spin_unlock(&tcp_portalloc_lock);
 
 
-		/* Exhausted local port range during search? */
+		/* Exhausted local port range during search?  It is not
+		 * possible for us to be holding one of the bind hash
+		 * locks if this test triggers, because if 'remaining'
+		 * drops to zero, we broke out of the do/while loop at
+		 * the top level, not from the 'break;' statement.
+		 */
 		ret = 1;
 		ret = 1;
-		if (remaining <= 0)
+		if (unlikely(remaining <= 0))
 			goto fail;
 			goto fail;
 
 
 		/* OK, here is the one we will use. */
 		/* OK, here is the one we will use. */

+ 17 - 14
net/netrom/af_netrom.c

@@ -459,12 +459,7 @@ static struct sock *nr_make_new(struct sock *osk)
 	sk->sk_sndbuf   = osk->sk_sndbuf;
 	sk->sk_sndbuf   = osk->sk_sndbuf;
 	sk->sk_state    = TCP_ESTABLISHED;
 	sk->sk_state    = TCP_ESTABLISHED;
 	sk->sk_sleep    = osk->sk_sleep;
 	sk->sk_sleep    = osk->sk_sleep;
-
-	if (sock_flag(osk, SOCK_ZAPPED))
-		sock_set_flag(sk, SOCK_ZAPPED);
-
-	if (sock_flag(osk, SOCK_DBG))
-		sock_set_flag(sk, SOCK_DBG);
+	sock_copy_flags(sk, osk);
 
 
 	skb_queue_head_init(&nr->ack_queue);
 	skb_queue_head_init(&nr->ack_queue);
 	skb_queue_head_init(&nr->reseq_queue);
 	skb_queue_head_init(&nr->reseq_queue);
@@ -541,7 +536,8 @@ static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 	struct nr_sock *nr = nr_sk(sk);
 	struct nr_sock *nr = nr_sk(sk);
 	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
 	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
 	struct net_device *dev;
 	struct net_device *dev;
-	ax25_address *user, *source;
+	ax25_uid_assoc *user;
+	ax25_address *source;
 
 
 	lock_sock(sk);
 	lock_sock(sk);
 	if (!sock_flag(sk, SOCK_ZAPPED)) {
 	if (!sock_flag(sk, SOCK_ZAPPED)) {
@@ -580,16 +576,19 @@ static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 	} else {
 	} else {
 		source = &addr->fsa_ax25.sax25_call;
 		source = &addr->fsa_ax25.sax25_call;
 
 
-		if ((user = ax25_findbyuid(current->euid)) == NULL) {
+		user = ax25_findbyuid(current->euid);
+		if (user) {
+			nr->user_addr   = user->call;
+			ax25_uid_put(user);
+		} else {
 			if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) {
 			if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) {
 				release_sock(sk);
 				release_sock(sk);
 				dev_put(dev);
 				dev_put(dev);
 				return -EPERM;
 				return -EPERM;
 			}
 			}
-			user = source;
+			nr->user_addr   = *source;
 		}
 		}
 
 
-		nr->user_addr   = *user;
 		nr->source_addr = *source;
 		nr->source_addr = *source;
 	}
 	}
 
 
@@ -609,7 +608,8 @@ static int nr_connect(struct socket *sock, struct sockaddr *uaddr,
 	struct sock *sk = sock->sk;
 	struct sock *sk = sock->sk;
 	struct nr_sock *nr = nr_sk(sk);
 	struct nr_sock *nr = nr_sk(sk);
 	struct sockaddr_ax25 *addr = (struct sockaddr_ax25 *)uaddr;
 	struct sockaddr_ax25 *addr = (struct sockaddr_ax25 *)uaddr;
-	ax25_address *user, *source = NULL;
+	ax25_address *source = NULL;
+	ax25_uid_assoc *user;
 	struct net_device *dev;
 	struct net_device *dev;
 
 
 	lock_sock(sk);
 	lock_sock(sk);
@@ -650,16 +650,19 @@ static int nr_connect(struct socket *sock, struct sockaddr *uaddr,
 		}
 		}
 		source = (ax25_address *)dev->dev_addr;
 		source = (ax25_address *)dev->dev_addr;
 
 
-		if ((user = ax25_findbyuid(current->euid)) == NULL) {
+		user = ax25_findbyuid(current->euid);
+		if (user) {
+			nr->user_addr   = user->call;
+			ax25_uid_put(user);
+		} else {
 			if (ax25_uid_policy && !capable(CAP_NET_ADMIN)) {
 			if (ax25_uid_policy && !capable(CAP_NET_ADMIN)) {
 				dev_put(dev);
 				dev_put(dev);
 				release_sock(sk);
 				release_sock(sk);
 				return -EPERM;
 				return -EPERM;
 			}
 			}
-			user = source;
+			nr->user_addr   = *source;
 		}
 		}
 
 
-		nr->user_addr   = *user;
 		nr->source_addr = *source;
 		nr->source_addr = *source;
 		nr->device      = dev;
 		nr->device      = dev;
 
 

+ 14 - 13
net/rose/af_rose.c

@@ -556,12 +556,7 @@ static struct sock *rose_make_new(struct sock *osk)
 	sk->sk_sndbuf   = osk->sk_sndbuf;
 	sk->sk_sndbuf   = osk->sk_sndbuf;
 	sk->sk_state    = TCP_ESTABLISHED;
 	sk->sk_state    = TCP_ESTABLISHED;
 	sk->sk_sleep    = osk->sk_sleep;
 	sk->sk_sleep    = osk->sk_sleep;
-
-	if (sock_flag(osk, SOCK_ZAPPED))
-		sock_set_flag(sk, SOCK_ZAPPED);
-
-	if (sock_flag(osk, SOCK_DBG))
-		sock_set_flag(sk, SOCK_DBG);
+	sock_copy_flags(sk, osk);
 
 
 	init_timer(&rose->timer);
 	init_timer(&rose->timer);
 	init_timer(&rose->idletimer);
 	init_timer(&rose->idletimer);
@@ -631,7 +626,8 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 	struct rose_sock *rose = rose_sk(sk);
 	struct rose_sock *rose = rose_sk(sk);
 	struct sockaddr_rose *addr = (struct sockaddr_rose *)uaddr;
 	struct sockaddr_rose *addr = (struct sockaddr_rose *)uaddr;
 	struct net_device *dev;
 	struct net_device *dev;
-	ax25_address *user, *source;
+	ax25_address *source;
+	ax25_uid_assoc *user;
 	int n;
 	int n;
 
 
 	if (!sock_flag(sk, SOCK_ZAPPED))
 	if (!sock_flag(sk, SOCK_ZAPPED))
@@ -656,14 +652,17 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 
 
 	source = &addr->srose_call;
 	source = &addr->srose_call;
 
 
-	if ((user = ax25_findbyuid(current->euid)) == NULL) {
+	user = ax25_findbyuid(current->euid);
+	if (user) {
+		rose->source_call = user->call;
+		ax25_uid_put(user);
+	} else {
 		if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE))
 		if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE))
 			return -EACCES;
 			return -EACCES;
-		user = source;
+		rose->source_call   = *source;
 	}
 	}
 
 
 	rose->source_addr   = addr->srose_addr;
 	rose->source_addr   = addr->srose_addr;
-	rose->source_call   = *user;
 	rose->device        = dev;
 	rose->device        = dev;
 	rose->source_ndigis = addr->srose_ndigis;
 	rose->source_ndigis = addr->srose_ndigis;
 
 
@@ -690,8 +689,8 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le
 	struct rose_sock *rose = rose_sk(sk);
 	struct rose_sock *rose = rose_sk(sk);
 	struct sockaddr_rose *addr = (struct sockaddr_rose *)uaddr;
 	struct sockaddr_rose *addr = (struct sockaddr_rose *)uaddr;
 	unsigned char cause, diagnostic;
 	unsigned char cause, diagnostic;
-	ax25_address *user;
 	struct net_device *dev;
 	struct net_device *dev;
+	ax25_uid_assoc *user;
 	int n;
 	int n;
 
 
 	if (sk->sk_state == TCP_ESTABLISHED && sock->state == SS_CONNECTING) {
 	if (sk->sk_state == TCP_ESTABLISHED && sock->state == SS_CONNECTING) {
@@ -741,12 +740,14 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le
 		if ((dev = rose_dev_first()) == NULL)
 		if ((dev = rose_dev_first()) == NULL)
 			return -ENETUNREACH;
 			return -ENETUNREACH;
 
 
-		if ((user = ax25_findbyuid(current->euid)) == NULL)
+		user = ax25_findbyuid(current->euid);
+		if (!user)
 			return -EINVAL;
 			return -EINVAL;
 
 
 		memcpy(&rose->source_addr, dev->dev_addr, ROSE_ADDR_LEN);
 		memcpy(&rose->source_addr, dev->dev_addr, ROSE_ADDR_LEN);
-		rose->source_call = *user;
+		rose->source_call = user->call;
 		rose->device      = dev;
 		rose->device      = dev;
+		ax25_uid_put(user);
 
 
 		rose_insert_socket(sk);		/* Finish the bind */
 		rose_insert_socket(sk);		/* Finish the bind */
 	}
 	}

+ 4 - 2
net/rose/rose_route.c

@@ -994,8 +994,10 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
 	 *	1. The frame isn't for us,
 	 *	1. The frame isn't for us,
 	 *	2. It isn't "owned" by any existing route.
 	 *	2. It isn't "owned" by any existing route.
 	 */
 	 */
-	if (frametype != ROSE_CALL_REQUEST)	/* XXX */
-		return 0;
+	if (frametype != ROSE_CALL_REQUEST) {	/* XXX */
+		res = 0;
+		goto out;
+	}
 
 
 	len  = (((skb->data[3] >> 4) & 0x0F) + 1) / 2;
 	len  = (((skb->data[3] >> 4) & 0x0F) + 1) / 2;
 	len += (((skb->data[3] >> 0) & 0x0F) + 1) / 2;
 	len += (((skb->data[3] >> 0) & 0x0F) + 1) / 2;

+ 1 - 0
net/sched/sch_generic.c

@@ -438,6 +438,7 @@ struct Qdisc * qdisc_create_dflt(struct net_device *dev, struct Qdisc_ops *ops)
 	if (!ops->init || ops->init(sch, NULL) == 0)
 	if (!ops->init || ops->init(sch, NULL) == 0)
 		return sch;
 		return sch;
 
 
+	qdisc_destroy(sch);
 errout:
 errout:
 	return NULL;
 	return NULL;
 }
 }

+ 1 - 0
net/sctp/proc.c

@@ -57,6 +57,7 @@ static struct snmp_mib sctp_snmp_list[] = {
 	SNMP_MIB_ITEM("SctpReasmUsrMsgs", SCTP_MIB_REASMUSRMSGS),
 	SNMP_MIB_ITEM("SctpReasmUsrMsgs", SCTP_MIB_REASMUSRMSGS),
 	SNMP_MIB_ITEM("SctpOutSCTPPacks", SCTP_MIB_OUTSCTPPACKS),
 	SNMP_MIB_ITEM("SctpOutSCTPPacks", SCTP_MIB_OUTSCTPPACKS),
 	SNMP_MIB_ITEM("SctpInSCTPPacks", SCTP_MIB_INSCTPPACKS),
 	SNMP_MIB_ITEM("SctpInSCTPPacks", SCTP_MIB_INSCTPPACKS),
+	SNMP_MIB_SENTINEL
 };
 };
 
 
 /* Return the current value of a particular entry in the mib by adding its
 /* Return the current value of a particular entry in the mib by adding its

+ 0 - 2
net/sunrpc/auth_gss/gss_krb5_crypto.c

@@ -185,9 +185,7 @@ make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body,
 			sg->page = body->pages[i];
 			sg->page = body->pages[i];
 			sg->offset = offset;
 			sg->offset = offset;
 			sg->length = thislen;
 			sg->length = thislen;
-			kmap(sg->page); /* XXX kmap_atomic? */
 			crypto_digest_update(tfm, sg, 1);
 			crypto_digest_update(tfm, sg, 1);
-			kunmap(sg->page);
 			len -= thislen;
 			len -= thislen;
 			i++;
 			i++;
 			offset = 0;
 			offset = 0;

+ 1 - 1
sound/Kconfig

@@ -77,7 +77,7 @@ source "sound/parisc/Kconfig"
 endmenu
 endmenu
 
 
 menu "Open Sound System"
 menu "Open Sound System"
-	depends on SOUND!=n && (BROKEN || (!SPARC32 && !SPARC64))
+	depends on SOUND!=n
 
 
 config SOUND_PRIME
 config SOUND_PRIME
 	tristate "Open Sound System (DEPRECATED)"
 	tristate "Open Sound System (DEPRECATED)"

+ 1 - 1
sound/core/Makefile

@@ -5,7 +5,7 @@
 
 
 snd-objs     := sound.o init.o memory.o info.o control.o misc.o \
 snd-objs     := sound.o init.o memory.o info.o control.o misc.o \
                 device.o wrappers.o
                 device.o wrappers.o
-ifeq ($(CONFIG_ISA),y)
+ifeq ($(CONFIG_ISA_DMA_API),y)
 snd-objs     += isadma.o
 snd-objs     += isadma.o
 endif
 endif
 ifeq ($(CONFIG_SND_OSSEMUL),y)
 ifeq ($(CONFIG_SND_OSSEMUL),y)

+ 1 - 1
sound/core/sound.c

@@ -432,7 +432,7 @@ EXPORT_SYMBOL(snd_device_new);
 EXPORT_SYMBOL(snd_device_register);
 EXPORT_SYMBOL(snd_device_register);
 EXPORT_SYMBOL(snd_device_free);
 EXPORT_SYMBOL(snd_device_free);
   /* isadma.c */
   /* isadma.c */
-#ifdef CONFIG_ISA
+#ifdef CONFIG_ISA_DMA_API
 EXPORT_SYMBOL(snd_dma_program);
 EXPORT_SYMBOL(snd_dma_program);
 EXPORT_SYMBOL(snd_dma_disable);
 EXPORT_SYMBOL(snd_dma_disable);
 EXPORT_SYMBOL(snd_dma_pointer);
 EXPORT_SYMBOL(snd_dma_pointer);

+ 1 - 1
sound/isa/Kconfig

@@ -1,7 +1,7 @@
 # ALSA ISA drivers
 # ALSA ISA drivers
 
 
 menu "ISA devices"
 menu "ISA devices"
-	depends on SND!=n && ISA
+	depends on SND!=n && ISA && ISA_DMA_API
 
 
 config SND_AD1848_LIB
 config SND_AD1848_LIB
         tristate
         tristate

+ 8 - 8
sound/oss/Kconfig

@@ -6,7 +6,7 @@
 # Prompt user for primary drivers.
 # Prompt user for primary drivers.
 config SOUND_BT878
 config SOUND_BT878
 	tristate "BT878 audio dma"
 	tristate "BT878 audio dma"
-	depends on SOUND_PRIME
+	depends on SOUND_PRIME && PCI
 	---help---
 	---help---
 	  Audio DMA support for bt878 based grabber boards.  As you might have
 	  Audio DMA support for bt878 based grabber boards.  As you might have
 	  already noticed, bt878 is listed with two functions in /proc/pci.
 	  already noticed, bt878 is listed with two functions in /proc/pci.
@@ -80,14 +80,14 @@ config SOUND_EMU10K1
 
 
 config MIDI_EMU10K1
 config MIDI_EMU10K1
 	bool "Creative SBLive! MIDI (EXPERIMENTAL)"
 	bool "Creative SBLive! MIDI (EXPERIMENTAL)"
-	depends on SOUND_EMU10K1 && EXPERIMENTAL
+	depends on SOUND_EMU10K1 && EXPERIMENTAL && ISA_DMA_API
 	help
 	help
 	  Say Y if you want to be able to use the OSS /dev/sequencer
 	  Say Y if you want to be able to use the OSS /dev/sequencer
 	  interface.  This code is still experimental.
 	  interface.  This code is still experimental.
 
 
 config SOUND_FUSION
 config SOUND_FUSION
 	tristate "Crystal SoundFusion (CS4280/461x)"
 	tristate "Crystal SoundFusion (CS4280/461x)"
-	depends on SOUND_PRIME
+	depends on SOUND_PRIME && PCI
 	help
 	help
 	  This module drives the Crystal SoundFusion devices (CS4280/46xx
 	  This module drives the Crystal SoundFusion devices (CS4280/46xx
 	  series) when wired as native sound drivers with AC97 codecs.  If
 	  series) when wired as native sound drivers with AC97 codecs.  If
@@ -95,7 +95,7 @@ config SOUND_FUSION
 
 
 config SOUND_CS4281
 config SOUND_CS4281
 	tristate "Crystal Sound CS4281"
 	tristate "Crystal Sound CS4281"
-	depends on SOUND_PRIME
+	depends on SOUND_PRIME && PCI
 	help
 	help
 	  Picture and feature list at
 	  Picture and feature list at
 	  <http://www.pcbroker.com/crystal4281.html>.
 	  <http://www.pcbroker.com/crystal4281.html>.
@@ -179,7 +179,7 @@ config SOUND_HARMONY
 
 
 config SOUND_SONICVIBES
 config SOUND_SONICVIBES
 	tristate "S3 SonicVibes"
 	tristate "S3 SonicVibes"
-	depends on SOUND_PRIME
+	depends on SOUND_PRIME && PCI
 	help
 	help
 	  Say Y or M if you have a PCI sound card utilizing the S3
 	  Say Y or M if you have a PCI sound card utilizing the S3
 	  SonicVibes chipset. To find out if your sound card uses a
 	  SonicVibes chipset. To find out if your sound card uses a
@@ -226,7 +226,7 @@ config SOUND_AU1550_AC97
 
 
 config SOUND_TRIDENT
 config SOUND_TRIDENT
 	tristate "Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core"
 	tristate "Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core"
-	depends on SOUND_PRIME
+	depends on SOUND_PRIME && PCI
 	---help---
 	---help---
 	  Say Y or M if you have a PCI sound card utilizing the Trident
 	  Say Y or M if you have a PCI sound card utilizing the Trident
 	  4DWave-DX/NX chipset or your mother board chipset has SiS 7018
 	  4DWave-DX/NX chipset or your mother board chipset has SiS 7018
@@ -503,7 +503,7 @@ config SOUND_VIA82CXXX
 
 
 config MIDI_VIA82CXXX
 config MIDI_VIA82CXXX
 	bool "VIA 82C686 MIDI"
 	bool "VIA 82C686 MIDI"
-	depends on SOUND_VIA82CXXX
+	depends on SOUND_VIA82CXXX && ISA_DMA_API
 	help
 	help
 	  Answer Y to use the MIDI interface of the Via686. You may need to
 	  Answer Y to use the MIDI interface of the Via686. You may need to
 	  enable this in the BIOS before it will work. This is for connection
 	  enable this in the BIOS before it will work. This is for connection
@@ -512,7 +512,7 @@ config MIDI_VIA82CXXX
 
 
 config SOUND_OSS
 config SOUND_OSS
 	tristate "OSS sound modules"
 	tristate "OSS sound modules"
-	depends on SOUND_PRIME
+	depends on SOUND_PRIME && ISA_DMA_API
 	help
 	help
 	  OSS is the Open Sound System suite of sound card drivers.  They make
 	  OSS is the Open Sound System suite of sound card drivers.  They make
 	  sound programming easier since they provide a common API.  Say Y or
 	  sound programming easier since they provide a common API.  Say Y or

+ 1 - 1
sound/oss/Makefile

@@ -80,7 +80,7 @@ obj-$(CONFIG_SOUND_ALI5455)	+= ali5455.o ac97_codec.o
 obj-$(CONFIG_SOUND_IT8172)	+= ite8172.o ac97_codec.o
 obj-$(CONFIG_SOUND_IT8172)	+= ite8172.o ac97_codec.o
 obj-$(CONFIG_SOUND_FORTE)	+= forte.o ac97_codec.o
 obj-$(CONFIG_SOUND_FORTE)	+= forte.o ac97_codec.o
 
 
-obj-$(CONFIG_SOUND_AD1980)	+= ac97_plugin_ad1980.o
+obj-$(CONFIG_SOUND_AD1980)	+= ac97_plugin_ad1980.o ac97_codec.o
 obj-$(CONFIG_SOUND_WM97XX)	+= ac97_plugin_wm97xx.o
 obj-$(CONFIG_SOUND_WM97XX)	+= ac97_plugin_wm97xx.o
 
 
 ifeq ($(CONFIG_MIDI_EMU10K1),y)
 ifeq ($(CONFIG_MIDI_EMU10K1),y)

+ 2 - 2
sound/oss/i810_audio.c

@@ -3430,9 +3430,9 @@ out_iospace:
 		release_mem_region(card->iobase_mmio_phys, 256);
 		release_mem_region(card->iobase_mmio_phys, 256);
 	}
 	}
 out_pio:	
 out_pio:	
-	release_region(card->iobase, 64);
-out_region2:
 	release_region(card->ac97base, 256);
 	release_region(card->ac97base, 256);
+out_region2:
+	release_region(card->iobase, 64);
 out_region1:
 out_region1:
 	pci_free_consistent(pci_dev, sizeof(struct i810_channel)*NR_HW_CH,
 	pci_free_consistent(pci_dev, sizeof(struct i810_channel)*NR_HW_CH,
 	    card->channel, card->chandma);
 	    card->channel, card->chandma);

+ 0 - 4
sound/oss/vidc.h

@@ -10,10 +10,6 @@
  *  VIDC sound function prototypes
  *  VIDC sound function prototypes
  */
  */
 
 
-/* vidc.c */
-
-extern int vidc_busy;
-
 /* vidc_fill.S */
 /* vidc_fill.S */
 
 
 /*
 /*

+ 1 - 1
sound/pci/Kconfig

@@ -314,7 +314,7 @@ config SND_YMFPCI
 
 
 config SND_ALS4000
 config SND_ALS4000
 	tristate "Avance Logic ALS4000"
 	tristate "Avance Logic ALS4000"
-	depends on SND
+	depends on SND && ISA_DMA_API
 	select SND_OPL3_LIB
 	select SND_OPL3_LIB
 	select SND_MPU401_UART
 	select SND_MPU401_UART
 	select SND_PCM
 	select SND_PCM