Bläddra i källkod

Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6

Steve French 17 år sedan
förälder
incheckning
20e673810c
93 ändrade filer med 510 tillägg och 196 borttagningar
  1. 3 3
      Documentation/filesystems/seq_file.txt
  2. 4 4
      Documentation/networking/can.txt
  3. 3 4
      Documentation/vm/hugetlbpage.txt
  4. 11 3
      MAINTAINERS
  5. 1 1
      Makefile
  6. 0 1
      arch/avr32/Kconfig
  7. 6 1
      arch/ia64/pci/pci.c
  8. 1 1
      arch/mips/au1000/common/platform.c
  9. 2 1
      arch/parisc/kernel/signal.c
  10. 15 2
      arch/x86/pci/acpi.c
  11. 1 1
      block/Kconfig
  12. 4 3
      drivers/acpi/bus.c
  13. 7 11
      drivers/ide/mips/au1xxx-ide.c
  14. 1 1
      drivers/ide/pci/it821x.c
  15. 2 0
      drivers/leds/leds-ams-delta.c
  16. 3 0
      drivers/leds/leds-atmel-pwm.c
  17. 1 0
      drivers/leds/leds-clevo-mail.c
  18. 2 0
      drivers/leds/leds-cm-x270.c
  19. 3 0
      drivers/leds/leds-cobalt-qube.c
  20. 2 0
      drivers/leds/leds-corgi.c
  21. 1 0
      drivers/leds/leds-gpio.c
  22. 2 0
      drivers/leds/leds-h1940.c
  23. 4 0
      drivers/leds/leds-hp6xx.c
  24. 1 0
      drivers/leds/leds-s3c24xx.c
  25. 2 0
      drivers/leds/leds-spitz.c
  26. 2 0
      drivers/leds/leds-tosa.c
  27. 2 0
      drivers/misc/atmel-ssc.c
  28. 1 0
      drivers/misc/atmel_pwm.c
  29. 2 0
      drivers/misc/hdpuftrs/hdpu_cpustate.c
  30. 2 0
      drivers/misc/hdpuftrs/hdpu_nexus.c
  31. 1 0
      drivers/mmc/host/at91_mci.c
  32. 2 0
      drivers/mmc/host/au1xmmc.c
  33. 2 0
      drivers/mmc/host/imxmmc.c
  34. 2 1
      drivers/mmc/host/omap.c
  35. 2 0
      drivers/mmc/host/pxamci.c
  36. 1 0
      drivers/mmc/host/wbsd.c
  37. 26 26
      drivers/net/b44.c
  38. 4 1
      drivers/net/netconsole.c
  39. 8 3
      drivers/net/ps3_gelic_wireless.c
  40. 14 13
      drivers/net/wireless/b43/dma.c
  41. 31 24
      drivers/net/wireless/b43legacy/dma.c
  42. 2 0
      drivers/net/wireless/b43legacy/main.c
  43. 3 0
      drivers/net/wireless/rtl8187_dev.c
  44. 1 0
      drivers/pcmcia/at91_cf.c
  45. 2 0
      drivers/pcmcia/omap_cf.c
  46. 2 0
      drivers/pcmcia/pxa2xx_base.c
  47. 2 3
      drivers/rtc/rtc-cmos.c
  48. 1 0
      drivers/serial/atmel_serial.c
  49. 2 0
      drivers/serial/bfin_5xx.c
  50. 2 0
      drivers/serial/imx.c
  51. 1 0
      drivers/serial/mcf.c
  52. 2 0
      drivers/serial/mpc52xx_uart.c
  53. 2 0
      drivers/serial/mpsc.c
  54. 2 0
      drivers/serial/netx-serial.c
  55. 1 0
      drivers/serial/pnx8xxx_uart.c
  56. 2 1
      drivers/serial/pxa.c
  57. 4 0
      drivers/serial/s3c2410.c
  58. 2 0
      drivers/serial/sa1100.c
  59. 2 0
      drivers/serial/sc26xx.c
  60. 1 0
      drivers/serial/sh-sci.c
  61. 3 0
      drivers/serial/uartlite.c
  62. 3 0
      drivers/serial/vr41xx_siu.c
  63. 14 6
      drivers/spi/spi_s3c24xx.c
  64. 8 6
      drivers/ssb/main.c
  65. 4 0
      drivers/thermal/thermal.c
  66. 54 2
      drivers/usb/serial/option.c
  67. 2 0
      drivers/usb/serial/usb-serial.c
  68. 92 4
      drivers/usb/storage/unusual_devs.h
  69. 1 0
      drivers/video/fbmem.c
  70. 1 1
      fs/afs/main.c
  71. 1 1
      fs/ext2/xattr.c
  72. 1 1
      fs/ext3/xattr.c
  73. 1 1
      fs/ext4/xattr.c
  74. 2 2
      fs/mbcache.c
  75. 1 0
      include/asm-arm/arch-s3c2410/spi.h
  76. 0 18
      include/asm-mips/mach-au1x00/au1xxx_ide.h
  77. 2 2
      include/asm-mips/mach-db1x00/db1200.h
  78. 2 2
      include/asm-mips/mach-pb1x00/pb1200.h
  79. 1 0
      include/asm-um/tlb.h
  80. 3 1
      include/linux/iocontext.h
  81. 1 1
      include/linux/mbcache.h
  82. 4 0
      include/linux/ssb/ssb.h
  83. 1 1
      include/linux/thermal.h
  84. 15 2
      kernel/printk.c
  85. 2 2
      mm/oom_kill.c
  86. 10 0
      mm/sparse.c
  87. 1 0
      mm/vmstat.c
  88. 52 26
      net/ipv4/tcp_input.c
  89. 2 5
      net/mac80211/rx.c
  90. 1 1
      net/rfkill/rfkill.c
  91. 1 1
      net/rxrpc/af_rxrpc.c
  92. 1 1
      net/rxrpc/rxkad.c
  93. 3 0
      net/sched/sch_api.c

+ 3 - 3
Documentation/filesystems/seq_file.txt

@@ -92,7 +92,7 @@ implementations; in most cases the start() function should check for a
 "past end of file" condition and return NULL if need be.
 "past end of file" condition and return NULL if need be.
 
 
 For more complicated applications, the private field of the seq_file
 For more complicated applications, the private field of the seq_file
-structure can be used. There is also a special value whch can be returned
+structure can be used. There is also a special value which can be returned
 by the start() function called SEQ_START_TOKEN; it can be used if you wish
 by the start() function called SEQ_START_TOKEN; it can be used if you wish
 to instruct your show() function (described below) to print a header at the
 to instruct your show() function (described below) to print a header at the
 top of the output. SEQ_START_TOKEN should only be used if the offset is
 top of the output. SEQ_START_TOKEN should only be used if the offset is
@@ -146,7 +146,7 @@ the four functions we have just defined:
 This structure will be needed to tie our iterator to the /proc file in
 This structure will be needed to tie our iterator to the /proc file in
 a little bit.
 a little bit.
 
 
-It's worth noting that the interator value returned by start() and
+It's worth noting that the iterator value returned by start() and
 manipulated by the other functions is considered to be completely opaque by
 manipulated by the other functions is considered to be completely opaque by
 the seq_file code. It can thus be anything that is useful in stepping
 the seq_file code. It can thus be anything that is useful in stepping
 through the data to be output. Counters can be useful, but it could also be
 through the data to be output. Counters can be useful, but it could also be
@@ -262,7 +262,7 @@ routines useful:
 
 
 These helpers will interpret pos as a position within the list and iterate
 These helpers will interpret pos as a position within the list and iterate
 accordingly.  Your start() and next() functions need only invoke the
 accordingly.  Your start() and next() functions need only invoke the
-seq_list_* helpers with a pointer to the appropriate list_head structure.  
+seq_list_* helpers with a pointer to the appropriate list_head structure.
 
 
 
 
 The extra-simple version
 The extra-simple version

+ 4 - 4
Documentation/networking/can.txt

@@ -281,10 +281,10 @@ solution for a couple of reasons:
             sa_family_t can_family;
             sa_family_t can_family;
             int         can_ifindex;
             int         can_ifindex;
             union {
             union {
-                    struct { canid_t rx_id, tx_id; } tp16;
-                    struct { canid_t rx_id, tx_id; } tp20;
-                    struct { canid_t rx_id, tx_id; } mcnet;
-                    struct { canid_t rx_id, tx_id; } isotp;
+                    /* transport protocol class address info (e.g. ISOTP) */
+                    struct { canid_t rx_id, tx_id; } tp;
+
+                    /* reserved for future CAN protocols address information */
             } can_addr;
             } can_addr;
     };
     };
 
 

+ 3 - 4
Documentation/vm/hugetlbpage.txt

@@ -88,10 +88,9 @@ hugepages from the buddy allocator, if the normal pool is exhausted. As
 these surplus hugepages go out of use, they are freed back to the buddy
 these surplus hugepages go out of use, they are freed back to the buddy
 allocator.
 allocator.
 
 
-Caveat: Shrinking the pool via nr_hugepages while a surplus is in effect
-will allow the number of surplus huge pages to exceed the overcommit
-value, as the pool hugepages (which must have been in use for a surplus
-hugepages to be allocated) will become surplus hugepages.  As long as
+Caveat: Shrinking the pool via nr_hugepages such that it becomes less
+than the number of hugepages in use will convert the balance to surplus
+huge pages even if it would exceed the overcommit value.  As long as
 this condition holds, however, no more surplus huge pages will be
 this condition holds, however, no more surplus huge pages will be
 allowed on the system until one of the two sysctls are increased
 allowed on the system until one of the two sysctls are increased
 sufficiently, or the surplus huge pages go out of use and are freed.
 sufficiently, or the surplus huge pages go out of use and are freed.

+ 11 - 3
MAINTAINERS

@@ -2116,7 +2116,7 @@ M:	reinette.chatre@intel.com
 L:	linux-wireless@vger.kernel.org
 L:	linux-wireless@vger.kernel.org
 L:	ipw3945-devel@lists.sourceforge.net
 L:	ipw3945-devel@lists.sourceforge.net
 W:	http://intellinuxwireless.org
 W:	http://intellinuxwireless.org
-T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rchatre/iwlwifi-2.6.git
+T:	git kernel.org:/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
 S:	Supported
 S:	Supported
 
 
 IOC3 ETHERNET DRIVER
 IOC3 ETHERNET DRIVER
@@ -2197,7 +2197,7 @@ S:	Maintained
 ISDN SUBSYSTEM
 ISDN SUBSYSTEM
 P:	Karsten Keil
 P:	Karsten Keil
 M:	kkeil@suse.de
 M:	kkeil@suse.de
-L:	isdn4linux@listserv.isdn4linux.de
+L:	isdn4linux@listserv.isdn4linux.de (subscribers-only)
 W:	http://www.isdn4linux.de
 W:	http://www.isdn4linux.de
 T:	git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
 T:	git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
 S:	Maintained
 S:	Maintained
@@ -2205,7 +2205,7 @@ S:	Maintained
 ISDN SUBSYSTEM (Eicon active card driver)
 ISDN SUBSYSTEM (Eicon active card driver)
 P:	Armin Schindler
 P:	Armin Schindler
 M:	mac@melware.de
 M:	mac@melware.de
-L:	isdn4linux@listserv.isdn4linux.de
+L:	isdn4linux@listserv.isdn4linux.de (subscribers-only)
 W:	http://www.melware.de
 W:	http://www.melware.de
 S:	Maintained
 S:	Maintained
 
 
@@ -3280,6 +3280,7 @@ L:	linux-wireless@vger.kernel.org
 L:	rt2400-devel@lists.sourceforge.net
 L:	rt2400-devel@lists.sourceforge.net
 W:	http://rt2x00.serialmonkey.com/
 W:	http://rt2x00.serialmonkey.com/
 S:	Maintained
 S:	Maintained
+T:	git kernel.org:/pub/scm/linux/kernel/git/ivd/rt2x00.git
 F:	drivers/net/wireless/rt2x00/
 F:	drivers/net/wireless/rt2x00/
 
 
 RAMDISK RAM BLOCK DEVICE DRIVER
 RAMDISK RAM BLOCK DEVICE DRIVER
@@ -3342,6 +3343,13 @@ L:	reiserfs-devel@vger.kernel.org
 W:	http://www.namesys.com
 W:	http://www.namesys.com
 S:	Supported
 S:	Supported
 
 
+RFKILL
+P:	Ivo van Doorn
+M:	IvDoorn@gmail.com
+L:	netdev@vger.kernel.org
+S:	Maintained
+F:	net/rfkill
+
 ROCKETPORT DRIVER
 ROCKETPORT DRIVER
 P:	Comtrol Corp.
 P:	Comtrol Corp.
 W:	http://www.comtrol.com
 W:	http://www.comtrol.com

+ 1 - 1
Makefile

@@ -1,7 +1,7 @@
 VERSION = 2
 VERSION = 2
 PATCHLEVEL = 6
 PATCHLEVEL = 6
 SUBLEVEL = 25
 SUBLEVEL = 25
-EXTRAVERSION = -rc9
+EXTRAVERSION =
 NAME = Funky Weasel is Jiggy wit it
 NAME = Funky Weasel is Jiggy wit it
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*

+ 0 - 1
arch/avr32/Kconfig

@@ -10,7 +10,6 @@ config AVR32
 	# With EMBEDDED=n, we get lots of stuff automatically selected
 	# With EMBEDDED=n, we get lots of stuff automatically selected
 	# that we usually don't need on AVR32.
 	# that we usually don't need on AVR32.
 	select EMBEDDED
 	select EMBEDDED
-	select HAVE_IDE
 	select HAVE_OPROFILE
 	select HAVE_OPROFILE
 	select HAVE_KPROBES
 	select HAVE_KPROBES
 	help
 	help

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

@@ -362,7 +362,12 @@ pci_acpi_scan_root(struct acpi_device *device, int domain, int bus)
 	info.name = name;
 	info.name = name;
 	acpi_walk_resources(device->handle, METHOD_NAME__CRS, add_window,
 	acpi_walk_resources(device->handle, METHOD_NAME__CRS, add_window,
 			&info);
 			&info);
-
+	/*
+	 * See arch/x86/pci/acpi.c.
+	 * The desired pci bus might already be scanned in a quirk. We
+	 * should handle the case here, but it appears that IA64 hasn't
+	 * such quirk. So we just ignore the case now.
+	 */
 	pbus = pci_scan_bus_parented(NULL, bus, &pci_root_ops, controller);
 	pbus = pci_scan_bus_parented(NULL, bus, &pci_root_ops, controller);
 	if (pbus)
 	if (pbus)
 		pcibios_setup_root_windows(pbus, controller);
 		pcibios_setup_root_windows(pbus, controller);

+ 1 - 1
arch/mips/au1000/common/platform.c

@@ -189,7 +189,7 @@ static struct resource au1200_lcd_resources[] = {
 static struct resource au1200_ide0_resources[] = {
 static struct resource au1200_ide0_resources[] = {
 	[0] = {
 	[0] = {
 		.start		= AU1XXX_ATA_PHYS_ADDR,
 		.start		= AU1XXX_ATA_PHYS_ADDR,
-		.end 		= AU1XXX_ATA_PHYS_ADDR + AU1XXX_ATA_PHYS_LEN,
+		.end 		= AU1XXX_ATA_PHYS_ADDR + AU1XXX_ATA_PHYS_LEN - 1,
 		.flags		= IORESOURCE_MEM,
 		.flags		= IORESOURCE_MEM,
 	},
 	},
 	[1] = {
 	[1] = {

+ 2 - 1
arch/parisc/kernel/signal.c

@@ -534,7 +534,8 @@ insert_restart_trampoline(struct pt_regs *regs)
 		 * Flushing one cacheline is cheap.
 		 * Flushing one cacheline is cheap.
 		 * "sync" on bigger (> 4 way) boxes is not.
 		 * "sync" on bigger (> 4 way) boxes is not.
 		 */
 		 */
-		flush_icache_range(regs->gr[30], regs->gr[30] + 4);
+		flush_user_dcache_range(regs->gr[30], regs->gr[30] + 4);
+		flush_user_icache_range(regs->gr[30], regs->gr[30] + 4);
 
 
 		regs->gr[31] = regs->gr[30] + 8;
 		regs->gr[31] = regs->gr[30] + 8;
 		/* Preserve original r28. */
 		/* Preserve original r28. */

+ 15 - 2
arch/x86/pci/acpi.c

@@ -219,8 +219,21 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
 	if (pxm >= 0)
 	if (pxm >= 0)
 		sd->node = pxm_to_node(pxm);
 		sd->node = pxm_to_node(pxm);
 #endif
 #endif
+	/*
+	 * Maybe the desired pci bus has been already scanned. In such case
+	 * it is unnecessary to scan the pci bus with the given domain,busnum.
+	 */
+	bus = pci_find_bus(domain, busnum);
+	if (bus) {
+		/*
+		 * If the desired bus exits, the content of bus->sysdata will
+		 * be replaced by sd.
+		 */
+		memcpy(bus->sysdata, sd, sizeof(*sd));
+		kfree(sd);
+	} else
+		bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
 
 
-	bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
 	if (!bus)
 	if (!bus)
 		kfree(sd);
 		kfree(sd);
 
 
@@ -228,7 +241,7 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
 	if (bus != NULL) {
 	if (bus != NULL) {
 		if (pxm >= 0) {
 		if (pxm >= 0) {
 			printk("bus %d -> pxm %d -> node %d\n",
 			printk("bus %d -> pxm %d -> node %d\n",
-				busnum, pxm, sd->node);
+				busnum, pxm, pxm_to_node(pxm));
 		}
 		}
 	}
 	}
 #endif
 #endif

+ 1 - 1
block/Kconfig

@@ -38,7 +38,7 @@ config BLK_DEV_IO_TRACE
 	  on a block device queue. For more information (and the user space
 	  on a block device queue. For more information (and the user space
 	  support tools needed), fetch the blktrace app from:
 	  support tools needed), fetch the blktrace app from:
 
 
-	  git://brick.kernel.dk/data/git/blktrace.git
+	  git://git.kernel.dk/blktrace.git
 
 
 config LSF
 config LSF
 	bool "Support for Large Single Files"
 	bool "Support for Large Single Files"

+ 4 - 3
drivers/acpi/bus.c

@@ -373,10 +373,11 @@ int acpi_bus_receive_event(struct acpi_bus_event *event)
 	}
 	}
 
 
 	spin_lock_irqsave(&acpi_bus_event_lock, flags);
 	spin_lock_irqsave(&acpi_bus_event_lock, flags);
-	entry =
-	    list_entry(acpi_bus_event_list.next, struct acpi_bus_event, node);
-	if (entry)
+	if (!list_empty(&acpi_bus_event_list)) {
+		entry = list_entry(acpi_bus_event_list.next,
+				   struct acpi_bus_event, node);
 		list_del(&entry->node);
 		list_del(&entry->node);
+	}
 	spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
 	spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
 
 
 	if (!entry)
 	if (!entry)

+ 7 - 11
drivers/ide/mips/au1xxx-ide.c

@@ -32,19 +32,12 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
-
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/ide.h>
 #include <linux/ide.h>
-#include <linux/sysdev.h>
-
-#include <linux/dma-mapping.h>
-
-#include "ide-timing.h"
+#include <linux/scatterlist.h>
 
 
-#include <asm/io.h>
 #include <asm/mach-au1x00/au1xxx.h>
 #include <asm/mach-au1x00/au1xxx.h>
 #include <asm/mach-au1x00/au1xxx_dbdma.h>
 #include <asm/mach-au1x00/au1xxx_dbdma.h>
-
 #include <asm/mach-au1x00/au1xxx_ide.h>
 #include <asm/mach-au1x00/au1xxx_ide.h>
 
 
 #define DRV_NAME	"au1200-ide"
 #define DRV_NAME	"au1200-ide"
@@ -56,6 +49,8 @@
 static _auide_hwif auide_hwif;
 static _auide_hwif auide_hwif;
 static int dbdma_init_done;
 static int dbdma_init_done;
 
 
+static int auide_ddma_init(_auide_hwif *auide);
+
 #if defined(CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA)
 #if defined(CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA)
 
 
 void auide_insw(unsigned long port, void *addr, u32 count)
 void auide_insw(unsigned long port, void *addr, u32 count)
@@ -591,13 +586,14 @@ static int au_ide_probe(struct device *dev)
 		goto out;
 		goto out;
 	}
 	}
 
 
-	if (!request_mem_region (res->start, res->end-res->start, pdev->name)) {
+	if (!request_mem_region(res->start, res->end - res->start + 1,
+				pdev->name)) {
 		pr_debug("%s: request_mem_region failed\n", DRV_NAME);
 		pr_debug("%s: request_mem_region failed\n", DRV_NAME);
 		ret =  -EBUSY;
 		ret =  -EBUSY;
 		goto out;
 		goto out;
 	}
 	}
 
 
-	ahwif->regbase = (u32)ioremap(res->start, res->end-res->start);
+	ahwif->regbase = (u32)ioremap(res->start, res->end - res->start + 1);
 	if (ahwif->regbase == 0) {
 	if (ahwif->regbase == 0) {
 		ret = -ENOMEM;
 		ret = -ENOMEM;
 		goto out;
 		goto out;
@@ -682,7 +678,7 @@ static int au_ide_remove(struct device *dev)
 	iounmap((void *)ahwif->regbase);
 	iounmap((void *)ahwif->regbase);
 
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	release_mem_region(res->start, res->end - res->start);
+	release_mem_region(res->start, res->end - res->start + 1);
 
 
 	return 0;
 	return 0;
 }
 }

+ 1 - 1
drivers/ide/pci/it821x.c

@@ -667,7 +667,7 @@ static int __init it821x_ide_init(void)
 module_init(it821x_ide_init);
 module_init(it821x_ide_init);
 
 
 module_param_named(noraid, it8212_noraid, int, S_IRUGO);
 module_param_named(noraid, it8212_noraid, int, S_IRUGO);
-MODULE_PARM_DESC(it8212_noraid, "Force card into bypass mode");
+MODULE_PARM_DESC(noraid, "Force card into bypass mode");
 
 
 MODULE_AUTHOR("Alan Cox");
 MODULE_AUTHOR("Alan Cox");
 MODULE_DESCRIPTION("PCI driver module for the ITE 821x");
 MODULE_DESCRIPTION("PCI driver module for the ITE 821x");

+ 2 - 0
drivers/leds/leds-ams-delta.c

@@ -140,6 +140,7 @@ static struct platform_driver ams_delta_led_driver = {
 	.resume		= ams_delta_led_resume,
 	.resume		= ams_delta_led_resume,
 	.driver		= {
 	.driver		= {
 		.name = "ams-delta-led",
 		.name = "ams-delta-led",
+		.owner = THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -159,3 +160,4 @@ module_exit(ams_delta_led_exit);
 MODULE_AUTHOR("Jonathan McDowell <noodles@earth.li>");
 MODULE_AUTHOR("Jonathan McDowell <noodles@earth.li>");
 MODULE_DESCRIPTION("Amstrad Delta LED driver");
 MODULE_DESCRIPTION("Amstrad Delta LED driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:ams-delta-led");

+ 3 - 0
drivers/leds/leds-atmel-pwm.c

@@ -132,6 +132,9 @@ static int __exit pwmled_remove(struct platform_device *pdev)
 	return 0;
 	return 0;
 }
 }
 
 
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:leds-atmel-pwm");
+
 static struct platform_driver pwmled_driver = {
 static struct platform_driver pwmled_driver = {
 	.driver = {
 	.driver = {
 		.name =		"leds-atmel-pwm",
 		.name =		"leds-atmel-pwm",

+ 1 - 0
drivers/leds/leds-clevo-mail.c

@@ -170,6 +170,7 @@ static struct platform_driver clevo_mail_led_driver = {
 	.resume		= clevo_mail_led_resume,
 	.resume		= clevo_mail_led_resume,
 	.driver		= {
 	.driver		= {
 		.name		= KBUILD_MODNAME,
 		.name		= KBUILD_MODNAME,
+		.owner		= THIS_MODULE,
 	},
 	},
 };
 };
 
 

+ 2 - 0
drivers/leds/leds-cm-x270.c

@@ -101,6 +101,7 @@ static struct platform_driver cmx270led_driver = {
 #endif
 #endif
 	.driver		= {
 	.driver		= {
 		.name		= "cm-x270-led",
 		.name		= "cm-x270-led",
+		.owner		= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -120,3 +121,4 @@ module_exit(cmx270led_exit);
 MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>");
 MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>");
 MODULE_DESCRIPTION("CM-x270 LED driver");
 MODULE_DESCRIPTION("CM-x270 LED driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:cm-x270-led");

+ 3 - 0
drivers/leds/leds-cobalt-qube.c

@@ -75,6 +75,9 @@ static int __devexit cobalt_qube_led_remove(struct platform_device *pdev)
 	return 0;
 	return 0;
 }
 }
 
 
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:cobalt-qube-leds");
+
 static struct platform_driver cobalt_qube_led_driver = {
 static struct platform_driver cobalt_qube_led_driver = {
 	.probe	= cobalt_qube_led_probe,
 	.probe	= cobalt_qube_led_probe,
 	.remove	= __devexit_p(cobalt_qube_led_remove),
 	.remove	= __devexit_p(cobalt_qube_led_remove),

+ 2 - 0
drivers/leds/leds-corgi.c

@@ -99,6 +99,7 @@ static struct platform_driver corgiled_driver = {
 #endif
 #endif
 	.driver		= {
 	.driver		= {
 		.name		= "corgi-led",
 		.name		= "corgi-led",
+		.owner		= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -118,3 +119,4 @@ module_exit(corgiled_exit);
 MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
 MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
 MODULE_DESCRIPTION("Corgi LED driver");
 MODULE_DESCRIPTION("Corgi LED driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:corgi-led");

+ 1 - 0
drivers/leds/leds-gpio.c

@@ -199,3 +199,4 @@ module_exit(gpio_led_exit);
 MODULE_AUTHOR("Raphael Assenat <raph@8d.com>");
 MODULE_AUTHOR("Raphael Assenat <raph@8d.com>");
 MODULE_DESCRIPTION("GPIO LED driver");
 MODULE_DESCRIPTION("GPIO LED driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:leds-gpio");

+ 2 - 0
drivers/leds/leds-h1940.c

@@ -139,6 +139,7 @@ static int h1940leds_remove(struct platform_device *pdev)
 static struct platform_driver h1940leds_driver = {
 static struct platform_driver h1940leds_driver = {
 	.driver		= {
 	.driver		= {
 		.name	= "h1940-leds",
 		.name	= "h1940-leds",
+		.owner	= THIS_MODULE,
 	},
 	},
 	.probe		= h1940leds_probe,
 	.probe		= h1940leds_probe,
 	.remove		= h1940leds_remove,
 	.remove		= h1940leds_remove,
@@ -161,3 +162,4 @@ module_exit(h1940leds_exit);
 MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
 MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
 MODULE_DESCRIPTION("LED driver for the iPAQ H1940");
 MODULE_DESCRIPTION("LED driver for the iPAQ H1940");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:h1940-leds");

+ 4 - 0
drivers/leds/leds-hp6xx.c

@@ -90,6 +90,9 @@ static int hp6xxled_remove(struct platform_device *pdev)
 	return 0;
 	return 0;
 }
 }
 
 
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:hp6xx-led");
+
 static struct platform_driver hp6xxled_driver = {
 static struct platform_driver hp6xxled_driver = {
 	.probe		= hp6xxled_probe,
 	.probe		= hp6xxled_probe,
 	.remove		= hp6xxled_remove,
 	.remove		= hp6xxled_remove,
@@ -99,6 +102,7 @@ static struct platform_driver hp6xxled_driver = {
 #endif
 #endif
 	.driver		= {
 	.driver		= {
 		.name		= "hp6xx-led",
 		.name		= "hp6xx-led",
+		.owner		= THIS_MODULE,
 	},
 	},
 };
 };
 
 

+ 1 - 0
drivers/leds/leds-s3c24xx.c

@@ -160,3 +160,4 @@ module_exit(s3c24xx_led_exit);
 MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
 MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
 MODULE_DESCRIPTION("S3C24XX LED driver");
 MODULE_DESCRIPTION("S3C24XX LED driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:s3c24xx_led");

+ 2 - 0
drivers/leds/leds-spitz.c

@@ -105,6 +105,7 @@ static struct platform_driver spitzled_driver = {
 #endif
 #endif
 	.driver		= {
 	.driver		= {
 		.name		= "spitz-led",
 		.name		= "spitz-led",
+		.owner		= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -124,3 +125,4 @@ module_exit(spitzled_exit);
 MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
 MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
 MODULE_DESCRIPTION("Spitz LED driver");
 MODULE_DESCRIPTION("Spitz LED driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:spitz-led");

+ 2 - 0
drivers/leds/leds-tosa.c

@@ -109,6 +109,7 @@ static struct platform_driver tosaled_driver = {
 	.resume		= tosaled_resume,
 	.resume		= tosaled_resume,
 	.driver		= {
 	.driver		= {
 		.name		= "tosa-led",
 		.name		= "tosa-led",
+		.owner		= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -128,3 +129,4 @@ module_exit(tosaled_exit);
 MODULE_AUTHOR("Dirk Opfer <Dirk@Opfer-Online.de>");
 MODULE_AUTHOR("Dirk Opfer <Dirk@Opfer-Online.de>");
 MODULE_DESCRIPTION("Tosa LED driver");
 MODULE_DESCRIPTION("Tosa LED driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:tosa-led");

+ 2 - 0
drivers/misc/atmel-ssc.c

@@ -154,6 +154,7 @@ static struct platform_driver ssc_driver = {
 	.remove		= __devexit_p(ssc_remove),
 	.remove		= __devexit_p(ssc_remove),
 	.driver		= {
 	.driver		= {
 		.name		= "ssc",
 		.name		= "ssc",
+		.owner		= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -172,3 +173,4 @@ module_exit(ssc_exit);
 MODULE_AUTHOR("Hans-Christian Egtvedt <hcegtvedt@atmel.com>");
 MODULE_AUTHOR("Hans-Christian Egtvedt <hcegtvedt@atmel.com>");
 MODULE_DESCRIPTION("SSC driver for Atmel AVR32 and AT91");
 MODULE_DESCRIPTION("SSC driver for Atmel AVR32 and AT91");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:ssc");

+ 1 - 0
drivers/misc/atmel_pwm.c

@@ -407,3 +407,4 @@ module_exit(pwm_exit);
 
 
 MODULE_DESCRIPTION("Driver for AT32/AT91 PWM module");
 MODULE_DESCRIPTION("Driver for AT32/AT91 PWM module");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:atmel_pwm");

+ 2 - 0
drivers/misc/hdpuftrs/hdpu_cpustate.c

@@ -164,6 +164,7 @@ static struct platform_driver hdpu_cpustate_driver = {
 	.remove = hdpu_cpustate_remove,
 	.remove = hdpu_cpustate_remove,
 	.driver = {
 	.driver = {
 		.name = HDPU_CPUSTATE_NAME,
 		.name = HDPU_CPUSTATE_NAME,
+		.owner = THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -248,3 +249,4 @@ module_exit(cpustate_exit);
 
 
 MODULE_AUTHOR("Brian Waite");
 MODULE_AUTHOR("Brian Waite");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" HDPU_CPUSTATE_NAME);

+ 2 - 0
drivers/misc/hdpuftrs/hdpu_nexus.c

@@ -55,6 +55,7 @@ static struct platform_driver hdpu_nexus_driver = {
 	.remove = hdpu_nexus_remove,
 	.remove = hdpu_nexus_remove,
 	.driver = {
 	.driver = {
 		.name = HDPU_NEXUS_NAME,
 		.name = HDPU_NEXUS_NAME,
+		.owner = THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -151,3 +152,4 @@ module_exit(nexus_exit);
 
 
 MODULE_AUTHOR("Brian Waite");
 MODULE_AUTHOR("Brian Waite");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" HDPU_NEXUS_NAME);

+ 1 - 0
drivers/mmc/host/at91_mci.c

@@ -1075,3 +1075,4 @@ module_exit(at91_mci_exit);
 MODULE_DESCRIPTION("AT91 Multimedia Card Interface driver");
 MODULE_DESCRIPTION("AT91 Multimedia Card Interface driver");
 MODULE_AUTHOR("Nick Randell");
 MODULE_AUTHOR("Nick Randell");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:at91_mci");

+ 2 - 0
drivers/mmc/host/au1xmmc.c

@@ -998,6 +998,7 @@ static struct platform_driver au1xmmc_driver = {
 	.resume        = NULL,
 	.resume        = NULL,
 	.driver        = {
 	.driver        = {
 		.name  = DRIVER_NAME,
 		.name  = DRIVER_NAME,
+		.owner = THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -1018,5 +1019,6 @@ module_exit(au1xmmc_exit);
 MODULE_AUTHOR("Advanced Micro Devices, Inc");
 MODULE_AUTHOR("Advanced Micro Devices, Inc");
 MODULE_DESCRIPTION("MMC/SD driver for the Alchemy Au1XXX");
 MODULE_DESCRIPTION("MMC/SD driver for the Alchemy Au1XXX");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:au1xxx-mmc");
 #endif
 #endif
 
 

+ 2 - 0
drivers/mmc/host/imxmmc.c

@@ -1128,6 +1128,7 @@ static struct platform_driver imxmci_driver = {
 	.resume		= imxmci_resume,
 	.resume		= imxmci_resume,
 	.driver		= {
 	.driver		= {
 		.name		= DRIVER_NAME,
 		.name		= DRIVER_NAME,
+		.owner		= THIS_MODULE,
 	}
 	}
 };
 };
 
 
@@ -1147,3 +1148,4 @@ module_exit(imxmci_exit);
 MODULE_DESCRIPTION("i.MX Multimedia Card Interface Driver");
 MODULE_DESCRIPTION("i.MX Multimedia Card Interface Driver");
 MODULE_AUTHOR("Sascha Hauer, Pengutronix");
 MODULE_AUTHOR("Sascha Hauer, Pengutronix");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:imx-mmc");

+ 2 - 1
drivers/mmc/host/omap.c

@@ -1255,6 +1255,7 @@ static struct platform_driver mmc_omap_driver = {
 	.resume		= mmc_omap_resume,
 	.resume		= mmc_omap_resume,
 	.driver		= {
 	.driver		= {
 		.name	= DRIVER_NAME,
 		.name	= DRIVER_NAME,
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -1273,5 +1274,5 @@ module_exit(mmc_omap_exit);
 
 
 MODULE_DESCRIPTION("OMAP Multimedia Card driver");
 MODULE_DESCRIPTION("OMAP Multimedia Card driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS(DRIVER_NAME);
+MODULE_ALIAS("platform:" DRIVER_NAME);
 MODULE_AUTHOR("Juha Yrjölä");
 MODULE_AUTHOR("Juha Yrjölä");

+ 2 - 0
drivers/mmc/host/pxamci.c

@@ -693,6 +693,7 @@ static struct platform_driver pxamci_driver = {
 	.resume		= pxamci_resume,
 	.resume		= pxamci_resume,
 	.driver		= {
 	.driver		= {
 		.name	= DRIVER_NAME,
 		.name	= DRIVER_NAME,
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -711,3 +712,4 @@ module_exit(pxamci_exit);
 
 
 MODULE_DESCRIPTION("PXA Multimedia Card Interface Driver");
 MODULE_DESCRIPTION("PXA Multimedia Card Interface Driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:pxa2xx-mci");

+ 1 - 0
drivers/mmc/host/wbsd.c

@@ -1948,6 +1948,7 @@ static struct platform_driver wbsd_driver = {
 	.resume		= wbsd_platform_resume,
 	.resume		= wbsd_platform_resume,
 	.driver		= {
 	.driver		= {
 		.name	= DRIVER_NAME,
 		.name	= DRIVER_NAME,
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 

+ 26 - 26
drivers/net/b44.c

@@ -148,7 +148,7 @@ static inline void b44_sync_dma_desc_for_device(struct ssb_device *sdev,
 						unsigned long offset,
 						unsigned long offset,
 						enum dma_data_direction dir)
 						enum dma_data_direction dir)
 {
 {
-	dma_sync_single_range_for_device(sdev->dev, dma_base,
+	dma_sync_single_range_for_device(sdev->dma_dev, dma_base,
 					 offset & dma_desc_align_mask,
 					 offset & dma_desc_align_mask,
 					 dma_desc_sync_size, dir);
 					 dma_desc_sync_size, dir);
 }
 }
@@ -158,7 +158,7 @@ static inline void b44_sync_dma_desc_for_cpu(struct ssb_device *sdev,
 					     unsigned long offset,
 					     unsigned long offset,
 					     enum dma_data_direction dir)
 					     enum dma_data_direction dir)
 {
 {
-	dma_sync_single_range_for_cpu(sdev->dev, dma_base,
+	dma_sync_single_range_for_cpu(sdev->dma_dev, dma_base,
 				      offset & dma_desc_align_mask,
 				      offset & dma_desc_align_mask,
 				      dma_desc_sync_size, dir);
 				      dma_desc_sync_size, dir);
 }
 }
@@ -613,7 +613,7 @@ static void b44_tx(struct b44 *bp)
 
 
 		BUG_ON(skb == NULL);
 		BUG_ON(skb == NULL);
 
 
-		dma_unmap_single(bp->sdev->dev,
+		dma_unmap_single(bp->sdev->dma_dev,
 				 rp->mapping,
 				 rp->mapping,
 				 skb->len,
 				 skb->len,
 				 DMA_TO_DEVICE);
 				 DMA_TO_DEVICE);
@@ -653,7 +653,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
 	if (skb == NULL)
 	if (skb == NULL)
 		return -ENOMEM;
 		return -ENOMEM;
 
 
-	mapping = dma_map_single(bp->sdev->dev, skb->data,
+	mapping = dma_map_single(bp->sdev->dma_dev, skb->data,
 				 RX_PKT_BUF_SZ,
 				 RX_PKT_BUF_SZ,
 				 DMA_FROM_DEVICE);
 				 DMA_FROM_DEVICE);
 
 
@@ -663,19 +663,19 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
 		mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
 		mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
 		/* Sigh... */
 		/* Sigh... */
 		if (!dma_mapping_error(mapping))
 		if (!dma_mapping_error(mapping))
-			dma_unmap_single(bp->sdev->dev, mapping,
+			dma_unmap_single(bp->sdev->dma_dev, mapping,
 					RX_PKT_BUF_SZ, DMA_FROM_DEVICE);
 					RX_PKT_BUF_SZ, DMA_FROM_DEVICE);
 		dev_kfree_skb_any(skb);
 		dev_kfree_skb_any(skb);
 		skb = __netdev_alloc_skb(bp->dev, RX_PKT_BUF_SZ, GFP_ATOMIC|GFP_DMA);
 		skb = __netdev_alloc_skb(bp->dev, RX_PKT_BUF_SZ, GFP_ATOMIC|GFP_DMA);
 		if (skb == NULL)
 		if (skb == NULL)
 			return -ENOMEM;
 			return -ENOMEM;
-		mapping = dma_map_single(bp->sdev->dev, skb->data,
+		mapping = dma_map_single(bp->sdev->dma_dev, skb->data,
 					 RX_PKT_BUF_SZ,
 					 RX_PKT_BUF_SZ,
 					 DMA_FROM_DEVICE);
 					 DMA_FROM_DEVICE);
 		if (dma_mapping_error(mapping) ||
 		if (dma_mapping_error(mapping) ||
 			mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
 			mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
 			if (!dma_mapping_error(mapping))
 			if (!dma_mapping_error(mapping))
-				dma_unmap_single(bp->sdev->dev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
+				dma_unmap_single(bp->sdev->dma_dev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
 			dev_kfree_skb_any(skb);
 			dev_kfree_skb_any(skb);
 			return -ENOMEM;
 			return -ENOMEM;
 		}
 		}
@@ -750,7 +750,7 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
 					     dest_idx * sizeof(dest_desc),
 					     dest_idx * sizeof(dest_desc),
 					     DMA_BIDIRECTIONAL);
 					     DMA_BIDIRECTIONAL);
 
 
-	dma_sync_single_for_device(bp->sdev->dev, le32_to_cpu(src_desc->addr),
+	dma_sync_single_for_device(bp->sdev->dma_dev, le32_to_cpu(src_desc->addr),
 				   RX_PKT_BUF_SZ,
 				   RX_PKT_BUF_SZ,
 				   DMA_FROM_DEVICE);
 				   DMA_FROM_DEVICE);
 }
 }
@@ -772,7 +772,7 @@ static int b44_rx(struct b44 *bp, int budget)
 		struct rx_header *rh;
 		struct rx_header *rh;
 		u16 len;
 		u16 len;
 
 
-		dma_sync_single_for_cpu(bp->sdev->dev, map,
+		dma_sync_single_for_cpu(bp->sdev->dma_dev, map,
 					    RX_PKT_BUF_SZ,
 					    RX_PKT_BUF_SZ,
 					    DMA_FROM_DEVICE);
 					    DMA_FROM_DEVICE);
 		rh = (struct rx_header *) skb->data;
 		rh = (struct rx_header *) skb->data;
@@ -806,7 +806,7 @@ static int b44_rx(struct b44 *bp, int budget)
 			skb_size = b44_alloc_rx_skb(bp, cons, bp->rx_prod);
 			skb_size = b44_alloc_rx_skb(bp, cons, bp->rx_prod);
 			if (skb_size < 0)
 			if (skb_size < 0)
 				goto drop_it;
 				goto drop_it;
-			dma_unmap_single(bp->sdev->dev, map,
+			dma_unmap_single(bp->sdev->dma_dev, map,
 					 skb_size, DMA_FROM_DEVICE);
 					 skb_size, DMA_FROM_DEVICE);
 			/* Leave out rx_header */
 			/* Leave out rx_header */
                 	skb_put(skb, len + RX_PKT_OFFSET);
                 	skb_put(skb, len + RX_PKT_OFFSET);
@@ -966,24 +966,24 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
 		goto err_out;
 		goto err_out;
 	}
 	}
 
 
-	mapping = dma_map_single(bp->sdev->dev, skb->data, len, DMA_TO_DEVICE);
+	mapping = dma_map_single(bp->sdev->dma_dev, skb->data, len, DMA_TO_DEVICE);
 	if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
 	if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
 		struct sk_buff *bounce_skb;
 		struct sk_buff *bounce_skb;
 
 
 		/* Chip can't handle DMA to/from >1GB, use bounce buffer */
 		/* Chip can't handle DMA to/from >1GB, use bounce buffer */
 		if (!dma_mapping_error(mapping))
 		if (!dma_mapping_error(mapping))
-			dma_unmap_single(bp->sdev->dev, mapping, len,
+			dma_unmap_single(bp->sdev->dma_dev, mapping, len,
 					DMA_TO_DEVICE);
 					DMA_TO_DEVICE);
 
 
 		bounce_skb = __dev_alloc_skb(len, GFP_ATOMIC | GFP_DMA);
 		bounce_skb = __dev_alloc_skb(len, GFP_ATOMIC | GFP_DMA);
 		if (!bounce_skb)
 		if (!bounce_skb)
 			goto err_out;
 			goto err_out;
 
 
-		mapping = dma_map_single(bp->sdev->dev, bounce_skb->data,
+		mapping = dma_map_single(bp->sdev->dma_dev, bounce_skb->data,
 					 len, DMA_TO_DEVICE);
 					 len, DMA_TO_DEVICE);
 		if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
 		if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
 			if (!dma_mapping_error(mapping))
 			if (!dma_mapping_error(mapping))
-				dma_unmap_single(bp->sdev->dev, mapping,
+				dma_unmap_single(bp->sdev->dma_dev, mapping,
 					 len, DMA_TO_DEVICE);
 					 len, DMA_TO_DEVICE);
 			dev_kfree_skb_any(bounce_skb);
 			dev_kfree_skb_any(bounce_skb);
 			goto err_out;
 			goto err_out;
@@ -1082,7 +1082,7 @@ static void b44_free_rings(struct b44 *bp)
 
 
 		if (rp->skb == NULL)
 		if (rp->skb == NULL)
 			continue;
 			continue;
-		dma_unmap_single(bp->sdev->dev, rp->mapping, RX_PKT_BUF_SZ,
+		dma_unmap_single(bp->sdev->dma_dev, rp->mapping, RX_PKT_BUF_SZ,
 					DMA_FROM_DEVICE);
 					DMA_FROM_DEVICE);
 		dev_kfree_skb_any(rp->skb);
 		dev_kfree_skb_any(rp->skb);
 		rp->skb = NULL;
 		rp->skb = NULL;
@@ -1094,7 +1094,7 @@ static void b44_free_rings(struct b44 *bp)
 
 
 		if (rp->skb == NULL)
 		if (rp->skb == NULL)
 			continue;
 			continue;
-		dma_unmap_single(bp->sdev->dev, rp->mapping, rp->skb->len,
+		dma_unmap_single(bp->sdev->dma_dev, rp->mapping, rp->skb->len,
 					DMA_TO_DEVICE);
 					DMA_TO_DEVICE);
 		dev_kfree_skb_any(rp->skb);
 		dev_kfree_skb_any(rp->skb);
 		rp->skb = NULL;
 		rp->skb = NULL;
@@ -1117,12 +1117,12 @@ static void b44_init_rings(struct b44 *bp)
 	memset(bp->tx_ring, 0, B44_TX_RING_BYTES);
 	memset(bp->tx_ring, 0, B44_TX_RING_BYTES);
 
 
 	if (bp->flags & B44_FLAG_RX_RING_HACK)
 	if (bp->flags & B44_FLAG_RX_RING_HACK)
-		dma_sync_single_for_device(bp->sdev->dev, bp->rx_ring_dma,
+		dma_sync_single_for_device(bp->sdev->dma_dev, bp->rx_ring_dma,
 			                  DMA_TABLE_BYTES,
 			                  DMA_TABLE_BYTES,
 			                  DMA_BIDIRECTIONAL);
 			                  DMA_BIDIRECTIONAL);
 
 
 	if (bp->flags & B44_FLAG_TX_RING_HACK)
 	if (bp->flags & B44_FLAG_TX_RING_HACK)
-		dma_sync_single_for_device(bp->sdev->dev, bp->tx_ring_dma,
+		dma_sync_single_for_device(bp->sdev->dma_dev, bp->tx_ring_dma,
 			                  DMA_TABLE_BYTES,
 			                  DMA_TABLE_BYTES,
 			                  DMA_TO_DEVICE);
 			                  DMA_TO_DEVICE);
 
 
@@ -1144,24 +1144,24 @@ static void b44_free_consistent(struct b44 *bp)
 	bp->tx_buffers = NULL;
 	bp->tx_buffers = NULL;
 	if (bp->rx_ring) {
 	if (bp->rx_ring) {
 		if (bp->flags & B44_FLAG_RX_RING_HACK) {
 		if (bp->flags & B44_FLAG_RX_RING_HACK) {
-			dma_unmap_single(bp->sdev->dev, bp->rx_ring_dma,
+			dma_unmap_single(bp->sdev->dma_dev, bp->rx_ring_dma,
 					DMA_TABLE_BYTES,
 					DMA_TABLE_BYTES,
 					DMA_BIDIRECTIONAL);
 					DMA_BIDIRECTIONAL);
 			kfree(bp->rx_ring);
 			kfree(bp->rx_ring);
 		} else
 		} else
-			dma_free_coherent(bp->sdev->dev, DMA_TABLE_BYTES,
+			dma_free_coherent(bp->sdev->dma_dev, DMA_TABLE_BYTES,
 					    bp->rx_ring, bp->rx_ring_dma);
 					    bp->rx_ring, bp->rx_ring_dma);
 		bp->rx_ring = NULL;
 		bp->rx_ring = NULL;
 		bp->flags &= ~B44_FLAG_RX_RING_HACK;
 		bp->flags &= ~B44_FLAG_RX_RING_HACK;
 	}
 	}
 	if (bp->tx_ring) {
 	if (bp->tx_ring) {
 		if (bp->flags & B44_FLAG_TX_RING_HACK) {
 		if (bp->flags & B44_FLAG_TX_RING_HACK) {
-			dma_unmap_single(bp->sdev->dev, bp->tx_ring_dma,
+			dma_unmap_single(bp->sdev->dma_dev, bp->tx_ring_dma,
 					DMA_TABLE_BYTES,
 					DMA_TABLE_BYTES,
 					DMA_TO_DEVICE);
 					DMA_TO_DEVICE);
 			kfree(bp->tx_ring);
 			kfree(bp->tx_ring);
 		} else
 		} else
-			dma_free_coherent(bp->sdev->dev, DMA_TABLE_BYTES,
+			dma_free_coherent(bp->sdev->dma_dev, DMA_TABLE_BYTES,
 					    bp->tx_ring, bp->tx_ring_dma);
 					    bp->tx_ring, bp->tx_ring_dma);
 		bp->tx_ring = NULL;
 		bp->tx_ring = NULL;
 		bp->flags &= ~B44_FLAG_TX_RING_HACK;
 		bp->flags &= ~B44_FLAG_TX_RING_HACK;
@@ -1187,7 +1187,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
 		goto out_err;
 		goto out_err;
 
 
 	size = DMA_TABLE_BYTES;
 	size = DMA_TABLE_BYTES;
-	bp->rx_ring = dma_alloc_coherent(bp->sdev->dev, size, &bp->rx_ring_dma, gfp);
+	bp->rx_ring = dma_alloc_coherent(bp->sdev->dma_dev, size, &bp->rx_ring_dma, gfp);
 	if (!bp->rx_ring) {
 	if (!bp->rx_ring) {
 		/* Allocation may have failed due to pci_alloc_consistent
 		/* Allocation may have failed due to pci_alloc_consistent
 		   insisting on use of GFP_DMA, which is more restrictive
 		   insisting on use of GFP_DMA, which is more restrictive
@@ -1199,7 +1199,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
 		if (!rx_ring)
 		if (!rx_ring)
 			goto out_err;
 			goto out_err;
 
 
-		rx_ring_dma = dma_map_single(bp->sdev->dev, rx_ring,
+		rx_ring_dma = dma_map_single(bp->sdev->dma_dev, rx_ring,
 			                    DMA_TABLE_BYTES,
 			                    DMA_TABLE_BYTES,
 			                    DMA_BIDIRECTIONAL);
 			                    DMA_BIDIRECTIONAL);
 
 
@@ -1214,7 +1214,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
 		bp->flags |= B44_FLAG_RX_RING_HACK;
 		bp->flags |= B44_FLAG_RX_RING_HACK;
 	}
 	}
 
 
-	bp->tx_ring = dma_alloc_coherent(bp->sdev->dev, size, &bp->tx_ring_dma, gfp);
+	bp->tx_ring = dma_alloc_coherent(bp->sdev->dma_dev, size, &bp->tx_ring_dma, gfp);
 	if (!bp->tx_ring) {
 	if (!bp->tx_ring) {
 		/* Allocation may have failed due to dma_alloc_coherent
 		/* Allocation may have failed due to dma_alloc_coherent
 		   insisting on use of GFP_DMA, which is more restrictive
 		   insisting on use of GFP_DMA, which is more restrictive
@@ -1226,7 +1226,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
 		if (!tx_ring)
 		if (!tx_ring)
 			goto out_err;
 			goto out_err;
 
 
-		tx_ring_dma = dma_map_single(bp->sdev->dev, tx_ring,
+		tx_ring_dma = dma_map_single(bp->sdev->dma_dev, tx_ring,
 			                    DMA_TABLE_BYTES,
 			                    DMA_TABLE_BYTES,
 			                    DMA_TO_DEVICE);
 			                    DMA_TO_DEVICE);
 
 

+ 4 - 1
drivers/net/netconsole.c

@@ -730,7 +730,7 @@ static void write_msg(struct console *con, const char *msg, unsigned int len)
 
 
 static struct console netconsole = {
 static struct console netconsole = {
 	.name	= "netcon",
 	.name	= "netcon",
-	.flags	= CON_ENABLED | CON_PRINTBUFFER,
+	.flags	= CON_ENABLED,
 	.write	= write_msg,
 	.write	= write_msg,
 };
 };
 
 
@@ -749,6 +749,9 @@ static int __init init_netconsole(void)
 				err = PTR_ERR(nt);
 				err = PTR_ERR(nt);
 				goto fail;
 				goto fail;
 			}
 			}
+			/* Dump existing printks when we register */
+			netconsole.flags |= CON_PRINTBUFFER;
+
 			spin_lock_irqsave(&target_list_lock, flags);
 			spin_lock_irqsave(&target_list_lock, flags);
 			list_add(&nt->list, &target_list);
 			list_add(&nt->list, &target_list);
 			spin_unlock_irqrestore(&target_list_lock, flags);
 			spin_unlock_irqrestore(&target_list_lock, flags);

+ 8 - 3
drivers/net/ps3_gelic_wireless.c

@@ -512,13 +512,18 @@ static void gelic_wl_parse_ie(u8 *data, size_t len,
 		 data, len);
 		 data, len);
 	memset(ie_info, 0, sizeof(struct ie_info));
 	memset(ie_info, 0, sizeof(struct ie_info));
 
 
-	while (0 < data_left) {
+	while (2 <= data_left) {
 		item_id = *pos++;
 		item_id = *pos++;
 		item_len = *pos++;
 		item_len = *pos++;
+		data_left -= 2;
+
+		if (data_left < item_len)
+			break;
 
 
 		switch (item_id) {
 		switch (item_id) {
 		case MFIE_TYPE_GENERIC:
 		case MFIE_TYPE_GENERIC:
-			if (!memcmp(pos, wpa_oui, OUI_LEN) &&
+			if ((OUI_LEN + 1 <= item_len) &&
+			    !memcmp(pos, wpa_oui, OUI_LEN) &&
 			    pos[OUI_LEN] == 0x01) {
 			    pos[OUI_LEN] == 0x01) {
 				ie_info->wpa.data = pos - 2;
 				ie_info->wpa.data = pos - 2;
 				ie_info->wpa.len = item_len + 2;
 				ie_info->wpa.len = item_len + 2;
@@ -535,7 +540,7 @@ static void gelic_wl_parse_ie(u8 *data, size_t len,
 			break;
 			break;
 		}
 		}
 		pos += item_len;
 		pos += item_len;
-		data_left -= item_len + 2;
+		data_left -= item_len;
 	}
 	}
 	pr_debug("%s: wpa=%p,%d wpa2=%p,%d\n", __func__,
 	pr_debug("%s: wpa=%p,%d wpa2=%p,%d\n", __func__,
 		 ie_info->wpa.data, ie_info->wpa.len,
 		 ie_info->wpa.data, ie_info->wpa.len,

+ 14 - 13
drivers/net/wireless/b43/dma.c

@@ -373,10 +373,10 @@ static inline
 	dma_addr_t dmaaddr;
 	dma_addr_t dmaaddr;
 
 
 	if (tx) {
 	if (tx) {
-		dmaaddr = dma_map_single(ring->dev->dev->dev,
+		dmaaddr = dma_map_single(ring->dev->dev->dma_dev,
 					 buf, len, DMA_TO_DEVICE);
 					 buf, len, DMA_TO_DEVICE);
 	} else {
 	} else {
-		dmaaddr = dma_map_single(ring->dev->dev->dev,
+		dmaaddr = dma_map_single(ring->dev->dev->dma_dev,
 					 buf, len, DMA_FROM_DEVICE);
 					 buf, len, DMA_FROM_DEVICE);
 	}
 	}
 
 
@@ -388,9 +388,10 @@ static inline
 			  dma_addr_t addr, size_t len, int tx)
 			  dma_addr_t addr, size_t len, int tx)
 {
 {
 	if (tx) {
 	if (tx) {
-		dma_unmap_single(ring->dev->dev->dev, addr, len, DMA_TO_DEVICE);
+		dma_unmap_single(ring->dev->dev->dma_dev,
+				 addr, len, DMA_TO_DEVICE);
 	} else {
 	} else {
-		dma_unmap_single(ring->dev->dev->dev,
+		dma_unmap_single(ring->dev->dev->dma_dev,
 				 addr, len, DMA_FROM_DEVICE);
 				 addr, len, DMA_FROM_DEVICE);
 	}
 	}
 }
 }
@@ -400,7 +401,7 @@ static inline
 				 dma_addr_t addr, size_t len)
 				 dma_addr_t addr, size_t len)
 {
 {
 	B43_WARN_ON(ring->tx);
 	B43_WARN_ON(ring->tx);
-	dma_sync_single_for_cpu(ring->dev->dev->dev,
+	dma_sync_single_for_cpu(ring->dev->dev->dma_dev,
 				addr, len, DMA_FROM_DEVICE);
 				addr, len, DMA_FROM_DEVICE);
 }
 }
 
 
@@ -409,7 +410,7 @@ static inline
 				    dma_addr_t addr, size_t len)
 				    dma_addr_t addr, size_t len)
 {
 {
 	B43_WARN_ON(ring->tx);
 	B43_WARN_ON(ring->tx);
-	dma_sync_single_for_device(ring->dev->dev->dev,
+	dma_sync_single_for_device(ring->dev->dev->dma_dev,
 				   addr, len, DMA_FROM_DEVICE);
 				   addr, len, DMA_FROM_DEVICE);
 }
 }
 
 
@@ -425,7 +426,7 @@ static inline
 
 
 static int alloc_ringmemory(struct b43_dmaring *ring)
 static int alloc_ringmemory(struct b43_dmaring *ring)
 {
 {
-	struct device *dev = ring->dev->dev->dev;
+	struct device *dma_dev = ring->dev->dev->dma_dev;
 	gfp_t flags = GFP_KERNEL;
 	gfp_t flags = GFP_KERNEL;
 
 
 	/* The specs call for 4K buffers for 30- and 32-bit DMA with 4K
 	/* The specs call for 4K buffers for 30- and 32-bit DMA with 4K
@@ -439,7 +440,7 @@ static int alloc_ringmemory(struct b43_dmaring *ring)
 	 */
 	 */
 	if (ring->type == B43_DMA_64BIT)
 	if (ring->type == B43_DMA_64BIT)
 		flags |= GFP_DMA;
 		flags |= GFP_DMA;
-	ring->descbase = dma_alloc_coherent(dev, B43_DMA_RINGMEMSIZE,
+	ring->descbase = dma_alloc_coherent(dma_dev, B43_DMA_RINGMEMSIZE,
 					    &(ring->dmabase), flags);
 					    &(ring->dmabase), flags);
 	if (!ring->descbase) {
 	if (!ring->descbase) {
 		b43err(ring->dev->wl, "DMA ringmemory allocation failed\n");
 		b43err(ring->dev->wl, "DMA ringmemory allocation failed\n");
@@ -452,9 +453,9 @@ static int alloc_ringmemory(struct b43_dmaring *ring)
 
 
 static void free_ringmemory(struct b43_dmaring *ring)
 static void free_ringmemory(struct b43_dmaring *ring)
 {
 {
-	struct device *dev = ring->dev->dev->dev;
+	struct device *dma_dev = ring->dev->dev->dma_dev;
 
 
-	dma_free_coherent(dev, B43_DMA_RINGMEMSIZE,
+	dma_free_coherent(dma_dev, B43_DMA_RINGMEMSIZE,
 			  ring->descbase, ring->dmabase);
 			  ring->descbase, ring->dmabase);
 }
 }
 
 
@@ -854,7 +855,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
 			goto err_kfree_meta;
 			goto err_kfree_meta;
 
 
 		/* test for ability to dma to txhdr_cache */
 		/* test for ability to dma to txhdr_cache */
-		dma_test = dma_map_single(dev->dev->dev,
+		dma_test = dma_map_single(dev->dev->dma_dev,
 					  ring->txhdr_cache,
 					  ring->txhdr_cache,
 					  b43_txhdr_size(dev),
 					  b43_txhdr_size(dev),
 					  DMA_TO_DEVICE);
 					  DMA_TO_DEVICE);
@@ -869,7 +870,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
 			if (!ring->txhdr_cache)
 			if (!ring->txhdr_cache)
 				goto err_kfree_meta;
 				goto err_kfree_meta;
 
 
-			dma_test = dma_map_single(dev->dev->dev,
+			dma_test = dma_map_single(dev->dev->dma_dev,
 						  ring->txhdr_cache,
 						  ring->txhdr_cache,
 						  b43_txhdr_size(dev),
 						  b43_txhdr_size(dev),
 						  DMA_TO_DEVICE);
 						  DMA_TO_DEVICE);
@@ -883,7 +884,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
 			}
 			}
 		}
 		}
 
 
-		dma_unmap_single(dev->dev->dev,
+		dma_unmap_single(dev->dev->dma_dev,
 				 dma_test, b43_txhdr_size(dev),
 				 dma_test, b43_txhdr_size(dev),
 				 DMA_TO_DEVICE);
 				 DMA_TO_DEVICE);
 	}
 	}

+ 31 - 24
drivers/net/wireless/b43legacy/dma.c

@@ -393,11 +393,11 @@ dma_addr_t map_descbuffer(struct b43legacy_dmaring *ring,
 	dma_addr_t dmaaddr;
 	dma_addr_t dmaaddr;
 
 
 	if (tx)
 	if (tx)
-		dmaaddr = dma_map_single(ring->dev->dev->dev,
+		dmaaddr = dma_map_single(ring->dev->dev->dma_dev,
 					 buf, len,
 					 buf, len,
 					 DMA_TO_DEVICE);
 					 DMA_TO_DEVICE);
 	else
 	else
-		dmaaddr = dma_map_single(ring->dev->dev->dev,
+		dmaaddr = dma_map_single(ring->dev->dev->dma_dev,
 					 buf, len,
 					 buf, len,
 					 DMA_FROM_DEVICE);
 					 DMA_FROM_DEVICE);
 
 
@@ -411,11 +411,11 @@ void unmap_descbuffer(struct b43legacy_dmaring *ring,
 		      int tx)
 		      int tx)
 {
 {
 	if (tx)
 	if (tx)
-		dma_unmap_single(ring->dev->dev->dev,
+		dma_unmap_single(ring->dev->dev->dma_dev,
 				 addr, len,
 				 addr, len,
 				 DMA_TO_DEVICE);
 				 DMA_TO_DEVICE);
 	else
 	else
-		dma_unmap_single(ring->dev->dev->dev,
+		dma_unmap_single(ring->dev->dev->dma_dev,
 				 addr, len,
 				 addr, len,
 				 DMA_FROM_DEVICE);
 				 DMA_FROM_DEVICE);
 }
 }
@@ -427,7 +427,7 @@ void sync_descbuffer_for_cpu(struct b43legacy_dmaring *ring,
 {
 {
 	B43legacy_WARN_ON(ring->tx);
 	B43legacy_WARN_ON(ring->tx);
 
 
-	dma_sync_single_for_cpu(ring->dev->dev->dev,
+	dma_sync_single_for_cpu(ring->dev->dev->dma_dev,
 				addr, len, DMA_FROM_DEVICE);
 				addr, len, DMA_FROM_DEVICE);
 }
 }
 
 
@@ -438,7 +438,7 @@ void sync_descbuffer_for_device(struct b43legacy_dmaring *ring,
 {
 {
 	B43legacy_WARN_ON(ring->tx);
 	B43legacy_WARN_ON(ring->tx);
 
 
-	dma_sync_single_for_device(ring->dev->dev->dev,
+	dma_sync_single_for_device(ring->dev->dev->dma_dev,
 				   addr, len, DMA_FROM_DEVICE);
 				   addr, len, DMA_FROM_DEVICE);
 }
 }
 
 
@@ -458,9 +458,9 @@ void free_descriptor_buffer(struct b43legacy_dmaring *ring,
 
 
 static int alloc_ringmemory(struct b43legacy_dmaring *ring)
 static int alloc_ringmemory(struct b43legacy_dmaring *ring)
 {
 {
-	struct device *dev = ring->dev->dev->dev;
+	struct device *dma_dev = ring->dev->dev->dma_dev;
 
 
-	ring->descbase = dma_alloc_coherent(dev, B43legacy_DMA_RINGMEMSIZE,
+	ring->descbase = dma_alloc_coherent(dma_dev, B43legacy_DMA_RINGMEMSIZE,
 					    &(ring->dmabase), GFP_KERNEL);
 					    &(ring->dmabase), GFP_KERNEL);
 	if (!ring->descbase) {
 	if (!ring->descbase) {
 		b43legacyerr(ring->dev->wl, "DMA ringmemory allocation"
 		b43legacyerr(ring->dev->wl, "DMA ringmemory allocation"
@@ -474,9 +474,9 @@ static int alloc_ringmemory(struct b43legacy_dmaring *ring)
 
 
 static void free_ringmemory(struct b43legacy_dmaring *ring)
 static void free_ringmemory(struct b43legacy_dmaring *ring)
 {
 {
-	struct device *dev = ring->dev->dev->dev;
+	struct device *dma_dev = ring->dev->dev->dma_dev;
 
 
-	dma_free_coherent(dev, B43legacy_DMA_RINGMEMSIZE,
+	dma_free_coherent(dma_dev, B43legacy_DMA_RINGMEMSIZE,
 			  ring->descbase, ring->dmabase);
 			  ring->descbase, ring->dmabase);
 }
 }
 
 
@@ -585,8 +585,9 @@ static int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev,
 
 
 /* Check if a DMA mapping address is invalid. */
 /* Check if a DMA mapping address is invalid. */
 static bool b43legacy_dma_mapping_error(struct b43legacy_dmaring *ring,
 static bool b43legacy_dma_mapping_error(struct b43legacy_dmaring *ring,
-					dma_addr_t addr,
-					size_t buffersize)
+					 dma_addr_t addr,
+					 size_t buffersize,
+					 bool dma_to_device)
 {
 {
 	if (unlikely(dma_mapping_error(addr)))
 	if (unlikely(dma_mapping_error(addr)))
 		return 1;
 		return 1;
@@ -594,11 +595,11 @@ static bool b43legacy_dma_mapping_error(struct b43legacy_dmaring *ring,
 	switch (ring->type) {
 	switch (ring->type) {
 	case B43legacy_DMA_30BIT:
 	case B43legacy_DMA_30BIT:
 		if ((u64)addr + buffersize > (1ULL << 30))
 		if ((u64)addr + buffersize > (1ULL << 30))
-			return 1;
+			goto address_error;
 		break;
 		break;
 	case B43legacy_DMA_32BIT:
 	case B43legacy_DMA_32BIT:
 		if ((u64)addr + buffersize > (1ULL << 32))
 		if ((u64)addr + buffersize > (1ULL << 32))
-			return 1;
+			goto address_error;
 		break;
 		break;
 	case B43legacy_DMA_64BIT:
 	case B43legacy_DMA_64BIT:
 		/* Currently we can't have addresses beyond 64 bits in the kernel. */
 		/* Currently we can't have addresses beyond 64 bits in the kernel. */
@@ -607,6 +608,12 @@ static bool b43legacy_dma_mapping_error(struct b43legacy_dmaring *ring,
 
 
 	/* The address is OK. */
 	/* The address is OK. */
 	return 0;
 	return 0;
+
+address_error:
+	/* We can't support this address. Unmap it again. */
+	unmap_descbuffer(ring, addr, buffersize, dma_to_device);
+
+	return 1;
 }
 }
 
 
 static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
 static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
@@ -626,7 +633,7 @@ static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
 		return -ENOMEM;
 		return -ENOMEM;
 	dmaaddr = map_descbuffer(ring, skb->data,
 	dmaaddr = map_descbuffer(ring, skb->data,
 				 ring->rx_buffersize, 0);
 				 ring->rx_buffersize, 0);
-	if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize)) {
+	if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize, 0)) {
 		/* ugh. try to realloc in zone_dma */
 		/* ugh. try to realloc in zone_dma */
 		gfp_flags |= GFP_DMA;
 		gfp_flags |= GFP_DMA;
 
 
@@ -639,7 +646,7 @@ static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
 					 ring->rx_buffersize, 0);
 					 ring->rx_buffersize, 0);
 	}
 	}
 
 
-	if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize)) {
+	if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize, 0)) {
 		dev_kfree_skb_any(skb);
 		dev_kfree_skb_any(skb);
 		return -EIO;
 		return -EIO;
 	}
 	}
@@ -886,12 +893,12 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
 			goto err_kfree_meta;
 			goto err_kfree_meta;
 
 
 		/* test for ability to dma to txhdr_cache */
 		/* test for ability to dma to txhdr_cache */
-		dma_test = dma_map_single(dev->dev->dev, ring->txhdr_cache,
+		dma_test = dma_map_single(dev->dev->dma_dev, ring->txhdr_cache,
 					  sizeof(struct b43legacy_txhdr_fw3),
 					  sizeof(struct b43legacy_txhdr_fw3),
 					  DMA_TO_DEVICE);
 					  DMA_TO_DEVICE);
 
 
 		if (b43legacy_dma_mapping_error(ring, dma_test,
 		if (b43legacy_dma_mapping_error(ring, dma_test,
-					sizeof(struct b43legacy_txhdr_fw3))) {
+					sizeof(struct b43legacy_txhdr_fw3), 1)) {
 			/* ugh realloc */
 			/* ugh realloc */
 			kfree(ring->txhdr_cache);
 			kfree(ring->txhdr_cache);
 			ring->txhdr_cache = kcalloc(nr_slots,
 			ring->txhdr_cache = kcalloc(nr_slots,
@@ -900,17 +907,17 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
 			if (!ring->txhdr_cache)
 			if (!ring->txhdr_cache)
 				goto err_kfree_meta;
 				goto err_kfree_meta;
 
 
-			dma_test = dma_map_single(dev->dev->dev,
+			dma_test = dma_map_single(dev->dev->dma_dev,
 					ring->txhdr_cache,
 					ring->txhdr_cache,
 					sizeof(struct b43legacy_txhdr_fw3),
 					sizeof(struct b43legacy_txhdr_fw3),
 					DMA_TO_DEVICE);
 					DMA_TO_DEVICE);
 
 
 			if (b43legacy_dma_mapping_error(ring, dma_test,
 			if (b43legacy_dma_mapping_error(ring, dma_test,
-					sizeof(struct b43legacy_txhdr_fw3)))
+					sizeof(struct b43legacy_txhdr_fw3), 1))
 				goto err_kfree_txhdr_cache;
 				goto err_kfree_txhdr_cache;
 		}
 		}
 
 
-		dma_unmap_single(dev->dev->dev,
+		dma_unmap_single(dev->dev->dma_dev,
 				 dma_test, sizeof(struct b43legacy_txhdr_fw3),
 				 dma_test, sizeof(struct b43legacy_txhdr_fw3),
 				 DMA_TO_DEVICE);
 				 DMA_TO_DEVICE);
 	}
 	}
@@ -1235,7 +1242,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
 	meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header,
 	meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header,
 					   sizeof(struct b43legacy_txhdr_fw3), 1);
 					   sizeof(struct b43legacy_txhdr_fw3), 1);
 	if (b43legacy_dma_mapping_error(ring, meta_hdr->dmaaddr,
 	if (b43legacy_dma_mapping_error(ring, meta_hdr->dmaaddr,
-					sizeof(struct b43legacy_txhdr_fw3))) {
+					sizeof(struct b43legacy_txhdr_fw3), 1)) {
 		ring->current_slot = old_top_slot;
 		ring->current_slot = old_top_slot;
 		ring->used_slots = old_used_slots;
 		ring->used_slots = old_used_slots;
 		return -EIO;
 		return -EIO;
@@ -1254,7 +1261,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
 
 
 	meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
 	meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
 	/* create a bounce buffer in zone_dma on mapping failure. */
 	/* create a bounce buffer in zone_dma on mapping failure. */
-	if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len)) {
+	if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
 		bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA);
 		bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA);
 		if (!bounce_skb) {
 		if (!bounce_skb) {
 			ring->current_slot = old_top_slot;
 			ring->current_slot = old_top_slot;
@@ -1268,7 +1275,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
 		skb = bounce_skb;
 		skb = bounce_skb;
 		meta->skb = skb;
 		meta->skb = skb;
 		meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
 		meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
-		if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len)) {
+		if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
 			ring->current_slot = old_top_slot;
 			ring->current_slot = old_top_slot;
 			ring->used_slots = old_used_slots;
 			ring->used_slots = old_used_slots;
 			err = -EIO;
 			err = -EIO;

+ 2 - 0
drivers/net/wireless/b43legacy/main.c

@@ -1488,6 +1488,7 @@ static int b43legacy_request_firmware(struct b43legacy_wldev *dev)
 	}
 	}
 	if (!fw->initvals) {
 	if (!fw->initvals) {
 		switch (dev->phy.type) {
 		switch (dev->phy.type) {
+		case B43legacy_PHYTYPE_B:
 		case B43legacy_PHYTYPE_G:
 		case B43legacy_PHYTYPE_G:
 			if ((rev >= 5) && (rev <= 10))
 			if ((rev >= 5) && (rev <= 10))
 				filename = "b0g0initvals5";
 				filename = "b0g0initvals5";
@@ -1505,6 +1506,7 @@ static int b43legacy_request_firmware(struct b43legacy_wldev *dev)
 	}
 	}
 	if (!fw->initvals_band) {
 	if (!fw->initvals_band) {
 		switch (dev->phy.type) {
 		switch (dev->phy.type) {
+		case B43legacy_PHYTYPE_B:
 		case B43legacy_PHYTYPE_G:
 		case B43legacy_PHYTYPE_G:
 			if ((rev >= 5) && (rev <= 10))
 			if ((rev >= 5) && (rev <= 10))
 				filename = "b0g0bsinitvals5";
 				filename = "b0g0bsinitvals5";

+ 3 - 0
drivers/net/wireless/rtl8187_dev.c

@@ -509,6 +509,8 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev,
 		return -EOPNOTSUPP;
 		return -EOPNOTSUPP;
 	}
 	}
 
 
+	priv->vif = conf->vif;
+
 	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
 	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
 	for (i = 0; i < ETH_ALEN; i++)
 	for (i = 0; i < ETH_ALEN; i++)
 		rtl818x_iowrite8(priv, &priv->map->MAC[i],
 		rtl818x_iowrite8(priv, &priv->map->MAC[i],
@@ -523,6 +525,7 @@ static void rtl8187_remove_interface(struct ieee80211_hw *dev,
 {
 {
 	struct rtl8187_priv *priv = dev->priv;
 	struct rtl8187_priv *priv = dev->priv;
 	priv->mode = IEEE80211_IF_TYPE_MNTR;
 	priv->mode = IEEE80211_IF_TYPE_MNTR;
+	priv->vif = NULL;
 }
 }
 
 
 static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
 static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)

+ 1 - 0
drivers/pcmcia/at91_cf.c

@@ -419,3 +419,4 @@ module_exit(at91_cf_exit);
 MODULE_DESCRIPTION("AT91 Compact Flash Driver");
 MODULE_DESCRIPTION("AT91 Compact Flash Driver");
 MODULE_AUTHOR("David Brownell");
 MODULE_AUTHOR("David Brownell");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:at91_cf");

+ 2 - 0
drivers/pcmcia/omap_cf.c

@@ -344,6 +344,7 @@ static int omap_cf_resume(struct platform_device *pdev)
 static struct platform_driver omap_cf_driver = {
 static struct platform_driver omap_cf_driver = {
 	.driver = {
 	.driver = {
 		.name	= (char *) driver_name,
 		.name	= (char *) driver_name,
+		.owner	= THIS_MODULE,
 	},
 	},
 	.remove		= __exit_p(omap_cf_remove),
 	.remove		= __exit_p(omap_cf_remove),
 	.suspend	= omap_cf_suspend,
 	.suspend	= omap_cf_suspend,
@@ -368,3 +369,4 @@ module_exit(omap_cf_exit);
 
 
 MODULE_DESCRIPTION("OMAP CF Driver");
 MODULE_DESCRIPTION("OMAP CF Driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:omap_cf");

+ 2 - 0
drivers/pcmcia/pxa2xx_base.c

@@ -239,6 +239,7 @@ static struct platform_driver pxa2xx_pcmcia_driver = {
 	.resume 	= pxa2xx_drv_pcmcia_resume,
 	.resume 	= pxa2xx_drv_pcmcia_resume,
 	.driver		= {
 	.driver		= {
 		.name	= "pxa2xx-pcmcia",
 		.name	= "pxa2xx-pcmcia",
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -258,3 +259,4 @@ module_exit(pxa2xx_pcmcia_exit);
 MODULE_AUTHOR("Stefan Eletzhofer <stefan.eletzhofer@inquant.de> and Ian Molton <spyro@f2s.com>");
 MODULE_AUTHOR("Stefan Eletzhofer <stefan.eletzhofer@inquant.de> and Ian Molton <spyro@f2s.com>");
 MODULE_DESCRIPTION("Linux PCMCIA Card Services: PXA2xx core socket driver");
 MODULE_DESCRIPTION("Linux PCMCIA Card Services: PXA2xx core socket driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:pxa2xx-pcmcia");

+ 2 - 3
drivers/rtc/rtc-cmos.c

@@ -198,9 +198,8 @@ static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t)
 
 
 	/* Writing 0xff means "don't care" or "match all".  */
 	/* Writing 0xff means "don't care" or "match all".  */
 
 
-	mon = t->time.tm_mon;
-	mon = (mon < 12) ? BIN2BCD(mon) : 0xff;
-	mon++;
+	mon = t->time.tm_mon + 1;
+	mon = (mon <= 12) ? BIN2BCD(mon) : 0xff;
 
 
 	mday = t->time.tm_mday;
 	mday = t->time.tm_mday;
 	mday = (mday >= 1 && mday <= 31) ? BIN2BCD(mday) : 0xff;
 	mday = (mday >= 1 && mday <= 31) ? BIN2BCD(mday) : 0xff;

+ 1 - 0
drivers/serial/atmel_serial.c

@@ -1577,3 +1577,4 @@ module_exit(atmel_serial_exit);
 MODULE_AUTHOR("Rick Bronson");
 MODULE_AUTHOR("Rick Bronson");
 MODULE_DESCRIPTION("Atmel AT91 / AT32 serial port driver");
 MODULE_DESCRIPTION("Atmel AT91 / AT32 serial port driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:atmel_usart");

+ 2 - 0
drivers/serial/bfin_5xx.c

@@ -1243,6 +1243,7 @@ static struct platform_driver bfin_serial_driver = {
 	.resume		= bfin_serial_resume,
 	.resume		= bfin_serial_resume,
 	.driver		= {
 	.driver		= {
 		.name	= "bfin-uart",
 		.name	= "bfin-uart",
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -1301,3 +1302,4 @@ MODULE_AUTHOR("Aubrey.Li <aubrey.li@analog.com>");
 MODULE_DESCRIPTION("Blackfin generic serial port driver");
 MODULE_DESCRIPTION("Blackfin generic serial port driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_CHARDEV_MAJOR(BFIN_SERIAL_MAJOR);
 MODULE_ALIAS_CHARDEV_MAJOR(BFIN_SERIAL_MAJOR);
+MODULE_ALIAS("platform:bfin-uart");

+ 2 - 0
drivers/serial/imx.c

@@ -1090,6 +1090,7 @@ static struct platform_driver serial_imx_driver = {
 	.resume		= serial_imx_resume,
 	.resume		= serial_imx_resume,
 	.driver		= {
 	.driver		= {
 	        .name	= "imx-uart",
 	        .name	= "imx-uart",
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -1124,3 +1125,4 @@ module_exit(imx_serial_exit);
 MODULE_AUTHOR("Sascha Hauer");
 MODULE_AUTHOR("Sascha Hauer");
 MODULE_DESCRIPTION("IMX generic serial port driver");
 MODULE_DESCRIPTION("IMX generic serial port driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:imx-uart");

+ 1 - 0
drivers/serial/mcf.c

@@ -649,5 +649,6 @@ module_exit(mcf_exit);
 MODULE_AUTHOR("Greg Ungerer <gerg@snapgear.com>");
 MODULE_AUTHOR("Greg Ungerer <gerg@snapgear.com>");
 MODULE_DESCRIPTION("Freescale ColdFire UART driver");
 MODULE_DESCRIPTION("Freescale ColdFire UART driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:mcfuart");
 
 
 /****************************************************************************/
 /****************************************************************************/

+ 2 - 0
drivers/serial/mpc52xx_uart.c

@@ -1188,6 +1188,8 @@ mpc52xx_uart_resume(struct platform_device *dev)
 }
 }
 #endif
 #endif
 
 
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:mpc52xx-psc");
 
 
 static struct platform_driver mpc52xx_uart_platform_driver = {
 static struct platform_driver mpc52xx_uart_platform_driver = {
 	.probe		= mpc52xx_uart_probe,
 	.probe		= mpc52xx_uart_probe,

+ 2 - 0
drivers/serial/mpsc.c

@@ -1964,6 +1964,7 @@ static struct platform_driver mpsc_driver = {
 	.remove	= mpsc_drv_remove,
 	.remove	= mpsc_drv_remove,
 	.driver	= {
 	.driver	= {
 		.name	= MPSC_CTLR_NAME,
 		.name	= MPSC_CTLR_NAME,
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -2007,3 +2008,4 @@ MODULE_DESCRIPTION("Generic Marvell MPSC serial/UART driver $Revision: 1.00 $");
 MODULE_VERSION(MPSC_VERSION);
 MODULE_VERSION(MPSC_VERSION);
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_CHARDEV_MAJOR(MPSC_MAJOR);
 MODULE_ALIAS_CHARDEV_MAJOR(MPSC_MAJOR);
+MODULE_ALIAS("platform:" MPSC_CTLR_NAME);

+ 2 - 0
drivers/serial/netx-serial.c

@@ -713,6 +713,7 @@ static struct platform_driver serial_netx_driver = {
 
 
 	.driver		= {
 	.driver		= {
 		.name   = DRIVER_NAME,
 		.name   = DRIVER_NAME,
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -745,3 +746,4 @@ module_exit(netx_serial_exit);
 MODULE_AUTHOR("Sascha Hauer");
 MODULE_AUTHOR("Sascha Hauer");
 MODULE_DESCRIPTION("NetX serial port driver");
 MODULE_DESCRIPTION("NetX serial port driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRIVER_NAME);

+ 1 - 0
drivers/serial/pnx8xxx_uart.c

@@ -850,3 +850,4 @@ MODULE_AUTHOR("Embedded Alley Solutions, Inc.");
 MODULE_DESCRIPTION("PNX8XXX SoCs serial port driver");
 MODULE_DESCRIPTION("PNX8XXX SoCs serial port driver");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_PNX8XXX_MAJOR);
 MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_PNX8XXX_MAJOR);
+MODULE_ALIAS("platform:pnx8xxx-uart");

+ 2 - 1
drivers/serial/pxa.c

@@ -833,6 +833,7 @@ static struct platform_driver serial_pxa_driver = {
 	.resume		= serial_pxa_resume,
 	.resume		= serial_pxa_resume,
 	.driver		= {
 	.driver		= {
 	        .name	= "pxa2xx-uart",
 	        .name	= "pxa2xx-uart",
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -861,4 +862,4 @@ module_init(serial_pxa_init);
 module_exit(serial_pxa_exit);
 module_exit(serial_pxa_exit);
 
 
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
-
+MODULE_ALIAS("platform:pxa2xx-uart");

+ 4 - 0
drivers/serial/s3c2410.c

@@ -1935,3 +1935,7 @@ console_initcall(s3c24xx_serial_initconsole);
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
 MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
 MODULE_DESCRIPTION("Samsung S3C2410/S3C2440/S3C2412 Serial port driver");
 MODULE_DESCRIPTION("Samsung S3C2410/S3C2440/S3C2412 Serial port driver");
+MODULE_ALIAS("platform:s3c2400-uart");
+MODULE_ALIAS("platform:s3c2410-uart");
+MODULE_ALIAS("platform:s3c2412-uart");
+MODULE_ALIAS("platform:s3c2440-uart");

+ 2 - 0
drivers/serial/sa1100.c

@@ -884,6 +884,7 @@ static struct platform_driver sa11x0_serial_driver = {
 	.resume		= sa1100_serial_resume,
 	.resume		= sa1100_serial_resume,
 	.driver		= {
 	.driver		= {
 		.name	= "sa11x0-uart",
 		.name	= "sa11x0-uart",
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -917,3 +918,4 @@ MODULE_AUTHOR("Deep Blue Solutions Ltd");
 MODULE_DESCRIPTION("SA1100 generic serial port driver $Revision: 1.50 $");
 MODULE_DESCRIPTION("SA1100 generic serial port driver $Revision: 1.50 $");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_SA1100_MAJOR);
 MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_SA1100_MAJOR);
+MODULE_ALIAS("platform:sa11x0-uart");

+ 2 - 0
drivers/serial/sc26xx.c

@@ -732,6 +732,7 @@ static struct platform_driver sc26xx_driver = {
 	.remove	= __devexit_p(sc26xx_driver_remove),
 	.remove	= __devexit_p(sc26xx_driver_remove),
 	.driver	= {
 	.driver	= {
 		.name	= "SC26xx",
 		.name	= "SC26xx",
+		.owner	= THIS_MODULE,
 	},
 	},
 };
 };
 
 
@@ -753,3 +754,4 @@ MODULE_AUTHOR("Thomas Bogendörfer");
 MODULE_DESCRIPTION("SC681/SC2692 serial driver");
 MODULE_DESCRIPTION("SC681/SC2692 serial driver");
 MODULE_VERSION("1.0");
 MODULE_VERSION("1.0");
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:SC26xx");

+ 1 - 0
drivers/serial/sh-sci.c

@@ -1552,3 +1552,4 @@ module_init(sci_init);
 module_exit(sci_exit);
 module_exit(sci_exit);
 
 
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:sh-sci");

+ 3 - 0
drivers/serial/uartlite.c

@@ -561,6 +561,9 @@ static int __devexit ulite_remove(struct platform_device *pdev)
 	return ulite_release(&pdev->dev);
 	return ulite_release(&pdev->dev);
 }
 }
 
 
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:uartlite");
+
 static struct platform_driver ulite_platform_driver = {
 static struct platform_driver ulite_platform_driver = {
 	.probe	= ulite_probe,
 	.probe	= ulite_probe,
 	.remove	= __devexit_p(ulite_remove),
 	.remove	= __devexit_p(ulite_remove),

+ 3 - 0
drivers/serial/vr41xx_siu.c

@@ -960,3 +960,6 @@ static void __exit vr41xx_siu_exit(void)
 
 
 module_init(vr41xx_siu_init);
 module_init(vr41xx_siu_init);
 module_exit(vr41xx_siu_exit);
 module_exit(vr41xx_siu_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:SIU");

+ 14 - 6
drivers/spi/spi_s3c24xx.c

@@ -192,8 +192,11 @@ static int s3c24xx_spi_txrx(struct spi_device *spi, struct spi_transfer *t)
 	hw->len = t->len;
 	hw->len = t->len;
 	hw->count = 0;
 	hw->count = 0;
 
 
+	init_completion(&hw->done);
+
 	/* send the first byte */
 	/* send the first byte */
 	writeb(hw_txbyte(hw, 0), hw->regs + S3C2410_SPTDAT);
 	writeb(hw_txbyte(hw, 0), hw->regs + S3C2410_SPTDAT);
+
 	wait_for_completion(&hw->done);
 	wait_for_completion(&hw->done);
 
 
 	return hw->count;
 	return hw->count;
@@ -235,6 +238,7 @@ static irqreturn_t s3c24xx_spi_irq(int irq, void *dev)
 
 
 static int __init s3c24xx_spi_probe(struct platform_device *pdev)
 static int __init s3c24xx_spi_probe(struct platform_device *pdev)
 {
 {
+	struct s3c2410_spi_info *pdata;
 	struct s3c24xx_spi *hw;
 	struct s3c24xx_spi *hw;
 	struct spi_master *master;
 	struct spi_master *master;
 	struct resource *res;
 	struct resource *res;
@@ -251,10 +255,10 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev)
 	memset(hw, 0, sizeof(struct s3c24xx_spi));
 	memset(hw, 0, sizeof(struct s3c24xx_spi));
 
 
 	hw->master = spi_master_get(master);
 	hw->master = spi_master_get(master);
-	hw->pdata = pdev->dev.platform_data;
+	hw->pdata = pdata = pdev->dev.platform_data;
 	hw->dev = &pdev->dev;
 	hw->dev = &pdev->dev;
 
 
-	if (hw->pdata == NULL) {
+	if (pdata == NULL) {
 		dev_err(&pdev->dev, "No platform data supplied\n");
 		dev_err(&pdev->dev, "No platform data supplied\n");
 		err = -ENOENT;
 		err = -ENOENT;
 		goto err_no_pdata;
 		goto err_no_pdata;
@@ -263,6 +267,10 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev)
 	platform_set_drvdata(pdev, hw);
 	platform_set_drvdata(pdev, hw);
 	init_completion(&hw->done);
 	init_completion(&hw->done);
 
 
+	/* setup the master state. */
+
+	master->num_chipselect = hw->pdata->num_cs;
+
 	/* setup the state for the bitbang driver */
 	/* setup the state for the bitbang driver */
 
 
 	hw->bitbang.master         = hw->master;
 	hw->bitbang.master         = hw->master;
@@ -330,13 +338,13 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev)
 
 
 	/* setup any gpio we can */
 	/* setup any gpio we can */
 
 
-	if (!hw->pdata->set_cs) {
+	if (!pdata->set_cs) {
 		hw->set_cs = s3c24xx_spi_gpiocs;
 		hw->set_cs = s3c24xx_spi_gpiocs;
 
 
-		s3c2410_gpio_setpin(hw->pdata->pin_cs, 1);
-		s3c2410_gpio_cfgpin(hw->pdata->pin_cs, S3C2410_GPIO_OUTPUT);
+		s3c2410_gpio_setpin(pdata->pin_cs, 1);
+		s3c2410_gpio_cfgpin(pdata->pin_cs, S3C2410_GPIO_OUTPUT);
 	} else
 	} else
-		hw->set_cs = hw->pdata->set_cs;
+		hw->set_cs = pdata->set_cs;
 
 
 	/* register our spi controller */
 	/* register our spi controller */
 
 

+ 8 - 6
drivers/ssb/main.c

@@ -436,15 +436,18 @@ static int ssb_devices_register(struct ssb_bus *bus)
 #ifdef CONFIG_SSB_PCIHOST
 #ifdef CONFIG_SSB_PCIHOST
 			sdev->irq = bus->host_pci->irq;
 			sdev->irq = bus->host_pci->irq;
 			dev->parent = &bus->host_pci->dev;
 			dev->parent = &bus->host_pci->dev;
+			sdev->dma_dev = &bus->host_pci->dev;
 #endif
 #endif
 			break;
 			break;
 		case SSB_BUSTYPE_PCMCIA:
 		case SSB_BUSTYPE_PCMCIA:
 #ifdef CONFIG_SSB_PCMCIAHOST
 #ifdef CONFIG_SSB_PCMCIAHOST
 			sdev->irq = bus->host_pcmcia->irq.AssignedIRQ;
 			sdev->irq = bus->host_pcmcia->irq.AssignedIRQ;
 			dev->parent = &bus->host_pcmcia->dev;
 			dev->parent = &bus->host_pcmcia->dev;
+			sdev->dma_dev = &bus->host_pcmcia->dev;
 #endif
 #endif
 			break;
 			break;
 		case SSB_BUSTYPE_SSB:
 		case SSB_BUSTYPE_SSB:
+			sdev->dma_dev = dev;
 			break;
 			break;
 		}
 		}
 
 
@@ -1018,15 +1021,14 @@ EXPORT_SYMBOL(ssb_dma_translation);
 
 
 int ssb_dma_set_mask(struct ssb_device *ssb_dev, u64 mask)
 int ssb_dma_set_mask(struct ssb_device *ssb_dev, u64 mask)
 {
 {
-	struct device *dev = ssb_dev->dev;
+	struct device *dma_dev = ssb_dev->dma_dev;
 
 
 #ifdef CONFIG_SSB_PCIHOST
 #ifdef CONFIG_SSB_PCIHOST
-	if (ssb_dev->bus->bustype == SSB_BUSTYPE_PCI &&
-	    !dma_supported(dev, mask))
-		return -EIO;
+	if (ssb_dev->bus->bustype == SSB_BUSTYPE_PCI)
+		return dma_set_mask(dma_dev, mask);
 #endif
 #endif
-	dev->coherent_dma_mask = mask;
-	dev->dma_mask = &dev->coherent_dma_mask;
+	dma_dev->coherent_dma_mask = mask;
+	dma_dev->dma_mask = &dma_dev->coherent_dma_mask;
 
 
 	return 0;
 	return 0;
 }
 }

+ 4 - 0
drivers/thermal/thermal.c

@@ -196,6 +196,10 @@ static struct device_attribute trip_point_attrs[] = {
 	__ATTR(trip_point_8_temp, 0444, trip_point_temp_show, NULL),
 	__ATTR(trip_point_8_temp, 0444, trip_point_temp_show, NULL),
 	__ATTR(trip_point_9_type, 0444, trip_point_type_show, NULL),
 	__ATTR(trip_point_9_type, 0444, trip_point_type_show, NULL),
 	__ATTR(trip_point_9_temp, 0444, trip_point_temp_show, NULL),
 	__ATTR(trip_point_9_temp, 0444, trip_point_temp_show, NULL),
+	__ATTR(trip_point_10_type, 0444, trip_point_type_show, NULL),
+	__ATTR(trip_point_10_temp, 0444, trip_point_temp_show, NULL),
+	__ATTR(trip_point_11_type, 0444, trip_point_type_show, NULL),
+	__ATTR(trip_point_11_temp, 0444, trip_point_temp_show, NULL),
 };
 };
 
 
 #define TRIP_POINT_ATTR_ADD(_dev, _index, result)     \
 #define TRIP_POINT_ATTR_ADD(_dev, _index, result)     \

+ 54 - 2
drivers/usb/serial/option.c

@@ -109,6 +109,22 @@ static int  option_send_setup(struct usb_serial_port *port);
 #define HUAWEI_PRODUCT_E600			0x1001
 #define HUAWEI_PRODUCT_E600			0x1001
 #define HUAWEI_PRODUCT_E220			0x1003
 #define HUAWEI_PRODUCT_E220			0x1003
 #define HUAWEI_PRODUCT_E220BIS			0x1004
 #define HUAWEI_PRODUCT_E220BIS			0x1004
+#define HUAWEI_PRODUCT_E1401			0x1401
+#define HUAWEI_PRODUCT_E1403			0x1403
+#define HUAWEI_PRODUCT_E1405			0x1405
+#define HUAWEI_PRODUCT_E1406			0x1406
+#define HUAWEI_PRODUCT_E1408			0x1408
+#define HUAWEI_PRODUCT_E1409			0x1409
+#define HUAWEI_PRODUCT_E1410			0x1410
+#define HUAWEI_PRODUCT_E1411			0x1411
+#define HUAWEI_PRODUCT_E1412			0x1412
+#define HUAWEI_PRODUCT_E1413			0x1413
+#define HUAWEI_PRODUCT_E1414			0x1414
+#define HUAWEI_PRODUCT_E1415			0x1415
+#define HUAWEI_PRODUCT_E1416			0x1416
+#define HUAWEI_PRODUCT_E1417			0x1417
+#define HUAWEI_PRODUCT_E1418			0x1418
+#define HUAWEI_PRODUCT_E1419			0x1419
 
 
 #define NOVATELWIRELESS_VENDOR_ID		0x1410
 #define NOVATELWIRELESS_VENDOR_ID		0x1410
 
 
@@ -129,6 +145,7 @@ static int  option_send_setup(struct usb_serial_port *port);
 #define NOVATELWIRELESS_PRODUCT_EV620		0x2100
 #define NOVATELWIRELESS_PRODUCT_EV620		0x2100
 #define NOVATELWIRELESS_PRODUCT_ES720		0x2110
 #define NOVATELWIRELESS_PRODUCT_ES720		0x2110
 #define NOVATELWIRELESS_PRODUCT_E725		0x2120
 #define NOVATELWIRELESS_PRODUCT_E725		0x2120
+#define NOVATELWIRELESS_PRODUCT_ES620		0x2130
 #define NOVATELWIRELESS_PRODUCT_EU730		0x2400
 #define NOVATELWIRELESS_PRODUCT_EU730		0x2400
 #define NOVATELWIRELESS_PRODUCT_EU740		0x2410
 #define NOVATELWIRELESS_PRODUCT_EU740		0x2410
 #define NOVATELWIRELESS_PRODUCT_EU870D		0x2420
 #define NOVATELWIRELESS_PRODUCT_EU870D		0x2420
@@ -137,6 +154,8 @@ static int  option_send_setup(struct usb_serial_port *port);
 #define NOVATELWIRELESS_PRODUCT_MC727		0x4100
 #define NOVATELWIRELESS_PRODUCT_MC727		0x4100
 #define NOVATELWIRELESS_PRODUCT_MC950D		0x4400
 #define NOVATELWIRELESS_PRODUCT_MC950D		0x4400
 
 
+#define NOVATELWIRELESS_PRODUCT_U727		0x5010
+
 /* FUTURE NOVATEL PRODUCTS */
 /* FUTURE NOVATEL PRODUCTS */
 #define NOVATELWIRELESS_PRODUCT_EVDO_1		0x6000
 #define NOVATELWIRELESS_PRODUCT_EVDO_1		0x6000
 #define NOVATELWIRELESS_PRODUCT_HSPA_1		0x7000
 #define NOVATELWIRELESS_PRODUCT_HSPA_1		0x7000
@@ -147,6 +166,12 @@ static int  option_send_setup(struct usb_serial_port *port);
 #define NOVATELWIRELESS_PRODUCT_EMBEDDED_2	0x8001
 #define NOVATELWIRELESS_PRODUCT_EMBEDDED_2	0x8001
 #define NOVATELWIRELESS_PRODUCT_GLOBAL_2	0x9001
 #define NOVATELWIRELESS_PRODUCT_GLOBAL_2	0x9001
 
 
+/* AMOI PRODUCTS */
+#define AMOI_VENDOR_ID				0x1614
+#define AMOI_PRODUCT_H01			0x0800
+#define AMOI_PRODUCT_H01A			0x7002
+#define AMOI_PRODUCT_H02			0x0802
+
 #define DELL_VENDOR_ID				0x413C
 #define DELL_VENDOR_ID				0x413C
 
 
 #define KYOCERA_VENDOR_ID			0x0c88
 #define KYOCERA_VENDOR_ID			0x0c88
@@ -163,8 +188,13 @@ static int  option_send_setup(struct usb_serial_port *port);
 #define BANDRICH_PRODUCT_C100_1			0x1002
 #define BANDRICH_PRODUCT_C100_1			0x1002
 #define BANDRICH_PRODUCT_C100_2			0x1003
 #define BANDRICH_PRODUCT_C100_2			0x1003
 
 
+#define AMOI_VENDOR_ID			0x1614
+#define AMOI_PRODUCT_9508			0x0800
+
 #define QUALCOMM_VENDOR_ID			0x05C6
 #define QUALCOMM_VENDOR_ID			0x05C6
 
 
+#define MAXON_VENDOR_ID				0x16d8
+
 static struct usb_device_id option_ids[] = {
 static struct usb_device_id option_ids[] = {
 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -204,6 +234,23 @@ static struct usb_device_id option_ids[] = {
 	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) },
 	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418) },
+	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419) },
+	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) },
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, /* Novatel Merlin EX720/V740/X720 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, /* Novatel Merlin EX720/V740/X720 */
@@ -216,13 +263,13 @@ static struct usb_device_id option_ids[] = {
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) }, /* Novatel EV620/ES620 CDMA/EV-DO */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) }, /* Novatel EV620/ES620 CDMA/EV-DO */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) }, /* Novatel ES620/ES720/U720/USB720 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) }, /* Novatel ES620/ES720/U720/USB720 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) }, /* Novatel E725/E726 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) }, /* Novatel E725/E726 */
-	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2130) }, /* Novatel Merlin ES620 SM Bus */
+	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES620) }, /* Novatel Merlin ES620 SM Bus */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) }, /* Novatel EU730 and Vodafone EU740 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) }, /* Novatel EU730 and Vodafone EU740 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) }, /* Novatel non-Vodafone EU740 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) }, /* Novatel non-Vodafone EU740 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
-	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x5010) }, /* Novatel U727 */
+	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel U727 */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */
@@ -232,6 +279,10 @@ static struct usb_device_id option_ids[] = {
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_2) }, /* Novatel Embedded product */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_2) }, /* Novatel Embedded product */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_2) }, /* Novatel Global product */
 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_2) }, /* Novatel Global product */
 
 
+	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
+	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
+	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) },
+
 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8114) },	/* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8114) },	/* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8115) },	/* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8115) },	/* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8116) },	/* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8116) },	/* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
@@ -249,6 +300,7 @@ static struct usb_device_id option_ids[] = {
 	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
 	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
 	{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
 	{ USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
+	{ USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
 	{ } /* Terminating entry */
 	{ } /* Terminating entry */
 };
 };
 MODULE_DEVICE_TABLE(usb, option_ids);
 MODULE_DEVICE_TABLE(usb, option_ids);

+ 2 - 0
drivers/usb/serial/usb-serial.c

@@ -854,6 +854,7 @@ int usb_serial_probe(struct usb_interface *interface,
 	serial->num_interrupt_in = num_interrupt_in;
 	serial->num_interrupt_in = num_interrupt_in;
 	serial->num_interrupt_out = num_interrupt_out;
 	serial->num_interrupt_out = num_interrupt_out;
 
 
+#if 0
 	/* check that the device meets the driver's requirements */
 	/* check that the device meets the driver's requirements */
 	if ((type->num_interrupt_in != NUM_DONT_CARE &&
 	if ((type->num_interrupt_in != NUM_DONT_CARE &&
 				type->num_interrupt_in != num_interrupt_in)
 				type->num_interrupt_in != num_interrupt_in)
@@ -867,6 +868,7 @@ int usb_serial_probe(struct usb_interface *interface,
 		kfree(serial);
 		kfree(serial);
 		return -EIO;
 		return -EIO;
 	}
 	}
+#endif
 
 
 	/* found all that we need */
 	/* found all that we need */
 	dev_info(&interface->dev, "%s converter detected\n",
 	dev_info(&interface->dev, "%s converter detected\n",

+ 92 - 4
drivers/usb/storage/unusual_devs.h

@@ -1530,16 +1530,104 @@ UNUSUAL_DEV(  0x1210, 0x0003, 0x0100, 0x0100,
 		US_SC_DEVICE, US_PR_DEVICE, NULL,
 		US_SC_DEVICE, US_PR_DEVICE, NULL,
 		US_FL_IGNORE_RESIDUE ),
 		US_FL_IGNORE_RESIDUE ),
 
 
-/* Reported by fangxiaozhi <fangxiaozhi60675@huawei.com>
- * and by linlei <linlei83@huawei.com>
- * Patch reworked by Johann Wilhelm <johann.wilhelm@student.tugraz.at>
- * This brings the HUAWEI E220 devices into multi-port mode
+/* Reported by fangxiaozhi <huananhu@huawei.com>
+ * This brings the HUAWEI data card devices into multi-port mode
  */
  */
+UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
 UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000,
 UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000,
 		"HUAWEI MOBILE",
 		"HUAWEI MOBILE",
 		"Mass Storage",
 		"Mass Storage",
 		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
 		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
 		0),
 		0),
+UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
+UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000,
+		"HUAWEI MOBILE",
+		"Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
+		0),
 
 
 /* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */
 /* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */
 UNUSUAL_DEV(  0x132b, 0x000b, 0x0001, 0x0001,
 UNUSUAL_DEV(  0x132b, 0x000b, 0x0001, 0x0001,

+ 1 - 0
drivers/video/fbmem.c

@@ -1521,6 +1521,7 @@ module_init(fbmem_init);
 static void __exit
 static void __exit
 fbmem_exit(void)
 fbmem_exit(void)
 {
 {
+	remove_proc_entry("fb", NULL);
 	class_destroy(fb_class);
 	class_destroy(fb_class);
 	unregister_chrdev(FB_MAJOR, "fb");
 	unregister_chrdev(FB_MAJOR, "fb");
 }
 }

+ 1 - 1
fs/afs/main.c

@@ -22,7 +22,7 @@ MODULE_LICENSE("GPL");
 
 
 unsigned afs_debug;
 unsigned afs_debug;
 module_param_named(debug, afs_debug, uint, S_IWUSR | S_IRUGO);
 module_param_named(debug, afs_debug, uint, S_IWUSR | S_IRUGO);
-MODULE_PARM_DESC(afs_debug, "AFS debugging mask");
+MODULE_PARM_DESC(debug, "AFS debugging mask");
 
 
 static char *rootcell;
 static char *rootcell;
 
 

+ 1 - 1
fs/ext2/xattr.c

@@ -835,7 +835,7 @@ ext2_xattr_cache_insert(struct buffer_head *bh)
 	struct mb_cache_entry *ce;
 	struct mb_cache_entry *ce;
 	int error;
 	int error;
 
 
-	ce = mb_cache_entry_alloc(ext2_xattr_cache);
+	ce = mb_cache_entry_alloc(ext2_xattr_cache, GFP_NOFS);
 	if (!ce)
 	if (!ce)
 		return -ENOMEM;
 		return -ENOMEM;
 	error = mb_cache_entry_insert(ce, bh->b_bdev, bh->b_blocknr, &hash);
 	error = mb_cache_entry_insert(ce, bh->b_bdev, bh->b_blocknr, &hash);

+ 1 - 1
fs/ext3/xattr.c

@@ -1126,7 +1126,7 @@ ext3_xattr_cache_insert(struct buffer_head *bh)
 	struct mb_cache_entry *ce;
 	struct mb_cache_entry *ce;
 	int error;
 	int error;
 
 
-	ce = mb_cache_entry_alloc(ext3_xattr_cache);
+	ce = mb_cache_entry_alloc(ext3_xattr_cache, GFP_NOFS);
 	if (!ce) {
 	if (!ce) {
 		ea_bdebug(bh, "out of memory");
 		ea_bdebug(bh, "out of memory");
 		return;
 		return;

+ 1 - 1
fs/ext4/xattr.c

@@ -1386,7 +1386,7 @@ ext4_xattr_cache_insert(struct buffer_head *bh)
 	struct mb_cache_entry *ce;
 	struct mb_cache_entry *ce;
 	int error;
 	int error;
 
 
-	ce = mb_cache_entry_alloc(ext4_xattr_cache);
+	ce = mb_cache_entry_alloc(ext4_xattr_cache, GFP_NOFS);
 	if (!ce) {
 	if (!ce) {
 		ea_bdebug(bh, "out of memory");
 		ea_bdebug(bh, "out of memory");
 		return;
 		return;

+ 2 - 2
fs/mbcache.c

@@ -399,11 +399,11 @@ mb_cache_destroy(struct mb_cache *cache)
  * if no more memory was available.
  * if no more memory was available.
  */
  */
 struct mb_cache_entry *
 struct mb_cache_entry *
-mb_cache_entry_alloc(struct mb_cache *cache)
+mb_cache_entry_alloc(struct mb_cache *cache, gfp_t gfp_flags)
 {
 {
 	struct mb_cache_entry *ce;
 	struct mb_cache_entry *ce;
 
 
-	ce = kmem_cache_alloc(cache->c_entry_cache, GFP_KERNEL);
+	ce = kmem_cache_alloc(cache->c_entry_cache, gfp_flags);
 	if (ce) {
 	if (ce) {
 		atomic_inc(&cache->c_entry_count);
 		atomic_inc(&cache->c_entry_count);
 		INIT_LIST_HEAD(&ce->e_lru_list);
 		INIT_LIST_HEAD(&ce->e_lru_list);

+ 1 - 0
include/asm-arm/arch-s3c2410/spi.h

@@ -15,6 +15,7 @@
 
 
 struct s3c2410_spi_info {
 struct s3c2410_spi_info {
 	unsigned long		 pin_cs;	/* simple gpio cs */
 	unsigned long		 pin_cs;	/* simple gpio cs */
+	unsigned int		 num_cs;	/* total chipselects */
 
 
 	void (*set_cs)(struct s3c2410_spi_info *spi, int cs, int pol);
 	void (*set_cs)(struct s3c2410_spi_info *spi, int cs, int pol);
 };
 };

+ 0 - 18
include/asm-mips/mach-au1x00/au1xxx_ide.h

@@ -122,24 +122,6 @@ static const struct drive_list_entry dma_black_list [] = {
 };
 };
 #endif
 #endif
 
 
-/* function prototyping */
-u8 auide_inb(unsigned long port);
-u16 auide_inw(unsigned long port);
-u32 auide_inl(unsigned long port);
-void auide_insw(unsigned long port, void *addr, u32 count);
-void auide_insl(unsigned long port, void *addr, u32 count);
-void auide_outb(u8 addr, unsigned long port);
-void auide_outbsync(ide_drive_t *drive, u8 addr, unsigned long port);
-void auide_outw(u16 addr, unsigned long port);
-void auide_outl(u32 addr, unsigned long port);
-void auide_outsw(unsigned long port, void *addr, u32 count);
-void auide_outsl(unsigned long port, void *addr, u32 count);
-static void auide_tune_drive(ide_drive_t *drive, byte pio);
-static int auide_tune_chipset(ide_drive_t *drive, u8 speed);
-static int auide_ddma_init( _auide_hwif *auide );
-static void auide_setup_ports(hw_regs_t *hw, _auide_hwif *ahwif);
-int __init auide_probe(void);
-
 /*******************************************************************************
 /*******************************************************************************
 * PIO Mode timing calculation :                                                *
 * PIO Mode timing calculation :                                                *
 *                                                                              *
 *                                                                              *

+ 2 - 2
include/asm-mips/mach-db1x00/db1200.h

@@ -173,8 +173,8 @@ static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
 #define AU1XXX_SMC91111_IRQ			DB1200_ETH_INT
 #define AU1XXX_SMC91111_IRQ			DB1200_ETH_INT
 
 
 #define AU1XXX_ATA_PHYS_ADDR		(0x18800000)
 #define AU1XXX_ATA_PHYS_ADDR		(0x18800000)
-#define AU1XXX_ATA_PHYS_LEN			(0x100)
-#define AU1XXX_ATA_REG_OFFSET	(5)
+#define AU1XXX_ATA_REG_OFFSET		(5)
+#define AU1XXX_ATA_PHYS_LEN		(16 << AU1XXX_ATA_REG_OFFSET)
 #define AU1XXX_ATA_INT			DB1200_IDE_INT
 #define AU1XXX_ATA_INT			DB1200_IDE_INT
 #define AU1XXX_ATA_DDMA_REQ		DSCR_CMD0_DMA_REQ1;
 #define AU1XXX_ATA_DDMA_REQ		DSCR_CMD0_DMA_REQ1;
 #define AU1XXX_ATA_RQSIZE		128
 #define AU1XXX_ATA_RQSIZE		128

+ 2 - 2
include/asm-mips/mach-pb1x00/pb1200.h

@@ -186,8 +186,8 @@ static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
 #define AU1XXX_SMC91111_IRQ			PB1200_ETH_INT
 #define AU1XXX_SMC91111_IRQ			PB1200_ETH_INT
 
 
 #define AU1XXX_ATA_PHYS_ADDR		(0x0C800000)
 #define AU1XXX_ATA_PHYS_ADDR		(0x0C800000)
-#define AU1XXX_ATA_PHYS_LEN			(0x100)
-#define AU1XXX_ATA_REG_OFFSET	(5)
+#define AU1XXX_ATA_REG_OFFSET		(5)
+#define AU1XXX_ATA_PHYS_LEN		(16 << AU1XXX_ATA_REG_OFFSET)
 #define AU1XXX_ATA_INT			PB1200_IDE_INT
 #define AU1XXX_ATA_INT			PB1200_IDE_INT
 #define AU1XXX_ATA_DDMA_REQ		DSCR_CMD0_DMA_REQ1;
 #define AU1XXX_ATA_DDMA_REQ		DSCR_CMD0_DMA_REQ1;
 #define AU1XXX_ATA_RQSIZE		128
 #define AU1XXX_ATA_RQSIZE		128

+ 1 - 0
include/asm-um/tlb.h

@@ -1,6 +1,7 @@
 #ifndef __UM_TLB_H
 #ifndef __UM_TLB_H
 #define __UM_TLB_H
 #define __UM_TLB_H
 
 
+#include <linux/pagemap.h>
 #include <linux/swap.h>
 #include <linux/swap.h>
 #include <asm/percpu.h>
 #include <asm/percpu.h>
 #include <asm/pgalloc.h>
 #include <asm/pgalloc.h>

+ 3 - 1
include/linux/iocontext.h

@@ -91,8 +91,10 @@ static inline struct io_context *ioc_task_link(struct io_context *ioc)
 	 * if ref count is zero, don't allow sharing (ioc is going away, it's
 	 * if ref count is zero, don't allow sharing (ioc is going away, it's
 	 * a race).
 	 * a race).
 	 */
 	 */
-	if (ioc && atomic_inc_not_zero(&ioc->refcount))
+	if (ioc && atomic_inc_not_zero(&ioc->refcount)) {
+		atomic_inc(&ioc->nr_tasks);
 		return ioc;
 		return ioc;
+	}
 
 
 	return NULL;
 	return NULL;
 }
 }

+ 1 - 1
include/linux/mbcache.h

@@ -34,7 +34,7 @@ void mb_cache_destroy(struct mb_cache *);
 
 
 /* Functions on cache entries */
 /* Functions on cache entries */
 
 
-struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *);
+struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *, gfp_t);
 int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *,
 int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *,
 			  sector_t, unsigned int[]);
 			  sector_t, unsigned int[]);
 void mb_cache_entry_release(struct mb_cache_entry *);
 void mb_cache_entry_release(struct mb_cache_entry *);

+ 4 - 0
include/linux/ssb/ssb.h

@@ -129,6 +129,10 @@ struct ssb_device {
 	const struct ssb_bus_ops *ops;
 	const struct ssb_bus_ops *ops;
 
 
 	struct device *dev;
 	struct device *dev;
+	/* Pointer to the device that has to be used for
+	 * any DMA related operation. */
+	struct device *dma_dev;
+
 	struct ssb_bus *bus;
 	struct ssb_bus *bus;
 	struct ssb_device_id id;
 	struct ssb_device_id id;
 
 

+ 1 - 1
include/linux/thermal.h

@@ -50,7 +50,7 @@ struct thermal_cooling_device_ops {
 };
 };
 
 
 #define THERMAL_TRIPS_NONE -1
 #define THERMAL_TRIPS_NONE -1
-#define THERMAL_MAX_TRIPS 10
+#define THERMAL_MAX_TRIPS 12
 #define THERMAL_NAME_LENGTH 20
 #define THERMAL_NAME_LENGTH 20
 struct thermal_cooling_device {
 struct thermal_cooling_device {
 	int id;
 	int id;

+ 15 - 2
kernel/printk.c

@@ -643,8 +643,21 @@ static int acquire_console_semaphore_for_printk(unsigned int cpu)
 {
 {
 	int retval = 0;
 	int retval = 0;
 
 
-	if (can_use_console(cpu))
-		retval = !try_acquire_console_sem();
+	if (!try_acquire_console_sem()) {
+		retval = 1;
+
+		/*
+		 * If we can't use the console, we need to release
+		 * the console semaphore by hand to avoid flushing
+		 * the buffer. We need to hold the console semaphore
+		 * in order to do this test safely.
+		 */
+		if (!can_use_console(cpu)) {
+			console_locked = 0;
+			up(&console_sem);
+			retval = 0;
+		}
+	}
 	printk_cpu = UINT_MAX;
 	printk_cpu = UINT_MAX;
 	spin_unlock(&logbuf_lock);
 	spin_unlock(&logbuf_lock);
 	return retval;
 	return retval;

+ 2 - 2
mm/oom_kill.c

@@ -423,7 +423,7 @@ void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask)
 	struct task_struct *p;
 	struct task_struct *p;
 
 
 	cgroup_lock();
 	cgroup_lock();
-	rcu_read_lock();
+	read_lock(&tasklist_lock);
 retry:
 retry:
 	p = select_bad_process(&points, mem);
 	p = select_bad_process(&points, mem);
 	if (PTR_ERR(p) == -1UL)
 	if (PTR_ERR(p) == -1UL)
@@ -436,7 +436,7 @@ retry:
 				"Memory cgroup out of memory"))
 				"Memory cgroup out of memory"))
 		goto retry;
 		goto retry;
 out:
 out:
-	rcu_read_unlock();
+	read_unlock(&tasklist_lock);
 	cgroup_unlock();
 	cgroup_unlock();
 }
 }
 #endif
 #endif

+ 10 - 0
mm/sparse.c

@@ -149,8 +149,18 @@ static inline int sparse_early_nid(struct mem_section *section)
 /* Record a memory area against a node. */
 /* Record a memory area against a node. */
 void __init memory_present(int nid, unsigned long start, unsigned long end)
 void __init memory_present(int nid, unsigned long start, unsigned long end)
 {
 {
+	unsigned long max_arch_pfn = 1UL << (MAX_PHYSMEM_BITS-PAGE_SHIFT);
 	unsigned long pfn;
 	unsigned long pfn;
 
 
+	/*
+	 * Sanity checks - do not allow an architecture to pass
+	 * in larger pfns than the maximum scope of sparsemem:
+	 */
+	if (start >= max_arch_pfn)
+		return;
+	if (end >= max_arch_pfn)
+		end = max_arch_pfn;
+
 	start &= PAGE_SECTION_MASK;
 	start &= PAGE_SECTION_MASK;
 	for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
 	for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
 		unsigned long section = pfn_to_section_nr(pfn);
 		unsigned long section = pfn_to_section_nr(pfn);

+ 1 - 0
mm/vmstat.c

@@ -388,6 +388,7 @@ static char * const migratetype_names[MIGRATE_TYPES] = {
 	"Reclaimable",
 	"Reclaimable",
 	"Movable",
 	"Movable",
 	"Reserve",
 	"Reserve",
+	"Isolate",
 };
 };
 
 
 static void *frag_start(struct seq_file *m, loff_t *pos)
 static void *frag_start(struct seq_file *m, loff_t *pos)

+ 52 - 26
net/ipv4/tcp_input.c

@@ -3841,8 +3841,28 @@ static void tcp_ofo_queue(struct sock *sk)
 	}
 	}
 }
 }
 
 
+static int tcp_prune_ofo_queue(struct sock *sk);
 static int tcp_prune_queue(struct sock *sk);
 static int tcp_prune_queue(struct sock *sk);
 
 
+static inline int tcp_try_rmem_schedule(struct sock *sk, unsigned int size)
+{
+	if (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
+	    !sk_rmem_schedule(sk, size)) {
+
+		if (tcp_prune_queue(sk) < 0)
+			return -1;
+
+		if (!sk_rmem_schedule(sk, size)) {
+			if (!tcp_prune_ofo_queue(sk))
+				return -1;
+
+			if (!sk_rmem_schedule(sk, size))
+				return -1;
+		}
+	}
+	return 0;
+}
+
 static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
 static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
 {
 {
 	struct tcphdr *th = tcp_hdr(skb);
 	struct tcphdr *th = tcp_hdr(skb);
@@ -3892,12 +3912,9 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
 		if (eaten <= 0) {
 		if (eaten <= 0) {
 queue_and_out:
 queue_and_out:
 			if (eaten < 0 &&
 			if (eaten < 0 &&
-			    (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
-			     !sk_rmem_schedule(sk, skb->truesize))) {
-				if (tcp_prune_queue(sk) < 0 ||
-				    !sk_rmem_schedule(sk, skb->truesize))
-					goto drop;
-			}
+			    tcp_try_rmem_schedule(sk, skb->truesize))
+				goto drop;
+
 			skb_set_owner_r(skb, sk);
 			skb_set_owner_r(skb, sk);
 			__skb_queue_tail(&sk->sk_receive_queue, skb);
 			__skb_queue_tail(&sk->sk_receive_queue, skb);
 		}
 		}
@@ -3966,12 +3983,8 @@ drop:
 
 
 	TCP_ECN_check_ce(tp, skb);
 	TCP_ECN_check_ce(tp, skb);
 
 
-	if (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
-	    !sk_rmem_schedule(sk, skb->truesize)) {
-		if (tcp_prune_queue(sk) < 0 ||
-		    !sk_rmem_schedule(sk, skb->truesize))
-			goto drop;
-	}
+	if (tcp_try_rmem_schedule(sk, skb->truesize))
+		goto drop;
 
 
 	/* Disable header prediction. */
 	/* Disable header prediction. */
 	tp->pred_flags = 0;
 	tp->pred_flags = 0;
@@ -4198,6 +4211,32 @@ static void tcp_collapse_ofo_queue(struct sock *sk)
 	}
 	}
 }
 }
 
 
+/*
+ * Purge the out-of-order queue.
+ * Return true if queue was pruned.
+ */
+static int tcp_prune_ofo_queue(struct sock *sk)
+{
+	struct tcp_sock *tp = tcp_sk(sk);
+	int res = 0;
+
+	if (!skb_queue_empty(&tp->out_of_order_queue)) {
+		NET_INC_STATS_BH(LINUX_MIB_OFOPRUNED);
+		__skb_queue_purge(&tp->out_of_order_queue);
+
+		/* Reset SACK state.  A conforming SACK implementation will
+		 * do the same at a timeout based retransmit.  When a connection
+		 * is in a sad state like this, we care only about integrity
+		 * of the connection not performance.
+		 */
+		if (tp->rx_opt.sack_ok)
+			tcp_sack_reset(&tp->rx_opt);
+		sk_mem_reclaim(sk);
+		res = 1;
+	}
+	return res;
+}
+
 /* Reduce allocated memory if we can, trying to get
 /* Reduce allocated memory if we can, trying to get
  * the socket within its memory limits again.
  * the socket within its memory limits again.
  *
  *
@@ -4231,20 +4270,7 @@ static int tcp_prune_queue(struct sock *sk)
 	/* Collapsing did not help, destructive actions follow.
 	/* Collapsing did not help, destructive actions follow.
 	 * This must not ever occur. */
 	 * This must not ever occur. */
 
 
-	/* First, purge the out_of_order queue. */
-	if (!skb_queue_empty(&tp->out_of_order_queue)) {
-		NET_INC_STATS_BH(LINUX_MIB_OFOPRUNED);
-		__skb_queue_purge(&tp->out_of_order_queue);
-
-		/* Reset SACK state.  A conforming SACK implementation will
-		 * do the same at a timeout based retransmit.  When a connection
-		 * is in a sad state like this, we care only about integrity
-		 * of the connection not performance.
-		 */
-		if (tcp_is_sack(tp))
-			tcp_sack_reset(&tp->rx_opt);
-		sk_mem_reclaim(sk);
-	}
+	tcp_prune_ofo_queue(sk);
 
 
 	if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf)
 	if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf)
 		return 0;
 		return 0;

+ 2 - 5
net/mac80211/rx.c

@@ -1050,12 +1050,9 @@ ieee80211_drop_unencrypted(struct ieee80211_txrx_data *rx)
 	if (unlikely(!(rx->fc & IEEE80211_FCTL_PROTECTED) &&
 	if (unlikely(!(rx->fc & IEEE80211_FCTL_PROTECTED) &&
 		     (rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
 		     (rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
 		     (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_NULLFUNC &&
 		     (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_NULLFUNC &&
-		     (rx->key || rx->sdata->drop_unencrypted))) {
-		if (net_ratelimit())
-			printk(KERN_DEBUG "%s: RX non-WEP frame, but expected "
-			       "encryption\n", rx->dev->name);
+		     (rx->key || rx->sdata->drop_unencrypted)))
 		return -EACCES;
 		return -EACCES;
-	}
+
 	return 0;
 	return 0;
 }
 }
 
 

+ 1 - 1
net/rfkill/rfkill.c

@@ -92,7 +92,7 @@ void rfkill_switch_all(enum rfkill_type type, enum rfkill_state state)
 	rfkill_states[type] = state;
 	rfkill_states[type] = state;
 
 
 	list_for_each_entry(rfkill, &rfkill_list, node) {
 	list_for_each_entry(rfkill, &rfkill_list, node) {
-		if (!rfkill->user_claim)
+		if ((!rfkill->user_claim) && (rfkill->type == type))
 			rfkill_toggle_radio(rfkill, state);
 			rfkill_toggle_radio(rfkill, state);
 	}
 	}
 
 

+ 1 - 1
net/rxrpc/af_rxrpc.c

@@ -27,7 +27,7 @@ MODULE_ALIAS_NETPROTO(PF_RXRPC);
 
 
 unsigned rxrpc_debug; // = RXRPC_DEBUG_KPROTO;
 unsigned rxrpc_debug; // = RXRPC_DEBUG_KPROTO;
 module_param_named(debug, rxrpc_debug, uint, S_IWUSR | S_IRUGO);
 module_param_named(debug, rxrpc_debug, uint, S_IWUSR | S_IRUGO);
-MODULE_PARM_DESC(rxrpc_debug, "RxRPC debugging mask");
+MODULE_PARM_DESC(debug, "RxRPC debugging mask");
 
 
 static int sysctl_rxrpc_max_qlen __read_mostly = 10;
 static int sysctl_rxrpc_max_qlen __read_mostly = 10;
 
 

+ 1 - 1
net/rxrpc/rxkad.c

@@ -31,7 +31,7 @@
 
 
 unsigned rxrpc_debug;
 unsigned rxrpc_debug;
 module_param_named(debug, rxrpc_debug, uint, S_IWUSR | S_IRUGO);
 module_param_named(debug, rxrpc_debug, uint, S_IWUSR | S_IRUGO);
-MODULE_PARM_DESC(rxrpc_debug, "rxkad debugging mask");
+MODULE_PARM_DESC(debug, "rxkad debugging mask");
 
 
 struct rxkad_level1_hdr {
 struct rxkad_level1_hdr {
 	__be32	data_size;	/* true data size (excluding padding) */
 	__be32	data_size;	/* true data size (excluding padding) */

+ 3 - 0
net/sched/sch_api.c

@@ -386,6 +386,9 @@ void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
 	if (n == 0)
 	if (n == 0)
 		return;
 		return;
 	while ((parentid = sch->parent)) {
 	while ((parentid = sch->parent)) {
+		if (TC_H_MAJ(parentid) == TC_H_MAJ(TC_H_INGRESS))
+			return;
+
 		sch = qdisc_lookup(sch->dev, TC_H_MAJ(parentid));
 		sch = qdisc_lookup(sch->dev, TC_H_MAJ(parentid));
 		if (sch == NULL) {
 		if (sch == NULL) {
 			WARN_ON(parentid != TC_H_ROOT);
 			WARN_ON(parentid != TC_H_ROOT);